ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0FEQy1MSDctVG91Y2hzY3JlZW4gYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9BREMtTEg3LVRvdWNoc2NyZWVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNmEyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9BREMtTEg3LVRvdWNoc2NyZWVuCkBAIC0wLDAgKzEsNjEgQEAKK1JFQURNRSBvbiB0aGUgQURDL1RvdWNoc2NyZWVuIENvbnRyb2xsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIExINzk1MjQgYW5kIExIN0E0MDQgaW5jbHVkZSBhIGJ1aWx0LWluIEFuYWxvZyB0byBEaWdpdGFsCitjb250cm9sbGVyIChBREMpIHRoYXQgaXMgdXNlZCB0byBwcm9jZXNzIGlucHV0IGZyb20gYSB0b3VjaHNjcmVlbi4KK1RoZSBkcml2ZXIgb25seSBpbXBsZW1lbnRzIGEgZm91ci13aXJlIHRvdWNoIHBhbmVsIHByb3RvY29sLgorCitUaGUgdG91Y2hzY3JlZW4gZHJpdmVyIGlzIG1haW50ZW5hbmNlIGZyZWUgZXhjZXB0IGZvciB0aGUgcGVuLWRvd24gb3IKK3RvdWNoIHRocmVzaG9sZC4gIFNvbWUgcmVzaXN0aXZlIGRpc3BsYXlzIGFuZCBib2FyZCBjb21iaW5hdGlvbnMgbWF5CityZXF1aXJlIHR1bmluZyBvZiB0aGlzIHRocmVzaG9sZC4gIFRoZSBkcml2ZXIgZXhwb3NlcyBzb21lIG9mIGl0J3MKK2ludGVybmFsIHN0YXRlIGluIHRoZSBzeXMgZmlsZXN5c3RlbS4gIElmIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZAord2l0aCBpdCwgQ09ORklHX1NZU0ZTLCBhbmQgc3lzZnMgaXMgbW91bnRlZCBhdCAvc3lzLCB0aGVyZSB3aWxsIGJlIGEKK2RpcmVjdG9yeQorCisgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hZGMtbGg3LjAKKworY29udGFpbmluZyB0aGVzZSBmaWxlcy4KKworICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgIDQwOTYgSmFuICAxIDAwOjAwIHNhbXBsZXMKKyAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA0MDk2IEphbiAgMSAwMDowMCB0aHJlc2hvbGQKKyAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA0MDk2IEphbiAgMSAwMDowMCB0aHJlc2hvbGRfcmFuZ2UKKworVGhlIHRocmVzaG9sZCBpcyB0aGUgY3VycmVudCB0b3VjaCB0aHJlc2hvbGQuICBJdCBkZWZhdWx0cyB0byA3NTAgb24KK21vc3QgdGFyZ2V0cy4KKworICAjIGNhdCB0aHJlc2hvbGQKKyA3NTAKKworVGhlIHRocmVzaG9sZF9yYW5nZSBjb250YWlucyB0aGUgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUKK3RocmVzaG9sZC4gIFZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ugd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLgorCisgICMgY2F0IHRocmVzaG9sZF9yYW5nZQorICAwIDEwMjMKKworVG8gY2hhbmdlIHRoZSB0aHJlc2hvbGQsIHdyaXRlIGEgdmFsdWUgdG8gdGhlIHRocmVzaG9sZCBmaWxlLgorCisgICMgZWNobyA1MDAgPiB0aHJlc2hvbGQKKyAgIyBjYXQgdGhyZXNob2xkCisgIDUwMAorCitUaGUgc2FtcGxlcyBmaWxlIGNvbnRhaW5zIHRoZSBtb3N0IHJlY2VudGx5IHNhbXBsZWQgdmFsdWVzIGZyb20gdGhlCitBREMuICBUaGVyZSBhcmUgMTIuICBCZWxvdyBhcmUgdHlwaWNhbCBvZiB0aGUgbGFzdCBzYW1wbGVkIHZhbHVlcyB3aGVuCit0aGUgcGVuIGhhcyBiZWVuIHJlbGVhc2VkLiAgVGhlIGZpcnN0IHR3byBhbmQgbGFzdCB0d28gc2FtcGxlcyBhcmUgZm9yCitkZXRlY3Rpbmcgd2hldGhlciBvciBub3QgdGhlIHBlbiBpcyBkb3duLiAgVGhlIHRoaXJkIHRocm91Z2ggc2l4dGggYXJlCitYIGNvb3JkaW5hdGUgc2FtcGxlcy4gIFRoZSBzZXZlbnRoIHRocm91Z2ggdGVudGggYXJlIFkgY29vcmRpbmF0ZQorc2FtcGxlcy4KKworICAjIGNhdCBzYW1wbGVzCisgIDEwMjMgMTAyMyAwIDAgMCAwIDUzMCA1MjkgNTMwIDUyOSAxMDIzIDEwMjMKKworVG8gZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSB0aHJlc2hvbGQsIHByZXNzIG9uIHRoZSB0b3VjaCBwYW5lbCB3aXRoIGFuCithcHByb3ByaWF0ZSBzdHlsdXMgYW5kIHJlYWQgdGhlIHZhbHVlcyBmcm9tIHNhbXBsZXMuCisKKyAgIyBjYXQgc2FtcGxlcworICAxMDIzIDY3NiA5MiAxMDMgMTAxIDEwMiA4NTUgOTE5IDkyMiA5MjIgMTAyMyA2NzkKKworVGhlIGZpcnN0IGFuZCBlbGV2ZW50aCBzYW1wbGVzIGFyZSBkaXNjYXJkZWQuICBUaHVzLCB0aGUgaW1wb3J0YW50Cit2YWx1ZXMgYXJlIHRoZSBzZWNvbmQgYW5kIHR3ZWxmdGggd2hpY2ggYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorcGVuIGlzIGRvd24uICBXaGVuIGJvdGggYXJlIGJlbG93IHRoZSB0aHJlc2hvbGQsIHRoZSBkcml2ZXIgcmVnaXN0ZXJzCit0aGF0IHRoZSBwZW4gaXMgZG93bi4gIFdoZW4gZWl0aGVyIGlzIGFib3ZlIHRoZSB0aHJlc2hvbGQsIGl0CityZWdpc3RlcnMgdGhlbiBwZW4gaXMgdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MQ0RQYW5lbHMgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MQ0RQYW5lbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxYjIxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xDRFBhbmVscwpAQCAtMCwwICsxLDU5IEBACitSRUFETUUgb24gdGhlIExDRCBQYW5lbHMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHNldmVyYWwgTENEIHBhbmVscywgYXZhaWxhYmxlIGZyb20gTG9naWMgUEQsCithcmUgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuICBUaGlzIFJFQURNRSB3aWxsIGhlbHAgeW91Cit1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYW5kIGdpdmUgeW91IHNvbWUgZ3VpZGFuY2UgZm9yCithZGRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgcGFuZWxzIGlmIHlvdSB3aXNoLgorCisKK2xjZC1wYW5lbHMuaAorLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG5vIHdheSwgYXQgcHJlc2VudCwgdG8gZGV0ZWN0IHdoaWNoIHBhbmVsIGlzIGF0dGFjaGVkIHRvIHRoZQorc3lzdGVtIGF0IHJ1bnRpbWUuICBUaHVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBzdGF0aWMuICBUaGUgZmlsZQorYXJjaC9hcm0vbWFjaC1sZDdhNDB4L2xjZC1wYW5lbHMuaCAob3Igc2ltaWxhcikgZGVmaW5lcyBhbGwgb2YgdGhlCitwYW5lbCBzcGVjaWZpYyBwYXJhbWV0ZXJzLgorCitJdCBzaG91bGQgYmUgcG9zc2libGUgZm9yIHRoaXMgZGF0YSB0byBiZSBzaGFyZWQgYW1vbmcgc2V2ZXJhbCBkZXZpY2UKK2ZhbWlsaWVzLiAgVGhlIGN1cnJlbnQgbGF5b3V0IG1heSBiZSBpbnN1ZmZpY2llbnRseSBnZW5lcmFsLCBidXQgaXQgaXMKK2FtZW5hYmxlIHRvIGltcHJvdmVtZW50LgorCisKK1BJWEVMX0NMT0NLCistLS0tLS0tLS0tLQorCitUaGUgcGFuZWwgZGF0YSBzaGVldHMgd2lsbCBnaXZlIGEgcmFuZ2Ugb2YgYWNjZXB0YWJsZSBwaXhlbCBjbG9ja3MuCitUaGUgZnVuZGFtZW50YWwgTENEQ0xLIGlucHV0IGZyZXF1ZW5jeSBpcyBkaXZpZGVkIGRvd24gYnkgYSBQQ0QKK2NvbnN0YW50IGluIGZpZWxkICcudGltMicuICBJdCBtYXkgaGFwcGVuIHRoYXQgaXQgaXMgaW1wb3NzaWJsZSB0byBzZXQKK3RoZSBwaXhlbCBjbG9jayB3aXRoaW4gdGhpcyByYW5nZS4gIEEgY2xvY2sgd2hpY2ggaXMgdG9vIHNsb3cgd2lsbAordGVuZCB0byBmbGlja2VyLiAgRm9yIHRoZSBoaWdoZXN0IHF1YWxpdHkgaW1hZ2UsIHNldCB0aGUgY2xvY2sgYXMgaGlnaAorYXMgcG9zc2libGUuCisKKworTUFSR0lOUworLS0tLS0tLQorCitUaGVzZSB2YWx1ZXMgbWF5IGJlIGRpZmZpY3VsdCB0byBnbGVhbiBmcm9tIHRoZSBwYW5lbCBkYXRhIHNoZWV0LiAgSW4KK3RoZSBjYXNlIG9mIHRoZSBTaGFycCBwYW5lbHMsIHRoZSB1cHBlciBtYXJnaW4gaXMgZXhwbGljaXRseSBjYWxsZWQKK291dCBhcyBhIHNwZWNpZmljIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZyYW1lLiAgVGhlCitvdGhlciB2YWx1ZXMgbWF5IG5vdCBtYXR0ZXIgYXMgbXVjaCBhcyB0aGUgcGFuZWxzIHRlbmQgdG8KK2F1dG9tYXRpY2FsbHkgY2VudGVyIHRoZSBpbWFnZS4KKworCitTeW5jIFNlbnNlCistLS0tLS0tLS0tCisKK1RoZSBzZW5zZSBvZiB0aGUgaHN5bmMgYW5kIHZzeW5jIHB1bHNlcyBtYXkgYmUgY2FsbGVkIG91dCBpbiB0aGUgZGF0YQorc2hlZXQuICBPbiBvbmUgcGFuZWwsIHRoZSBzZW5zZSBvZiB0aGVzZSBwdWxzZXMgZGV0ZXJtaW5lIHRoZSBoZWlnaHQKK29mIHRoZSB2aXNpYmxlIHJlZ2lvbiBvbiB0aGUgcGFuZWwuICBNb3N0IG9mIHRoZSBTaGFycCBwYW5lbHMgdXNlCituZWdhdGl2ZSBzZW5zZSBzeW5jIHB1bHNlcyBzZXQgYnkgdGhlIFRJTTJfSUhTIGFuZCBUSU0yX0lWUyBiaXRzIGluCisnLnRpbTInLgorCisKK1BlbCBMYXlvdXQKKy0tLS0tLS0tLS0KKworVGhlIFNoYXJwIGNvbG9yIFRGVCBwYW5lbHMgYXJlIGFsbCBjb25maWd1cmVkIGZvciAxNiBiaXQgZGlyZWN0IGNvbG9yCittb2Rlcy4gIFRoZSBhbWJhLWxjZCBkcml2ZXIgc2V0cyB0aGUgcGVsIG1vZGUgdG8gNTY1IGZvciA1IGJpdHMgb2YKK2VhY2ggcmVkIGFuZCBibHVlIGFuZCA2IGJpdHMgb2YgZ3JlZW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggNDNhYjExOS4uZjUwY2Y4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMjEyLDE1ICsyMTIsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJU3VwcG9ydCBmb3IgTkVDIEREQjUwNzQgYW5kIEREQjU0NzYgZXZhbHVhdGlvbiBib2FyZHMuCi1XaGVuOglKdW5lIDIwMDYKLVdoeToJQm9hcmQgc3BlY2lmaWMgY29kZSBkb2Vzbid0IGJ1aWxkIGFueW1vcmUgc2luY2UgfjIuNi4wIGFuZCBubwotCXVzZXJzIGhhdmUgY29tcGxhaW5lZCBpbmRpY2F0aW5nIHRoZXJlIGlzIG5vIG1vcmUgbmVlZCBmb3IgdGhlc2UKLQlib2FyZHMuICBUaGlzIHNob3VsZCByZWFsbHkgYmUgY29uc2lkZXJlZCBhIGxhc3QgY2FsbC4KLVdobzoJUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJVVNCIGRyaXZlciBBUEkgbW92ZXMgdG8gRVhQT1JUX1NZTUJPTF9HUEwKIFdoZW46CUZlYnVhcnkgMjAwOAogRmlsZXM6CWluY2x1ZGUvbGludXgvdXNiLmgsIGRyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0CmluZGV4IDZkNTAxOTAuLjU5YTkxOWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbm90aWZ5LnR4dApAQCAtNjksMTcgKzY5LDEzNSBAQAogCWludCBpbm90aWZ5X3JtX3dhdGNoIChpbnQgZmQsIF9fdTMyIG1hc2spOwogCiAKLShpaWkpIEludGVybmFsIEtlcm5lbCBJbXBsZW1lbnRhdGlvbgorKGlpaSkgS2VybmVsIEludGVyZmFjZQogCi1FYWNoIGlub3RpZnkgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGlub3RpZnlfZGV2aWNlIHN0cnVjdHVyZS4KK0lub3RpZnkncyBrZXJuZWwgQVBJIGNvbnNpc3RzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgd2F0Y2hlcyBhbmQgYW4KK2V2ZW50IGNhbGxiYWNrLgorCitUbyB1c2UgdGhlIGtlcm5lbCBBUEksIHlvdSBtdXN0IGZpcnN0IGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZSB3aXRoIGEgc2V0CitvZiBpbm90aWZ5X29wZXJhdGlvbnMuICBZb3UgYXJlIGdpdmVuIGFuIG9wYXF1ZSBpbm90aWZ5X2hhbmRsZSwgd2hpY2ggeW91IHVzZQorZm9yIGFueSBmdXJ0aGVyIGNhbGxzIHRvIGlub3RpZnkuCisKKyAgICBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloID0gaW5vdGlmeV9pbml0KG15X2V2ZW50X2hhbmRsZXIpOworCitZb3UgbXVzdCBwcm92aWRlIGEgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgZXZlbnRzIGFuZCBhIGZ1bmN0aW9uIGZvciBkZXN0cm95aW5nCit0aGUgaW5vdGlmeSB3YXRjaC4KKworICAgIHZvaWQgaGFuZGxlX2V2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCwgdTMyIHdkLCB1MzIgbWFzaywKKyAgICAJICAgICAgICAgICAgICB1MzIgY29va2llLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorCisJd2F0Y2ggLSB0aGUgcG9pbnRlciB0byB0aGUgaW5vdGlmeV93YXRjaCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNhbGwKKwl3ZCAtIHRoZSB3YXRjaCBkZXNjcmlwdG9yCisJbWFzayAtIGRlc2NyaWJlcyB0aGUgZXZlbnQgdGhhdCBvY2N1cnJlZAorCWNvb2tpZSAtIGFuIGlkZW50aWZpZXIgZm9yIHN5bmNocm9uaXppbmcgZXZlbnRzCisJbmFtZSAtIHRoZSBkZW50cnkgbmFtZSBmb3IgYWZmZWN0ZWQgZmlsZXMgaW4gYSBkaXJlY3RvcnktYmFzZWQgZXZlbnQKKwlpbm9kZSAtIHRoZSBhZmZlY3RlZCBpbm9kZSBpbiBhIGRpcmVjdG9yeS1iYXNlZCBldmVudAorCisgICAgdm9pZCBkZXN0cm95X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKKworWW91IG1heSBhZGQgd2F0Y2hlcyBieSBwcm92aWRpbmcgYSBwcmUtYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbm90aWZ5X3dhdGNoCitzdHJ1Y3R1cmUgYW5kIHNwZWNpZnlpbmcgdGhlIGlub2RlIHRvIHdhdGNoIGFsb25nIHdpdGggYW4gaW5vdGlmeSBldmVudCBtYXNrLgorWW91IG11c3QgcGluIHRoZSBpbm9kZSBkdXJpbmcgdGhlIGNhbGwuICBZb3Ugd2lsbCBsaWtlbHkgd2lzaCB0byBlbWJlZCB0aGUKK2lub3RpZnlfd2F0Y2ggc3RydWN0dXJlIGluIGEgc3RydWN0dXJlIG9mIHlvdXIgb3duIHdoaWNoIGNvbnRhaW5zIG90aGVyCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgd2F0Y2guICBPbmNlIHlvdSBhZGQgYW4gaW5vdGlmeSB3YXRjaCwgaXQgaXMgaW1tZWRpYXRlbHkKK3N1YmplY3QgdG8gcmVtb3ZhbCBkZXBlbmRpbmcgb24gZmlsZXN5c3RlbSBldmVudHMuICBZb3UgbXVzdCBncmFiIGEgcmVmZXJlbmNlIGlmCit5b3UgZGVwZW5kIG9uIHRoZSB3YXRjaCBoYW5naW5nIGFyb3VuZCBhZnRlciB0aGUgY2FsbC4KKworICAgIGlub3RpZnlfaW5pdF93YXRjaCgmbXlfd2F0Y2gtPml3YXRjaCk7CisgICAgaW5vdGlmeV9nZXRfd2F0Y2goJm15X3dhdGNoLT5pd2F0Y2gpOwkvLyBvcHRpb25hbAorICAgIHMzMiB3ZCA9IGlub3RpZnlfYWRkX3dhdGNoKGloLCAmbXlfd2F0Y2gtPml3YXRjaCwgaW5vZGUsIG1hc2spOworICAgIGlub3RpZnlfcHV0X3dhdGNoKCZteV93YXRjaC0+aXdhdGNoKTsJLy8gb3B0aW9uYWwKKworWW91IG1heSB1c2UgdGhlIHdhdGNoIGRlc2NyaXB0b3IgKHdkKSBvciB0aGUgYWRkcmVzcyBvZiB0aGUgaW5vdGlmeV93YXRjaCBmb3IKK290aGVyIGlub3RpZnkgb3BlcmF0aW9ucy4gIFlvdSBtdXN0IG5vdCBkaXJlY3RseSByZWFkIG9yIG1hbmlwdWxhdGUgZGF0YSBpbiB0aGUKK2lub3RpZnlfd2F0Y2guICBBZGRpdGlvbmFsbHksIHlvdSBtdXN0IG5vdCBjYWxsIGlub3RpZnlfYWRkX3dhdGNoKCkgbW9yZSB0aGFuCitvbmNlIGZvciBhIGdpdmVuIGlub3RpZnlfd2F0Y2ggc3RydWN0dXJlLCB1bmxlc3MgeW91IGhhdmUgZmlyc3QgY2FsbGVkIGVpdGhlcgoraW5vdGlmeV9ybV93YXRjaCgpIG9yIGlub3RpZnlfcm1fd2QoKS4KKworVG8gZGV0ZXJtaW5lIGlmIHlvdSBoYXZlIGFscmVhZHkgcmVnaXN0ZXJlZCBhIHdhdGNoIGZvciBhIGdpdmVuIGlub2RlLCB5b3UgbWF5CitjYWxsIGlub3RpZnlfZmluZF93YXRjaCgpLCB3aGljaCBnaXZlcyB5b3UgYm90aCB0aGUgd2QgYW5kIHRoZSB3YXRjaCBwb2ludGVyIGZvcgordGhlIGlub3RpZnlfd2F0Y2gsIG9yIGFuIGVycm9yIGlmIHRoZSB3YXRjaCBkb2VzIG5vdCBleGlzdC4KKworICAgIHdkID0gaW5vdGlmeV9maW5kX3dhdGNoKGloLCBpbm9kZSwgJndhdGNocCk7CisKK1lvdSBtYXkgdXNlIGNvbnRhaW5lcl9vZigpIG9uIHRoZSB3YXRjaCBwb2ludGVyIHRvIGFjY2VzcyB5b3VyIG93biBkYXRhCithc3NvY2lhdGVkIHdpdGggYSBnaXZlbiB3YXRjaC4gIFdoZW4gYW4gZXhpc3Rpbmcgd2F0Y2ggaXMgZm91bmQsCitpbm90aWZ5X2ZpbmRfd2F0Y2goKSBidW1wcyB0aGUgcmVmY291bnQgYmVmb3JlIHJlbGVhc2luZyBpdHMgbG9ja3MuICBZb3UgbXVzdAorcHV0IHRoYXQgcmVmZXJlbmNlIHdpdGg6CisKKyAgICBwdXRfaW5vdGlmeV93YXRjaCh3YXRjaHApOworCitDYWxsIGlub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goKSB0byB1cGRhdGUgdGhlIGV2ZW50IG1hc2sgZm9yIGFuIGV4aXN0aW5nIHdhdGNoLgoraW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaCgpIHJldHVybnMgdGhlIHdkIG9mIHRoZSB1cGRhdGVkIHdhdGNoLCBvciBhbiBlcnJvciBpZgordGhlIHdhdGNoIGRvZXMgbm90IGV4aXN0LgorCisgICAgd2QgPSBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKGloLCBpbm9kZSwgbWFzayk7CisKK0FuIGV4aXN0aW5nIHdhdGNoIG1heSBiZSByZW1vdmVkIGJ5IGNhbGxpbmcgZWl0aGVyIGlub3RpZnlfcm1fd2F0Y2goKSBvcgoraW5vdGlmeV9ybV93ZCgpLgorCisgICAgaW50IHJldCA9IGlub3RpZnlfcm1fd2F0Y2goaWgsICZteV93YXRjaC0+aXdhdGNoKTsKKyAgICBpbnQgcmV0ID0gaW5vdGlmeV9ybV93ZChpaCwgd2QpOworCitBIHdhdGNoIG1heSBiZSByZW1vdmVkIHdoaWxlIGV4ZWN1dGluZyB5b3VyIGV2ZW50IGhhbmRsZXIgd2l0aCB0aGUgZm9sbG93aW5nOgorCisgICAgaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGloLCBpd2F0Y2gpOworCitDYWxsIGlub3RpZnlfZGVzdHJveSgpIHRvIHJlbW92ZSBhbGwgd2F0Y2hlcyBmcm9tIHlvdXIgaW5vdGlmeSBpbnN0YW5jZSBhbmQKK3JlbGVhc2UgaXQuICBJZiB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVmZXJlbmNlcywgaW5vdGlmeV9kZXN0cm95KCkgd2lsbCBjYWxsCit5b3VyIGRlc3Ryb3lfd2F0Y2ggb3AgZm9yIGVhY2ggd2F0Y2guCisKKyAgICBpbm90aWZ5X2Rlc3Ryb3koaWgpOworCitXaGVuIGlub3RpZnkgcmVtb3ZlcyBhIHdhdGNoLCBpdCBzZW5kcyBhbiBJTl9JR05PUkVEIGV2ZW50IHRvIHlvdXIgY2FsbGJhY2suCitZb3UgbWF5IHVzZSB0aGlzIGV2ZW50IGFzIGFuIGluZGljYXRpb24gdG8gZnJlZSB0aGUgd2F0Y2ggbWVtb3J5LiAgTm90ZSB0aGF0Citpbm90aWZ5IG1heSByZW1vdmUgYSB3YXRjaCBkdWUgdG8gZmlsZXN5c3RlbSBldmVudHMsIGFzIHdlbGwgYXMgYnkgeW91ciByZXF1ZXN0LgorSWYgeW91IHVzZSBJTl9PTkVTSE9ULCBpbm90aWZ5IHdpbGwgcmVtb3ZlIHRoZSB3YXRjaCBhZnRlciB0aGUgZmlyc3QgZXZlbnQsIGF0Cit3aGljaCBwb2ludCB5b3UgbWF5IGNhbGwgdGhlIGZpbmFsIGlub3RpZnlfcHV0X3dhdGNoLgorCisoaXYpIEtlcm5lbCBJbnRlcmZhY2UgUHJvdG90eXBlcworCisJc3RydWN0IGlub3RpZnlfaGFuZGxlICppbm90aWZ5X2luaXQoc3RydWN0IGlub3RpZnlfb3BlcmF0aW9ucyAqb3BzKTsKKworCWlub3RpZnlfaW5pdF93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpOworCisJczMyIGlub3RpZnlfYWRkX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCisJCSAgICAgICAgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAorCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG1hc2spOworCisJczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICoqd2F0Y2hwKTsKKworCXMzMiBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCisJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG1hc2spOworCisJaW50IGlub3RpZnlfcm1fd2Qoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgdTMyIHdkKTsKKworCWludCBpbm90aWZ5X3JtX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCisJCQkgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCk7CisKKwl2b2lkIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJCQkgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKKworCXZvaWQgaW5vdGlmeV9kZXN0cm95KHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgpOworCisJdm9pZCBnZXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpOworCXZvaWQgcHV0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKKworCisodikgSW50ZXJuYWwgS2VybmVsIEltcGxlbWVudGF0aW9uCisKK0VhY2ggaW5vdGlmeSBpbnN0YW5jZSBpcyByZXByZXNlbnRlZCBieSBhbiBpbm90aWZ5X2hhbmRsZSBzdHJ1Y3R1cmUuCitJbm90aWZ5J3MgdXNlcnNwYWNlIGNvbnN1bWVycyBhbHNvIGhhdmUgYW4gaW5vdGlmeV9kZXZpY2Ugd2hpY2ggaXMKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgaW5vdGlmeV9oYW5kbGUsIGFuZCBvbiB3aGljaCBldmVudHMgYXJlIHF1ZXVlZC4KIAogRWFjaCB3YXRjaCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5vdGlmeV93YXRjaCBzdHJ1Y3R1cmUuICBXYXRjaGVzIGFyZSBjaGFpbmVkCi1vZmYgb2YgZWFjaCBhc3NvY2lhdGVkIGRldmljZSBhbmQgZWFjaCBhc3NvY2lhdGVkIGlub2RlLgorb2ZmIG9mIGVhY2ggYXNzb2NpYXRlZCBpbm90aWZ5X2hhbmRsZSBhbmQgZWFjaCBhc3NvY2lhdGVkIGlub2RlLgogCi1TZWUgZnMvaW5vdGlmeS5jIGZvciB0aGUgbG9ja2luZyBhbmQgbGlmZXRpbWUgcnVsZXMuCitTZWUgZnMvaW5vdGlmeS5jIGFuZCBmcy9pbm90aWZ5X3VzZXIuYyBmb3IgdGhlIGxvY2tpbmcgYW5kIGxpZmV0aW1lIHJ1bGVzLgogCiAKLShpdikgUmF0aW9uYWxlCisodmkpIFJhdGlvbmFsZQogCiBROiBXaGF0IGlzIHRoZSBkZXNpZ24gZGVjaXNpb24gYmVoaW5kIG5vdCB0eWluZyB0aGUgd2F0Y2ggdG8gdGhlIG9wZW4gZmQgb2YKICAgIHRoZSB3YXRjaGVkIG9iamVjdD8KQEAgLTE0NSw3ICsyNjMsNyBAQAogICAgZmlsZSBkZXNjcmlwdG9yLWJhc2VkIG9uZSB0aGF0IGFsbG93cyBiYXNpYyBmaWxlIEkvTyBhbmQgcG9sbC9zZWxlY3QuCiAgICBPYnRhaW5pbmcgdGhlIGZkIGFuZCBtYW5hZ2luZyB0aGUgd2F0Y2hlcyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBlaXRoZXIgdmlhIGEKICAgIGRldmljZSBmaWxlIG9yIGEgZmFtaWx5IG9mIG5ldyBzeXN0ZW0gY2FsbHMuICBXZSBkZWNpZGVkIHRvIGltcGxlbWVudCBhCi0gICBmYW1pbHkgb2Ygc3lzdGVtIGNhbGxzIGJlY2F1c2UgdGhhdCBpcyB0aGUgcHJlZmZlcmVkIGFwcHJvYWNoIGZvciBuZXcga2VybmVsCisgICBmYW1pbHkgb2Ygc3lzdGVtIGNhbGxzIGJlY2F1c2UgdGhhdCBpcyB0aGUgcHJlZmVycmVkIGFwcHJvYWNoIGZvciBuZXcga2VybmVsCiAgICBpbnRlcmZhY2VzLiAgVGhlIG9ubHkgcmVhbCBkaWZmZXJlbmNlIHdhcyB3aGV0aGVyIHdlIHdhbnRlZCB0byB1c2Ugb3BlbigyKQogICAgYW5kIGlvY3RsKDIpIG9yIGEgY291cGxlIG9mIG5ldyBzeXN0ZW0gY2FsbHMuICBTeXN0ZW0gY2FsbHMgYmVhdCBpb2N0bHMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvaXBvaWIudHh0CmluZGV4IDVjNWE0Y2MuLjE4NzAzNTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dApAQCAtMSwxMCArMSwxMCBAQAogSVAgT1ZFUiBJTkZJTklCQU5ECiAKICAgVGhlIGliX2lwb2liIGRyaXZlciBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSVAgb3ZlciBJbmZpbmlCYW5kCi0gIHByb3RvY29sIGFzIHNwZWNpZmllZCBieSB0aGUgbGF0ZXN0IEludGVybmV0LURyYWZ0cyBpc3N1ZWQgYnkgdGhlCi0gIElFVEYgaXBvaWIgd29ya2luZyBncm91cC4gIEl0IGlzIGEgIm5hdGl2ZSIgaW1wbGVtZW50YXRpb24gaW4gdGhlCi0gIHNlbnNlIG9mIHNldHRpbmcgdGhlIGludGVyZmFjZSB0eXBlIHRvIEFSUEhSRF9JTkZJTklCQU5EIGFuZCB0aGUKLSAgaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggdG8gMjAgKGVhcmxpZXIgcHJvcHJpZXRhcnkgaW1wbGVtZW50YXRpb25zCisgIHByb3RvY29sIGFzIHNwZWNpZmllZCBieSBSRkMgNDM5MSBhbmQgNDM5MiwgaXNzdWVkIGJ5IHRoZSBJRVRGIGlwb2liCisgIHdvcmtpbmcgZ3JvdXAuICBJdCBpcyBhICJuYXRpdmUiIGltcGxlbWVudGF0aW9uIGluIHRoZSBzZW5zZSBvZgorICBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgdHlwZSB0byBBUlBIUkRfSU5GSU5JQkFORCBhbmQgdGhlIGhhcmR3YXJlCisgIGFkZHJlc3MgbGVuZ3RoIHRvIDIwIChlYXJsaWVyIHByb3ByaWV0YXJ5IGltcGxlbWVudGF0aW9ucwogICBtYXNxdWVyYWRlZCB0byB0aGUga2VybmVsIGFzIGV0aGVybmV0IGludGVyZmFjZXMpLgogCiBQYXJ0aXRpb25zIGFuZCBQX0tleXMKQEAgLTUzLDMgKzUzLDcgQEAKIAogICBJRVRGIElQIG92ZXIgSW5maW5pQmFuZCAoaXBvaWIpIFdvcmtpbmcgR3JvdXAKICAgICBodHRwOi8vaWV0Zi5vcmcvaHRtbC5jaGFydGVycy9pcG9pYi1jaGFydGVyLmh0bWwKKyAgVHJhbnNtaXNzaW9uIG9mIElQIG92ZXIgSW5maW5pQmFuZCAoSVBvSUIpIChSRkMgNDM5MSkKKyAgICBodHRwOi8vaWV0Zi5vcmcvcmZjL3JmYzQzOTEudHh0IAorICBJUCBvdmVyIEluZmluaUJhbmQgKElQb0lCKSBBcmNoaXRlY3R1cmUgKFJGQyA0MzkyKQorICAgIGh0dHA6Ly9pZXRmLm9yZy9yZmMvcmZjNDM5Mi50eHQgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGIzYTYxODcuLmE5ZDNhMTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xNDAyLDYgKzE0MDIsMTUgQEAKIAkJCUlmIGVuYWJsZWQgYXQgYm9vdCB0aW1lLCAvc2VsaW51eC9kaXNhYmxlIGNhbiBiZSB1c2VkCiAJCQlsYXRlciB0byBkaXNhYmxlIHByaW9yIHRvIGluaXRpYWwgcG9saWN5IGxvYWQuCiAKKwlzZWxpbnV4X2NvbXBhdF9uZXQgPQorCQkJW1NFTElOVVhdIFNldCBpbml0aWFsIHNlbGludXhfY29tcGF0X25ldCBmbGFnIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0OiB7ICIwIiB8ICIxIiB9CisgICAgICAgICAgICAgICAgICAgICAgICAwIC0tIHVzZSBuZXcgc2VjbWFyay1iYXNlZCBwYWNrZXQgY29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDEgLS0gdXNlIGxlZ2FjeSBwYWNrZXQgY29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgMCAocHJlZmVycmVkKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdmlhCisgICAgICAgICAgICAgICAgICAgICAgICAvc2VsaW51eC9jb21wYXRfbmV0LgorCiAJc2VyaWFsbnVtYmVyCVtCVUdTPUlBLTMyXQogCiAJc2dfZGVmX3Jlc2VydmVkX3NpemU9CVtTQ1NJXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IGM2MWQ4YjguLjQ3MTA4NDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTE5LDYgKzE5LDcgQEAKICAgICAgLSBDb250cm9sIGRlcGVuZGVuY2llcy4KICAgICAgLSBTTVAgYmFycmllciBwYWlyaW5nLgogICAgICAtIEV4YW1wbGVzIG9mIG1lbW9yeSBiYXJyaWVyIHNlcXVlbmNlcy4KKyAgICAgLSBSZWFkIG1lbW9yeSBiYXJyaWVycyB2cyBsb2FkIHNwZWN1bGF0aW9uLgogCiAgKCopIEV4cGxpY2l0IGtlcm5lbCBiYXJyaWVycy4KIApAQCAtMjQ4LDcgKzI0OSw3IEBACiAgICAgIHdlIG1heSBnZXQgZWl0aGVyIG9mOgogCiAJU1RPUkUgKkEgPSBYOyBZID0gTE9BRCAqQTsKLQlTVE9SRSAqQSA9IFk7CisJU1RPUkUgKkEgPSBZID0gWDsKIAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNDQsOSArMzQ1LDEyIEBACiAKICAoNCkgR2VuZXJhbCBtZW1vcnkgYmFycmllcnMuCiAKLSAgICAgQSBnZW5lcmFsIG1lbW9yeSBiYXJyaWVyIGlzIGEgY29tYmluYXRpb24gb2YgYm90aCBhIHJlYWQgbWVtb3J5IGJhcnJpZXIKLSAgICAgYW5kIGEgd3JpdGUgbWVtb3J5IGJhcnJpZXIuICBJdCBpcyBhIHBhcnRpYWwgb3JkZXJpbmcgb3ZlciBib3RoIGxvYWRzIGFuZAotICAgICBzdG9yZXMuCisgICAgIEEgZ2VuZXJhbCBtZW1vcnkgYmFycmllciBnaXZlcyBhIGd1YXJhbnRlZSB0aGF0IGFsbCB0aGUgTE9BRCBhbmQgU1RPUkUKKyAgICAgb3BlcmF0aW9ucyBzcGVjaWZpZWQgYmVmb3JlIHRoZSBiYXJyaWVyIHdpbGwgYXBwZWFyIHRvIGhhcHBlbiBiZWZvcmUgYWxsCisgICAgIHRoZSBMT0FEIGFuZCBTVE9SRSBvcGVyYXRpb25zIHNwZWNpZmllZCBhZnRlciB0aGUgYmFycmllciB3aXRoIHJlc3BlY3QgdG8KKyAgICAgdGhlIG90aGVyIGNvbXBvbmVudHMgb2YgdGhlIHN5c3RlbS4KKworICAgICBBIGdlbmVyYWwgbWVtb3J5IGJhcnJpZXIgaXMgYSBwYXJ0aWFsIG9yZGVyaW5nIG92ZXIgYm90aCBsb2FkcyBhbmQgc3RvcmVzLgogCiAgICAgIEdlbmVyYWwgbWVtb3J5IGJhcnJpZXJzIGltcGx5IGJvdGggcmVhZCBhbmQgd3JpdGUgbWVtb3J5IGJhcnJpZXJzLCBhbmQgc28KICAgICAgY2FuIHN1YnN0aXR1dGUgZm9yIGVpdGhlci4KQEAgLTU0Niw5ICs1NTAsOSBAQAogCT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT0KIAlhID0gMTsKIAk8d3JpdGUgYmFycmllcj4KLQliID0gMjsJCXggPSBhOworCWIgPSAyOwkJeCA9IGI7CiAJCQk8cmVhZCBiYXJyaWVyPgotCQkJeSA9IGI7CisJCQl5ID0gYTsKIAogT3I6CiAKQEAgLTU2Myw2ICs1NjcsMTggQEAKIEJhc2ljYWxseSwgdGhlIHJlYWQgYmFycmllciBhbHdheXMgaGFzIHRvIGJlIHRoZXJlLCBldmVuIHRob3VnaCBpdCBjYW4gYmUgb2YKIHRoZSAid2Vha2VyIiB0eXBlLgogCitbIV0gTm90ZSB0aGF0IHRoZSBzdG9yZXMgYmVmb3JlIHRoZSB3cml0ZSBiYXJyaWVyIHdvdWxkIG5vcm1hbGx5IGJlIGV4cGVjdGVkIHRvCittYXRjaCB0aGUgbG9hZHMgYWZ0ZXIgdGhlIHJlYWQgYmFycmllciBvciBkYXRhIGRlcGVuZGVuY3kgYmFycmllciwgYW5kIHZpY2UKK3ZlcnNhOgorCisJQ1BVIDEgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFUgMgorCT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09CisJYSA9IDE7ICAgICAgICAgICB9LS0tLSAgIC0tLT57ICB2ID0gYworCWIgPSAyOyAgICAgICAgICAgfSAgICBcIC8gICAgeyAgdyA9IGQKKwk8d3JpdGUgYmFycmllcj4gICAgICAgIFwgICAgICAgIDxyZWFkIGJhcnJpZXI+CisJYyA9IDM7ICAgICAgICAgICB9ICAgIC8gXCAgICB7ICB4ID0gYTsKKwlkID0gNDsgICAgICAgICAgIH0tLS0tICAgLS0tPnsgIHkgPSBiOworCiAKIEVYQU1QTEVTIE9GIE1FTU9SWSBCQVJSSUVSIFNFUVVFTkNFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDAsOCArNjE2LDggQEAKIAl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsKIAkrLS0tLS0tLSsgICAgICAgOiAgICAgIDoKIAkgICAgICAgICAgICAgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICB8IFNlcXVlbmNlIGluIHdoaWNoIHN0b3JlcyBjb21taXR0ZWQgdG8gbWVtb3J5IHN5c3RlbQotCSAgICAgICAgICAgICAgICAgICB8IGJ5IENQVSAxCisJICAgICAgICAgICAgICAgICAgIHwgU2VxdWVuY2UgaW4gd2hpY2ggc3RvcmVzIGFyZSBjb21taXR0ZWQgdG8gdGhlCisJICAgICAgICAgICAgICAgICAgIHwgbWVtb3J5IHN5c3RlbSBieSBDUFUgMQogCSAgICAgICAgICAgICAgICAgICBWCiAKIApAQCAtNjgzLDE0ICs2OTksMTIgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICA6ICAgICAgIDogICAgICAgfCBDUFUgMiB8CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICAgfCBYLT45ICB8LS0tLS0tPnwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tPnwgQi0+MiAgfCAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCSAgICAgTWFrZXMgc3VyZSBhbGwgZWZmZWN0cyAtLS0+ICAgIGRkZGRkZGRkZGRkZGRkZGRkICAgfCAgICAgICB8Ci0JICAgICBwcmlvciB0byB0aGUgc3RvcmUgb2YgQyAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgIGFyZSBwZXJjZXB0aWJsZSB0byAgICAgICAgICAgICAgICAgfCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAotCSAgICAgc3VjY2Vzc2l2ZSBsb2FkcyAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgWC0+OSAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgTWFrZXMgc3VyZSBhbGwgZWZmZWN0cyAtLS0+ICAgXCAgIGRkZGRkZGRkZGRkZGRkZGRkICAgfCAgICAgICB8CisJICBwcmlvciB0byB0aGUgc3RvcmUgb2YgQyAgICAgICAgXCAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgIGFyZSBwZXJjZXB0aWJsZSB0byAgICAgICAgICAgICAgLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgc3Vic2VxdWVudCBsb2FkcyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKIAogCkBAIC02OTksNzMgKzcxMywyMzkgQEAKIAogCUNQVSAxCQkJQ1BVIDIKIAk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEEgPSAwLCBCID0gOSB9CiAJU1RPUkUgQT0xCi0JU1RPUkUgQj0yCi0JU1RPUkUgQz0zCiAJPHdyaXRlIGJhcnJpZXI+Ci0JU1RPUkUgRD00Ci0JU1RPUkUgRT01Ci0JCQkJTE9BRCBBCisJU1RPUkUgQj0yCiAJCQkJTE9BRCBCCi0JCQkJTE9BRCBDCi0JCQkJTE9BRCBECi0JCQkJTE9BRCBFCisJCQkJTE9BRCBBCiAKIFdpdGhvdXQgaW50ZXJ2ZW50aW9uLCBDUFUgMiBtYXkgdGhlbiBjaG9vc2UgdG8gcGVyY2VpdmUgdGhlIGV2ZW50cyBvbiBDUFUgMSBpbgogc29tZSBlZmZlY3RpdmVseSByYW5kb20gb3JkZXIsIGRlc3BpdGUgdGhlIHdyaXRlIGJhcnJpZXIgaXNzdWVkIGJ5IENQVSAxOgogCi0JKy0tLS0tLS0rICAgICAgIDogICAgICA6Ci0JfCAgICAgICB8ICAgICAgICstLS0tLS0rCi0JfCAgICAgICB8LS0tLS0tPnwgQz0zICB8IH0KLQl8ICAgICAgIHwgIDogICAgKy0tLS0tLSsgfQotCXwgICAgICAgfCAgOiAgICB8IEE9MSAgfCB9Ci0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0KLQl8IENQVSAxIHwgIDogICAgfCBCPTIgIHwgfS0tLQotCXwgICAgICAgfCAgICAgICArLS0tLS0tKyB9ICAgXAotCXwgICAgICAgfCAgIHd3d3d3d3d3d3d3d3d9ICAgIFwKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgfSAgICAgXCAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCi0JfCAgICAgICB8ICA6ICAgIHwgRT01ICB8IH0gICAgICBcICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAotCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyB9ICAgICAgIFwgICAgICB7IHwgQy0+MyAgfC0tLS0tLT58ICAgICAgIHwKLQl8ICAgICAgIHwtLS0tLS0+fCBEPTQgIHwgfSAgICAgICAgXCAgICAgeyArLS0tLS0tLSsgICAgOiAgfCAgICAgICB8Ci0JfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICBcICAgIHsgfCBFLT41ICB8ICAgIDogIHwgICAgICAgfAotCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgIFwgICB7ICstLS0tLS0tKyAgICA6ICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlciAgLS0+eyB8IEEtPjEgIHwgICAgOiAgfCBDUFUgMiB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIENQVSAxICAgIHsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIENQVSAyICAgICB7IHwgRC0+NCAgfCAgICA6ICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyArLS0tLS0tLSsgICAgOiAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBBPTEgIHwtLS0tLS0gICAgICAtLS0+fCBBLT4wICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgXCAgICAgICAgICstLS0tLS0tKworCXwgQ1BVIDEgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICBcICAgIC0tLT58IEItPjkgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgIHwgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQj0yICB8LS0tICAgICB8ICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgIFwgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgIFwgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgQS0+MCAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgIDogICAgICAgOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0+fCBBLT4xICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDoKIAogCi1JZiwgaG93ZXZlciwgYSByZWFkIGJhcnJpZXIgd2VyZSB0byBiZSBwbGFjZWQgYmV0d2VlbiB0aGUgbG9hZCBvZiBDIGFuZCB0aGUKLWxvYWQgb2YgRCBvbiBDUFUgMiwgdGhlbiB0aGUgcGFydGlhbCBvcmRlcmluZyBpbXBvc2VkIGJ5IENQVSAxIHdpbGwgYmUKLXBlcmNlaXZlZCBjb3JyZWN0bHkgYnkgQ1BVIDIuCitJZiwgaG93ZXZlciwgYSByZWFkIGJhcnJpZXIgd2VyZSB0byBiZSBwbGFjZWQgYmV0d2VlbiB0aGUgbG9hZCBvZiBFIGFuZCB0aGUKK2xvYWQgb2YgQSBvbiBDUFUgMjoKIAotCSstLS0tLS0tKyAgICAgICA6ICAgICAgOgotCXwgICAgICAgfCAgICAgICArLS0tLS0tKwotCXwgICAgICAgfC0tLS0tLT58IEM9MyAgfCB9Ci0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0KLQl8ICAgICAgIHwgIDogICAgfCBBPTEgIHwgfS0tLQotCXwgICAgICAgfCAgOiAgICArLS0tLS0tKyB9ICAgXAotCXwgQ1BVIDEgfCAgOiAgICB8IEI9MiAgfCB9ICAgIFwKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgXAotCXwgICAgICAgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICAgXAotCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgIFwgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKLQl8ICAgICAgIHwgIDogICAgfCBFPTUgIHwgfSAgICAgICAgXCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JfCAgICAgICB8ICA6ICAgICstLS0tLS0rIH0tLS0gICAgICBcICAgIHsgfCBDLT4zICB8LS0tLS0tPnwgICAgICAgfAotCXwgICAgICAgfC0tLS0tLT58IEQ9NCAgfCB9ICAgXCAgICAgIFwgICB7ICstLS0tLS0tKyAgICA6ICB8ICAgICAgIHwKLQl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICBcICAgICAgLS0+eyB8IEItPjIgIHwgICAgOiAgfCAgICAgICB8Ci0JKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgIFwgICAgICAgIHsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICB7IHwgQS0+MSAgfCAgICA6ICB8IENQVSAyIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JICAgQXQgdGhpcyBwb2ludCB0aGUgcmVhZCAtLS0tPiAgIFwgICBycnJycnJycnJycnJycnJyciAgIHwgICAgICAgfAotCSAgIGJhcnJpZXIgY2F1c2VzIGFsbCBlZmZlY3RzICAgICAgXCAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKLQkgICBwcmlvciB0byB0aGUgc3RvcmFnZSBvZiBDICAgICAgICBcICAgeyB8IEUtPjUgIHwgICAgOiAgfCAgICAgICB8Ci0JICAgdG8gYmUgcGVyY2VwdGlibGUgdG8gQ1BVIDIgICAgICAgIC0tPnsgKy0tLS0tLS0rICAgIDogIHwgICAgICAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHwgRC0+NCAgfC0tLS0tLT58ICAgICAgIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCUNQVSAxCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEEgPSAwLCBCID0gOSB9CisJU1RPUkUgQT0xCisJPHdyaXRlIGJhcnJpZXI+CisJU1RPUkUgQj0yCisJCQkJTE9BRCBCCisJCQkJPHJlYWQgYmFycmllcj4KKwkJCQlMT0FEIEEKKwordGhlbiB0aGUgcGFydGlhbCBvcmRlcmluZyBpbXBvc2VkIGJ5IENQVSAxIHdpbGwgYmUgcGVyY2VpdmVkIGNvcnJlY3RseSBieSBDUFUKKzI6CisKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgICAgICAgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEE9MSAgfC0tLS0tLSAgICAgIC0tLT58IEEtPjAgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICBcICAgICAgICAgKy0tLS0tLS0rCisJfCBDUFUgMSB8ICAgd3d3d3d3d3d3d3d3d3d3dyAgIFwgICAgLS0tPnwgQi0+OSAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgfCAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBCPTIgIHwtLS0gICAgIHwgICAgICAgOiAgICAgICA6CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgXCAgICB8ICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkrLS0tLS0tLSsgICAgICAgOiAgICAgIDogICAgXCAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICBBdCB0aGlzIHBvaW50IHRoZSByZWFkIC0tLS0+ICAgXCAgcnJycnJycnJycnJycnJycnIgICB8ICAgICAgIHwKKwkgIGJhcnJpZXIgY2F1c2VzIGFsbCBlZmZlY3RzICAgICAgXCAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgcHJpb3IgdG8gdGhlIHN0b3JhZ2Ugb2YgQiAgICAgICAgLS0tLT58IEEtPjEgIHwtLS0tLS0+fCAgICAgICB8CisJICB0byBiZSBwZXJjZXB0aWJsZSB0byBDUFUgMiAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK1RvIGlsbHVzdHJhdGUgdGhpcyBtb3JlIGNvbXBsZXRlbHksIGNvbnNpZGVyIHdoYXQgY291bGQgaGFwcGVuIGlmIHRoZSBjb2RlCitjb250YWluZWQgYSBsb2FkIG9mIEEgZWl0aGVyIHNpZGUgb2YgdGhlIHJlYWQgYmFycmllcjoKKworCUNQVSAxCQkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCQl7IEEgPSAwLCBCID0gOSB9CisJU1RPUkUgQT0xCisJPHdyaXRlIGJhcnJpZXI+CisJU1RPUkUgQj0yCisJCQkJTE9BRCBCCisJCQkJTE9BRCBBIFtmaXJzdCBsb2FkIG9mIEFdCisJCQkJPHJlYWQgYmFycmllcj4KKwkJCQlMT0FEIEEgW3NlY29uZCBsb2FkIG9mIEFdCisKK0V2ZW4gdGhvdWdoIHRoZSB0d28gbG9hZHMgb2YgQSBib3RoIG9jY3VyIGFmdGVyIHRoZSBsb2FkIG9mIEIsIHRoZXkgbWF5IGJvdGgKK2NvbWUgdXAgd2l0aCBkaWZmZXJlbnQgdmFsdWVzOgorCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgICAgICAgICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKwl8ICAgICAgIHwtLS0tLS0+fCBBPTEgIHwtLS0tLS0gICAgICAtLS0+fCBBLT4wICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgXCAgICAgICAgICstLS0tLS0tKworCXwgQ1BVIDEgfCAgIHd3d3d3d3d3d3d3d3d3d3cgICBcICAgIC0tLT58IEItPjkgIHwKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgIHwgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQj0yICB8LS0tICAgICB8ICAgICAgIDogICAgICAgOgorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgIFwgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisJKy0tLS0tLS0rICAgICAgIDogICAgICA6ICAgIFwgICB8ICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0+fCBCLT4yICB8LS0tLS0tPnwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCBDUFUgMiB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgQS0+MCAgfC0tLS0tLT58IDFzdCAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgQXQgdGhpcyBwb2ludCB0aGUgcmVhZCAtLS0tPiAgIFwgIHJycnJycnJycnJycnJycnJyICAgfCAgICAgICB8CisJICBiYXJyaWVyIGNhdXNlcyBhbGwgZWZmZWN0cyAgICAgIFwgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgIHByaW9yIHRvIHRoZSBzdG9yYWdlIG9mIEIgICAgICAgIC0tLS0+fCBBLT4xICB8LS0tLS0tPnwgMm5kICAgfAorCSAgdG8gYmUgcGVyY2VwdGlibGUgdG8gQ1BVIDIgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKworCitCdXQgaXQgbWF5IGJlIHRoYXQgdGhlIHVwZGF0ZSB0byBBIGZyb20gQ1BVIDEgYmVjb21lcyBwZXJjZXB0aWJsZSB0byBDUFUgMgorYmVmb3JlIHRoZSByZWFkIGJhcnJpZXIgY29tcGxldGVzIGFueXdheToKKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICAgICAgICAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisJfCAgICAgICB8LS0tLS0tPnwgQT0xICB8LS0tLS0tICAgICAgLS0tPnwgQS0+MCAgfAorCXwgICAgICAgfCAgICAgICArLS0tLS0tKyAgICAgIFwgICAgICAgICArLS0tLS0tLSsKKwl8IENQVSAxIHwgICB3d3d3d3d3d3d3d3d3d3d3ICAgXCAgICAtLS0+fCBCLT45ICB8CisJfCAgICAgICB8ICAgICAgICstLS0tLS0rICAgICAgICB8ICAgICAgICstLS0tLS0tKworCXwgICAgICAgfC0tLS0tLT58IEI9MiAgfC0tLSAgICAgfCAgICAgICA6ICAgICAgIDoKKwl8ICAgICAgIHwgICAgICAgKy0tLS0tLSsgICBcICAgIHwgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCSstLS0tLS0tKyAgICAgICA6ICAgICAgOiAgICBcICAgfCAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tPnwgQi0+MiAgfC0tLS0tLT58ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0rICAgICAgIHwgQ1BVIDIgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA6ICAgICAgIDogICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLT58IEEtPjEgIHwtLS0tLS0+fCAxc3QgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycnJycnJycnJycnJycnJyciAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQS0+MSAgfC0tLS0tLT58IDJuZCAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICAgICAgKy0tLS0tLS0rCisKKworVGhlIGd1YXJhbnRlZSBpcyB0aGF0IHRoZSBzZWNvbmQgbG9hZCB3aWxsIGFsd2F5cyBjb21lIHVwIHdpdGggQSA9PSAxIGlmIHRoZQorbG9hZCBvZiBCIGNhbWUgdXAgd2l0aCBCID09IDIuICBObyBzdWNoIGd1YXJhbnRlZSBleGlzdHMgZm9yIHRoZSBmaXJzdCBsb2FkIG9mCitBOyB0aGF0IG1heSBjb21lIHVwIHdpdGggZWl0aGVyIEEgPT0gMCBvciBBID09IDEuCisKKworUkVBRCBNRU1PUlkgQkFSUklFUlMgVlMgTE9BRCBTUEVDVUxBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYW55IENQVXMgc3BlY3VsYXRlIHdpdGggbG9hZHM6IHRoYXQgaXMgdGhleSBzZWUgdGhhdCB0aGV5IHdpbGwgbmVlZCB0byBsb2FkIGFuCitpdGVtIGZyb20gbWVtb3J5LCBhbmQgdGhleSBmaW5kIGEgdGltZSB3aGVyZSB0aGV5J3JlIG5vdCB1c2luZyB0aGUgYnVzIGZvciBhbnkKK290aGVyIGxvYWRzLCBhbmQgc28gZG8gdGhlIGxvYWQgaW4gYWR2YW5jZSAtIGV2ZW4gdGhvdWdoIHRoZXkgaGF2ZW4ndCBhY3R1YWxseQorZ290IHRvIHRoYXQgcG9pbnQgaW4gdGhlIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBmbG93IHlldC4gIFRoaXMgcGVybWl0cyB0aGUKK2FjdHVhbCBsb2FkIGluc3RydWN0aW9uIHRvIHBvdGVudGlhbGx5IGNvbXBsZXRlIGltbWVkaWF0ZWx5IGJlY2F1c2UgdGhlIENQVQorYWxyZWFkeSBoYXMgdGhlIHZhbHVlIHRvIGhhbmQuCisKK0l0IG1heSB0dXJuIG91dCB0aGF0IHRoZSBDUFUgZGlkbid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhbHVlIC0gcGVyaGFwcyBiZWNhdXNlIGEKK2JyYW5jaCBjaXJjdW12ZW50ZWQgdGhlIGxvYWQgLSBpbiB3aGljaCBjYXNlIGl0IGNhbiBkaXNjYXJkIHRoZSB2YWx1ZSBvciBqdXN0CitjYWNoZSBpdCBmb3IgbGF0ZXIgdXNlLgorCitDb25zaWRlcjoKKworCUNQVSAxCSAgIAkJQ1BVIDIKKwk9PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCSAJICAgCQlMT0FEIEIKKwkgCSAgIAkJRElWSURFCQl9IERpdmlkZSBpbnN0cnVjdGlvbnMgZ2VuZXJhbGx5CisJIAkgICAJCURJVklERQkJfSB0YWtlIGEgbG9uZyB0aW1lIHRvIHBlcmZvcm0KKwkgCSAgIAkJTE9BRCBBCisKK1doaWNoIG1pZ2h0IGFwcGVhciBhcyB0aGlzOgorCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJVGhlIENQVSBiZWluZyBidXN5IGRvaW5nIGEgLS0tPiAgICAgLS0tPnwgQS0+MCAgfH5+fn4gICB8ICAgICAgIHwKKwlkaXZpc2lvbiBzcGVjdWxhdGVzIG9uIHRoZSAgICAgICAgICAgICAgKy0tLS0tLS0rICAgfiAgIHwgICAgICAgfAorCUxPQUQgb2YgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCU9uY2UgdGhlIGRpdmlzaW9ucyBhcmUgY29tcGxldGUgLS0+ICAgICA6ICAgICAgIDogICB+LS0+fCAgICAgICB8CisJdGhlIENQVSBjYW4gdGhlbiBwZXJmb3JtIHRoZSAgICAgICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwlMT0FEIHdpdGggaW1tZWRpYXRlIGVmZmVjdCAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK1BsYWNpbmcgYSByZWFkIGJhcnJpZXIgb3IgYSBkYXRhIGRlcGVuZGVuY3kgYmFycmllciBqdXN0IGJlZm9yZSB0aGUgc2Vjb25kCitsb2FkOgorCisJQ1BVIDEJICAgCQlDUFUgMgorCT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJIAkgICAJCUxPQUQgQgorCSAJICAgCQlESVZJREUKKwkgCSAgIAkJRElWSURFCisJCQkJPHJlYWQgYmFycmllcj4KKwkgCSAgIAkJTE9BRCBBCisKK3dpbGwgZm9yY2UgYW55IHZhbHVlIHNwZWN1bGF0aXZlbHkgb2J0YWluZWQgdG8gYmUgcmVjb25zaWRlcmVkIHRvIGFuIGV4dGVudAorZGVwZW5kZW50IG9uIHRoZSB0eXBlIG9mIGJhcnJpZXIgdXNlZC4gIElmIHRoZXJlIHdhcyBubyBjaGFuZ2UgbWFkZSB0byB0aGUKK3NwZWN1bGF0ZWQgbWVtb3J5IGxvY2F0aW9uLCB0aGVuIHRoZSBzcGVjdWxhdGVkIHZhbHVlIHdpbGwganVzdCBiZSB1c2VkOgorCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJVGhlIENQVSBiZWluZyBidXN5IGRvaW5nIGEgLS0tPiAgICAgLS0tPnwgQS0+MCAgfH5+fn4gICB8ICAgICAgIHwKKwlkaXZpc2lvbiBzcGVjdWxhdGVzIG9uIHRoZSAgICAgICAgICAgICAgKy0tLS0tLS0rICAgfiAgIHwgICAgICAgfAorCUxPQUQgb2YgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJycnJycnJycnJycnJycn4gICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+LS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKworCisKK2J1dCBpZiB0aGVyZSB3YXMgYW4gdXBkYXRlIG9yIGFuIGludmFsaWRhdGlvbiBmcm9tIGFub3RoZXIgQ1BVIHBlbmRpbmcsIHRoZW4KK3RoZSBzcGVjdWxhdGlvbiB3aWxsIGJlIGNhbmNlbGxlZCBhbmQgdGhlIHZhbHVlIHJlbG9hZGVkOgorCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOiAgICAgICArLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLT58IEItPjIgIHwtLS0tLS0+fCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8IENQVSAyIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6RElWSURFIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsgICAgICAgfCAgICAgICB8CisJVGhlIENQVSBiZWluZyBidXN5IGRvaW5nIGEgLS0tPiAgICAgLS0tPnwgQS0+MCAgfH5+fn4gICB8ICAgICAgIHwKKwlkaXZpc2lvbiBzcGVjdWxhdGVzIG9uIHRoZSAgICAgICAgICAgICAgKy0tLS0tLS0rICAgfiAgIHwgICAgICAgfAorCUxPQUQgb2YgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgOkRJVklERSB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgfiAgIHwgICAgICAgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIDogICB+ICAgfCAgICAgICB8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJycnJycnJycnJycnJycnIgICB8ICAgICAgIHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgIHwgICAgICAgfAorCVRoZSBzcGVjdWxhdGlvbiBpcyBkaXNjYXJkZWQgLS0tPiAgIC0tLT58IEEtPjEgIHwtLS0tLS0+fCAgICAgICB8CisJYW5kIGFuIHVwZGF0ZWQgdmFsdWUgaXMgICAgICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICB8ICAgICAgIHwKKwlyZXRyaWV2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICA6ICAgICAgICstLS0tLS0tKwogCiAKID09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtOTAxLDcgKzEwODEsNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBTb21lIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGxpbnV4IGtlcm5lbCBpbXBseSBtZW1vcnkgYmFycmllcnMsIGFtb25nc3QKLXdoaWNoIGFyZSBsb2NraW5nLCBzY2hlZHVsaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCit3aGljaCBhcmUgbG9ja2luZyBhbmQgc2NoZWR1bGluZyBmdW5jdGlvbnMuCiAKIFRoaXMgc3BlY2lmaWNhdGlvbiBpcyBhIF9taW5pbXVtXyBndWFyYW50ZWU7IGFueSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBtYXkKIHByb3ZpZGUgbW9yZSBzdWJzdGFudGlhbCBndWFyYW50ZWVzLCBidXQgdGhlc2UgbWF5IG5vdCBiZSByZWxpZWQgdXBvbiBvdXRzaWRlCkBAIC05NjYsNiArMTE0NiwyMCBAQAogICAgIGJhcnJpZXJzIGlzIHRoYXQgdGhlIGVmZmVjdHMgaW5zdHJ1Y3Rpb25zIG91dHNpZGUgb2YgYSBjcml0aWNhbCBzZWN0aW9uIG1heQogICAgIHNlZXAgaW50byB0aGUgaW5zaWRlIG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLgogCitBIExPQ0sgZm9sbG93ZWQgYnkgYW4gVU5MT0NLIG1heSBub3QgYmUgYXNzdW1lZCB0byBiZSBmdWxsIG1lbW9yeSBiYXJyaWVyCitiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIGZvciBhbiBhY2Nlc3MgcHJlY2VkaW5nIHRoZSBMT0NLIHRvIGhhcHBlbiBhZnRlciB0aGUKK0xPQ0ssIGFuZCBhbiBhY2Nlc3MgZm9sbG93aW5nIHRoZSBVTkxPQ0sgdG8gaGFwcGVuIGJlZm9yZSB0aGUgVU5MT0NLLCBhbmQgdGhlCit0d28gYWNjZXNzZXMgY2FuIHRoZW1zZWx2ZXMgdGhlbiBjcm9zczoKKworCSpBID0gYTsKKwlMT0NLCisJVU5MT0NLCisJKkIgPSBiOworCittYXkgb2NjdXIgYXM6CisKKwlMT0NLLCBTVE9SRSAqQiwgU1RPUkUgKkEsIFVOTE9DSworCiBMb2NrcyBhbmQgc2VtYXBob3JlcyBtYXkgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZSBvZiBvcmRlcmluZyBvbiBVUCBjb21waWxlZAogc3lzdGVtcywgYW5kIHNvIGNhbm5vdCBiZSBjb3VudGVkIG9uIGluIHN1Y2ggYSBzaXR1YXRpb24gdG8gYWN0dWFsbHkgYWNoaWV2ZQogYW55dGhpbmcgYXQgYWxsIC0gZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gSS9PIGFjY2Vzc2VzIC0gdW5sZXNzIGNvbWJpbmVkCkBAIC0xMDE2LDggKzEyMTAsNiBAQAogCiAgKCopIHNjaGVkdWxlKCkgYW5kIHNpbWlsYXIgaW1wbHkgZnVsbCBtZW1vcnkgYmFycmllcnMuCiAKLSAoKikgTWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgZnVuY3Rpb25zIGltcGx5IGZ1bGwgbWVtb3J5IGJhcnJpZXJzLgotCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogSU5URVItQ1BVIExPQ0tJTkcgQkFSUklFUiBFRkZFQ1RTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKaW5kZXggYWNiMzBjNS4uNGYyYTQwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMApAQCAtMTQsOCArMTQsOCBAQAogCiBSRUFETUUuaXB3MjIwMAogCi1WZXJzaW9uOiAxLjAuOAotRGF0ZSAgIDogT2N0b2JlciAyMCwgMjAwNQorVmVyc2lvbjogMS4xLjIKK0RhdGUgICA6IE1hcmNoIDMwLCAyMDA2CiAKIAogSW5kZXgKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiAxLjEuIE92ZXJ2aWV3IG9mIEZlYXR1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGN1cnJlbnQgcmVsZWFzZSAoMS4wLjgpIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CitUaGUgY3VycmVudCByZWxlYXNlICgxLjEuMikgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKIAogKyBCU1MgbW9kZSAoSW5mcmFzdHJ1Y3R1cmUsIE1hbmFnZWQpCiArIElCU1MgbW9kZSAoQWQtSG9jKQpAQCAtMjQ3LDggKzI0Nyw4IEBACiAlIGNhdCAvc3lzL2J1cy9wY2kvZHJpdmVycy9pcHcyMjAwL2RlYnVnX2xldmVsCiAKIFdpbGwgcmVwb3J0IHRoZSBjdXJyZW50IGRlYnVnIGxldmVsIG9mIHRoZSBkcml2ZXIncyBsb2dnaW5nIHN1YnN5c3RlbSAKLShvbmx5IGF2YWlsYWJsZSBpZiBDT05GSUdfSVBXX0RFQlVHIHdhcyBjb25maWd1cmVkIHdoZW4gdGhlIGRyaXZlciB3YXMgCi1idWlsdCkuCisob25seSBhdmFpbGFibGUgaWYgQ09ORklHX0lQVzIyMDBfREVCVUcgd2FzIGNvbmZpZ3VyZWQgd2hlbiB0aGUgZHJpdmVyCit3YXMgYnVpbHQpLgogCiBZb3UgY2FuIHNldCB0aGUgZGVidWcgbGV2ZWwgdmlhOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKaW5kZXggOGQ4YjRlNS4uYWZhYzc4MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApAQCAtMSw3ICsxLDcgQEAKIAogCQlMaW51eCBFdGhlcm5ldCBCb25kaW5nIERyaXZlciBIT1dUTwogCi0JCUxhdGVzdCB1cGRhdGU6IDIxIEp1bmUgMjAwNQorCQlMYXRlc3QgdXBkYXRlOiAyNCBBcHJpbCAyMDA2CiAKIEluaXRpYWwgcmVsZWFzZSA6IFRob21hcyBEYXZpcyA8dGFkYXZpcyBhdCBsYmwuZ292PgogQ29ycmVjdGlvbnMsIEhBIGV4dGVuc2lvbnMgOiAyMDAwLzEwLzAzLTE1IDoKQEAgLTEyLDYgKzEyLDggQEAKICAgLSBKYXkgVm9zYnVyZ2ggPGZ1YmFyIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KIAogUmVvcmdhbml6ZWQgYW5kIHVwZGF0ZWQgRmViIDIwMDUgYnkgSmF5IFZvc2J1cmdoCitBZGRlZCBTeXNmcyBpbmZvcm1hdGlvbjogMjAwNi8wNC8yNAorICAtIE1pdGNoIFdpbGxpYW1zIDxtaXRjaC5hLndpbGxpYW1zIGF0IGludGVsLmNvbT4KIAogSW50cm9kdWN0aW9uCiA9PT09PT09PT09PT0KQEAgLTM4LDYxICs0MCw2MiBAQAogMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucwogCiAzLiBDb25maWd1cmluZyBCb25kaW5nIERldmljZXMKLTMuMQlDb25maWd1cmF0aW9uIHdpdGggc3lzY29uZmlnIHN1cHBvcnQKLTMuMS4xCQlVc2luZyBESENQIHdpdGggc3lzY29uZmlnCi0zLjEuMgkJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgd2l0aCBzeXNjb25maWcKLTMuMglDb25maWd1cmF0aW9uIHdpdGggaW5pdHNjcmlwdHMgc3VwcG9ydAotMy4yLjEJCVVzaW5nIERIQ1Agd2l0aCBpbml0c2NyaXB0cwotMy4yLjIJCUNvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIHdpdGggaW5pdHNjcmlwdHMKLTMuMwlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5CiszLjEJQ29uZmlndXJhdGlvbiB3aXRoIFN5c2NvbmZpZyBTdXBwb3J0CiszLjEuMQkJVXNpbmcgREhDUCB3aXRoIFN5c2NvbmZpZworMy4xLjIJCUNvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIHdpdGggU3lzY29uZmlnCiszLjIJQ29uZmlndXJhdGlvbiB3aXRoIEluaXRzY3JpcHRzIFN1cHBvcnQKKzMuMi4xCQlVc2luZyBESENQIHdpdGggSW5pdHNjcmlwdHMKKzMuMi4yCQlDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyB3aXRoIEluaXRzY3JpcHRzCiszLjMJQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseSB3aXRoIElmZW5zbGF2ZQogMy4zLjEJCUNvbmZpZ3VyaW5nIE11bHRpcGxlIEJvbmRzIE1hbnVhbGx5CiszLjQJQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseSB2aWEgU3lzZnMKIAotNS4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uCi01LjEJQm9uZGluZyBDb25maWd1cmF0aW9uCi01LjIJTmV0d29yayBDb25maWd1cmF0aW9uCis0LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KKzQuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KKzQuMglOZXR3b3JrIENvbmZpZ3VyYXRpb24KIAotNi4gU3dpdGNoIENvbmZpZ3VyYXRpb24KKzUuIFN3aXRjaCBDb25maWd1cmF0aW9uCiAKLTcuIDgwMi4xcSBWTEFOIFN1cHBvcnQKKzYuIDgwMi4xcSBWTEFOIFN1cHBvcnQKIAotOC4gTGluayBNb25pdG9yaW5nCi04LjEJQVJQIE1vbml0b3IgT3BlcmF0aW9uCi04LjIJQ29uZmlndXJpbmcgTXVsdGlwbGUgQVJQIFRhcmdldHMKLTguMwlNSUkgTW9uaXRvciBPcGVyYXRpb24KKzcuIExpbmsgTW9uaXRvcmluZworNy4xCUFSUCBNb25pdG9yIE9wZXJhdGlvbgorNy4yCUNvbmZpZ3VyaW5nIE11bHRpcGxlIEFSUCBUYXJnZXRzCis3LjMJTUlJIE1vbml0b3IgT3BlcmF0aW9uCiAKLTkuIFBvdGVudGlhbCBUcm91YmxlIFNvdXJjZXMKLTkuMQlBZHZlbnR1cmVzIGluIFJvdXRpbmcKLTkuMglFdGhlcm5ldCBEZXZpY2UgUmVuYW1pbmcKLTkuMwlQYWluZnVsbHkgU2xvdyBPciBObyBGYWlsZWQgTGluayBEZXRlY3Rpb24gQnkgTWlpbW9uCis4LiBQb3RlbnRpYWwgVHJvdWJsZSBTb3VyY2VzCis4LjEJQWR2ZW50dXJlcyBpbiBSb3V0aW5nCis4LjIJRXRoZXJuZXQgRGV2aWNlIFJlbmFtaW5nCis4LjMJUGFpbmZ1bGx5IFNsb3cgT3IgTm8gRmFpbGVkIExpbmsgRGV0ZWN0aW9uIEJ5IE1paW1vbgogCi0xMC4gU05NUCBhZ2VudHMKKzkuIFNOTVAgYWdlbnRzCiAKLTExLiBQcm9taXNjdW91cyBtb2RlCisxMC4gUHJvbWlzY3VvdXMgbW9kZQogCi0xMi4gQ29uZmlndXJpbmcgQm9uZGluZyBmb3IgSGlnaCBBdmFpbGFiaWxpdHkKLTEyLjEJSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5Ci0xMi4yCUhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5Ci0xMi4yLjEJCUhBIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQotMTIuMi4yCQlIQSBMaW5rIE1vbml0b3JpbmcgZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTEuIENvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5CisxMS4xCUhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTEuMglIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTEuMi4xCQlIQSBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzExLjIuMgkJSEEgTGluayBNb25pdG9yaW5nIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKIAotMTMuIENvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIE1heGltdW0gVGhyb3VnaHB1dAotMTMuMQlNYXhpbXVtIFRocm91Z2hwdXQgaW4gYSBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5Ci0xMy4xLjEJCU1UIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKLTEzLjEuMgkJTVQgTGluayBNb25pdG9yaW5nIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5Ci0xMy4yCU1heGltdW0gVGhyb3VnaHB1dCBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQotMTMuMi4xCQlNVCBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKLTEzLjIuMgkJTVQgTGluayBNb25pdG9yaW5nIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLiBDb25maWd1cmluZyBCb25kaW5nIGZvciBNYXhpbXVtIFRocm91Z2hwdXQKKzEyLjEJTWF4aW11bSBUaHJvdWdocHV0IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMS4xCQlNVCBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4xLjIJCU1UIExpbmsgTW9uaXRvcmluZyBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMglNYXhpbXVtIFRocm91Z2hwdXQgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIuMQkJTVQgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4yLjIJCU1UIExpbmsgTW9uaXRvcmluZyBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CiAKLTE0LiBTd2l0Y2ggQmVoYXZpb3IgSXNzdWVzCi0xNC4xCUxpbmsgRXN0YWJsaXNobWVudCBhbmQgRmFpbG92ZXIgRGVsYXlzCi0xNC4yCUR1cGxpY2F0ZWQgSW5jb21pbmcgUGFja2V0cworMTMuIFN3aXRjaCBCZWhhdmlvciBJc3N1ZXMKKzEzLjEJTGluayBFc3RhYmxpc2htZW50IGFuZCBGYWlsb3ZlciBEZWxheXMKKzEzLjIJRHVwbGljYXRlZCBJbmNvbWluZyBQYWNrZXRzCiAKLTE1LiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucwotMTUuMQlJQk0gQmxhZGVDZW50ZXIKKzE0LiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucworMTQuMQlJQk0gQmxhZGVDZW50ZXIKIAotMTYuIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCisxNS4gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKIAotMTcuIFJlc291cmNlcyBhbmQgTGlua3MKKzE2LiBSZXNvdXJjZXMgYW5kIExpbmtzCiAKIAogMS4gQm9uZGluZyBEcml2ZXIgSW5zdGFsbGF0aW9uCkBAIC0xNTYsNiArMTU5LDkgQEAKIG9ud2FyZHMpIGRvIG5vdCBoYXZlIC91c3IvaW5jbHVkZS9saW51eCBzeW1ib2xpY2FsbHkgbGlua2VkIHRvIHRoZQogZGVmYXVsdCBrZXJuZWwgc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgogCitTRUNPTkQgSU1QT1JUQU5UIE5PVEU6CisJSWYgeW91IHBsYW4gdG8gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgc3lzZnMsIHlvdSBkbyBub3QgbmVlZAordG8gdXNlIGlmZW5zbGF2ZS4KIAogMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjcwLDcgKzI3Niw3IEBACiAJCUluIGJvbmRpbmcgdmVyc2lvbiAyLjYuMiBvciBsYXRlciwgd2hlbiBhIGZhaWxvdmVyCiAJCW9jY3VycyBpbiBhY3RpdmUtYmFja3VwIG1vZGUsIGJvbmRpbmcgd2lsbCBpc3N1ZSBvbmUKIAkJb3IgbW9yZSBncmF0dWl0b3VzIEFSUHMgb24gdGhlIG5ld2x5IGFjdGl2ZSBzbGF2ZS4KLQkJT25lIGdyYXR1dGlvdXMgQVJQIGlzIGlzc3VlZCBmb3IgdGhlIGJvbmRpbmcgbWFzdGVyCisJCU9uZSBncmF0dWl0b3VzIEFSUCBpcyBpc3N1ZWQgZm9yIHRoZSBib25kaW5nIG1hc3RlcgogCQlpbnRlcmZhY2UgYW5kIGVhY2ggVkxBTiBpbnRlcmZhY2VzIGNvbmZpZ3VyZWQgYWJvdmUKIAkJaXQsIHByb3ZpZGVkIHRoYXQgdGhlIGludGVyZmFjZSBoYXMgYXQgbGVhc3Qgb25lIElQCiAJCWFkZHJlc3MgY29uZmlndXJlZC4gIEdyYXR1aXRvdXMgQVJQcyBpc3N1ZWQgZm9yIFZMQU4KQEAgLTM3Nyw3ICszODMsNyBAQAogCQlXaGVuIGEgbGluayBpcyByZWNvbm5lY3RlZCBvciBhIG5ldyBzbGF2ZSBqb2lucyB0aGUKIAkJYm9uZCB0aGUgcmVjZWl2ZSB0cmFmZmljIGlzIHJlZGlzdHJpYnV0ZWQgYW1vbmcgYWxsCiAJCWFjdGl2ZSBzbGF2ZXMgaW4gdGhlIGJvbmQgYnkgaW5pdGlhdGluZyBBUlAgUmVwbGllcwotCQl3aXRoIHRoZSBzZWxlY3RlZCBtYWMgYWRkcmVzcyB0byBlYWNoIG9mIHRoZQorCQl3aXRoIHRoZSBzZWxlY3RlZCBNQUMgYWRkcmVzcyB0byBlYWNoIG9mIHRoZQogCQljbGllbnRzLiBUaGUgdXBkZWxheSBwYXJhbWV0ZXIgKGRldGFpbGVkIGJlbG93KSBtdXN0CiAJCWJlIHNldCB0byBhIHZhbHVlIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc3dpdGNoJ3MKIAkJZm9yd2FyZGluZyBkZWxheSBzbyB0aGF0IHRoZSBBUlAgUmVwbGllcyBzZW50IHRvIHRoZQpAQCAtNDk4LDExICs1MDQsMTIgQEAKIDMuIENvbmZpZ3VyaW5nIEJvbmRpbmcgRGV2aWNlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLQlUaGVyZSBhcmUsIGVzc2VudGlhbGx5LCB0d28gbWV0aG9kcyBmb3IgY29uZmlndXJpbmcgYm9uZGluZzoKLXdpdGggc3VwcG9ydCBmcm9tIHRoZSBkaXN0cm8ncyBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGFuZAotd2l0aG91dC4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdHdvIHBhY2thZ2VzIGZvciB0aGUgbmV0d29yawotaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnLiAgUmVjZW50IHZlcnNpb25zIG9mCi10aGVzZSBwYWNrYWdlcyBoYXZlIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHdoaWxlIG9sZGVyIHZlcnNpb25zIGRvIG5vdC4KKwlZb3UgY2FuIGNvbmZpZ3VyZSBib25kaW5nIHVzaW5nIGVpdGhlciB5b3VyIGRpc3RybydzIG5ldHdvcmsKK2luaXRpYWxpemF0aW9uIHNjcmlwdHMsIG9yIG1hbnVhbGx5IHVzaW5nIGVpdGhlciBpZmVuc2xhdmUgb3IgdGhlCitzeXNmcyBpbnRlcmZhY2UuICBEaXN0cm9zIGdlbmVyYWxseSB1c2Ugb25lIG9mIHR3byBwYWNrYWdlcyBmb3IgdGhlCituZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHM6IGluaXRzY3JpcHRzIG9yIHN5c2NvbmZpZy4gIFJlY2VudAordmVyc2lvbnMgb2YgdGhlc2UgcGFja2FnZXMgaGF2ZSBzdXBwb3J0IGZvciBib25kaW5nLCB3aGlsZSBvbGRlcgordmVyc2lvbnMgZG8gbm90LgogCiAJV2Ugd2lsbCBmaXJzdCBkZXNjcmliZSB0aGUgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYm9uZGluZyBmb3IKIGRpc3Ryb3MgdXNpbmcgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgYW5kIHN5c2NvbmZpZyB3aXRoIGZ1bGwgb3IKQEAgLTUzMCw3ICs1MzcsNyBAQAogCUlmIHRoaXMgcmV0dXJucyBhbnkgbWF0Y2hlcywgdGhlbiB5b3VyIGluaXRzY3JpcHRzIG9yCiBzeXNjb25maWcgaGFzIHN1cHBvcnQgZm9yIGJvbmRpbmcuCiAKLTMuMSBDb25maWd1cmF0aW9uIHdpdGggc3lzY29uZmlnIHN1cHBvcnQKKzMuMSBDb25maWd1cmF0aW9uIHdpdGggU3lzY29uZmlnIFN1cHBvcnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3MgdXNpbmcgYSB2ZXJzaW9uIG9mIHN5c2NvbmZpZwpAQCAtNTM4LDcgKzU0NSw3IEBACiAKIAlTdVNFIFNMRVMgOSdzIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBzeXN0ZW0gZG9lcyBzdXBwb3J0CiBib25kaW5nLCBob3dldmVyLCBhdCB0aGlzIHdyaXRpbmcsIHRoZSBZYVNUIHN5c3RlbSBjb25maWd1cmF0aW9uCi1mcm9udGVuZCBkb2VzIG5vdCBwcm92aWRlIGFueSBtZWFucyB0byB3b3JrIHdpdGggYm9uZGluZyBkZXZpY2VzLgorZnJvbnQgZW5kIGRvZXMgbm90IHByb3ZpZGUgYW55IG1lYW5zIHRvIHdvcmsgd2l0aCBib25kaW5nIGRldmljZXMuCiBCb25kaW5nIGRldmljZXMgY2FuIGJlIG1hbmFnZWQgYnkgaGFuZCwgaG93ZXZlciwgYXMgZm9sbG93cy4KIAogCUZpcnN0LCBpZiB0aGV5IGhhdmUgbm90IGFscmVhZHkgYmVlbiBjb25maWd1cmVkLCBjb25maWd1cmUgdGhlCkBAIC02NjAsNyArNjY3LDcgQEAKIAlOb3RlIHRoYXQgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGRvY3VtZW50IHRoZSB2YXJpb3VzIEJPTkRJTkdfCiBzZXR0aW5ncyBkZXNjcmliZWQgYWJvdmUsIGJ1dCBkb2VzIGRlc2NyaWJlIG1hbnkgb2YgdGhlIG90aGVyIG9wdGlvbnMuCiAKLTMuMS4xIFVzaW5nIERIQ1Agd2l0aCBzeXNjb25maWcKKzMuMS4xIFVzaW5nIERIQ1Agd2l0aCBTeXNjb25maWcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVVuZGVyIHN5c2NvbmZpZywgY29uZmlndXJpbmcgYSBkZXZpY2Ugd2l0aCBCT09UUFJPVE89J2RoY3AnCkBAIC02NzAsNyArNjc3LDcgQEAKIHRoZSBzbGF2ZSBkZXZpY2VzLiAgV2l0aG91dCBhY3RpdmUgc2xhdmVzLCB0aGUgREhDUCByZXF1ZXN0cyBhcmUgbm90CiBzZW50IHRvIHRoZSBuZXR3b3JrLgogCi0zLjEuMiBDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyB3aXRoIHN5c2NvbmZpZworMy4xLjIgQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgd2l0aCBTeXNjb25maWcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGUgc3lzY29uZmlnIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc3lzdGVtIGlzIGNhcGFibGUgb2YKQEAgLTY4NSw3ICs2OTIsNyBAQAogb3B0aW9ucyBpbiB0aGUgaWZjZmctYm9uZFggZmlsZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBhZGQgdGhlbSB0bwogdGhlIHN5c3RlbSAvZXRjL21vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLgogCi0zLjIgQ29uZmlndXJhdGlvbiB3aXRoIGluaXRzY3JpcHRzIHN1cHBvcnQKKzMuMiBDb25maWd1cmF0aW9uIHdpdGggSW5pdHNjcmlwdHMgU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGlzIHNlY3Rpb24gYXBwbGllcyB0byBkaXN0cm9zIHVzaW5nIGEgdmVyc2lvbiBvZiBpbml0c2NyaXB0cwpAQCAtNzU2LDcgKzc2Myw3IEBACiB3aWxsIHJlc3RhcnQgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCB5b3VyIGJvbmQgbGluayBzaG91bGQgYmUgbm93CiB1cCBhbmQgcnVubmluZy4KIAotMy4yLjEgVXNpbmcgREhDUCB3aXRoIGluaXRzY3JpcHRzCiszLjIuMSBVc2luZyBESENQIHdpdGggSW5pdHNjcmlwdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJUmVjZW50IHZlcnNpb25zIG9mIGluaXRzY3JpcHRzICh0aGUgdmVyc2lvbiBzdXBwbGllZCB3aXRoCkBAIC03NjgsNyArNzc1LDcgQEAKIGFuZCBhZGQgYSBsaW5lIGNvbnNpc3Rpbmcgb2YgIlRZUEU9Qm9uZGluZyIuICBOb3RlIHRoYXQgdGhlIFRZUEUgdmFsdWUKIGlzIGNhc2Ugc2Vuc2l0aXZlLgogCi0zLjIuMiBDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyB3aXRoIGluaXRzY3JpcHRzCiszLjIuMiBDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyB3aXRoIEluaXRzY3JpcHRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlBdCB0aGlzIHdyaXRpbmcsIHRoZSBpbml0c2NyaXB0cyBwYWNrYWdlIGRvZXMgbm90IGRpcmVjdGx5CkBAIC03ODQsOCArNzkxLDggQEAKIGV4aGliaXRpbmcgdGhpcyBwcm9ibGVtLCBpdCB3aWxsIGJlIGltcG9zc2libGUgdG8gY29uZmlndXJlIG11bHRpcGxlCiBib25kcyB3aXRoIGRpZmZlcmluZyBwYXJhbWV0ZXJzLgogCi0zLjMgQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzMuMyBDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHdpdGggSWZlbnNsYXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB3aG9zZSBuZXR3b3JrIGluaXRpYWxpemF0aW9uCiBzY3JpcHRzICh0aGUgc3lzY29uZmlnIG9yIGluaXRzY3JpcHRzIHBhY2thZ2UpIGRvIG5vdCBoYXZlIHNwZWNpZmljCkBAIC04ODksMTEgKzg5NiwxMzkgQEAKIAlUaGlzIG1heSBiZSByZXBlYXRlZCBhbnkgbnVtYmVyIG9mIHRpbWVzLCBzcGVjaWZ5aW5nIGEgbmV3IGFuZAogdW5pcXVlIG5hbWUgaW4gcGxhY2Ugb2YgYm9uZDEgZm9yIGVhY2ggc3Vic2VxdWVudCBpbnN0YW5jZS4KIAorMy40IENvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgdmlhIFN5c2ZzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotNS4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uIAorCVN0YXJ0aW5nIHdpdGggdmVyc2lvbiAzLjAsIENoYW5uZWwgQm9uZGluZyBtYXkgYmUgY29uZmlndXJlZAordmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UuICBUaGlzIGludGVyZmFjZSBhbGxvd3MgZHluYW1pYyBjb25maWd1cmF0aW9uCitvZiBhbGwgYm9uZHMgaW4gdGhlIHN5c3RlbSB3aXRob3V0IHVubG9hZGluZyB0aGUgbW9kdWxlLiAgSXQgYWxzbworYWxsb3dzIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGJvbmRzIGF0IHJ1bnRpbWUuICBJZmVuc2xhdmUgaXMgbm8KK2xvbmdlciByZXF1aXJlZCwgdGhvdWdoIGl0IGlzIHN0aWxsIHN1cHBvcnRlZC4KKworCVVzZSBvZiB0aGUgc3lzZnMgaW50ZXJmYWNlIGFsbG93cyB5b3UgdG8gdXNlIG11bHRpcGxlIGJvbmRzCit3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyB3aXRob3V0IGhhdmluZyB0byByZWxvYWQgdGhlIG1vZHVsZS4KK0l0IGFsc28gYWxsb3dzIHlvdSB0byB1c2UgbXVsdGlwbGUsIGRpZmZlcmVudGx5IGNvbmZpZ3VyZWQgYm9uZHMgd2hlbgorYm9uZGluZyBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCisKKwlZb3UgbXVzdCBoYXZlIHRoZSBzeXNmcyBmaWxlc3lzdGVtIG1vdW50ZWQgdG8gY29uZmlndXJlCitib25kaW5nIHRoaXMgd2F5LiAgVGhlIGV4YW1wbGVzIGluIHRoaXMgZG9jdW1lbnQgYXNzdW1lIHRoYXQgeW91CithcmUgdXNpbmcgdGhlIHN0YW5kYXJkIG1vdW50IHBvaW50IGZvciBzeXNmcywgZS5nLiAvc3lzLiAgSWYgeW91cgorc3lzZnMgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGVsc2V3aGVyZSwgeW91IHdpbGwgbmVlZCB0byBhZGp1c3QgdGhlCitleGFtcGxlIHBhdGhzIGFjY29yZGluZ2x5LgorCitDcmVhdGluZyBhbmQgRGVzdHJveWluZyBCb25kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGFkZCBhIG5ldyBib25kIGZvbzoKKyMgZWNobyArZm9vID4gL3N5cy9jbGFzcy9uZXQvYm9uZGluZ19tYXN0ZXJzCisKK1RvIHJlbW92ZSBhbiBleGlzdGluZyBib25kIGJhcjoKKyMgZWNobyAtYmFyID4gL3N5cy9jbGFzcy9uZXQvYm9uZGluZ19tYXN0ZXJzCisKK1RvIHNob3cgYWxsIGV4aXN0aW5nIGJvbmRzOgorIyBjYXQgL3N5cy9jbGFzcy9uZXQvYm9uZGluZ19tYXN0ZXJzCisKK05PVEU6IGR1ZSB0byA0SyBzaXplIGxpbWl0YXRpb24gb2Ygc3lzZnMgZmlsZXMsIHRoaXMgbGlzdCBtYXkgYmUKK3RydW5jYXRlZCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gYSBmZXcgaHVuZHJlZCBib25kcy4gIFRoaXMgaXMgdW5saWtlbHkKK3RvIG9jY3VyIHVuZGVyIG5vcm1hbCBvcGVyYXRpbmcgY29uZGl0aW9ucy4KKworQWRkaW5nIGFuZCBSZW1vdmluZyBTbGF2ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSW50ZXJmYWNlcyBtYXkgYmUgZW5zbGF2ZWQgdG8gYSBib25kIHVzaW5nIHRoZSBmaWxlCisvc3lzL2NsYXNzL25ldC88Ym9uZD4vYm9uZGluZy9zbGF2ZXMuICBUaGUgc2VtYW50aWNzIGZvciB0aGlzIGZpbGUKK2FyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIGJvbmRpbmdfbWFzdGVycyBmaWxlLgorCitUbyBlbnNsYXZlIGludGVyZmFjZSBldGgwIHRvIGJvbmQgYm9uZDA6CisjIGlmY29uZmlnIGJvbmQwIHVwCisjIGVjaG8gK2V0aDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL3NsYXZlcworCitUbyBmcmVlIHNsYXZlIGV0aDAgZnJvbSBib25kIGJvbmQwOgorIyBlY2hvIC1ldGgwID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9zbGF2ZXMKKworCU5PVEU6IFRoZSBib25kIG11c3QgYmUgdXAgYmVmb3JlIHNsYXZlcyBjYW4gYmUgYWRkZWQuICBBbGwKK3NsYXZlcyBhcmUgZnJlZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93bi4KKworCVdoZW4gYW4gaW50ZXJmYWNlIGlzIGVuc2xhdmVkIHRvIGEgYm9uZCwgc3ltbGlua3MgYmV0d2VlbiB0aGUKK3R3byBhcmUgY3JlYXRlZCBpbiB0aGUgc3lzZnMgZmlsZXN5c3RlbS4gIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIGdldAorL3N5cy9jbGFzcy9uZXQvYm9uZDAvc2xhdmVfZXRoMCBwb2ludGluZyB0byAvc3lzL2NsYXNzL25ldC9ldGgwLCBhbmQKKy9zeXMvY2xhc3MvbmV0L2V0aDAvbWFzdGVyIHBvaW50aW5nIHRvIC9zeXMvY2xhc3MvbmV0L2JvbmQwLgorCisJVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdGVsbCBxdWlja2x5IHdoZXRoZXIgb3Igbm90IGFuCitpbnRlcmZhY2UgaXMgZW5zbGF2ZWQgYnkgbG9va2luZyBmb3IgdGhlIG1hc3RlciBzeW1saW5rLiAgVGh1czoKKyMgZWNobyAtZXRoMCA+IC9zeXMvY2xhc3MvbmV0L2V0aDAvbWFzdGVyL2JvbmRpbmcvc2xhdmVzCit3aWxsIGZyZWUgZXRoMCBmcm9tIHdoYXRldmVyIGJvbmQgaXQgaXMgZW5zbGF2ZWQgdG8sIHJlZ2FyZGxlc3Mgb2YKK3RoZSBuYW1lIG9mIHRoZSBib25kIGludGVyZmFjZS4KKworQ2hhbmdpbmcgYSBCb25kJ3MgQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUVhY2ggYm9uZCBtYXkgYmUgY29uZmlndXJlZCBpbmRpdmlkdWFsbHkgYnkgbWFuaXB1bGF0aW5nIHRoZQorZmlsZXMgbG9jYXRlZCBpbiAvc3lzL2NsYXNzL25ldC88Ym9uZCBuYW1lPi9ib25kaW5nCisKKwlUaGUgbmFtZXMgb2YgdGhlc2UgZmlsZXMgY29ycmVzcG9uZCBkaXJlY3RseSB3aXRoIHRoZSBjb21tYW5kLQorbGluZSBwYXJhbWV0ZXJzIGRlc2NyaWJlZCBlbHNld2hlcmUgaW4gaW4gdGhpcyBmaWxlLCBhbmQsIHdpdGggdGhlCitleGNlcHRpb24gb2YgYXJwX2lwX3RhcmdldCwgdGhleSBhY2NlcHQgdGhlIHNhbWUgdmFsdWVzLiAgVG8gc2VlIHRoZQorY3VycmVudCBzZXR0aW5nLCBzaW1wbHkgY2F0IHRoZSBhcHByb3ByaWF0ZSBmaWxlLgorCisJQSBmZXcgZXhhbXBsZXMgd2lsbCBiZSBnaXZlbiBoZXJlOyBmb3Igc3BlY2lmaWMgdXNhZ2UKK2d1aWRlbGluZXMgZm9yIGVhY2ggcGFyYW1ldGVyLCBzZWUgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gaW4gdGhpcworZG9jdW1lbnQuCisKK1RvIGNvbmZpZ3VyZSBib25kMCBmb3IgYmFsYW5jZS1hbGIgbW9kZToKKyMgaWZjb25maWcgYm9uZDAgZG93bgorIyBlY2hvIDYgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL21vZGUKKyAtIG9yIC0KKyMgZWNobyBiYWxhbmNlLWFsYiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvbW9kZQorCU5PVEU6IFRoZSBib25kIGludGVyZmFjZSBtdXN0IGJlIGRvd24gYmVmb3JlIHRoZSBtb2RlIGNhbiBiZQorY2hhbmdlZC4KKworVG8gZW5hYmxlIE1JSSBtb25pdG9yaW5nIG9uIGJvbmQwIHdpdGggYSAxIHNlY29uZCBpbnRlcnZhbDoKKyMgZWNobyAxMDAwID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9taWltb24KKwlOT1RFOiBJZiBBUlAgbW9uaXRvcmluZyBpcyBlbmFibGVkLCBpdCB3aWxsIGRpc2FibGVkIHdoZW4gTUlJCittb25pdG9yaW5nIGlzIGVuYWJsZWQsIGFuZCB2aWNlLXZlcnNhLgorCitUbyBhZGQgQVJQIHRhcmdldHM6CisjIGVjaG8gKzE5Mi4xNjguMC4xMDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL2FycF9pcF90YXJnZXQKKyMgZWNobyArMTkyLjE2OC4wLjEwMSA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvYXJwX2lwX3RhcmdldAorCU5PVEU6ICB1cCB0byAxMCB0YXJnZXQgYWRkcmVzc2VzIG1heSBiZSBzcGVjaWZpZWQuCisKK1RvIHJlbW92ZSBhbiBBUlAgdGFyZ2V0OgorIyBlY2hvIC0xOTIuMTY4LjAuMTAwID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9hcnBfaXBfdGFyZ2V0CisKK0V4YW1wbGUgQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJV2UgYmVnaW4gd2l0aCB0aGUgc2FtZSBleGFtcGxlIHRoYXQgaXMgc2hvd24gaW4gc2VjdGlvbiAzLjMsCitleGVjdXRlZCB3aXRoIHN5c2ZzLCBhbmQgd2l0aG91dCB1c2luZyBpZmVuc2xhdmUuCisKKwlUbyBtYWtlIGEgc2ltcGxlIGJvbmQgb2YgdHdvIGUxMDAgZGV2aWNlcyAocHJlc3VtZWQgdG8gYmUgZXRoMAorYW5kIGV0aDEpLCBhbmQgaGF2ZSBpdCBwZXJzaXN0IGFjcm9zcyByZWJvb3RzLCBlZGl0IHRoZSBhcHByb3ByaWF0ZQorZmlsZSAoL2V0Yy9pbml0LmQvYm9vdC5sb2NhbCBvciAvZXRjL3JjLmQvcmMubG9jYWwpLCBhbmQgYWRkIHRoZQorZm9sbG93aW5nOgorCittb2Rwcm9iZSBib25kaW5nCittb2Rwcm9iZSBlMTAwCitlY2hvIGJhbGFuY2UtYWxiID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9tb2RlCitpZmNvbmZpZyBib25kMCAxOTIuMTY4LjEuMSBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgdXAKK2VjaG8gMTAwID4gL3N5cy9jbGFzcy9uZXQvYm9uZDAvYm9uZGluZy9taWltb24KK2VjaG8gK2V0aDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMC9ib25kaW5nL3NsYXZlcworZWNobyArZXRoMSA+IC9zeXMvY2xhc3MvbmV0L2JvbmQwL2JvbmRpbmcvc2xhdmVzCisKKwlUbyBhZGQgYSBzZWNvbmQgYm9uZCwgd2l0aCB0d28gZTEwMDAgaW50ZXJmYWNlcyBpbgorYWN0aXZlLWJhY2t1cCBtb2RlLCB1c2luZyBBUlAgbW9uaXRvcmluZywgYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8KK3lvdXIgaW5pdCBzY3JpcHQ6CisKK21vZHByb2JlIGUxMDAwCitlY2hvICtib25kMSA+IC9zeXMvY2xhc3MvbmV0L2JvbmRpbmdfbWFzdGVycworZWNobyBhY3RpdmUtYmFja3VwID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9tb2RlCitpZmNvbmZpZyBib25kMSAxOTIuMTY4LjIuMSBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgdXAKK2VjaG8gKzE5Mi4xNjguMi4xMDAgL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9hcnBfaXBfdGFyZ2V0CitlY2hvIDIwMDAgPiAvc3lzL2NsYXNzL25ldC9ib25kMS9ib25kaW5nL2FycF9pbnRlcnZhbAorZWNobyArZXRoMiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvc2xhdmVzCitlY2hvICtldGgzID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9zbGF2ZXMKKworCis0LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24gCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotNS4xIEJvbmRpbmcgQ29uZmlndXJhdGlvbgorNC4xIEJvbmRpbmcgQ29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJRWFjaCBib25kaW5nIGRldmljZSBoYXMgYSByZWFkLW9ubHkgZmlsZSByZXNpZGluZyBpbiB0aGUKQEAgLTkyMyw3ICsxMDU4LDcgQEAKIAlUaGUgcHJlY2lzZSBmb3JtYXQgYW5kIGNvbnRlbnRzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyB1cG9uIHRoZQogYm9uZGluZyBjb25maWd1cmF0aW9uLCBzdGF0ZSwgYW5kIHZlcnNpb24gb2YgdGhlIGJvbmRpbmcgZHJpdmVyLgogCi01LjIgTmV0d29yayBjb25maWd1cmF0aW9uCis0LjIgTmV0d29yayBjb25maWd1cmF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIGNhbiBiZSBpbnNwZWN0ZWQgdXNpbmcgdGhlIGlmY29uZmlnCkBAIC05NTgsNyArMTA5Myw3IEBACiAgICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCiAgICAgICAgICAgSW50ZXJydXB0OjkgQmFzZSBhZGRyZXNzOjB4MTQwMAogCi02LiBTd2l0Y2ggQ29uZmlndXJhdGlvbgorNS4gU3dpdGNoIENvbmZpZ3VyYXRpb24KID09PT09PT09PT09PT09PT09PT09PT09CiAKIAlGb3IgdGhpcyBzZWN0aW9uLCAic3dpdGNoIiByZWZlcnMgdG8gd2hhdGV2ZXIgc3lzdGVtIHRoZQpAQCAtOTkxLDcgKzExMjYsNyBAQAogd2l0aCBhbm90aGVyIEV0aGVyQ2hhbm5lbCBncm91cC4KIAogCi03LiA4MDIuMXEgVkxBTiBTdXBwb3J0Cis2LiA4MDIuMXEgVkxBTiBTdXBwb3J0CiA9PT09PT09PT09PT09PT09PT09PT09CiAKIAlJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgVkxBTiBkZXZpY2VzIG92ZXIgYSBib25kIGludGVyZmFjZQpAQCAtMTA0Miw3ICsxMTc3LDcgQEAKIG1vZGUsIHdoaWNoIG1pZ2h0IG5vdCBiZSB3aGF0IHlvdSB3YW50LgogCiAKLTguIExpbmsgTW9uaXRvcmluZworNy4gTGluayBNb25pdG9yaW5nCiA9PT09PT09PT09PT09PT09PT0KIAogCVRoZSBib25kaW5nIGRyaXZlciBhdCBwcmVzZW50IHN1cHBvcnRzIHR3byBzY2hlbWVzIGZvcgpAQCAtMTA1Myw3ICsxMTg4LDcgQEAKIGJvbmRpbmcgZHJpdmVyIGl0c2VsZiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGVuYWJsZSBib3RoIEFSUCBhbmQgTUlJCiBtb25pdG9yaW5nIHNpbXVsdGFuZW91c2x5LgogCi04LjEgQVJQIE1vbml0b3IgT3BlcmF0aW9uCis3LjEgQVJQIE1vbml0b3IgT3BlcmF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGUgQVJQIG1vbml0b3Igb3BlcmF0ZXMgYXMgaXRzIG5hbWUgc3VnZ2VzdHM6IGl0IHNlbmRzIEFSUApAQCAtMTA3MSw3ICsxMjA2LDcgQEAKIHNob3dzIHRoZSBBUlAgcmVxdWVzdHMgYW5kIHJlcGxpZXMgb24gdGhlIG5ldHdvcmssIHRoZW4gaXQgbWF5IGJlIHRoYXQKIHlvdXIgZGV2aWNlIGRyaXZlciBpcyBub3QgdXBkYXRpbmcgbGFzdF9yeCBhbmQgdHJhbnNfc3RhcnQuCiAKLTguMiBDb25maWd1cmluZyBNdWx0aXBsZSBBUlAgVGFyZ2V0cworNy4yIENvbmZpZ3VyaW5nIE11bHRpcGxlIEFSUCBUYXJnZXRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVdoaWxlIEFSUCBtb25pdG9yaW5nIGNhbiBiZSBkb25lIHdpdGgganVzdCBvbmUgdGFyZ2V0LCBpdCBjYW4KQEAgLTEwOTQsNyArMTIyOSw3IEBACiBvcHRpb25zIGJvbmQwIGFycF9pbnRlcnZhbD02MCBhcnBfaXBfdGFyZ2V0PTE5Mi4xNjguMC4xMDAKIAogCi04LjMgTUlJIE1vbml0b3IgT3BlcmF0aW9uCis3LjMgTUlJIE1vbml0b3IgT3BlcmF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGUgTUlJIG1vbml0b3IgbW9uaXRvcnMgb25seSB0aGUgY2FycmllciBzdGF0ZSBvZiB0aGUgbG9jYWwKQEAgLTExMjAsMTQgKzEyNTUsMTQgQEAKIGFuZCBldGh0b29sIHJlcXVlc3RzKSwgdGhlbiB0aGUgTUlJIG1vbml0b3Igd2lsbCBhc3N1bWUgdGhlIGxpbmsgaXMKIHVwLgogCi05LiBQb3RlbnRpYWwgU291cmNlcyBvZiBUcm91YmxlCis4LiBQb3RlbnRpYWwgU291cmNlcyBvZiBUcm91YmxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLTkuMSBBZHZlbnR1cmVzIGluIFJvdXRpbmcKKzguMSBBZHZlbnR1cmVzIGluIFJvdXRpbmcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVdoZW4gYm9uZGluZyBpcyBjb25maWd1cmVkLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc2xhdmUKLWRldmljZXMgbm90IGhhdmUgcm91dGVzIHRoYXQgc3VwZXJjZWRlIHJvdXRlcyBvZiB0aGUgbWFzdGVyIChvciwKK2RldmljZXMgbm90IGhhdmUgcm91dGVzIHRoYXQgc3VwZXJzZWRlIHJvdXRlcyBvZiB0aGUgbWFzdGVyIChvciwKIGdlbmVyYWxseSwgbm90IGhhdmUgcm91dGVzIGF0IGFsbCkuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGUgYm9uZGluZwogZGV2aWNlIGJvbmQwIGhhcyB0d28gc2xhdmVzLCBldGgwIGFuZCBldGgxLCBhbmQgdGhlIHJvdXRpbmcgdGFibGUgaXMKIGFzIGZvbGxvd3M6CkBAIC0xMTU0LDExICsxMjg5LDExIEBACiAKIAlUaGUgc29sdXRpb24gaGVyZSBpcyBzaW1wbHkgdG8gaW5zdXJlIHRoYXQgc2xhdmVzIGRvIG5vdCBoYXZlCiByb3V0ZXMgb2YgdGhlaXIgb3duLCBhbmQgaWYgZm9yIHNvbWUgcmVhc29uIHRoZXkgbXVzdCwgdGhvc2Ugcm91dGVzIGRvCi1ub3Qgc3VwZXJjZWRlIHJvdXRlcyBvZiB0aGVpciBtYXN0ZXIuICBUaGlzIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhlCitub3Qgc3VwZXJzZWRlIHJvdXRlcyBvZiB0aGVpciBtYXN0ZXIuICBUaGlzIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhlCiBjYXNlLCBidXQgdW51c3VhbCBjb25maWd1cmF0aW9ucyBvciBlcnJhbnQgbWFudWFsIG9yIGF1dG9tYXRpYyBzdGF0aWMKIHJvdXRlIGFkZGl0aW9ucyBtYXkgY2F1c2UgdHJvdWJsZS4KIAotOS4yIEV0aGVybmV0IERldmljZSBSZW5hbWluZworOC4yIEV0aGVybmV0IERldmljZSBSZW5hbWluZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJT24gc3lzdGVtcyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgZG8gbm90CkBAIC0xMjA3LDcgKzEzNDIsNyBAQAogcGxhY2UuICBGdWxsIGRvY3VtZW50YXRpb24gb24gdGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIG1vZHByb2JlLmNvbmYKIGFuZCBtb2Rwcm9iZSBtYW51YWwgcGFnZXMuCiAKLTkuMy4gUGFpbmZ1bGx5IFNsb3cgT3IgTm8gRmFpbGVkIExpbmsgRGV0ZWN0aW9uIEJ5IE1paW1vbgorOC4zLiBQYWluZnVsbHkgU2xvdyBPciBObyBGYWlsZWQgTGluayBEZXRlY3Rpb24gQnkgTWlpbW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCUJ5IGRlZmF1bHQsIGJvbmRpbmcgZW5hYmxlcyB0aGUgdXNlX2NhcnJpZXIgb3B0aW9uLCB3aGljaApAQCAtMTIzNSw3ICsxMzcwLDcgQEAKIGJleW9uZCBvdGhlciBwb3J0cyBvZiBhIHN3aXRjaCwgb3IgaWYgYSBzd2l0Y2ggaXMgcmVmdXNpbmcgdG8gcGFzcwogdHJhZmZpYyB3aGlsZSBzdGlsbCBtYWludGFpbmluZyBjYXJyaWVyIG9uLgogCi0xMC4gU05NUCBhZ2VudHMKKzkuIFNOTVAgYWdlbnRzCiA9PT09PT09PT09PT09PT0KIAogCUlmIHJ1bm5pbmcgU05NUCBhZ2VudHMsIHRoZSBib25kaW5nIGRyaXZlciBzaG91bGQgYmUgbG9hZGVkCkBAIC0xMjgxLDcgKzE0MTYsNyBAQAogYW5kIFNOTVAgZnVuY3Rpb25zIHN1Y2ggYXMgSW50ZXJmYWNlX1NjYW5fTmV4dCB3aWxsIHJlcG9ydCB0aGF0CiBhc3NvY2lhdGlvbi4KIAotMTEuIFByb21pc2N1b3VzIG1vZGUKKzEwLiBQcm9taXNjdW91cyBtb2RlCiA9PT09PT09PT09PT09PT09PT09PQogCiAJV2hlbiBydW5uaW5nIG5ldHdvcmsgbW9uaXRvcmluZyB0b29scywgZS5nLiwgdGNwZHVtcCwgaXQgaXMKQEAgLTEzMDgsNyArMTQ0Myw3IEBACiB0aGUgYWN0aXZlIHNsYXZlIGNoYW5nZXMgKGUuZy4sIGR1ZSB0byBhIGxpbmsgZmFpbHVyZSksIHRoZQogcHJvbWlzY3VvdXMgc2V0dGluZyB3aWxsIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIG5ldyBhY3RpdmUgc2xhdmUuCiAKLTEyLiBDb25maWd1cmluZyBCb25kaW5nIGZvciBIaWdoIEF2YWlsYWJpbGl0eQorMTEuIENvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCUhpZ2ggQXZhaWxhYmlsaXR5IHJlZmVycyB0byBjb25maWd1cmF0aW9ucyB0aGF0IHByb3ZpZGUKQEAgLTEzMTgsNyArMTQ1Myw3IEBACiAoaS5lLiwgdGhlIG5ldHdvcmsgYWx3YXlzIHdvcmtzKSwgZXZlbiB0aG91Z2ggb3RoZXIgY29uZmlndXJhdGlvbnMKIGNvdWxkIHByb3ZpZGUgaGlnaGVyIHRocm91Z2hwdXQuCiAKLTEyLjEgSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CisxMS4xIEhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCUlmIHR3byBob3N0cyAob3IgYSBob3N0IGFuZCBhIHNpbmdsZSBzd2l0Y2gpIGFyZSBkaXJlY3RseQpAQCAtMTMzMiw3ICsxNDY3LDcgQEAKIAlTZWUgU2VjdGlvbiAxMywgIkNvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIE1heGltdW0gVGhyb3VnaHB1dCIKIGZvciBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyBib25kaW5nIHdpdGggb25lIHBlZXIgZGV2aWNlLgogCi0xMi4yIEhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMS4yIEhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlXaXRoIG11bHRpcGxlIHN3aXRjaGVzLCB0aGUgY29uZmlndXJhdGlvbiBvZiBib25kaW5nIGFuZCB0aGUKQEAgLTEzNTksNyArMTQ5NCw3IEBACiB0aGUgb3V0c2lkZSB3b3JsZCAoInBvcnQzIiBvbiBlYWNoIHN3aXRjaCkuICBUaGVyZSBpcyBubyB0ZWNobmljYWwKIHJlYXNvbiB0aGF0IHRoaXMgY291bGQgbm90IGJlIGV4dGVuZGVkIHRvIGEgdGhpcmQgc3dpdGNoLgogCi0xMi4yLjEgSEEgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMS4yLjEgSEEgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlJbiBhIHRvcG9sb2d5IHN1Y2ggYXMgdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBhY3RpdmUtYmFja3VwIGFuZApAQCAtMTM4MSw3ICsxNTE2LDcgQEAKIAluZWNlc3NhcnkgZm9yIHNvbWUgc3BlY2lmaWMgb25lLXdheSB0cmFmZmljIHRvIHJlYWNoIGJvdGgKIAlpbmRlcGVuZGVudCBuZXR3b3JrcywgdGhlbiB0aGUgYnJvYWRjYXN0IG1vZGUgbWF5IGJlIHN1aXRhYmxlLgogCi0xMi4yLjIgSEEgTGluayBNb25pdG9yaW5nIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMS4yLjIgSEEgTGluayBNb25pdG9yaW5nIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlUaGUgY2hvaWNlIG9mIGxpbmsgbW9uaXRvcmluZyB1bHRpbWF0ZWx5IGRlcGVuZHMgdXBvbiB5b3VyCkBAIC0xNDAyLDEwICsxNTM3LDEwIEBACiB0YXJnZXQgdG8gcXVlcnkuCiAKIAotMTMuIENvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIE1heGltdW0gVGhyb3VnaHB1dAorMTIuIENvbmZpZ3VyaW5nIEJvbmRpbmcgZm9yIE1heGltdW0gVGhyb3VnaHB1dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0xMy4xIE1heGltaXppbmcgVGhyb3VnaHB1dCBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjEgTWF4aW1pemluZyBUaHJvdWdocHV0IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlJbiBhIHNpbmdsZSBzd2l0Y2ggY29uZmlndXJhdGlvbiwgdGhlIGJlc3QgbWV0aG9kIHRvIG1heGltaXplCkBAIC0xNDc2LDcgKzE2MTEsNyBAQAogbW9kZSBpcyBkZXNjcmliZWQgYmVsb3cuCiAKIAotMTMuMS4xIE1UIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjEuMSBNVCBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJVGhpcyBjb25maWd1cmF0aW9uIGlzIHRoZSBlYXNpZXN0IHRvIHNldCB1cCBhbmQgdG8gdW5kZXJzdGFuZCwKQEAgLTE2MDcsNyArMTc0Miw3IEBACiAJZGV2aWNlIGRyaXZlciBtdXN0IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgd2hpbGUKIAl0aGUgZGV2aWNlIGlzIG9wZW4uCiAKLTEzLjEuMiBNVCBMaW5rIE1vbml0b3JpbmcgZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjEuMiBNVCBMaW5rIE1vbml0b3JpbmcgZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoZSBjaG9pY2Ugb2YgbGluayBtb25pdG9yaW5nIG1heSBsYXJnZWx5IGRlcGVuZCB1cG9uIHdoaWNoCkBAIC0xNjE2LDcgKzE3NTEsNyBAQAogdGhlIE1JSSBtb25pdG9yICh3aGljaCBkb2VzIG5vdCBwcm92aWRlIGFzIGhpZ2ggYSBsZXZlbCBvZiBlbmQgdG8gZW5kCiBhc3N1cmFuY2UgYXMgdGhlIEFSUCBtb25pdG9yKS4KIAotMTMuMiBNYXhpbXVtIFRocm91Z2hwdXQgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIgTWF4aW11bSBUaHJvdWdocHV0IGluIGEgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJTXVsdGlwbGUgc3dpdGNoZXMgbWF5IGJlIHV0aWxpemVkIHRvIG9wdGltaXplIGZvciB0aHJvdWdocHV0CkBAIC0xNjUxLDcgKzE3ODYsNyBAQAogY2FuIGJlIGVxdWlwcGVkIHdpdGggYW4gYWRkaXRpb25hbCBuZXR3b3JrIGRldmljZSBjb25uZWN0ZWQgdG8gYW4KIGV4dGVybmFsIG5ldHdvcms7IHRoaXMgaG9zdCB0aGVuIGFkZGl0aW9uYWxseSBhY3RzIGFzIGEgZ2F0ZXdheS4KIAotMTMuMi4xIE1UIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTIuMi4xIE1UIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJSW4gYWN0dWFsIHByYWN0aWNlLCB0aGUgYm9uZGluZyBtb2RlIHR5cGljYWxseSBlbXBsb3llZCBpbgpAQCAtMTY2NCw3ICsxNzk5LDcgQEAKIG1vZGUgYWxsb3dzIGluZGl2aWR1YWwgY29ubmVjdGlvbnMgYmV0d2VlbiB0d28gaG9zdHMgdG8gZWZmZWN0aXZlbHkKIHV0aWxpemUgZ3JlYXRlciB0aGFuIG9uZSBpbnRlcmZhY2UncyBiYW5kd2lkdGguCiAKLTEzLjIuMiBNVCBMaW5rIE1vbml0b3JpbmcgZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTIuMi4yIE1UIExpbmsgTW9uaXRvcmluZyBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCUFnYWluLCBpbiBhY3R1YWwgcHJhY3RpY2UsIHRoZSBNSUkgbW9uaXRvciBpcyBtb3N0IG9mdGVuIHVzZWQKQEAgLTE2NzQsMTAgKzE4MDksMTAgQEAKIG5lZWRlZCBhcyB0aGUgbnVtYmVyIG9mIHN5c3RlbXMgaW52b2x2ZWQgZ3Jvd3MgKHJlbWVtYmVyIHRoYXQgZWFjaAogaG9zdCBpbiB0aGUgbmV0d29yayBpcyBjb25maWd1cmVkIHdpdGggYm9uZGluZykuCiAKLTE0LiBTd2l0Y2ggQmVoYXZpb3IgSXNzdWVzCisxMy4gU3dpdGNoIEJlaGF2aW9yIElzc3VlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotMTQuMSBMaW5rIEVzdGFibGlzaG1lbnQgYW5kIEZhaWxvdmVyIERlbGF5cworMTMuMSBMaW5rIEVzdGFibGlzaG1lbnQgYW5kIEZhaWxvdmVyIERlbGF5cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJU29tZSBzd2l0Y2hlcyBleGhpYml0IHVuZGVzaXJhYmxlIGJlaGF2aW9yIHdpdGggcmVnYXJkIHRvIHRoZQpAQCAtMTcxMiw3ICsxODQ3LDcgQEAKIHRvIG5vdCBhY3RpdmF0ZSBhIGJhY2t1cCBpbnRlcmZhY2UgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBsaW5rIGdvZXMgZG93bi4KIEZhaWxvdmVyIG1heSBiZSBkZWxheWVkIHZpYSB0aGUgZG93bmRlbGF5IGJvbmRpbmcgbW9kdWxlIG9wdGlvbi4KIAotMTQuMiBEdXBsaWNhdGVkIEluY29taW5nIFBhY2tldHMKKzEzLjIgRHVwbGljYXRlZCBJbmNvbWluZyBQYWNrZXRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAJSXQgaXMgbm90IHVuY29tbW9uIHRvIG9ic2VydmUgYSBzaG9ydCBidXJzdCBvZiBkdXBsaWNhdGVkCkBAIC0xNzUxLDE0ICsxODg2LDE0IEBACiBtb3N0IENpc2NvIHN3aXRjaGVzLCB0aGUgcHJpdmlsZWdlZCBjb21tYW5kICJjbGVhciBtYWMgYWRkcmVzcy10YWJsZQogZHluYW1pYyIgd2lsbCBhY2NvbXBsaXNoIHRoaXMpLgogCi0xNS4gSGFyZHdhcmUgU3BlY2lmaWMgQ29uc2lkZXJhdGlvbnMKKzE0LiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAlUaGlzIHNlY3Rpb24gY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgY29uZmlndXJpbmcKIGJvbmRpbmcgb24gc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm1zLCBvciBmb3IgaW50ZXJmYWNpbmcgYm9uZGluZwogd2l0aCBwYXJ0aWN1bGFyIHN3aXRjaGVzIG9yIG90aGVyIGRldmljZXMuCiAKLTE1LjEgSUJNIEJsYWRlQ2VudGVyCisxNC4xIElCTSBCbGFkZUNlbnRlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCVRoaXMgYXBwbGllcyB0byB0aGUgSlMyMCBhbmQgc2ltaWxhciBzeXN0ZW1zLgpAQCAtMTg2MSw3ICsxOTk2LDcgQEAKIGF2b2lkIGZhaWwtb3ZlciBkZWxheSBpc3N1ZXMgd2hlbiB1c2luZyBib25kaW5nLgogCiAJCi0xNi4gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKzE1LiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIDEuICBJcyBpdCBTTVAgc2FmZT8KQEAgLTE5MjUsNyArMjA2MCw3IEBACiBzdXBwb3J0IHNwZWNpZmljIGZlYXR1cmVzIChkZXNjcmliZWQgaW4gdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gdW5kZXIKIG1vZHVsZSBwYXJhbWV0ZXJzLCBhYm92ZSkuCiAKLQlJbiA4MDIuM2FkIG1vZGUsIGl0IHdvcmtzIHdpdGggd2l0aCBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBJRUVFCisJSW4gODAyLjNhZCBtb2RlLCBpdCB3b3JrcyB3aXRoIHN5c3RlbXMgdGhhdCBzdXBwb3J0IElFRUUKIDgwMi4zYWQgRHluYW1pYyBMaW5rIEFnZ3JlZ2F0aW9uLiAgTW9zdCBtYW5hZ2VkIGFuZCBtYW55IHVubWFuYWdlZAogc3dpdGNoZXMgY3VycmVudGx5IGF2YWlsYWJsZSBzdXBwb3J0IDgwMi4zYWQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggZjEyMDA3Yi4uZDQ2MzM4YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTM2Miw2ICszNjIsMTMgQEAKIAlub3QgcmVjZWl2ZSBhIHdpbmRvdyBzY2FsaW5nIG9wdGlvbiBmcm9tIHRoZW0uCiAJRGVmYXVsdDogMAogCit0Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlIC0gQk9PTEVBTgorCUlmIHNldCwgcHJvdmlkZSBSRkMyODYxIGJlaGF2aW9yIGFuZCB0aW1lIG91dCB0aGUgY29uZ2VzdGlvbgorCXdpbmRvdyBhZnRlciBhbiBpZGxlIHBlcmlvZC4gIEFuIGlkbGUgcGVyaW9kIGlzIGRlZmluZWQgYXQKKwl0aGUgY3VycmVudCBSVE8uICBJZiB1bnNldCwgdGhlIGNvbmdlc3Rpb24gd2luZG93IHdpbGwgbm90CisJYmUgdGltZWQgb3V0IGFmdGVyIGFuIGlkbGUgcGVyaW9kLgorCURlZmF1bHQ6IDEKKwogSVAgVmFyaWFibGVzOgogCiBpcF9sb2NhbF9wb3J0X3JhbmdlIC0gMiBJTlRFR0VSUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0CmluZGV4IDNjMGE1YmEuLjg0N2NlZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQKQEAgLTQyLDkgKzQyLDkgQEAKIAlDb250ZXh0OiBub21pbmFsbHkgcHJvY2VzcywgYnV0IGRvbid0IHNsZWVwIGluc2lkZSBhbiByd2xvY2sKIAogZGV2LT5oYXJkX3N0YXJ0X3htaXQ6Ci0JU3luY2hyb25pemF0aW9uOiBkZXYtPnhtaXRfbG9jayBzcGlubG9jay4KKwlTeW5jaHJvbml6YXRpb246IG5ldGlmX3R4X2xvY2sgc3BpbmxvY2suCiAJV2hlbiB0aGUgZHJpdmVyIHNldHMgTkVUSUZfRl9MTFRYIGluIGRldi0+ZmVhdHVyZXMgdGhpcyB3aWxsIGJlCi0JY2FsbGVkIHdpdGhvdXQgaG9sZGluZyB4bWl0X2xvY2suIEluIHRoaXMgY2FzZSB0aGUgZHJpdmVyIAorCWNhbGxlZCB3aXRob3V0IGhvbGRpbmcgbmV0aWZfdHhfbG9jay4gSW4gdGhpcyBjYXNlIHRoZSBkcml2ZXIKIAloYXMgdG8gbG9jayBieSBpdHNlbGYgd2hlbiBuZWVkZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhIHRyeSBsb2NrCiAJZm9yIHRoaXMgYW5kIHJldHVybiAtMSB3aGVuIHRoZSBzcGluIGxvY2sgZmFpbHMuIAogCVRoZSBsb2NraW5nIHRoZXJlIHNob3VsZCBhbHNvIHByb3Blcmx5IHByb3RlY3QgYWdhaW5zdCAKQEAgLTYyLDEyICs2MiwxMiBAQAogCSAgT25seSB2YWxpZCB3aGVuIE5FVElGX0ZfTExUWCBpcyBzZXQuCiAKIGRldi0+dHhfdGltZW91dDoKLQlTeW5jaHJvbml6YXRpb246IGRldi0+eG1pdF9sb2NrIHNwaW5sb2NrLgorCVN5bmNocm9uaXphdGlvbjogbmV0aWZfdHhfbG9jayBzcGlubG9jay4KIAlDb250ZXh0OiBCSHMgZGlzYWJsZWQKIAlOb3RlczogbmV0aWZfcXVldWVfc3RvcHBlZCgpIGlzIGd1YXJhbnRlZWQgdHJ1ZQogCiBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdDoKLQlTeW5jaHJvbml6YXRpb246IGRldi0+eG1pdF9sb2NrIHNwaW5sb2NrLgorCVN5bmNocm9uaXphdGlvbjogbmV0aWZfdHhfbG9jayBzcGlubG9jay4KIAlDb250ZXh0OiBCSHMgZGlzYWJsZWQKIAogZGV2LT5wb2xsOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCmluZGV4IGRmODIxMTYuLjg4YWQ2MTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2VyaWFsL2RyaXZlcgorKysgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIKQEAgLTIxNCwxMiArMjE0LDEzIEBACiAJVGhlIGludGVyYWN0aW9uIG9mIHRoZSBpZmxhZyBiaXRzIGlzIGFzIGZvbGxvd3MgKHBhcml0eSBlcnJvcgogCWdpdmVuIGFzIGFuIGV4YW1wbGUpOgogCVBhcml0eSBlcnJvcglJTlBDSwlJR05QQVIKLQlOb25lCQluL2EJbi9hCWNoYXJhY3RlciByZWNlaXZlZAotCVllcwkJbi9hCTAJY2hhcmFjdGVyIGRpc2NhcmRlZAotCVllcwkJMAkxCWNoYXJhY3RlciByZWNlaXZlZCwgbWFya2VkIGFzCisJbi9hCQkwCW4vYQljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcwogCQkJCQlUVFlfTk9STUFMCi0JWWVzCQkxCTEJY2hhcmFjdGVyIHJlY2VpdmVkLCBtYXJrZWQgYXMKKwlOb25lCQkxCW4vYQljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcworCQkJCQlUVFlfTk9STUFMCisJWWVzCQkxCTAJY2hhcmFjdGVyIHJlY2VpdmVkLCBtYXJrZWQgYXMKIAkJCQkJVFRZX1BBUklUWQorCVllcwkJMQkxCWNoYXJhY3RlciBkaXNjYXJkZWQKIAogCU90aGVyIGZsYWdzIG1heSBiZSB1c2VkIChlZywgeG9uL3hvZmYgY2hhcmFjdGVycykgaWYgeW91cgogCWhhcmR3YXJlIHN1cHBvcnRzIGhhcmR3YXJlICJzb2Z0IiBmbG93IGNvbnRyb2wuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGJkMTBiMmEuLmNlMzdjNGIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC01NjUsNyArNTY1LDE5IEBACiBQOglBcm5kIEJlcmdtYW5uCiBNOglhcm5kQGFybmRiLmRlCiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwotVzoJaHR0cDovL2xpbnV4cHBjNjQub3JnCitXOglodHRwOi8vd3d3LnBlbmd1aW5wcGMub3JnL3BwYzY0LworUzoJU3VwcG9ydGVkCisKK0JST0FEQ09NIEJOWDIgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVIKK1A6CU1pY2hhZWwgQ2hhbgorTToJbWNoYW5AYnJvYWRjb20uY29tCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKKworQlJPQURDT00gVEczIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCitQOglNaWNoYWVsIENoYW4KK006CW1jaGFuQGJyb2FkY29tLmNvbQorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiAKIEJUVFYgVklERU80TElOVVggRFJJVkVSCkBAIC0xNDEzLDYgKzE0MjUsOCBAQAogTToJamVzc2UuYnJhbmRlYnVyZ0BpbnRlbC5jb20KIFA6CUplZmYgS2lyc2hlcgogTToJamVmZnJleS50LmtpcnNoZXJAaW50ZWwuY29tCitQOglBdWtlIEtvaworTToJYXVrZS1qYW4uaC5rb2tAaW50ZWwuY29tCiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwLwogUzoJU3VwcG9ydGVkCiAKQEAgLTE0MjUsNiArMTQzOSw4IEBACiBNOglqZXNzZS5icmFuZGVidXJnQGludGVsLmNvbQogUDoJSmVmZiBLaXJzaGVyCiBNOglqZWZmcmV5LnQua2lyc2hlckBpbnRlbC5jb20KK1A6CUF1a2UgS29rCitNOglhdWtlLWphbi5oLmtva0BpbnRlbC5jb20KIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAvCiBTOglTdXBwb3J0ZWQKIApAQCAtMTQzNyw2ICsxNDUzLDggQEAKIE06CWpvaG4ucm9uY2lha0BpbnRlbC5jb20KIFA6CUplc3NlIEJyYW5kZWJ1cmcKIE06CWplc3NlLmJyYW5kZWJ1cmdAaW50ZWwuY29tCitQOglBdWtlIEtvaworTToJYXVrZS1qYW4uaC5rb2tAaW50ZWwuY29tCiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwLwogUzoJU3VwcG9ydGVkCiAKQEAgLTE3MTYsNyArMTczNCw3IEBACiBQOglBbnRvbiBCbGFuY2hhcmQKIE06CWFudG9uQHNhbWJhLm9yZwogTToJYW50b25AYXUuaWJtLmNvbQotVzoJaHR0cDovL2xpbnV4cHBjNjQub3JnCitXOglodHRwOi8vd3d3LnBlbmd1aW5wcGMub3JnL3BwYzY0LwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKIFM6CVN1cHBvcnRlZAogCkBAIC0xODI1LDEyICsxODQzLDEyIEBACiBXOiAgICAgaHR0cDovL21lZ2FyYWlkLmxzaWxvZ2ljLmNvbQogUzogICAgIE1haW50YWluZWQKIAotTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUworTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUyAoTVREKQogUDoJRGF2aWQgV29vZGhvdXNlCiBNOglkd213MkBpbmZyYWRlYWQub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLwogTDoJbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKLVQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGdseC9tdGQtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiAKIE1JQ1JPVEVLIFg2IFNDQU5ORVIKQEAgLTE4NzcsNiArMTg5NSwxMSBAQAogVzoJaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgva2VybmVsLXBhdGNoZXMuaHRtbAogUzoJTWFpbnRhaW5lZAogCitNVUxUSU1FRElBIENBUkQgKE1NQykgU1VCU1lTVEVNCitQOglSdXNzZWxsIEtpbmcKK006CXJtayttbWNAYXJtLmxpbnV4Lm9yZy51aworUzoJTWFpbnRhaW5lZAorCiBNVUxUSVNPVU5EIFNPVU5EIERSSVZFUgogUDoJQW5kcmV3IFZlbGlhdGgKIE06CWFuZHJld3R2QHVzYS5uZXQKQEAgLTE4OTksNiArMTkyMiwxMiBAQAogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorTkVURU0gTkVUV09SSyBFTVVMQVRPUgorUDoJU3RlcGhlbiBIZW1taW5nZXIKK006CXNoZW1taW5nZXJAb3NkbC5vcmcKK0w6CW5ldGVtQG9zZGwub3JnCitTOglNYWludGFpbmVkCisKIE5FVEZJTFRFUi9JUFRBQkxFUy9JUENIQUlOUwogUDoJUnVzdHkgUnVzc2VsbAogUDoJTWFyYyBCb3VjaGVyCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDQzNWQyMDkuLjE3MDBkM2YgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDggKzEsOCBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDE3Ci1FWFRSQVZFUlNJT04gPS1yYzUKLU5BTUU9TG9yZGkgUnVsZXMKK0VYVFJBVkVSU0lPTiA9CitOQU1FPUNyYXplZCBTbm93LVdlYXNlbAogCiAjICpET0NVTUVOVEFUSU9OKgogIyBUbyBzZWUgYSBsaXN0IG9mIHR5cGljYWwgdGFyZ2V0cyBleGVjdXRlICJtYWtlIGhlbHAiCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggODI5MGI2OS4uMjEzYzc4NSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCisrKyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCi0JZGVmYXVsdCB5IGlmICFBTFBIQV9FVjYgJiYgIUFMUEhBX0VWNjcKKwlkZWZhdWx0IHkgaWYgIUFMUEhBX0VWNjcKIAogY29uZmlnIEFMUEhBX0FWQU5USQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9hbHBoYV9rc3ltcy5jCmluZGV4IGM2NDVjNWUuLjJiMjQ1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2FscGhhX2tzeW1zLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvYWxwaGFfa3N5bXMuYwpAQCAtMTgyLDcgKzE4Miw2IEBACiBFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fb25fY3B1KTsKIEVYUE9SVF9TWU1CT0woX2F0b21pY19kZWNfYW5kX2xvY2spOwotRVhQT1JUX1NZTUJPTChjcHVfcHJlc2VudF9tYXNrKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOTkyNGZkMC4uYzc2MGE4MyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwpAQCAtOTQsNyArOTQsNyBAQAogCWlmIChjcHVpZCAhPSBib290X2NwdWlkKSB7CiAJCWZsYWdzIHw9IDB4MDAwNDAwMDBVTDsgLyogInJlbWFpbiBoYWx0ZWQiICovCiAJCSpwZmxhZ3MgPSBmbGFnczsKLQkJY2xlYXJfYml0KGNwdWlkLCAmY3B1X3ByZXNlbnRfbWFzayk7CisJCWNwdV9jbGVhcihjcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKIAkJaGFsdCgpOwogCX0KICNlbmRpZgpAQCAtMTIwLDggKzEyMCw4IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogV2FpdCBmb3IgdGhlIHNlY29uZGFyaWVzIHRvIGhhbHQuICovCi0JY3B1X2NsZWFyKGJvb3RfY3B1aWQsIGNwdV9wb3NzaWJsZV9tYXApOwotCXdoaWxlIChjcHVzX3dlaWdodChjcHVfcG9zc2libGVfbWFwKSkKKwljcHVfY2xlYXIoYm9vdF9jcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKKwl3aGlsZSAoY3B1c193ZWlnaHQoY3B1X3ByZXNlbnRfbWFwKSkKIAkJYmFycmllcigpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKaW5kZXggMTg1MjU1NC4uNGRjMjczZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKQEAgLTY4LDcgKzY4LDYgQEAKIHN0YXRpYyBpbnQgc21wX3NlY29uZGFyeV9hbGl2ZSBfX2luaXRkYXRhID0gMDsKIAogLyogV2hpY2ggY3B1cyBpZHMgY2FtZSBvbmxpbmUuICAqLwotY3B1bWFza190IGNwdV9wcmVzZW50X21hc2s7CiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7CiAKIEVYUE9SVF9TWU1CT0woY3B1X29ubGluZV9tYXApOwpAQCAtNDM5LDcgKzQzOCw3IEBACiAJCQlpZiAoKGNwdS0+ZmxhZ3MgJiAweDFjYykgPT0gMHgxY2MpIHsKIAkJCQlzbXBfbnVtX3Byb2JlZCsrOwogCQkJCS8qIEFzc3VtZSBoZXJlIHRoYXQgIndoYW1pIiA9PSBpbmRleCAqLwotCQkJCWNwdV9zZXQoaSwgY3B1X3ByZXNlbnRfbWFzayk7CisJCQkJY3B1X3NldChpLCBjcHVfcHJlc2VudF9tYXApOwogCQkJCWNwdS0+cGFsX3JldmlzaW9uID0gYm9vdF9jcHVfcGFscmV2OwogCQkJfQogCkBAIC00NTAsMTEgKzQ0OSwxMCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJc21wX251bV9wcm9iZWQgPSAxOwotCQljcHVfc2V0KGJvb3RfY3B1aWQsIGNwdV9wcmVzZW50X21hc2spOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlNNUDogJWQgQ1BVcyBwcm9iZWQgLS0gY3B1X3ByZXNlbnRfbWFzayA9ICVseFxuIiwKLQkgICAgICAgc21wX251bV9wcm9iZWQsIGNwdV9wb3NzaWJsZV9tYXAuYml0c1swXSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU01QOiAlZCBDUFVzIHByb2JlZCAtLSBjcHVfcHJlc2VudF9tYXAgPSAlbHhcbiIsCisJICAgICAgIHNtcF9udW1fcHJvYmVkLCBjcHVfcHJlc2VudF9tYXAuYml0c1swXSk7CiB9CiAKIC8qCkBAIC00NzMsNyArNDcxLDcgQEAKIAogCS8qIE5vdGhpbmcgdG8gZG8gb24gYSBVUCBib3gsIG9yIHdoZW4gdG9sZCBub3QgdG8uICAqLwogCWlmIChzbXBfbnVtX3Byb2JlZCA9PSAxIHx8IG1heF9jcHVzID09IDApIHsKLQkJY3B1X3ByZXNlbnRfbWFzayA9IGNwdW1hc2tfb2ZfY3B1KGJvb3RfY3B1aWQpOworCQljcHVfcHJlc2VudF9tYXAgPSBjcHVtYXNrX29mX2NwdShib290X2NwdWlkKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIG1vZGUgZGVhY3RpdmF0ZWQuXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ4NiwxMCArNDg0LDYgQEAKIHZvaWQgX19kZXZpbml0CiBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQogewotCS8qCi0JICogTWFyayB0aGUgYm9vdCBjcHUgKGN1cnJlbnQgY3B1KSBhcyBvbmxpbmUKLQkgKi8gCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKIH0KIAogaW50IF9fZGV2aW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYwppbmRleCA1Zjg0NDE3Li4yNTUxZmI0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGl0YW4uYwpAQCAtNjYsNyArNjYsNyBAQAogCXJlZ2lzdGVyIGludCBiY3B1ID0gYm9vdF9jcHVpZDsKIAogI2lmZGVmIENPTkZJR19TTVAKLQljcHVtYXNrX3QgY3BtID0gY3B1X3ByZXNlbnRfbWFzazsKKwljcHVtYXNrX3QgY3BtID0gY3B1X3ByZXNlbnRfbWFwOwogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmRpbTAsICpkaW0xLCAqZGltMiwgKmRpbTM7CiAJdW5zaWduZWQgbG9uZyBtYXNrMCwgbWFzazEsIG1hc2syLCBtYXNrMywgZHVtbXk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDA4YjdjYzkuLmY0N2NmOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMjcwLDYgKzI3MCwxMSBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhbiBBdG1lbAogCSAgQVQ5MVJNOTIwMC1iYXNlZCBib2FyZC4KIAorY29uZmlnIEFSQ0hfUE5YNDAwOAorCWJvb2wgIlBoaWxpcHMgTmV4cGVyaWEgUE5YNDAwOCBNb2JpbGUiCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YNDAwOCBtb2JpbGUgcGxhdGZvcm0uCisKIGVuZGNob2ljZQogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtY2xwczcxMXgvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDVkM2FjZmYuLmQyMmYzOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJaGVscAogCSAgQ2hvaWNlIGZvciBVQVJUIGZvciBrZXJuZWwgbG93LWxldmVsIHVzaW5nIFMzQzI0MTAgVUFSVFMsCiAJICBzaG91bGQgYmUgYmV0d2VlbiB6ZXJvIGFuZCB0d28uIFRoZSBwb3J0IG11c3QgaGF2ZSBiZWVuCi0JICBpbml0YWxpc2VkIGJ5IHRoZSBib290LWxvYWRlciBiZWZvcmUgdXNlLgorCSAgaW5pdGlhbGlzZWQgYnkgdGhlIGJvb3QtbG9hZGVyIGJlZm9yZSB1c2UuCiAKIAkgIFRoZSB1bmNvbXByZXNzb3IgY29kZSBwb3J0IGNvbmZpZ3VyYXRpb24gaXMgbm93IGhhbmRsZWQKIAkgIGJ5IENPTkZJR19TM0MyNDEwX0xPV0xFVkVMX1VBUlRfUE9SVC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggNmY4ZTg0Yy4uNmM5N2FhNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0xMTYsNiArMTE2LDcgQEAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUkVBTFZJRVcpICAgOj0gcmVhbHZpZXcKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCkgOj0gYXQ5MXJtOTIwMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9FUDkzWFgpICAgICA6PSBlcDkzeHgKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUE5YNDAwOCkgICAgOj0gcG54NDAwOAogCiBpZmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCiAjIFRoaXMgaXMgd2hhdCBoYXBwZW5zIGlmIHlvdSBmb3JnZXQgdGhlIElPQ1MxNiBsaW5lLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggYjU2ZjVlNi4uMjMwMTZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC02MDUsOCArNjA1LDggQEAKIAkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKIAkJYglfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCi0JCS53b3JkCTB4MDAwNzAwMDAJCUAgQVJNdjYKLQkJLndvcmQJMHgwMDBmMDAwMAorCQkud29yZAkweDAwMDdiMDAwCQlAIEFSTXY2CisJCS53b3JkCTB4MDAwN2YwMDAKIAkJYglfX2FybXY0X21tdV9jYWNoZV9vbgogCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgogCQliCV9fYXJtdjZfbW11X2NhY2hlX2ZsdXNoCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnCmluZGV4IDY3ZWFhMjYuLmJmOWNmOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgTW9uIE1hciAyOCAwMDowNjozMyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTIKKyMgVGh1IE5vdiAgMyAxNDoxNTozMiAyMDA1CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMTcsNiArMTcsNyBAQAogQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiw2ICszNyw4IEBACiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKQEAgLTcxLDYgKzc0LDcgQEAKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3OTUyWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9MSDdBNDBYPXkKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CkBAIC04NCw2ICs4OCw3IEBACiBDT05GSUdfTUFDSF9MUEQ3QTQwMD15CiAjIENPTkZJR19NQUNIX0xQRDdBNDA0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0xIN0E0MDA9eQorQ09ORklHX0xQRDdBNDBYX0NQTERfU1NQPXkKICMgQ09ORklHX0xIN0E0MFhfQ09OVElHTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0xIN0E0MFhfT05FX0JBTktfUEVSX05PREUgaXMgbm90IHNldAogCkBAIC0xMTAsNiArMTE1LDggQEAKICMKICMgQnVzIHN1cHBvcnQKICMKK0NPTkZJR19BUk1fQU1CQT15CitDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTExOSw2ICsxMjYsNyBAQAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfRElTQ09OVElHTUVNPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CkBAIC0xNzUsNyArMTgzLDcgQEAKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKIAogIwpAQCAtMjE3LDcgKzIyNSwxMCBAQAogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwNDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAogCkBAIC0yNTQsNyArMjY1LDYgQEAKICMKICMgQmxvY2sgZGV2aWNlcwogIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldApAQCAtMjg4LDEzICsyOTgsMTUgQEAKICMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BPTEw9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKIENPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfQVJNPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtMzAyLDcgKzMxNCwzNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKKyMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTMzMSw3ICszNzMsNiBAQAogIwogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTQzOCwxMyArNDc5LDEwIEBACiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCkBAIC00NTMsNyArNDkxLDEzIEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0M19MSDc9eQorQ09ORklHX0hBU19UT1VDSFNDUkVFTl9BRFM3ODQzX0xINz15CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtNDYxLDcgKzUwNSw2IEBACiAjCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCkBAIC00NzksNiArNTIyLDggQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTEgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTEg3QTQwWD15CkBAIC01MTAsNyArNTU1LDYgQEAKICMKICMgVFBNIGRldmljZXMKICMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC01MzQsMTggKzU3OCw3MyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKK0NPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BUk1DTENEPXkKK0NPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUPXkKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTY0RDM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTBEMzY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorIyBDT05GSUdfU05EX1JUQ1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CisKKyMKKyMgQUxTQSBBUk0gZGV2aWNlcworIworQ09ORklHX1NORF9MSDdBNDBYX0FDOTc9eQorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcKaW5kZXggMjA4ZDU5MS4uM2E1N2JlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcKQEAgLTEsNTIgKzEsNTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIE1vbiBNYXIgMjggMDA6MTQ6MDggMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2CisjIFRodSBNYXIgMjMgMTc6NTA6MzEgMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfQlJPS0VOX09OX1NNUD15CiBDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKICMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtNTQsNiArNjAsMjMgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogCiAjCisjIEJsb2NrIGxheWVyCisjCisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKworIwogIyBTeXN0ZW0gVHlwZQogIwogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CkBAIC03MSwxMSArOTQsMTUgQEAKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3OTUyWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9MSDdBNDBYPXkKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAogCiAjCiAjIExIN0E0MFggSW1wbGVtZW50YXRpb25zCkBAIC0xMTAsNiArMTM3LDcgQEAKICMKICMgQnVzIHN1cHBvcnQKICMKK0NPTkZJR19BUk1fQU1CQT15CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMTIwLDcgKzE0OCwxOCBAQAogIyBLZXJuZWwgRmVhdHVyZXMKICMKIENPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAorIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTE1NCw2ICsxOTMsODQgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTE2OCw2ICsyODUsMTEgQEAKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiBDT05GSUdfTVREPXkKQEAgLTE3NSw3ICsyOTcsNyBAQAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAogCiAjCkBAIC0xODYsNiArMzA4LDcgQEAKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC0yMTEsMTUgKzMzNCwxOCBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDA0MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC0yNDMsNiArMzY5LDExIEBACiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAogIwogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CkBAIC0yNTQsNyArMzg1LDYgQEAKICMKICMgQmxvY2sgZGV2aWNlcwogIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldApAQCAtMjYyLDE2ICszOTIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwpAQCAtMjkxLDEyICs0MTIsMTMgQEAKICMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BPTEw9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKIENPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfQVJNPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtMzA0LDYgKzQyNiw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIApAQCAtMzE1LDYgKzQzOCw3IEBACiAjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIAogIwogIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKQEAgLTMyOSwxMCArNDUzLDEyIEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKICMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTM0NCw2ICs0NzAsNyBAQAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKQEAgLTM1NCw3MCArNDgxLDggQEAKICMKIAogIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC00MjUsMTEgKzQ5MCwxNyBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC00NTYsNiArNTI3LDggQEAKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtNDcwLDEwICs1NDMsMTMgQEAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtNDgyLDcgKzU1OCwxMyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0FEQ19MSDc9eQorQ09ORklHX0hBU19UT1VDSFNDUkVFTl9BRENfTEg3PXkKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC00OTAsNyArNTcyLDYgQEAKICMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTUwOCw2ICs1ODksOCBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9MSDdBNDBYPXkKQEAgLTUzMywxMyArNjE2LDEzIEBACiAjCiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNTQ3LDEwICs2MzAsMzMgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC01NjMsMTggKzY2OSw4MyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX0FSTUNMQ0Q9eQorQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwMzVRN0RCMDJfSFJURlQ9eQorIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTA1N1EzREMwMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRNjREMzQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMEQzNjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTEyMVMxREc0MSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX0FVT19BMDcwVlcwMV9XSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfSElUQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCiAjCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CisjIENPTkZJR19TTkRfUlRDVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworQ09ORklHX1NORF9BQzk3X0NPREVDPXkKK0NPTkZJR19TTkRfQUM5N19CVVM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKKworIworIyBBTFNBIEFSTSBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfQVJNQUFDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0xIN0E0MFhfQUM5Nz15CisKKyMKKyMgVVNCIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTU5NSw2ICs3NjYsNyBAQAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQpAQCAtNjAzLDE2ICs3NzUsMTkgQEAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCi0jIENPTkZJR19VU0JfQkxVRVRPT1RIX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUc9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfUldfREVURUNUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKQEAgLTYyMSwyMiArNzk2LDMyIEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15CiBDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTY4NiwxNiArODcxLDMzIEBACiAjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIEFUTS9EU0wgZHJpdmVycworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKICMKIAogIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKICMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9MSDc9eQorQ09ORklHX1VTQl9MSDc9eQorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWkVSTz15CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKICMgTU1DL1NEIENhcmQgc3VwcG9ydApAQCAtNzA3LDYgKzkwOSw3IEBACiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTcxNiwxNyArOTE5LDE3IEBACiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTc0OSwxMiArOTUyLDExIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTc2OSw4ICs5NzEsOCBAQAogIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9SVElNRT15CkBAIC03ODcsMTIgKzk4OSwxNCBAQAogIwogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldApAQCAtODAxLDYgKzEwMDUsNyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTgyMCw2ICsxMDI1LDcgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtODc1LDE5ICsxMDgxLDI0IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfREVCVUdfTVVURVhFUz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiAjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRVJST1JTPXkKQEAgLTkxMiw2ICsxMTIzLDcgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTA3OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDIwNzIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzEKKyMgVGh1IEFwciAgNiAxNzowNTo1OCAyMDA2CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPW0KKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QTlg0MDA4PXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyNlQ9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUSj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCitDT05GSUdfUENDQVJEPW0KKyMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorQ09ORklHX1BDTUNJQV9JT0NUTD15CisKKyMKKyMgUEMtY2FyZCBicmlkZ2VzCisjCisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTAKK0NPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CitDT05GSUdfUE1fTEVHQUNZPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BUE09bQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD1tCitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9bQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCitDT05GSUdfTkVUX0tFWT1tCitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfRldNQVJLPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9WUz1tCisjIENPTkZJR19JUF9WU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfVlNfVEFCX0JJVFM9MTIKKworIworIyBJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0CisjCitDT05GSUdfSVBfVlNfUFJPVE9fVENQPXkKK0NPTkZJR19JUF9WU19QUk9UT19VRFA9eQorQ09ORklHX0lQX1ZTX1BST1RPX0VTUD15CitDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQorCisjCisjIElQVlMgc2NoZWR1bGVyCisjCitDT05GSUdfSVBfVlNfUlI9bQorQ09ORklHX0lQX1ZTX1dSUj1tCitDT05GSUdfSVBfVlNfTEM9bQorQ09ORklHX0lQX1ZTX1dMQz1tCitDT05GSUdfSVBfVlNfTEJMQz1tCitDT05GSUdfSVBfVlNfTEJMQ1I9bQorQ09ORklHX0lQX1ZTX0RIPW0KK0NPTkZJR19JUF9WU19TSD1tCitDT05GSUdfSVBfVlNfU0VEPW0KK0NPTkZJR19JUF9WU19OUT1tCisKKyMKKyMgSVBWUyBhcHBsaWNhdGlvbiBoZWxwZXIKKyMKK0NPTkZJR19JUF9WU19GVFA9bQorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9DVF9BQ0NUPXkKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCisjIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9RVUVVRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorCisjCisjIERFQ25ldDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUj1tCisKKyMKKyMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQorQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQorQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQPW0KK0NPTkZJR19CUklER0VfRUJUX0xJTUlUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUks9bQorQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRT1tCitDT05GSUdfQlJJREdFX0VCVF9TVFA9bQorQ09ORklHX0JSSURHRV9FQlRfVkxBTj1tCitDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCitDT05GSUdfQlJJREdFX0VCVF9ETkFUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUktfVD1tCitDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCitDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KK0NPTkZJR19CUklER0VfRUJUX0xPRz1tCisjIENPTkZJR19CUklER0VfRUJUX1VMT0cgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorQ09ORklHX0FUTT15CitDT05GSUdfQVRNX0NMSVA9eQorIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0xBTkU9bQorQ09ORklHX0FUTV9NUE9BPW0KK0NPTkZJR19BVE1fQlIyNjg0PW0KKyMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldAorQ09ORklHX0JSSURHRT1tCitDT05GSUdfVkxBTl84MDIxUT1tCitDT05GSUdfREVDTkVUPW0KKyMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCitDT05GSUdfTExDMj1tCitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KK0NPTkZJR19ERVZfQVBQTEVUQUxLPXkKK0NPTkZJR19JUEREUD1tCitDT05GSUdfSVBERFBfRU5DQVA9eQorQ09ORklHX0lQRERQX0RFQ0FQPXkKK0NPTkZJR19YMjU9bQorQ09ORklHX0xBUEI9bQorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CitDT05GSUdfRUNPTkVUPW0KK0NPTkZJR19FQ09ORVRfQVVOVURQPXkKK0NPTkZJR19FQ09ORVRfTkFUSVZFPXkKK0NPTkZJR19XQU5fUk9VVEVSPW0KKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKK0NPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQorIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworQ09ORklHX05FVF9TQ0hfQ0JRPW0KK0NPTkZJR19ORVRfU0NIX0hUQj1tCitDT05GSUdfTkVUX1NDSF9IRlNDPW0KK0NPTkZJR19ORVRfU0NIX0FUTT1tCitDT05GSUdfTkVUX1NDSF9QUklPPW0KK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorQ09ORklHX05FVF9TQ0hfTkVURU09bQorQ09ORklHX05FVF9TQ0hfSU5HUkVTUz1tCisKKyMKKyMgQ2xhc3NpZmljYXRpb24KKyMKK0NPTkZJR19ORVRfQ0xTPXkKKyMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1BPTElDRT15CisjIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VTVElNQVRPUj15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCitDT05GSUdfSEFNUkFESU89eQorCisjCisjIFBhY2tldCBSYWRpbyBwcm90b2NvbHMKKyMKK0NPTkZJR19BWDI1PW0KKyMgQ09ORklHX0FYMjVfREFNQV9TTEFWRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUUk9NPW0KK0NPTkZJR19ST1NFPW0KKworIworIyBBWC4yNSBuZXR3b3JrIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUtJU1M9bQorQ09ORklHXzZQQUNLPW0KK0NPTkZJR19CUFFFVEhFUj1tCitDT05GSUdfQkFZQ09NX1NFUl9GRFg9bQorQ09ORklHX0JBWUNPTV9TRVJfSERYPW0KK0NPTkZJR19CQVlDT01fUEFSPW0KK0NPTkZJR19CQVlDT01fRVBQPW0KK0NPTkZJR19ZQU09bQorQ09ORklHX0lSREE9bQorCisjCisjIElyREEgcHJvdG9jb2xzCisjCitDT05GSUdfSVJMQU49bQorQ09ORklHX0lSTkVUPW0KK0NPTkZJR19JUkNPTU09bQorIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0CisKKyMKKyMgSXJEQSBvcHRpb25zCisjCitDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQorQ09ORklHX0lSREFfRkFTVF9SUj15CitDT05GSUdfSVJEQV9ERUJVRz15CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0lSVFRZX1NJUj1tCisKKyMKKyMgRG9uZ2xlIHN1cHBvcnQKKyMKK0NPTkZJR19ET05HTEU9eQorQ09ORklHX0VTSV9ET05HTEU9bQorQ09ORklHX0FDVElTWVNfRE9OR0xFPW0KK0NPTkZJR19URUtSQU1fRE9OR0xFPW0KKyMgQ09ORklHX1RPSU0zMjMyX0RPTkdMRSBpcyBub3Qgc2V0CitDT05GSUdfTElURUxJTktfRE9OR0xFPW0KK0NPTkZJR19NQTYwMF9ET05HTEU9bQorQ09ORklHX0dJUkJJTF9ET05HTEU9bQorQ09ORklHX01DUDIxMjBfRE9OR0xFPW0KK0NPTkZJR19PTERfQkVMS0lOX0RPTkdMRT1tCitDT05GSUdfQUNUMjAwTF9ET05HTEU9bQorCisjCisjIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19JUlBPUlRfU0lSPW0KKworIworIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0CisjCisjIENPTkZJR19ET05HTEVfT0xEIGlzIG5vdCBzZXQKKworIworIyBGSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfSVJEQT1tCitDT05GSUdfU0lHTUFURUxfRklSPW0KK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0NNVFA9bQorQ09ORklHX0JUX0hJRFA9bQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0JUX0hDSVVTQj1tCitDT05GSUdfQlRfSENJVVNCX1NDTz15CitDT05GSUdfQlRfSENJVUFSVD1tCitDT05GSUdfQlRfSENJVUFSVF9IND15CitDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKK0NPTkZJR19CVF9IQ0lCQ00yMDNYPW0KKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkZVU0I9bQorQ09ORklHX0JUX0hDSURUTDE9bQorQ09ORklHX0JUX0hDSUJUM0M9bQorQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KK0NPTkZJR19CVF9IQ0lCVFVBUlQ9bQorQ09ORklHX0JUX0hDSVZIQ0k9bQorQ09ORklHX0lFRUU4MDIxMT1tCisjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUCBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD1tCisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9bQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz1tCitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPW0KK0NPTkZJR19NVERfQkxPQ0s9bQorQ09ORklHX01URF9CTE9DS19STz1tCitDT05GSUdfRlRMPW0KK0NPTkZJR19ORlRMPW0KK0NPTkZJR19ORlRMX1JXPXkKK0NPTkZJR19JTkZUTD1tCisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9bQorQ09ORklHX01URF9KRURFQ1BST0JFPW0KK0NPTkZJR19NVERfR0VOX1BST0JFPW0KKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9bQorQ09ORklHX01URF9DRklfQU1EU1REPW0KK0NPTkZJR19NVERfQ0ZJX1NUQUE9bQorQ09ORklHX01URF9DRklfVVRJTD1tCitDT05GSUdfTVREX1JBTT1tCitDT05GSUdfTVREX1JPTT1tCitDT05GSUdfTVREX0FCU0VOVD1tCisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9bQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDQwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTVREX1NMUkFNPW0KK0NPTkZJR19NVERfUEhSQU09bQorQ09ORklHX01URF9NVERSQU09bQorQ09ORklHX01URFJBTV9UT1RBTF9TSVpFPTQwOTYKK0NPTkZJR19NVERSQU1fRVJBU0VfU0laRT0xMjgKK0NPTkZJR19NVERfQkxLTVREPW0KKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9ET0MyMDAwPW0KK0NPTkZJR19NVERfRE9DMjAwMT1tCitDT05GSUdfTVREX0RPQzIwMDFQTFVTPW0KK0NPTkZJR19NVERfRE9DUFJPQkU9bQorQ09ORklHX01URF9ET0NFQ0M9bQorIyBDT05GSUdfTVREX0RPQ1BST0JFX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfRE9DUFJPQkVfQUREUkVTUz0wCisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPW0KKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPW0KK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQPW0KKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0wCisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19QQVJQT1JUPW0KK0NPTkZJR19QQVJQT1JUX1BDPW0KK0NPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQorIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUX1BDX1BDTUNJQT1tCitDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQorIyBDT05GSUdfUEFSUE9SVF9BUkMgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfMTI4ND15CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX1BBUklERT1tCitDT05GSUdfUEFSSURFX1BBUlBPUlQ9bQorCisjCisjIFBhcmFsbGVsIElERSBoaWdoLWxldmVsIGRyaXZlcnMKKyMKK0NPTkZJR19QQVJJREVfUEQ9bQorQ09ORklHX1BBUklERV9QQ0Q9bQorQ09ORklHX1BBUklERV9QRj1tCitDT05GSUdfUEFSSURFX1BUPW0KK0NPTkZJR19QQVJJREVfUEc9bQorCisjCisjIFBhcmFsbGVsIElERSBwcm90b2NvbCBtb2R1bGVzCisjCitDT05GSUdfUEFSSURFX0FURU49bQorQ09ORklHX1BBUklERV9CUENLPW0KK0NPTkZJR19QQVJJREVfQlBDSzY9bQorQ09ORklHX1BBUklERV9DT01NPW0KK0NPTkZJR19QQVJJREVfRFNUUj1tCitDT05GSUdfUEFSSURFX0ZJVDI9bQorQ09ORklHX1BBUklERV9GSVQzPW0KK0NPTkZJR19QQVJJREVfRVBBVD1tCisjIENPTkZJR19QQVJJREVfRVBBVEM4IGlzIG5vdCBzZXQKK0NPTkZJR19QQVJJREVfRVBJQT1tCitDT05GSUdfUEFSSURFX0ZSSVE9bQorQ09ORklHX1BBUklERV9GUlBXPW0KK0NPTkZJR19QQVJJREVfS0JJQz1tCitDT05GSUdfUEFSSURFX0tUVEk9bQorQ09ORklHX1BBUklERV9PTjIwPW0KK0NPTkZJR19QQVJJREVfT04yNj1tCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT1tCitDT05GSUdfQkxLX0RFVl9JREU9bQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPW0KKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz1tCitDT05GSUdfQkxLX0RFVl9JREVDRD1tCitDT05GSUdfQkxLX0RFVl9JREVUQVBFPW0KK0NPTkZJR19CTEtfREVWX0lERUZMT1BQWT1tCitDT05GSUdfQkxLX0RFVl9JREVTQ1NJPW0KKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9bQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPW0KK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPW0KKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KK0NPTkZJR19DSFJfREVWX1NDSD1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCitDT05GSUdfU0NTSV9GQ19BVFRSUz1tCisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FUQT1tCitDT05GSUdfU0NTSV9QUEE9bQorQ09ORklHX1NDU0lfSU1NPW0KKyMgQ09ORklHX1NDU0lfSVpJUF9FUFAxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0laSVBfU0xPV19DVFIgaXMgbm90IHNldAorQ09ORklHX1NDU0lfREVCVUc9bQorCisjCisjIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydAorIworQ09ORklHX1BDTUNJQV9BSEExNTJYPW0KK0NPTkZJR19QQ01DSUFfRkRPTUFJTj1tCitDT05GSUdfUENNQ0lBX05JTkpBX1NDU0k9bQorQ09ORklHX1BDTUNJQV9RTE9HSUM9bQorQ09ORklHX1BDTUNJQV9TWU01M0M1MDA9bQorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ1PW0KKyMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX0VRVUFMSVpFUj1tCitDT05GSUdfVFVOPW0KKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPQ0tFVD15CitDT05GSUdfREU2MDA9bQorQ09ORklHX0RFNjIwPW0KKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisjIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBwb3J0IChwcmUtODAyLjExKQorIworQ09ORklHX1NUUklQPW0KK0NPTkZJR19QQ01DSUFfV0FWRUxBTj1tCitDT05GSUdfUENNQ0lBX05FVFdBVkU9bQorCisjCisjIFdpcmVsZXNzIDgwMi4xMSBGcmVxdWVuY3kgSG9wcGluZyBjYXJkcyBzdXBwb3J0CisjCitDT05GSUdfUENNQ0lBX1JBWUNTPW0KKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX0hFUk1FUz1tCitDT05GSUdfQVRNRUw9bQorCisjCisjIFdpcmVsZXNzIDgwMi4xMWIgUGNtY2lhL0NhcmRidXMgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX1BDTUNJQV9IRVJNRVM9bQorIyBDT05GSUdfUENNQ0lBX1NQRUNUUlVNIGlzIG5vdCBzZXQKK0NPTkZJR19BSVJPX0NTPW0KK0NPTkZJR19QQ01DSUFfQVRNRUw9bQorQ09ORklHX1BDTUNJQV9XTDM1MDE9bQorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfV0lSRUxFU1M9eQorCisjCisjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUX1BDTUNJQT15CitDT05GSUdfUENNQ0lBXzNDNTg5PW0KK0NPTkZJR19QQ01DSUFfM0M1NzQ9bQorQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KK0NPTkZJR19QQ01DSUFfUENORVQ9bQorQ09ORklHX1BDTUNJQV9OTUNMQU49bQorQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCitDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQorQ09ORklHX1BDTUNJQV9BWE5FVD1tCisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKK0NPTkZJR19XQU49eQorQ09ORklHX1NZTkNMSU5LX1NZTkNQUFA9bQorQ09ORklHX0hETEM9bQorQ09ORklHX0hETENfUkFXPXkKK0NPTkZJR19IRExDX1JBV19FVEg9eQorQ09ORklHX0hETENfQ0lTQ089eQorQ09ORklHX0hETENfRlI9eQorQ09ORklHX0hETENfUFBQPXkKK0NPTkZJR19IRExDX1gyNT15CitDT05GSUdfRExDST1tCitDT05GSUdfRExDSV9DT1VOVD0yNAorQ09ORklHX0RMQ0lfTUFYPTgKK0NPTkZJR19XQU5fUk9VVEVSX0RSSVZFUlM9eQorQ09ORklHX0xBUEJFVEhFUj1tCitDT05GSUdfWDI1X0FTWT1tCisKKyMKKyMgQVRNIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfQVRNX1RDUD1tCitDT05GSUdfUExJUD1tCitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9BVE09bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCitDT05GSUdfSVNETj1tCisKKyMKKyMgT2xkIElTRE40TGludXgKKyMKK0NPTkZJR19JU0ROX0k0TD1tCitDT05GSUdfSVNETl9QUFA9eQorQ09ORklHX0lTRE5fUFBQX1ZKPXkKK0NPTkZJR19JU0ROX01QUD15CitDT05GSUdfSVBQUF9GSUxURVI9eQorQ09ORklHX0lTRE5fUFBQX0JTRENPTVA9bQorQ09ORklHX0lTRE5fQVVESU89eQorQ09ORklHX0lTRE5fVFRZX0ZBWD15CitDT05GSUdfSVNETl9YMjU9eQorCisjCisjIElTRE4gZmVhdHVyZSBzdWJtb2R1bGVzCisjCitDT05GSUdfSVNETl9EUlZfTE9PUD1tCitDT05GSUdfSVNETl9ESVZFUlNJT049bQorCisjCisjIElTRE40TGludXggaGFyZHdhcmUgZHJpdmVycworIworCisjCisjIFBhc3NpdmUgY2FyZHMKKyMKK0NPTkZJR19JU0ROX0RSVl9ISVNBWD1tCisKKyMKKyMgRC1jaGFubmVsIHByb3RvY29sIGZlYXR1cmVzCisjCitDT05GSUdfSElTQVhfRVVSTz15CitDT05GSUdfREVfQU9DPXkKKyMgQ09ORklHX0hJU0FYX05PX1NFTkRDT01QTEVURSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVNBWF9OT19MTEMgaXMgbm90IHNldAorIyBDT05GSUdfSElTQVhfTk9fS0VZUEFEIGlzIG5vdCBzZXQKK0NPTkZJR19ISVNBWF8xVFI2PXkKK0NPTkZJR19ISVNBWF9OSTE9eQorQ09ORklHX0hJU0FYX01BWF9DQVJEUz04CisKKyMKKyMgSGlTYXggc3VwcG9ydGVkIGNhcmRzCisjCitDT05GSUdfSElTQVhfMTZfMz15CitDT05GSUdfSElTQVhfUzBCT1g9eQorQ09ORklHX0hJU0FYX0ZSSVRaUENJPXkKK0NPTkZJR19ISVNBWF9BVk1fQTFfUENNQ0lBPXkKK0NPTkZJR19ISVNBWF9FTFNBPXkKK0NPTkZJR19ISVNBWF9ESUVITERJVkE9eQorQ09ORklHX0hJU0FYX1NFRExCQVVFUj15CitDT05GSUdfSElTQVhfTklDQ1k9eQorQ09ORklHX0hJU0FYX0dBWkVMPXkKK0NPTkZJR19ISVNBWF9IRkNfU1g9eQorIyBDT05GSUdfSElTQVhfREVCVUcgaXMgbm90IHNldAorCisjCisjIEhpU2F4IFBDTUNJQSBjYXJkIHNlcnZpY2UgbW9kdWxlcworIworQ09ORklHX0hJU0FYX1NFRExCQVVFUl9DUz1tCitDT05GSUdfSElTQVhfRUxTQV9DUz1tCitDT05GSUdfSElTQVhfQVZNX0ExX0NTPW0KK0NPTkZJR19ISVNBWF9URUxFU19DUz1tCisKKyMKKyMgSGlTYXggc3ViIGRyaXZlciBtb2R1bGVzCisjCitDT05GSUdfSElTQVhfU1Q1NDgxPW0KK0NPTkZJR19ISVNBWF9IRkNVU0I9bQorIyBDT05GSUdfSElTQVhfSEZDNFM4UyBpcyBub3Qgc2V0CitDT05GSUdfSElTQVhfSERMQz15CisKKyMKKyMgQWN0aXZlIGNhcmRzCisjCisKKyMKKyMgU2llbWVucyBHaWdhc2V0CisjCisjIENPTkZJR19JU0ROX0RSVl9HSUdBU0VUIGlzIG5vdCBzZXQKKworIworIyBDQVBJIHN1YnN5c3RlbQorIworQ09ORklHX0lTRE5fQ0FQST1tCitDT05GSUdfSVNETl9EUlZfQVZNQjFfVkVSQk9TRV9SRUFTT049eQorQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFPXkKK0NPTkZJR19JU0ROX0NBUElfQ0FQSTIwPW0KK0NPTkZJR19JU0ROX0NBUElfQ0FQSUZTX0JPT0w9eQorQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlM9bQorQ09ORklHX0lTRE5fQ0FQSV9DQVBJRFJWPW0KKworIworIyBDQVBJIGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBBY3RpdmUgQVZNIGNhcmRzCisjCitDT05GSUdfQ0FQSV9BVk09eQorQ09ORklHX0lTRE5fRFJWX0FWTUIxX0IxUENNQ0lBPW0KK0NPTkZJR19JU0ROX0RSVl9BVk1CMV9BVk1fQ1M9bQorCisjCisjIEFjdGl2ZSBFaWNvbiBESVZBIFNlcnZlciBjYXJkcworIworQ09ORklHX0NBUElfRUlDT049eQorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj1tCitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKK0NPTkZJR19JTlBVVF9KT1lERVY9bQorQ09ORklHX0lOUFVUX1RTREVWPW0KK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWD0yNDAKK0NPTkZJR19JTlBVVF9UU0RFVl9TQ1JFRU5fWT0zMjAKK0NPTkZJR19JTlBVVF9FVkRFVj1tCitDT05GSUdfSU5QVVRfRVZCVUc9bQorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKK0NPTkZJR19LRVlCT0FSRF9TVU5LQkQ9bQorQ09ORklHX0tFWUJPQVJEX0xLS0JEPW0KK0NPTkZJR19LRVlCT0FSRF9YVEtCRD1tCitDT05GSUdfS0VZQk9BUkRfTkVXVE9OPW0KK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorQ09ORklHX01PVVNFX1ZTWFhYQUE9bQorQ09ORklHX0lOUFVUX0pPWVNUSUNLPXkKK0NPTkZJR19KT1lTVElDS19BTkFMT0c9bQorQ09ORklHX0pPWVNUSUNLX0EzRD1tCitDT05GSUdfSk9ZU1RJQ0tfQURJPW0KK0NPTkZJR19KT1lTVElDS19DT0JSQT1tCitDT05GSUdfSk9ZU1RJQ0tfR0YySz1tCitDT05GSUdfSk9ZU1RJQ0tfR1JJUD1tCitDT05GSUdfSk9ZU1RJQ0tfR1JJUF9NUD1tCitDT05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UPW0KK0NPTkZJR19KT1lTVElDS19JTlRFUkFDVD1tCitDT05GSUdfSk9ZU1RJQ0tfU0lERVdJTkRFUj1tCitDT05GSUdfSk9ZU1RJQ0tfVE1EQz1tCitDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFPW0KK0NPTkZJR19KT1lTVElDS19JRk9SQ0VfVVNCPXkKK0NPTkZJR19KT1lTVElDS19JRk9SQ0VfMjMyPXkKK0NPTkZJR19KT1lTVElDS19XQVJSSU9SPW0KK0NPTkZJR19KT1lTVElDS19NQUdFTExBTj1tCitDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkI9bQorQ09ORklHX0pPWVNUSUNLX1NQQUNFQkFMTD1tCitDT05GSUdfSk9ZU1RJQ0tfU1RJTkdFUj1tCisjIENPTkZJR19KT1lTVElDS19UV0lESk9ZIGlzIG5vdCBzZXQKK0NPTkZJR19KT1lTVElDS19EQjk9bQorQ09ORklHX0pPWVNUSUNLX0dBTUVDT049bQorQ09ORklHX0pPWVNUSUNLX1RVUkJPR1JBRlg9bQorQ09ORklHX0pPWVNUSUNLX0pPWURVTVA9bQorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9HVU5aRT1tCisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9VSU5QVVQ9bQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPW0KK0NPTkZJR19TRVJJT19QQVJLQkQ9bQorQ09ORklHX1NFUklPX0xJQlBTMj15CitDT05GSUdfU0VSSU9fUkFXPW0KK0NPTkZJR19HQU1FUE9SVD1tCitDT05GSUdfR0FNRVBPUlRfTlM1NTg9bQorQ09ORklHX0dBTUVQT1JUX0w0PW0KKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorQ09ORklHX0NPTVBVVE9ORT1tCitDT05GSUdfUk9DS0VUUE9SVD1tCitDT05GSUdfQ1lDTEFERVM9bQorIyBDT05GSUdfQ1laX0lOVFIgaXMgbm90IHNldAorQ09ORklHX0RJR0lFUENBPW0KK0NPTkZJR19NT1hBX0lOVEVMTElPPW0KK0NPTkZJR19NT1hBX1NNQVJUSU89bQorIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5DTElOS01QPW0KK0NPTkZJR19OX0hETEM9bQorIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAorQ09ORklHX1NYPW0KK0NPTkZJR19SSU89bQorQ09ORklHX1JJT19PTERQQ0k9eQorQ09ORklHX1NUQUxEUlY9eQorQ09ORklHX1NUQUxMSU9OPW0KK0NPTkZJR19JU1RBTExJT049bQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX0NTPW0KK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX1BSSU5URVI9bQorIyBDT05GSUdfTFBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfUFBERVY9bQorQ09ORklHX1RJUEFSPW0KKworIworIyBJUE1JCisjCitDT05GSUdfSVBNSV9IQU5ETEVSPW0KKyMgQ09ORklHX0lQTUlfUEFOSUNfRVZFTlQgaXMgbm90IHNldAorQ09ORklHX0lQTUlfREVWSUNFX0lOVEVSRkFDRT1tCitDT05GSUdfSVBNSV9TST1tCitDT05GSUdfSVBNSV9XQVRDSERPRz1tCitDT05GSUdfSVBNSV9QT1dFUk9GRj1tCisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19TT0ZUX1dBVENIRE9HPW0KKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19VU0JQQ1dBVENIRE9HPW0KK0NPTkZJR19OVlJBTT1tCitDT05GSUdfRFRMSz1tCitDT05GSUdfUjM5NjQ9bQorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorQ09ORklHX1JBV19EUklWRVI9bQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19DSEFSREVWPW0KKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPW0KK0NPTkZJR19JMkNfQUxHT1BDRj1tCitDT05GSUdfSTJDX0FMR09QQ0E9bQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19JU0E9bQorQ09ORklHX0kyQ19QQVJQT1JUPW0KK0NPTkZJR19JMkNfUEFSUE9SVF9MSUdIVD1tCitDT05GSUdfSTJDX1NUVUI9bQorQ09ORklHX0kyQ19QQ0FfSVNBPW0KKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT1tCitDT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19QQ0Y4NTkxPW0KKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKK0NPTkZJR19XMT1tCisKKyMKKyMgMS13aXJlIEJ1cyBNYXN0ZXJzCisjCisjIENPTkZJR19XMV9NQVNURVJfRFM5NDkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAorCisjCisjIDEtd2lyZSBTbGF2ZXMKKyMKKyMgQ09ORklHX1cxX1NMQVZFX1RIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPW0KK0NPTkZJR19TRU5TT1JTX0FETTEwMjE9bQorQ09ORklHX1NFTlNPUlNfQURNMTAyNT1tCitDT05GSUdfU0VOU09SU19BRE0xMDI2PW0KK0NPTkZJR19TRU5TT1JTX0FETTEwMzE9bQorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FTQjEwMD1tCisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0RTMTYyMT1tCisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRlNDSEVSPW0KKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0dMNTE4U009bQorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0lUODc9bQorQ09ORklHX1NFTlNPUlNfTE02Mz1tCitDT05GSUdfU0VOU09SU19MTTc1PW0KK0NPTkZJR19TRU5TT1JTX0xNNzc9bQorQ09ORklHX1NFTlNPUlNfTE03OD1tCitDT05GSUdfU0VOU09SU19MTTgwPW0KK0NPTkZJR19TRU5TT1JTX0xNODM9bQorQ09ORklHX1NFTlNPUlNfTE04NT1tCitDT05GSUdfU0VOU09SU19MTTg3PW0KK0NPTkZJR19TRU5TT1JTX0xNOTA9bQorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX01BWDE2MTk9bQorQ09ORklHX1NFTlNPUlNfUEM4NzM2MD1tCitDT05GSUdfU0VOU09SU19TTVNDNDdNMT1tCisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfVzgzNzgxRD1tCisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTPW0KK0NPTkZJR19TRU5TT1JTX1c4MzYyN0hGPW0KKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKK0NPTkZJR19EVkI9eQorQ09ORklHX0RWQl9DT1JFPW0KKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVFRVU0JfQlVER0VUPW0KK0NPTkZJR19EVkJfVFRVU0JfREVDPW0KK0NPTkZJR19EVkJfQ0lORVJHWVQyPW0KK0NPTkZJR19EVkJfQ0lORVJHWVQyX1RVTklORz15CitDT05GSUdfRFZCX0NJTkVSR1lUMl9TVFJFQU1fVVJCX0NPVU5UPTMyCitDT05GSUdfRFZCX0NJTkVSR1lUMl9TVFJFQU1fQlVGX1NJWkU9NTEyCitDT05GSUdfRFZCX0NJTkVSR1lUMl9RVUVSWV9JTlRFUlZBTD0yNTAKK0NPTkZJR19EVkJfQ0lORVJHWVQyX0VOQUJMRV9SQ19JTlBVVF9ERVZJQ0U9eQorQ09ORklHX0RWQl9DSU5FUkdZVDJfUkNfUVVFUllfSU5URVJWQUw9MTAwCisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKKyMKKworIworIyBEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfU1RWMDI5OT1tCitDT05GSUdfRFZCX0NYMjQxMTA9bQorIyBDT05GSUdfRFZCX0NYMjQxMjMgaXMgbm90IHNldAorQ09ORklHX0RWQl9UREE4MDgzPW0KK0NPTkZJR19EVkJfTVQzMTI9bQorQ09ORklHX0RWQl9WRVMxWDkzPW0KKyMgQ09ORklHX0RWQl9TNUgxNDIwIGlzIG5vdCBzZXQKKworIworIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9TUDg4NzA9bQorQ09ORklHX0RWQl9TUDg4N1g9bQorQ09ORklHX0RWQl9DWDIyNzAwPW0KK0NPTkZJR19EVkJfQ1gyMjcwMj1tCitDT05GSUdfRFZCX0w2NDc4MT1tCitDT05GSUdfRFZCX1REQTEwMDRYPW0KK0NPTkZJR19EVkJfTlhUNjAwMD1tCitDT05GSUdfRFZCX01UMzUyPW0KKyMgQ09ORklHX0RWQl9aTDEwMzUzIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfRElCMzAwME1CPW0KK0NPTkZJR19EVkJfRElCMzAwME1DPW0KKworIworIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9WRVMxODIwPW0KK0NPTkZJR19EVkJfVERBMTAwMjE9bQorQ09ORklHX0RWQl9TVFYwMjk3PW0KKworIworIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdGVyaWFsIERUVikgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfTlhUMjAwWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQkNNMzUxMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9bQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KK0NPTkZJR19TTkRfSFdERVA9bQorQ09ORklHX1NORF9SQVdNSURJPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorCisjCisjIEdlbmVyaWMgZGV2aWNlcworIworQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCitDT05GSUdfU05EX0RVTU1ZPW0KK0NPTkZJR19TTkRfVklSTUlEST1tCitDT05GSUdfU05EX01UUEFWPW0KK0NPTkZJR19TTkRfU0VSSUFMX1UxNjU1MD1tCitDT05GSUdfU05EX01QVTQwMT1tCisKKyMKKyMgQUxTQSBBUk0gZGV2aWNlcworIworCisjCisjIFVTQiBkZXZpY2VzCisjCitDT05GSUdfU05EX1VTQl9BVURJTz1tCisKKyMKKyMgUENNQ0lBIGRldmljZXMKKyMKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworQ09ORklHX1NPVU5EX1BSSU1FPW0KKyMgQ09ORklHX09CU09MRVRFX09TU19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfVFZNSVhFUj1tCisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9bQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfQkFORFdJRFRIPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NMODExX0hDRD1tCisjIENPTkZJR19VU0JfU0w4MTFfQ1MgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworQ09ORklHX1VTQl9BQ009bQorQ09ORklHX1VTQl9QUklOVEVSPW0KKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDA9eQorQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQorQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CitDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KK0NPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCitDT05GSUdfVVNCX0tCRD1tCitDT05GSUdfVVNCX01PVVNFPW0KK0NPTkZJR19VU0JfQUlQVEVLPW0KK0NPTkZJR19VU0JfV0FDT009bQorIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0tCVEFCPW0KK0NPTkZJR19VU0JfUE9XRVJNQVRFPW0KK0NPTkZJR19VU0JfTVRPVUNIPW0KKyMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VHQUxBWD1tCisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1hQQUQ9bQorQ09ORklHX1VTQl9BVElfUkVNT1RFPW0KKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKK0NPTkZJR19VU0JfTURDODAwPW0KK0NPTkZJR19VU0JfTUlDUk9URUs9bQorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCitDT05GSUdfVVNCX0NBVEM9bQorQ09ORklHX1VTQl9LQVdFVEg9bQorQ09ORklHX1VTQl9QRUdBU1VTPW0KK0NPTkZJR19VU0JfUlRMODE1MD1tCitDT05GSUdfVVNCX1VTQk5FVD1tCitDT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KK0NPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KKyMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTkVUX1pBVVJVUz1tCisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1VTUzcyMD1tCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworQ09ORklHX1VTQl9TRVJJQUw9bQorQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQU5ZREFUQSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9CRUxLSU49bQorQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUPW0KK0NPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVD1tCisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KK0NPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KK0NPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KK0NPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KK0NPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQorQ09ORklHX1VTQl9TRVJJQUxfSVI9bQorQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQorQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEk9bQorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfSVBXPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQorQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KK0NPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkVfUEFEREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLPW0KK0NPTkZJR19VU0JfU0VSSUFMX1hJUkNPTT1tCitDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KK0NPTkZJR19VU0JfRVpVU0I9eQorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorQ09ORklHX1VTQl9BVUVSU1dBTEQ9bQorQ09ORklHX1VTQl9SSU81MDA9bQorQ09ORklHX1VTQl9MRUdPVE9XRVI9bQorQ09ORklHX1VTQl9MQ0Q9bQorQ09ORklHX1VTQl9MRUQ9bQorQ09ORklHX1VTQl9DWVRIRVJNPW0KK0NPTkZJR19VU0JfUEhJREdFVEtJVD1tCitDT05GSUdfVVNCX1BISURHRVRTRVJWTz1tCisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorQ09ORklHX1VTQl9URVNUPW0KKworIworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVRNPW0KK0NPTkZJR19VU0JfU1BFRURUT1VDSD1tCisjIENPTkZJR19VU0JfQ1hBQ1JVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VRUFHTEVBVE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hVU0JBVE0gaXMgbm90IHNldAorCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRD15CitDT05GSUdfVVNCX0RVTU1ZX0hDRD1tCitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorQ09ORklHX1VTQl9aRVJPPW0KK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQkxPQ0s9bQorCisjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz1tCitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pCRD1tCisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGU19GUz1tCitDT05GSUdfSkZTX1BPU0lYX0FDTD15CisjIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfU1RBVElTVElDUz15CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorQ09ORklHX1hGU19FWFBPUlQ9eQorQ09ORklHX1hGU19RVU9UQT15CitDT05GSUdfWEZTX1NFQ1VSSVRZPXkKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfUlQ9eQorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPW0KK0NPTkZJR19ST01GU19GUz1tCitDT05GSUdfSU5PVElGWT15CitDT05GSUdfUVVPVEE9eQorQ09ORklHX1FGTVRfVjE9bQorQ09ORklHX1FGTVRfVjI9bQorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19aSVNPRlNfRlM9bQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9bQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworQ09ORklHX0FERlNfRlM9bQorIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KK0NPTkZJR19CRUZTX0ZTPW0KKyMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19KRkZTX0ZTPW0KK0NPTkZJR19KRkZTX0ZTX1ZFUkJPU0U9MAorQ09ORklHX0pGRlNfUFJPQ19GUz15CitDT05GSUdfSkZGUzJfRlM9bQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorQ09ORklHX1ZYRlNfRlM9bQorQ09ORklHX0hQRlNfRlM9bQorQ09ORklHX1FOWDRGU19GUz1tCitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfTkZTX0RJUkVDVElPPXkKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KK0NPTkZJR19TVU5SUENfR1NTPW0KK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9bQorQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTM9bQorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HPXkKK0NPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HPXkKK0NPTkZJR19OQ1BGU19TVFJPTkc9eQorQ09ORklHX05DUEZTX05GU19OUz15CitDT05GSUdfTkNQRlNfT1MyX05TPXkKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorQ09ORklHX05DUEZTX0VYVFJBUz15CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorQ09ORklHX0FGU19GUz1tCitDT05GSUdfUlhSUEM9bQorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfQUNPUk5fUEFSVElUSU9OPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9DVU1BTkEgaXMgbm90IHNldAorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OX0VFU09YIGlzIG5vdCBzZXQKK0NPTkZJR19BQ09STl9QQVJUSVRJT05fSUNTPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9BREZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9QT1dFUlRFQyBpcyBub3Qgc2V0CitDT05GSUdfQUNPUk5fUEFSVElUSU9OX1JJU0NJWD15CitDT05GSUdfT1NGX1BBUlRJVElPTj15CitDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKK0NPTkZJR19BVEFSSV9QQVJUSVRJT049eQorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CitDT05GSUdfTERNX1BBUlRJVElPTj15CisjIENPTkZJR19MRE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NHSV9QQVJUSVRJT049eQorQ09ORklHX1VMVFJJWF9QQVJUSVRJT049eQorQ09ORklHX1NVTl9QQVJUSVRJT049eQorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfT1BST0ZJTEU9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUz1tCitDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUc9bQorQ09ORklHX1NFQ1VSSVRZX1NFQ0xWTD1tCisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9bQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19SRUVEX1NPTE9NT049bQorQ09ORklHX1JFRURfU09MT01PTl9ERUMxNj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggZGJjYjExYS4uYjViY2ViYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtMjcxLDcgKzI3MSw3IEBACiBAIHI4ID0gc3lzY2FsbCB0YWJsZQogCQkudHlwZQlzeXNfc3lzY2FsbCwgI2Z1bmN0aW9uCiBzeXNfc3lzY2FsbDoKLQkJZW9yCXNjbm8sIHIwLCAjX19OUl9PQUJJX1NZU0NBTExfQkFTRQorCQliaWMJc2NubywgcjAsICNfX05SX09BQklfU1lTQ0FMTF9CQVNFCiAJCWNtcAlzY25vLCAjX19OUl9zeXNjYWxsIC0gX19OUl9TWVNDQUxMX0JBU0UKIAkJY21wbmUJc2NubywgI05SX3N5c2NhbGxzCUAgY2hlY2sgcmFuZ2UKIAkJc3RtbG9pYQlzcCwge3I1LCByNn0JCUAgc2h1ZmZsZSBhcmdzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggMmQ1ODk2Yi4uYmNjMTlmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwpAQCAtMzQyLDEwICszNDIsMTAgQEAKIAogI2lmZGVmIENPTkZJR19OT19JRExFX0haCiAJaWYgKCEoYWN0aW9uLT5mbGFncyAmIFNBX1RJTUVSKSAmJiBzeXN0ZW1fdGltZXItPmR5bl90aWNrICE9IE5VTEwpIHsKLQkJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisJCXNwaW5fbG9jaygmc3lzdGVtX3RpbWVyLT5keW5fdGljay0+bG9jayk7CiAJCWlmIChzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5zdGF0ZSAmIERZTl9USUNLX0VOQUJMRUQpCiAJCQlzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5oYW5kbGVyKGlycSwgMCwgcmVncyk7Ci0JCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5sb2NrKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggZDZiZDQzNS4uOWMxMmQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0zNzksNyArMzc5LDcgQEAKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAogCWlmIChkeW5fdGljaykgewotCQl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmR5bl90aWNrLT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IDA7CiAJCWlmICghKGR5bl90aWNrLT5zdGF0ZSAmIERZTl9USUNLX0VOQUJMRUQpKSB7CiAJCQlyZXQgPSBkeW5fdGljay0+ZW5hYmxlKCk7CkBAIC0zODcsNyArMzg3LDcgQEAKIAkJCWlmIChyZXQgPT0gMCkKIAkJCQlkeW5fdGljay0+c3RhdGUgfD0gRFlOX1RJQ0tfRU5BQkxFRDsKIAkJfQotCQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00MDAsNyArNDAwLDcgQEAKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAogCWlmIChkeW5fdGljaykgewotCQl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmR5bl90aWNrLT5sb2NrLCBmbGFncyk7CiAJCXJldCA9IDA7CiAJCWlmIChkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSB7CiAJCQlyZXQgPSBkeW5fdGljay0+ZGlzYWJsZSgpOwpAQCAtNDA4LDcgKzQwOCw3IEBACiAJCQlpZiAocmV0ID09IDApCiAJCQkJZHluX3RpY2stPnN0YXRlICY9IH5EWU5fVElDS19FTkFCTEVEOwogCQl9Ci0JCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR5bl90aWNrLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTQyMiwxNSArNDIyLDIwIEBACiB2b2lkIHRpbWVyX2R5bl9yZXByb2dyYW0odm9pZCkKIHsKIAlzdHJ1Y3QgZHluX3RpY2tfdGltZXIgKmR5bl90aWNrID0gc3lzdGVtX3RpbWVyLT5keW5fdGljazsKLQl1bnNpZ25lZCBsb25nIG5leHQsIHNlcTsKKwl1bnNpZ25lZCBsb25nIG5leHQsIHNlcSwgZmxhZ3M7CiAKLQlpZiAoZHluX3RpY2sgJiYgKGR5bl90aWNrLT5zdGF0ZSAmIERZTl9USUNLX0VOQUJMRUQpKSB7CisJaWYgKCFkeW5fdGljaykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR5bl90aWNrLT5sb2NrLCBmbGFncyk7CisJaWYgKGR5bl90aWNrLT5zdGF0ZSAmIERZTl9USUNLX0VOQUJMRUQpIHsKIAkJbmV4dCA9IG5leHRfdGltZXJfaW50ZXJydXB0KCk7CiAJCWRvIHsKIAkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCQkJZHluX3RpY2stPnJlcHJvZ3JhbShuZXh0X3RpbWVyX2ludGVycnVwdCgpIC0gamlmZmllcyk7CisJCQlkeW5fdGljay0+cmVwcm9ncmFtKG5leHQgLSBqaWZmaWVzKTsKIAkJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR5bl90aWNrLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHRpbWVyX3Nob3dfZHluX3RpY2soc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQpAQCAtNDk5LDUgKzUwNCwxMCBAQAogCWlmIChzeXN0ZW1fdGltZXItPm9mZnNldCA9PSBOVUxMKQogCQlzeXN0ZW1fdGltZXItPm9mZnNldCA9IGR1bW15X2dldHRpbWVvZmZzZXQ7CiAJc3lzdGVtX3RpbWVyLT5pbml0KCk7CisKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorCWlmIChzeXN0ZW1fdGltZXItPmR5bl90aWNrKQorCQlzeXN0ZW1fdGltZXItPmR5bl90aWNrLT5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKaW5kZXggOWJlMDFiMGMuLmUyNDU2NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCkBAIC0xMTEsMjEgKzExMSwyMSBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgdHM3Mnh4X3J0Y19yZWFkYih1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgdW5zaWduZWQgY2hhciB0czcyeHhfcnRjX3JlYWRieXRlKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlfX3Jhd193cml0ZWIoYWRkciwgVFM3MlhYX1JUQ19JTkRFWF9WSVJUX0JBU0UpOwogCXJldHVybiBfX3Jhd19yZWFkYihUUzcyWFhfUlRDX0RBVEFfVklSVF9CQVNFKTsKIH0KIAotc3RhdGljIHZvaWQgdHM3Mnh4X3J0Y193cml0ZWIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHZvaWQgdHM3Mnh4X3J0Y193cml0ZWJ5dGUodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCV9fcmF3X3dyaXRlYihhZGRyLCBUUzcyWFhfUlRDX0lOREVYX1ZJUlRfQkFTRSk7CiAJX19yYXdfd3JpdGViKHZhbHVlLCBUUzcyWFhfUlRDX0RBVEFfVklSVF9CQVNFKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtNDh0ODZfb3BzIHRzNzJ4eF9ydGNfb3BzID0gewotCS5yZWFkYgkJCT0gdHM3Mnh4X3J0Y19yZWFkYiwKLQkud3JpdGViCQkJPSB0czcyeHhfcnRjX3dyaXRlYiwKKwkucmVhZGJ5dGUJCT0gdHM3Mnh4X3J0Y19yZWFkYnl0ZSwKKwkud3JpdGVieXRlCQk9IHRzNzJ4eF9ydGNfd3JpdGVieXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHM3Mnh4X3J0Y19kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2lycS5jCmluZGV4IGVlYjhhNmQuLmE1ZGU1ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2lycS5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIGlteF9ncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlERUJVR19JUlEoIiVzOiBpcnEgJWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKLQlJU1IoSVJRX1RPX1JFRyhpcnEpKSB8PSAxIDw8ICgoaXJxIC0gSVJRX0dQSU9BKDApKSAlIDMyKTsKKwlJU1IoSVJRX1RPX1JFRyhpcnEpKSA9IDEgPDwgKChpcnEgLSBJUlFfR1BJT0EoMCkpICUgMzIpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggYTA3MjRmMi4uOWY1NWY1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC0yMzIsOCArMjMyLDYgQEAKIAlmb3IgKGkgPSBJUlFfUElDX1NUQVJUOyBpIDw9IElSUV9QSUNfRU5EOyBpKyspIHsKIAkJaWYgKGkgPT0gMTEpCiAJCQlpID0gMjI7Ci0JCWlmIChpID09IElSUV9DUF9DUFBMRElOVCkKLQkJCWkrKzsKIAkJaWYgKGkgPT0gMjkpCiAJCQlicmVhazsKIAkJc2V0X2lycV9jaGlwKGksICZwaWNfY2hpcCk7CkBAIC0yNTksOCArMjU3LDcgQEAKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CiAJfQogCi0Jc2V0X2lycV9oYW5kbGVyKElSUV9DUF9DUFBMRElOVCwgc2ljX2hhbmRsZV9pcnEpOwotCXBpY191bm1hc2tfaXJxKElSUV9DUF9DUFBMRElOVCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0NQX0NQUExESU5ULCBzaWNfaGFuZGxlX2lycSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2NvcmUuYwppbmRleCAwOTJlZTEyLi5hZmZkMWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9jb3JlLmMKQEAgLTE3OCw4ICsxNzgsMTIgQEAKIAogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmludHJfcmVnID0gSVhQMjNYWF9JTlRSX0VOMSArIChpcnEgLyAzMik7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaW50cl9yZWc7CiAKKwlpZiAoaXJxID49IDU2KQorCQlpcnEgKz0gODsKKworCWludHJfcmVnID0gSVhQMjNYWF9JTlRSX0VOMSArIChpcnEgLyAzMik7CiAJKmludHJfcmVnICY9IH4oMSA8PCAoaXJxICUgMzIpKTsKIH0KIApAQCAtMTk5LDE3ICsyMDMsMjUgQEAKICAqLwogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfbGV2ZWxfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaW50cl9yZWcgPSBJWFAyM1hYX0lOVFJfRU4xICsgKGlycSAvIDMyKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppbnRyX3JlZzsKIAogCWl4cDIzeHhfaXJxX2FjayhpcnEpOwogCisJaWYgKGlycSA+PSA1NikKKwkJaXJxICs9IDg7CisKKwlpbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOwogCSppbnRyX3JlZyB8PSAoMSA8PCAoaXJxICUgMzIpKTsKIH0KIAogc3RhdGljIHZvaWQgaXhwMjN4eF9pcnFfZWRnZV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmludHJfcmVnOwogCisJaWYgKGlycSA+PSA1NikKKwkJaXJxICs9IDg7CisKKwlpbnRyX3JlZyA9IElYUDIzWFhfSU5UUl9FTjEgKyAoaXJxIC8gMzIpOwogCSppbnRyX3JlZyB8PSAoMSA8PCAoaXJxICUgMzIpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKaW5kZXggMmEzOWY5ZS4uM2IyM2Y0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICAyKSBJZiA+IDY0TUIgb2YgbWVtb3J5IHNwYWNlIGlzIHJlcXVpcmVkLCB0aGUgSVhQNHh4IGNhbiBiZSAKIAkgICAgIGNvbmZpZ3VyZWQgdG8gdXNlIGluZGlyZWN0IHJlZ2lzdGVycyB0byBhY2Nlc3MgUENJIFRoaXMgYWxsb3dzIAogCSAgICAgZm9yIHVwIHRvIDEyOE1CICgweDQ4MDAwMDAwIHRvIDB4NGZmZmZmZmYpIG9mIG1lbW9yeSBvbiB0aGUgYnVzLiAKLQkgICAgIFRoZSBkaXNhZHZhbnRhZGdlIG9mIHRoaXMgaXMgdGhhdCBldmVyeSBQQ0kgYWNjZXNzIHJlcXVpcmVzIAorCSAgICAgVGhlIGRpc2FkdmFudGFnZSBvZiB0aGlzIGlzIHRoYXQgZXZlcnkgUENJIGFjY2VzcyByZXF1aXJlcyAKIAkgICAgIHRocmVlIGxvY2FsIHJlZ2lzdGVyIGFjY2Vzc2VzIHBsdXMgYSBzcGlubG9jaywgYnV0IGluIHNvbWUgCiAJICAgICBjYXNlcyB0aGUgcGVyZm9ybWFuY2UgaGl0IGlzIGFjY2VwdGFibGUuIEluIGFkZGl0aW9uLCB5b3UgY2Fubm90IAogCSAgICAgbW1hcCgpIFBDSSBkZXZpY2VzIGluIHRoaXMgY2FzZSBkdWUgdG8gdGhlIGluZGlyZWN0IG5hdHVyZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZwppbmRleCA4YTE3ODY3YS4uNTU4YTM0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L0tjb25maWcKQEAgLTE0LDYgKzE0LDcgQEAKIAlib29sICJMUEQ3QTQwMCBDYXJkIEVuZ2luZSIKIAlzZWxlY3QgQVJDSF9MSDdBNDAwCiAjCXNlbGVjdCBJREVfUE9MTAorCXNlbGVjdCBIQVNfVE9VQ0hTQ1JFRU5fQURTNzg0M19MSDcKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCdzCiAJICBMUEQ3QTQwMCBDYXJkRW5naW5lLiAgRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgTFBEN0E0MDAgYW5kCkBAIC0yMyw2ICsyNCw3IEBACiAJYm9vbCAiTFBEN0E0MDQgQ2FyZCBFbmdpbmUiCiAJc2VsZWN0IEFSQ0hfTEg3QTQwNAogIwlzZWxlY3QgSURFX1BPTEwKKwlzZWxlY3QgSEFTX1RPVUNIU0NSRUVOX0FEQ19MSDcKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCdzCiAJICBMUEQ3QTQwNCBDYXJkRW5naW5lLiBGb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBMUEQ3QTQwMCBhbmQKQEAgLTM0LDYgKzM2LDkgQEAKIGNvbmZpZyBBUkNIX0xIN0E0MDQKIAlib29sCiAKK2NvbmZpZyBMUEQ3QTQwWF9DUExEX1NTUAorCWJvb2wKKwogY29uZmlnIExIN0E0MFhfQ09OVElHTUVNCiAJYm9vbCAiRGlzYWJsZSBOVU1BIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX0xIN0E0MFgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9NYWtlZmlsZQppbmRleCBlOTA1MTJkLi45NGI4NjE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L01ha2VmaWxlCkBAIC00LDExICs0LDE0IEBACiAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKLW9iai15CQkJOj0gdGltZS5vCi1vYmotJChDT05GSUdfTUFDSF9LRVY3QTQwMCkgKz0gYXJjaC1rZXY3YTQwMC5vIGlycS1saDdhNDAwLm8KLW9iai0kKENPTkZJR19NQUNIX0xQRDdBNDAwKSArPSBhcmNoLWxwZDdhNDB4Lm8gaXJxLWxoN2E0MDAubwotb2JqLSQoQ09ORklHX01BQ0hfTFBEN0E0MDQpICs9IGFyY2gtbHBkN2E0MHgubyBpcnEtbGg3YTQwNC5vCitvYmoteQkJCQk6PSB0aW1lLm8gY2xvY2tzLm8KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PQorb2JqLQkJCQk6PQogCi1vYmotbQkJCTo9Ci1vYmotbgkJCTo9Ci1vYmotCQkJOj0KK29iai0kKENPTkZJR19NQUNIX0tFVjdBNDAwKQkrPSBhcmNoLWtldjdhNDAwLm8gaXJxLWxoN2E0MDAubworb2JqLSQoQ09ORklHX01BQ0hfTFBEN0E0MDApCSs9IGFyY2gtbHBkN2E0MHgubyBpcnEtbGg3YTQwMC5vCitvYmotJChDT05GSUdfTUFDSF9MUEQ3QTQwNCkJKz0gYXJjaC1scGQ3YTQweC5vIGlycS1saDdhNDA0Lm8KK29iai0kKENPTkZJR19MUEQ3QTQwWF9DUExEX1NTUCkJKz0gc3NwLWNwbGQubworb2JqLSQoQ09ORklHX0ZCX0FSTUNMQ0QpCSs9IGNsY2QubworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1scGQ3YTQweC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYwppbmRleCAxMmUyMzI3Li5jMGU2ODU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1scGQ3YTQweC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMKQEAgLTIzLDYgKzIzLDI4IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKIAorI2RlZmluZSBDUExEX0lOVF9ORVRIRVJORVQJKDE8PDApCisjZGVmaW5lIENQTERfSU5UTUFTS19FVEhFUk5FVAkoMTw8MikKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKyMgZGVmaW5lIENQTERfSU5UX05UT1VDSAkJKDE8PDEpCisjIGRlZmluZSBDUExEX0lOVE1BU0tfVE9VQ0gJKDE8PDMpCisjIGRlZmluZSBDUExEX0lOVF9QRU4JCSgxPDw0KQorIyBkZWZpbmUgQ1BMRF9JTlRNQVNLX1BFTgkoMTw8NCkKKyMgZGVmaW5lIENQTERfSU5UX1BJUlEJCSgxPDw0KQorI2VuZGlmCisjZGVmaW5lIENQTERfSU5UTUFTS19DUExECSgxPDw3KQorI2RlZmluZSBDUExEX0lOVF9DUExECQkoMTw8NikKKworI2RlZmluZSBDUExEX0NPTlRST0xfU1dJTlQJCSgxPDw3KSAvKiBEaXNhYmxlIGFsbCBDUExEIElSUXMgKi8KKyNkZWZpbmUgQ1BMRF9DT05UUk9MX09DTVNLCQkoMTw8NikgLyogTWFzayBVU0IxIGNvbm5lY3QgSVJRICovCisjZGVmaW5lIENQTERfQ09OVFJPTF9QRFJWCQkoMTw8NSkgLyogUENDX25EUlYgaGlnaCAqLworI2RlZmluZSBDUExEX0NPTlRST0xfVVNCMUMJCSgxPDw0KSAvKiBVU0IxIGNvbm5lY3QgSVJRIGFjdGl2ZSAqLworI2RlZmluZSBDUExEX0NPTlRST0xfVVNCMVAJCSgxPDwzKSAvKiBVU0IxIHBvd2VyIGRpc2FibGUgKi8KKyNkZWZpbmUgQ1BMRF9DT05UUk9MX0FXS1AJCSgxPDwyKSAvKiBBdXRvLXdha2V1cCBkaXNhYmxlZCAgKi8KKyNkZWZpbmUgQ1BMRF9DT05UUk9MX0xDRF9FTkFCTEUJCSgxPDwxKSAvKiBMQ0QgVmVlIGVuYWJsZSAqLworI2RlZmluZSBDUExEX0NPTlRST0xfV1JMQU5fTkVOQUJMRQkoMTw8MCkgLyogU01DOTF4IHBvd2VyIGRpc2FibGUgKi8KKworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IENQTEQwMF9QSFlTLApAQCAtNDgsMTIgKzcwLDEyIEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGxoN2E0MHhfdXNiY2xpZW50X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gVVNCX1BIWVMsCi0JCS5lbmQJPSAoVVNCX1BIWVMgKyAweEZGKSwKKwkJLmVuZAk9IChVU0JfUEhZUyArIFBBR0VfU0laRSksCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSBJUlFfVVNCSU5UUiwKLQkJLmVuZAk9IElSUV9VU0JJTlRSLAorCQkuc3RhcnQJPSBJUlFfVVNCLAorCQkuZW5kCT0gSVJRX1VTQiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC02MSw3ICs4Myw4IEBACiBzdGF0aWMgdTY0IGxoN2E0MHhfdXNiY2xpZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsaDdhNDB4X3VzYmNsaWVudF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImxoN2E0MHhfdWRjIiwKKy8vCS5uYW1lCQk9ICJsaDdhNDB4X3VkYyIsCisJLm5hbWUJCT0gImxoNy11ZGMiLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sgPSAmbGg3YTQweF91c2JjbGllbnRfZG1hX21hc2ssCkBAIC0xMDEsNyArMTI0LDcgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpscGQ3YTQweF9kZXZzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBscGQ3YTQweF9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmc21jOTF4X2RldmljZSwKIAkmbGg3YTQweF91c2JjbGllbnRfZGV2aWNlLAogI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDQpCkBAIC0xMTMsMjkgKzEzNiw1MiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbHBkN2E0MHhfaW5pdCAodm9pZCkKIHsKLQlDUExEX0NPTlRST0wgfD0gICAgICgxPDw2KTsgLyogTWFzayBVU0IxIGNvbm5lY3Rpb24gSVJRICovCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApCisJQ1BMRF9DT05UUk9MIHw9IDAKKwkJfCBDUExEX0NPTlRST0xfU1dJTlQgLyogRGlzYWJsZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KKwkJfCBDUExEX0NPTlRST0xfT0NNU0s7IC8qIE1hc2sgVVNCMSBjb25uZWN0aW9uIElSUSAqLwogCUNQTERfQ09OVFJPTCAmPSB+KDAKLQkJCSAgfCAoMTw8MSkgLyogRGlzYWJsZSBMQ0QgKi8KLQkJCSAgfCAoMTw8MCkgLyogRW5hYmxlIFdMQU4gKi8KKwkJCSAgfCBDUExEX0NPTlRST0xfTENEX0VOQUJMRQkvKiBEaXNhYmxlIExDRCAqLworCQkJICB8IENQTERfQ09OVFJPTF9XUkxBTl9ORU5BQkxFCS8qIEVuYWJsZSBTTUM5MXggKi8KIAkJKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDQpCisJQ1BMRF9DT05UUk9MICY9IH4oMAorCQkJICB8IENQTERfQ09OVFJPTF9XUkxBTl9ORU5BQkxFCS8qIEVuYWJsZSBTTUM5MXggKi8KKwkJKTsKKyNlbmRpZgogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMgKGxwZDdhNDB4X2RldnMsIEFSUkFZX1NJWkUgKGxwZDdhNDB4X2RldnMpKTsKKyNpZiBkZWZpbmVkIChDT05GSUdfRkJfQVJNQ0xDRCkKKyAgICAgICAgbGg3YTQweF9jbGNkX2luaXQgKCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgbGg3YTQweF9hY2tfY3BsZF9pcnEgKHUzMiBpcnEpCiB7Ci0JLyogQ1BMRCBkb2Vzbid0IGhhdmUgYWNrIGNhcGFiaWxpdHkgKi8KKwkvKiBDUExEIGRvZXNuJ3QgaGF2ZSBhY2sgY2FwYWJpbGl0eSwgYnV0IHNvbWUgZGV2aWNlcyBtYXkgKi8KKworI2lmIGRlZmluZWQgKENQTERfSU5UTUFTS19UT1VDSCkKKwkvKiBUaGUgdG91Y2ggY29udHJvbCAqbXVzdCogbWFzayB0aGUgdGhlIGludGVycnVwdCBiZWNhdXNlIHRoZQorCSAqIGludGVycnVwdCBiaXQgaXMgcmVhZCBieSB0aGUgZHJpdmVyIHRvIGRldGVybWluZSBpZiB0aGUgcGVuCisJICogaXMgc3RpbGwgZG93bi4gKi8KKwlpZiAoaXJxID09IElSUV9UT1VDSCkKKwkJQ1BMRF9JTlRFUlJVUFRTIHw9IENQTERfSU5UTUFTS19UT1VDSDsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBsaDdhNDB4X21hc2tfY3BsZF9pcnEgKHUzMiBpcnEpCiB7CiAJc3dpdGNoIChpcnEpIHsKIAljYXNlIElSUV9MUEQ3QTQwWF9FVEhfSU5UOgotCQlDUExEX0lOVEVSUlVQVFMgPSBDUExEX0lOVEVSUlVQVFMgfCAweDQ7CisJCUNQTERfSU5URVJSVVBUUyB8PSBDUExEX0lOVE1BU0tfRVRIRVJORVQ7CiAJCWJyZWFrOwotCWNhc2UgSVJRX0xQRDdBNDAwX1RTOgotCQlDUExEX0lOVEVSUlVQVFMgPSBDUExEX0lOVEVSUlVQVFMgfCAweDg7CisjaWYgZGVmaW5lZCAoSVJRX1RPVUNIKQorCWNhc2UgSVJRX1RPVUNIOgorCQlDUExEX0lOVEVSUlVQVFMgfD0gQ1BMRF9JTlRNQVNLX1RPVUNIOwogCQlicmVhazsKKyNlbmRpZgogCX0KIH0KIApAQCAtMTQzLDExICsxODksMTMgQEAKIHsKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRX0xQRDdBNDBYX0VUSF9JTlQ6Ci0JCUNQTERfSU5URVJSVVBUUyA9IENQTERfSU5URVJSVVBUUyAmIH4gMHg0OworCQlDUExEX0lOVEVSUlVQVFMgJj0gfkNQTERfSU5UTUFTS19FVEhFUk5FVDsKIAkJYnJlYWs7Ci0JY2FzZSBJUlFfTFBEN0E0MDBfVFM6Ci0JCUNQTERfSU5URVJSVVBUUyA9IENQTERfSU5URVJSVVBUUyAmIH4gMHg4OworI2lmIGRlZmluZWQgKElSUV9UT1VDSCkKKwljYXNlIElSUV9UT1VDSDoKKwkJQ1BMRF9JTlRFUlJVUFRTICY9IH5DUExEX0lOVE1BU0tfVE9VQ0g7CiAJCWJyZWFrOworI2VuZGlmCiAJfQogfQogCkBAIC0xNjQsMTEgKzIxMiwxMyBAQAogCiAJZGVzYy0+Y2hpcC0+YWNrIChpcnEpOwogCi0JaWYgKChtYXNrICYgMHgxKSA9PSAwKQkvKiBXTEFOICovCisJaWYgKChtYXNrICYgKDE8PDApKSA9PSAwKQkvKiBXTEFOICovCiAJCUlSUV9ESVNQQVRDSCAoSVJRX0xQRDdBNDBYX0VUSF9JTlQpOwogCi0JaWYgKChtYXNrICYgMHgyKSA9PSAwKQkvKiBUb3VjaCAqLwotCQlJUlFfRElTUEFUQ0ggKElSUV9MUEQ3QTQwMF9UUyk7CisjaWYgZGVmaW5lZCAoSVJRX1RPVUNIKQorCWlmICgobWFzayAmICgxPDwxKSkgPT0gMCkJLyogVG91Y2ggKi8KKwkJSVJRX0RJU1BBVENIIChJUlFfVE9VQ0gpOworI2VuZGlmCiAKIAlkZXNjLT5jaGlwLT51bm1hc2sgKGlycSk7IC8qIExldmVsLXRyaWdnZXJlZCBuZWVkIHRoaXMgKi8KIH0KQEAgLTIwNCw5ICsyNTQsMjEgQEAKIAogCQkvKiBUaGVuLCBjb25maWd1cmUgQ1BMRCBpbnRlcnJ1cHQgKi8KIAotCUNQTERfSU5URVJSVVBUUwk9ICAgMHg5YzsgLyogRGlzYWJsZSBhbGwgQ1BMRCBpbnRlcnJ1cHRzICovCisJCQkvKiBEaXNhYmxlIGFsbCBDUExEIGludGVycnVwdHMgKi8KKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwlDUExEX0lOVEVSUlVQVFMJPSBDUExEX0lOVE1BU0tfVE9VQ0ggfCBDUExEX0lOVE1BU0tfUEVOCisJCXwgQ1BMRF9JTlRNQVNLX0VUSEVSTkVUOworCS8qICoqKiBGSVhNRTogZG9uJ3Qga25vdyB3aHkgd2UgbmVlZCA3IGFuZCA0LiA3IGlzIHdheSB3cm9uZworICAgICAgICAgICAgICAgYW5kIDQgaXMgdW5jZWZpbmVkLiAqLworCS8vICgxPDw3KXwoMTw8NCl8KDE8PDMpfCgxPDwyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQorCUNQTERfSU5URVJSVVBUUwk9IENQTERfSU5UTUFTS19FVEhFUk5FVDsKKwkvKiAqKiogRklYTUU6IGRvbid0IGtub3cgd2h5IHdlIG5lZWQgNiBhbmQgNSwgbmVpdGhlciBpcyBkZWZpbmVkLiAqLworCS8vICgxPDw2KXwoMTw8NSl8KDE8PDMpOworI2VuZGlmCiAJR1BJT19QRkRECSY9IH4oMSA8PCBwaW5DUExEKTsgLyogTWFrZSBpbnB1dCAqLwotCUdQSU9fSU5UVFlQRTEJfD0gICgxIDw8IHBpbkNQTEQpOyAvKiBFZGdlIHRyaWdnZXJlZCAqLworCUdQSU9fSU5UVFlQRTEJJj0gfigxIDw8IHBpbkNQTEQpOyAvKiBMZXZlbCB0cmlnZ2VyZWQgKi8KIAlHUElPX0lOVFRZUEUyCSY9IH4oMSA8PCBwaW5DUExEKTsgLyogQWN0aXZlIGxvdyAqLwogCWJhcnJpZXIgKCk7CiAJR1BJT19HUElPRklOVEVOIHw9ICAoMSA8PCBwaW5DUExEKTsgLyogRW5hYmxlICovCkBAIC0yMTYsNyArMjc4LDcgQEAKIAlmb3IgKGlycSA9IElSUV9CT0FSRF9TVEFSVDsKIAkgICAgIGlycSA8IElSUV9CT0FSRF9TVEFSVCArIE5SX0lSUV9CT0FSRDsgKytpcnEpIHsKIAkJc2V0X2lycV9jaGlwIChpcnEsICZscGQ3YTQweF9jcGxkX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIgKGlycSwgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2hhbmRsZXIgKGlycSwgZG9fbGV2ZWxfSVJRKTsKIAkJc2V0X2lycV9mbGFncyAoaXJxLCBJUlFGX1ZBTElEKTsKIAl9CiAKQEAgLTIyNiw5MSArMjg4LDEwOSBAQAogCQkJCSBscGQ3YTQweF9jcGxkX2hhbmRsZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGxwZDdhNDAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBscGQ3YTQweF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7Ci0JCS52aXJ0dWFsCT0gICAgIElPX1ZJUlQsCisJCS52aXJ0dWFsCT0gSU9fVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElPX1BIWVMpLAotCQkubGVuZ3RoCQk9IAkgICAgSU9fU0laRSwKKwkJLmxlbmd0aAkJPSBJT19TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7CS8qIE1hcHBpbmcgYWRkZWQgdG8gd29yayBhcm91bmQgY2hpcCBzZWxlY3QgcHJvYmxlbXMgKi8KKwl9LAorCXsJLyogTWFwcGluZyBhZGRlZCB0byB3b3JrIGFyb3VuZCBjaGlwIHNlbGVjdCBwcm9ibGVtcyAqLwogCQkudmlydHVhbAk9IElPQkFSUklFUl9WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oSU9CQVJSSUVSX1BIWVMpLAogCQkubGVuZ3RoCQk9IElPQkFSUklFUl9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7CisJfSwKKwl7CiAJCS52aXJ0dWFsCT0gQ0ZfVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENGX1BIWVMpLAotCQkubGVuZ3RoCQk9IAlDRl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDAyX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDJfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQwMl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDA2X1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDZfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQwNl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDA4X1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDhfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQwOF9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDBDX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMENfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQwQ19TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDBFX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMEVfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQwRV9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDEwX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMTBfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQxMF9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDEyX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMTJfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQxMl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDE0X1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMTRfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQxNF9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDE2X1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMTZfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQxNl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDE4X1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMThfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQxOF9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQ1BMRDFBX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMUFfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNQTEQxQV9TSVpFLAorCQkubGVuZ3RoCQk9IENGX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCi0JLyogVGhpcyBtYXBwaW5nIGlzIHJlZHVuZGFudCBzaW5jZSB0aGUgc21jIGRyaXZlciBwZXJmb3JtcyBhbm90aGVyLiAqLwotLyoJeyBDUExEMDBfVklSVCwgIENQTEQwMF9QSFlTLAlDUExEMDBfU0laRSwJTVRfREVWSUNFIH0sICovCisJeworCQkudmlydHVhbAk9IENQTEQwMl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDAyX1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQwMl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMDZfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwNl9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMDZfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDA4X1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDhfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDA4X1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQwOF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDA4X1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQwOF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMEFfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwQV9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMEFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDBDX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMENfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDBDX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQwRV9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDBFX1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQwRV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMTBfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxMF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMTBfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDEyX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMTJfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDEyX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQxNF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDE0X1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQxNF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMTZfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxNl9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMTZfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDE4X1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMThfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDE4X1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQxQV9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDFBX1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQxQV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAogfTsKIAogdm9pZCBfX2luaXQKLWxwZDdhNDAwX21hcF9pbyh2b2lkKQorbHBkN2E0MHhfbWFwX2lvKHZvaWQpCiB7Ci0JaW90YWJsZV9pbml0IChscGQ3YTQwMF9pb19kZXNjLCBBUlJBWV9TSVpFIChscGQ3YTQwMF9pb19kZXNjKSk7Ci0KLQkJLyogRml4dXAgKGltcHJvdmUpIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBzZXR0aW5ncyAqLwotCVNNQ19CQ1IwID0gMHgyMDAwMzlhZjsJLyogQm9vdCBGbGFzaCAqLwotCVNNQ19CQ1I2ID0gMHgxMDAwZmJlMDsJLyogQ1BMRCAqLwotCVNNQ19CQ1I3ID0gMHgxMDAwYjJjMjsJLyogQ29tcGFjdCBGbGFzaCAqLworCWlvdGFibGVfaW5pdCAobHBkN2E0MHhfaW9fZGVzYywgQVJSQVlfU0laRSAobHBkN2E0MHhfaW9fZGVzYykpOwogfQogCiAjaWZkZWYgQ09ORklHX01BQ0hfTFBEN0E0MDAKQEAgLTMyMCw3ICs0MDAsNyBAQAogCS5waHlzX2lvCT0gMHg4MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoKGlvX3AydiAoMHg4MDAwMDAwMCkpPj4xOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHhjMDAwMDEwMCwKLQkubWFwX2lvCQk9IGxwZDdhNDAwX21hcF9pbywKKwkubWFwX2lvCQk9IGxwZDdhNDB4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBsaDdhNDAwX2luaXRfaXJxLAogCS50aW1lcgkJPSAmbGg3YTQweF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gbHBkN2E0MHhfaW5pdCwKQEAgLTMzNSw3ICs0MTUsNyBAQAogCS5waHlzX2lvCT0gMHg4MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoKGlvX3AydiAoMHg4MDAwMDAwMCkpPj4xOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHhjMDAwMDEwMCwKLQkubWFwX2lvCQk9IGxwZDdhNDAwX21hcF9pbywKKwkubWFwX2lvCQk9IGxwZDdhNDB4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBsaDdhNDA0X2luaXRfaXJxLAogCS50aW1lcgkJPSAmbGg3YTQweF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gbHBkN2E0MHhfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbGNkLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNzUxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xjZC5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtbGg3YTQweC9jbGNkLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworLy8jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisvLyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisvLyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLy8jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgorCisjZGVmaW5lIEhSVEZUQ19IUlNFVFVQCQlfX1JFRyhIUlRGVENfUEhZUyArIDB4MDApCisjZGVmaW5lIEhSVEZUQ19IUkNPTgkJX19SRUcoSFJURlRDX1BIWVMgKyAweDA0KQorI2RlZmluZSBIUlRGVENfSFJUSU1JTkcxCV9fUkVHKEhSVEZUQ19QSFlTICsgMHgwOCkKKyNkZWZpbmUgSFJURlRDX0hSVElNSU5HMglfX1JFRyhIUlRGVENfUEhZUyArIDB4MGMpCisKKyNkZWZpbmUgQUxJX1NFVFVQCQlfX1JFRyhBTElfUEhZUyArIDB4MDApCisjZGVmaW5lIEFMSV9DT05UUk9MCQlfX1JFRyhBTElfUEhZUyArIDB4MDQpCisjZGVmaW5lIEFMSV9USU1JTkcxCQlfX1JFRyhBTElfUEhZUyArIDB4MDgpCisjZGVmaW5lIEFMSV9USU1JTkcyCQlfX1JFRyhBTElfUEhZUyArIDB4MGMpCisKKyNpbmNsdWRlICJsY2QtcGFuZWwuaCIKKworc3RhdGljIHZvaWQgbGg3YTQweF9jbGNkX2Rpc2FibGUgKHN0cnVjdCBjbGNkX2ZiICpmYikKK3sKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwlDUExEX0NPTlRST0wgJj0gfigxPDwxKTsJLyogRGlzYWJsZSBMQ0QgVmVlICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQorCUdQSU9fUENEICAmPSB+KDE8PDMpOwkJLyogRGlzYWJsZSBMQ0QgVmVlICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDApCisJSFJURlRDX0hSU0VUVVAgJj0gfigxPDwxMyk7CS8qIERpc2FibGUgSFJURlQgY29udHJvbGxlciAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorCUFMSV9TRVRVUCAmPSB+KDE8PDEzKTsJCS8qIERpc2FibGUgQUxJICovCisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9jbGNkX2VuYWJsZSAoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCXN0cnVjdCBjbGNkX3BhbmVsX2V4dHJhKiBleHRyYQorCQk9IChzdHJ1Y3QgY2xjZF9wYW5lbF9leHRyYSopIGZiLT5ib2FyZF9kYXRhOworCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApCisJQ1BMRF9DT05UUk9MIHw9ICgxPDwxKTsJCS8qIEVuYWJsZSBMQ0QgVmVlICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQorCUdQSU9fUENERCAmPSB+KDE8PDMpOwkJLyogRW5hYmxlIExDRCBWZWUgKi8KKwlHUElPX1BDRCAgfD0gICgxPDwzKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKKworCWlmIChleHRyYSkgeworCQlIUlRGVENfSFJTRVRVUAorCQkJPSAoMSA8PCAxMykKKwkJCXwgKChmYi0+ZmIudmFyLnhyZXMgLSAxKSA8PCA0KQorCQkJfCAweGMKKwkJCXwgKGV4dHJhLT5ocm1vZGUgPyAxIDogMCk7CisJCUhSVEZUQ19IUkNPTgorCQkJPSAoKGV4dHJhLT5jbHNlbiA/IDEgOiAwKSA8PCAxKQorCQkJfCAoKGV4dHJhLT5zcHNlbiA/IDEgOiAwKSA8PCAwKTsKKwkJSFJURlRDX0hSVElNSU5HMQorCQkJPSAoZXh0cmEtPnBjZGVsIDw8IDgpCisJCQl8IChleHRyYS0+cmV2ZGVsIDw8IDQpCisJCQl8IChleHRyYS0+bHBkZWwgPDwgMCk7CisJCUhSVEZUQ19IUlRJTUlORzIKKwkJCT0gKGV4dHJhLT5zcGxkZWwgPDwgOSkKKwkJCXwgKGV4dHJhLT5wYzJkZWwgPDwgMCk7CisJfQorCWVsc2UKKwkJSFJURlRDX0hSU0VUVVAKKwkJCT0gKDEgPDwgMTMpCisJCQl8IDB4YzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKKworCWlmIChleHRyYSkgeworCQlBTElfU0VUVVAKKwkJCT0gKDEgPDwgMTMpCisJCQl8ICgoZmItPmZiLnZhci54cmVzIC0gMSkgPDwgNCkKKwkJCXwgMHhjCisJCQl8IChleHRyYS0+aHJtb2RlID8gMSA6IDApOworCQlBTElfQ09OVFJPTAorCQkJPSAoKGV4dHJhLT5jbHNlbiA/IDEgOiAwKSA8PCAxKQorCQkJfCAoKGV4dHJhLT5zcHNlbiA/IDEgOiAwKSA8PCAwKTsKKwkJQUxJX1RJTUlORzEKKwkJCT0gKGV4dHJhLT5wY2RlbCA8PCA4KQorCQkJfCAoZXh0cmEtPnJldmRlbCA8PCA0KQorCQkJfCAoZXh0cmEtPmxwZGVsIDw8IDApOworCQlBTElfVElNSU5HMgorCQkJPSAoZXh0cmEtPnNwbGRlbCA8PCA5KQorCQkJfCAoZXh0cmEtPnBjMmRlbCA8PCAwKTsKKwl9CisJZWxzZQorCQlBTElfU0VUVVAKKwkJCT0gKDEgPDwgMTMpCisJCQl8IDB4YzsKKyNlbmRpZgorCit9CisKKyNkZWZpbmUgRlJBTUVTSVpFKHMpICgoKHMpICsgUEFHRV9TSVpFIC0gMSkmUEFHRV9NQVNLKQorCitzdGF0aWMgaW50IGxoN2E0MHhfY2xjZF9zZXR1cCAoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCWRtYV9hZGRyX3QgZG1hOworCXUzMiBsZW4gPSBGUkFNRVNJWkUgKGxjZF9wYW5lbC5tb2RlLnhyZXMqbGNkX3BhbmVsLm1vZGUueXJlcworCQkJICAgICAqKGxjZF9wYW5lbC5icHAvOCkpOworCisJZmItPnBhbmVsID0gJmxjZF9wYW5lbDsKKworCQkvKiBFbmZvcmNlIHRoZSBzeW5jIHBvbGFyaXR5IGRlZmF1bHRzICovCisJaWYgKCEoZmItPnBhbmVsLT50aW0yICYgVElNMl9JSFMpKQorCQlmYi0+ZmIudmFyLnN5bmMgfD0gRkJfU1lOQ19IT1JfSElHSF9BQ1Q7CisJaWYgKCEoZmItPnBhbmVsLT50aW0yICYgVElNMl9JVlMpKQorCQlmYi0+ZmIudmFyLnN5bmMgfD0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUOworCisjaWYgZGVmaW5lZCAoSEFTX0xDRF9QQU5FTF9FWFRSQSkKKwlmYi0+Ym9hcmRfZGF0YSA9ICZsY2RfcGFuZWxfZXh0cmE7CisjZW5kaWYKKworCWZiLT5mYi5zY3JlZW5fYmFzZQorCQk9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUgKCZmYi0+ZGV2LT5kZXYsIGxlbiwKKwkJCQkJICAmZG1hLCBHRlBfS0VSTkVMKTsKKwlwcmludGsgKCJDTENEOiBMQ0Qgc2V0dXAgZmIgdmlydCAweCVwIHBoeXMgMHglcCBsICV4IGlvIDB4JXAgXG4iLAorCQlmYi0+ZmIuc2NyZWVuX2Jhc2UsICh2b2lkKikgZG1hLCBsZW4sCisJCSh2b2lkKikgaW9fcDJ2IChDTENEQ19QSFlTKSk7CisJcHJpbnRrICgiQ0xDRDogcGl4Y2xvY2sgJWRcbiIsIGxjZF9wYW5lbC5tb2RlLnBpeGNsb2NrKTsKKworCWlmICghZmItPmZiLnNjcmVlbl9iYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ0xDRDogdW5hYmxlIHRvIG1hcCBmcmFtZWJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworI2lmIGRlZmluZWQgKFVTRV9SR0I1NTUpCisJZmItPmZiLnZhci5ncmVlbi5sZW5ndGggPSA1OyAvKiBQYW5lbCB1c2VzIFJHQiA1OjU6NSAqLworI2VuZGlmCisKKwlmYi0+ZmIuZml4LnNtZW1fc3RhcnQgPSBkbWE7CisJZmItPmZiLmZpeC5zbWVtX2xlbiA9IGxlbjsKKworCQkvKiBEcml2ZSBQRTQgaGlnaCB0byBwcmV2ZW50IENQTEQgY3Jhc2ggKi8KKwlHUElPX1BFREQgfD0gKDE8PDQpOworCUdQSU9fUEVEICB8PSAoMTw8NCk7CisKKwlHUElPX1BJTk1VWCB8PSAoMTw8MSkgfCAoMTw8MCk7IC8qIExDRFZEWzE1OjRdICovCisKKy8vCWZiLT5mYi5mYm9wcy0+ZmJfY2hlY2tfdmFyICgmZmItPmZiLnZhciwgJmZiLT5mYik7CisvLwlmYi0+ZmIuZmJvcHMtPmZiX3NldF9wYXIgKCZmYi0+ZmIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGg3YTQweF9jbGNkX21tYXAgKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIGRtYV9tbWFwX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCB2bWEsCisJCQkJICAgICBmYi0+ZmIuc2NyZWVuX2Jhc2UsCisJCQkJICAgICBmYi0+ZmIuZml4LnNtZW1fc3RhcnQsCisJCQkJICAgICBmYi0+ZmIuZml4LnNtZW1fbGVuKTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9jbGNkX3JlbW92ZSAoc3RydWN0IGNsY2RfZmIgKmZiKQoreworCWRtYV9mcmVlX3dyaXRlY29tYmluZSAoJmZiLT5kZXYtPmRldiwgZmItPmZiLmZpeC5zbWVtX2xlbiwKKwkJCSAgICAgICBmYi0+ZmIuc2NyZWVuX2Jhc2UsIGZiLT5mYi5maXguc21lbV9zdGFydCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9ib2FyZCBjbGNkX3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUJCT0gImxoN2E0MHggRkIiLAorCS5jaGVjawkJPSBjbGNkZmJfY2hlY2ssCisJLmRlY29kZQkJPSBjbGNkZmJfZGVjb2RlLAorCS5lbmFibGUJCT0gbGg3YTQweF9jbGNkX2VuYWJsZSwKKwkuc2V0dXAJCT0gbGg3YTQweF9jbGNkX3NldHVwLAorCS5tbWFwCQk9IGxoN2E0MHhfY2xjZF9tbWFwLAorCS5yZW1vdmUJCT0gbGg3YTQweF9jbGNkX3JlbW92ZSwKKwkuZGlzYWJsZQk9IGxoN2E0MHhfY2xjZF9kaXNhYmxlLAorfTsKKworI2RlZmluZSBJUlFfQ0xDREMgKElSUV9MQ0RJTlRSKQorCisjZGVmaW5lIEFNQkFfREVWSUNFKG5hbWUsYnVzaWQsYmFzZSxwbGF0LHBpZCkJCQlcCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIG5hbWUjI19kZXZpY2UgPSB7CQkJXAorCS5kZXYgPSB7CQkJCQkJXAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSB+MCwJCQlcCisJCS5idXNfaWQJPSBidXNpZCwJCQkJXAorCQkucGxhdGZvcm1fZGF0YSA9IHBsYXQsCQkJCVwKKwkJfSwJCQkJCQlcCisJLnJlcyA9IHsJCQkJCQlcCisJCS5zdGFydAk9IGJhc2UjI19QSFlTLAkJCQlcCisJCS5lbmQJPSAoYmFzZSMjX1BIWVMpICsgKDQqMTAyNCkgLSAxLAkJXAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJCQlcCisJCX0sCQkJCQkJXAorCS5kbWFfbWFzawk9IH4wLAkJCQkJXAorCS5pcnEJCT0geyBJUlFfIyNiYXNlLCB9LAkJCVwKKwkvKiAuZG1hCQk9IGJhc2UjI19ETUEsKi8JCQkJXAorCS5wZXJpcGhpZCA9IHBpZCwJCQkJCVwKK30KKworQU1CQV9ERVZJQ0UoY2xjZCwgICJjbGRjLWxoN2E0MHgiLCAgQ0xDREMsICAgICAmY2xjZF9wbGF0Zm9ybV9kYXRhLCAweDQxMTEwKTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmY2xjZF9kZXZpY2UsCit9OworCit2b2lkIF9faW5pdCBsaDdhNDB4X2NsY2RfaW5pdCAodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCXByaW50ayAoIkNMQ0Q6IHJlZ2lzdGVyaW5nIGFtYmEgZGV2aWNlc1xuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CisJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKKwkJcmVzdWx0ID0gYW1iYV9kZXZpY2VfcmVnaXN0ZXIoZCwgJmlvbWVtX3Jlc291cmNlKTsKKwkJcHJpbnRrICgiICAlZCAtPiAlZFxuIiwgaSAscmVzdWx0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5MWFmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qIGFyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFyYyBTaW5nZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2Nrcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCitzdHJ1Y3QgbW9kdWxlOworc3RydWN0IGljc3Q1MjVfcGFyYW1zOworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWNvbnN0IGNoYXIgKm5hbWU7CisvLwl2b2lkICpkYXRhOworLy8JY29uc3Qgc3RydWN0IGljc3Q1MjVfcGFyYW1zICpwYXJhbXM7CisvLwl2b2lkICgqc2V0dmNvKShzdHJ1Y3QgY2xrICosIHN0cnVjdCBpY3N0NTI1X3ZjbyB2Y28pOworfTsKKworaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwordm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOworCisvKiAtLS0tLSAqLworCisjZGVmaW5lIE1BSU5ESVYxKGMpCSgoKGMpID4+ICA3KSAmIDB4MGYpCisjZGVmaW5lIE1BSU5ESVYyKGMpCSgoKGMpID4+IDExKSAmIDB4MWYpCisjZGVmaW5lIFBTKGMpCQkoKChjKSA+PiAxOCkgJiAweDAzKQorI2RlZmluZSBQUkVESVYoYykJKCgoYykgPj4gIDIpICYgMHgxZikKKyNkZWZpbmUgSENMS0RJVihjKQkoKChjKSA+PiAgMCkgJiAweDAyKQorI2RlZmluZSBQQ0xLRElWKGMpCSgoKGMpID4+IDE2KSAmIDB4MDMpCisKK3Vuc2lnbmVkIGludCBjcHVmcmVxX2dldCAodW5zaWduZWQgaW50IGNwdSkgLyogaW4ga0h6ICovCit7CisJcmV0dXJuIGZjbGtmcmVxX2dldCAoKS8xMDAwOworfQorRVhQT1JUX1NZTUJPTChjcHVmcmVxX2dldCk7CisKK3Vuc2lnbmVkIGludCBmY2xrZnJlcV9nZXQgKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNsa3NldCA9IENTQ19DTEtTRVQ7CisJdW5zaWduZWQgaW50IGdjbGsKKwkJPSBYVEFMX0lOCisJCS8gKDEgPDwgUFMoY2xrc2V0KSkKKwkJKiAoTUFJTkRJVjEoY2xrc2V0KSArIDIpCisJCS8gKFBSRURJVihjbGtzZXQpICAgKyAyKQorCQkqIChNQUlORElWMihjbGtzZXQpICsgMikKKwkJOworCXJldHVybiBnY2xrOworfQorCit1bnNpZ25lZCBpbnQgaGNsa2ZyZXFfZ2V0ICh2b2lkKQoreworCXVuc2lnbmVkIGludCBjbGtzZXQgPSBDU0NfQ0xLU0VUOworCXVuc2lnbmVkIGludCBoY2xrID0gZmNsa2ZyZXFfZ2V0ICgpIC8gKEhDTEtESVYoY2xrc2V0KSArIDEpOworCisJcmV0dXJuIGhjbGs7Cit9CisKK3Vuc2lnbmVkIGludCBwY2xrZnJlcV9nZXQgKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNsa3NldCA9IENTQ19DTEtTRVQ7CisJaW50IHBjbGtkaXYgPSBQQ0xLRElWKGNsa3NldCk7CisJdW5zaWduZWQgaW50IHBjbGs7CisJaWYgKHBjbGtkaXYgPT0gMHgzKQorCQlwY2xrZGl2ID0gMHgyOworCXBjbGsgPSBoY2xrZnJlcV9nZXQgKCkgLyAoMSA8PCBwY2xrZGl2KTsKKworCXJldHVybiBwY2xrOworfQorCisvKiAtLS0tLSAqLworCitzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChjbG9ja3Nfc2VtKTsKKworc3RydWN0IGNsayAqY2xrX2dldCAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlzdHJ1Y3QgY2xrICpwOworCXN0cnVjdCBjbGsgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwlkb3duICgmY2xvY2tzX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAoc3RyY21wIChpZCwgcC0+bmFtZSkgPT0gMAorCQkgICAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CisJCQljbGsgPSBwOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXAgKCZjbG9ja3Nfc2VtKTsKKworCXJldHVybiBjbGs7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQgKHN0cnVjdCBjbGsgKmNsaykKK3sKKwltb2R1bGVfcHV0KGNsay0+b3duZXIpOworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKworaW50IGNsa19lbmFibGUgKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUgKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCitpbnQgY2xrX3VzZSAoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKKwordm9pZCBjbGtfdW51c2UgKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VudXNlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUgKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitsb25nIGNsa19yb3VuZF9yYXRlIChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gcmF0ZTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCitpbnQgY2xrX3NldF9yYXRlIChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgcmV0ID0gLUVJTzsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCisjaWYgMAorLyoKKyAqIFRoZXNlIGFyZSBmaXhlZCBjbG9ja3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGttaV9jbGsgPSB7CisJLm5hbWUJPSAiS01JUkVGQ0xLIiwKKwkucmF0ZQk9IDI0MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGsgPSB7CisJLm5hbWUJPSAiVUFSVENMSyIsCisJLnJhdGUJPSAyNDAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2lfY2xrID0geworCS5uYW1lCT0gIk1DTEsiLAorCS5yYXRlCT0gMzMwMDAwMDAsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsY2RfY2xrID0geworCS5uYW1lCT0gIkNMQ0RDTEsiLAorCS5yYXRlCT0gMCwKK307CisKK2ludCBjbGtfcmVnaXN0ZXIgKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlkb3duICgmY2xvY2tzX3NlbSk7CisJbGlzdF9hZGQgKCZjbGstPm5vZGUsICZjbG9ja3MpOworCXVwICgmY2xvY2tzX3NlbSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7CisKK3ZvaWQgY2xrX3VucmVnaXN0ZXIgKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlkb3duICgmY2xvY2tzX3NlbSk7CisJbGlzdF9kZWwgKCZjbGstPm5vZGUpOworCXVwICgmY2xvY2tzX3NlbSk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQgKHZvaWQpCit7CisJY2xrX3JlZ2lzdGVyKCZjbGNkX2Nsayk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jb21tb24uaAppbmRleCBlYThkZTdlLi4xOGU4YmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NvbW1vbi5oCkBAIC0xMiw2ICsxMiw3IEBACiAKIGV4dGVybiB2b2lkIGxoN2E0MDBfaW5pdF9pcnEgKHZvaWQpOwogZXh0ZXJuIHZvaWQgbGg3YTQwNF9pbml0X2lycSAodm9pZCk7CitleHRlcm4gdm9pZCBsaDdhNDB4X2NsY2RfaW5pdCAodm9pZCk7CiBleHRlcm4gdm9pZCBsaDdhNDB4X2luaXRfYm9hcmRfaXJxICh2b2lkKTsKIAogI2RlZmluZSBJUlFfRElTUEFUQ0goaXJxKSBkZXNjX2hhbmRsZV9pcnEoKGlycSksKGlycV9kZXNjICsgaXJxKSwgcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMKaW5kZXggZTkwMmUzZC4uMjY4NWE4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMKQEAgLTI4LDEzICsyOCwxNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBpcnFfcHJpX3ZpYzFbXSA9IHsKICNpZiBkZWZpbmVkIChVU0VfUFJJT1JJVElFUykKLUlSUV9HUElPM0lOVFIsCisJSVJRX0dQSU8zSU5UUiwJCQkvKiBDUExEICovCisJSVJRX0RNQU0yUDQsIElSUV9ETUFNMlA1LAkvKiBBQzk3ICovCiAjZW5kaWYKIH07CiBzdGF0aWMgdW5zaWduZWQgY2hhciBpcnFfcHJpX3ZpYzJbXSA9IHsKICNpZiBkZWZpbmVkIChVU0VfUFJJT1JJVElFUykKLQlJUlFfVDNVSSwgSVJRX0dQSU83SU5UUiwKKwlJUlFfVDNVSSwJCQkvKiBUaW1lciAqLworCUlSUV9HUElPN0lOVFIsCQkJLyogQ1BMRCAqLwogCUlSUV9VQVJUMUlOVFIsIElSUV9VQVJUMklOVFIsIElSUV9VQVJUM0lOVFIsCisJSVJRX0xDRElOVFIsCQkJLyogTENEICovCisJSVJRX1RTQ0lOVFIsCQkJLyogQURDL1RvdWNoc2NyZWVuICovCiAjZW5kaWYKIH07CiAKQEAgLTk4LDEwICsxMDIsMTkgQEAKIAogICAvKiBJUlEgaW5pdGlhbGl6YXRpb24gKi8KIAorI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDApICYmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDQpCitleHRlcm4gdm9pZCogYnJhbmNoX2lycV9saDdhNDAwOworI2VuZGlmCisKIHZvaWQgX19pbml0IGxoN2E0MDRfaW5pdF9pcnEgKHZvaWQpCiB7CiAJaW50IGlycTsKIAorI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDApICYmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDQpCisjZGVmaW5lIE5PUCAweGUxYTAwMDAwCQkJLyogbW92IHIwLCByMCAqLworCWJyYW5jaF9pcnFfbGg3YTQwMCA9IE5PUDsKKyNlbmRpZgorCiAJVklDMV9JTlRFTkNMUiA9IDB4ZmZmZmZmZmY7CiAJVklDMl9JTlRFTkNMUiA9IDB4ZmZmZmZmZmY7CiAJVklDMV9JTlRTRUwgPSAwOwkJLyogQWxsIElSUXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9sY2QtcGFuZWwuaCBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9sY2QtcGFuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmIyZWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2xjZC1wYW5lbC5oCkBAIC0wLDAgKzEsMzQ2IEBACisvKiBsY2QtcGFuZWwuaAorICAgICAkSWQkCisKKyAgIHdyaXR0ZW4gYnkgTWFyYyBTaW5nZXIKKyAgIDE4IEp1bCAyMDA1CisKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJjIFNpbmdlcgorCisgICAtLS0tLS0tLS0tLQorICAgREVTQ1JJUFRJT04KKyAgIC0tLS0tLS0tLS0tCisKKyAgIE9ubHkgb25lIHBhbmVsIG1heSBiZSBkZWZpbmVkIGF0IGEgdGltZS4KKworICAgVGhlIHBpeGVsIGNsb2NrIGlzIGNhbGN1bGF0ZWQgdG8gYmUgbm8gZ3JlYXRlciB0aGFuIHRoZSB0YXJnZXQuCisKKyAgIEVhY2ggdGltaW5nIHZhbHVlIGlzIGFjY29tcGFuaWVkIGJ5IGEgc3BlY2lmaWNhdGlvbiBjb21tZW50LgorCisgICAgIFVOSVRTL01JTi9UWVAvTUFYCisKKyAgIE1vc3Qgb2YgdGhlIHVuaXRzIHdpbGwgYmUgaW4gY2xvY2tzLgorCisgICBVU0VfUkdCNTU1CisKKyAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gY29uZmlndXJlIHRoZSBBTUJBIExDRCBjb250cm9sbGVyIHRvIHVzZSBhbgorICAgICBSR0I1NTUgZW5jb2RpbmcgZm9yIHRoZSBwZWxzIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBSR0I1NjUuCisKKyAgIExQRDk1MjAsIExQRDc5NTI0LCBMUEQ3QTQwMCwgTFBEN0E0MDQtMTAsIExQRDdBNDA0LTExCisKKyAgICAgVGhlc2UgYm9hcmRzIGFyZSBiZXN0IGFwcHJveGltYXRlZCBieSA1NTUgZm9yIGFsbCBwYW5lbHMuICBTb21lCisgICAgIGNhbiB1c2UgYW4gZXh0cmEgbG93LW9yZGVyIGJpdCBvZiBibHVlIGluIGJpdCAxNiBvZiB0aGUgY29sb3IKKyAgICAgdmFsdWUsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvIGNvbW11bmljYXRlIHRoaXMgbm9uLWxpbmVhcgorICAgICBtYXBwaW5nIHRvIHRoZSBrZXJuZWwuCisKKyovCisKKyNpZiAhZGVmaW5lZCAoX19MQ0RfUEFORUxfSF9fKQorIyAgICBkZWZpbmUgICBfX0xDRF9QQU5FTF9IX18KKworI2lmIGRlZmluZWQgKE1BQ0hfTFBENzk1MjApXAorIHx8IGRlZmluZWQgKE1BQ0hfTFBENzk1MjQpXAorIHx8IGRlZmluZWQgKE1BQ0hfTFBEN0E0MDApXAorIHx8IGRlZmluZWQgKE1BQ0hfTFBEN0E0MDQpCisjIGRlZmluZSBVU0VfUkdCNTU1CisjZW5kaWYKKworc3RydWN0IGNsY2RfcGFuZWxfZXh0cmEgeworCXVuc2lnbmVkIGludCBocm1vZGU7CisJdW5zaWduZWQgaW50IGNsc2VuOworCXVuc2lnbmVkIGludCBzcHNlbjsKKwl1bnNpZ25lZCBpbnQgcGNkZWw7CisJdW5zaWduZWQgaW50IHJldmRlbDsKKwl1bnNpZ25lZCBpbnQgbHBkZWw7CisJdW5zaWduZWQgaW50IHNwbGRlbDsKKwl1bnNpZ25lZCBpbnQgcGMyZGVsOworfTsKKworI2RlZmluZSBOU19UT19DTE9DSyhucyxjKQkoKCgobnMpKigoYykvMTAwMCkgKyAoMTAwMDAwMCAtIDEpKS8xMDAwMDAwKSkKKyNkZWZpbmUgQ0xPQ0tfVE9fRElWKGUsYykJKCgoYykgKyAoZSkgLSAxKS8oZSkpCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUCisKKwkvKiBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50IExDRCAzLjUiIFFWR0EgSFJURlQgLTEwICovCisJLyogU2hhcnAgUE4gTFEwMzVRN0RCMDIgdy9IUlRGVCBjb250cm9sbGVyIGNoaXAgKi8KKworI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSg2ODAwMDAwKQorI2RlZmluZSBQSVhfQ0xPQ0tfRElWSURFUglDTE9DS19UT19ESVYgKFBJWF9DTE9DS19UQVJHRVQsIEhDTEspCisjZGVmaW5lIFBJWF9DTE9DSwkJKEhDTEsvUElYX0NMT0NLX0RJVklERVIpCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBsY2RfcGFuZWwgPSB7CisJLm1vZGUJPSB7CisJCS5uYW1lCQk9ICIzLjVpbiBRVkdBIChMUTAzNVE3REIwMikiLAorCQkueHJlcwkJPSAyNDAsCisJCS55cmVzCQk9IDMyMCwKKwkJLnBpeGNsb2NrCT0gUElYX0NMT0NLLAorCQkubGVmdF9tYXJnaW4JPSAxNiwKKwkJLnJpZ2h0X21hcmdpbgk9IDIxLAorCQkudXBwZXJfbWFyZ2luCT0gOCwJCQkvLyBsaW5lLzgvOC84CisJCS5sb3dlcl9tYXJnaW4JPSA1LAorCQkuaHN5bmNfbGVuCT0gNjEsCisJCS52c3luY19sZW4JPSBOU19UT19DTE9DSyAoNjAsIFBJWF9DTE9DSyksCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JUEMgfCAoUElYX0NMT0NLX0RJVklERVIgLSAyKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfV0FURVJNQVJLLAorCS5icHAJCT0gMTYsCit9OworCisjZGVmaW5lIEhBU19MQ0RfUEFORUxfRVhUUkEKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsX2V4dHJhIGxjZF9wYW5lbF9leHRyYSA9IHsKKwkuaHJtb2RlID0gMSwKKwkuY2xzZW4gPSAxLAorCS5zcHNlbiA9IDEsCisJLnBjZGVsID0gOCwKKwkucmV2ZGVsID0gNywKKwkubHBkZWwgPSAxMywKKwkuc3BsZGVsID0gNzcsCisJLnBjMmRlbCA9IDIwOCwKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTA1N1EzREMwMgorCisJLyogTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCBMQ0QgNS43IiBRVkdBIC0xMCAqLworCS8qIFNoYXJwIFBOIExRMDU3UTNEQzAyICovCisJLyogUVZHQSBtb2RlLCBWL1E9TE9XICovCisKKy8qIEZyb20gU2hhcnAgb24gMjAwNi4xLjMuICBJIGJlbGlldmUgc29tZSBvZiB0aGUgdmFsdWVzIGFyZSBpbmNvcnJlY3QKKyAqIGJhc2VkIG9uIHRoZSBkYXRhc2hlZXQuCisKKyAgICBUaW1pbmcwCVRJTUlORzEJCVRJTUlORzIJCUNPTlRST0wKKyAgICAweDE0MEEwQzRDCTB4MDgwNTA0RUYJMHgwMTNGMzgwRAkweDAwMDAwODI5CisgICAgSEJQPSAyMAlWQlA9ICA4CQlCQ0Q9ICAwCisgICAgSEZQPSAxMAlWRlA9ICA1CQlDUEw9MzE5CisgICAgSFNXPSAxMglWU1c9ICAxCQlJT0U9ICAwCisgICAgUFBMPSAxOQlMUFA9MjM5CQlJUEM9ICAxCisJCQkJSUhTPSAgMQorCQkJCUlWUz0gIDEKKwkJCQlBQ0I9ICAwCisJCQkJQ1NFTD0gMAorCQkJCVBDRD0gMTMKKworICovCisKKy8qIFRoZSBmdWxsIGhvcm96b250YWwgY3ljbGUgKFRoKSBpcyBjbG9jay8zNjAvNDAwLzQ1MC4gKi8KKy8qIFRoZSBmdWxsIHZlcnRpY2FsICAgY3ljbGUgKFR2KSBpcyBsaW5lLzI1MS8yNjIvMjgwLiAqLworCisjZGVmaW5lIFBJWF9DTE9DS19UQVJHRVQJKDYzMDAwMDApIC8qIC0vNi4zLzcgTUh6ICovCisjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKKyNkZWZpbmUgUElYX0NMT0NLCQkoSENMSy9QSVhfQ0xPQ0tfRElWSURFUikKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGxjZF9wYW5lbCA9IHsKKwkubW9kZQk9IHsKKwkJLm5hbWUJCT0gIjUuN2luIFFWR0EgKExRMDU3UTNEQzAyKSIsCisJCS54cmVzCQk9IDMyMCwKKwkJLnlyZXMJCT0gMjQwLAorCQkucGl4Y2xvY2sJPSBQSVhfQ0xPQ0ssCisJCS5sZWZ0X21hcmdpbgk9IDExLAorCQkucmlnaHRfbWFyZ2luCT0gNDAwLTExLTMyMC0yLAorCQkudXBwZXJfbWFyZ2luCT0gNywJCQkvLyBsaW5lLzcvNy83CisJCS5sb3dlcl9tYXJnaW4JPSAyNjItNy0yNDAtMiwKKwkJLmhzeW5jX2xlbgk9IDIsCQkJLy8gY2xrLzIvOTYvMjAwCisJCS52c3luY19sZW4JPSAyLAkJCS8vIGxpbmUvMi8tLzM0CisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JSFMgfCBUSU0yX0lWUworCQkJfCAoUElYX0NMT0NLX0RJVklERVIgLSAyKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfV0FURVJNQVJLLAorCS5icHAJCT0gMTYsCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFE2NEQzNDMKKworCS8qIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQgTENEIDYuNCIgVkdBIC0xMCAqLworCS8qIFNoYXJwIFBOIExRNjREMzQzICovCisKKy8qIFRoZSBmdWxsIGhvcm96b250YWwgY3ljbGUgKFRoKSBpcyBjbG9jay83NTAvODAwLzkwMC4gKi8KKy8qIFRoZSBmdWxsIHZlcnRpY2FsICAgY3ljbGUgKFR2KSBpcyBsaW5lLzUxNS81MjUvNTYwLiAqLworCisjZGVmaW5lIFBJWF9DTE9DS19UQVJHRVQJKDI4MzMwMDAwKQorI2RlZmluZSBQSVhfQ0xPQ0tfRElWSURFUglDTE9DS19UT19ESVYgKFBJWF9DTE9DS19UQVJHRVQsIEhDTEspCisjZGVmaW5lIFBJWF9DTE9DSwkJKEhDTEsvUElYX0NMT0NLX0RJVklERVIpCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBsY2RfcGFuZWwgPSB7CisJLm1vZGUJPSB7CisJCS5uYW1lCQk9ICI2LjRpbiBRVkdBIChMUTY0RDM0MykiLAorCQkueHJlcwkJPSA2NDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gUElYX0NMT0NLLAorCQkubGVmdF9tYXJnaW4JPSAzMiwKKwkJLnJpZ2h0X21hcmdpbgk9IDgwMC0zMi02NDAtOTYsCisJCS51cHBlcl9tYXJnaW4JPSAzMiwJCQkvLyBsaW5lLzM0LzM0LzM0CisJCS5sb3dlcl9tYXJnaW4JPSA1NDAtMzItNDgwLTIsCisJCS5oc3luY19sZW4JPSA5NiwJCQkvLyBjbGsvMi85Ni8yMDAKKwkJLnZzeW5jX2xlbgk9IDIsCQkJLy8gbGluZS8yLy0vMzQKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0lIUyB8IFRJTTJfSVZTCisJCQl8IChQSVhfQ0xPQ0tfRElWSURFUiAtIDIpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9XQVRFUk1BUkssCisJLmJwcAkJPSAxNiwKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTEwRDM2OAorCisJLyogTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCBMQ0QgMTAuNCIgVkdBIC0xMCAqLworCS8qIFNoYXJwIFBOIExRMTBEMzY4ICovCisKKyNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoMjgzMzAwMDApCisjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKKyNkZWZpbmUgUElYX0NMT0NLCQkoSENMSy9QSVhfQ0xPQ0tfRElWSURFUikKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGxjZF9wYW5lbCA9IHsKKwkubW9kZQk9IHsKKwkJLm5hbWUJCT0gIjEwLjRpbiBWR0EgKExRMTBEMzY4KSIsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSBQSVhfQ0xPQ0ssCisJCS5sZWZ0X21hcmdpbgk9IDIxLAorCQkucmlnaHRfbWFyZ2luCT0gMTUsCisJCS51cHBlcl9tYXJnaW4JPSAzNCwKKwkJLmxvd2VyX21hcmdpbgk9IDUsCisJCS5oc3luY19sZW4JPSA5NiwKKwkJLnZzeW5jX2xlbgk9IDE2LAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfSUhTIHwgVElNMl9JVlMKKwkJCXwgKFBJWF9DTE9DS19ESVZJREVSIC0gMiksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX1dBVEVSTUFSSywKKwkuYnBwCQk9IDE2LAorfTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTIxUzFERzQxCisKKwkvKiBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50IExDRCAxMi4xIiBTVkdBIC0xMCAqLworCS8qIFNoYXJwIFBOIExRMTIxUzFERzQxLCB3YXMgTFExMjFTMURHMzEgKi8KKworLyogTm90ZSB0aGF0IHdpdGggYSA5OTk5MzkwMCBIeiBIQ0xLLCBpdCBpcyBub3QgcG9zc2libGUgdG8gaGl0IHRoZQorICogdGFyZ2V0IGNsb2NrIGZyZXF1ZW5jeSByYW5nZSBvZiAzNU1IeiB0byA0Mk1Iei4gKi8KKworLyogSWYgdGhlIHRhcmdldCBwaXhlbCBjbG9jayBpcyBzdWJzdGFudGlhbGx5IGxvd2VyIHRoYW4gdGhlIHBhbmVsCisgKiBzcGVjLCB0aGlzIGlzIGRvbmUgdG8gcHJldmVudCB0aGUgTENEIGRpc3BsYXkgZnJvbSBnbGl0Y2hpbmcgd2hlbgorICogdGhlIENQVSBpcyB1bmRlciBsb2FkLiAgQSBwaXhlbCBjbG9jayBoaWdoZXIgdGhhbiAyNU1IegorICogKGVtcGlyaWNhbGx5IGRldGVybWluZWQpIHdpbGwgY29tcGV0ZSB3aXRoIHRoZSBDUFUgZm9yIGJ1cyBjeWNsZXMKKyAqIGZvciB0aGUgRXRoZXJuZXQgY2hpcC4gIEhvd2V2ZXIsIGV2ZW4gYSBwaXhlbCBjbG9jayBvZiAxME1IegorICogY29tcGV0ZXMgd2l0aCBDb21wYWN0IEZsYXNoIGludGVyZmFjZSBkdXJpbmcgc29tZSBvcGVyYXRpb25zCisgKiAoZmRpc2ssIGUyZnNjaykuICBBbmQsIGF0IHRoYXQgc3BlZWQgdGhlIGRpc3BsYXkgbWF5IGhhdmUgYSB2aXNpYmxlCisgKiBmbGlja2VyLiAqLworCisvKiBUaGUgZnVsbCBob3Jvem9udGFsIGN5Y2xlIChUaCkgaXMgY2xvY2svODMyLzEwNTYvMTM5NS4gKi8KKworI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSgyMDAwMDAwMCkKKyNkZWZpbmUgUElYX0NMT0NLX0RJVklERVIJQ0xPQ0tfVE9fRElWIChQSVhfQ0xPQ0tfVEFSR0VULCBIQ0xLKQorI2RlZmluZSBQSVhfQ0xPQ0sJCShIQ0xLL1BJWF9DTE9DS19ESVZJREVSKQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgbGNkX3BhbmVsID0geworCS5tb2RlCT0geworCQkubmFtZQkJPSAiMTIuMWluIFNWR0EgKExRMTIxUzFERzQxKSIsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNjAwLAorCQkucGl4Y2xvY2sJPSBQSVhfQ0xPQ0ssCisJCS5sZWZ0X21hcmdpbgk9IDg5LAkJLy8gbnMvNS8tLygxL1BJWF9DTE9DSyktMTAKKwkJLnJpZ2h0X21hcmdpbgk9IDEwNTYtODAwLTg5LTEyOCwKKwkJLnVwcGVyX21hcmdpbgk9IDIzLAkJLy8gbGluZS8yMy8yMy8yMworCQkubG93ZXJfbWFyZ2luCT0gNDQsCisJCS5oc3luY19sZW4JPSAxMjgsCQkvLyBjbGsvMi8xMjgvMjAwCisJCS52c3luY19sZW4JPSA0LAkJLy8gbGluZS8yLzQvNgorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfSUhTIHwgVElNMl9JVlMKKwkJCXwgKFBJWF9DTE9DS19ESVZJREVSIC0gMiksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX1dBVEVSTUFSSywKKwkuYnBwCQk9IDE2LAorfTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9BUk1DTENEX0hJVEFDSEkKKworCS8qIEhpdGFjaGkqLworCS8qIFN1Ym1pdHRlZCBieSBNaWNoZWxlIERhIFJvbGQgPG1pY2hlbGUuZGFyb2xkQGVjc3Byb2plY3QuY29tPiAqLworCisjZGVmaW5lIFBJWF9DTE9DS19UQVJHRVQJKDQ5MDAwMDAwKQorI2RlZmluZSBQSVhfQ0xPQ0tfRElWSURFUglDTE9DS19UT19ESVYgKFBJWF9DTE9DS19UQVJHRVQsIEhDTEspCisjZGVmaW5lIFBJWF9DTE9DSwkJKEhDTEsvUElYX0NMT0NLX0RJVklERVIpCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBsY2RfcGFuZWwgPSB7CisJLm1vZGUJPSB7CisJCS5uYW1lCQk9ICJIaXRhY2hpIDgwMHg0ODAiLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLnBpeGNsb2NrCT0gUElYX0NMT0NLLAorCQkubGVmdF9tYXJnaW4JPSA4OCwKKwkJLnJpZ2h0X21hcmdpbgk9IDQwLAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDEyOCwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JUEMgfCBUSU0yX0lIUyB8IFRJTTJfSVZTCisJCQl8IChQSVhfQ0xPQ0tfRElWSURFUiAtIDIpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9XQVRFUk1BUkssCisJLmJwcAkJPSAxNiwKK307CisKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9BUk1DTENEX0FVT19BMDcwVlcwMV9XSURFCisKKwkvKiBBVSBPcHRvdHJvbmljcyAgQTA3MFZXMDEgNy4wIFdpZGUgU2NyZWVuIGNvbG9yIERpc3BsYXkqLworCS8qIFN1Ym1pdHRlZCBieSBNaWNoZWxlIERhIFJvbGQgPG1pY2hlbGUuZGFyb2xkQGVjc3Byb2plY3QuY29tPiAqLworCisjZGVmaW5lIFBJWF9DTE9DS19UQVJHRVQJKDEwMDAwMDAwKQorI2RlZmluZSBQSVhfQ0xPQ0tfRElWSURFUglDTE9DS19UT19ESVYgKFBJWF9DTE9DS19UQVJHRVQsIEhDTEspCisjZGVmaW5lIFBJWF9DTE9DSwkJKEhDTEsvUElYX0NMT0NLX0RJVklERVIpCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBsY2RfcGFuZWwgPSB7CisJLm1vZGUJPSB7CisJCS5uYW1lCQk9ICI3LjBpbiBXaWRlIChBMDcwVlcwMSkiLAorCQkueHJlcwkJPSA0ODAsCisJCS55cmVzCQk9IDIzNCwKKwkJLnBpeGNsb2NrCT0gUElYX0NMT0NLLAorCQkubGVmdF9tYXJnaW4JPSAzMCwKKwkJLnJpZ2h0X21hcmdpbgk9IDI1LAorCQkudXBwZXJfbWFyZ2luCT0gMTQsCisJCS5sb3dlcl9tYXJnaW4JPSAxMiwKKwkJLmhzeW5jX2xlbgk9IDEwMCwKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JUEMgfCBUSU0yX0lIUyB8IFRJTTJfSVZTCisJCQl8IChQSVhfQ0xPQ0tfRElWSURFUiAtIDIpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9XQVRFUk1BUkssCisJLmJwcAkJPSAxNiwKK307CisKKyNlbmRpZgorCisjdW5kZWYgTlNfVE9fQ0xPQ0sKKyN1bmRlZiBDTE9DS19UT19ESVYKKworI2VuZGlmICAvKiBfX0xDRF9QQU5FTF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9zc3AtY3BsZC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3NzcC1jcGxkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwODMwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9zc3AtY3BsZC5jCkBAIC0wLDAgKzEsMzQzIEBACisvKiBhcmNoL2FybS9tYWNoLWxoN2E0MHgvc3NwLWNwbGQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSBNYXJjIFNpbmdlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogU1NQL1NQSSBkcml2ZXIgZm9yIHRoZSBDYXJkRW5naW5lIENQTEQuCisgKgorICovCisKKy8qIE5PVEVTCisgICAtLS0tLQorCisgICBvICoqKiBUaGlzIGRyaXZlciBpcyBjcmliYmVkIGZyb20gdGhlIDc5NTJ4IGltcGxlbWVudGF0aW9uLgorCSBTb21lIGNvbW1lbnRzIG1heSBub3QgYXBwbHkuCisKKyAgIG8gVGhpcyBkcml2ZXIgY29udGFpbnMgc3VmZmljaWVudCBsb2dpYyB0byBjb250cm9sIGVpdGhlciB0aGUKKyAgICAgc2VyaWFsIEVFUFJPTXMgb3IgdGhlIGF1ZGlvIGNvZGVjLiAgSXQgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbAorICAgICB0byBzdXBwb3J0IHRoZSBjb2RlYy4gIFRoZSBFRVBST01zIGFyZSByZWFsbHkgdGhlIHJlc3BvbnNpYmlsaXR5CisgICAgIG9mIHRoZSBib290IGxvYWRlciBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIGxlZnQgYWxvbmUuCisKKyAgIG8gVGhlIGNvZGUgbXVzdCBiZSBhdWdtZW50ZWQgdG8gY29wZSB3aXRoIG11bHRpcGxlLCBzaW11bHRhbmVvdXMKKyAgICAgY2xpZW50cy4KKyAgICAgbyBUaGUgYXVkaW8gY29kZWMgd3JpdGVzIHRvIHRoZSBjb2RlYyBjaGlwIHdoZW5ldmVyIHBsYXliYWNrCisgICAgICAgc3RhcnRzLgorICAgICBvIFRoZSB0b3VjaHNjcmVlbiBkcml2ZXIgd3JpdGVzIHRvIHRoZSBhZHMgY2hpcCBldmVyeSB0aW1lIGl0CisgICAgICAgc2FtcGxlcy4KKyAgICAgbyBUaGUgYXVkaW8gY29kZWMgbXVzdCB3cml0ZSAxNiBiaXRzLCBidXQgdGhlIHRvdWNoIGNoaXAgd3JpdGVzCisgICAgICAgYXJlIDggYml0cyBsb25nLgorICAgICBvIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBrZWVwIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHNlcGFyYXRlIHdoaWxlCisgICAgICAgc2ltdWx0YW5lb3VzbHkgYWN0aXZlLgorCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorLy8jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorLy8jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3NzcC5oPgorCisvLyNkZWZpbmUgVEFMSworCisjaWYgZGVmaW5lZCAoVEFMSykKKyNkZWZpbmUgUFJJTlRLKGYuLi4pCQlwcmludGsgKGYpCisjZWxzZQorI2RlZmluZSBQUklOVEsoZi4uLikJCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKQorIyBkZWZpbmUgQ1BMRF9TUElECQlfX1JFR1AxNihDUExEMDZfVklSVCkgLyogU1BJIGRhdGEgKi8KKyMgZGVmaW5lIENQTERfU1BJQwkJX19SRUdQMTYoQ1BMRDA4X1ZJUlQpIC8qIFNQSSBjb250cm9sICovCisjIGRlZmluZSBDUExEX1NQSUNfQ1NfQ09ERUMJKDE8PDApCisjIGRlZmluZSBDUExEX1NQSUNfQ1NfVE9VQ0gJKDE8PDEpCisjIGRlZmluZSBDUExEX1NQSUNfV1JJVEUJKDA8PDIpCisjIGRlZmluZSBDUExEX1NQSUNfUkVBRAkJKDE8PDIpCisjIGRlZmluZSBDUExEX1NQSUNfRE9ORQkJKDE8PDMpIC8qIHIvbyAqLworIyBkZWZpbmUgQ1BMRF9TUElDX0xPQUQJCSgxPDw0KQorIyBkZWZpbmUgQ1BMRF9TUElDX1NUQVJUCSgxPDw0KQorIyBkZWZpbmUgQ1BMRF9TUElDX0xPQURFRAkoMTw8NSkgLyogci9vICovCisjZW5kaWYKKworI2RlZmluZSBDUExEX1NQSQkJX19SRUdQMTYoQ1BMRDBBX1ZJUlQpIC8qIFNQSSBvcGVyYXRpb24gKi8KKyNkZWZpbmUgQ1BMRF9TUElfQ1NfRUVQUk9NCSgxPDwzKQorI2RlZmluZSBDUExEX1NQSV9TQ0xLCQkoMTw8MikKKyNkZWZpbmUgQ1BMRF9TUElfVFhfU0hJRlQJKDEpCisjZGVmaW5lIENQTERfU1BJX1RYCQkoMTw8Q1BMRF9TUElfVFhfU0hJRlQpCisjZGVmaW5lIENQTERfU1BJX1JYX1NISUZUCSgwKQorI2RlZmluZSBDUExEX1NQSV9SWAkJKDE8PENQTERfU1BJX1JYX1NISUZUKQorCisvKiAqKiogRklYTUU6IHRoZXNlIHRpbWluZyB2YWx1ZXMgYXJlIHN1YnN0YW50aWFsbHkgbGFyZ2VyIHRoYW4gdGhlCisgICAqKiogY2hpcCByZXF1aXJlcy4gV2UgbWF5IGltcGxlbWVudCBhbiBuc2xlZXAgKCkgZnVuY3Rpb24uICovCisjZGVmaW5lIFRfU0tICTEJCS8qIENsb2NrIHRpbWUgaGlnaCAodXMpICovCisjZGVmaW5lIFRfU0tMCTEJCS8qIENsb2NrIHRpbWUgbG93ICh1cykgKi8KKyNkZWZpbmUgVF9DUwkxCQkvKiBNaW5pbXVtIGNoaXAgc2VsZWN0IGxvdyB0aW1lICh1cykgICovCisjZGVmaW5lIFRfQ1NTCTEJCS8qIE1pbmltdW0gY2hpcCBzZWxlY3Qgc2V0dXAgdGltZSAodXMpICAqLworI2RlZmluZSBUX0RJUwkxCQkvKiBEYXRhIHNldHVwIHRpbWUgKHVzKSAqLworCisJIC8qIEVFUFJPTSBTUEkgYml0cyAqLworI2RlZmluZSBQX1NUQVJUCQkoMTw8OSkKKyNkZWZpbmUgUF9XUklURQkJKDE8PDcpCisjZGVmaW5lIFBfUkVBRAkJKDI8PDcpCisjZGVmaW5lIFBfRVJBU0UJCSgzPDw3KQorI2RlZmluZSBQX0VXRFMJCSgwPDw3KQorI2RlZmluZSBQX1dSQUwJCSgwPDw3KQorI2RlZmluZSBQX0VSQUwJCSgwPDw3KQorI2RlZmluZSBQX0VXRU4JCSgwPDw3KQorI2RlZmluZSBQX0FfRVdEUwkoMDw8NSkKKyNkZWZpbmUgUF9BX1dSQUwJKDE8PDUpCisjZGVmaW5lIFBfQV9FUkFMCSgyPDw1KQorI2RlZmluZSBQX0FfRVdFTgkoMzw8NSkKKworc3RydWN0IHNzcF9jb25maWd1cmF0aW9uIHsKKwlpbnQgZGV2aWNlOworCWludCBtb2RlOworCWludCBzcGVlZDsKKwlpbnQgZnJhbWVfc2l6ZV93cml0ZTsKKwlpbnQgZnJhbWVfc2l6ZV9yZWFkOworfTsKKworc3RhdGljIHN0cnVjdCBzc3BfY29uZmlndXJhdGlvbiBzc3BfY29uZmlndXJhdGlvbjsKK3N0YXRpYyBzcGlubG9ja190IHNzcF9sb2NrOworCitzdGF0aWMgdm9pZCBlbmFibGVfY3MgKHZvaWQpCit7CisJc3dpdGNoIChzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UpIHsKKwljYXNlIERFVklDRV9FRVBST006CisJCUNQTERfU1BJIHw9IENQTERfU1BJX0NTX0VFUFJPTTsKKwkJYnJlYWs7CisJfQorCXVkZWxheSAoVF9DU1MpOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2NzICh2b2lkKQoreworCXN3aXRjaCAoc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlKSB7CisJY2FzZSBERVZJQ0VfRUVQUk9NOgorCQlDUExEX1NQSSAmPSB+Q1BMRF9TUElfQ1NfRUVQUk9NOworCQlicmVhazsKKwl9CisJdWRlbGF5IChUX0NTKTsKK30KKworc3RhdGljIHZvaWQgcHVsc2VfY2xvY2sgKHZvaWQpCit7CisJQ1BMRF9TUEkgfD0gIENQTERfU1BJX1NDTEs7CisJdWRlbGF5IChUX1NLSCk7CisJQ1BMRF9TUEkgJj0gfkNQTERfU1BJX1NDTEs7CisJdWRlbGF5IChUX1NLTCk7Cit9CisKKworLyogZXhlY3V0ZV9zcGlfY29tbWFuZAorCisgICBzZW5kcyBhbiBzcGkgY29tbWFuZCB0byBhIGRldmljZS4gIEl0IGZpcnN0IHNlbmRzIGN3cml0ZSBiaXRzIGZyb20KKyAgIHYuICBJZiBjcmVhZCBpcyBncmVhdGVyIHRoYW4gemVybyBpdCB3aWxsIHJlYWQgY3JlYWQgYml0cworICAgKGRpc2NhcmRpbmcgdGhlIGxlYWRpbmcgMCBiaXQpIGFuZCByZXR1cm4gdGhlbS4gIElmIGNyZWFkIGlzIGxlc3MKKyAgIHRoYW4gemVybyBpdCB3aWxsIGNoZWNrIGZvciBjb21wbGV0ZXRpb24gc3RhdHVzIGFuZCByZXR1cm4gMCBvbgorICAgc3VjY2VzcyBvciAtMSBvbiB0aW1lb3V0LiAgSWYgY3JlYWQgaXMgemVybyBpdCBkb2VzIG5vdGhpbmcgb3RoZXIKKyAgIHRoYW4gc2VuZGluZyB0aGUgY29tbWFuZC4KKworICAgT24gdGhlIExQRDdBNDAwLCB3ZSBjYW4gb25seSByZWFkIG9yIHdyaXRlIG11bHRpcGxlcyBvZiA4IGJpdHMgb24KKyAgIHRoZSBjb2RlYyBhbmQgdGhlIHRvdWNoIHNjcmVlbiBkZXZpY2UuICBIZXJlLCB3ZSByb3VuZCB1cC4KKworKi8KKworc3RhdGljIGludCBleGVjdXRlX3NwaV9jb21tYW5kIChpbnQgdiwgaW50IGN3cml0ZSwgaW50IGNyZWFkKQoreworCXVuc2lnbmVkIGxvbmcgbCA9IDA7CisKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwkvKiBUaGUgY29kZWMgYW5kIHRvdWNoIGRldmljZXMgY2Fubm90IGJlIGJpdC1iYW5nZWQuICBJbnN0ZWFkLAorCSAqIHRoZSBDUExEIHByb3ZpZGVzIGFuIGVpZ2h0LWJpdCBzaGlmdCByZWdpc3RlciBhbmQgYSBjcnVkZQorCSAqIGludGVyZmFjZS4gICovCisJaWYgKCAgIHNzcF9jb25maWd1cmF0aW9uLmRldmljZSA9PSBERVZJQ0VfQ09ERUMKKwkgICAgfHwgc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlID09IERFVklDRV9UT1VDSCkgeworCQlpbnQgc2VsZWN0ID0gMDsKKworCQlQUklOVEsgKCJzcGkoJWQgJWQuJWQpIDB4JTA0eCIsCisJCQlzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UsIGN3cml0ZSwgY3JlYWQsCisJCQl2KTsKKyNpZiBkZWZpbmVkIChUQUxLKQorCQlpZiAoc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlID09IERFVklDRV9DT0RFQykKKwkJCVBSSU5USyAoIiAweCUwM3ggLT4gJTJkIiwgdiAmIDB4MWZmLCAodiA+PiA5KSAmIDB4N2YpOworI2VuZGlmCisJCVBSSU5USyAoIlxuIik7CisKKwkJaWYgKHNzcF9jb25maWd1cmF0aW9uLmRldmljZSA9PSBERVZJQ0VfQ09ERUMpCisJCQlzZWxlY3QgPSBDUExEX1NQSUNfQ1NfQ09ERUM7CisJCWlmIChzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UgPT0gREVWSUNFX1RPVUNIKQorCQkJc2VsZWN0ID0gQ1BMRF9TUElDX0NTX1RPVUNIOworCQlpZiAoY3dyaXRlKSB7CisJCQlmb3IgKGN3cml0ZSA9IChjd3JpdGUgKyA3KS84OyBjd3JpdGUtLSA+IDA7ICkgeworCQkJCUNQTERfU1BJRCA9ICh2ID4+ICg4KmN3cml0ZSkpICYgMHhmZjsKKwkJCQlDUExEX1NQSUMgPSBzZWxlY3QgfCBDUExEX1NQSUNfTE9BRDsKKwkJCQl3aGlsZSAoIShDUExEX1NQSUMgJiBDUExEX1NQSUNfTE9BREVEKSkKKwkJCQkJOworCQkJCUNQTERfU1BJQyA9IHNlbGVjdDsKKwkJCQl3aGlsZSAoIShDUExEX1NQSUMgJiBDUExEX1NQSUNfRE9ORSkpCisJCQkJCTsKKwkJCX0KKwkJCXYgPSAwOworCQl9CisJCWlmIChjcmVhZCkgeworCQkJbWRlbGF5ICgyKTsJLyogKioqIEZJWE1FOiByZXF1aXJlZCBieSBhZHM3ODQzPyAqLworCQkJdiA9IDA7CisJCQlmb3IgKGNyZWFkID0gKGNyZWFkICsgNykvODsgY3JlYWQtLSA+IDA7KSB7CisJCQkJQ1BMRF9TUElEID0gMDsKKwkJCQlDUExEX1NQSUMgPSBzZWxlY3QgfCBDUExEX1NQSUNfUkVBRAorCQkJCQl8IENQTERfU1BJQ19TVEFSVDsKKwkJCQl3aGlsZSAoIShDUExEX1NQSUMgJiBDUExEX1NQSUNfTE9BREVEKSkKKwkJCQkJOworCQkJCUNQTERfU1BJQyA9IHNlbGVjdCB8IENQTERfU1BJQ19SRUFEOworCQkJCXdoaWxlICghKENQTERfU1BJQyAmIENQTERfU1BJQ19ET05FKSkKKwkJCQkJOworCQkJCXYgPSAodiA8PCA4KSB8IENQTERfU1BJRDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdjsKKwl9CisjZW5kaWYKKworCVBSSU5USyAoInNwaSglZCkgMHglMDR4IC0+IDB4JXhcclxuIiwgc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlLAorCQl2ICYgMHgxZmYsICh2ID4+IDkpICYgMHg3Zik7CisKKwllbmFibGVfY3MgKCk7CisKKwl2IDw8PSBDUExEX1NQSV9UWF9TSElGVDsgLyogQ29ycmVjdGlvbiBmb3IgcG9zaXRpb24gb2YgU1BJX1RYIGJpdCAqLworCXdoaWxlIChjd3JpdGUtLSkgeworCQlDUExEX1NQSQorCQkJPSAoQ1BMRF9TUEkgJiB+Q1BMRF9TUElfVFgpCisJCQl8ICgodiA+PiBjd3JpdGUpICYgQ1BMRF9TUElfVFgpOworCQl1ZGVsYXkgKFRfRElTKTsKKwkJcHVsc2VfY2xvY2sgKCk7CisJfQorCisJaWYgKGNyZWFkIDwgMCkgeworCQlpbnQgZGVsYXkgPSAxMDsKKwkJZGlzYWJsZV9jcyAoKTsKKwkJdWRlbGF5ICgxKTsKKwkJZW5hYmxlX2NzICgpOworCisJCWwgPSAtMTsKKwkJZG8geworCQkJaWYgKENQTERfU1BJICYgQ1BMRF9TUElfUlgpIHsKKwkJCQlsID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAodWRlbGF5ICgxKSwgLS1kZWxheSk7CisJfQorCWVsc2UKKwkvKiBXZSBwdWxzZSB0aGUgY2xvY2sgYmVmb3JlIHRoZSBkYXRhIHRvIHNraXAgdGhlIGxlYWRpbmcgemVyby4gKi8KKwkJd2hpbGUgKGNyZWFkLS0gPiAwKSB7CisJCQlwdWxzZV9jbG9jayAoKTsKKwkJCWwgPSAobDw8MSkKKwkJCQl8ICgoKENQTERfU1BJICYgQ1BMRF9TUElfUlgpCisJCQkJICAgID4+IENQTERfU1BJX1JYX1NISUZUKSAmIDB4MSk7CisJCX0KKworCWRpc2FibGVfY3MgKCk7CisJcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBpbnQgc3NwX2luaXQgKHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQgKCZzc3BfbG9jayk7CisJbWVtc2V0ICgmc3NwX2NvbmZpZ3VyYXRpb24sIDAsIHNpemVvZiAoc3NwX2NvbmZpZ3VyYXRpb24pKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBzc3BfY2hpcF9zZWxlY3QKKworICAgZHJvcHMgdGhlIGNoaXAgc2VsZWN0IGxpbmUgZm9yIHRoZSBDUExEIHNoaWZ0LXJlZ2lzdGVyIGNvbnRyb2xsZWQKKyAgIGRldmljZXMuICBJdCBkb2Vzbid0IGVuYWJsZSBjaGlwCisKKyovCisKK3N0YXRpYyB2b2lkIHNzcF9jaGlwX3NlbGVjdCAoaW50IGVuYWJsZSkKK3sKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwlpbnQgc2VsZWN0OworCisJaWYgKHNzcF9jb25maWd1cmF0aW9uLmRldmljZSA9PSBERVZJQ0VfQ09ERUMpCisJCXNlbGVjdCA9IENQTERfU1BJQ19DU19DT0RFQzsKKwllbHNlIGlmIChzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UgPT0gREVWSUNFX1RPVUNIKQorCQlzZWxlY3QgPSBDUExEX1NQSUNfQ1NfVE9VQ0g7CisJZWxzZQorCQlyZXR1cm47CisKKwlpZiAoZW5hYmxlKQorCQlDUExEX1NQSUMgPSBzZWxlY3Q7CisJZWxzZQorCQlDUExEX1NQSUMgPSAwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNzcF9hY3F1aXJlICh2b2lkKQoreworCXNwaW5fbG9jayAoJnNzcF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgc3NwX3JlbGVhc2UgKHZvaWQpCit7CisJc3NwX2NoaXBfc2VsZWN0ICgwKTsJLyoganVzdCBpbiBjYXNlICovCisJc3Bpbl91bmxvY2sgKCZzc3BfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc3NwX2NvbmZpZ3VyZSAoaW50IGRldmljZSwgaW50IG1vZGUsIGludCBzcGVlZCwKKwkJCSAgIGludCBmcmFtZV9zaXplX3dyaXRlLCBpbnQgZnJhbWVfc2l6ZV9yZWFkKQoreworCXNzcF9jb25maWd1cmF0aW9uLmRldmljZQkJPSBkZXZpY2U7CisJc3NwX2NvbmZpZ3VyYXRpb24ubW9kZQkJCT0gbW9kZTsKKwlzc3BfY29uZmlndXJhdGlvbi5zcGVlZAkJCT0gc3BlZWQ7CisJc3NwX2NvbmZpZ3VyYXRpb24uZnJhbWVfc2l6ZV93cml0ZQk9IGZyYW1lX3NpemVfd3JpdGU7CisJc3NwX2NvbmZpZ3VyYXRpb24uZnJhbWVfc2l6ZV9yZWFkCT0gZnJhbWVfc2l6ZV9yZWFkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3NwX3JlYWQgKHZvaWQpCit7CisJcmV0dXJuIGV4ZWN1dGVfc3BpX2NvbW1hbmQgKDAsIDAsIHNzcF9jb25maWd1cmF0aW9uLmZyYW1lX3NpemVfcmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgc3NwX3dyaXRlICh1MTYgZGF0YSkKK3sKKwlleGVjdXRlX3NwaV9jb21tYW5kIChkYXRhLCBzc3BfY29uZmlndXJhdGlvbi5mcmFtZV9zaXplX3dyaXRlLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc3Bfd3JpdGVfcmVhZCAodTE2IGRhdGEpCit7CisJcmV0dXJuIGV4ZWN1dGVfc3BpX2NvbW1hbmQgKGRhdGEsIHNzcF9jb25maWd1cmF0aW9uLmZyYW1lX3NpemVfd3JpdGUsCisJCQkJICAgIHNzcF9jb25maWd1cmF0aW9uLmZyYW1lX3NpemVfcmVhZCk7Cit9CisKK3N0cnVjdCBzc3BfZHJpdmVyIGxoN2E0MHhfY3BsZF9zc3BfZHJpdmVyID0geworCS5pbml0CQk9IHNzcF9pbml0LAorCS5hY3F1aXJlCT0gc3NwX2FjcXVpcmUsCisJLnJlbGVhc2UJPSBzc3BfcmVsZWFzZSwKKwkuY29uZmlndXJlCT0gc3NwX2NvbmZpZ3VyZSwKKwkuY2hpcF9zZWxlY3QJPSBzc3BfY2hpcF9zZWxlY3QsCisJLnJlYWQJCT0gc3NwX3JlYWQsCisJLndyaXRlCQk9IHNzcF93cml0ZSwKKwkud3JpdGVfcmVhZAk9IHNzcF93cml0ZV9yZWFkLAorfTsKKworCitNT0RVTEVfQVVUSE9SKCJNYXJjIFNpbmdlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMUEQ3QTQwWCBDUExEIFNQSSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jCmluZGV4IGJlMzc3ZTMuLmVmOWFmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqICBhcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50CkBAIC01Nyw3ICs1Nyw3IEBACiAJLmhhbmRsZXIJPSBsaDdhNDB4X3RpbWVyX2ludGVycnVwdCwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBsaDdhNDB4X3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBsaDdhNDB4X3RpbWVyX2luaXQgKHZvaWQpCiB7CiAJCQkJLyogU3RvcC9kaXNhYmxlIGFsbCB0aW1lcnMgKi8KIAlUSU1FUl9DT05UUk9MMSA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1N2NhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCitvYmoteQkJCTo9IGNvcmUubyBpcnEubyB0aW1lLm8gY2xvY2subyBncGlvLm8gc2VyaWFsLm8gZG1hLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCisjIFBvd2VyIE1hbmFnZW1lbnQKK29iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNzExNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsNCBAQAorICAgenJlbGFkZHIteQkJOj0gMHg4MDAwODAwMAorcGFyYW1zX3BoeXMteQkJOj0gMHg4MDAwMDEwMAoraW5pdHJkX3BoeXMteQkJOj0gMHg4MDgwMDAwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NWIyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYwpAQCAtMCwwICsxLDEwMTAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYworICoKKyAqIENsb2NrIGNvbnRyb2wgZHJpdmVyIGZvciBQTlg0MDA4CisgKgorICogQXV0aG9yczogVml0YWx5IFdvb2wsIERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKiBHZW5lcmljIGNsb2NrIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSBwYXJ0aWFsbHkgYmFzZWQgb246CisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL2Nsb2NrLmMKKyAqCisgKiAyMDA1LTIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qZm9yd2FyZCBkZWNsYXJhdGlvbiovCitzdGF0aWMgc3RydWN0IGNsayBwZXJfY2s7CitzdGF0aWMgc3RydWN0IGNsayBoY2xrX2NrOworc3RhdGljIHN0cnVjdCBjbGsgY2tfMU1IejsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrXzEzTUh6Oworc3RhdGljIHN0cnVjdCBjbGsgY2tfcGxsMTsKK3N0YXRpYyBpbnQgbG9jYWxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja19sb2NrKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsb2NrX3VubG9jayh2b2lkKQoreworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBjbGsgKnRtcF9jbGs7CisKKwl0bXBfY2xrID0gY2xrOworCXdoaWxlICh0bXBfY2xrLT5wcm9wYWdhdGVfbmV4dCkgeworCQl0bXBfY2xrID0gdG1wX2Nsay0+cHJvcGFnYXRlX25leHQ7CisJCWxvY2FsX3NldF9yYXRlKHRtcF9jbGssIHRtcF9jbGstPnVzZXJfcmF0ZSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xrX3JlZ19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT5lbmFibGVfcmVnKQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSAmCisJCQkgICAgIH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCksIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGtfcmVnX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+ZW5hYmxlX3JlZykKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgfAorCQkJICAgICAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCksIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGtfcmVnX2Rpc2FibGUxKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT5lbmFibGVfcmVnMSkKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZzEpICYKKwkJCSAgICAgfigxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0MSksIGNsay0+ZW5hYmxlX3JlZzEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xrX3JlZ19lbmFibGUxKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT5lbmFibGVfcmVnMSkKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZzEpIHwKKwkJCSAgICAgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQxKSwgY2xrLT5lbmFibGVfcmVnMSk7Cit9CisKK3N0YXRpYyBpbnQgY2xrX3dhaXRfZm9yX3BsbF9sb2NrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaTsKKwlpID0gMDsKKwl3aGlsZSAoaSsrIDwgMHhGRkYgJiYgIShfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZykgJiAxKSkgOwkvKndhaXQgZm9yIFBMTCB0byBsb2NrICovCisKKwlpZiAoIShfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZykgJiAxKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlcyBFUlJPUjogZmFpbGVkIHRvIGxvY2ssIHNjYWxlIHJlZyBkYXRhOiAleFxuIiwKKwkJICAgICAgIGNsay0+bmFtZSwgX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzd2l0Y2hfdG9fZGlydHlfMTNtaHooc3RydWN0IGNsayAqY2xrKQoreworCWludCBpOworCWludCByZXQ7CisJdTMyIHRtcF9yZWc7CisKKwlyZXQgPSAwOworCisJaWYgKCFjbGstPnJhdGUpCisJCWNsa19yZWdfZW5hYmxlMShjbGspOworCisJdG1wX3JlZyA9IF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpOworCS8qaWYgMTNNaHogY2xvY2sgc2VsZWN0ZWQsIHNlbGVjdCAxMydNSHogKGRpcnR5KSBzb3VyY2UgZnJvbSBPU0MgKi8KKwlpZiAoISh0bXBfcmVnICYgMSkpIHsKKwkJdG1wX3JlZyB8PSAoMSA8PCAxKTsJLyogVHJpZ2dlciBzd2l0Y2ggdG8gMTMnTUh6IChkaXJ0eSkgY2xvY2sgKi8KKwkJX19yYXdfd3JpdGVsKHRtcF9yZWcsIGNsay0+cGFyZW50X3N3aXRjaF9yZWcpOworCQlpID0gMDsKKwkJd2hpbGUgKGkrKyA8IDB4RkZGICYmICEoX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZykgJiAxKSkgOwkvKndhaXQgZm9yIDEzJ01IeiBzZWxlY3Rpb24gc3RhdHVzICovCisKKwkJaWYgKCEoX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZykgJiAxKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzIEVSUk9SOiBmYWlsZWQgdG8gc2VsZWN0IDEzJ01IeiwgcGFyZW50IHN3IHJlZyBkYXRhOiAleFxuIiwKKwkJCSAgICAgICBjbGstPm5hbWUsIF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpKTsKKwkJCXJldCA9IC0xOworCQl9CisJfQorCisJaWYgKCFjbGstPnJhdGUpCisJCWNsa19yZWdfZGlzYWJsZTEoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX3RvX2NsZWFuXzEzbWh6KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXUzMiB0bXBfcmVnOworCisJcmV0ID0gMDsKKworCWlmICghY2xrLT5yYXRlKQorCQljbGtfcmVnX2VuYWJsZTEoY2xrKTsKKworCXRtcF9yZWcgPSBfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKTsKKwkvKmlmIDEzJ01oeiBjbG9jayBzZWxlY3RlZCwgc2VsZWN0IDEzTUh6IChjbGVhbikgc291cmNlIGZyb20gT1NDICovCisJaWYgKHRtcF9yZWcgJiAxKSB7CisJCXRtcF9yZWcgJj0gfigxIDw8IDEpOwkvKiBUcmlnZ2VyIHN3aXRjaCB0byAxM01IeiAoY2xlYW4pIGNsb2NrICovCisJCV9fcmF3X3dyaXRlbCh0bXBfcmVnLCBjbGstPnBhcmVudF9zd2l0Y2hfcmVnKTsKKwkJaSA9IDA7CisJCXdoaWxlIChpKysgPCAweEZGRiAmJiAoX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZykgJiAxKSkgOwkvKndhaXQgZm9yIDEzTUh6IHNlbGVjdGlvbiBzdGF0dXMgKi8KKworCQlpZiAoX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZykgJiAxKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXMgRVJST1I6IGZhaWxlZCB0byBzZWxlY3QgMTNNSHosIHBhcmVudCBzdyByZWcgZGF0YTogJXhcbiIsCisJCQkgICAgICAgY2xrLT5uYW1lLCBfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKSk7CisJCQlyZXQgPSAtMTsKKwkJfQorCX0KKworCWlmICghY2xrLT5yYXRlKQorCQljbGtfcmVnX2Rpc2FibGUxKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNldF8xM01Iel9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAocGFyZW50ID09ICZja18xM01IeikKKwkJcmV0ID0gc3dpdGNoX3RvX2NsZWFuXzEzbWh6KGNsayk7CisJZWxzZSBpZiAocGFyZW50ID09ICZja19wbGwxKQorCQlyZXQgPSBzd2l0Y2hfdG9fZGlydHlfMTNtaHooY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgUExMMTYwX01JTl9GQ0NPIDE1NjAwMAorI2RlZmluZSBQTEwxNjBfTUFYX0ZDQ08gMzIwMDAwCisKKy8qCisgKiBDYWxjdWxhdGUgcGxsMTYwIHNldHRpbmdzLgorICogUG9zc2libGUgaW5wdXQ6IHVwIHRvIDMyME1IeiB3aXRoIHN0ZXAgb2YgY2xrLT5wYXJlbnQtPnJhdGUuCisgKiBJbiBQTlg0MDA4IHBhcmVudCByYXRlIGZvciBwbGwxNjBzIG1heSBiZSBlaXRoZXIgMSBvciAxM01Iei4KKyAqIElnbm9yZWQgcGF0aHM6ICJmZWVkYmFjayIgKGJpdCAxMyBzZXQpLCAiZGl2LWJ5LU4iLgorICogU2V0dGluZyBBUk0gUExMNCByYXRlIHRvIDAgd2lsbCBwdXQgQ1BVIGludG8gZGlyZWN0IHJ1biBtb2RlLgorICogU2V0dGluZyBQTEw1IGFuZCBQTEwzIHJhdGUgdG8gMCB3aWxsIGRpc2FibGUgVVNCIGFuZCBEU1AgY2xvY2sgaW5wdXQuCisgKiBQbGVhc2UgcmVmZXIgdG8gUE5YNDAwOCBJQyBtYW51YWwgZm9yIGRldGFpbHMuCisgKi8KKworc3RhdGljIGludCBwbGwxNjBfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwl1MzIgdG1wX3JlZywgdG1wX20sIHRtcF8ycCwgaTsKKwl1MzIgcGFyZW50X3JhdGU7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlwYXJlbnRfcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworCisJaWYgKCFwYXJlbnRfcmF0ZSkKKwkJZ290byBvdXQ7CisKKwkvKiBzZXQgZGlyZWN0IHJ1biBmb3IgQVJNIG9yIGRpc2FibGUgb3V0cHV0IGZvciBvdGhlcnMgICovCisJY2xrX3JlZ19kaXNhYmxlKGNsayk7CisKKwkvKiBkaXNhYmxlIHNvdXJjZSBpbnB1dCBhcyB3ZWxsIChpZ25vcmVkIGZvciBBUk0pICovCisJY2xrX3JlZ19kaXNhYmxlMShjbGspOworCisJdG1wX3JlZyA9IF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKTsKKwl0bXBfcmVnICY9IH4weDFmZmZmOwkvKmNsZWFyIGFsbCBzZXR0aW5ncywgcG93ZXIgZG93biAqLworCV9fcmF3X3dyaXRlbCh0bXBfcmVnLCBjbGstPnNjYWxlX3JlZyk7CisKKwlyYXRlIC09IHJhdGUgJSBwYXJlbnRfcmF0ZTsJLypyb3VuZCBkb3duIHRoZSBpbnB1dCAqLworCisJaWYgKHJhdGUgPiBQTEwxNjBfTUFYX0ZDQ08pCisJCXJhdGUgPSBQTEwxNjBfTUFYX0ZDQ087CisKKwlpZiAoIXJhdGUpIHsKKwkJY2xrLT5yYXRlID0gMDsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJY2xrX3JlZ19lbmFibGUxKGNsayk7CisJdG1wX3JlZyA9IF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKTsKKworCWlmIChyYXRlID09IHBhcmVudF9yYXRlKSB7CisJCS8qZW50ZXIgZGlyZWN0IGJ5cGFzcyBtb2RlICovCisJCXRtcF9yZWcgfD0gKCgxIDw8IDE0KSB8ICgxIDw8IDE1KSk7CisJCV9fcmF3X3dyaXRlbCh0bXBfcmVnLCBjbGstPnNjYWxlX3JlZyk7CisJCWNsay0+cmF0ZSA9IHBhcmVudF9yYXRlOworCQljbGtfcmVnX2VuYWJsZShjbGspOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpID0gMDsKKwlmb3IgKHRtcF8ycCA9IDE7IHRtcF8ycCA8IDE2OyB0bXBfMnAgPDw9IDEpIHsKKwkJaWYgKHJhdGUgKiB0bXBfMnAgPj0gUExMMTYwX01JTl9GQ0NPKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CisKKwlpZiAodG1wXzJwID4gMSkKKwkJdG1wX3JlZyB8PSAoKGkgLSAxKSA8PCAxMSk7CisJZWxzZQorCQl0bXBfcmVnIHw9ICgxIDw8IDE0KTsJLypkaXJlY3QgbW9kZSwgbm8gZGl2aWRlICovCisKKwl0bXBfbSA9IHJhdGUgKiB0bXBfMnA7CisJdG1wX20gLz0gcGFyZW50X3JhdGU7CisKKwl0bXBfcmVnIHw9ICh0bXBfbSAtIDEpIDw8IDE7CS8qY2FsY3VsYXRlIE0gKi8KKwl0bXBfcmVnIHw9ICgxIDw8IDE2KTsJLypwb3dlciB1cCBQTEwgKi8KKwlfX3Jhd193cml0ZWwodG1wX3JlZywgY2xrLT5zY2FsZV9yZWcpOworCisJaWYgKGNsa193YWl0X2Zvcl9wbGxfbG9jayhjbGspIDwgMCkgeworCQljbGtfcmVnX2Rpc2FibGUoY2xrKTsKKwkJY2xrX3JlZ19kaXNhYmxlMShjbGspOworCisJCXRtcF9yZWcgPSBfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZyk7CisJCXRtcF9yZWcgJj0gfjB4MWZmZmY7CS8qY2xlYXIgYWxsIHNldHRpbmdzLCBwb3dlciBkb3duICovCisJCV9fcmF3X3dyaXRlbCh0bXBfcmVnLCBjbGstPnNjYWxlX3JlZyk7CisJCWNsay0+cmF0ZSA9IDA7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCWNsay0+cmF0ZSA9ICh0bXBfbSAqIHBhcmVudF9yYXRlKSAvIHRtcF8ycDsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCisJY2xrX3JlZ19lbmFibGUoY2xrKTsKKwlyZXQgPSAwOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLypjb25maWd1cmUgUEVSX0NMSyovCitzdGF0aWMgaW50IHBlcl9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwl1MzIgdG1wOworCisJdG1wID0gX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpOworCXRtcCAmPSB+KDB4MWYgPDwgMik7CisJdG1wIHw9ICgoY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGstPnJhdGUpIC0gMSkgPDwgMjsKKwlfX3Jhd193cml0ZWwodG1wLCBjbGstPnNjYWxlX3JlZyk7CisJY2xrLT5yYXRlID0gcmF0ZTsKKwlyZXR1cm4gMDsKK30KKworLypjb25maWd1cmUgSENMSyovCitzdGF0aWMgaW50IGhjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwl1MzIgdG1wOworCXRtcCA9IF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKTsKKwl0bXAgPSB0bXAgJiB+MHgzOworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMToKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl0bXAgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0bXAgfD0gMjsKKwkJYnJlYWs7CisJfQorCisJX19yYXdfd3JpdGVsKHRtcCwgY2xrLT5zY2FsZV9yZWcpOworCWNsay0+cmF0ZSA9IHJhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgaGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSAxOgorCWNhc2UgNDoKKwkJcmV0dXJuIHJhdGU7CisJfQorCXJldHVybiAyOworfQorCitzdGF0aWMgdTMyIHBlcl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXJldHVybiBDTEtfUkFURV8xM01IWjsKK30KKworc3RhdGljIGludCBvbl9vZmZfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlpZiAocmF0ZSkgeworCQljbGtfcmVnX2VuYWJsZShjbGspOworCQljbGstPnJhdGUgPSAxOworCX0gZWxzZSB7CisJCWNsa19yZWdfZGlzYWJsZShjbGspOworCQljbGstPnJhdGUgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbl9vZmZfaW52X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJaWYgKHJhdGUpIHsKKwkJY2xrX3JlZ19kaXNhYmxlKGNsayk7CS8qZW5hYmxlIGJpdCBpcyBpbnZlcnRlZCAqLworCQljbGstPnJhdGUgPSAxOworCX0gZWxzZSB7CisJCWNsa19yZWdfZW5hYmxlKGNsayk7CisJCWNsay0+cmF0ZSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIG9uX29mZl9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJcmV0dXJuIChyYXRlID8gMSA6IDApOworfQorCitzdGF0aWMgdTMyIHBsbDRfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCWlmIChyYXRlID4gQ0xLX1JBVEVfMjA4TUhaKQorCQlyYXRlID0gQ0xLX1JBVEVfMjA4TUhaOworCWlmIChyYXRlID09IENMS19SQVRFXzIwOE1IWiAmJiBoY2xrX2NrLnVzZXJfcmF0ZSA9PSAxKQorCQlyYXRlID0gQ0xLX1JBVEVfMjA4TUhaIC0gQ0xLX1JBVEVfMTNNSFo7CisJcmV0dXJuIChyYXRlIC0gKHJhdGUgJSAoaGNsa19jay51c2VyX3JhdGUgKiBDTEtfUkFURV8xM01IWikpKTsKK30KKworc3RhdGljIHUzMiBwbGwzX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlpZiAocmF0ZSA+IENMS19SQVRFXzIwOE1IWikKKwkJcmF0ZSA9IENMS19SQVRFXzIwOE1IWjsKKwlyZXR1cm4gKHJhdGUgLSByYXRlICUgQ0xLX1JBVEVfMTNNSFopOworfQorCitzdGF0aWMgdTMyIHBsbDVfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXJldHVybiAocmF0ZSA/IENMS19SQVRFXzQ4TUhaIDogMCk7Cit9CisKK3N0YXRpYyB1MzIgY2tfMTNNSHpfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXJldHVybiAocmF0ZSA/IENMS19SQVRFXzEzTUhaIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgY2tfMTNNSHpfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlpZiAocmF0ZSkgeworCQljbGtfcmVnX2Rpc2FibGUoY2xrKTsJLyplbmFibGUgYml0IGlzIGludmVydGVkICovCisJCXVkZWxheSg1MDApOworCQljbGstPnJhdGUgPSBDTEtfUkFURV8xM01IWjsKKwkJY2tfMU1Iei5yYXRlID0gQ0xLX1JBVEVfMU1IWjsKKwl9IGVsc2UgeworCQljbGtfcmVnX2VuYWJsZShjbGspOworCQljbGstPnJhdGUgPSAwOworCQlja18xTUh6LnJhdGUgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbGwxX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisjaWYgMCAvKiBkb2Vzbid0IHdvcmsgb24gc29tZSBib2FyZHMsIHByb2JhYmx5IGEgSFcgQlVHICovCisJaWYgKHJhdGUpIHsKKwkJY2xrX3JlZ19kaXNhYmxlKGNsayk7CS8qZW5hYmxlIGJpdCBpcyBpbnZlcnRlZCAqLworCQlpZiAoIWNsa193YWl0X2Zvcl9wbGxfbG9jayhjbGspKSB7CisJCQljbGstPnJhdGUgPSBDTEtfUkFURV8xM01IWjsKKwkJfSBlbHNlIHsKKwkJCWNsa19yZWdfZW5hYmxlKGNsayk7CisJCQljbGstPnJhdGUgPSAwOworCQl9CisKKwl9IGVsc2UgeworCQljbGtfcmVnX2VuYWJsZShjbGspOworCQljbGstPnJhdGUgPSAwOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKiBDbG9jayBzb3VyY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9zY18xM01IeiA9IHsKKwkubmFtZSA9ICJvc2NfMTNNSHoiLAorCS5mbGFncyA9IEZJWEVEX1JBVEUsCisJLnJhdGUgPSBDTEtfUkFURV8xM01IWiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrXzEzTUh6ID0geworCS5uYW1lID0gImNrXzEzTUh6IiwKKwkucGFyZW50ID0gJm9zY18xM01IeiwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZja18xM01Iel9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZja18xM01Iel9zZXRfcmF0ZSwKKwkuZW5hYmxlX3JlZyA9IE9TQzEzQ1RSTF9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLnJhdGUgPSBDTEtfUkFURV8xM01IWiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9zY18zMktIeiA9IHsKKwkubmFtZSA9ICJvc2NfMzJLSHoiLAorCS5mbGFncyA9IEZJWEVEX1JBVEUsCisJLnJhdGUgPSBDTEtfUkFURV8zMktIWiwKK307CisKKy8qYXR0YWNoZWQgdG8gUExMNSovCitzdGF0aWMgc3RydWN0IGNsayBja18xTUh6ID0geworCS5uYW1lID0gImNrXzFNSHoiLAorCS5mbGFncyA9IEZJWEVEX1JBVEUgfCBQQVJFTlRfU0VUX1JBVEUsCisJLnBhcmVudCA9ICZja18xM01IeiwKK307CisKKy8qIFBMTDEgKDM5NykgLSBwcm92aWRlcyAxMycgTUh6IGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBja19wbGwxID0geworCS5uYW1lID0gImNrX3BsbDEiLAorCS5wYXJlbnQgPSAmb3NjXzMyS0h6LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJmNrXzEzTUh6X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJnBsbDFfc2V0X3JhdGUsCisJLmVuYWJsZV9yZWcgPSBQTExDVFJMX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gMSwKKwkuc2NhbGVfcmVnID0gUExMQ1RSTF9SRUcsCisJLnJhdGUgPSBDTEtfUkFURV8xM01IWiwKK307CisKKy8qIENQVS9CdXMgUExMICovCitzdGF0aWMgc3RydWN0IGNsayBja19wbGw0ID0geworCS5uYW1lID0gImNrX3BsbDQiLAorCS5wYXJlbnQgPSAmY2tfcGxsMSwKKwkuZmxhZ3MgPSBSQVRFX1BST1BBR0FURVMgfCBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucHJvcGFnYXRlX25leHQgPSAmcGVyX2NrLAorCS5yb3VuZF9yYXRlID0gJnBsbDRfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmcGxsMTYwX3NldF9yYXRlLAorCS5yYXRlID0gQ0xLX1JBVEVfMjA4TUhaLAorCS5zY2FsZV9yZWcgPSBIQ0xLUExMQ1RSTF9SRUcsCisJLmVuYWJsZV9yZWcgPSBQV1JDVFJMX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gMiwKKwkucGFyZW50X3N3aXRjaF9yZWcgPSBTWVNDTEtDVFJMX1JFRywKKwkuc2V0X3BhcmVudCA9ICZzZXRfMTNNSHpfcGFyZW50LAorfTsKKworLyogVVNCIFBMTCAqLworc3RhdGljIHN0cnVjdCBjbGsgY2tfcGxsNSA9IHsKKwkubmFtZSA9ICJja19wbGw1IiwKKwkucGFyZW50ID0gJmNrXzFNSHosCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmcGxsNV9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZwbGwxNjBfc2V0X3JhdGUsCisJLnNjYWxlX3JlZyA9IFVTQkNUUkxfUkVHLAorCS5lbmFibGVfcmVnID0gVVNCQ1RSTF9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IDE4LAorCS5lbmFibGVfcmVnMSA9IFVTQkNUUkxfUkVHLAorCS5lbmFibGVfc2hpZnQxID0gMTcsCit9OworCisvKiBYUEVSVFRlYWsgRFNQIFBMTCAqLworc3RhdGljIHN0cnVjdCBjbGsgY2tfcGxsMyA9IHsKKwkubmFtZSA9ICJja19wbGwzIiwKKwkucGFyZW50ID0gJmNrX3BsbDEsCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmcGxsM19yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZwbGwxNjBfc2V0X3JhdGUsCisJLnNjYWxlX3JlZyA9IERTUFBMTENUUkxfUkVHLAorCS5lbmFibGVfcmVnID0gRFNQQ0xLQ1RSTF9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IDMsCisJLmVuYWJsZV9yZWcxID0gRFNQQ0xLQ1RSTF9SRUcsCisJLmVuYWJsZV9zaGlmdDEgPSAyLAorCS5wYXJlbnRfc3dpdGNoX3JlZyA9IERTUENMS0NUUkxfUkVHLAorCS5zZXRfcGFyZW50ID0gJnNldF8xM01Iel9wYXJlbnQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoY2xrX2NrID0geworCS5uYW1lID0gImhjbGtfY2siLAorCS5wYXJlbnQgPSAmY2tfcGxsNCwKKwkuZmxhZ3MgPSBQQVJFTlRfU0VUX1JBVEUsCisJLnNldF9yYXRlID0gJmhjbGtfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSAmaGNsa19yb3VuZF9yYXRlLAorCS5zY2FsZV9yZWcgPSBIQ0xLRElWQ1RSTF9SRUcsCisJLnJhdGUgPSAyLAorCS51c2VyX3JhdGUgPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGVyX2NrID0geworCS5uYW1lID0gInBlcl9jayIsCisJLnBhcmVudCA9ICZja19wbGw0LAorCS5mbGFncyA9IEZJWEVEX1JBVEUsCisJLnByb3BhZ2F0ZV9uZXh0ID0gJmhjbGtfY2ssCisJLnNldF9yYXRlID0gJnBlcl9jbGtfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSAmcGVyX2Nsa19yb3VuZF9yYXRlLAorCS5zY2FsZV9yZWcgPSBIQ0xLRElWQ1RSTF9SRUcsCisJLnJhdGUgPSBDTEtfUkFURV8xM01IWiwKKwkudXNlcl9yYXRlID0gQ0xLX1JBVEVfMTNNSFosCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtMmhjbGtfY2sgPSB7CisJLm5hbWUgPSAibTJoY2xrX2NrIiwKKwkucGFyZW50ID0gJmhjbGtfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9pbnZfc2V0X3JhdGUsCisJLnJhdGUgPSAxLAorCS5lbmFibGVfc2hpZnQgPSA2LAorCS5lbmFibGVfcmVnID0gUFdSQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2ZnA5X2NrID0geworCS5uYW1lID0gInZmcDlfY2siLAorCS5wYXJlbnQgPSAmY2tfcGxsNCwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5yYXRlID0gMSwKKwkuZW5hYmxlX3NoaWZ0ID0gNCwKKwkuZW5hYmxlX3JlZyA9IFZGUDlDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGtleXNjYW5fY2sgPSB7CisJLm5hbWUgPSAia2V5c2Nhbl9jayIsCisJLnBhcmVudCA9ICZvc2NfMzJLSHosCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IEtFWUNMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdG91Y2hfY2sgPSB7CisJLm5hbWUgPSAidG91Y2hfY2siLAorCS5wYXJlbnQgPSAmb3NjXzMyS0h6LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBUU0NMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcHdtMV9jayA9IHsKKwkubmFtZSA9ICJwd20xX2NrIiwKKwkucGFyZW50ID0gJm9zY18zMktIeiwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gUFdNQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwd20yX2NrID0geworCS5uYW1lID0gInB3bTJfY2siLAorCS5wYXJlbnQgPSAmb3NjXzMyS0h6LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDIsCisJLmVuYWJsZV9yZWcgPSBQV01DTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGpwZWdfY2sgPSB7CisJLm5hbWUgPSAianBlZ19jayIsCisJLnBhcmVudCA9ICZoY2xrX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBKUEVHQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc19jayA9IHsKKwkubmFtZSA9ICJtc19jayIsCisJLnBhcmVudCA9ICZja19wbGw0LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDUsCisJLmVuYWJsZV9yZWcgPSBNU0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHVtX2NrID0geworCS5uYW1lID0gImR1bV9jayIsCisJLnBhcmVudCA9ICZoY2xrX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBEVU1DTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZsYXNoX2NrID0geworCS5uYW1lID0gImZsYXNoX2NrIiwKKwkucGFyZW50ID0gJmhjbGtfY2ssCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMSwJLyogT25seSBNTEMgY2xvY2sgc3VwcG9ydGVkICovCisJLmVuYWJsZV9yZWcgPSBGTEFTSENMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMF9jayA9IHsKKwkubmFtZSA9ICJpMmMwX2NrIiwKKwkucGFyZW50ID0gJnBlcl9jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gSTJDQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2NrID0geworCS5uYW1lID0gImkyYzFfY2siLAorCS5wYXJlbnQgPSAmcGVyX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDEsCisJLmVuYWJsZV9yZWcgPSBJMkNDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfY2sgPSB7CisJLm5hbWUgPSAiaTJjMl9jayIsCisJLnBhcmVudCA9ICZwZXJfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMiwKKwkuZW5hYmxlX3JlZyA9IFVTQl9PVEdfQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzcGkwX2NrID0geworCS5uYW1lID0gInNwaTBfY2siLAorCS5wYXJlbnQgPSAmaGNsa19jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gU1BJQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzcGkxX2NrID0geworCS5uYW1lID0gInNwaTFfY2siLAorCS5wYXJlbnQgPSAmaGNsa19jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSA0LAorCS5lbmFibGVfcmVnID0gU1BJQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkbWFfY2sgPSB7CisJLm5hbWUgPSAiZG1hX2NrIiwKKwkucGFyZW50ID0gJmhjbGtfY2ssCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IERNQUNMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfY2sgPSB7CisJLm5hbWUgPSAidWFydDNfY2siLAorCS5wYXJlbnQgPSAmcGVyX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLnJhdGUgPSAxLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gVUFSVENMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDRfY2sgPSB7CisJLm5hbWUgPSAidWFydDRfY2siLAorCS5wYXJlbnQgPSAmcGVyX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDEsCisJLmVuYWJsZV9yZWcgPSBVQVJUQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0NV9jayA9IHsKKwkubmFtZSA9ICJ1YXJ0NV9jayIsCisJLnBhcmVudCA9ICZwZXJfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkucmF0ZSA9IDEsCisJLmVuYWJsZV9zaGlmdCA9IDIsCisJLmVuYWJsZV9yZWcgPSBVQVJUQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Nl9jayA9IHsKKwkubmFtZSA9ICJ1YXJ0Nl9jayIsCisJLnBhcmVudCA9ICZwZXJfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMywKKwkuZW5hYmxlX3JlZyA9IFVBUlRDTEtDVFJMX1JFRywKK307CisKKy8qIFRoZXNlIGNsb2NrcyBhcmUgdmlzaWJsZSBvdXRzaWRlIHRoaXMgbW9kdWxlCisgKiBhbmQgY2FuIGJlIGluaXRpYWxpemVkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrICpvbmNoaXBfY2xrc1tdID0geworCSZja18xM01IeiwKKwkmY2tfcGxsMSwKKwkmY2tfcGxsNCwKKwkmY2tfcGxsNSwKKwkmY2tfcGxsMywKKwkmdmZwOV9jaywKKwkmbTJoY2xrX2NrLAorCSZoY2xrX2NrLAorCSZkbWFfY2ssCisJJmZsYXNoX2NrLAorCSZkdW1fY2ssCisJJmtleXNjYW5fY2ssCisJJnB3bTFfY2ssCisJJnB3bTJfY2ssCisJJmpwZWdfY2ssCisJJm1zX2NrLAorCSZ0b3VjaF9jaywKKwkmaTJjMF9jaywKKwkmaTJjMV9jaywKKwkmaTJjMl9jaywKKwkmc3BpMF9jaywKKwkmc3BpMV9jaywKKwkmdWFydDNfY2ssCisJJnVhcnQ0X2NrLAorCSZ1YXJ0NV9jaywKKwkmdWFydDZfY2ssCit9OworCitzdGF0aWMgaW50IGxvY2FsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJaWYgKGNsay0+c2V0X3JhdGUpIHsKKworCQlpZiAoY2xrLT51c2VyX3JhdGUgPT0gY2xrLT5yYXRlICYmIGNsay0+cGFyZW50LT5yYXRlKSB7CisJCQkvKiBpZiBjbG9jayBlbmFibGVkIG9yIHJhdGUgbm90IHNldCAqLworCQkJY2xrLT51c2VyX3JhdGUgPSBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKKwkJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCBjbGstPnVzZXJfcmF0ZSk7CisJCX0gZWxzZQorCQkJY2xrLT51c2VyX3JhdGUgPSBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChjbGstPmZsYWdzICYgRklYRURfUkFURSkKKwkJZ290byBvdXQ7CisKKwljbG9ja19sb2NrKCk7CisJaWYgKChjbGstPmZsYWdzICYgUEFSRU5UX1NFVF9SQVRFKSAmJiBjbGstPnBhcmVudCkgeworCisJCWNsay0+dXNlcl9yYXRlID0gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJCS8qIHBhcmVudCBjbG9jayBuZWVkcyB0byBiZSByZWZyZXNoZWQKKwkJICAgZm9yIHRoZSBzZXR0aW5nIHRvIHRha2UgZWZmZWN0ICovCisJfSBlbHNlIHsKKwkJcmV0ID0gbG9jYWxfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwl9CisJcmV0ID0gMDsKKwljbG9ja191bmxvY2soKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCBjbGsgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisJc3RydWN0IGNsayAqKmNsa3A7CisKKwljbG9ja19sb2NrKCk7CisJZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwX2Nsa3MpOworCSAgICAgY2xrcCsrKSB7CisJCWlmIChzdHJjbXAoaWQsICgqY2xrcCktPm5hbWUpID09IDAKKwkJICAgICYmIHRyeV9tb2R1bGVfZ2V0KCgqY2xrcCktPm93bmVyKSkgeworCQkJY2xrID0gKCpjbGtwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNsb2NrX3VubG9jaygpOworCisJcmV0dXJuIGNsazsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xvY2tfbG9jaygpOworCWlmIChjbGsgJiYgIUlTX0VSUihjbGspKQorCQltb2R1bGVfcHV0KGNsay0+b3duZXIpOworCWNsb2NrX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCWNsb2NrX2xvY2soKTsKKwlyZXQgPSBjbGstPnJhdGU7CisJY2xvY2tfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKworc3RhdGljIGludCBsb2NhbF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBGSVhFRF9SQVRFKSAmJiAhY2xrLT5yYXRlICYmIGNsay0+c2V0X3JhdGUKKwkgICAgJiYgY2xrLT51c2VyX3JhdGUpCisJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCBjbGstPnVzZXJfcmF0ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbG9jYWxfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghKGNsay0+ZmxhZ3MgJiBGSVhFRF9SQVRFKSAmJiBjbGstPnJhdGUgJiYgY2xrLT5zZXRfcmF0ZSkKKwkJY2xrLT5zZXRfcmF0ZShjbGssIDApOworfQorCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisKKwljbG9ja19sb2NrKCk7CisJcmV0ID0gbG9jYWxfY2xrX2VuYWJsZShjbGspOworCWNsb2NrX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWNsb2NrX2xvY2soKTsKKwlsb2NhbF9jbGtfZGlzYWJsZShjbGspOworCWNsb2NrX3VubG9jaygpOworfQorCitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKworc3RhdGljIHZvaWQgbG9jYWxfY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT51c2Vjb3VudCA+IDAgJiYgISgtLWNsay0+dXNlY291bnQpKSB7CisJCWxvY2FsX2Nsa19kaXNhYmxlKGNsayk7CisJCWlmIChjbGstPnBhcmVudCkKKwkJCWxvY2FsX2Nsa191bnVzZShjbGstPnBhcmVudCk7CisJfQorfQorCitzdGF0aWMgaW50IGxvY2FsX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgeworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlyZXQgPSBsb2NhbF9jbGtfdXNlKGNsay0+cGFyZW50KTsKKworCQlpZiAocmV0ICE9IDApIHsKKwkJCWNsay0+dXNlY291bnQtLTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gbG9jYWxfY2xrX2VuYWJsZShjbGspOworCisJCWlmIChyZXQgIT0gMCAmJiBjbGstPnBhcmVudCkgeworCQkJbG9jYWxfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwkJCWNsay0+dXNlY291bnQtLTsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBUaGUgbWFpbiBwdXJwb3NlIG9mIGNsa191c2UgYW5zIGNsa191bnVzZSBmdW5jdGlvbnMKKyAqIGlzIHRvIGNvbnRyb2wgc3dpdGNoaW5nIDEzTUh6IG9zY2lsbGF0b3IgYW5kIFBMTDEgKDEzJ01IeiksCisgKiBzbyB0aGF0IHRoZXkgYXJlIGRpc2FibGVkIHdoZW5ldmVyIG5vbmUgb2YgUExMMi01IGlzIHVzaW5nIHRoZW0uCisgKiBBbHRob3VnaCBpbiB0aGVvcnkgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCB3b3JrIHdpdGggYW55IGNsb2NrLAorICogcGxlYXNlIHVzZSB0aGVtIG9ubHkgb24gUExMMiAtIFBMTDUgdG8gYXZvaWQgY29uZnVzaW9uLgorICovCitpbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisKKwljbG9ja19sb2NrKCk7CisJcmV0ID0gbG9jYWxfY2xrX3VzZShjbGspOworCWNsb2NrX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa191c2UpOworCit2b2lkIGNsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCit7CisKKwljbG9ja19sb2NrKCk7CisJbG9jYWxfY2xrX3VudXNlKGNsayk7CisJY2xvY2tfdW5sb2NrKCk7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX3VudXNlKTsKKworbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlsb25nIHJldDsKKwljbG9ja19sb2NrKCk7CisJaWYgKGNsay0+cm91bmRfcmF0ZSkKKwkJcmV0ID0gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJZWxzZQorCQlyZXQgPSBjbGstPnJhdGU7CisJY2xvY2tfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CisKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKwlpZiAoIWNsay0+c2V0X3BhcmVudCkKKwkJZ290byBvdXQ7CisKKwljbG9ja19sb2NrKCk7CisJcmV0ID0gY2xrLT5zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwlpZiAoIXJldCkKKwkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisJY2xvY2tfdW5sb2NrKCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcGFyZW50KTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICoqY2xrcDsKKworCS8qIERpc2FibGUgYXV0b2Nsb2NraW5nLCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gd29yayAqLworCV9fcmF3X3dyaXRlbCgweGZmLCBBVVRPQ0xLX0NUUkwpOworCisJZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwX2Nsa3MpOworCSAgICAgY2xrcCsrKSB7CisJCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJiBORUVEU19JTklUSUFMSVpBVElPTikKKwkJICAgICYmICgoKmNsa3ApLT5zZXRfcmF0ZSkpIHsKKwkJCSgqY2xrcCktPnVzZXJfcmF0ZSA9ICgqY2xrcCktPnJhdGU7CisJCQlsb2NhbF9zZXRfcmF0ZSgoKmNsa3ApLCAoKmNsa3ApLT51c2VyX3JhdGUpOworCQkJaWYgKCgqY2xrcCktPnNldF9wYXJlbnQpCisJCQkJKCpjbGtwKS0+c2V0X3BhcmVudCgoKmNsa3ApLCAoKmNsa3ApLT5wYXJlbnQpOworCQl9CisJCXByX2RlYnVnKCIlczogY2xvY2sgJXMsIHJhdGUgJWxkXG4iLAorCQkJX19GVU5DVElPTl9fLCAoKmNsa3ApLT5uYW1lLCAoKmNsa3ApLT5yYXRlKTsKKwl9CisKKwljbGtfdXNlKCZja19wbGw0KTsKKworCS8qIGlmIGNrXzEzTUh6IGlzIG5vdCB1c2VkLCBkaXNhYmxlIGl0LiAqLworCWlmIChja18xM01Iei51c2Vjb3VudCA9PSAwKQorCQlsb2NhbF9jbGtfZGlzYWJsZSgmY2tfMTNNSHopOworCisJLyogRGlzYWJsZSBhdXRvY2xvY2tpbmcgKi8KKwlfX3Jhd193cml0ZWIoMHhmZiwgQVVUT0NMS19DVFJMKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1OGYzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaAorICoKKyAqIENsb2NrIGNvbnRyb2wgZHJpdmVyIGZvciBQTlg0MDA4IC0gaW50ZXJuYWwgaGVhZGVyIGZpbGUKKyAqCisgKiBBdXRob3I6IFZpdGFseSBXb29sIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA2IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fQVJDSF9BUk1fUE5YNDAwOF9DTE9DS19IX18KKyNkZWZpbmUgX19BUkNIX0FSTV9QTlg0MDA4X0NMT0NLX0hfXworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgY2xrICpwYXJlbnQ7CisJc3RydWN0IGNsayAqcHJvcGFnYXRlX25leHQ7CisJdTMyIHJhdGU7CisJdTMyIHVzZXJfcmF0ZTsKKwlzOCB1c2Vjb3VudDsKKwl1MzIgZmxhZ3M7CisJdTMyIHNjYWxlX3JlZzsKKwl1OCBlbmFibGVfc2hpZnQ7CisJdTMyIGVuYWJsZV9yZWc7CisJdTggZW5hYmxlX3NoaWZ0MTsKKwl1MzIgZW5hYmxlX3JlZzE7CisJdTMyIHBhcmVudF9zd2l0Y2hfcmVnOworCSB1MzIoKnJvdW5kX3JhdGUpIChzdHJ1Y3QgY2xrICosIHUzMik7CisJaW50ICgqc2V0X3JhdGUpIChzdHJ1Y3QgY2xrICosIHUzMik7CisJaW50ICgqc2V0X3BhcmVudCkgKHN0cnVjdCBjbGsgKiBjbGssIHN0cnVjdCBjbGsgKiBwYXJlbnQpOworfTsKKworLyogRmxhZ3MgKi8KKyNkZWZpbmUgUkFURV9QUk9QQUdBVEVTICAgICAgKDE8PDApCisjZGVmaW5lIE5FRURTX0lOSVRJQUxJWkFUSU9OICgxPDwxKQorI2RlZmluZSBQQVJFTlRfU0VUX1JBVEUgICAgICAoMTw8MikKKyNkZWZpbmUgRklYRURfUkFURSAgICAgICAgICAgKDE8PDMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MWRhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jb3JlLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvY29yZS5jCisgKgorICogUE5YNDAwOCBjb3JlIHN0YXJ0dXAgY29kZQorICoKKyAqIEF1dGhvcnM6IFZpdGFseSBXb29sLCBEbWl0cnkgQ2hpZ2lyZXYsCisgKiBHcmlnb3J5IFRvbHN0b2x5dGtpbiwgRG1pdHJ5IFBlcnZ1c2hpbiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogQmFzZWQgb24gcmVmZXJlbmNlIGNvZGUgcmVjZWl2ZWQgZnJvbSBQaGlsaXBzOgorICogQ29weXJpZ2h0IChDKSAyMDAzIFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworc3RydWN0IHJlc291cmNlIHNwaXBueF8wX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gUE5YNDAwOF9TUEkxX0JBU0UsCisJCS5lbmQgPSBQTlg0MDA4X1NQSTFfQkFTRSArIFNaXzRLLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IFBFUl9TUEkxX1JFQ19YTUlULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LCB7CisJCS5zdGFydCA9IFNQSTFfSU5ULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5mbGFncyA9IDAsCisJfSwKK307CisKK3N0cnVjdCByZXNvdXJjZSBzcGlwbnhfMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IFBOWDQwMDhfU1BJMl9CQVNFLAorCQkuZW5kID0gUE5YNDAwOF9TUEkyX0JBU0UgKyBTWl80SywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBQRVJfU1BJMl9SRUNfWE1JVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwgeworCQkuc3RhcnQgPSBTUEkyX0lOVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCisJCS5tYXhfc3BlZWRfaHoJPSAxMDAwMDAwLAorCQkuYnVzX251bQk9IDEsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXBueF8xID0geworCS5uYW1lID0gInNwaXBueCIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoc3BpcG54XzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBzcGlwbnhfMF9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhGRkZGRkZGRiwKKwkJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXBueF8yID0geworCS5uYW1lID0gInNwaXBueCIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoc3BpcG54XzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBzcGlwbnhfMV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhGRkZGRkZGRiwKKwkJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgcGxhdGZvcm1fc2VyaWFsX3BvcnRzW10gPSB7CisJeworCQkubWVtYmFzZSA9ICh2b2lkICopX19pb21lbShJT19BRERSRVNTKFBOWDQwMDhfVUFSVDVfQkFTRSkpLAorCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKVBOWDQwMDhfVUFSVDVfQkFTRSwKKwkJLmlycSA9IElJUjVfSU5ULAorCQkudWFydGNsayA9IFBOWDQwMDhfVUFSVF9DTEssCisJCS5yZWdzaGlmdCA9IDIsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfQlVHR1lfVUFSVCB8IFVQRl9TS0lQX1RFU1QsCisJfSwKKwl7CisJCS5tZW1iYXNlID0gKHZvaWQgKilfX2lvbWVtKElPX0FERFJFU1MoUE5YNDAwOF9VQVJUM19CQVNFKSksCisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpUE5YNDAwOF9VQVJUM19CQVNFLAorCQkuaXJxID0gSUlSM19JTlQsCisJCS51YXJ0Y2xrID0gUE5YNDAwOF9VQVJUX0NMSywKKwkJLnJlZ3NoaWZ0ID0gMiwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9CVUdHWV9VQVJUIHwgVVBGX1NLSVBfVEVTVCwKKwkgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZSA9ICJzZXJpYWw4MjUwIiwKKwkuaWQgPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGxhdGZvcm1fc2VyaWFsX3BvcnRzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNwaXBueF8xLAorCSZzcGlwbnhfMiwKKwkmc2VyaWFsX2RldmljZSwKK307CisKKworZXh0ZXJuIHZvaWQgcG54NDAwOF91YXJ0X2luaXQodm9pZCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwbng0MDA4X2luaXQodm9pZCkKK3sKKwkvKmRpc2FibGUgYWxsIFNUQVJUIGludGVycnVwdCBzb3VyY2VzLAorCSAgIGFuZCBjbGVhciBhbGwgU1RBUlQgaW50ZXJydXB0IGZsYWdzICovCisJX19yYXdfd3JpdGVsKDAsIFNUQVJUX0lOVF9FUl9SRUcoU0VfUElOX0JBU0VfSU5UKSk7CisJX19yYXdfd3JpdGVsKDAsIFNUQVJUX0lOVF9FUl9SRUcoU0VfSU5UX0JBU0VfSU5UKSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIFNUQVJUX0lOVF9SU1JfUkVHKFNFX1BJTl9CQVNFX0lOVCkpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBTVEFSVF9JTlRfUlNSX1JFRyhTRV9JTlRfQkFTRV9JTlQpKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHNwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHNwaV9ib2FyZF9pbmZvKSk7CisJLyogU3dpdGNoIG9uIHRoZSBVQVJUIGNsb2NrcyAqLworCXBueDQwMDhfdWFydF9pbml0KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcG54NDAwOF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsIAk9IElPX0FERFJFU1MoUE5YNDAwOF9JUkFNX0JBU0UpLAorCQkucGZuIAkJPSBfX3BoeXNfdG9fcGZuKFBOWDQwMDhfSVJBTV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl82NEssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbCAJPSBJT19BRERSRVNTKFBOWDQwMDhfTkRGX0ZMQVNIX0JBU0UpLAorCQkucGZuIAkJPSBfX3BoeXNfdG9fcGZuKFBOWDQwMDhfTkRGX0ZMQVNIX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzFNIC0gU1pfMTI4SywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsIAk9IElPX0FERFJFU1MoUE5YNDAwOF9KUEVHX0NPTkZJR19CQVNFKSwKKwkJLnBmbiAJCT0gX19waHlzX3RvX3BmbihQTlg0MDA4X0pQRUdfQ09ORklHX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzEyOEsgKiAzLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwgCT0gSU9fQUREUkVTUyhQTlg0MDA4X0RNQV9DT05GSUdfQkFTRSksCisJCS5wZm4gCQk9IF9fcGh5c190b19wZm4oUE5YNDAwOF9ETUFfQ09ORklHX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzFNLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwgCT0gSU9fQUREUkVTUyhQTlg0MDA4X0FIQjJGQUJfQkFTRSksCisJCS5wZm4gCQk9IF9fcGh5c190b19wZm4oUE5YNDAwOF9BSEIyRkFCX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzFNLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sCit9OworCit2b2lkIF9faW5pdCBwbng0MDA4X21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChwbng0MDA4X2lvX2Rlc2MsIEFSUkFZX1NJWkUocG54NDAwOF9pb19kZXNjKSk7Cit9CisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHBueDQwMDhfdGltZXI7CisKK01BQ0hJTkVfU1RBUlQoUE5YNDAwOCwgIlBoaWxpcHMgUE5YNDAwOCIpCisJLyogTWFpbnRhaW5lcjogTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuICovCisJLnBoeXNfaW8gCQk9IDB4NDAwOTAwMDAsCisJLmlvX3BnX29mZnN0IAkJPSAoMHhmNDA5MDAwMCA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCQk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbyAJCT0gcG54NDAwOF9tYXBfaW8sCisJLmluaXRfaXJxIAkJPSBwbng0MDA4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgCQk9IHBueDQwMDhfaW5pdCwKKwkudGltZXIgCQkJPSAmcG54NDAwOF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxYWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYwpAQCAtMCwwICsxLDExMDkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jCisgKgorICogIFBOWDQwMDggRE1BIHJlZ2lzdHJhdGlvbiBhbmQgSVJRIGRpc3BhdGNoaW5nCisgKgorICogIEF1dGhvcjoJVml0YWx5IFdvb2wKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLiAoYykgMjAwNQorICoKKyAqICBCYXNlZCBvbiB0aGUgY29kZSBmcm9tIE5pY29sYXMgUGl0cmUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKworc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCB7CisJY2hhciAqbmFtZTsKKwl2b2lkICgqaXJxX2hhbmRsZXIpIChpbnQsIGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl2b2lkICpkYXRhOworCXN0cnVjdCBwbng0MDA4X2RtYV9sbCAqbGw7CisJdTMyIGxsX2RtYTsKKwl2b2lkICp0YXJnZXRfYWRkcjsKKwlpbnQgdGFyZ2V0X2lkOworfSBkbWFfY2hhbm5lbHNbTUFYX0RNQV9DSEFOTkVMU107CisKK3N0YXRpYyBzdHJ1Y3QgbGxfcG9vbCB7CisJdm9pZCAqdmFkZHI7CisJdm9pZCAqY3VyOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJaW50IGNvdW50OworfSBsbF9wb29sOworCitzdGF0aWMgc3BpbmxvY2tfdCBsbF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCitzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKnBueDQwMDhfYWxsb2NfbGxfZW50cnkoZG1hX2FkZHJfdCAqIGxsX2RtYSkKK3sKKwlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKmxsID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxsX2xvY2ssIGZsYWdzKTsKKwlpZiAobGxfcG9vbC5jb3VudCA+IDQpIHsgLyogY2FuIGdpdmUgb25lIG1vcmUgKi8KKwkJbGwgPSAqKHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqKikgbGxfcG9vbC5jdXI7CisJCSpsbF9kbWEgPSBsbF9wb29sLmRtYV9hZGRyICsgKCh2b2lkICopbGwgLSBsbF9wb29sLnZhZGRyKTsKKwkJKih2b2lkICoqKWxsX3Bvb2wuY3VyID0gKioodm9pZCAqKiopbGxfcG9vbC5jdXI7CisJCW1lbXNldChsbCwgMCwgc2l6ZW9mKCpsbCkpOworCQlsbF9wb29sLmNvdW50LS07CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBsbDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9hbGxvY19sbF9lbnRyeSk7CisKK3ZvaWQgcG54NDAwOF9mcmVlX2xsX2VudHJ5KHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqIGxsLCBkbWFfYWRkcl90IGxsX2RtYSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGxsKSB7CisJCWlmICgodW5zaWduZWQgbG9uZykoKGxvbmcpbGwgLSAobG9uZylsbF9wb29sLnZhZGRyKSA+IDB4NDAwMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBlbnRyeSBub3QgYWxsb2NhdGVkIGJ5IERNQVxuIik7CisJCQlCVUcoKTsKKwkJfQorCisJCWlmIChsbC0+ZmxhZ3MgJiBETUFfQlVGRkVSX0FMTE9DQVRFRCkKKwkJCWxsLT5mcmVlKGxsLT5hbGxvY19kYXRhKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbGxfbG9jaywgZmxhZ3MpOworCQkqKGxvbmcgKilsbCA9ICoobG9uZyAqKWxsX3Bvb2wuY3VyOworCQkqKGxvbmcgKilsbF9wb29sLmN1ciA9IChsb25nKWxsOworCQlsbF9wb29sLmNvdW50Kys7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxsX2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZnJlZV9sbF9lbnRyeSk7CisKK3ZvaWQgcG54NDAwOF9mcmVlX2xsKHUzMiBsbF9kbWEsIHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqIGxsKQoreworCXN0cnVjdCBwbng0MDA4X2RtYV9sbCAqcHRyOworCXUzMiBkbWE7CisKKwl3aGlsZSAobGwpIHsKKwkJZG1hID0gbGwtPm5leHRfZG1hOworCQlwdHIgPSBsbC0+bmV4dDsKKwkJcG54NDAwOF9mcmVlX2xsX2VudHJ5KGxsLCBsbF9kbWEpOworCisJCWxsX2RtYSA9IGRtYTsKKwkJbGwgPSBwdHI7CisJfQorfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2ZyZWVfbGwpOworCitzdGF0aWMgaW50IGRtYV9jaGFubmVsc19yZXF1ZXN0ZWQgPSAwOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2luY3JlbWVudF91c2FnZSh2b2lkKQoreworCWlmICghZG1hX2NoYW5uZWxzX3JlcXVlc3RlZCsrKSB7CisJCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoMCwgImRtYV9jayIpOworCQlpZiAoIUlTX0VSUihjbGspKSB7CisJCQljbGtfc2V0X3JhdGUoY2xrLCAxKTsKKwkJCWNsa19wdXQoY2xrKTsKKwkJfQorCQlwbng0MDA4X2NvbmZpZ19kbWEoLTEsIC0xLCAxKTsKKwl9Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RlY3JlbWVudF91c2FnZSh2b2lkKQoreworCWlmICghLS1kbWFfY2hhbm5lbHNfcmVxdWVzdGVkKSB7CisJCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoMCwgImRtYV9jayIpOworCQlpZiAoIUlTX0VSUihjbGspKSB7CisJCQljbGtfc2V0X3JhdGUoY2xrLCAwKTsKKwkJCWNsa19wdXQoY2xrKTsKKwkJfQorCQlwbng0MDA4X2NvbmZpZ19kbWEoLTEsIC0xLCAwKTsKKworCX0KK30KKworc3RhdGljIHNwaW5sb2NrX3QgZG1hX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbng0MDA4X2RtYV9sb2NrKHZvaWQpCit7CisJc3Bpbl9sb2NrX2lycSgmZG1hX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG54NDAwOF9kbWFfdW5sb2NrKHZvaWQpCit7CisJc3Bpbl91bmxvY2tfaXJxKCZkbWFfbG9jayk7Cit9CisKKyNkZWZpbmUgVkFMSURfQ0hBTk5FTChjKQkoKChjKSA+PSAwKSAmJiAoKGMpIDwgTUFYX0RNQV9DSEFOTkVMUykpCisKK2ludCBwbng0MDA4X3JlcXVlc3RfY2hhbm5lbChjaGFyICpuYW1lLCBpbnQgY2gsCisJCQkgICAgdm9pZCAoKmlycV9oYW5kbGVyKSAoaW50LCBpbnQsIHZvaWQgKiwKKwkJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqKSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgZm91bmQgPSAwOworCisJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyAqLworCWlmICghbmFtZSB8fCAoY2ggIT0gLTEgJiYgIVZBTElEX0NIQU5ORUwoY2gpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisKKwkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KKwlmb3IgKGkgPSBNQVhfRE1BX0NIQU5ORUxTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKCFkbWFfY2hhbm5lbHNbaV0ubmFtZSAmJiAoY2ggPT0gLTEgfHwgY2ggPT0gaSkpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZvdW5kKSB7CisJCWRtYV9pbmNyZW1lbnRfdXNhZ2UoKTsKKwkJZG1hX2NoYW5uZWxzW2ldLm5hbWUgPSBuYW1lOworCQlkbWFfY2hhbm5lbHNbaV0uaXJxX2hhbmRsZXIgPSBpcnFfaGFuZGxlcjsKKwkJZG1hX2NoYW5uZWxzW2ldLmRhdGEgPSBkYXRhOworCQlkbWFfY2hhbm5lbHNbaV0ubGwgPSBOVUxMOworCQlkbWFfY2hhbm5lbHNbaV0ubGxfZG1hID0gMDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBtb3JlIGF2YWlsYWJsZSBETUEgY2hhbm5lbHMgZm9yICVzXG4iLAorCQkgICAgICAgbmFtZSk7CisJCWkgPSAtRU5PREVWOworCX0KKworCXBueDQwMDhfZG1hX3VubG9jaygpOworCXJldHVybiBpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X3JlcXVlc3RfY2hhbm5lbCk7CisKK3ZvaWQgcG54NDAwOF9mcmVlX2NoYW5uZWwoaW50IGNoKQoreworCWlmICghZG1hX2NoYW5uZWxzW2NoXS5uYW1lKSB7CisJCXByaW50ayhLRVJOX0NSSVQKKwkJICAgICAgICIlczogdHJ5aW5nIHRvIGZyZWUgY2hhbm5lbCAlZCB3aGljaCBpcyBhbHJlYWR5IGZyZWVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBjaCk7CisJCXJldHVybjsKKwl9CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisJcG54NDAwOF9mcmVlX2xsKGRtYV9jaGFubmVsc1tjaF0ubGxfZG1hLCBkbWFfY2hhbm5lbHNbY2hdLmxsKTsKKwlkbWFfY2hhbm5lbHNbY2hdLmxsID0gTlVMTDsKKwlkbWFfZGVjcmVtZW50X3VzYWdlKCk7CisKKwlkbWFfY2hhbm5lbHNbY2hdLm5hbWUgPSBOVUxMOworCXBueDQwMDhfZG1hX3VubG9jaygpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2ZyZWVfY2hhbm5lbCk7CisKK2ludCBwbng0MDA4X2NvbmZpZ19kbWEoaW50IGFoYl9tMV9iZSwgaW50IGFoYl9tMl9iZSwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRtYV9jZmcgPSBfX3Jhd19yZWFkbChETUFDX0NPTkZJRyk7CisKKwlzd2l0Y2ggKGFoYl9tMV9iZSkgeworCWNhc2UgMDoKKwkJZG1hX2NmZyAmPSB+KDEgPDwgMSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZG1hX2NmZyB8PSAoMSA8PCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChhaGJfbTJfYmUpIHsKKwljYXNlIDA6CisJCWRtYV9jZmcgJj0gfigxIDw8IDIpOworCQlicmVhazsKKwljYXNlIDE6CisJCWRtYV9jZmcgfD0gKDEgPDwgMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZW5hYmxlKSB7CisJY2FzZSAwOgorCQlkbWFfY2ZnICY9IH4oMSA8PCAwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkbWFfY2ZnIHw9ICgxIDw8IDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisJX19yYXdfd3JpdGVsKGRtYV9jZmcsIERNQUNfQ09ORklHKTsKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2NvbmZpZ19kbWEpOworCitpbnQgcG54NDAwOF9kbWFfcGFja19jb250cm9sKGNvbnN0IHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICogY2hfY3RybCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqY3RybCkKK3sKKwlpbnQgaSA9IDAsIGRic2l6ZSwgc2JzaXplLCBlcnIgPSAwOworCisJaWYgKCFjdHJsIHx8ICFjaF9jdHJsKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCSpjdHJsID0gMDsKKworCXN3aXRjaCAoY2hfY3RybC0+dGNfbWFzaykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAzMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChjaF9jdHJsLT5jYWNoZWFibGUpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMzApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPmJ1ZmZlcmFibGUpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMjkpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPnByaXZfbW9kZSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAyOCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+ZGkpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMjcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPnNpKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDI2KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5kZXN0X2FoYjEpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMjUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPnNyY19haGIxKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDI0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5kd2lkdGgpIHsKKwljYXNlIFdJRFRIX0JZVEU6CisJCSpjdHJsICY9IH4oNyA8PCAyMSk7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfSFdPUkQ6CisJCSpjdHJsICY9IH4oNyA8PCAyMSk7CisJCSpjdHJsIHw9ICgxIDw8IDIxKTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9XT1JEOgorCQkqY3RybCAmPSB+KDcgPDwgMjEpOworCQkqY3RybCB8PSAoMiA8PCAyMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+c3dpZHRoKSB7CisJY2FzZSBXSURUSF9CWVRFOgorCQkqY3RybCAmPSB+KDcgPDwgMTgpOworCQlicmVhazsKKwljYXNlIFdJRFRIX0hXT1JEOgorCQkqY3RybCAmPSB+KDcgPDwgMTgpOworCQkqY3RybCB8PSAoMSA8PCAxOCk7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfV09SRDoKKwkJKmN0cmwgJj0gfig3IDw8IDE4KTsKKwkJKmN0cmwgfD0gKDIgPDwgMTgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlkYnNpemUgPSBjaF9jdHJsLT5kYnNpemU7CisJd2hpbGUgKCEoZGJzaXplICYgMSkpIHsKKwkJaSsrOworCQlkYnNpemUgPj49IDE7CisJfQorCWlmIChjaF9jdHJsLT5kYnNpemUgIT0gMSB8fCBpID4gOCB8fCBpID09IDEpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChpID4gMSkKKwkJaS0tOworCSpjdHJsICY9IH4oNyA8PCAxNSk7CisJKmN0cmwgfD0gKGkgPDwgMTUpOworCisJc2JzaXplID0gY2hfY3RybC0+c2JzaXplOworCXdoaWxlICghKHNic2l6ZSAmIDEpKSB7CisJCWkrKzsKKwkJc2JzaXplID4+PSAxOworCX0KKwlpZiAoY2hfY3RybC0+c2JzaXplICE9IDEgfHwgaSA+IDggfHwgaSA9PSAxKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoaSA+IDEpCisJCWktLTsKKwkqY3RybCAmPSB+KDcgPDwgMTIpOworCSpjdHJsIHw9IChpIDw8IDEyKTsKKworCWlmIChjaF9jdHJsLT50cl9zaXplID4gMHg3ZmYpIHsKKwkJZXJyID0gLUUyQklHOworCQlnb3RvIG91dDsKKwl9CisJKmN0cmwgJj0gfjB4N2ZmOworCSpjdHJsIHw9IGNoX2N0cmwtPnRyX3NpemUgJiAweDdmZjsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX3BhY2tfY29udHJvbCk7CisKK2ludCBwbng0MDA4X2RtYV9wYXJzZV9jb250cm9sKHVuc2lnbmVkIGxvbmcgY3RybCwKKwkJCSAgICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICogY2hfY3RybCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghY2hfY3RybCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwljaF9jdHJsLT50cl9zaXplID0gY3RybCAmIDB4N2ZmOworCWN0cmwgPj49IDEyOworCisJY2hfY3RybC0+c2JzaXplID0gMSA8PCAoY3RybCAmIDcpOworCWlmIChjaF9jdHJsLT5zYnNpemUgPiAxKQorCQljaF9jdHJsLT5zYnNpemUgPDw9IDE7CisJY3RybCA+Pj0gMzsKKworCWNoX2N0cmwtPmRic2l6ZSA9IDEgPDwgKGN0cmwgJiA3KTsKKwlpZiAoY2hfY3RybC0+ZGJzaXplID4gMSkKKwkJY2hfY3RybC0+ZGJzaXplIDw8PSAxOworCWN0cmwgPj49IDM7CisKKwlzd2l0Y2ggKGN0cmwgJiA3KSB7CisJY2FzZSAwOgorCQljaF9jdHJsLT5zd2lkdGggPSBXSURUSF9CWVRFOworCQlicmVhazsKKwljYXNlIDE6CisJCWNoX2N0cmwtPnN3aWR0aCA9IFdJRFRIX0hXT1JEOworCQlicmVhazsKKwljYXNlIDI6CisJCWNoX2N0cmwtPnN3aWR0aCA9IFdJRFRIX1dPUkQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwljdHJsID4+PSAzOworCisJc3dpdGNoIChjdHJsICYgNykgeworCWNhc2UgMDoKKwkJY2hfY3RybC0+ZHdpZHRoID0gV0lEVEhfQllURTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljaF9jdHJsLT5kd2lkdGggPSBXSURUSF9IV09SRDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljaF9jdHJsLT5kd2lkdGggPSBXSURUSF9XT1JEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3RybCA+Pj0gMzsKKworCWNoX2N0cmwtPnNyY19haGIxID0gY3RybCAmIDE7CisJY3RybCA+Pj0gMTsKKworCWNoX2N0cmwtPmRlc3RfYWhiMSA9IGN0cmwgJiAxOworCWN0cmwgPj49IDE7CisKKwljaF9jdHJsLT5zaSA9IGN0cmwgJiAxOworCWN0cmwgPj49IDE7CisKKwljaF9jdHJsLT5kaSA9IGN0cmwgJiAxOworCWN0cmwgPj49IDE7CisKKwljaF9jdHJsLT5wcml2X21vZGUgPSBjdHJsICYgMTsKKwljdHJsID4+PSAxOworCisJY2hfY3RybC0+YnVmZmVyYWJsZSA9IGN0cmwgJiAxOworCWN0cmwgPj49IDE7CisKKwljaF9jdHJsLT5jYWNoZWFibGUgPSBjdHJsICYgMTsKKwljdHJsID4+PSAxOworCisJY2hfY3RybC0+dGNfbWFzayA9IGN0cmwgJiAxOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfcGFyc2VfY29udHJvbCk7CisKK2ludCBwbng0MDA4X2RtYV9wYWNrX2NvbmZpZyhjb25zdCBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY29uZmlnICogY2hfY2ZnLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmNmZykKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghY2ZnIHx8ICFjaF9jZmcpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJKmNmZyA9IDA7CisKKwlzd2l0Y2ggKGNoX2NmZy0+aGFsdCkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY2ZnIHw9ICgxIDw8IDE4KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jZmctPmFjdGl2ZSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY2ZnIHw9ICgxIDw8IDE3KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jZmctPmxvY2spIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmNmZyB8PSAoMSA8PCAxNik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY2ZnLT5pdGMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmNmZyB8PSAoMSA8PCAxNSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY2ZnLT5pZSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY2ZnIHw9ICgxIDw8IDE0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jZmctPmZsb3dfY250cmwpIHsKKwljYXNlIEZDX01FTTJNRU1fRE1BOgorCQkqY2ZnICY9IH4oNyA8PCAxMSk7CisJCWJyZWFrOworCWNhc2UgRkNfTUVNMlBFUl9ETUE6CisJCSpjZmcgJj0gfig3IDw8IDExKTsKKwkJKmNmZyB8PSAoMSA8PCAxMSk7CisJCWJyZWFrOworCWNhc2UgRkNfUEVSMk1FTV9ETUE6CisJCSpjZmcgJj0gfig3IDw8IDExKTsKKwkJKmNmZyB8PSAoMiA8PCAxMSk7CisJCWJyZWFrOworCWNhc2UgRkNfUEVSMlBFUl9ETUE6CisJCSpjZmcgJj0gfig3IDw8IDExKTsKKwkJKmNmZyB8PSAoMyA8PCAxMSk7CisJCWJyZWFrOworCWNhc2UgRkNfUEVSMlBFUl9EUEVSOgorCQkqY2ZnICY9IH4oNyA8PCAxMSk7CisJCSpjZmcgfD0gKDQgPDwgMTEpOworCQlicmVhazsKKwljYXNlIEZDX01FTTJQRVJfUEVSOgorCQkqY2ZnICY9IH4oNyA8PCAxMSk7CisJCSpjZmcgfD0gKDUgPDwgMTEpOworCQlicmVhazsKKwljYXNlIEZDX1BFUjJNRU1fUEVSOgorCQkqY2ZnICY9IH4oNyA8PCAxMSk7CisJCSpjZmcgfD0gKDYgPDwgMTEpOworCQlicmVhazsKKwljYXNlIEZDX1BFUjJQRVJfU1BFUjoKKwkJKmNmZyB8PSAoNyA8PCAxMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCSpjZmcgJj0gfigweDFmIDw8IDYpOworCSpjZmcgfD0gKChjaF9jZmctPmRlc3RfcGVyICYgMHgxZikgPDwgNik7CisKKwkqY2ZnICY9IH4oMHgxZiA8PCAxKTsKKwkqY2ZnIHw9ICgoY2hfY2ZnLT5zcmNfcGVyICYgMHgxZikgPDwgMSk7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9wYWNrX2NvbmZpZyk7CisKK2ludCBwbng0MDA4X2RtYV9wYXJzZV9jb25maWcodW5zaWduZWQgbG9uZyBjZmcsCisJCQkgICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jb25maWcgKiBjaF9jZmcpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWNoX2NmZykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcgPj49IDE7CisKKwljaF9jZmctPnNyY19wZXIgPSBjZmcgJiAweDFmOworCWNmZyA+Pj0gNTsKKworCWNoX2NmZy0+ZGVzdF9wZXIgPSBjZmcgJiAweDFmOworCWNmZyA+Pj0gNTsKKworCXN3aXRjaCAoY2ZnICYgNykgeworCWNhc2UgMDoKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfTUVNMk1FTV9ETUE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfTUVNMlBFUl9ETUE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfUEVSMk1FTV9ETUE7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfUEVSMlBFUl9ETUE7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfUEVSMlBFUl9EUEVSOworCQlicmVhazsKKwljYXNlIDU6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX01FTTJQRVJfUEVSOworCQlicmVhazsKKwljYXNlIDY6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX1BFUjJNRU1fUEVSOworCQlicmVhazsKKwljYXNlIDc6CisJCWNoX2NmZy0+Zmxvd19jbnRybCA9IEZDX1BFUjJQRVJfU1BFUjsKKwl9CisJY2ZnID4+PSAzOworCisJY2hfY2ZnLT5pZSA9IGNmZyAmIDE7CisJY2ZnID4+PSAxOworCisJY2hfY2ZnLT5pdGMgPSBjZmcgJiAxOworCWNmZyA+Pj0gMTsKKworCWNoX2NmZy0+bG9jayA9IGNmZyAmIDE7CisJY2ZnID4+PSAxOworCisJY2hfY2ZnLT5hY3RpdmUgPSBjZmcgJiAxOworCWNmZyA+Pj0gMTsKKworCWNoX2NmZy0+aGFsdCA9IGNmZyAmIDE7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9wYXJzZV9jb25maWcpOworCit2b2lkIHBueDQwMDhfZG1hX3NwbGl0X2hlYWRfZW50cnkoc3RydWN0IHBueDQwMDhfZG1hX2NvbmZpZyAqIGNvbmZpZywKKwkJCQkgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICogY3RybCkKK3sKKwlpbnQgbmV3X2xlbiA9IGN0cmwtPnRyX3NpemUsIG51bV9lbnRyaWVzID0gMDsKKwlpbnQgb2xkX2xlbiA9IG5ld19sZW47CisJaW50IHNyY193aWR0aCwgZGVzdF93aWR0aCwgY291bnQgPSAxOworCisJc3dpdGNoIChjdHJsLT5zd2lkdGgpIHsKKwljYXNlIFdJRFRIX0JZVEU6CisJCXNyY193aWR0aCA9IDE7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfSFdPUkQ6CisJCXNyY193aWR0aCA9IDI7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfV09SRDoKKwkJc3JjX3dpZHRoID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoY3RybC0+ZHdpZHRoKSB7CisJY2FzZSBXSURUSF9CWVRFOgorCQlkZXN0X3dpZHRoID0gMTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9IV09SRDoKKwkJZGVzdF93aWR0aCA9IDI7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfV09SRDoKKwkJZGVzdF93aWR0aCA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAobmV3X2xlbiA+IDB4N0ZGKSB7CisJCW51bV9lbnRyaWVzKys7CisJCW5ld19sZW4gPSAoY3RybC0+dHJfc2l6ZSArIG51bV9lbnRyaWVzKSAvIChudW1fZW50cmllcyArIDEpOworCX0KKwlpZiAobnVtX2VudHJpZXMgIT0gMCkgeworCQlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKmxsID0gTlVMTDsKKwkJY29uZmlnLT5jaF9jdHJsICY9IH4weDdmZjsKKwkJY29uZmlnLT5jaF9jdHJsIHw9IG5ld19sZW47CisJCWlmICghY29uZmlnLT5pc19sbCkgeworCQkJY29uZmlnLT5pc19sbCA9IDE7CisJCQl3aGlsZSAobnVtX2VudHJpZXMpIHsKKwkJCQlpZiAoIWxsKSB7CisJCQkJCWNvbmZpZy0+bGwgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmY29uZmlnLT4KKwkJCQkJCQkJICAgbGxfZG1hKTsKKwkJCQkJbGwgPSBjb25maWctPmxsOworCQkJCX0gZWxzZSB7CisJCQkJCWxsLT5uZXh0ID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmxsLT4KKwkJCQkJCQkJICAgbmV4dF9kbWEpOworCQkJCQlsbCA9IGxsLT5uZXh0OworCQkJCX0KKworCQkJCWlmIChjdHJsLT5zaSkKKwkJCQkJbGwtPnNyY19hZGRyID0KKwkJCQkJICAgIGNvbmZpZy0+c3JjX2FkZHIgKworCQkJCQkgICAgc3JjX3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPnNyY19hZGRyID0gY29uZmlnLT5zcmNfYWRkcjsKKwkJCQlpZiAoY3RybC0+ZGkpCisJCQkJCWxsLT5kZXN0X2FkZHIgPQorCQkJCQkgICAgY29uZmlnLT5kZXN0X2FkZHIgKworCQkJCQkgICAgZGVzdF93aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5kZXN0X2FkZHIgPSBjb25maWctPmRlc3RfYWRkcjsKKwkJCQlsbC0+Y2hfY3RybCA9IGNvbmZpZy0+Y2hfY3RybCAmIDB4N2ZmZmZmZmY7CisJCQkJbGwtPm5leHRfZG1hID0gMDsKKwkJCQlsbC0+bmV4dCA9IE5VTEw7CisJCQkJbnVtX2VudHJpZXMtLTsKKwkJCQljb3VudCsrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbF9vbGQgPSBjb25maWctPmxsOworCQkJdW5zaWduZWQgbG9uZyBsbF9kbWFfb2xkID0gY29uZmlnLT5sbF9kbWE7CisJCQl3aGlsZSAobnVtX2VudHJpZXMpIHsKKwkJCQlpZiAoIWxsKSB7CisJCQkJCWNvbmZpZy0+bGwgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmY29uZmlnLT4KKwkJCQkJCQkJICAgbGxfZG1hKTsKKwkJCQkJbGwgPSBjb25maWctPmxsOworCQkJCX0gZWxzZSB7CisJCQkJCWxsLT5uZXh0ID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmxsLT4KKwkJCQkJCQkJICAgbmV4dF9kbWEpOworCQkJCQlsbCA9IGxsLT5uZXh0OworCQkJCX0KKworCQkJCWlmIChjdHJsLT5zaSkKKwkJCQkJbGwtPnNyY19hZGRyID0KKwkJCQkJICAgIGNvbmZpZy0+c3JjX2FkZHIgKworCQkJCQkgICAgc3JjX3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPnNyY19hZGRyID0gY29uZmlnLT5zcmNfYWRkcjsKKwkJCQlpZiAoY3RybC0+ZGkpCisJCQkJCWxsLT5kZXN0X2FkZHIgPQorCQkJCQkgICAgY29uZmlnLT5kZXN0X2FkZHIgKworCQkJCQkgICAgZGVzdF93aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5kZXN0X2FkZHIgPSBjb25maWctPmRlc3RfYWRkcjsKKwkJCQlsbC0+Y2hfY3RybCA9IGNvbmZpZy0+Y2hfY3RybCAmIDB4N2ZmZmZmZmY7CisJCQkJbGwtPm5leHRfZG1hID0gMDsKKwkJCQlsbC0+bmV4dCA9IE5VTEw7CisJCQkJbnVtX2VudHJpZXMtLTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJbGwtPm5leHRfZG1hID0gbGxfZG1hX29sZDsKKwkJCWxsLT5uZXh0ID0gbGxfb2xkOworCQl9CisJCS8qIGFkanVzdCBsYXN0IGxlbmd0aC90YyAqLworCQlsbC0+Y2hfY3RybCA9IGNvbmZpZy0+Y2hfY3RybCAmICh+MHg3ZmYpOworCQlsbC0+Y2hfY3RybCB8PSBvbGRfbGVuIC0gbmV3X2xlbiAqIChjb3VudCAtIDEpOworCQljb25maWctPmNoX2N0cmwgJj0gMHg3ZmZmZmZmZjsKKwl9Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX3NwbGl0X2hlYWRfZW50cnkpOworCit2b2lkIHBueDQwMDhfZG1hX3NwbGl0X2xsX2VudHJ5KHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqIGN1cl9sbCwKKwkJCQlzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY3RybCAqIGN0cmwpCit7CisJaW50IG5ld19sZW4gPSBjdHJsLT50cl9zaXplLCBudW1fZW50cmllcyA9IDA7CisJaW50IG9sZF9sZW4gPSBuZXdfbGVuOworCWludCBzcmNfd2lkdGgsIGRlc3Rfd2lkdGgsIGNvdW50ID0gMTsKKworCXN3aXRjaCAoY3RybC0+c3dpZHRoKSB7CisJY2FzZSBXSURUSF9CWVRFOgorCQlzcmNfd2lkdGggPSAxOworCQlicmVhazsKKwljYXNlIFdJRFRIX0hXT1JEOgorCQlzcmNfd2lkdGggPSAyOworCQlicmVhazsKKwljYXNlIFdJRFRIX1dPUkQ6CisJCXNyY193aWR0aCA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGN0cmwtPmR3aWR0aCkgeworCWNhc2UgV0lEVEhfQllURToKKwkJZGVzdF93aWR0aCA9IDE7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfSFdPUkQ6CisJCWRlc3Rfd2lkdGggPSAyOworCQlicmVhazsKKwljYXNlIFdJRFRIX1dPUkQ6CisJCWRlc3Rfd2lkdGggPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJd2hpbGUgKG5ld19sZW4gPiAweDdGRikgeworCQludW1fZW50cmllcysrOworCQluZXdfbGVuID0gKGN0cmwtPnRyX3NpemUgKyBudW1fZW50cmllcykgLyAobnVtX2VudHJpZXMgKyAxKTsKKwl9CisJaWYgKG51bV9lbnRyaWVzICE9IDApIHsKKwkJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbCA9IE5VTEw7CisJCWN1cl9sbC0+Y2hfY3RybCAmPSB+MHg3ZmY7CisJCWN1cl9sbC0+Y2hfY3RybCB8PSBuZXdfbGVuOworCQlpZiAoIWN1cl9sbC0+bmV4dCkgeworCQkJd2hpbGUgKG51bV9lbnRyaWVzKSB7CisJCQkJaWYgKCFsbCkgeworCQkJCQljdXJfbGwtPm5leHQgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmY3VyX2xsLT4KKwkJCQkJCQkJICAgbmV4dF9kbWEpOworCQkJCQlsbCA9IGN1cl9sbC0+bmV4dDsKKwkJCQl9IGVsc2UgeworCQkJCQlsbC0+bmV4dCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZsbC0+CisJCQkJCQkJCSAgIG5leHRfZG1hKTsKKwkJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCQl9CisKKwkJCQlpZiAoY3RybC0+c2kpCisJCQkJCWxsLT5zcmNfYWRkciA9CisJCQkJCSAgICBjdXJfbGwtPnNyY19hZGRyICsKKwkJCQkJICAgIHNyY193aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5zcmNfYWRkciA9IGN1cl9sbC0+c3JjX2FkZHI7CisJCQkJaWYgKGN0cmwtPmRpKQorCQkJCQlsbC0+ZGVzdF9hZGRyID0KKwkJCQkJICAgIGN1cl9sbC0+ZGVzdF9hZGRyICsKKwkJCQkJICAgIGRlc3Rfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+ZGVzdF9hZGRyID0gY3VyX2xsLT5kZXN0X2FkZHI7CisJCQkJbGwtPmNoX2N0cmwgPSBjdXJfbGwtPmNoX2N0cmwgJiAweDdmZmZmZmZmOworCQkJCWxsLT5uZXh0X2RtYSA9IDA7CisJCQkJbGwtPm5leHQgPSBOVUxMOworCQkJCW51bV9lbnRyaWVzLS07CisJCQkJY291bnQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwbng0MDA4X2RtYV9sbCAqbGxfb2xkID0gY3VyX2xsLT5uZXh0OworCQkJdW5zaWduZWQgbG9uZyBsbF9kbWFfb2xkID0gY3VyX2xsLT5uZXh0X2RtYTsKKwkJCXdoaWxlIChudW1fZW50cmllcykgeworCQkJCWlmICghbGwpIHsKKwkJCQkJY3VyX2xsLT5uZXh0ID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmN1cl9sbC0+CisJCQkJCQkJCSAgIG5leHRfZG1hKTsKKwkJCQkJbGwgPSBjdXJfbGwtPm5leHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGwtPm5leHQgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmbGwtPgorCQkJCQkJCQkgICBuZXh0X2RtYSk7CisJCQkJCWxsID0gbGwtPm5leHQ7CisJCQkJfQorCisJCQkJaWYgKGN0cmwtPnNpKQorCQkJCQlsbC0+c3JjX2FkZHIgPQorCQkJCQkgICAgY3VyX2xsLT5zcmNfYWRkciArCisJCQkJCSAgICBzcmNfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+c3JjX2FkZHIgPSBjdXJfbGwtPnNyY19hZGRyOworCQkJCWlmIChjdHJsLT5kaSkKKwkJCQkJbGwtPmRlc3RfYWRkciA9CisJCQkJCSAgICBjdXJfbGwtPmRlc3RfYWRkciArCisJCQkJCSAgICBkZXN0X3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPmRlc3RfYWRkciA9IGN1cl9sbC0+ZGVzdF9hZGRyOworCQkJCWxsLT5jaF9jdHJsID0gY3VyX2xsLT5jaF9jdHJsICYgMHg3ZmZmZmZmZjsKKwkJCQlsbC0+bmV4dF9kbWEgPSAwOworCQkJCWxsLT5uZXh0ID0gTlVMTDsKKwkJCQludW1fZW50cmllcy0tOworCQkJCWNvdW50Kys7CisJCQl9CisKKwkJCWxsLT5uZXh0X2RtYSA9IGxsX2RtYV9vbGQ7CisJCQlsbC0+bmV4dCA9IGxsX29sZDsKKwkJfQorCQkvKiBhZGp1c3QgbGFzdCBsZW5ndGgvdGMgKi8KKwkJbGwtPmNoX2N0cmwgPSBjdXJfbGwtPmNoX2N0cmwgJiAofjB4N2ZmKTsKKwkJbGwtPmNoX2N0cmwgfD0gb2xkX2xlbiAtIG5ld19sZW4gKiAoY291bnQgLSAxKTsKKwkJY3VyX2xsLT5jaF9jdHJsICY9IDB4N2ZmZmZmZmY7CisJfQorfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9zcGxpdF9sbF9lbnRyeSk7CisKK2ludCBwbng0MDA4X2NvbmZpZ19jaGFubmVsKGludCBjaCwgc3RydWN0IHBueDQwMDhfZG1hX2NvbmZpZyAqIGNvbmZpZykKK3sKKwlpZiAoIVZBTElEX0NIQU5ORUwoY2gpIHx8ICFkbWFfY2hhbm5lbHNbY2hdLm5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJcG54NDAwOF9kbWFfbG9jaygpOworCV9fcmF3X3dyaXRlbChjb25maWctPnNyY19hZGRyLCBETUFDX0N4X1NSQ19BRERSKGNoKSk7CisJX19yYXdfd3JpdGVsKGNvbmZpZy0+ZGVzdF9hZGRyLCBETUFDX0N4X0RFU1RfQUREUihjaCkpOworCisJaWYgKGNvbmZpZy0+aXNfbGwpCisJCV9fcmF3X3dyaXRlbChjb25maWctPmxsX2RtYSwgRE1BQ19DeF9MTEkoY2gpKTsKKwllbHNlCisJCV9fcmF3X3dyaXRlbCgwLCBETUFDX0N4X0xMSShjaCkpOworCisJX19yYXdfd3JpdGVsKGNvbmZpZy0+Y2hfY3RybCwgRE1BQ19DeF9DT05UUk9MKGNoKSk7CisJX19yYXdfd3JpdGVsKGNvbmZpZy0+Y2hfY2ZnLCBETUFDX0N4X0NPTkZJRyhjaCkpOworCXBueDQwMDhfZG1hX3VubG9jaygpOworCisJcmV0dXJuIDA7CisKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9jb25maWdfY2hhbm5lbCk7CisKK2ludCBwbng0MDA4X2NoYW5uZWxfZ2V0X2NvbmZpZyhpbnQgY2gsIHN0cnVjdCBwbng0MDA4X2RtYV9jb25maWcgKiBjb25maWcpCit7CisJaWYgKCFWQUxJRF9DSEFOTkVMKGNoKSB8fCAhZG1hX2NoYW5uZWxzW2NoXS5uYW1lIHx8ICFjb25maWcpCisJCXJldHVybiAtRUlOVkFMOworCisJcG54NDAwOF9kbWFfbG9jaygpOworCWNvbmZpZy0+Y2hfY2ZnID0gX19yYXdfcmVhZGwoRE1BQ19DeF9DT05GSUcoY2gpKTsKKwljb25maWctPmNoX2N0cmwgPSBfX3Jhd19yZWFkbChETUFDX0N4X0NPTlRST0woY2gpKTsKKworCWNvbmZpZy0+bGxfZG1hID0gX19yYXdfcmVhZGwoRE1BQ19DeF9MTEkoY2gpKTsKKwljb25maWctPmlzX2xsID0gY29uZmlnLT5sbF9kbWEgPyAxIDogMDsKKworCWNvbmZpZy0+c3JjX2FkZHIgPSBfX3Jhd19yZWFkbChETUFDX0N4X1NSQ19BRERSKGNoKSk7CisJY29uZmlnLT5kZXN0X2FkZHIgPSBfX3Jhd19yZWFkbChETUFDX0N4X0RFU1RfQUREUihjaCkpOworCXBueDQwMDhfZG1hX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfY2hhbm5lbF9nZXRfY29uZmlnKTsKKworaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZShpbnQgY2gpCit7CisJdW5zaWduZWQgbG9uZyBjaF9jZmc7CisKKwlpZiAoIVZBTElEX0NIQU5ORUwoY2gpIHx8ICFkbWFfY2hhbm5lbHNbY2hdLm5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJcG54NDAwOF9kbWFfbG9jaygpOworCWNoX2NmZyA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfQ09ORklHKGNoKSk7CisJY2hfY2ZnIHw9IDE7CisJX19yYXdfd3JpdGVsKGNoX2NmZywgRE1BQ19DeF9DT05GSUcoY2gpKTsKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9jaF9lbmFibGUpOworCitpbnQgcG54NDAwOF9kbWFfY2hfZGlzYWJsZShpbnQgY2gpCit7CisJdW5zaWduZWQgbG9uZyBjaF9jZmc7CisKKwlpZiAoIVZBTElEX0NIQU5ORUwoY2gpIHx8ICFkbWFfY2hhbm5lbHNbY2hdLm5hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJcG54NDAwOF9kbWFfbG9jaygpOworCWNoX2NmZyA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfQ09ORklHKGNoKSk7CisJY2hfY2ZnICY9IH4xOworCV9fcmF3X3dyaXRlbChjaF9jZmcsIERNQUNfQ3hfQ09ORklHKGNoKSk7CisJcG54NDAwOF9kbWFfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfY2hfZGlzYWJsZSk7CisKK2ludCBwbng0MDA4X2RtYV9jaF9lbmFibGVkKGludCBjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGNoX2NmZzsKKworCWlmICghVkFMSURfQ0hBTk5FTChjaCkgfHwgIWRtYV9jaGFubmVsc1tjaF0ubmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisJY2hfY2ZnID0gX19yYXdfcmVhZGwoRE1BQ19DeF9DT05GSUcoY2gpKTsKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKKworCXJldHVybiBjaF9jZmcgJiAxOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9jaF9lbmFibGVkKTsKKworc3RhdGljIGlycXJldHVybl90IGRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZGludCA9IF9fcmF3X3JlYWRsKERNQUNfSU5UX1NUQVQpOworCXVuc2lnbmVkIGxvbmcgdGNpbnQgPSBfX3Jhd19yZWFkbChETUFDX0lOVF9UQ19TVEFUKTsKKwl1bnNpZ25lZCBsb25nIGVpbnQgPSBfX3Jhd19yZWFkbChETUFDX0lOVF9FUlJfU1RBVCk7CisJdW5zaWduZWQgbG9uZyBpX2JpdDsKKworCWZvciAoaSA9IE1BWF9ETUFfQ0hBTk5FTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpX2JpdCA9IDEgPDwgaTsKKwkJaWYgKGRpbnQgJiBpX2JpdCkgeworCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKworCQkJaWYgKGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+aXJxX2hhbmRsZXIpIHsKKwkJCQlpbnQgY2F1c2UgPSAwOworCisJCQkJaWYgKGVpbnQgJiBpX2JpdCkKKwkJCQkJY2F1c2UgfD0gRE1BX0VSUl9JTlQ7CisJCQkJaWYgKHRjaW50ICYgaV9iaXQpCisJCQkJCWNhdXNlIHw9IERNQV9UQ19JTlQ7CisJCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2F1c2UsIGNoYW5uZWwtPmRhdGEsCisJCQkJCQkgICAgIHJlZ3MpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsCisJCQkJICovCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAic3B1cmlvdXMgSVJRIGZvciBETUEgY2hhbm5lbCAlZFxuIiwgaSk7CisJCQl9CisJCQlpZiAodGNpbnQgJiBpX2JpdCkKKwkJCQlfX3Jhd193cml0ZWwoaV9iaXQsIERNQUNfSU5UX1RDX0NMRUFSKTsKKwkJCWlmIChlaW50ICYgaV9iaXQpCisJCQkJX19yYXdfd3JpdGVsKGlfYml0LCBETUFDX0lOVF9FUlJfQ0xFQVIpOworCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2luaXQgcG54NDAwOF9kbWFfaW5pdCh2b2lkKQoreworCWludCByZXQsIGk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShETUFfSU5ULCBkbWFfaXJxX2hhbmRsZXIsIDAsICJETUEiLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0NSSVQgIldvdyEgIENhbid0IHJlZ2lzdGVyIElSUSBmb3IgRE1BXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGxfcG9vbC5jb3VudCA9IDB4NDAwMCAvIHNpemVvZihzdHJ1Y3QgcG54NDAwOF9kbWFfbGwpOworCWxsX3Bvb2wuY3VyID0gbGxfcG9vbC52YWRkciA9CisJICAgIGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBsbF9wb29sLmNvdW50ICogc2l6ZW9mKHN0cnVjdCBwbng0MDA4X2RtYV9sbCksCisJCQkgICAgICAgJmxsX3Bvb2wuZG1hX2FkZHIsIEdGUF9LRVJORUwpOworCisJaWYgKCFsbF9wb29sLnZhZGRyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWZyZWVfaXJxKERNQV9JTlQsIE5VTEwpOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGxfcG9vbC5jb3VudCAtIDE7IGkrKykgeworCQl2b2lkICoqYWRkciA9IGxsX3Bvb2wudmFkZHIgKyBpICogc2l6ZW9mKHN0cnVjdCBwbng0MDA4X2RtYV9sbCk7CisJCSphZGRyID0gKHZvaWQgKilhZGRyICsgc2l6ZW9mKHN0cnVjdCBwbng0MDA4X2RtYV9sbCk7CisJfQorCSoobG9uZyAqKShsbF9wb29sLnZhZGRyICsKKwkJICAobGxfcG9vbC5jb3VudCAtIDEpICogc2l6ZW9mKHN0cnVjdCBwbng0MDA4X2RtYV9sbCkpID0KKwkgICAgKGxvbmcpbGxfcG9vbC52YWRkcjsKKworCV9fcmF3X3dyaXRlbCgxLCBETUFDX0NPTkZJRyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorYXJjaF9pbml0Y2FsbChwbng0MDA4X2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxY2UwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvZ3Bpby5jCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L2dwaW8uYworICoKKyAqIFBOWDQwMDggR1BJTyBkcml2ZXIKKyAqCisgKiBBdXRob3I6IERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogQmFzZWQgb24gcmVmZXJlbmNlIGNvZGUgYnkgSXdvIE1lcmdsZXIgYW5kIFouVGFiYWFsb3V0ZSBmcm9tIFBoaWxpcHM6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgS29uaW5rbGlqa2UgUGhpbGlwcyBFbGVjdHJvbmljcyBOLlYuCisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKy8qIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFBJT19WQV9CQVNFCUlPX0FERFJFU1MoUE5YNDAwOF9QSU9fQkFTRSkKKworI2RlZmluZSBQSU9fSU5QX1NUQVRFCSgweDAwVSkKKyNkZWZpbmUgUElPX09VVFBfU0VUCSgweDA0VSkKKyNkZWZpbmUgUElPX09VVFBfQ0xSCSgweDA4VSkKKyNkZWZpbmUgUElPX09VVFBfU1RBVEUJKDB4MENVKQorI2RlZmluZSBQSU9fRFJWX1NFVAkoMHgxMFUpCisjZGVmaW5lIFBJT19EUlZfQ0xSCSgweDE0VSkKKyNkZWZpbmUgUElPX0RSVl9TVEFURQkoMHgxOFUpCisjZGVmaW5lIFBJT19TRElOUF9TVEFURQkoMHgxQ1UpCisjZGVmaW5lIFBJT19TRE9VVFBfU0VUCSgweDIwVSkKKyNkZWZpbmUgUElPX1NET1VUUF9DTFIJKDB4MjRVKQorI2RlZmluZSBQSU9fTVVYX1NFVAkoMHgyOFUpCisjZGVmaW5lIFBJT19NVVhfQ0xSCSgweDJDVSkKKyNkZWZpbmUgUElPX01VWF9TVEFURQkoMHgzMFUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2xvY2sodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb191bmxvY2sodm9pZCkKK3sKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKy8qIElubGluZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVhZF9iaXQodTMyIHJlZywgaW50IGdwaW8pCit7CisJdTMyIGJpdCwgdmFsOworCWludCByZXQgPSAtRUZBVUxUOworCisJaWYgKGdwaW8gPCAwKQorCQlnb3RvIG91dDsKKworCWJpdCA9IEdQSU9fQklUKGdwaW8pOworCWlmIChiaXQpIHsKKwkJdmFsID0gX19yYXdfcmVhZGwoUElPX1ZBX0JBU0UgKyByZWcpOworCQlyZXQgPSAodmFsICYgYml0KSA/IDEgOiAwOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3NldF9iaXQodTMyIHJlZywgaW50IGdwaW8pCit7CisJdTMyIGJpdCwgdmFsOworCWludCByZXQgPSAtRUZBVUxUOworCisJaWYgKGdwaW8gPCAwKQorCQlnb3RvIG91dDsKKworCWJpdCA9IEdQSU9fQklUKGdwaW8pOworCWlmIChiaXQpIHsKKwkJdmFsID0gX19yYXdfcmVhZGwoUElPX1ZBX0JBU0UgKyByZWcpOworCQl2YWwgfD0gYml0OworCQlfX3Jhd193cml0ZWwodmFsLCBQSU9fVkFfQkFTRSArIHJlZyk7CisJCXJldCA9IDA7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qIFZlcnkgc2ltcGxlIGFjY2VzcyBjb250cm9sLCBiaXRtYXAgZm9yIGFsbG9jYXRlZC9mcmVlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhY2Nlc3NfbWFwWzRdOworI2RlZmluZSBJTlBfSU5ERVgJMAorI2RlZmluZSBPVVRQX0lOREVYCTEKKyNkZWZpbmUgR1BJT19JTkRFWAkyCisjZGVmaW5lIE1VWF9JTkRFWAkzCisKKy8qR1BJTyB0byBJbnB1dCBNYXBwaW5nICovCitzdGF0aWMgc2hvcnQgZ3Bpb190b19pbnBfbWFwWzMyXSA9IHsKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAyNCwgLTEKK307CisKKy8qR1BJTyB0byBNdXggTWFwcGluZyAqLworc3RhdGljIHNob3J0IGdwaW9fdG9fbXV4X21hcFszMl0gPSB7CisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgMCwgMSwgNCwgNSwgLTEKK307CisKKy8qT3V0cHV0IHRvIE11eCBNYXBwaW5nICovCitzdGF0aWMgc2hvcnQgb3V0cF90b19tdXhfbWFwWzMyXSA9IHsKKwktMSwgLTEsIC0xLCA2LCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAyLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xCit9OworCitpbnQgcG54NDAwOF9ncGlvX3JlZ2lzdGVyX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pCit7CisJdW5zaWduZWQgbG9uZyBiaXQgPSBHUElPX0JJVChwaW4pOworCWludCByZXQgPSAtRUJVU1k7CS8qIEFscmVhZHkgaW4gdXNlICovCisKKwlncGlvX2xvY2soKTsKKworCWlmIChHUElPX0lTQklEKHBpbikpIHsKKwkJaWYgKGFjY2Vzc19tYXBbR1BJT19JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtHUElPX0lOREVYXSB8PSBiaXQ7CisKKwl9IGVsc2UgaWYgKEdQSU9fSVNSQU0ocGluKSkgeworCQlpZiAoYWNjZXNzX21hcFtHUElPX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW0dQSU9fSU5ERVhdIHw9IGJpdDsKKworCX0gZWxzZSBpZiAoR1BJT19JU01VWChwaW4pKSB7CisJCWlmIChhY2Nlc3NfbWFwW01VWF9JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtNVVhfSU5ERVhdIHw9IGJpdDsKKworCX0gZWxzZSBpZiAoR1BJT19JU09VVChwaW4pKSB7CisJCWlmIChhY2Nlc3NfbWFwW09VVFBfSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbT1VUUF9JTkRFWF0gfD0gYml0OworCisJfSBlbHNlIGlmIChHUElPX0lTSU4ocGluKSkgeworCQlpZiAoYWNjZXNzX21hcFtJTlBfSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbSU5QX0lOREVYXSB8PSBiaXQ7CisJfSBlbHNlCisJCWdvdG8gb3V0OworCXJldCA9IDA7CisKK291dDoKKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3JlZ2lzdGVyX3Bpbik7CisKK2ludCBwbng0MDA4X2dwaW9fdW5yZWdpc3Rlcl9waW4odW5zaWduZWQgc2hvcnQgcGluKQoreworCXVuc2lnbmVkIGxvbmcgYml0ID0gR1BJT19CSVQocGluKTsKKwlpbnQgcmV0ID0gLUVGQVVMVDsJLyogTm90IHJlZ2lzdGVyZWQgKi8KKworCWdwaW9fbG9jaygpOworCisJaWYgKEdQSU9fSVNCSUQocGluKSkgeworCQlpZiAofmFjY2Vzc19tYXBbR1BJT19JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtHUElPX0lOREVYXSAmPSB+Yml0OworCX0gZWxzZSBpZiAoR1BJT19JU1JBTShwaW4pKSB7CisJCWlmICh+YWNjZXNzX21hcFtHUElPX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW0dQSU9fSU5ERVhdICY9IH5iaXQ7CisJfSBlbHNlIGlmIChHUElPX0lTTVVYKHBpbikpIHsKKwkJaWYgKH5hY2Nlc3NfbWFwW01VWF9JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtNVVhfSU5ERVhdICY9IH5iaXQ7CisJfSBlbHNlIGlmIChHUElPX0lTT1VUKHBpbikpIHsKKwkJaWYgKH5hY2Nlc3NfbWFwW09VVFBfSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbT1VUUF9JTkRFWF0gJj0gfmJpdDsKKwl9IGVsc2UgaWYgKEdQSU9fSVNJTihwaW4pKSB7CisJCWlmICh+YWNjZXNzX21hcFtJTlBfSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbSU5QX0lOREVYXSAmPSB+Yml0OworCX0gZWxzZQorCQlnb3RvIG91dDsKKwlyZXQgPSAwOworCitvdXQ6CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb191bnJlZ2lzdGVyX3Bpbik7CisKK3Vuc2lnbmVkIGxvbmcgcG54NDAwOF9ncGlvX3JlYWRfcGluKHVuc2lnbmVkIHNob3J0IHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IC1FRkFVTFQ7CisJaW50IGdwaW8gPSBHUElPX0JJVF9NQVNLKHBpbik7CisJZ3Bpb19sb2NrKCk7CisJaWYgKEdQSU9fSVNPVVQocGluKSkgeworCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19PVVRQX1NUQVRFLCBncGlvKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNSQU0ocGluKSkgeworCQlpZiAoZ3Bpb19yZWFkX2JpdChQSU9fRFJWX1NUQVRFLCBncGlvKSA9PSAwKSB7CisJCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19TRElOUF9TVEFURSwgZ3Bpbyk7CisJCX0KKwl9IGVsc2UgaWYgKEdQSU9fSVNCSUQocGluKSkgeworCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19EUlZfU1RBVEUsIGdwaW8pOworCQlpZiAocmV0ID4gMCkKKwkJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX09VVFBfU1RBVEUsIGdwaW8pOworCQllbHNlIGlmIChyZXQgPT0gMCkKKwkJCXJldCA9CisJCQkgICAgZ3Bpb19yZWFkX2JpdChQSU9fSU5QX1NUQVRFLCBncGlvX3RvX2lucF9tYXBbZ3Bpb10pOworCX0gZWxzZSBpZiAoR1BJT19JU0lOKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fSU5QX1NUQVRFLCBncGlvKTsKKwl9CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb19yZWFkX3Bpbik7CisKKy8qIFdyaXRlIFZhbHVlIHRvIG91dHB1dCAqLworaW50IHBueDQwMDhfZ3Bpb193cml0ZV9waW4odW5zaWduZWQgc2hvcnQgcGluLCBpbnQgb3V0cHV0KQoreworCWludCBncGlvID0gR1BJT19CSVRfTUFTSyhwaW4pOworCWludCByZXQgPSAtRUZBVUxUOworCisJZ3Bpb19sb2NrKCk7CisJaWYgKEdQSU9fSVNPVVQocGluKSkgeworCQlwcmludGsoICJ3cml0aW5nICcleCcgdG8gJyV4J1xuIiwKKwkJCQlncGlvLCBvdXRwdXQgPyBQSU9fT1VUUF9TRVQgOiBQSU9fT1VUUF9DTFIgKTsKKwkJcmV0ID0gZ3Bpb19zZXRfYml0KG91dHB1dCA/IFBJT19PVVRQX1NFVCA6IFBJT19PVVRQX0NMUiwgZ3Bpbyk7CisJfSBlbHNlIGlmIChHUElPX0lTUkFNKHBpbikpIHsKKwkJaWYgKGdwaW9fcmVhZF9iaXQoUElPX0RSVl9TVEFURSwgZ3BpbykgPiAwKQorCQkJcmV0ID0gZ3Bpb19zZXRfYml0KG91dHB1dCA/IFBJT19TRE9VVFBfU0VUIDoKKwkJCQkJICAgUElPX1NET1VUUF9DTFIsIGdwaW8pOworCX0gZWxzZSBpZiAoR1BJT19JU0JJRChwaW4pKSB7CisJCWlmIChncGlvX3JlYWRfYml0KFBJT19EUlZfU1RBVEUsIGdwaW8pID4gMCkKKwkJCXJldCA9IGdwaW9fc2V0X2JpdChvdXRwdXQgPyBQSU9fT1VUUF9TRVQgOgorCQkJCQkgICBQSU9fT1VUUF9DTFIsIGdwaW8pOworCX0KKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3dyaXRlX3Bpbik7CisKKy8qIFZhbHVlID0gMSA6IFNldCBHUElPIHBpbiBhcyBvdXRwdXQgKi8KKy8qIFZhbHVlID0gMCA6IFNldCBHUElPIHBpbiBhcyBpbnB1dCAqLworaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX2RpcmVjdGlvbih1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpCit7CisJaW50IGdwaW8gPSBHUElPX0JJVF9NQVNLKHBpbik7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlncGlvX2xvY2soKTsKKwlpZiAoR1BJT19JU0JJRChwaW4pIHx8IEdQSU9fSVNSQU0ocGluKSkgeworCQlyZXQgPSBncGlvX3NldF9iaXQob3V0cHV0ID8gUElPX0RSVl9TRVQgOiBQSU9fRFJWX0NMUiwgZ3Bpbyk7CisJfQorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fc2V0X3Bpbl9kaXJlY3Rpb24pOworCisvKiBSZWFkIEdQSU8gcGluIGRpcmVjdGlvbjogMD0gcGluIHVzZWQgYXMgaW5wdXQsIDE9IHBpbiB1c2VkIGFzIG91dHB1dCovCitpbnQgcG54NDAwOF9ncGlvX3JlYWRfcGluX2RpcmVjdGlvbih1bnNpZ25lZCBzaG9ydCBwaW4pCit7CisJaW50IGdwaW8gPSBHUElPX0JJVF9NQVNLKHBpbik7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlncGlvX2xvY2soKTsKKwlpZiAoR1BJT19JU0JJRChwaW4pIHx8IEdQSU9fSVNSQU0ocGluKSkgeworCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19EUlZfU1RBVEUsIGdwaW8pOworCX0KKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3JlYWRfcGluX2RpcmVjdGlvbik7CisKKy8qIFZhbHVlID0gMSA6IFNldCBwaW4gdG8gbXV4ZWQgZnVuY3Rpb24gICovCisvKiBWYWx1ZSA9IDAgOiBTZXQgcGluIGFzIEdQSU8gKi8KK2ludCBwbng0MDA4X2dwaW9fc2V0X3Bpbl9tdXgodW5zaWduZWQgc2hvcnQgcGluLCBpbnQgb3V0cHV0KQoreworCWludCBncGlvID0gR1BJT19CSVRfTUFTSyhwaW4pOworCWludCByZXQgPSAtRUZBVUxUOworCisJZ3Bpb19sb2NrKCk7CisJaWYgKEdQSU9fSVNCSUQocGluKSkgeworCQlyZXQgPQorCQkgICAgZ3Bpb19zZXRfYml0KG91dHB1dCA/IFBJT19NVVhfU0VUIDogUElPX01VWF9DTFIsCisJCQkJIGdwaW9fdG9fbXV4X21hcFtncGlvXSk7CisJfSBlbHNlIGlmIChHUElPX0lTT1VUKHBpbikpIHsKKwkJcmV0ID0KKwkJICAgIGdwaW9fc2V0X2JpdChvdXRwdXQgPyBQSU9fTVVYX1NFVCA6IFBJT19NVVhfQ0xSLAorCQkJCSBvdXRwX3RvX211eF9tYXBbZ3Bpb10pOworCX0gZWxzZSBpZiAoR1BJT19JU01VWChwaW4pKSB7CisJCXJldCA9IGdwaW9fc2V0X2JpdChvdXRwdXQgPyBQSU9fTVVYX1NFVCA6IFBJT19NVVhfQ0xSLCBncGlvKTsKKwl9CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb19zZXRfcGluX211eCk7CisKKy8qIFJlYWQgcGluIG11eCBmdW5jdGlvbjogMD0gcGluIHVzZWQgYXMgR1BJTywgMT0gcGluIHVzZWQgZm9yIG11eGVkIGZ1bmN0aW9uKi8KK2ludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fbXV4KHVuc2lnbmVkIHNob3J0IHBpbikKK3sKKwlpbnQgZ3BpbyA9IEdQSU9fQklUX01BU0socGluKTsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCWdwaW9fbG9jaygpOworCWlmIChHUElPX0lTQklEKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fTVVYX1NUQVRFLCBncGlvX3RvX211eF9tYXBbZ3Bpb10pOworCX0gZWxzZSBpZiAoR1BJT19JU09VVChwaW4pKSB7CisJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX01VWF9TVEFURSwgb3V0cF90b19tdXhfbWFwW2dwaW9dKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNNVVgocGluKSkgeworCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19NVVhfU1RBVEUsIGdwaW8pOworCX0KKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3JlYWRfcGluX211eCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwYThlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pcnEuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC9pcnEuYworICoKKyAqIFBOWDQwMDggSVJRIGNvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIEJhc2VkIG9uIHJlZmVyZW5jZSBjb2RlIHJlY2VpdmVkIGZyb20gUGhpbGlwczoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CisKK3N0YXRpYyB1OCBwbng0MDA4X2lycV90eXBlW05SX0lSUVNdID0gUE5YNDAwOF9JUlFfVFlQRVM7CisKK3N0YXRpYyB2b2lkIHBueDQwMDhfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19FUihpcnEpKSAmIH5JTlRDX0JJVChpcnEpLCBJTlRDX0VSKGlycSkpOwkvKiBtYXNrIGludGVycnVwdCAqLworfQorCitzdGF0aWMgdm9pZCBwbng0MDA4X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19FUihpcnEpKSB8IElOVENfQklUKGlycSksIElOVENfRVIoaXJxKSk7CS8qIHVubWFzayBpbnRlcnJ1cHQgKi8KK30KKworc3RhdGljIHZvaWQgcG54NDAwOF9tYXNrX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19FUihpcnEpKSAmIH5JTlRDX0JJVChpcnEpLCBJTlRDX0VSKGlycSkpOwkvKiBtYXNrIGludGVycnVwdCAqLworCV9fcmF3X3dyaXRlbChJTlRDX0JJVChpcnEpLCBJTlRDX1NSKGlycSkpOwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCit9CisKK3N0YXRpYyBpbnQgcG54NDAwOF9zZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJUlFUX1JJU0lORzoKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVRSKGlycSkpIHwgSU5UQ19CSVQoaXJxKSwgSU5UQ19BVFIoaXJxKSk7CS8qZWRnZSBzZW5zaXRpdmUgKi8KKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVBSKGlycSkpIHwgSU5UQ19CSVQoaXJxKSwgSU5UQ19BUFIoaXJxKSk7CS8qcmlzaW5nIGVkZ2UgKi8KKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgZG9fZWRnZV9JUlEpOworCQlicmVhazsKKwljYXNlIElSUVRfRkFMTElORzoKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVRSKGlycSkpIHwgSU5UQ19CSVQoaXJxKSwgSU5UQ19BVFIoaXJxKSk7CS8qZWRnZSBzZW5zaXRpdmUgKi8KKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVBSKGlycSkpICYgfklOVENfQklUKGlycSksIElOVENfQVBSKGlycSkpOwkvKmZhbGxpbmcgZWRnZSAqLworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCWJyZWFrOworCWNhc2UgSVJRVF9MT1c6CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FUUihpcnEpKSAmIH5JTlRDX0JJVChpcnEpLCBJTlRDX0FUUihpcnEpKTsJLypsZXZlbCBzZW5zaXRpdmUgKi8KKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVBSKGlycSkpICYgfklOVENfQklUKGlycSksIElOVENfQVBSKGlycSkpOwkvKmxvdyBsZXZlbCAqLworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQlicmVhazsKKwljYXNlIElSUVRfSElHSDoKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVRSKGlycSkpICYgfklOVENfQklUKGlycSksIElOVENfQVRSKGlycSkpOwkvKmxldmVsIHNlbnNpdGl2ZSAqLworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BUFIoaXJxKSkgfCBJTlRDX0JJVChpcnEpLCBJTlRDX0FQUihpcnEpKTsJLyogaGlnaCBsZXZlbCAqLworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19sZXZlbF9JUlEpOworCQlicmVhazsKKworCS8qIElSUVRfQk9USEVER0UgaXMgbm90IHN1cHBvcnRlZCAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiUE5YNDAwOCBJUlE6IFVuc3VwcG9ydGVkIGlycSB0eXBlICVkXG4iLCB0eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIHBueDQwMDhfaXJxX2NoaXAgPSB7CisJLmFjayA9IHBueDQwMDhfbWFza19hY2tfaXJxLAorCS5tYXNrID0gcG54NDAwOF9tYXNrX2lycSwKKwkudW5tYXNrID0gcG54NDAwOF91bm1hc2tfaXJxLAorCS5zZXRfdHlwZSA9IHBueDQwMDhfc2V0X2lycV90eXBlLAorfTsKKwordm9pZCBfX2luaXQgcG54NDAwOF9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJLyogY29uZmlndXJlIGFuZCBlbmFibGUgSVJRIDAsMSwzMCwzMSAoY2FzY2FkZSBpbnRlcnJ1cHRzKSBtYXNrIGFsbCBvdGhlcnMgKi8KKwlwbng0MDA4X3NldF9pcnFfdHlwZShTVUIxX0lSUV9OLCBwbng0MDA4X2lycV90eXBlW1NVQjFfSVJRX05dKTsKKwlwbng0MDA4X3NldF9pcnFfdHlwZShTVUIyX0lSUV9OLCBwbng0MDA4X2lycV90eXBlW1NVQjJfSVJRX05dKTsKKwlwbng0MDA4X3NldF9pcnFfdHlwZShTVUIxX0ZJUV9OLCBwbng0MDA4X2lycV90eXBlW1NVQjFfRklRX05dKTsKKwlwbng0MDA4X3NldF9pcnFfdHlwZShTVUIyX0ZJUV9OLCBwbng0MDA4X2lycV90eXBlW1NVQjJfRklRX05dKTsKKworCV9fcmF3X3dyaXRlbCgoMSA8PCBTVUIyX0ZJUV9OKSB8ICgxIDw8IFNVQjFfRklRX04pIHwKKwkJCSgxIDw8IFNVQjJfSVJRX04pIHwgKDEgPDwgU1VCMV9JUlFfTiksCisJCUlOVENfRVIoTUFJTl9CQVNFX0lOVCkpOworCV9fcmF3X3dyaXRlbCgwLCBJTlRDX0VSKFNJQzFfQkFTRV9JTlQpKTsKKwlfX3Jhd193cml0ZWwoMCwgSU5UQ19FUihTSUMyX0JBU0VfSU5UKSk7CisKKwkvKiBjb25maWd1cmUgYWxsIG90aGVyIElSUSdzICovCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgeworCQlpZiAoaSA9PSBTVUIyX0ZJUV9OIHx8IGkgPT0gU1VCMV9GSVFfTiB8fAorCQkJaSA9PSBTVUIyX0lSUV9OIHx8IGkgPT0gU1VCMV9JUlFfTikKKwkJCWNvbnRpbnVlOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCQlzZXRfaXJxX2NoaXAoaSwgJnBueDQwMDhfaXJxX2NoaXApOworCQlwbng0MDA4X3NldF9pcnFfdHlwZShpLCBwbng0MDA4X2lycV90eXBlW2ldKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0OWNkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMKKyAqCisgKiBQb3dlciBNYW5hZ2VtZW50IGRyaXZlciBmb3IgUE5YNDAwOAorICoKKyAqIEF1dGhvcnM6IFZpdGFseSBXb29sLCBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKworI2RlZmluZSBTUkFNX1ZBIElPX0FERFJFU1MoUE5YNDAwOF9JUkFNX0JBU0UpCisKK3N0YXRpYyB2b2lkICpzYXZlZF9zcmFtOworCitzdGF0aWMgc3RydWN0IGNsayAqcGxsNF9jbGs7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbng0MDA4X3N0YW5kYnkodm9pZCkKK3sKKwl2b2lkICgqcG54NDAwOF9jcHVfc3RhbmRieV9wdHIpICh2b2lkKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfZmlxX2Rpc2FibGUoKTsKKworCWNsa19kaXNhYmxlKHBsbDRfY2xrKTsKKworCS8qc2F2aW5nIHBvcnRpb24gb2YgU1JBTSB0byBiZSB1c2VkIGJ5IHN1c3BlbmQgZnVuY3Rpb24uICovCisJbWVtY3B5KHNhdmVkX3NyYW0sICh2b2lkICopU1JBTV9WQSwgcG54NDAwOF9jcHVfc3RhbmRieV9zeik7CisKKwkvKm1ha2Ugc3VyZSBTUkFNIGNvcHkgZ2V0cyBwaHlzaWNhbGx5IHdyaXR0ZW4gaW50byBTRFJBTS4KKwkgICBTRFJBTSB3aWxsIGJlIHBsYWNlZCBpbnRvIHNlbGYtcmVmcmVzaCBkdXJpbmcgcG93ZXIgZG93biAqLworCWZsdXNoX2NhY2hlX2FsbCgpOworCisJLypjb3B5IHN1c3BlbmQgZnVuY3Rpb24gaW50byBTUkFNICovCisJbWVtY3B5KCh2b2lkICopU1JBTV9WQSwgcG54NDAwOF9jcHVfc3RhbmRieSwgcG54NDAwOF9jcHVfc3RhbmRieV9zeik7CisKKwkvKmRvIHN1c3BlbmQgKi8KKwlwbng0MDA4X2NwdV9zdGFuZGJ5X3B0ciA9ICh2b2lkICopU1JBTV9WQTsKKwlwbng0MDA4X2NwdV9zdGFuZGJ5X3B0cigpOworCisJLypyZXN0b3JpbmcgcG9ydGlvbiBvZiBTUkFNIHRoYXQgd2FzIHVzZWQgYnkgc3VzcGVuZCBmdW5jdGlvbiAqLworCW1lbWNweSgodm9pZCAqKVNSQU1fVkEsIHNhdmVkX3NyYW0sIHBueDQwMDhfY3B1X3N0YW5kYnlfc3opOworCisJY2xrX2VuYWJsZShwbGw0X2Nsayk7CisKKwlsb2NhbF9maXFfZW5hYmxlKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG54NDAwOF9zdXNwZW5kKHZvaWQpCit7CisJdm9pZCAoKnBueDQwMDhfY3B1X3N1c3BlbmRfcHRyKSAodm9pZCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWxvY2FsX2ZpcV9kaXNhYmxlKCk7CisKKwljbGtfZGlzYWJsZShwbGw0X2Nsayk7CisKKwlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgU1RBUlRfSU5UX1JTUl9SRUcoU0VfUElOX0JBU0VfSU5UKSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIFNUQVJUX0lOVF9SU1JfUkVHKFNFX0lOVF9CQVNFX0lOVCkpOworCisJLypzYXZpbmcgcG9ydGlvbiBvZiBTUkFNIHRvIGJlIHVzZWQgYnkgc3VzcGVuZCBmdW5jdGlvbi4gKi8KKwltZW1jcHkoc2F2ZWRfc3JhbSwgKHZvaWQgKilTUkFNX1ZBLCBwbng0MDA4X2NwdV9zdXNwZW5kX3N6KTsKKworCS8qbWFrZSBzdXJlIFNSQU0gY29weSBnZXRzIHBoeXNpY2FsbHkgd3JpdHRlbiBpbnRvIFNEUkFNLgorCSAgIFNEUkFNIHdpbGwgYmUgcGxhY2VkIGludG8gc2VsZi1yZWZyZXNoIGR1cmluZyBwb3dlciBkb3duICovCisJZmx1c2hfY2FjaGVfYWxsKCk7CisKKwkvKmNvcHkgc3VzcGVuZCBmdW5jdGlvbiBpbnRvIFNSQU0gKi8KKwltZW1jcHkoKHZvaWQgKilTUkFNX1ZBLCBwbng0MDA4X2NwdV9zdXNwZW5kLCBwbng0MDA4X2NwdV9zdXNwZW5kX3N6KTsKKworCS8qZG8gc3VzcGVuZCAqLworCXBueDQwMDhfY3B1X3N1c3BlbmRfcHRyID0gKHZvaWQgKilTUkFNX1ZBOworCXBueDQwMDhfY3B1X3N1c3BlbmRfcHRyKCk7CisKKwkvKnJlc3RvcmluZyBwb3J0aW9uIG9mIFNSQU0gdGhhdCB3YXMgdXNlZCBieSBzdXNwZW5kIGZ1bmN0aW9uICovCisJbWVtY3B5KCh2b2lkICopU1JBTV9WQSwgc2F2ZWRfc3JhbSwgcG54NDAwOF9jcHVfc3VzcGVuZF9zeik7CisKKwljbGtfZW5hYmxlKHBsbDRfY2xrKTsKKworCWxvY2FsX2ZpcV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgcG54NDAwOF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCQlwbng0MDA4X3N0YW5kYnkoKTsKKwkJYnJlYWs7CisJY2FzZSBQTV9TVVNQRU5EX01FTToKKwkJcG54NDAwOF9zdXNwZW5kKCk7CisJCWJyZWFrOworCWNhc2UgUE1fU1VTUEVORF9ESVNLOgorCQlyZXR1cm4gLUVOT1RTVVBQOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBwcm9jZXNzZXMgYXJlIGZyb3plbiwgYnV0IGJlZm9yZSB3ZSBzaHV0IGRvd24gZGV2aWNlcy4KKyAqLworc3RhdGljIGludCBwbng0MDA4X3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKKwljYXNlIFBNX1NVU1BFTkRfTUVNOgorCQlicmVhazsKKworCWNhc2UgUE1fU1VTUEVORF9ESVNLOgorCQlyZXR1cm4gLUVOT1RTVVBQOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgZGV2aWNlcyBhcmUgcmUtc2V0dXAsIGJ1dCBiZWZvcmUgcHJvY2Vzc2VzIGFyZSB0aGF3ZWQuCisgKi8KK3N0YXRpYyBpbnQgcG54NDAwOF9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHRvIFBNX0RJU0tfRklSTVdBUkUgc28gd2UgY2FuIHF1aWNrbHkgdmV0byBzdXNwZW5kLXRvLWRpc2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG1fb3BzIHBueDQwMDhfcG1fb3BzID0geworCS5wcmVwYXJlID0gcG54NDAwOF9wbV9wcmVwYXJlLAorCS5lbnRlciA9IHBueDQwMDhfcG1fZW50ZXIsCisJLmZpbmlzaCA9IHBueDQwMDhfcG1fZmluaXNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG54NDAwOF9wbV9pbml0KHZvaWQpCit7CisJdTMyIHNyYW1fc2l6ZV90b19hbGxvY2F0ZTsKKworCXBsbDRfY2xrID0gY2xrX2dldCgwLCAiY2tfcGxsNCIpOworCWlmIChJU19FUlIocGxsNF9jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlBNIFN1c3BlbmQgY2Fubm90IGFjcXVpcmUgQVJNKFBMTDQpIGNsb2NrIGNvbnRyb2xcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwbGw0X2Nsayk7CisJfQorCisJaWYgKHBueDQwMDhfY3B1X3N0YW5kYnlfc3ogPiBwbng0MDA4X2NwdV9zdXNwZW5kX3N6KQorCQlzcmFtX3NpemVfdG9fYWxsb2NhdGUgPSBwbng0MDA4X2NwdV9zdGFuZGJ5X3N6OworCWVsc2UKKwkJc3JhbV9zaXplX3RvX2FsbG9jYXRlID0gcG54NDAwOF9jcHVfc3VzcGVuZF9zejsKKworCXNhdmVkX3NyYW0gPSBrbWFsbG9jKHNyYW1fc2l6ZV90b19hbGxvY2F0ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzYXZlZF9zcmFtKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlBNIFN1c3BlbmQ6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBwb3J0aW9uIG9mIFNSQU1cbiIpOworCQljbGtfcHV0KHBsbDRfY2xrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG1fc2V0X29wcygmcG54NDAwOF9wbV9vcHMpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHBueDQwMDhfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxZTA0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9zZXJpYWwuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcG54NDAwOC9zZXJpYWwuYworICoKKyAqICBQTlg0MDA4IFVBUlQgaW5pdGlhbGl6YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4gKGMpIDIwMDUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKworI2RlZmluZSBVQVJUXzMJCTAKKyNkZWZpbmUgVUFSVF80CQkxCisjZGVmaW5lIFVBUlRfNQkJMgorI2RlZmluZSBVQVJUXzYJCTMKKyNkZWZpbmUgVUFSVF9VTktOT1dOCSgtMSkKKworI2RlZmluZSBVQVJUM19CQVNFX1ZBCUlPX0FERFJFU1MoUE5YNDAwOF9VQVJUM19CQVNFKQorI2RlZmluZSBVQVJUNF9CQVNFX1ZBCUlPX0FERFJFU1MoUE5YNDAwOF9VQVJUNF9CQVNFKQorI2RlZmluZSBVQVJUNV9CQVNFX1ZBCUlPX0FERFJFU1MoUE5YNDAwOF9VQVJUNV9CQVNFKQorI2RlZmluZSBVQVJUNl9CQVNFX1ZBCUlPX0FERFJFU1MoUE5YNDAwOF9VQVJUNl9CQVNFKQorCisjZGVmaW5lIFVBUlRfRkNSX09GRlNFVAkJOAorI2RlZmluZSBVQVJUX0ZJRk9fU0laRQkJNjQKKwordm9pZCBwbng0MDA4X3VhcnRfaW5pdCh2b2lkKQoreworCXUzMiB0bXA7CisJaW50IGkgPSBVQVJUX0ZJRk9fU0laRTsKKworCV9fcmF3X3dyaXRlbCgweEMxLCBVQVJUNV9CQVNFX1ZBICsgVUFSVF9GQ1JfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwoMHhDMSwgVUFSVDNfQkFTRV9WQSArIFVBUlRfRkNSX09GRlNFVCk7CisKKwkvKiBTZW5kIGEgTlVMTCB0byBmaXggdGhlIFVBUlQgSFcgYnVnICovCisJX19yYXdfd3JpdGVsKDB4MDAsIFVBUlQ1X0JBU0VfVkEpOworCV9fcmF3X3dyaXRlbCgweDAwLCBVQVJUM19CQVNFX1ZBKTsKKworCXdoaWxlIChpLS0pIHsKKwkJdG1wID0gX19yYXdfcmVhZGwoVUFSVDVfQkFTRV9WQSk7CisJCXRtcCA9IF9fcmF3X3JlYWRsKFVBUlQzX0JBU0VfVkEpOworCX0KKwlfX3Jhd193cml0ZWwoMCwgVUFSVDVfQkFTRV9WQSArIFVBUlRfRkNSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKDAsIFVBUlQzX0JBU0VfVkEgKyBVQVJUX0ZDUl9PRkZTRVQpOworCisJLyogc2V0dXAgd2FrZXVwIGludGVycnVwdCAqLworCXN0YXJ0X2ludF9zZXRfcmlzaW5nX2VkZ2UoU0VfVTNfUlhfSU5UKTsKKwlzdGFydF9pbnRfYWNrKFNFX1UzX1JYX0lOVCk7CisJc3RhcnRfaW50X3VtYXNrKFNFX1UzX1JYX0lOVCk7CisKKwlzdGFydF9pbnRfc2V0X3Jpc2luZ19lZGdlKFNFX1U1X1JYX0lOVCk7CisJc3RhcnRfaW50X2FjayhTRV9VNV9SWF9JTlQpOworCXN0YXJ0X2ludF91bWFzayhTRV9VNV9SWF9JTlQpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzgwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvc2xlZXAuUwpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcG54NDAwOC9zbGVlcC5TCisgKgorICogUE5YNDAwOCBzdXBwb3J0IGZvciBTVE9QIG1vZGUgYW5kIFNEUkFNIHNlbGYtcmVmcmVzaAorICoKKyAqIEF1dGhvcnM6IERtaXRyeSBDaGlnaXJldiwgVml0YWx5IFdvb2wgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgUFdSTUFOX1ZBX0JBU0UgSU9fQUREUkVTUyhQTlg0MDA4X1BXUk1BTl9CQVNFKQorI2RlZmluZSBQV1JfQ1RSTF9SRUdfT0ZGUyAweDQ0CisKKyNkZWZpbmUgU0RSQU1fQ0ZHX1ZBX0JBU0UgSU9fQUREUkVTUyhQTlg0MDA4X1NEUkFNX0NGR19CQVNFKQorI2RlZmluZSBNUE1DX1NUQVRVU19SRUdfT0ZGUyAweDQKKworCQkudGV4dAorCitFTlRSWShwbng0MDA4X2NwdV9zdXNwZW5kKQorCUB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBlbnRlcmVkIGluIERpcmVjdCBydW4gbW9kZS4KKworCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwlzdG1mZAlzcCEsIHtyMCAtIHI2LCBscn0KKworCUAgc2V0dXAgUG93ZXIgTWFuYWdlciBiYXNlIGFkZHJlc3MgaW4gcjQKKwlAIGFuZCBwdXQgaXQncyB2YWx1ZSBpbiByNQorCW1vdglyNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4ZmYwMDAwMDApCisJb3JyCXI0LCByNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4MDBmZjAwMDApCisJb3JyCXI0LCByNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4MDAwMGZmMDApCisJb3JyCXI0LCByNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4MDAwMDAwZmYpCisJbGRyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgc2V0dXAgU0RSQU0gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgaW4gcjIKKwlAIGFuZCBwdXQgaXQncyB2YWx1ZSBpbiByMworCW1vdglyMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4ZmYwMDAwMDApCisJb3JyCXIyLCByMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4MDBmZjAwMDApCisJb3JyCXIyLCByMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4MDAwMGZmMDApCisJb3JyCXIyLCByMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4MDAwMDAwZmYpCisJbGRyCXIzLCBbcjIsICNNUE1DX1NUQVRVU19SRUdfT0ZGU10gQGV4dHJhIHJlYWQgLSBIVyBidWcgd29ya2Fyb3VuZAorCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOCkpCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0CisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOSkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgZG8gc2F2ZSBjdXJyZW50IGJpdCBzZXR0aW5ncyBpbiByMQorCW1vdglyMSwgcjUKKworCUAgc2V0IFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQKKwlvcnIJcjUsIHI1LCAjKDEgPDwgOSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBzZXQgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCW9ycglyNSwgcjUsICMoMSA8PCA4KQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA4KSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0CisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOSkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgd2FpdCBmb3IgU0RSQU0gdG8gZ2V0IGludG8gc2VsZi1yZWZyZXNoIG1vZGUKKzI6CWxkcglyMywgW3IyLCAjTVBNQ19TVEFUVVNfUkVHX09GRlNdCisJdHN0CXIzLCAjKDEgPDwgMikKKwliZXEJMmIKKworCUAgdG8gcHJlcGFyZSBTRFJBTSB0byBnZXQgb3V0IG9mIHNlbGYtcmVmcmVzaCBtb2RlIGFmdGVyIHdha2V1cAorCW9ycglyNSwgcjUsICMoMSA8PCA3KQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGRvIGVudGVyIHN0b3AgbW9kZQorCW9ycglyNSwgcjUsICMoMSA8PCAwKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisKKwlAIHNsZWVwaW5nIG5vdy4uLgorCisJQCBjb21pbmcgb3V0IG9mIFNUT1AgbW9kZSBpbnRvIERpcmVjdCBSdW4gbW9kZQorCUAgY2xlYXIgU1RPUCBtb2RlIGFuZCBTRFJBTSBzZWxmLXJlZnJlc2ggYml0cworCXN0cglyMSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHdhaXQgZm9yIFNEUkFNIHRvIGdldCBvdXQgc2VsZi1yZWZyZXNoIG1vZGUKKzM6CWxkcglyMywgW3IyLCAjTVBNQ19TVEFUVVNfUkVHX09GRlNdCisJdHN0CXIzLCAjNQorCWJuZQkzYgorCisJQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCWxkbWZkICAgc3AhLCB7cjAgLSByNiwgcGN9CisKK0VOVFJZKHBueDQwMDhfY3B1X3N1c3BlbmRfc3opCisJLndvcmQJLiAtIHBueDQwMDhfY3B1X3N1c3BlbmQKKworRU5UUlkocG54NDAwOF9jcHVfc3RhbmRieSkKKwlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJc3RtZmQJc3AhLCB7cjAgLSByNiwgbHJ9CisKKwlAIHNldHVwIFBvd2VyIE1hbmFnZXIgYmFzZSBhZGRyZXNzIGluIHI0CisJQCBhbmQgcHV0IGl0J3MgdmFsdWUgaW4gcjUKKwltb3YJcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweGZmMDAwMDAwKQorCW9ycglyNCwgcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweDAwZmYwMDAwKQorCW9ycglyNCwgcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweDAwMDBmZjAwKQorCW9ycglyNCwgcjQsICMoUFdSTUFOX1ZBX0JBU0UgJiAweDAwMDAwMGZmKQorCWxkcglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHNldHVwIFNEUkFNIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzIGluIHIyCisJQCBhbmQgcHV0IGl0J3MgdmFsdWUgaW4gcjMKKwltb3YJcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweGZmMDAwMDAwKQorCW9ycglyMiwgcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweDAwZmYwMDAwKQorCW9ycglyMiwgcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweDAwMDBmZjAwKQorCW9ycglyMiwgcjIsICMoU0RSQU1fQ0ZHX1ZBX0JBU0UgJiAweDAwMDAwMGZmKQorCWxkcglyMywgW3IyLCAjTVBNQ19TVEFUVVNfUkVHX09GRlNdIEBleHRyYSByZWFkIC0gSFcgYnVnIHdvcmthcm91bmQKKworCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCWFuZAlyNSwgcjUsICMofigxIDw8IDgpKQorCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdAorCWFuZAlyNSwgcjUsICMofigxIDw8IDkpKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGRvIHNhdmUgY3VycmVudCBiaXQgc2V0dGluZ3MgaW4gcjEKKwltb3YJcjEsIHI1CisKKwlAIHNldCBTRFJBTSBzZWxmLXJlZnJlc2ggYml0CisJb3JyCXI1LCByNSwgIygxIDw8IDkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgc2V0IFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlvcnIJcjUsIHI1LCAjKDEgPDwgOCkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOCkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdAorCWFuZAlyNSwgcjUsICMofigxIDw8IDkpKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHdhaXQgZm9yIFNEUkFNIHRvIGdldCBpbnRvIHNlbGYtcmVmcmVzaCBtb2RlCisyOglsZHIJcjMsIFtyMiwgI01QTUNfU1RBVFVTX1JFR19PRkZTXQorCXRzdAlyMywgIygxIDw8IDIpCisJYmVxCTJiCisKKwlAIHNldCAnZ2V0IG91dCBvZiBzZWxmLXJlZnJlc2ggbW9kZSBhZnRlciB3YWtldXAnIGJpdAorCW9ycglyNSwgcjUsICMoMSA8PCA3KQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwltY3IgICAgIHAxNSwgMCwgcjAsIGM3LCBjMCwgNAlAIGtpbmRhIHNsZWVwaW5nIG5vdy4uLgorCisJQCBzZXQgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCW9ycglyNSwgcjUsICMoMSA8PCA4KQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA4KSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCB3YWl0IGZvciBTRFJBTSB0byBnZXQgb3V0IHNlbGYtcmVmcmVzaCBtb2RlCiszOglsZHIJcjMsIFtyMiwgI01QTUNfU1RBVFVTX1JFR19PRkZTXQorCXRzdAlyMywgIzUKKwlibmUJM2IKKworCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKwlsZG1mZCAgIHNwISwge3IwIC0gcjYsIHBjfQorCitFTlRSWShwbng0MDA4X2NwdV9zdGFuZGJ5X3N6KQorCS53b3JkCS4gLSBwbng0MDA4X2NwdV9zdGFuZGJ5CisKK0VOVFJZKHBueDQwMDhfY2FjaGVfY2xlYW5faW52YWxpZGF0ZSkKKwlzdG1mZAlzcCEsIHtyMCAtIHI2LCBscn0KKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGludmFsaWRhdGUgRCBjYWNoZQorI2Vsc2UKKzE6CW1yYwlwMTUsIDAsIHIxNSwgYzcsIGMxNCwgMwkJQCB0ZXN0LGNsZWFuLGludmFsaWRhdGUKKwlibmUgICAgIDFiCisjZW5kaWYKKwlsZG1mZCAgIHNwISwge3IwIC0gcjYsIHBjfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlNjgwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCisgKgorICogUE5YNDAwOCBUaW1lcnMKKyAqCisgKiBBdXRob3JzOiBWaXRhbHkgV29vbCwgRG1pdHJ5IENoaWdpcmV2LCBHcmlnb3J5IFRvbHN0b2x5dGtpbiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKy8qISBOb3RlOiBhbGwgdGltZXJzIGFyZSBVUENPVU5USU5HICovCisKKy8qIQorICogUmV0dXJucyBudW1iZXIgb2YgdXMgc2luY2UgbGFzdCBjbG9jayBpbnRlcnJ1cHQuICBOb3RlIHRoYXQgaW50ZXJydXB0cworICogd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgZG9fZ2V0dGltZW9mZnNldCgpCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBueDQwMDhfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCXUzMiB0aWNrc190b19tYXRjaCA9CisJICAgIF9fcmF3X3JlYWRsKEhTVElNX01BVENIMCkgLSBfX3Jhd19yZWFkbChIU1RJTV9DT1VOVEVSKTsKKwl1MzIgZWxhcHNlZCA9IExBVENIIC0gdGlja3NfdG9fbWF0Y2g7CisJcmV0dXJuIChlbGFwc2VkICogKHRpY2tfbnNlYyAvIDEwMDApKSAvIExBVENIOworfQorCisvKiEKKyAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKKyAqLworc3RhdGljIGlycXJldHVybl90IHBueDQwMDhfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKF9fcmF3X3JlYWRsKEhTVElNX0lOVCkgJiBNQVRDSDBfSU5UKSB7CisKKwkJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwkJZG8geworCQkJdGltZXJfdGljayhyZWdzKTsKKworCQkJLyoKKwkJCSAqIHRoaXMgYWxnb3JpdGhtIHRha2VzIGNhcmUgb2YgcG9zc2libGUgZGVsYXkKKwkJCSAqIGZvciB0aGlzIGludGVycnVwdCBoYW5kbGluZyBsb25nZXIgdGhhbiBhIG5vcm1hbAorCQkJICogdGltZXIgcGVyaW9kCisJCQkgKi8KKwkJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChIU1RJTV9NQVRDSDApICsgTEFUQ0gsCisJCQkJICAgICBIU1RJTV9NQVRDSDApOworCQkJX19yYXdfd3JpdGVsKE1BVENIMF9JTlQsIEhTVElNX0lOVCk7CS8qIGNsZWFyIGludGVycnVwdCAqLworCisJCQkvKgorCQkJICogVGhlIGdvYWwgaXMgdG8ga2VlcCBpbmNyZW1lbnRpbmcgSFNUSU1fTUFUQ0gwCisJCQkgKiByZWdpc3RlciB1bnRpbCBIU1RJTV9NQVRDSDAgaW5kaWNhdGVzIHRpbWUgYWZ0ZXIKKwkJCSAqIHdoYXQgSFNUSU1fQ09VTlRFUiBpbmRpY2F0ZXMuCisJCQkgKi8KKwkJfSB3aGlsZSAoKHNpZ25lZCkKKwkJCSAoX19yYXdfcmVhZGwoSFNUSU1fTUFUQ0gwKSAtCisJCQkgIF9fcmF3X3JlYWRsKEhTVElNX0NPVU5URVIpKSA8IDApOworCisJCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwbng0MDA4X3RpbWVyX2lycSA9IHsKKwkubmFtZSA9ICJQTlg0MDA4IFRpY2sgVGltZXIiLAorCS5mbGFncyA9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5oYW5kbGVyID0gcG54NDAwOF90aW1lcl9pbnRlcnJ1cHQKK307CisKKy8qIQorICogU2V0IHVwIHRpbWVyIGFuZCB0aW1lciBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyBfX2luaXQgdm9pZCBwbng0MDA4X3NldHVwX3RpbWVyKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFJFU0VUX0NPVU5ULCBNU1RJTV9DVFJMKTsKKwl3aGlsZSAoX19yYXdfcmVhZGwoTVNUSU1fQ09VTlRFUikpIDsJLyogd2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuIDEwMCUgZ3VhcmFudGVlIGV2ZW50ICovCisJX19yYXdfd3JpdGVsKDAsIE1TVElNX0NUUkwpOwkvKiBzdG9wIHRoZSB0aW1lciAqLworCV9fcmF3X3dyaXRlbCgwLCBNU1RJTV9NQ1RSTCk7CisKKwlfX3Jhd193cml0ZWwoUkVTRVRfQ09VTlQsIEhTVElNX0NUUkwpOworCXdoaWxlIChfX3Jhd19yZWFkbChIU1RJTV9DT1VOVEVSKSkgOwkvKiB3YWl0IGZvciByZXNldCB0byBjb21wbGV0ZS4gMTAwJSBndWFyYW50ZWUgZXZlbnQgKi8KKwlfX3Jhd193cml0ZWwoMCwgSFNUSU1fQ1RSTCk7CisJX19yYXdfd3JpdGVsKDAsIEhTVElNX01DVFJMKTsKKwlfX3Jhd193cml0ZWwoMCwgSFNUSU1fQ0NSKTsKKwlfX3Jhd193cml0ZWwoMTIsIEhTVElNX1BNQVRDSCk7CS8qIHNjYWxlIGRvd24gdG8gMSBNSFogKi8KKwlfX3Jhd193cml0ZWwoTEFUQ0gsIEhTVElNX01BVENIMCk7CisJX19yYXdfd3JpdGVsKE1SMF9JTlQsIEhTVElNX01DVFJMKTsKKworCXNldHVwX2lycShIU1RJTUVSX0lOVCwgJnBueDQwMDhfdGltZXJfaXJxKTsKKworCV9fcmF3X3dyaXRlbChDT1VOVF9FTkFCIHwgREVCVUdfRU4sIEhTVElNX0NUUkwpOwkvKnN0YXJ0IHRpbWVyLCBzdG9wIHdoZW4gSlRBRyBhY3RpdmUgKi8KK30KKworLyogVGltZXIgQ2xvY2sgQ29udHJvbCBpbiBQTSByZWdpc3RlciAqLworI2RlZmluZSBUSU1DTEtfQ1RSTF9SRUcgIElPX0FERFJFU1MoKFBOWDQwMDhfUFdSTUFOX0JBU0UgKyAweEJDKSkKKyNkZWZpbmUgV0FUQ0hET0dfQ0xLX0VOICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVElNRVJfQ0xLX0VOICAgICAgICAgICAgICAgICAgICAgIDIJLyogSFMgYW5kIE1TIHRpbWVycz8gKi8KKworc3RhdGljIHUzMiB0aW1jbGtfY3RybF9yZWdfc2F2ZTsKKwordm9pZCBwbng0MDA4X3RpbWVyX3N1c3BlbmQodm9pZCkKK3sKKwl0aW1jbGtfY3RybF9yZWdfc2F2ZSA9IF9fcmF3X3JlYWRsKFRJTUNMS19DVFJMX1JFRyk7CisJX19yYXdfd3JpdGVsKDAsIFRJTUNMS19DVFJMX1JFRyk7CS8qIGRpc2FibGUgdGltZXJzICovCit9CisKK3ZvaWQgcG54NDAwOF90aW1lcl9yZXN1bWUodm9pZCkKK3sKKwlfX3Jhd193cml0ZWwodGltY2xrX2N0cmxfcmVnX3NhdmUsIFRJTUNMS19DVFJMX1JFRyk7CS8qIGVuYWJsZSB0aW1lcnMgKi8KK30KKworc3RydWN0IHN5c190aW1lciBwbng0MDA4X3RpbWVyID0geworCS5pbml0ID0gcG54NDAwOF9zZXR1cF90aW1lciwKKwkub2Zmc2V0ID0gcG54NDAwOF9nZXR0aW1lb2Zmc2V0LAorCS5zdXNwZW5kID0gcG54NDAwOF90aW1lcl9zdXNwZW5kLAorCS5yZXN1bWUgPSBwbng0MDA4X3RpbWVyX3Jlc3VtZSwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwppbmRleCAzZTI2ZDdjLi4xYWIyNmM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCkBAIC0yMiw2ICsyMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhMnh4X3NwaS5oPgorCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0xOTYsNiArMjAwLDc4IEBACiAJfSwKIH07CiAKKy8qIEFEUzc4NDYgaXMgY29ubmVjdGVkIHRocm91Z2ggU1NQIC4uLiBhbmQgaWYgeW91ciBib2FyZCBoYXMgSjUgcG9wdWxhdGVkLAorICogeW91IGNhbiBzZWxlY3QgaXQgdG8gcmVwbGFjZSB0aGUgdWNiMTQwMCBieSBzd2l0Y2hpbmcgdGhlIHRvdWNoc2NyZWVuIGNhYmxlCisgKiAodG8gSjUpIGFuZCBwb2tpbmcgYm9hcmQgcmVnaXN0ZXJzIChhcyBkb25lIGJlbG93KS4gIEVsc2UgaXQncyBvbmx5IHVzZWZ1bAorICogZm9yIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9zc3BfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBfX1BSRUcoU1NDUjBfUCgxKSksCisJCS5lbmQJPSBfX1BSRUcoU1NDUjBfUCgxKSkgKyAweDE0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NTUCwKKwkJLmVuZAk9IElSUV9TU1AsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3BfbWFzdGVyX2luZm8gPSB7CisJLnNzcF90eXBlCT0gUFhBMjV4X1NTUCwKKwkuY2xvY2tfZW5hYmxlCT0gQ0tFTjNfU1NQLAorCS5udW1fY2hpcHNlbGVjdAk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGFfc3NwID0geworCS5uYW1lCQk9ICJweGEyeHgtc3BpIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBweGFfc3NwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhX3NzcF9yZXNvdXJjZXMpLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnB4YV9zc3BfbWFzdGVyX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBpbnQgbHViYm9ja19hZHM3ODQ2X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwkvKiBUU19CVVNZIGlzIGJpdCA4IGluIExVQl9NSVNDX1JELCBidXQgcGVuZG93biBpcyBpcnEtb25seSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHNfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDc4NDYsCisJLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCQkvKiBpbnRlcm5hbCwgbm8gY2FwICovCisJLmdldF9wZW5kb3duX3N0YXRlCT0gbHViYm9ja19hZHM3ODQ2X3BlbmRvd25fc3RhdGUsCisJLy8gLnhfcGxhdGVfb2htcwkJPSA1MDAsCS8qIEdVRVNTISAqLworCS8vIC55X3BsYXRlX29obXMJCT0gNTAwLAkvKiBHVUVTUyEgKi8KK307CisKK3N0YXRpYyB2b2lkIGFkczc4NDZfY3ModTMyIGNvbW1hbmQpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkCVRTX25DUyA9IDEgPDwgMTE7CisJbHViYm9ja19zZXRfbWlzY193cihUU19uQ1MsIChjb21tYW5kID09IFBYQTJYWF9DU19BU1NFUlQpID8gMCA6IFRTX25DUyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGFkc19odyA9IHsKKwkudHhfdGhyZXNob2xkCQk9IDEsCisJLnJ4X3RocmVzaG9sZAkJPSAyLAorCS5jc19jb250cm9sCQk9IGFkczc4NDZfY3MsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsgeworCS5tb2RhbGlhcwk9ICJhZHM3ODQ2IiwKKwkucGxhdGZvcm1fZGF0YQk9ICZhZHNfaW5mbywKKwkuY29udHJvbGxlcl9kYXRhID0gJmFkc19odywKKwkuaXJxCQk9IExVQkJPQ0tfQkJfSVJRLAorCS5tYXhfc3BlZWRfaHoJPSAxMjAwMDAgLyogbWF4IHNhbXBsZSByYXRlIGF0IDNWICovCisJCQkJKiAyNiAvKiBjb21tYW5kICsgZGF0YSArIG92ZXJoZWFkICovLAorCS5idXNfbnVtCT0gMSwKKwkuY2hpcF9zZWxlY3QJPSAwLAorfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNtYzkxeCIsCiAJLmlkCQk9IC0xLApAQCAtMjcyLDYgKzM0OCw3IEBACiAJJnNtYzkxeF9kZXZpY2UsCiAJJmx1YmJvY2tfZmxhc2hfZGV2aWNlWzBdLAogCSZsdWJib2NrX2ZsYXNoX2RldmljZVsxXSwKKwkmcHhhX3NzcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHNoYXJwX2xtOHYzMSBfX2luaXRkYXRhID0gewpAQCAtNDAwLDYgKzQ3Nyw4IEBACiAJbHViYm9ja19mbGFzaF9kYXRhW2ZsYXNoYm9vdF4xXS5uYW1lID0gImFwcGxpY2F0aW9uLWZsYXNoIjsKIAlsdWJib2NrX2ZsYXNoX2RhdGFbZmxhc2hib290XS5uYW1lID0gImJvb3Qtcm9tIjsKIAkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGlfYm9hcmRfaW5mbykpOwogfQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGx1YmJvY2tfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC00MTYsNiArNDk1LDExIEBACiAJcHhhX21hcF9pbygpOwogCWlvdGFibGVfaW5pdChsdWJib2NrX2lvX2Rlc2MsIEFSUkFZX1NJWkUobHViYm9ja19pb19kZXNjKSk7CiAKKwkvKiBTU1AgZGF0YSBwaW5zICovCisJcHhhX2dwaW9fbW9kZShHUElPMjNfU0NMS19NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMjVfU1RYRF9NRCk7CisJcHhhX2dwaW9fbW9kZShHUElPMjZfU1JYRF9NRCk7CisKIAkvKiBUaGlzIGVuYWJsZXMgdGhlIEJUVUFSVCAqLwogCXB4YV9ncGlvX21vZGUoR1BJTzQyX0JUUlhEX01EKTsKIAlweGFfZ3Bpb19tb2RlKEdQSU80M19CVFRYRF9NRCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IDAyZTE4OGQuLmIzMDdmMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC00OTMsNiArNDkzLDcgQEAKIE1BQ0hJTkVfU1RBUlQoTUFJTlNUT05FLCAiSW50ZWwgSENEREJCVkEwIERldmVsb3BtZW50IFBsYXRmb3JtIChha2EgTWFpbnN0b25lKSIpCiAJLyogTWFpbnRhaW5lcjogTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuICovCiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCS8qIEJMT0IgYm9vdCBwYXJhbWV0ZXIgc2V0dGluZyAqLwogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5tYXBfaW8JCT0gbWFpbnN0b25lX21hcF9pbywKIAkuaW5pdF9pcnEJPSBtYWluc3RvbmVfaW5pdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCAxOWIzNzJkLi40NGJjYjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTM3MSw2ICszNzEsNyBAQAogc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewogCS5wb3J0X21vZGUJPSBQTU1fTlBTX01PREUsCiAJLmluaXQJCT0gc3BpdHpfb2hjaV9pbml0LAorCS5wb3dlcl9idWRnZXQJPSAxNTAsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKaW5kZXggY2U3ZDgxMC4uMGMzMzQxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKQEAgLTcwLDYgKzcwLDE4IEBACiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTTURLMjQ0MC4KIAorY29uZmlnIFNNREsyNDQwX0NQVTI0NDAKKwlib29sICJTTURLMjQ0MCB3aXRoIFMzQzI0NDAgY3B1IG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQ0MAorCWRlZmF1bHQgeSBpZiBBUkNIX1MzQzI0NDAKKwlzZWxlY3QgQ1BVX1MzQzI0NDAKKworY29uZmlnIFNNREsyNDQwX0NQVTI0NDIKKwlib29sICJTTURNMjQ0MCB3aXRoIFMzQzI0NDIgY3B1IG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQ0MAorCXNlbGVjdCBDUFVfUzNDMjQ0MgorCisKIGNvbmZpZyBNQUNIX1ZSMTAwMAogCWJvb2wgIlRob3Jjb20gVlIxMDAwIgogCXNlbGVjdCBDUFVfUzNDMjQxMApAQCAtMTA5LDEyICsxMjEsMjYgQEAKIAkgIFN1cHBvcnQgZm9yIFMzQzI0MTAgYW5kIFMzQzI0MTBBIGZhbWlseSBmcm9tIHRoZSBTM0MyNFhYIGxpbmUKIAkgIG9mIFNhbXN1bmcgTW9iaWxlIENQVXMuCiAKK2NvbmZpZyBDUFVfUzNDMjQ0WAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiAoQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCisJaGVscAorCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KKwogY29uZmlnIENQVV9TM0MyNDQwCiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJc2VsZWN0IENQVV9TM0MyNDRYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KIAorY29uZmlnIENQVV9TM0MyNDQyCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDIwCisJc2VsZWN0IENQVV9TM0MyNDRYCisJaGVscAorCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MiBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KKwogY29tbWVudCAiUzNDMjQxMCBCb290IgogCiBjb25maWcgUzNDMjQxMF9CT09UX1dBVENIRE9HCkBAIC0xNzAsNyArMTk2LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBQTQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdmVyYm9zZSBkZWJ1Z2dpbmcgZnJvbSB0aGUgUE0gU3VzcGVuZCBhbmQKLQkgIFJlc3VtZSBjb2RlLiBTZWUgYERvY3VtZW50YXRpb24vYXJtL1NhbXNpbmctUzNDMjRYWC9TdXNwZW5kLnR4dGAKKwkgIFJlc3VtZSBjb2RlLiBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0PgogCSAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIGNvbmZpZyBTM0MyNDEwX1BNX0NIRUNLCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggM2U1NzEyZC4uNWUwOTM1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsMTEgQEAKIG9iai0kKENPTkZJR19QTSkJICAgKz0gcG0ubyBzbGVlcC5vCiBvYmotJChDT05GSUdfUE1fU0lNVEVDKQkgICArPSBwbS1zaW10ZWMubwogCisjIFMzQzI0NFggc3VwcG9ydAorCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpICArPSBzM2MyNDR4Lm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkgICs9IHMzYzI0NHgtaXJxLm8KKwogIyBTM0MyNDQwIHN1cHBvcnQKIAogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKSAgKz0gczNjMjQ0MC5vIHMzYzI0NDAtZHNjLm8KQEAgLTMxLDYgKzM2LDExIEBACiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApICArPSBzM2MyNDQwLWNsb2NrLm8KIG9iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkgICs9IHMzYzI0MTAtZ3Bpby5vCiAKKyMgUzNDMjQ0MiBzdXBwb3J0CisKK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MikgICs9IHMzYzI0NDIubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQyKSAgKz0gczNjMjQ0Mi1jbG9jay5vCisKICMgYmFzdCBleHRyYXMKIAogb2JqLSQoQ09ORklHX0JBU1RfUEMxMDRfSVJRKQkrPSBiYXN0LWlycS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCmluZGV4IDZkZTcxM2EuLjk5ZDE3NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCkBAIC03MCw3ICs3MCw3IEBACiAJCWNsa2NvbiAmPSB+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+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIFMzQzI0NDAgYW5kIFMzQzI0NDIgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0NHhfaW5pdF9jbG9ja3MgTlVMTAorI2RlZmluZSBzM2MyNDR4X2luaXRfdWFydHMgTlVMTAorI2RlZmluZSBzM2MyNDR4X21hcF9pbyBOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggNzNkZTJlYS4uNWY2NzYxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTY2LDcgKzY2LDkgQEAKIAlAQCBmbHVzaCB0aGUgY2FjaGVzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGJhY2sgb3V0IHRvCiAJQEAgU0RSQU0gYmVmb3JlIHRoZSBjb3JlIHBvd2VycyBkb3duCiAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJYmwJYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisjZW5kaWYKIAogCUBAIHByZXBhcmUgY3B1IHRvIHNsZWVwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCmluZGV4IDllMDJiYzMuLmFmNmQyNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpAQCAtNTksNiArNTksMTQgQEAKIAkJaWYgKGlyciAmIChJUlJfRVRIRVJORVQgfCBJUlJfVVNBUikpIHsKIAkJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKIAorCQkJLyoKKwkJCSAqIEFjayB0aGUgaW50ZXJydXB0IG5vdyB0byBwcmV2ZW50IHJlLWVudGVyaW5nCisJCQkgKiB0aGlzIG5lcG9uc2V0IGhhbmRsZXIuICBBZ2FpbiwgdGhpcyBpcyBzYWZlCisJCQkgKiBzaW5jZSB3ZSdsbCBjaGVjayB0aGUgSVJSIHJlZ2lzdGVyIHByaW9yIHRvCisJCQkgKiBsZWF2aW5nLgorCQkJICovCisJCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwogCQkJaWYgKGlyciAmIElSUl9FVEhFUk5FVCkgewogCQkJCWQgPSBpcnFfZGVzYyArIElSUV9ORVBPTlNFVF9TTUM5MTk2OwogCQkJCWRlc2NfaGFuZGxlX2lycShJUlFfTkVQT05TRVRfU01DOTE5NiwgZCwgcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggNzk5Njk3ZC4uY2ViZDQ4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtMTEyLDEwICsxMTIsOSBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JdmljX2luaXQoVkFfVklDX0JBU0UsIElSUV9WSUNfU1RBUlQsIH4oMSA8PCAzMSkpOworCXZpY19pbml0KFZBX1ZJQ19CQVNFLCBJUlFfVklDX1NUQVJULCB+MCk7CiAKLQlzZXRfaXJxX2hhbmRsZXIoSVJRX1ZJQ1NPVVJDRTMxLCBzaWNfaGFuZGxlX2lycSk7Ci0JZW5hYmxlX2lycShJUlFfVklDU09VUkNFMzEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9WSUNTT1VSQ0UzMSwgc2ljX2hhbmRsZV9pcnEpOwogCiAJLyogRG8gc2Vjb25kIGludGVycnVwdCBjb250cm9sbGVyICovCiAJd3JpdGVsKH4wLCBWQV9TSUNfQkFTRSArIFNJQ19JUlFfRU5BQkxFX0NMRUFSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGM1NWI3MzkuLjFmZjJmMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTIxLDggKzEyMSw4IEBACiAjIEFSTTkyNlQKIGNvbmZpZyBDUFVfQVJNOTI2VAogCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFggfHwgTUFDSF9SRUFMVklFV19FQgotCWRlZmF1bHQgeSBpZiBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWAorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgQVJDSF9QTlg0MDA4CisJZGVmYXVsdCB5IGlmIEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfUE5YNDAwOAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUSgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW0tYXJtdi5jIGIvYXJjaC9hcm0vbW0vbW0tYXJtdi5jCmluZGV4IGYxNGIyZDAuLjk1MjczZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tLWFybXYuYworKysgYi9hcmNoL2FybS9tbS9tbS1hcm12LmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCQllY2NfbWFzayA9IDA7CiAJfQogCi0JaWYgKGNwdV9hcmNoIDw9IENQVV9BUkNIX0FSTXY1VEVKKSB7CisJaWYgKGNwdV9hcmNoIDw9IENQVV9BUkNIX0FSTXY1VEVKICYmICFjcHVfaXNfeHNjYWxlKCkpIHsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWVtX3R5cGVzKTsgaSsrKSB7CiAJCQlpZiAobWVtX3R5cGVzW2ldLnByb3RfbDEpCiAJCQkJbWVtX3R5cGVzW2ldLnByb3RfbDEgfD0gUE1EX0JJVDQ7CkBAIC02MzEsNyArNjMxLDcgQEAKIAkJcGdkID0gaW5pdF9tbS5wZ2Q7CiAKIAliYXNlX3BtZHZhbCA9IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX1NFQ1RfQVBfUkVBRCB8IFBNRF9UWVBFX1NFQ1Q7Ci0JaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA8PSBDUFVfQVJDSF9BUk12NVRFSikKKwlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpIDw9IENQVV9BUkNIX0FSTXY1VEVKICYmICFjcHVfaXNfeHNjYWxlKCkpCiAJCWJhc2VfcG1kdmFsIHw9IFBNRF9CSVQ0OwogCiAJZm9yIChpID0gMDsgaSA8IEZJUlNUX1VTRVJfUEdEX05SICsgVVNFUl9QVFJTX1BFUl9QR0Q7IGkrKywgcGdkKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggODA4NzNiMy4uOGQzMmUyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTQyNywxMiArNDI3LDEzIEBACiAjZW5kaWYKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIHNldCBhdXhpbGlhcnkgY29udHJvbCByZWcKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCi0JYmljCXIwLCByMCwgIzB4MDIwMAkJCUAgLi4uLiAuLlIuIC4uLi4gLi4uLgogCWJpYwlyMCwgcjAsICMweDAwMDIJCQlAIC4uLi4gLi4uLiAuLi4uIC4uQS4KIAlvcnIJcjAsIHIwLCAjMHgwMDA1CQkJQCAuLi4uIC4uLi4gLi4uLiAuQy5NCiAjaWYgQlRCX0VOQUJMRQorCWJpYwlyMCwgcjAsICMweDAyMDAJCQlAIC4uLi4gLi5SLiAuLi4uIC4uLi4KIAlvcnIJcjAsIHIwLCAjMHgzOTAwCQkJQCAuLlZJIFouLlMgLi4uLiAuLi4uCiAjZWxzZQorCWJpYwlyMCwgcjAsICMweDBhMDAJCQlAIC4uLi4gWi5SLiAuLi4uIC4uLi4KIAlvcnIJcjAsIHIwLCAjMHgzMTAwCQkJQCAuLlZJIC4uLlMgLi4uLiAuLi4uCiAjZW5kaWYKICNpZiBMMl9DQUNIRV9FTkFCTEUKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGRhZWU2OTUuLjQwZTVhYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMTA2NiwxNCArMTA2Niw2IEBACiAJCSAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJUcmF2ZWxNYXRlIDM2MCIpLAogCQkgICAgIH0sCiAJIH0sCi0JewotCSAuY2FsbGJhY2sgPSBkaXNhYmxlX2FjcGlfcGNpLAotCSAuaWRlbnQgPSAiSFAgeHc5MzAwIiwKLQkgLm1hdGNoZXMgPSB7Ci0JCSAgICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKLQkJICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgeHc5MzAwIFdvcmtzdGF0aW9uIiksCi0JCSAgICB9LAotCX0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvZWFybHlxdWlyay5jCmluZGV4IDJlM2I2NDMuLjE2NDlhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Vhcmx5cXVpcmsuYwpAQCAtNSwxNyArNSwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisKICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KIAorI2lmZGVmIENPTkZJR19BQ1BJCisKK3N0YXRpYyBpbnQgbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgbnZpZGlhX2hwZXRfY2hlY2sodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPSAxOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrX2JyaWRnZShpbnQgdmVuZG9yLCBpbnQgZGV2aWNlKQogewogI2lmZGVmIENPTkZJR19BQ1BJCi0JLyogQWNjb3JkaW5nIHRvIE52aWRpYSBhbGwgdGltZXIgb3ZlcnJpZGVzIGFyZSBib2d1cy4gSnVzdCBpZ25vcmUKLQkgICB0aGVtIGFsbC4gKi8KKwkvKiBBY2NvcmRpbmcgdG8gTnZpZGlhIGFsbCB0aW1lciBvdmVycmlkZXMgYXJlIGJvZ3VzIHVubGVzcyBIUEVUCisJICAgaXMgZW5hYmxlZC4gKi8KIAlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlZJRElBKSB7Ci0JCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7CisJCW52aWRpYV9ocGV0X2RldGVjdGVkID0gMDsKKwkJYWNwaV90YWJsZV9wYXJzZShBQ1BJX0hQRVQsIG52aWRpYV9ocGV0X2NoZWNrKTsKKwkJaWYgKG52aWRpYV9ocGV0X2RldGVjdGVkID09IDApIHsKKwkJCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7CisJCX0KIAl9CiAjZW5kaWYKIAlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRJICYmIHRpbWVyX292ZXJfODI1NCA9PSAxKSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCAzODUyZDBhLi4xYTdiZGNlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogewogCXUxNgkJCXBvcnQgPSAwOwogCXU4CQkJYml0X3dpZHRoID0gMDsKLQlpbnQJCQlyZXQgPSAwOworCWludAkJCXJldDsKIAl1MzIJCQl2YWx1ZSA9IDA7CiAJaW50CQkJaSA9IDA7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgICAgY3B1ZnJlcV9mcmVxczsKQEAgLTE5NSw3ICsxOTUsNiBAQAogCQkJdWRlbGF5KDEwKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWkgPSAwOwogCQl2YWx1ZSA9ICh1MzIpIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbc3RhdGVdLnN0YXR1czsKIAl9CiAKQEAgLTQ0NCwxNCArNDQzLDE1IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIGFjcGlfY3B1ZnJlcV9kcml2ZXIgPSB7Ci0JLnZlcmlmeSAJPSBhY3BpX2NwdWZyZXFfdmVyaWZ5LAotCS50YXJnZXQgCT0gYWNwaV9jcHVmcmVxX3RhcmdldCwKLQkuaW5pdAkJPSBhY3BpX2NwdWZyZXFfY3B1X2luaXQsCi0JLmV4aXQJCT0gYWNwaV9jcHVmcmVxX2NwdV9leGl0LAotCS5yZXN1bWUJCT0gYWNwaV9jcHVmcmVxX3Jlc3VtZSwKLQkubmFtZQkJPSAiYWNwaS1jcHVmcmVxIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmF0dHIgICAgICAgICAgID0gYWNwaV9jcHVmcmVxX2F0dHIsCisJLnZlcmlmeQk9IGFjcGlfY3B1ZnJlcV92ZXJpZnksCisJLnRhcmdldAk9IGFjcGlfY3B1ZnJlcV90YXJnZXQsCisJLmluaXQJPSBhY3BpX2NwdWZyZXFfY3B1X2luaXQsCisJLmV4aXQJPSBhY3BpX2NwdWZyZXFfY3B1X2V4aXQsCisJLnJlc3VtZQk9IGFjcGlfY3B1ZnJlcV9yZXN1bWUsCisJLm5hbWUJPSAiYWNwaS1jcHVmcmVxIiwKKwkub3duZXIJPSBUSElTX01PRFVMRSwKKwkuYXR0cgk9IGFjcGlfY3B1ZnJlcV9hdHRyLAorCS5mbGFncwk9IENQVUZSRVFfU1RJQ0tZLAogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwppbmRleCBmMjc1ZTBkLi4wZDQ5ZDczIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIDIwMDQgIFNlYmFzdGlhbiBXaXR0IDxzZS53aXR0QGdteC5uZXQ+CisgKiAoQykgMjAwNC0yMDA2ICBTZWJhc3RpYW4gV2l0dCA8c2Uud2l0dEBnbXgubmV0PgogICoKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCiAgKiAgQmFzZWQgdXBvbiByZXZlcnNlIGVuZ2luZWVyZWQgaW5mb3JtYXRpb24KQEAgLTkwLDcgKzkwLDcgQEAKIAogCS8qIFRyeSB0byBjYWxjdWxhdGUgbXVsdGlwbGllciBhbmQgZGl2aWRlciB1cCB0byA0IHRpbWVzICovCiAJd2hpbGUgKCgobXVsID09IDApIHx8IChkaXYgPT0gMCkpICYmICh0cmllZCA8PSAzKSkgewotCQlmb3IgKHhkaXYgPSAxOyB4ZGl2IDw9IDB4ODA7IHhkaXYrKykKKwkJZm9yICh4ZGl2ID0gMjsgeGRpdiA8PSAweDgwOyB4ZGl2KyspCiAJCQlmb3IgKHhtdWwgPSAxOyB4bXVsIDw9IDB4ZmU7IHhtdWwrKykKIAkJCQlpZiAobmZvcmNlMl9jYWxjX2ZzYihORk9SQ0UyX1BMTCh4bXVsLCB4ZGl2KSkgPT0KIAkJCQkgICAgZnNiICsgdHJpZWQpIHsKQEAgLTExNyw4ICsxMTcsNyBAQAogCWludCB0ZW1wOwogCiAJLyogU2V0IHRoZSBwbGwgYWRkci4gdG8gMHgwMCAqLwotCXRlbXAgPSAweDAwOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExBRFIsIHRlbXApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExBRFIsIDApOwogCiAJLyogTm93IHdyaXRlIHRoZSB2YWx1ZSBpbiBhbGwgNjQgcmVnaXN0ZXJzICovCiAJZm9yICh0ZW1wID0gMDsgdGVtcCA8PSAweDNmOyB0ZW1wKyspCkBAIC0yNjYsNyArMjY1LDcgQEAKIAlpZiAoZnJlcXMub2xkID09IGZyZXFzLm5ldykKIAkJcmV0dXJuIDA7CiAKLQlkcHJpbnRrKEtFUk5fSU5GTyAiY3B1ZnJlcTogT2xkIENQVSBmcmVxdWVuY3kgJWQga0h6LCBuZXcgJWQga0h6XG4iLAorCWRwcmludGsoIk9sZCBDUFUgZnJlcXVlbmN5ICVkIGtIeiwgbmV3ICVkIGtIelxuIiwKIAkgICAgICAgZnJlcXMub2xkLCBmcmVxcy5uZXcpOwogCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKQEAgLTI3OCw3ICsyNzcsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IENoYW5naW5nIEZTQiB0byAlZCBmYWlsZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9mc2IpOwogCWVsc2UKLQkJZHByaW50ayhLRVJOX0lORk8gImNwdWZyZXE6IENoYW5nZWQgRlNCIHN1Y2Nlc3NmdWxseSB0byAlZFxuIiwKKwkJZHByaW50aygiQ2hhbmdlZCBGU0Igc3VjY2Vzc2Z1bGx5IHRvICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZnNiKTsKIAogCS8qIEVuYWJsZSBJUlFzICovCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggOGVmMzg1NC4uMTQ2ZjYwNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtNzcsMTMgKzc3LDE3IEBACiAKIHN0YXRpYyBjaGFyICpwcmludF9zcGVlZChpbnQgc3BlZWQpCiB7Ci0JaWYgKHNwZWVkID4gMTAwMCkgewotCQlpZiAoc3BlZWQlMTAwMCA9PSAwKQotCQkJc3ByaW50ZiAoc3BlZWRidWZmZXIsICIlZEdIeiIsIHNwZWVkLzEwMDApOwotCQllbHNlCi0JCQlzcHJpbnRmIChzcGVlZGJ1ZmZlciwgIiVkLiVkR0h6Iiwgc3BlZWQvMTAwMCwgKHNwZWVkJTEwMDApLzEwMCk7Ci0JfSBlbHNlCi0JCXNwcmludGYgKHNwZWVkYnVmZmVyLCAiJWRNSHoiLCBzcGVlZCk7CisJaWYgKHNwZWVkIDwgMTAwMCkgeworCQlzbnByaW50ZihzcGVlZGJ1ZmZlciwgc2l6ZW9mKHNwZWVkYnVmZmVyKSwiJWRNSHoiLCBzcGVlZCk7CisJCXJldHVybiBzcGVlZGJ1ZmZlcjsKKwl9CisKKwlpZiAoc3BlZWQlMTAwMCA9PSAwKQorCQlzbnByaW50ZihzcGVlZGJ1ZmZlciwgc2l6ZW9mKHNwZWVkYnVmZmVyKSwKKwkJCSIlZEdIeiIsIHNwZWVkLzEwMDApOworCWVsc2UKKwkJc25wcmludGYoc3BlZWRidWZmZXIsIHNpemVvZihzcGVlZGJ1ZmZlciksCisJCQkiJWQuJWRHSHoiLCBzcGVlZC8xMDAwLCAoc3BlZWQlMTAwMCkvMTAwKTsKIAogCXJldHVybiBzcGVlZGJ1ZmZlcjsKIH0KQEAgLTY3NSw3ICs2NzksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbG9uZ2hhdWxfZXhpdCh2b2lkKQogewotCWludCBpPTA7CisJaW50IGk7CiAKIAlmb3IgKGk9MDsgaSA8IG51bXNjYWxlczsgaSsrKSB7CiAJCWlmIChjbG9ja19yYXRpb1tpXSA9PSBtYXhtdWx0KSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCmluZGV4IGUzODY4ZGUuLmIyNjg5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCkBAIC0yMjMsNyArMjIzLDYgQEAKIAkJLyogc2V0IHRvIDAgdG8gdHJ5X2hpIHBlcmZfcGN0ZyAqLwogCQltc3JfbG8gJj0gMHhGRkZGRkY4MDsKIAkJbXNyX2hpICY9IDB4RkZGRkZGODA7Ci0JCW1zcl9sbyB8PSAwOwogCQltc3JfaGkgfD0gdHJ5X2hpOwogCQl3cm1zcihNU1JfVE1UQV9MT05HUlVOX0NUUkwsIG1zcl9sbywgbXNyX2hpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCmluZGV4IDJiZjQyMzcuLjY5NGQ0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKQEAgLTQ1MiwyMyArNDUyLDIzIEBACiAKIAkJCXBzdCA9IChzdHJ1Y3QgcHN0X3MgKikgcDsKIAotCQkJZm9yIChpID0gMCA7IGkgPHBzYi0+bnVtcHN0OyBpKyspIHsKKwkJCWZvciAoaj0wOyBqPHBzYi0+bnVtcHN0OyBqKyspIHsKIAkJCQlwc3QgPSAoc3RydWN0IHBzdF9zICopIHA7CiAJCQkJbnVtYmVyX3NjYWxlcyA9IHBzdC0+bnVtcHN0YXRlczsKIAogCQkJCWlmICgoZXR1cGxlID09IHBzdC0+Y3B1aWQpICYmIGNoZWNrX2ZzYihwc3QtPmZzYnNwZWVkKSAmJgogCQkJCSAgICAobWF4ZmlkPT1wc3QtPm1heGZpZCkgJiYgKHN0YXJ0dmlkPT1wc3QtPnN0YXJ0dmlkKSkKIAkJCQl7Ci0JCQkJCWRwcmludGsgKCJQU1Q6JWQgKEAlcClcbiIsIGksIHBzdCk7CisJCQkJCWRwcmludGsgKCJQU1Q6JWQgKEAlcClcbiIsIGosIHBzdCk7CiAJCQkJCWRwcmludGsgKCIgY3B1aWQ6IDB4JXggIGZzYjogJWQgIG1heEZJRDogMHgleCAgc3RhcnR2aWQ6IDB4JXhcbiIsCiAJCQkJCQkgcHN0LT5jcHVpZCwgcHN0LT5mc2JzcGVlZCwgcHN0LT5tYXhmaWQsIHBzdC0+c3RhcnR2aWQpOwogCiAJCQkJCXJldCA9IGdldF9yYW5nZXMgKChjaGFyICopIHBzdCArIHNpemVvZiAoc3RydWN0IHBzdF9zKSk7CiAJCQkJCXJldHVybiByZXQ7Ci0KIAkJCQl9IGVsc2UgeworCQkJCQl1bnNpZ25lZCBpbnQgazsKIAkJCQkJcCA9IChjaGFyICopIHBzdCArIHNpemVvZiAoc3RydWN0IHBzdF9zKTsKLQkJCQkJZm9yIChqPTAgOyBqIDwgbnVtYmVyX3NjYWxlczsgaisrKQorCQkJCQlmb3IgKGs9MDsgazxudW1iZXJfc2NhbGVzOyBrKyspCiAJCQkJCQlwKz0yOwogCQkJCX0KIAkJCX0KQEAgLTU4MSwxMCArNTgxLDcgQEAKIAogCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAotCS8qIHJlY2FsaWJyYXRlIGNwdV9raHogKi8KLQlyZXN1bHQgPSByZWNhbGlicmF0ZV9jcHVfa2h6KCk7Ci0JaWYgKHJlc3VsdCkKLQkJcmV0dXJuIHJlc3VsdDsKKwlyZWNhbGlicmF0ZV9jcHVfa2h6KCk7CiAKIAlmc2IgPSAoMTAgKiBjcHVfa2h6KSAvIGZpZF9jb2Rlc1tmaWR2aWRzdGF0dXMuYml0cy5DRklEXTsKIAlpZiAoIWZzYikgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDcxZmZmYTEuLmI0Mjc3ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogICAoYykgMjAwMywgMjAwNCwgMjAwNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiAgIChjKSAyMDAzLTIwMDYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgogICogIFlvdXIgdXNlIG9mIHRoaXMgY29kZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKICAqICBHTlUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIDIuIFNlZSAiQ09QWUlORyIgb3IKICAqICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKQEAgLTE0LDEzICsxNCwxMyBAQAogICogIEJhc2VkIHVwb24gZGF0YXNoZWV0cyAmIHNhbXBsZSBDUFVzIGtpbmRseSBwcm92aWRlZCBieSBBTUQuCiAgKgogICogIFZhbHVhYmxlIGlucHV0IGdyYXRlZnVsbHkgcmVjZWl2ZWQgZnJvbSBEYXZlIEpvbmVzLCBQYXZlbCBNYWNoZWssCi0gKiAgRG9taW5payBCcm9kb3dza2ksIGFuZCBvdGhlcnMuCisgKiAgRG9taW5payBCcm9kb3dza2ksIEphY29iIFNoaW4sIGFuZCBvdGhlcnMuCiAgKiAgT3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgUGF1bCBEZXZyaWVuZHQuCiAgKiAgUHJvY2Vzc29yIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gQ2hhcHRlciA5IChQb3dlciBhbmQgVGhlcm1hbCBNYW5hZ2VtZW50KQogICogIG9mIHRoZSAiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciB0aGUgQU1EIEF0aGxvbiA2NCBhbmQgQU1ECiAgKiAgT3B0ZXJvbiBQcm9jZXNzb3JzIiBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20gd3d3LmFtZC5jb20KICAqCi0gKiAgVGFibGVzIGZvciBzcGVjaWZpYyBDUFVzIGNhbiBiZSBpbmZyZXJyZWQgZnJvbQorICogIFRhYmxlcyBmb3Igc3BlY2lmaWMgQ1BVcyBjYW4gYmUgaW5mZXJyZWQgZnJvbQogICogICAgIGh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMwNDMwLnBkZgogICovCiAKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogI2RlZmluZSBQRlggInBvd2Vybm93LWs4OiAiCiAjZGVmaW5lIEJGWCBQRlggIkJJT1MgZXJyb3I6ICIKLSNkZWZpbmUgVkVSU0lPTiAidmVyc2lvbiAxLjYwLjIiCisjZGVmaW5lIFZFUlNJT04gInZlcnNpb24gMi4wMC4wMCIKICNpbmNsdWRlICJwb3dlcm5vdy1rOC5oIgogCiAvKiBzZXJpYWxpemUgZnJlcSBjaGFuZ2VzICAqLwpAQCAtNTQsNiArNTQsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKnBvd2Vybm93X2RhdGFbTlJfQ1BVU107CiAKK3N0YXRpYyBpbnQgY3B1X2ZhbWlseSA9IENQVV9PUFRFUk9OOworCiAjaWZuZGVmIENPTkZJR19TTVAKIHN0YXRpYyBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwWzFdOwogI2VuZGlmCkBAIC02NCwxNiArNjYsMzYgQEAKIAlyZXR1cm4gODAwICsgKGZpZCAqIDEwMCk7CiB9CiAKKwogLyogUmV0dXJuIGEgZnJlcXVlbmN5IGluIEtIeiwgZ2l2ZW4gYW4gaW5wdXQgZmlkICovCiBzdGF0aWMgdTMyIGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQodTMyIGZpZCkKIHsKIAlyZXR1cm4gMTAwMCAqIGZpbmRfZnJlcV9mcm9tX2ZpZChmaWQpOwogfQogCi0vKiBSZXR1cm4gYSB2b2x0YWdlIGluIG1pbGlWb2x0cywgZ2l2ZW4gYW4gaW5wdXQgdmlkICovCi1zdGF0aWMgdTMyIGZpbmRfbWlsbGl2b2x0c19mcm9tX3ZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHZpZCkKKy8qIFJldHVybiBhIGZyZXF1ZW5jeSBpbiBNSHosIGdpdmVuIGFuIGlucHV0IGZpZCBhbmQgZGlkICovCitzdGF0aWMgdTMyIGZpbmRfZnJlcV9mcm9tX2ZpZGRpZCh1MzIgZmlkLCB1MzIgZGlkKQogewotCXJldHVybiAxNTUwLXZpZCoyNTsKKwlyZXR1cm4gMTAwICogKGZpZCArIDB4MTApID4+IGRpZDsKK30KKworc3RhdGljIHUzMiBmaW5kX2toel9mcmVxX2Zyb21fZmlkZGlkKHUzMiBmaWQsIHUzMiBkaWQpCit7CisJcmV0dXJuIDEwMDAgKiBmaW5kX2ZyZXFfZnJvbV9maWRkaWQoZmlkLCBkaWQpOworfQorCitzdGF0aWMgdTMyIGZpbmRfZmlkX2Zyb21fcHN0YXRlKHUzMiBwc3RhdGUpCit7CisJdTMyIGhpLCBsbzsKKwlyZG1zcihNU1JfUFNUQVRFX0RFRl9CQVNFICsgcHN0YXRlLCBsbywgaGkpOworCXJldHVybiBsbyAmIEhXX1BTVEFURV9GSURfTUFTSzsKK30KKworc3RhdGljIHUzMiBmaW5kX2RpZF9mcm9tX3BzdGF0ZSh1MzIgcHN0YXRlKQoreworCXUzMiBoaSwgbG87CisJcmRtc3IoTVNSX1BTVEFURV9ERUZfQkFTRSArIHBzdGF0ZSwgbG8sIGhpKTsKKwlyZXR1cm4gKGxvICYgSFdfUFNUQVRFX0RJRF9NQVNLKSA+PiBIV19QU1RBVEVfRElEX1NISUZUOwogfQogCiAvKiBSZXR1cm4gdGhlIHZjbyBmaWQgZm9yIGFuIGlucHV0IGZpZApAQCAtOTgsNiArMTIwLDkgQEAKIHsKIAl1MzIgbG8sIGhpOwogCisJaWYgKGNwdV9mYW1pbHkpCisJCXJldHVybiAwOworCiAJcmRtc3IoTVNSX0ZJRFZJRF9TVEFUVVMsIGxvLCBoaSk7CiAJcmV0dXJuIGxvICYgTVNSX1NfTE9fQ0hBTkdFX1BFTkRJTkcgPyAxIDogMDsKIH0KQEAgLTExMSw2ICsxMzYsMTQgQEAKIAl1MzIgbG8sIGhpOwogCXUzMiBpID0gMDsKIAorCWlmIChjcHVfZmFtaWx5KSB7CisJCXJkbXNyKE1TUl9QU1RBVEVfU1RBVFVTLCBsbywgaGkpOworCQlpID0gbG8gJiBIV19QU1RBVEVfTUFTSzsKKwkJcmRtc3IoTVNSX1BTVEFURV9ERUZfQkFTRSArIGksIGxvLCBoaSk7CisJCWRhdGEtPmN1cnJmaWQgPSBsbyAmIEhXX1BTVEFURV9GSURfTUFTSzsKKwkJZGF0YS0+Y3VycmRpZCA9IChsbyAmIEhXX1BTVEFURV9ESURfTUFTSykgPj4gSFdfUFNUQVRFX0RJRF9TSElGVDsKKwkJcmV0dXJuIDA7CisJfQogCWRvIHsKIAkJaWYgKGkrKyA+IDEwMDAwKSB7CiAJCQlkcHJpbnRrKCJkZXRlY3RlZCBjaGFuZ2UgcGVuZGluZyBzdHVja1xuIik7CkBAIC0xNzUsNyArMjA4LDcgQEAKIAlkbyB7CiAJCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgZGF0YS0+cGxsbG9jayAqIFBMTF9MT0NLX0NPTlZFUlNJT04pOwogCQlpZiAoaSsrID4gMTAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnRlcm5hbCBlcnJvciAtIHBlbmRpbmcgYml0IHZlcnkgc3R1Y2sgLSBubyBmdXJ0aGVyIHBzdGF0ZSBjaGFuZ2VzIHBvc3NpYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkhhcmR3YXJlIGVycm9yIC0gcGVuZGluZyBiaXQgdmVyeSBzdHVjayAtIG5vIGZ1cnRoZXIgcHN0YXRlIGNoYW5nZXMgcG9zc2libGVcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IHdoaWxlIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSk7CkBAIC0yNTUsNyArMjg4LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENoYW5nZSB0aGUgZmlkIGFuZCB2aWQsIGJ5IHRoZSAzIHBoYXNlcy4gKi8KKy8qIENoYW5nZSBoYXJkd2FyZSBwc3RhdGUgYnkgc2luZ2xlIE1TUiB3cml0ZSAqLworc3RhdGljIGludCB0cmFuc2l0aW9uX3BzdGF0ZShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHBzdGF0ZSkKK3sKKwl3cm1zcihNU1JfUFNUQVRFX0NUUkwsIHBzdGF0ZSwgMCk7CisJZGF0YS0+Y3VycmZpZCA9IGZpbmRfZmlkX2Zyb21fcHN0YXRlKHBzdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENoYW5nZSBPcHRlcm9uL0F0aGxvbjY0IGZpZCBhbmQgdmlkLCBieSB0aGUgMyBwaGFzZXMuICovCiBzdGF0aWMgaW50IHRyYW5zaXRpb25fZmlkX3ZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcWZpZCwgdTMyIHJlcXZpZCkKIHsKIAlpZiAoY29yZV92b2x0YWdlX3ByZV90cmFuc2l0aW9uKGRhdGEsIHJlcXZpZCkpCkBAIC00NzQsMjYgKzUxNSwzNSBAQAogCQlnb3RvIG91dDsKIAogCWVheCA9IGNwdWlkX2VheChDUFVJRF9QUk9DRVNTT1JfU0lHTkFUVVJFKTsKLQlpZiAoKGVheCAmIENQVUlEX1hGQU0pICE9IENQVUlEX1hGQU1fSzgpCisJaWYgKCgoZWF4ICYgQ1BVSURfWEZBTSkgIT0gQ1BVSURfWEZBTV9LOCkgJiYKKwkgICAgKChlYXggJiBDUFVJRF9YRkFNKSA8IENQVUlEX1hGQU1fMTBIKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoKChlYXggJiBDUFVJRF9VU0VfWEZBTV9YTU9EKSAhPSBDUFVJRF9VU0VfWEZBTV9YTU9EKSB8fAotCSAgICAoKGVheCAmIENQVUlEX1hNT0QpID4gQ1BVSURfWE1PRF9SRVZfRykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByb2Nlc3NvciBjcHVpZCAleCBub3Qgc3VwcG9ydGVkXG4iLCBlYXgpOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKChlYXggJiBDUFVJRF9YRkFNKSA9PSBDUFVJRF9YRkFNX0s4KSB7CisJCWlmICgoKGVheCAmIENQVUlEX1VTRV9YRkFNX1hNT0QpICE9IENQVUlEX1VTRV9YRkFNX1hNT0QpIHx8CisJCSAgICAoKGVheCAmIENQVUlEX1hNT0QpID4gQ1BVSURfWE1PRF9SRVZfRykpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJQcm9jZXNzb3IgY3B1aWQgJXggbm90IHN1cHBvcnRlZFxuIiwgZWF4KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLQllYXggPSBjcHVpZF9lYXgoQ1BVSURfR0VUX01BWF9DQVBBQklMSVRJRVMpOwotCWlmIChlYXggPCBDUFVJRF9GUkVRX1ZPTFRfQ0FQQUJJTElUSUVTKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCSAgICAgICAiTm8gZnJlcXVlbmN5IGNoYW5nZSBjYXBhYmlsaXRpZXMgZGV0ZWN0ZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9CisJCWVheCA9IGNwdWlkX2VheChDUFVJRF9HRVRfTUFYX0NBUEFCSUxJVElFUyk7CisJCWlmIChlYXggPCBDUFVJRF9GUkVRX1ZPTFRfQ0FQQUJJTElUSUVTKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJICAgICAgICJObyBmcmVxdWVuY3kgY2hhbmdlIGNhcGFiaWxpdGllcyBkZXRlY3RlZFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQogCi0JY3B1aWQoQ1BVSURfRlJFUV9WT0xUX0NBUEFCSUxJVElFUywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0JaWYgKChlZHggJiBQX1NUQVRFX1RSQU5TSVRJT05fQ0FQQUJMRSkgIT0gUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBvd2VyIHN0YXRlIHRyYW5zaXRpb25zIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlnb3RvIG91dDsKKwkJY3B1aWQoQ1BVSURfRlJFUV9WT0xUX0NBUEFCSUxJVElFUywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisJCWlmICgoZWR4ICYgUF9TVEFURV9UUkFOU0lUSU9OX0NBUEFCTEUpICE9IFBfU1RBVEVfVFJBTlNJVElPTl9DQVBBQkxFKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUG93ZXIgc3RhdGUgdHJhbnNpdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7IC8qIG11c3QgYmUgYSBIVyBQc3RhdGUgY2FwYWJsZSBwcm9jZXNzb3IgKi8KKwkJY3B1aWQoQ1BVSURfRlJFUV9WT0xUX0NBUEFCSUxJVElFUywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisJCWlmICgoZWR4ICYgVVNFX0hXX1BTVEFURSkgPT0gVVNFX0hXX1BTVEFURSkKKwkJCWNwdV9mYW1pbHkgPSBDUFVfSFdfUFNUQVRFOworCQllbHNlCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyYyA9IDE7CkBAIC01NDcsMTIgKzU5NywxOCBAQAogewogCWludCBqOwogCWZvciAoaiA9IDA7IGogPCBkYXRhLT5udW1wczsgaisrKSB7Ci0JCWlmIChkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgICVkIDogZmlkIDB4JXggKCVkIE1IeiksIHZpZCAweCV4ICglZCBtVilcbiIsIGosCisJCWlmIChkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKSB7CisJCQlpZiAoY3B1X2ZhbWlseSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgICVkIDogZmlkIDB4JXggZ2lkIDB4JXggKCVkIE1IeilcbiIsIGosIChkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5pbmRleCAmIDB4ZmYwMCkgPj4gOCwKKwkJCQkoZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXggJiAweGZmMDAwMCkgPj4gMTYsCisJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5LzEwMDApOworCQkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICIgICAlZCA6IGZpZCAweCV4ICglZCBNSHopLCB2aWQgMHgleFxuIiwgaiwKIAkJCQlkYXRhLT5wb3dlcm5vd190YWJsZVtqXS5pbmRleCAmIDB4ZmYsCiAJCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uZnJlcXVlbmN5LzEwMDAsCi0JCQkJZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXggPj4gOCwKLQkJCQlmaW5kX21pbGxpdm9sdHNfZnJvbV92aWQoZGF0YSwgZGF0YS0+cG93ZXJub3dfdGFibGVbal0uaW5kZXggPj4gOCkpOworCQkJCWRhdGEtPnBvd2Vybm93X3RhYmxlW2pdLmluZGV4ID4+IDgpOworCQkJfQorCQl9CiAJfQogCWlmIChkYXRhLT5iYXRwcykKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk9ubHkgJWQgcHN0YXRlcyBvbiBiYXR0ZXJ5XG4iLCBkYXRhLT5iYXRwcyk7CkBAIC03MDIsNyArNzU4LDcgQEAKICNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKIHN0YXRpYyB2b2lkIHBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KQogewotCWlmICghZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50KQorCWlmICghZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IHx8IGNwdV9mYW1pbHkpCiAJCXJldHVybjsKIAogCWRhdGEtPmlydCA9IChkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2luZGV4XS5jb250cm9sID4+IElSVF9TSElGVCkgJiBJUlRfTUFTSzsKQEAgLTcxNSw5ICs3NzEsOCBAQAogCiBzdGF0aWMgaW50IHBvd2Vybm93X2s4X2NwdV9pbml0X2FjcGkoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7Ci0JaW50IGk7Ci0JaW50IGNudGxvZnJlcSA9IDA7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZTsKKwlpbnQgcmV0X3ZhbDsKIAogCWlmIChhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpKSB7CiAJCWRwcmludGsoInJlZ2lzdGVyIHBlcmZvcm1hbmNlIGZhaWxlZDogYmFkIEFDUEkgZGF0YVxuIik7CkBAIC03NDYsNiArODAxLDg1IEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKKwlpZiAoY3B1X2ZhbWlseSkKKwkJcmV0X3ZhbCA9IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKGRhdGEsIHBvd2Vybm93X3RhYmxlKTsKKwllbHNlCisJCXJldF92YWwgPSBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChkYXRhLCBwb3dlcm5vd190YWJsZSk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gZXJyX291dF9tZW07CisKKwlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCXBvd2Vybm93X3RhYmxlW2RhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudF0uaW5kZXggPSAwOworCWRhdGEtPnBvd2Vybm93X3RhYmxlID0gcG93ZXJub3dfdGFibGU7CisKKwkvKiBmaWxsIGluIGRhdGEgKi8KKwlkYXRhLT5udW1wcyA9IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudDsKKwlwcmludF9iYXNpY3MoZGF0YSk7CisJcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKGRhdGEsIDApOworCisJLyogbm90aWZ5IEJJT1MgdGhhdCB3ZSBleGlzdCAqLworCWFjcGlfcHJvY2Vzc29yX25vdGlmeV9zbW0oVEhJU19NT0RVTEUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfbWVtOgorCWtmcmVlKHBvd2Vybm93X3RhYmxlKTsKKworZXJyX291dDoKKwlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsIGRhdGEtPmNwdSk7CisKKwkvKiBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgaW5mb3JtcyB1cyBhdCAtPmV4aXQoKSB3aGV0aGVyIEFDUEkgd2FzIHVzZWQgKi8KKwlkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgPSAwOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50OyBpKyspIHsKKwkJdTMyIGluZGV4OworCQl1MzIgaGkgPSAwLCBsbyA9IDA7CisJCXUzMiBmaWQ7CisJCXUzMiBkaWQ7CisKKwkJaW5kZXggPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLmNvbnRyb2wgJiBIV19QU1RBVEVfTUFTSzsKKwkJaWYgKGluZGV4ID4gTUFYX0hXX1BTVEFURSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCBwc3RhdGUgJWQgLSBiYWQgdmFsdWUgJWQuXG4iLCBpLCBpbmRleCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJQbGVhc2UgcmVwb3J0IHRvIEJJT1MgbWFudWZhY3R1cmVyXG4iKTsKKwkJfQorCQlyZG1zcihNU1JfUFNUQVRFX0RFRl9CQVNFICsgaW5kZXgsIGxvLCBoaSk7CisJCWlmICghKGhpICYgSFdfUFNUQVRFX1ZBTElEX01BU0spKSB7CisJCQlkcHJpbnRrKCJpbnZhbGlkIHBzdGF0ZSAlZCwgaWdub3JpbmdcbiIsIGluZGV4KTsKKwkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZmlkID0gbG8gJiBIV19QU1RBVEVfRklEX01BU0s7CisJCWRpZCA9IChsbyAmIEhXX1BTVEFURV9ESURfTUFTSykgPj4gSFdfUFNUQVRFX0RJRF9TSElGVDsKKworCQlkcHJpbnRrKCIgICAlZCA6IGZpZCAweCV4LCBkaWQgMHgleFxuIiwgaW5kZXgsIGZpZCwgZGlkKTsKKworCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCA9IGluZGV4IHwgKGZpZCA8PCBIV19GSURfSU5ERVhfU0hJRlQpIHwgKGRpZCA8PCBIV19ESURfSU5ERVhfU0hJRlQpOworCisJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWRkaWQoZmlkLCBkaWQpOworCisJCWlmIChwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgIT0gKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgZnJlcSBlbnRyaWVzICV1IGtIeiB2cy4gJXUga0h6XG4iLAorCQkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSwKKwkJCQkodW5zaWduZWQgaW50KSAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDApKTsKKwkJCXBvd2Vybm93X3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfZmlkdmlkKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKQoreworCWludCBpOworCWludCBjbnRsb2ZyZXEgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7IGkrKykgewogCQl1MzIgZmlkOwogCQl1MzIgdmlkOwpAQCAtNzg2LDcgKzkyMCw3IEBACiAJCQkJaWYgKChwb3dlcm5vd190YWJsZVtpXS5mcmVxdWVuY3kgIT0gcG93ZXJub3dfdGFibGVbY250bG9mcmVxXS5mcmVxdWVuY3kpIHx8CiAJCQkJICAgIChwb3dlcm5vd190YWJsZVtpXS5pbmRleCAhPSBwb3dlcm5vd190YWJsZVtjbnRsb2ZyZXFdLmluZGV4KSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJUb28gbWFueSBsbyBmcmVxIHRhYmxlIGVudHJpZXNcbiIpOwotCQkJCQlnb3RvIGVycl9vdXRfbWVtOworCQkJCQlyZXR1cm4gMTsKIAkJCQl9CiAKIAkJCQlkcHJpbnRrKCJkb3VibGUgbG93IGZyZXF1ZW5jeSB0YWJsZSBlbnRyeSwgaWdub3JpbmcgaXQuXG4iKTsKQEAgLTgwNCwzMSArOTM4LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQotCi0JcG93ZXJub3dfdGFibGVbZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50XS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKLQlwb3dlcm5vd190YWJsZVtkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnRdLmluZGV4ID0gMDsKLQlkYXRhLT5wb3dlcm5vd190YWJsZSA9IHBvd2Vybm93X3RhYmxlOwotCi0JLyogZmlsbCBpbiBkYXRhICovCi0JZGF0YS0+bnVtcHMgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7Ci0JcHJpbnRfYmFzaWNzKGRhdGEpOwotCXBvd2Vybm93X2s4X2FjcGlfcHN0X3ZhbHVlcyhkYXRhLCAwKTsKLQotCS8qIG5vdGlmeSBCSU9TIHRoYXQgd2UgZXhpc3QgKi8KLQlhY3BpX3Byb2Nlc3Nvcl9ub3RpZnlfc21tKFRISVNfTU9EVUxFKTsKLQogCXJldHVybiAwOwotCi1lcnJfb3V0X21lbToKLQlrZnJlZShwb3dlcm5vd190YWJsZSk7Ci0KLWVycl9vdXQ6Ci0JYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBkYXRhLT5jcHUpOwotCi0JLyogZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IGluZm9ybXMgdXMgYXQgLT5leGl0KCkgd2hldGhlciBBQ1BJIHdhcyB1c2VkICovCi0JZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50ID0gMDsKLQotCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9jcHVfZXhpdF9hY3BpKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhKQpAQCAtODQ0LDIwICs5NTQsMjAgQEAKICNlbmRpZiAvKiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkgKi8KIAogLyogVGFrZSBhIGZyZXF1ZW5jeSwgYW5kIGlzc3VlIHRoZSBmaWQvdmlkIHRyYW5zaXRpb24gY29tbWFuZCAqLwotc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeShzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIGludCB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKLQl1MzIgZmlkOwotCXUzMiB2aWQ7CisJdTMyIGZpZCA9IDA7CisJdTMyIHZpZCA9IDA7CiAJaW50IHJlcywgaTsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAogCWRwcmludGsoImNwdSAlZCB0cmFuc2l0aW9uIHRvIGluZGV4ICV1XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGluZGV4KTsKIAorCS8qIGZpZC92aWQgY29ycmVjdG5lc3MgY2hlY2sgZm9yIGs4ICovCiAJLyogZmlkIGFyZSB0aGUgbG93ZXIgOCBiaXRzIG9mIHRoZSBpbmRleCB3ZSBzdG9yZWQgaW50bwotCSAqIHRoZSBjcHVmcmVxIGZyZXF1ZW5jeSB0YWJsZSBpbiBmaW5kX3BzYl90YWJsZSwgdmlkIGFyZQotCSAqIHRoZSB1cHBlciA4IGJpdHMuCisJICogdGhlIGNwdWZyZXEgZnJlcXVlbmN5IHRhYmxlIGluIGZpbmRfcHNiX3RhYmxlLCB2aWQKKwkgKiBhcmUgdGhlIHVwcGVyIDggYml0cy4KIAkgKi8KLQogCWZpZCA9IGRhdGEtPnBvd2Vybm93X3RhYmxlW2luZGV4XS5pbmRleCAmIDB4RkY7CiAJdmlkID0gKGRhdGEtPnBvd2Vybm93X3RhYmxlW2luZGV4XS5pbmRleCAmIDB4RkYwMCkgPj4gODsKIApAQCAtODgxLDIyICs5OTEsNTggQEAKIAogCWRwcmludGsoImNwdSAlZCwgY2hhbmdpbmcgdG8gZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksIGZpZCwgdmlkKTsKLQotCWZyZXFzLmNwdSA9IGRhdGEtPmNwdTsKIAlmcmVxcy5vbGQgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZmlkKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfY29yZV9tYXBbZGF0YS0+Y3B1XSkgeworCisJZm9yX2VhY2hfY3B1X21hc2soaSwgKihkYXRhLT5hdmFpbGFibGVfY29yZXMpKSB7CiAJCWZyZXFzLmNwdSA9IGk7CiAJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAJfQogCiAJcmVzID0gdHJhbnNpdGlvbl9maWRfdmlkKGRhdGEsIGZpZCwgdmlkKTsKLQogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7Ci0JZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X2NvcmVfbWFwW2RhdGEtPmNwdV0pIHsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGksICooZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSkgewogCQlmcmVxcy5jcHUgPSBpOwogCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKLSAgICAgICAgfQorCX0KKwlyZXR1cm4gcmVzOworfQorCisvKiBUYWtlIGEgZnJlcXVlbmN5LCBhbmQgaXNzdWUgdGhlIGhhcmR3YXJlIHBzdGF0ZSB0cmFuc2l0aW9uIGNvbW1hbmQgKi8KK3N0YXRpYyBpbnQgdHJhbnNpdGlvbl9mcmVxdWVuY3lfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJdTMyIGZpZCA9IDA7CisJdTMyIGRpZCA9IDA7CisJdTMyIHBzdGF0ZSA9IDA7CisJaW50IHJlcywgaTsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKKworCWRwcmludGsoImNwdSAlZCB0cmFuc2l0aW9uIHRvIGluZGV4ICV1XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGluZGV4KTsKKworCS8qIGdldCBmaWQgZGlkIGZvciBoYXJkd2FyZSBwc3RhdGUgdHJhbnNpdGlvbiAqLworCXBzdGF0ZSA9IGluZGV4ICYgSFdfUFNUQVRFX01BU0s7CisJaWYgKHBzdGF0ZSA+IE1BWF9IV19QU1RBVEUpCisJCXJldHVybiAwOworCWZpZCA9IChpbmRleCAmIEhXX0ZJRF9JTkRFWF9NQVNLKSA+PiBIV19GSURfSU5ERVhfU0hJRlQ7CisJZGlkID0gKGluZGV4ICYgSFdfRElEX0lOREVYX01BU0spID4+IEhXX0RJRF9JTkRFWF9TSElGVDsKKwlmcmVxcy5vbGQgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkZGlkKGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJkaWQpOworCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWRkaWQoZmlkLCBkaWQpOworCisJZm9yX2VhY2hfY3B1X21hc2soaSwgKihkYXRhLT5hdmFpbGFibGVfY29yZXMpKSB7CisJCWZyZXFzLmNwdSA9IGk7CisJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CisJfQorCisJcmVzID0gdHJhbnNpdGlvbl9wc3RhdGUoZGF0YSwgcHN0YXRlKTsKKwlkYXRhLT5jdXJyZmlkID0gZmluZF9maWRfZnJvbV9wc3RhdGUocHN0YXRlKTsKKwlkYXRhLT5jdXJyZGlkID0gZmluZF9kaWRfZnJvbV9wc3RhdGUocHN0YXRlKTsKKwlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkZGlkKGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJkaWQpOworCisJZm9yX2VhY2hfY3B1X21hc2soaSwgKihkYXRhLT5hdmFpbGFibGVfY29yZXMpKSB7CisJCWZyZXFzLmNwdSA9IGk7CisJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOworCX0KIAlyZXR1cm4gcmVzOwogfQogCkBAIC05MzMsMTggKzEwNzksMjEgQEAKIAlkcHJpbnRrKCJ0YXJnOiBjcHUgJWQsICVkIGtIeiwgbWluICVkLCBtYXggJWQsIHJlbGF0aW9uICVkXG4iLAogCQlwb2wtPmNwdSwgdGFyZ2ZyZXEsIHBvbC0+bWluLCBwb2wtPm1heCwgcmVsYXRpb24pOwogCi0JaWYgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKSB7Ci0JCXJldCA9IC1FSU87CisJaWYgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKQogCQlnb3RvIGVycl9vdXQ7Ci0JfQogCi0JZHByaW50aygidGFyZzogY3VyciBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCisJaWYgKGNwdV9mYW1pbHkpCisJCWRwcmludGsoInRhcmc6IGN1cnIgZmlkIDB4JXgsIGRpZCAweCV4XG4iLAorCQkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CisJZWxzZSB7CisJCWRwcmludGsoInRhcmc6IGN1cnIgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAotCWlmICgoY2hlY2t2aWQgIT0gZGF0YS0+Y3VycnZpZCkgfHwgKGNoZWNrZmlkICE9IGRhdGEtPmN1cnJmaWQpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCQkiZXJyb3IgLSBvdXQgb2Ygc3luYywgZml4IDB4JXggMHgleCwgdmlkIDB4JXggMHgleFxuIiwKLQkJCWNoZWNrZmlkLCBkYXRhLT5jdXJyZmlkLCBjaGVja3ZpZCwgZGF0YS0+Y3VycnZpZCk7CisJCWlmICgoY2hlY2t2aWQgIT0gZGF0YS0+Y3VycnZpZCkgfHwgKGNoZWNrZmlkICE9IGRhdGEtPmN1cnJmaWQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCSJlcnJvciAtIG91dCBvZiBzeW5jLCBmaXggMHgleCAweCV4LCB2aWQgMHgleCAweCV4XG4iLAorCQkJCWNoZWNrZmlkLCBkYXRhLT5jdXJyZmlkLCBjaGVja3ZpZCwgZGF0YS0+Y3VycnZpZCk7CisJCX0KIAl9CiAKIAlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbCwgZGF0YS0+cG93ZXJub3dfdGFibGUsIHRhcmdmcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKQEAgLTk1NCw3ICsxMTAzLDExIEBACiAKIAlwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoZGF0YSwgbmV3c3RhdGUpOwogCi0JaWYgKHRyYW5zaXRpb25fZnJlcXVlbmN5KGRhdGEsIG5ld3N0YXRlKSkgeworCWlmIChjcHVfZmFtaWx5KQorCQlyZXQgPSB0cmFuc2l0aW9uX2ZyZXF1ZW5jeV9wc3RhdGUoZGF0YSwgbmV3c3RhdGUpOworCWVsc2UKKwkJcmV0ID0gdHJhbnNpdGlvbl9mcmVxdWVuY3lfZmlkdmlkKGRhdGEsIG5ld3N0YXRlKTsKKwlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggInRyYW5zaXRpb24gZnJlcXVlbmN5IGZhaWxlZFxuIik7CiAJCXJldCA9IDE7CiAJCW11dGV4X3VubG9jaygmZmlkdmlkX211dGV4KTsKQEAgLTk2Miw3ICsxMTE1LDEwIEBACiAJfQogCW11dGV4X3VubG9jaygmZmlkdmlkX211dGV4KTsKIAotCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKKwlpZiAoY3B1X2ZhbWlseSkKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkZGlkKGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJkaWQpOworCWVsc2UKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCXJldCA9IDA7CiAKIGVycl9vdXQ6CkBAIC0xMDA3LDE0ICsxMTYzLDEzIEBACiAJCSAqIFVzZSB0aGUgUFNCIEJJT1Mgc3RydWN0dXJlLiBUaGlzIGlzIG9ubHkgYXZhaWxhYmUgb24KIAkJICogYW4gVVAgdmVyc2lvbiwgYW5kIGlzIGRlcHJlY2F0ZWQgYnkgQU1ELgogCQkgKi8KLQogCQlpZiAoKG51bV9vbmxpbmVfY3B1cygpICE9IDEpIHx8IChudW1fcG9zc2libGVfY3B1cygpICE9IDEpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJNUCBzeXN0ZW1zIG5vdCBzdXBwb3J0ZWQgYnkgUFNCIEJJT1Mgc3RydWN0dXJlXG4iKTsKIAkJCWtmcmVlKGRhdGEpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAkJaWYgKHBvbC0+Y3B1ICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggImluaXQgbm90IGNwdSAwXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIF9QU1Mgb2JqZWN0cyBmb3IgQ1BVIG90aGVyIHRoYW4gQ1BVMFxuIik7CiAJCQlrZnJlZShkYXRhKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC0xMDQyLDIwICsxMTk3LDI4IEBACiAJaWYgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlmaWR2aWRfbXNyX2luaXQoKTsKKwlpZiAoIWNwdV9mYW1pbHkpCisJCWZpZHZpZF9tc3JfaW5pdCgpOwogCiAJLyogcnVuIG9uIGFueSBDUFUgYWdhaW4gKi8KIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZG1hc2spOwogCiAJcG9sLT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKLQlwb2wtPmNwdXMgPSBjcHVfY29yZV9tYXBbcG9sLT5jcHVdOworCWlmIChjcHVfZmFtaWx5KQorCQlwb2wtPmNwdXMgPSBjcHVtYXNrX29mX2NwdShwb2wtPmNwdSk7CisJZWxzZQorCQlwb2wtPmNwdXMgPSBjcHVfY29yZV9tYXBbcG9sLT5jcHVdOworCWRhdGEtPmF2YWlsYWJsZV9jb3JlcyA9ICYocG9sLT5jcHVzKTsKIAogCS8qIFRha2UgYSBjcnVkZSBndWVzcyBoZXJlLgogCSAqIFRoYXQgZ3Vlc3Mgd2FzIGluIG1pY3Jvc2Vjb25kcywgc28gbXVsdGlwbHkgd2l0aCAxMDAwICovCiAJcG9sLT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9ICgoKGRhdGEtPnJ2byArIDgpICogZGF0YS0+dnN0YWJsZSAqIFZTVF9VTklUU18yMFVTKQogCSAgICArICgzICogKDEgPDwgZGF0YS0+aXJ0KSAqIDEwKSkgKiAxMDAwOwogCi0JcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOworCWlmIChjcHVfZmFtaWx5KQorCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWRkaWQoZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycmRpZCk7CisJZWxzZQorCQlwb2wtPmN1ciA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CiAJZHByaW50aygicG9saWN5IGN1cnJlbnQgZnJlcXVlbmN5ICVkIGtIelxuIiwgcG9sLT5jdXIpOwogCiAJLyogbWluL21heCB0aGUgY3B1IGlzIGNhcGFibGUgb2YgKi8KQEAgLTEwNjksOCArMTIzMiwxMiBAQAogCiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoZGF0YS0+cG93ZXJub3dfdGFibGUsIHBvbC0+Y3B1KTsKIAotCXByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCi0JICAgICAgIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOworCWlmIChjcHVfZmFtaWx5KQorCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IGZpZCAweCV4LCBkaWQgMHgleFxuIiwKKwkJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJkaWQpOworCWVsc2UKKwkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCisJCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAogCXBvd2Vybm93X2RhdGFbcG9sLT5jcHVdID0gZGF0YTsKIApAQCAtMTE1Niw4ICsxMzIzLDkgQEAKIAl9CiAKIAlpZiAoc3VwcG9ydGVkX2NwdXMgPT0gbnVtX29ubGluZV9jcHVzKCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZvdW5kICVkIEFNRCBBdGhsb24gNjQgLyBPcHRlcm9uICIKLQkJCSJwcm9jZXNzb3JzICgiIFZFUlNJT04gIilcbiIsIHN1cHBvcnRlZF9jcHVzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZvdW5kICVkICVzICIKKwkJCSJwcm9jZXNzb3JzICgiIFZFUlNJT04gIilcbiIsIHN1cHBvcnRlZF9jcHVzLAorCQkJYm9vdF9jcHVfZGF0YS54ODZfbW9kZWxfaWQpOwogCQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfYW1kNjRfZHJpdmVyKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaCBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaAppbmRleCA3OWE3YzVjLi5iZjhhZDllIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICAoYykgMjAwMywgMjAwNCwgMjAwNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiAgKGMpIDIwMDMtMjAwNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiAgKiAgWW91ciB1c2Ugb2YgdGhpcyBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQogICogIEdOVSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMi4gU2VlICJDT1BZSU5HIiBvcgogICogIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbApAQCAtMjEsOCArMjEsOCBAQAogCXUzMiBwbGxsb2NrOyAvKiBwbGwgbG9jayB0aW1lLCB1bml0cyAxIHVzICovCiAgICAgICAgIHUzMiBleHR0eXBlOyAvKiBleHRlbmRlZCBpbnRlcmZhY2UgPSAxICovCiAKLQkvKiBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGZpZCAvIHZpZCAqLwotCXUzMiBjdXJydmlkLCBjdXJyZmlkOworCS8qIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZmlkIC8gdmlkIG9yIGRpZCAqLworCXUzMiBjdXJydmlkLCBjdXJyZmlkLCBjdXJyZGlkOwogCiAJLyogdGhlIHBvd2Vybm93X3RhYmxlIGluY2x1ZGVzIGFsbCBmcmVxdWVuY3kgYW5kIHZpZC9maWQgcGFpcmluZ3M6CiAJICogZmlkIGFyZSB0aGUgbG93ZXIgOCBiaXRzIG9mIHRoZSBpbmRleCwgdmlkIGFyZSB0aGUgdXBwZXIgOCBiaXRzLgpAQCAtMzQsNiArMzQsMTAgQEAKIAkgKiB1c2VkIHRvIGRldGVybWluZSB2YWxpZCBmcmVxdWVuY3kvdmlkL2ZpZCBzdGF0ZXMgKi8KIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgYWNwaV9kYXRhOwogI2VuZGlmCisJLyogd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGFzc29jaWF0ZWQgY29yZXMsIGJ1dCBsZXQgY3B1ZnJlcQorCSAqIGhhbmRsZSBob3RwbHVnIGV2ZW50cyAtIHNvIGp1c3QgcG9pbnQgYXQgY3B1ZnJlcSBwb2wtPmNwdXMKKwkgKiBzdHJ1Y3R1cmUgKi8KKwljcHVtYXNrX3QgKmF2YWlsYWJsZV9jb3JlczsKIH07CiAKIApAQCAtNDMsNiArNDcsNyBAQAogI2RlZmluZSBDUFVJRF9YRkFNX0s4CQkJMAogI2RlZmluZSBDUFVJRF9YTU9ECQkJMHgwMDBmMDAwMAkvKiBleHRlbmRlZCBtb2RlbCAqLwogI2RlZmluZSBDUFVJRF9YTU9EX1JFVl9HCQkweDAwMDYwMDAwCisjZGVmaW5lIENQVUlEX1hGQU1fMTBIIAkJCTB4MDAxMDAwMDAJLyogZmFtaWx5IDB4MTAgKi8KICNkZWZpbmUgQ1BVSURfVVNFX1hGQU1fWE1PRAkJMHgwMDAwMGYwMAogI2RlZmluZSBDUFVJRF9HRVRfTUFYX0NBUEFCSUxJVElFUwkweDgwMDAwMDAwCiAjZGVmaW5lIENQVUlEX0ZSRVFfVk9MVF9DQVBBQklMSVRJRVMJMHg4MDAwMDAwNwpAQCAtNzksNiArODQsMzIgQEAKICNkZWZpbmUgTVNSX1NfSElfQ1VSUkVOVF9WSUQgICAgICAweDAwMDAwMDNmCiAjZGVmaW5lIE1TUl9DX0hJX1NUUF9HTlRfQkVOSUdOCSAgMHgwMDAwMDAwMQogCisKKy8qIEhhcmR3YXJlIFBzdGF0ZSBfUFNTIGFuZCBNU1IgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVVNFX0hXX1BTVEFURQkJMHgwMDAwMDA4MAorI2RlZmluZSBIV19QU1RBVEVfRklEX01BU0sgCTB4MDAwMDAwM2YKKyNkZWZpbmUgSFdfUFNUQVRFX0RJRF9NQVNLIAkweDAwMDAwMWMwCisjZGVmaW5lIEhXX1BTVEFURV9ESURfU0hJRlQgCTYKKyNkZWZpbmUgSFdfUFNUQVRFX01BU0sgCQkweDAwMDAwMDA3CisjZGVmaW5lIEhXX1BTVEFURV9WQUxJRF9NQVNLIAkweDgwMDAwMDAwCisjZGVmaW5lIEhXX0ZJRF9JTkRFWF9TSElGVAk4CisjZGVmaW5lIEhXX0ZJRF9JTkRFWF9NQVNLCTB4MDAwMGZmMDAKKyNkZWZpbmUgSFdfRElEX0lOREVYX1NISUZUCTE2CisjZGVmaW5lIEhXX0RJRF9JTkRFWF9NQVNLCTB4MDBmZjAwMDAKKyNkZWZpbmUgSFdfV0FUVFNfTUFTSwkJMHhmZgorI2RlZmluZSBIV19QV1JfRFZSX01BU0sJCTB4MzAwCisjZGVmaW5lIEhXX1BXUl9EVlJfU0hJRlQJOAorI2RlZmluZSBIV19QV1JfTUFYX01VTFQJCTMKKyNkZWZpbmUgTUFYX0hXX1BTVEFURQkJOAkvKiBodyBwc3RhdGUgc3VwcG9ydHMgdXAgdG8gOCAqLworI2RlZmluZSBNU1JfUFNUQVRFX0RFRl9CQVNFIAkweGMwMDEwMDY0IC8qIGJhc2Ugb2YgUHN0YXRlIE1TUnMgKi8KKyNkZWZpbmUgTVNSX1BTVEFURV9TVEFUVVMgCTB4YzAwMTAwNjMgLyogUHN0YXRlIFN0YXR1cyBNU1IgKi8KKyNkZWZpbmUgTVNSX1BTVEFURV9DVFJMIAkweGMwMDEwMDYyIC8qIFBzdGF0ZSBjb250cm9sIE1TUiAqLworCisvKiBkZWZpbmUgdGhlIHR3byBkcml2ZXIgYXJjaGl0ZWN0dXJlcyAqLworI2RlZmluZSBDUFVfT1BURVJPTiAwCisjZGVmaW5lIENQVV9IV19QU1RBVEUgMQorCisKIC8qCiAgKiBUaGVyZSBhcmUgcmVzdHJpY3Rpb25zIGZyZXF1ZW5jaWVzIGhhdmUgdG8gZm9sbG93OgogICogLSBvbmx5IDEgZW50cnkgaW4gdGhlIGxvdyBmaWQgdGFibGUgKCA8PTEuNEdIeiApCkBAIC0xODIsNiArMjEzLDkgQEAKIAogc3RhdGljIHZvaWQgcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgaW5kZXgpOwogCitzdGF0aWMgaW50IGZpbGxfcG93ZXJub3dfdGFibGVfcHN0YXRlKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvd2Vybm93X3RhYmxlKTsKK3N0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9maWR2aWQoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpOworCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGlubGluZSB2b2lkIGRlZmluZV9zaWJsaW5ncyhpbnQgY3B1LCBjcHVtYXNrX3QgY3B1X3NoYXJlZGNvcmVfbWFza1tdKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKaW5kZXggYjBmZjkwNy4uY2U1NGZmMSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAogCWlmIChtb2RlbC0+Y3B1X2lkID09IE5VTEwpIHsKIAkJLyogTm8gbWF0Y2ggYXQgYWxsICovCi0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAibm8gc3VwcG9ydCBmb3IgQ1BVIG1vZGVsIFwiJXNcIjogIgorCQlkcHJpbnRrKCJubyBzdXBwb3J0IGZvciBDUFUgbW9kZWwgXCIlc1wiOiAiCiAJCSAgICAgICAic2VuZCAvcHJvYy9jcHVpbmZvIHRvICIgTUFJTlRBSU5FUiAiXG4iLAogCQkgICAgICAgY3B1LT54ODZfbW9kZWxfaWQpOwogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTI1OCwxMCArMjU4LDEwIEBACiAKIAlpZiAobW9kZWwtPm9wX3BvaW50cyA9PSBOVUxMKSB7CiAJCS8qIE1hdGNoZWQgYSBub24tbWF0Y2ggKi8KLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJubyB0YWJsZSBzdXBwb3J0IGZvciBDUFUgbW9kZWwgXCIlc1wiXG4iLAorCQlkcHJpbnRrKCJubyB0YWJsZSBzdXBwb3J0IGZvciBDUFUgbW9kZWwgXCIlc1wiXG4iLAogCQkgICAgICAgY3B1LT54ODZfbW9kZWxfaWQpOwogI2lmbmRlZiBDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOT19BQ1BJCi0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAidHJ5IGNvbXBpbGluZyB3aXRoIENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PX0FDUEkgZW5hYmxlZFxuIik7CisJCWRwcmludGsoInRyeSBjb21waWxpbmcgd2l0aCBDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOT19BQ1BJIGVuYWJsZWRcbiIpOwogI2VuZGlmCiAJCXJldHVybiAtRU5PRU5UOwogCX0KQEAgLTM2OCw3ICszNjgsNyBAQAogCiAJLyogcmVnaXN0ZXIgd2l0aCBBQ1BJIGNvcmUgKi8KIAlpZiAoYWNwaV9wcm9jZXNzb3JfcmVnaXN0ZXJfcGVyZm9ybWFuY2UoJnAsIGNwdSkpIHsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJvYnRhaW5pbmcgQUNQSSBkYXRhIGZhaWxlZFxuIik7CisJCWRwcmludGsoIm9idGFpbmluZyBBQ1BJIGRhdGEgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC00NjUsNyArNDY1LDcgQEAKIAlrZnJlZShjZW50cmlub19tb2RlbFtjcHVdKTsKICBlcnJfdW5yZWc6CiAJYWNwaV9wcm9jZXNzb3JfdW5yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmcCwgY3B1KTsKLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgQUNQSSBkYXRhXG4iKTsKKwlkcHJpbnRrKCJpbnZhbGlkIEFDUEkgZGF0YVxuIik7CiAJcmV0dXJuIChyZXN1bHQpOwogfQogI2Vsc2UKQEAgLTQ5OSw3ICs0OTksNyBAQAogCQkJY2VudHJpbm9fY3B1W3BvbGljeS0+Y3B1XSA9ICZjcHVfaWRzW2ldOwogCiAJCWlmICghY2VudHJpbm9fY3B1W3BvbGljeS0+Y3B1XSkgewotCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJmb3VuZCB1bnN1cHBvcnRlZCBDUFUgd2l0aCAiCisJCQlkcHJpbnRrKCJmb3VuZCB1bnN1cHBvcnRlZCBDUFUgd2l0aCAiCiAJCQkiRW5oYW5jZWQgU3BlZWRTdGVwOiBzZW5kIC9wcm9jL2NwdWluZm8gdG8gIgogCQkJTUFJTlRBSU5FUiAiXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDg0NmUxNjMuLmRkNmIwZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKQEAgLTE1NDcsMTUgKzE1NDcsMTggQEAKIAlpZiAoZWZpX2VuYWJsZWQpCiAJCWVmaV9tYXBfbWVtbWFwKCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQljaGVja19hY3BpX3BjaSgpOwkvKiBDaGVja3MgbW9yZSB0aGFuIGp1c3QgQUNQSSBhY3R1YWxseSAqLwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQUNQSQogCS8qCiAJICogUGFyc2UgdGhlIEFDUEkgdGFibGVzIGZvciBwb3NzaWJsZSBib290LXRpbWUgU01QIGNvbmZpZ3VyYXRpb24uCiAJICovCiAJYWNwaV9ib290X3RhYmxlX2luaXQoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJY2hlY2tfYWNwaV9wY2koKTsJLyogQ2hlY2tzIG1vcmUgdGhhbiBqdXN0IEFDUEkgYWN0dWFsbHkgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FDUEkKIAlhY3BpX2Jvb3RfaW5pdCgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19YODZfUEMpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IGY0OGJlZjEuLmFmNTY5ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0zMTUsMyArMzE1LDQgQEAKIAkubG9uZyBzeXNfc3BsaWNlCiAJLmxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZQogCS5sb25nIHN5c190ZWUJCQkvKiAzMTUgKi8KKwkubG9uZyBzeXNfdm1zcGxpY2UKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYwppbmRleCBjZWE1YjNjLi5kNTVmYTdiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1nZW5lcmljL3Byb2JlLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9wcm9iZS5jCkBAIC05Myw5ICs5MywxMSBAQAogCWludCBpOwogCWZvciAoaSA9IDA7IGFwaWNfcHJvYmVbaV07ICsraSkgeyAKIAkJaWYgKGFwaWNfcHJvYmVbaV0tPm1wc19vZW1fY2hlY2sobXBjLG9lbSxwcm9kdWN0aWQpKSB7IAotCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07Ci0JCQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBBUElDIGRyaXZlciBgJXMnLlxuIiwgCi0JCQkgICAgICAgZ2VuYXBpYy0+bmFtZSk7CisJCQlpZiAoIWNtZGxpbmVfYXBpYykgeworCQkJCWdlbmFwaWMgPSBhcGljX3Byb2JlW2ldOworCQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLAorCQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKKwkJCX0KIAkJCXJldHVybiAxOwogCQl9IAogCX0gCkBAIC0xMDcsOSArMTA5LDExIEBACiAJaW50IGk7CiAJZm9yIChpID0gMDsgYXBpY19wcm9iZVtpXTsgKytpKSB7IAogCQlpZiAoYXBpY19wcm9iZVtpXS0+YWNwaV9tYWR0X29lbV9jaGVjayhvZW1faWQsIG9lbV90YWJsZV9pZCkpIHsgCi0JCQlnZW5hcGljID0gYXBpY19wcm9iZVtpXTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIEFQSUMgZHJpdmVyIGAlcycuXG4iLCAKLQkJCSAgICAgICBnZW5hcGljLT5uYW1lKTsKKwkJCWlmICghY21kbGluZV9hcGljKSB7CisJCQkJZ2VuYXBpYyA9IGFwaWNfcHJvYmVbaV07CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gQVBJQyBkcml2ZXIgYCVzJy5cbiIsCisJCQkJICAgICAgIGdlbmFwaWMtPm5hbWUpOworCQkJfQogCQkJcmV0dXJuIDE7CiAJCX0gCiAJfSAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggZWU1ZmJiMC4uMzVlMDM4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIAlkZWZhdWx0IFNHSV9JUDIyCiAKIGNvbmZpZyBNSVBTX01UWDEKLQlib29sICJTdXBwb3J0IGZvciA0RyBTeXN0ZW1zIE1UWC0xIGJvYXJkIgorCWJvb2wgIjRHIFN5c3RlbXMgTVRYLTEgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNPQ19BVTE1MDAKQEAgLTExOSw4ICsxMTksMzQgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKK2NvbmZpZyBCQVNMRVJfRVhDSVRFCisJYm9vbCAiQmFzbGVyIGVYY2l0ZSBzbWFydCBjYW1lcmEgc3VwcG9ydCIKKwlzZWxlY3QgRE1BX0NPSEVSRU5UCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSVJRX0NQVQorCXNlbGVjdCBJUlFfQ1BVX1JNN0sKKwlzZWxlY3QgSVJRX0NQVV9STTlLCisJc2VsZWN0IFNFUklBTF9STTkwMDAKKwlzZWxlY3QgU1lTX0hBU19DUFVfUk05MDAwCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCWhlbHAKKwkgIFRoZSBlWGNpdGUgaXMgYSBzbWFydCBjYW1lcmEgcGxhdGZvcm0gbWFudWZhY3R1cmVkIGJ5CisJICBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworCitjb25maWcgQkFTTEVSX0VYQ0lURV9QUk9UT1RZUEUKKwlib29sICJTdXBwb3J0IGZvciBwcmUtcmVsZWFzZSB1bml0cyIKKwlkZXBlbmRzIG9uIEJBU0xFUl9FWENJVEUKKwlkZWZhdWx0IG4KKwloZWxwCisJICBQcmUtc2VyaWVzIChwcm90b3R5cGUpIHVuaXRzIGFyZSBkaWZmZXJlbnQgZnJvbSBsYXRlciBvbmVzIGluCisJICBzb21lIHdheXMuIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UuIFBsZWFzZQorCSAgbm90ZSB0aGF0IGEga2VybmVsIGJ1aWx0IHdpdGggdGhpcyBvcHRpb24gc2VsZWN0ZWQgd2lsbCBub3QgYmUKKwkgIGFibGUgdG8gcnVuIG9uIG5vcm1hbCB1bml0cy4KKwogY29uZmlnIE1JUFNfQ09CQUxUCi0JYm9vbCAiU3VwcG9ydCBmb3IgQ29iYWx0IFNlcnZlciIKKwlib29sICJDb2JhbHQgU2VydmVyIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJODI1OQpAQCAtMTMyLDcgKzE1OCw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBNQUNIX0RFQ1NUQVRJT04KLQlib29sICJTdXBwb3J0IGZvciBERUNzdGF0aW9ucyIKKwlib29sICJERUNzdGF0aW9ucyIKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgRUFSTFlfUFJJTlRLCkBAIC0xNDIsNiArMTY4LDkgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMTI4SFoKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzI1NkhaCisJc2VsZWN0IFNZU19TVVBQT1JUU18xMDI0SFoKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgREVDJ3MgTUlQUyBiYXNlZCB3b3Jrc3RhdGlvbnMuICBGb3IgZGV0YWlscwogCSAgc2VlIHRoZSBMaW51eC9NSVBTIEZBUSBvbiA8aHR0cDovL3d3dy5saW51eC1taXBzLm9yZy8+IGFuZCB0aGUKQEAgLTE1OCw3ICsxODcsNyBAQAogCSAgb3RoZXJ3aXNlIGNob29zZSBSMzAwMC4KIAogY29uZmlnIE1JUFNfRVY2NDEyMAotCWJvb2wgIlN1cHBvcnQgZm9yIEdhbGlsZW8gRVY2NDEyMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIkdhbGlsZW8gRVY2NDEyMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0xNzUsNyArMjA0LDcgQEAKIAkgIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1JUFNfRVY5NjEwMAotCWJvb2wgIlN1cHBvcnQgZm9yIEdhbGlsZW8gRVY5NjEwMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIkdhbGlsZW8gRVY5NjEwMCBFdmFsdWF0aW9uIGJvYXJkIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0xOTUsNyArMjI0LDcgQEAKIAkgIGhlcmUgaWYgeW91IHdpc2ggdG8gYnVpbGQgYSBrZXJuZWwgZm9yIHRoaXMgcGxhdGZvcm0uCiAKIGNvbmZpZyBNSVBTX0lWUgotCWJvb2wgIlN1cHBvcnQgZm9yIEdsb2Jlc3BhbiBJVlIgYm9hcmQiCisJYm9vbCAiR2xvYmVzcGFuIElWUiBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVRFX0JPQVJEX0dFTgpAQCAtMjExLDcgKzI0MCw3IEBACiAJICBidWlsZCBhIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KIAogY29uZmlnIE1JUFNfSVRFODE3MgotCWJvb2wgIlN1cHBvcnQgZm9yIElURSA4MTcyRyBib2FyZCIKKwlib29sICJJVEUgODE3MkcgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElURV9CT0FSRF9HRU4KQEAgLTIyOCw3ICsyNTcsNyBAQAogCSAgYSBrZXJuZWwgZm9yIHRoaXMgcGxhdGZvcm0uCiAKIGNvbmZpZyBNQUNIX0pBWloKLQlib29sICJTdXBwb3J0IGZvciB0aGUgSmF6eiBmYW1pbHkgb2YgbWFjaGluZXMiCisJYm9vbCAiSmF6eiBmYW1pbHkgb2YgbWFjaGluZXMiCiAJc2VsZWN0IEFSQwogCXNlbGVjdCBBUkMzMgogCXNlbGVjdCBBUkNIX01BWV9IQVZFX1BDX0ZEQwpAQCAtMjM5LDYgKzI2OCw3IEBACiAJc2VsZWN0IFNZU19IQVNfQ1BVX1I0WDAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzEwMEhaCiAJaGVscAogCSBUaGlzIGEgZmFtaWx5IG9mIG1hY2hpbmVzIGJhc2VkIG9uIHRoZSBNSVBTIFI0MDMwIGNoaXBzZXQgd2hpY2ggd2FzCiAJIHVzZWQgYnkgc2V2ZXJhbCB2ZW5kb3JzIHRvIGJ1aWxkIFJJU0Mvb3MgYW5kIFdpbmRvd3MgTlQgd29ya3N0YXRpb25zLgpAQCAtMjQ2LDcgKzI3Niw3IEBACiAJIE9saXZldHRpIE03MDAtMTAgd29ya3N0YXRpb25zLgogCiBjb25maWcgTEFTQVQKLQlib29sICJTdXBwb3J0IGZvciBMQVNBVCBOZXR3b3JrcyBwbGF0Zm9ybXMiCisJYm9vbCAiTEFTQVQgTmV0d29ya3MgcGxhdGZvcm1zIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBNSVBTX0dUNjQxMjAKQEAgLTI1OCw3ICsyODgsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgTUlQU19BVExBUwotCWJvb2wgIlN1cHBvcnQgZm9yIE1JUFMgQXRsYXMgYm9hcmQiCisJYm9vbCAiTUlQUyBBdGxhcyBib2FyZCIKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQpAQCAtMjgzLDcgKzMxMyw3IEBACiAJICBib2FyZC4KIAogY29uZmlnIE1JUFNfTUFMVEEKLQlib29sICJTdXBwb3J0IGZvciBNSVBTIE1hbHRhIGJvYXJkIgorCWJvb2wgIk1JUFMgTWFsdGEgYm9hcmQiCiAJc2VsZWN0IEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgSEFWRV9TVERfUENfU0VSSUFMX1BPUlQKQEAgLTMxMSw3ICszNDEsNyBAQAogCSAgYm9hcmQuCiAKIGNvbmZpZyBNSVBTX1NFQUQKLQlib29sICJTdXBwb3J0IGZvciBNSVBTIFNFQUQgYm9hcmQgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiTUlQUyBTRUFEIGJvYXJkIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCkBAIC0zMjcsOCArMzU3LDI5IEBACiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1JUFMgVGVjaG5vbG9naWVzIFNFQUQgZXZhbHVhdGlvbgogCSAgYm9hcmQuCiAKK2NvbmZpZyBXUl9QUE1DCisJYm9vbCAiU3VwcG9ydCBmb3IgV2luZCBSaXZlciBQUE1DIGJvYXJkIgorCXNlbGVjdCBJUlFfQ1BVCisJc2VsZWN0IEJPT1RfRUxGMzIKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgTUlQU19HVDY0MTIwCisJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKKwlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCisJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMgorCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTNjRfUjEKKwlzZWxlY3QgU1lTX0hBU19DUFVfTkVWQURBCisJc2VsZWN0IFNZU19IQVNfQ1BVX1JNNzAwMAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFdpbmQgUml2ZXIgTUlQUzMyIDRLQyBQUE1DIGV2YWx1YXRpb24KKwkgIGJvYXJkLCB3aGljaCBpcyBiYXNlZCBvbiBHVDY0MTIwIGJyaWRnZSBjaGlwLgorCiBjb25maWcgTUlQU19TSU0KLQlib29sICdTdXBwb3J0IGZvciBNSVBTIHNpbXVsYXRvciAoTUlQU3NpbSknCisJYm9vbCAnTUlQUyBzaW11bGF0b3IgKE1JUFNzaW0pJwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKQEAgLTM0MSw3ICszOTIsNyBAQAogCSAgZW11bGF0b3IuCiAKIGNvbmZpZyBNT01FTkNPX0pBR1VBUl9BVFgKLQlib29sICJTdXBwb3J0IGZvciBNb21lbnR1bSBKYWd1YXIgYm9hcmQiCisJYm9vbCAiTW9tZW50dW0gSmFndWFyIGJvYXJkIgogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0zNjEsNyArNDEyLDcgQEAKIAkgIE1vbWVudHVtIENvbXB1dGVyIDxodHRwOi8vd3d3Lm1vbWVuY28uY29tLz4uCiAKIGNvbmZpZyBNT01FTkNPX09DRUxPVAotCWJvb2wgIlN1cHBvcnQgZm9yIE1vbWVudHVtIE9jZWxvdCBib2FyZCIKKwlib29sICJNb21lbnR1bSBPY2Vsb3QgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKQEAgLTM3OCw3ICs0MjksNyBAQAogCSAgTW9tZW50dW0gQ29tcHV0ZXIgPGh0dHA6Ly93d3cubW9tZW5jby5jb20vPi4KIAogY29uZmlnIE1PTUVOQ09fT0NFTE9UXzMKLQlib29sICJTdXBwb3J0IGZvciBNb21lbnR1bSBPY2Vsb3QtMyBib2FyZCIKKwlib29sICJNb21lbnR1bSBPY2Vsb3QtMyBib2FyZCIKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQpAQCAtMzk3LDcgKzQ0OCw3IEBACiAJICBQTUMtU2llcnJhIFJtNzkwMDAgY29yZS4KIAogY29uZmlnIE1PTUVOQ09fT0NFTE9UX0MKLQlib29sICJTdXBwb3J0IGZvciBNb21lbnR1bSBPY2Vsb3QtQyBib2FyZCIKKwlib29sICJNb21lbnR1bSBPY2Vsb3QtQyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQpAQCAtNDE0LDcgKzQ2NSw3IEBACiAJICBNb21lbnR1bSBDb21wdXRlciA8aHR0cDovL3d3dy5tb21lbmNvLmNvbS8+LgogCiBjb25maWcgTU9NRU5DT19PQ0VMT1RfRwotCWJvb2wgIlN1cHBvcnQgZm9yIE1vbWVudHVtIE9jZWxvdC1HIGJvYXJkIgorCWJvb2wgIk1vbWVudHVtIE9jZWxvdC1HIGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCkBAIC00MzEsNjIgKzQ4MiwyNSBAQAogCSAgTW9tZW50dW0gQ29tcHV0ZXIgPGh0dHA6Ly93d3cubW9tZW5jby5jb20vPi4KIAogY29uZmlnIE1JUFNfWFhTMTUwMAotCWJvb2wgIlN1cHBvcnQgZm9yIE15Q2FibGUgWFhTMTUwMCBib2FyZCIKKwlib29sICJNeUNhYmxlIFhYUzE1MDAgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBQTlg4NTUwX1YyUENJCi0JYm9vbCAiU3VwcG9ydCBmb3IgUGhpbGlwcyBQTlg4NTUwIGJhc2VkIFZpcGVyMi1QQ0kgYm9hcmQiCisJYm9vbCAiUGhpbGlwcyBQTlg4NTUwIGJhc2VkIFZpcGVyMi1QQ0kgYm9hcmQiCisJZGVwZW5kcyBvbiBCUk9LRU4KIAlzZWxlY3QgUE5YODU1MAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgUE5YODU1MF9KQlMKLQlib29sICJTdXBwb3J0IGZvciBQaGlsaXBzIFBOWDg1NTAgYmFzZWQgSkJTIGJvYXJkIgorCWJvb2wgIlBoaWxpcHMgUE5YODU1MCBiYXNlZCBKQlMgYm9hcmQiCisJZGVwZW5kcyBvbiBCUk9LRU4KIAlzZWxlY3QgUE5YODU1MAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCi1jb25maWcgRERCNTA3NAotCWJvb2wgIlN1cHBvcnQgZm9yIE5FQyBEREIgVnJjLTUwNzQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgRERCNVhYWF9DT01NT04KLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCi0Jc2VsZWN0IEhXX0hBU19QQ0kKLQlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBJODI1OQotCXNlbGVjdCBJU0EKLQlzZWxlY3QgU1lTX0hBU19DUFVfUjUwMDAKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVlI1MDAwLWJhc2VkIE5FQyBEREIgVnJjLTUwNzQKLQkgIGV2YWx1YXRpb24gYm9hcmQuCi0KLWNvbmZpZyBEREI1NDc2Ci0JYm9vbCAiU3VwcG9ydCBmb3IgTkVDIEREQiBWcmMtNTQ3NiIKLQlzZWxlY3QgRERCNVhYWF9DT01NT04KLQlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCi0Jc2VsZWN0IEhXX0hBU19QQ0kKLQlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBJODI1OQotCXNlbGVjdCBJU0EKLQlzZWxlY3QgU1lTX0hBU19DUFVfUjU0MzIKLQlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUjU0MzItYmFzZWQgTkVDIEREQiBWcmMtNTQ3NgotCSAgZXZhbHVhdGlvbiBib2FyZC4KLQotCSAgRmVhdHVyZXMgOiBrZXJuZWwgZGVidWdnaW5nLCBzZXJpYWwgdGVybWluYWwsIE5GUyByb290IGZzLCBvbi1ib2FyZAotCSAgZXRoZXIgcG9ydCBVU0IsIEFDOTcsIFBDSSwgUENJIFZHQSBjYXJkICYgZnJhbWVidWZmZXIgY29uc29sZSwKLQkgIElERSBjb250cm9sbGVyLCBQUzIga2V5Ym9hcmQsIFBTMiBtb3VzZSwgZXRjLgotCiBjb25maWcgRERCNTQ3NwotCWJvb2wgIlN1cHBvcnQgZm9yIE5FQyBEREIgVnJjLTU0NzciCisJYm9vbCAiTkVDIEREQiBWcmMtNTQ3NyIKIAlzZWxlY3QgRERCNVhYWF9DT01NT04KIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKQEAgLTUwNCwxMyArNTE4LDEzIEBACiAJICBldGhlciBwb3J0IFVTQiwgQUM5NywgUENJLCBldGMuCiAKIGNvbmZpZyBNQUNIX1ZSNDFYWAotCWJvb2wgIlN1cHBvcnQgZm9yIE5FQyBWUjQxMDAgc2VyaWVzIGJhc2VkIG1hY2hpbmVzIgorCWJvb2wgIk5FQyBWUjQxWFgtYmFzZWQgbWFjaGluZXMiCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCiAKIGNvbmZpZyBQTUNfWU9TRU1JVEUKLQlib29sICJTdXBwb3J0IGZvciBQTUMtU2llcnJhIFlvc2VtaXRlIGV2YWwgYm9hcmQiCisJYm9vbCAiUE1DLVNpZXJyYSBZb3NlbWl0ZSBldmFsIGJvYXJkIgogCXNlbGVjdCBETUFfQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCkBAIC01MjcsNyArNTQxLDcgQEAKIAkgIG1hbnVmYWN0dXJlZCBieSBQTUMtU2llcnJhLgogCiBjb25maWcgUUVNVQotCWJvb2wgIlN1cHBvcnQgZm9yIFFlbXUiCisJYm9vbCAiUWVtdSIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQQogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVApAQCAtNTQ2LDggKzU2MCwyMiBAQAogCSAgc2ltdWxhdGUgYWN0dWFsIE1JUFMgaGFyZHdhcmUgcGxhdGZvcm1zLiAgTW9yZSBpbmZvcm1hdGlvbiBvbiBRZW11CiAJICBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5saW51eC1taXBzLm9yZy93aWtpL1FlbXUuCiAKK2NvbmZpZyBNQVJLRUlOUworCWJvb2wgIlN1cHBvcnQgZm9yIE5FQyBFTU1BMlJIIE1hcmstZWlucyIKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSVJRX0NQVQorCXNlbGVjdCBTV0FQX0lPX1NQQUNFCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19DUFVfUjUwMDAKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFI1NDMyLWJhc2VkIE5FQyBNYXJrLWVpbnMKKwkgIGJvYXJkcyB3aXRoIFI1NTAwIENQVS4KKwogY29uZmlnIFNHSV9JUDIyCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0dJIElQMjIgKEluZHkvSW5kaWdvMikiCisJYm9vbCAiU0dJIElQMjIgKEluZHkvSW5kaWdvMikiCiAJc2VsZWN0IEFSQwogCXNlbGVjdCBBUkMzMgogCXNlbGVjdCBCT09UX0VMRjMyCkBAIC01NTUsNiArNTgzLDcgQEAKIAlzZWxlY3QgSFdfSEFTX0VJU0EKIAlzZWxlY3QgSVAyMl9DUFVfU0NBQ0hFCiAJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgTk9fSVNBIGlmIElTQQogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1I0WDAwCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1I1MDAwCkBAIC01NjcsNyArNTk2LDcgQEAKIAkgIHRoYXQgcnVucyBvbiB0aGVzZSwgc2F5IFkgaGVyZS4KIAogY29uZmlnIFNHSV9JUDI3Ci0JYm9vbCAiU3VwcG9ydCBmb3IgU0dJIElQMjcgKE9yaWdpbjIwMC8yMDAwKSIKKwlib29sICJTR0kgSVAyNyAoT3JpZ2luMjAwLzIwMDApIgogCXNlbGVjdCBBUkMKIAlzZWxlY3QgQVJDNjQKIAlzZWxlY3QgQk9PVF9FTEY2NApAQCAtNTc3LDEzICs2MDYsMTQgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfUjEwMDAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAloZWxwCiAJICBUaGlzIGFyZSB0aGUgU0dJIE9yaWdpbiAyMDAsIE9yaWdpbiAyMDAwIGFuZCBPbnl4IDIgR3JhcGhpY3MKIAkgIHdvcmtzdGF0aW9ucy4gIFRvIGNvbXBpbGUgYSBMaW51eCBrZXJuZWwgdGhhdCBydW5zIG9uIHRoZXNlLCBzYXkgWQogCSAgaGVyZS4KIAogY29uZmlnIFNHSV9JUDMyCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0dJIElQMzIgKE8yKSAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJTR0kgSVAzMiAoTzIpIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEFSQwogCXNlbGVjdCBBUkMzMgpAQCAtNjA0LDcgKzYzNCw3IEBACiAJICBJZiB5b3Ugd2FudCB0aGlzIGtlcm5lbCB0byBydW4gb24gU0dJIE8yIHdvcmtzdGF0aW9uLCBzYXkgWSBoZXJlLgogCiBjb25maWcgU0lCWVRFX0JJR1NVUgotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTQ4MEItQmlnU3VyIgorCWJvb2wgIlNpYnl0ZSBCQ005MTQ4MEItQmlnU3VyIgogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVAogCXNlbGVjdCBQQ0lfRE9NQUlOUwpAQCAtNjE1LDcgKzY0NSw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTSUJZVEVfU1dBUk0KLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBBLVNXQVJNIgorCWJvb2wgIlNpYnl0ZSBCQ005MTI1MEEtU1dBUk0iCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IFNJQllURV9TQjEyNTAKQEAgLTYyNiw3ICs2NTYsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX1NFTlRPU0EKLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBFLVNlbnRvc2EiCisJYm9vbCAiU2lieXRlIEJDTTkxMjUwRS1TZW50b3NhIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCkBAIC02MzcsNyArNjY3LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFNJQllURV9SSE9ORQotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTEyNUUtUmhvbmUiCisJYm9vbCAiU2lieXRlIEJDTTkxMTI1RS1SaG9uZSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVApAQCAtNjQ4LDcgKzY3OCw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTSUJZVEVfQ0FSTUVMCi0JYm9vbCAiU3VwcG9ydCBmb3IgU2lieXRlIEJDTTkxMTIweC1DYXJtZWwiCisJYm9vbCAiU2lieXRlIEJDTTkxMTIweC1DYXJtZWwiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY1OSw3ICs2ODksNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX1BUU1dBUk0KLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTEyNTBQVC1QVFNXQVJNIgorCWJvb2wgIlNpYnl0ZSBCQ005MTI1MFBULVBUU1dBUk0iCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY3MSw3ICs3MDEsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX0xJVFRMRVNVUgotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTI1MEMyLUxpdHRsZVN1ciIKKwlib29sICJTaWJ5dGUgQkNNOTEyNTBDMi1MaXR0bGVTdXIiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKQEAgLTY4Myw3ICs3MTMsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCiBjb25maWcgU0lCWVRFX0NSSElORQotCWJvb2wgIlN1cHBvcnQgZm9yIFNpYnl0ZSBCQ005MTEyMEMtQ1JoaW5lIgorCWJvb2wgIlNpYnl0ZSBCQ005MTEyMEMtQ1JoaW5lIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCkBAIC02OTQsNyArNzI0LDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAogY29uZmlnIFNJQllURV9DUkhPTkUKLQlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTExMjVDLUNSaG9uZSIKKwlib29sICJTaWJ5dGUgQkNNOTExMjVDLUNSaG9uZSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBCT09UX0VMRjMyCiAJc2VsZWN0IERNQV9DT0hFUkVOVApAQCAtNzA2LDkgKzczNiw5IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBTTklfUk0yMDBfUENJCi0JYm9vbCAiU3VwcG9ydCBmb3IgU05JIFJNMjAwIFBDSSIKLQlzZWxlY3QgQVJDCi0Jc2VsZWN0IEFSQzMyCisJYm9vbCAiU05JIFJNMjAwIFBDSSIKKwlzZWxlY3QgQVJDIGlmIENQVV9MSVRUTEVfRU5ESUFOCisJc2VsZWN0IEFSQzMyIGlmIENQVV9MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJc2VsZWN0IEJPT1RfRUxGMzIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCkBAIC03MTksMTAgKzc0OSwxMyBAQAogCXNlbGVjdCBJODI1MwogCXNlbGVjdCBJODI1OQogCXNlbGVjdCBJU0EKKwlzZWxlY3QgU1dBUF9JT19TUEFDRSBpZiBDUFVfQklHX0VORElBTgogCXNlbGVjdCBTWVNfSEFTX0NQVV9SNFgwMAorCXNlbGVjdCBTWVNfSEFTX0NQVV9SNTAwMAorCXNlbGVjdCBSNTAwMF9DUFVfU0NBQ0hFCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4gaWYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJaGVscApAQCAtNzMyLDcgKzc2NSw3IEBACiAJICBzdXBwb3J0IHRoaXMgbWFjaGluZSB0eXBlLgogCiBjb25maWcgVE9TSElCQV9KTVIzOTI3Ci0JYm9vbCAiU3VwcG9ydCBmb3IgVG9zaGliYSBKTVItVFgzOTI3IGJvYXJkIgorCWJvb2wgIlRvc2hpYmEgSk1SLVRYMzkyNyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgTUlQU19UWDM5MjcKQEAgLTc0Myw3ICs3NzYsNyBAQAogCXNlbGVjdCBUT1NISUJBX0JPQVJEUwogCiBjb25maWcgVE9TSElCQV9SQlRYNDkyNwotCWJvb2wgIlN1cHBvcnQgZm9yIFRvc2hpYmEgVEJUWDQ5WzIzXTcgYm9hcmQiCisJYm9vbCAiVG9zaGliYSBUQlRYNDlbMjNdNyBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhBU19UWFg5X1NFUklBTAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC03NjAsNyArNzkzLDcgQEAKIAkgIHN1cHBvcnQgdGhpcyBtYWNoaW5lIHR5cGUKIAogY29uZmlnIFRPU0hJQkFfUkJUWDQ5MzgKLQlib29sICJTdXBwb3J0IGZvciBUb3NoaWJhIFJCVFg0OTM4IGJvYXJkIgorCWJvb2wgIlRvc2hpYmEgUkJUWDQ5MzggYm9hcmQiCiAJc2VsZWN0IEhBVkVfU1REX1BDX1NFUklBTF9QT1JUCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBHRU5FUklDX0lTQV9ETUEKQEAgLTk3OSw2ICsxMDEyLDExIEBACiBjb25maWcgU1dBUF9JT19TUEFDRQogCWJvb2wKIAorY29uZmlnIEVNTUEyUkgKKwlib29sCisJZGVwZW5kcyBvbiBNQVJLRUlOUworCWRlZmF1bHQgeQorCiAjCiAjIFVuZm9ydHVuYXRlbHkgbm90IGFsbCBHVDY0MTIwIHN5c3RlbXMgcnVuIHRoZSBjaGlwIGF0IHRoZSBzYW1lIGNsb2NrLgogIyBBcyB0aGUgdXNlciBmb3IgdGhlIGNsb2NrIHJhdGUgYW5kIHRyeSB0byBtaW5pbWl6ZSB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuCkBAIC0xNDExLDEzICsxNDQ5LDEyIEBACiAKIGNvbmZpZyBQQUdFX1NJWkVfMTZLQgogCWJvb2wgIjE2a0IiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgIUNQVV9SMzAwMCAmJiAhQ1BVX1RYMzlYWAorCWRlcGVuZHMgb24gIUNQVV9SMzAwMCAmJiAhQ1BVX1RYMzlYWAogCWhlbHAKIAkgIFVzaW5nIDE2a0IgcGFnZSBzaXplIHdpbGwgcmVzdWx0IGluIGhpZ2hlciBwZXJmb3JtYW5jZSBrZXJuZWwgYXQKIAkgIHRoZSBwcmljZSBvZiBoaWdoZXIgbWVtb3J5IGNvbnN1bXB0aW9uLiAgVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIG9uCi0JICBhbGwgbm9uLVIzMDAwIGZhbWlseSBwcm9jZXNzb3IuICBOb3QgdGhhdCBhdCB0aGUgdGltZSBvZiB0aGlzCi0JICB3cml0aW5nIHRoaXMgb3B0aW9uIGlzIHN0aWxsIGhpZ2ggZXhwZXJpbWVudGFsOyB0aGVyZSBhcmUgYWxzbwotCSAgaXNzdWVzIHdpdGggY29tcGF0aWJpbGl0eSBvZiB1c2VyIGFwcGxpY2F0aW9ucy4KKwkgIGFsbCBub24tUjMwMDAgZmFtaWx5IHByb2Nlc3NvcnMuICBOb3RlIHRoYXQgeW91IHdpbGwgbmVlZCBhIHN1aXRhYmxlCisJICBMaW51eCBkaXN0cmlidXRpb24gdG8gc3VwcG9ydCB0aGlzLgogCiBjb25maWcgUEFHRV9TSVpFXzY0S0IKIAlib29sICI2NGtCIgpAQCAtMTQyNiw4ICsxNDYzLDcgQEAKIAkgIFVzaW5nIDY0a0IgcGFnZSBzaXplIHdpbGwgcmVzdWx0IGluIGhpZ2hlciBwZXJmb3JtYW5jZSBrZXJuZWwgYXQKIAkgIHRoZSBwcmljZSBvZiBoaWdoZXIgbWVtb3J5IGNvbnN1bXB0aW9uLiAgVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIG9uCiAJICBhbGwgbm9uLVIzMDAwIGZhbWlseSBwcm9jZXNzb3IuICBOb3QgdGhhdCBhdCB0aGUgdGltZSBvZiB0aGlzCi0JICB3cml0aW5nIHRoaXMgb3B0aW9uIGlzIHN0aWxsIGhpZ2ggZXhwZXJpbWVudGFsOyB0aGVyZSBhcmUgYWxzbwotCSAgaXNzdWVzIHdpdGggY29tcGF0aWJpbGl0eSBvZiB1c2VyIGFwcGxpY2F0aW9ucy4KKwkgIHdyaXRpbmcgdGhpcyBvcHRpb24gaXMgc3RpbGwgaGlnaCBleHBlcmltZW50YWwuCiAKIGVuZGNob2ljZQogCkBAIC0xNjA5LDYgKzE2NDUsMjggQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiAhTlVNQQogCitjb25maWcgQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCisJYm9vbAorCWRlZmF1bHQgeSBpZiBTR0lfSVAyNworCWhlbHAKKwkgIFNheSBZIHRvIHVwcG9ydCBlZmZpY2llbnQgaGFuZGxpbmcgb2YgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnksCisJICBmb3IgYXJjaGl0ZWN0dXJlcyB3aGljaCBhcmUgZWl0aGVyIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpCisJICBvciBoYXZlIGh1Z2UgaG9sZXMgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgZm9yIG90aGVyIHJlYXNvbnMuCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92bS9udW1hPiBmb3IgbW9yZS4KKworY29uZmlnIE5VTUEKKwlib29sICJOVU1BIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfTlVNQQorCWhlbHAKKwkgIFNheSBZIHRvIGNvbXBpbGUgdGhlIGtlcm5lbCB0byBzdXBwb3J0IE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeQorCSAgQWNjZXNzKS4gIFRoaXMgb3B0aW9uIGltcHJvdmVzIHBlcmZvcm1hbmNlIG9uIHN5c3RlbXMgd2l0aCBtb3JlCisJICB0aGFuIHR3byBub2Rlczsgb24gdHdvIG5vZGUgc3lzdGVtcyBpdCBpcyBnZW5lcmFsbHkgYmV0dGVyIHRvCisJICBsZWF2ZSBpdCBkaXNhYmxlZDsgb24gc2luZ2xlIG5vZGUgc3lzdGVtcyBkaXNhYmxlIHRoaXMgb3B0aW9uCisJICBkaXNhYmxlZC4KKworY29uZmlnIFNZU19TVVBQT1JUU19OVU1BCisJYm9vbAorCiBjb25maWcgTk9ERVNfU0hJRlQKIAlpbnQKIAlkZWZhdWx0ICI2IgpAQCAtMTY1Myw2ICsxNzExLDc3IEBACiAJICBUaGlzIGlzIHB1cmVseSB0byBzYXZlIG1lbW9yeSAtIGVhY2ggc3VwcG9ydGVkIENQVSBhZGRzCiAJICBhcHByb3hpbWF0ZWx5IGVpZ2h0IGtpbG9ieXRlcyB0byB0aGUga2VybmVsIGltYWdlLgogCisjCisjIFRpbWVyIEludGVycnVwdCBGcmVxdWVuY3kgQ29uZmlndXJhdGlvbgorIworCitjaG9pY2UKKwlwcm9tcHQgIlRpbWVyIGZyZXF1ZW5jeSIKKwlkZWZhdWx0IEhaXzI1MAorCWhlbHAKKwkgQWxsb3dzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB0aW1lciBmcmVxdWVuY3kuCisKKwljb25maWcgSFpfNDgKKwkJYm9vbCAiNDggSFoiIGlmIFNZU19TVVBQT1JUU180OEhaCisKKwljb25maWcgSFpfMTAwCisJCWJvb2wgIjEwMCBIWiIgaWYgU1lTX1NVUFBPUlRTXzEwMEhaIHx8IFNZU19TVVBQT1JUU19BUkJJVF9IWgorCisJY29uZmlnIEhaXzEyOAorCQlib29sICIxMjggSFoiIGlmIFNZU19TVVBQT1JUU18xMjhIWiB8fCBTWVNfU1VQUE9SVFNfQVJCSVRfSFoKKworCWNvbmZpZyBIWl8yNTAKKwkJYm9vbCAiMjUwIEhaIiBpZiBTWVNfU1VQUE9SVFNfMjUwSFogfHwgU1lTX1NVUFBPUlRTX0FSQklUX0haCisKKwljb25maWcgSFpfMjU2CisJCWJvb2wgIjI1NiBIWiIgaWYgU1lTX1NVUFBPUlRTXzI1NkhaIHx8IFNZU19TVVBQT1JUU19BUkJJVF9IWgorCisJY29uZmlnIEhaXzEwMDAKKwkJYm9vbCAiMTAwMCBIWiIgaWYgU1lTX1NVUFBPUlRTXzEwMDBIWiB8fCBTWVNfU1VQUE9SVFNfQVJCSVRfSFoKKworCWNvbmZpZyBIWl8xMDI0CisJCWJvb2wgIjEwMjQgSFoiIGlmIFNZU19TVVBQT1JUU18xMDI0SFogfHwgU1lTX1NVUFBPUlRTX0FSQklUX0haCisKK2VuZGNob2ljZQorCitjb25maWcgU1lTX1NVUFBPUlRTXzQ4SFoKKwlib29sCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfMTAwSFoKKwlib29sCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfMTI4SFoKKwlib29sCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfMjUwSFoKKwlib29sCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfMjU2SFoKKwlib29sCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfMTAwMEhaCisJYm9vbAorCitjb25maWcgU1lTX1NVUFBPUlRTXzEwMjRIWgorCWJvb2wKKworY29uZmlnIFNZU19TVVBQT1JUU19BUkJJVF9IWgorCWJvb2wKKwlkZWZhdWx0IHkgaWYgIVNZU19TVVBQT1JUU180OEhaICYmICFTWVNfU1VQUE9SVFNfMTAwSFogJiYgXAorCQkgICAgICFTWVNfU1VQUE9SVFNfMTI4SFogJiYgIVNZU19TVVBQT1JUU18yNTBIWiAmJiBcCisJCSAgICAgIVNZU19TVVBQT1JUU18yNTZIWiAmJiAhU1lTX1NVUFBPUlRTXzEwMDBIWiAmJiBcCisJCSAgICAgIVNZU19TVVBQT1JUU18xMDI0SFoKKworY29uZmlnIEhaCisJaW50CisJZGVmYXVsdCA0OCBpZiBIWl80OAorCWRlZmF1bHQgMTAwIGlmIEhaXzEwMAorCWRlZmF1bHQgMTI4IGlmIEhaXzEyOAorCWRlZmF1bHQgMjUwIGlmIEhaXzI1MAorCWRlZmF1bHQgMjU2IGlmIEhaXzI1NgorCWRlZmF1bHQgMTAwMCBpZiBIWl8xMDAwCisJZGVmYXVsdCAxMDI0IGlmIEhaXzEwMjQKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgogCiBjb25maWcgUlRDX0RTMTc0MgpAQCAtMTcxMiw2ICsxODQxLDkgQEAKIGNvbmZpZyBJU0EKIAlib29sCiAKK2NvbmZpZyBOT19JU0EKKwlib29sCisKIGNvbmZpZyBFSVNBCiAJYm9vbCAiRUlTQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSFdfSEFTX0VJU0EKQEAgLTE4NDIsNiArMTk3NCwzMiBAQAogCWJvb2wgIlBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBTT0NfQVUxWDAwCiAKK2NvbmZpZyBBUE0KKyAgICAgICAgdHJpc3RhdGUgIkFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgRW11bGF0aW9uIgorCWRlcGVuZHMgb24gUE0KKyAgICAgICAgLS0taGVscC0tLQorCSAgQVBNIGlzIGEgQklPUyBzcGVjaWZpY2F0aW9uIGZvciBzYXZpbmcgcG93ZXIgdXNpbmcgc2V2ZXJhbCBkaWZmZXJlbnQKKwkgIHRlY2huaXF1ZXMuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgYmF0dGVyeSBwb3dlcmVkIHN5c3RlbXMgd2l0aAorCSAgQVBNIGNvbXBsaWFudCBCSU9TZXMuIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgc3lzdGVtIHRpbWUgd2lsbCBiZQorCSAgcmVzZXQgYWZ0ZXIgYSBSRVNVTUUgb3BlcmF0aW9uLCB0aGUgL3Byb2MvYXBtIGRldmljZSB3aWxsIHByb3ZpZGUKKwkgIGJhdHRlcnkgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgdXNlci1zcGFjZSBwcm9ncmFtcyB3aWxsIHJlY2VpdmUKKwkgIG5vdGlmaWNhdGlvbiBvZiBBUE0gImV2ZW50cyIgKGUuZy4gYmF0dGVyeSBzdGF0dXMgY2hhbmdlKS4KKworCSAgSW4gb3JkZXIgdG8gdXNlIEFQTSwgeW91IHdpbGwgbmVlZCBzdXBwb3J0aW5nIHNvZnR3YXJlLiBGb3IgbG9jYXRpb24KKwkgIGFuZCBtb3JlIGluZm9ybWF0aW9uLCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vcG0udHh0PiBhbmQgdGhlCisJICBCYXR0ZXJ5IFBvd2VyZWQgTGludXggbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb20KKwkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCisKKwkgIFRoaXMgZHJpdmVyIGRvZXMgbm90IHNwaW4gZG93biBkaXNrIGRyaXZlcyAoc2VlIHRoZSBoZHBhcm0oOCkKKwkgIG1hbnBhZ2UgKCJtYW4gOCBoZHBhcm0iKSBmb3IgdGhhdCksIGFuZCBpdCBkb2Vzbid0IHR1cm4gb2ZmCisJICBWRVNBLWNvbXBsaWFudCAiZ3JlZW4iIG1vbml0b3JzLgorCisJICBHZW5lcmFsbHksIGlmIHlvdSBkb24ndCBoYXZlIGEgYmF0dGVyeSBpbiB5b3VyIG1hY2hpbmUsIHRoZXJlIGlzbid0CisJICBtdWNoIHBvaW50IGluIHVzaW5nIHRoaXMgZHJpdmVyIGFuZCB5b3Ugc2hvdWxkIHNheSBOLiBJZiB5b3UgZ2V0CisJICByYW5kb20ga2VybmVsIE9PUFNlcyBvciByZWJvb3RzIHRoYXQgZG9uJ3Qgc2VlbSB0byBiZSByZWxhdGVkIHRvCisJICBhbnl0aGluZywgdHJ5IGRpc2FibGluZy9lbmFibGluZyB0aGlzIG9wdGlvbiAob3IgZGlzYWJsaW5nL2VuYWJsaW5nCisJICBBUE0gaW4geW91ciBCSU9TKS4KKwogZW5kbWVudQogCiBzb3VyY2UgIm5ldC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDEzMzkwMGEuLmQ1OTMwMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTgzLDYgKzgzLDggQEAKIExERkxBR1Nfdm1saW51eAkJCSs9IC1HIDAgLXN0YXRpYyAtbiAtbm9zdGRsaWIKIE1PREZMQUdTCQkJKz0gLW1sb25nLWNhbGxzCiAKK2NmbGFncy15ICs9IC1mZnJlZXN0YW5kaW5nCisKICMKICMgV2UgZXhwbGljaXRseSBhZGQgdGhlIGVuZGlhbm5lc3Mgc3BlY2lmaWVyIGlmIG5lZWRlZCwgdGhpcyBhbGxvd3MKICMgdG8gY29tcGlsZSBrZXJuZWxzIHdpdGggYSB0b29sY2hhaW4gZm9yIHRoZSBvdGhlciBlbmRpYW5uZXNzLiBXZQpAQCAtMjg1LDYgKzI4NywxMyBAQAogbG9hZC0kKENPTkZJR19NSVBTX0VWOTYxMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAogCiAjCisjIFdpbmQgUml2ZXIgUFBNQyBCb2FyZCAoNEtDICsgR1Q2NDEyMCkKKyMKK2NvcmUtJChDT05GSUdfV1JfUFBNQykJCSs9IGFyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy8KK2NmbGFncy0kKENPTkZJR19XUl9QUE1DKQkJKz0gLUlpbmNsdWRlL2FzbS1taXBzL21hY2gtd3JwcG1jCitsb2FkLSQoQ09ORklHX1dSX1BQTUMpCQkrPSAweGZmZmZmZmZmODAxMDAwMDAKKworIwogIyBHbG9iZXNwYW4gSVZSIGV2YWwgYm9hcmQgd2l0aCBRRUQgNTIzMSBDUFUKICMKIGNvcmUtJChDT05GSUdfSVRFX0JPQVJEX0dFTikJKz0gYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy8KQEAgLTM3OSw2ICszODgsMTMgQEAKIGxvYWQtJChDT05GSUdfTU9NRU5DT19PQ0VMT1RfMykgCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAogCiAjCisjIEJhc2xlciBlWGNpdGUKKyMKK2NvcmUtJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJKz0gYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvCitjZmxhZ3MtJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJKz0gLUlpbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlCitsb2FkLSQoQ09ORklHX0JBU0xFUl9FWENJVEUpCSs9IDB4ODAxMDAwMDAKKworIwogIyBNb21lbnR1bSBKYWd1YXIgQVRYCiAjCiBjb3JlLSQoQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCkJKz0gYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvCkBAIC0zOTUsMTggKzQxMSw2IEBACiBjb3JlLSQoQ09ORklHX0REQjVYWFhfQ09NTU9OKQkrPSBhcmNoL21pcHMvZGRiNXh4eC9jb21tb24vCiAKICMKLSMgTkVDIEREQiBWcmMtNTA3NAotIwotY29yZS0kKENPTkZJR19EREI1MDc0KQkJKz0gYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC8KLWxvYWQtJChDT05GSUdfRERCNTA3NCkJCSs9IDB4ZmZmZmZmZmY4MDA4MDAwMAotCi0jCi0jIE5FQyBEREIgVnJjLTU0NzYKLSMKLWNvcmUtJChDT05GSUdfRERCNTQ3NikJCSs9IGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvCi1sb2FkLSQoQ09ORklHX0REQjU0NzYpCQkrPSAweGZmZmZmZmZmODAwODAwMDAKLQotIwogIyBORUMgRERCIFZyYy01NDc3CiAjCiBjb3JlLSQoQ09ORklHX0REQjU0NzcpCQkrPSBhcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3LwpAQCAtNDY4LDYgKzQ3MiwxNSBAQAogI2NmbGFncy0kKENPTkZJR19QTlg4NTUwX0pCUykJKz0gLUlpbmNsdWRlL2FzbS1taXBzL21hY2gtcG54ODU1MAogbG9hZC0kKENPTkZJR19QTlg4NTUwX0pCUykJKz0gMHhmZmZmZmZmZjgwMDYwMDAwCiAKKyMgTkVDIEVNTUEyUkggYm9hcmRzCisjCitjb3JlLSQoQ09ORklHX0VNTUEyUkgpICAgICAgICAgICs9IGFyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi8KK2NmbGFncy0kKENPTkZJR19FTU1BMlJIKSAgICAgICAgKz0gLUlpbmNsdWRlL2FzbS1taXBzL21hY2gtZW1tYTJyaAorCisjIE5FQyBFTU1BMlJIIE1hcmstZWlucworY29yZS0kKENPTkZJR19NQVJLRUlOUykgICAgICAgICArPSBhcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy8KK2xvYWQtJChDT05GSUdfTUFSS0VJTlMpICAgICAgICAgKz0gMHhmZmZmZmZmZjg4MTAwMDAwCisKICMKICMgU0dJIElQMjIgKEluZHkvSW5kaWdvMikKICMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2F1MXh4eF9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2F1MXh4eF9pcnFtYXAuYwppbmRleCAwYjJjMDNjLi41YTFlMzY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9hdTF4eHhfaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vYXUxeHh4X2lycW1hcC5jCkBAIC01NSw3ICs1NSw3IEBACiAgKiBDYXJlZnVsIGlmIHlvdSBjaGFuZ2UgbWF0Y2ggMiByZXF1ZXN0IQogICogVGhlIGludGVycnVwdCBoYW5kbGVyIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBsb3cgbGV2ZWwgZGlzcGF0Y2ggY29kZS4KICAqLwotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaWMwX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pYzBfbWFwW10gPSB7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQogCXsgQVUxMDAwX1VBUlQwX0lOVCwgSU5UQ19JTlRfSElHSF9MRVZFTCwgMH0sCkBAIC0yMjAsNSArMjIwLDUgQEAKIAogfTsKIAotaW50IGF1MXh4eF9pYzBfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaWMwX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X2ljMF9ucl9pcnFzID0gQVJSQVlfU0laRShhdTF4eHhfaWMwX21hcCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKaW5kZXggZGE2MWRlNy4uYWZlMDVlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vaXJxLmMKQEAgLTY4LDYgKzY4LDcgQEAKIAogZXh0ZXJuIHZvaWQgc2V0X2RlYnVnX3RyYXBzKHZvaWQpOwogZXh0ZXJuIGlycV9jcHVzdGF0X3QgaXJxX3N0YXQgW05SX0NQVVNdOworZXh0ZXJuIHZvaWQgbWlwc190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBzdGF0aWMgdm9pZCBzZXR1cF9sb2NhbF9pcnEodW5zaWduZWQgaW50IGlycSwgaW50IHR5cGUsIGludCBpbnRfcmVxKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9pcnEodW5zaWduZWQgaW50IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BjaS5jCmluZGV4IDRlNWE2ZTEuLmIxMzkyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BjaS5jCkBAIC00MCwxNyArNDAsMTcgQEAKIAogLyogVEJEICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZSA9IHsKLQkicGNpIElPIHNwYWNlIiwKLQkodTMyKVBDSV9JT19TVEFSVCwKLQkodTMyKVBDSV9JT19FTkQsCi0JSU9SRVNPVVJDRV9JTworCS5zdGFydAk9IFBDSV9JT19TVEFSVCwKKwkuZW5kCT0gUENJX0lPX0VORCwKKwkubmFtZQk9ICJQQ0kgSU8gc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZSA9IHsKLQkicGNpIG1lbW9yeSBzcGFjZSIsCi0JKHUzMilQQ0lfTUVNX1NUQVJULAotCSh1MzIpUENJX01FTV9FTkQsCi0JSU9SRVNPVVJDRV9NRU0KKwkuc3RhcnQJPSBQQ0lfTUVNX1NUQVJULAorCS5lbmQJPSBQQ0lfTUVNX0VORCwKKwkubmFtZQk9ICJQQ0kgbWVtb3J5IHNwYWNlIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGF1MXhfcGNpX29wczsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Byb20uYwppbmRleCA5YzE3MWFmLi5hZTdkOGM1N2JmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcHJvbS5jCkBAIC0xLDEwICsxLDkgQEAKIC8qCiAgKgogICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKiAgICBQUk9NIGxpYnJhcnkgaW5pdGlhbGlzYXRpb24gY29kZSwgYXNzdW1pbmcgYSB2ZXJzaW9uIG9mCi0gKiAgICBwbW9uIGlzIHRoZSBib290IGNvZGUuCisgKiAgICBQUk9NIGxpYnJhcnkgaW5pdGlhbGlzYXRpb24gY29kZSwgYXNzdW1pbmcgWUFNT04gaXMgdGhlIGJvb3QgbG9hZGVyLgogICoKLSAqIENvcHlyaWdodCAyMDAwLDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KICAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KICAqCkBAIC00OSw5ICs0OCw5IEBACiAKIHR5cGVkZWYgc3RydWN0CiB7Ci0gICAgY2hhciAqbmFtZTsKLS8qICAgIGNoYXIgKnZhbDsgKi8KLX10X2Vudl92YXI7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWw7Cit9IHRfZW52X3ZhcjsKIAogCiBjaGFyICogcHJvbV9nZXRjbWRsaW5lKHZvaWQpCkBAIC04NSwyMSArODQsMTYgQEAKIHsKIAkvKgogCSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGdpdmVuIGVudmlyb25tZW50IHZhcmlhYmxlLgotCSAqIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc3RvcmVkIGluIHRoZSBmb3JtIG9mICJtZW1zaXplPTY0Ii4KIAkgKi8KIAogCXRfZW52X3ZhciAqZW52ID0gKHRfZW52X3ZhciAqKXByb21fZW52cDsKLQlpbnQgaTsKIAotCWkgPSBzdHJsZW4oZW52bmFtZSk7Ci0KLQl3aGlsZShlbnYtPm5hbWUpIHsKLQkJaWYoc3RybmNtcChlbnZuYW1lLCBlbnYtPm5hbWUsIGkpID09IDApIHsKLQkJCXJldHVybihlbnYtPm5hbWUgKyBzdHJsZW4oZW52bmFtZSkgKyAxKTsKLQkJfQorCXdoaWxlIChlbnYtPm5hbWUpIHsKKwkJaWYgKHN0cmNtcChlbnZuYW1lLCBlbnYtPm5hbWUpID09IDApCisJCQlyZXR1cm4gZW52LT52YWw7CiAJCWVudisrOwogCX0KLQlyZXR1cm4oTlVMTCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBjaGFyIHN0cjJoZXhudW0odW5zaWduZWQgY2hhciBjKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKaW5kZXggMzA3ZTk4Yy4uOTcxNjViNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCkBAIC00OSwxNyArNDksMTMgQEAKIGV4dGVybiB2b2lkIGF1MTAwMF9yZXN0YXJ0KGNoYXIgKik7CiBleHRlcm4gdm9pZCBhdTEwMDBfaGFsdCh2b2lkKTsKIGV4dGVybiB2b2lkIGF1MTAwMF9wb3dlcl9vZmYodm9pZCk7Ci1leHRlcm4gc3RydWN0IHJlc291cmNlIGlvcG9ydF9yZXNvdXJjZTsKLWV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgaW9tZW1fcmVzb3VyY2U7Ci1leHRlcm4gdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CiBleHRlcm4gdm9pZCBhdTF4X3RpbWVfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkICgqYm9hcmRfdGltZXJfc2V0dXApKHN0cnVjdCBpcnFhY3Rpb24gKmlycSk7CiBleHRlcm4gdm9pZCBhdTF4X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSk7CiBleHRlcm4gdm9pZCBhdTF4eHhfdGltZV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgYXUxeHh4X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSk7CiBleHRlcm4gdm9pZCBzZXRfY3B1c3BlYyh2b2lkKTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlzdHJ1Y3QJY3B1X3NwZWMgKnNwOwogCWNoYXIgKmFyZ3B0cjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NsZWVwZXIuUyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NsZWVwZXIuUwppbmRleCA0NGRhYzNiLi42ODNkOWRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zbGVlcGVyLlMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2xlZXBlci5TCkBAIC0xMTIsNiArMTEyLDExIEBACiAJbXRjMAlrMCwgQ1AwX1BBR0VNQVNLCiAJbHcJazAsIDB4MTQoc3ApCiAJbXRjMAlrMCwgQ1AwX0NPTkZJRworCisJLyogV2UgbmVlZCB0byBjYXRjaCB0aGUgZWFscnkgQWxjaGVteSBTT0NzIHdpdGgKKwkgKiB0aGUgd3JpdGUtb25seSBDb25maWdbT0RdIGJpdCBhbmQgc2V0IGl0IGJhY2sgdG8gb25lLi4uCisJICovCisJamFsCWF1MXgwMF9maXh1cF9jb25maWdfb2QKIAlsdwkkMSwgUFRfUjEoc3ApCiAJbHcJJDIsIFBUX1IyKHNwKQogCWx3CSQzLCBQVF9SMyhzcCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYwppbmRleCBmODVmMTUyLi44NDJlMWI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCkBAIC01MCwxMCArNTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAotZXh0ZXJuIHZvaWQgZG9fc29mdGlycSh2b2lkKTsKLWV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKLXVuc2lnbmVkIGxvbmcgbWlzc2VkX2hlYXJ0X2JlYXRzID0gMDsKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgcjRrX29mZnNldDsgLyogQW1vdW50IHRvIGluY3JlbWVudCBjb21wYXJlIHJlZyBlYWNoIHRpbWUgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHI0a19jdXI7ICAgIC8qIFdoYXQgY291bnRlciBzaG91bGQgYmUgYXQgbmV4dCB0aW1lciBpcnEgKi8KIGludAlub19hdTF4eHhfMzJraHo7CkBAIC0xMTYsNiArMTEyLDcgQEAKIAogbnVsbDoKIAlhY2tfcjRrdGltZXIoMCk7CisJaXJxX2V4aXQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMzg3LDEwICszODQsOSBAQAogfQogI2VuZGlmCiAKLXZvaWQgYXUxeHh4X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKK3ZvaWQgX19pbml0IGF1MXh4eF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBlc3RfZnJlcTsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyAoKmRvX2dldHRpbWVvZmZzZXQpKHZvaWQpOworCXVuc2lnbmVkIGludCBlc3RfZnJlcTsKIAogCXByaW50aygiY2FsY3VsYXRpbmcgcjRrb2ZmLi4uICIpOwogCXI0a19vZmZzZXQgPSBjYWxfcjRrb2ZmKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NzYjI1MC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY3NiMjUwL2lycW1hcC5jCmluZGV4IDVjYjExNjYuLjU3ZDYwNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY3NiMjUwL2lycW1hcC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY3NiMjUwL2lycW1hcC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hdTEwMDAuaD4KIAotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7CiAKIAl7IEFVMTUwMF9HUElPXzIwNCwgSU5UQ19JTlRfSElHSF9MRVZFTCwgMH0sCiAJeyBBVTE1MDBfR1BJT18yMDEsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LApAQCAtNTcsNCArNTcsNCBAQAogCXsgQVUxNTAwX0dQSU9fMjA3LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvaXJxbWFwLmMKaW5kZXggZjYzMDI0YS4uMDEzOGM1YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvaXJxbWFwLmMKQEAgLTgwLDcgKzgwLDcgQEAKICNlbmRpZgogCiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCiAjaWZuZGVmIENPTkZJR19NSVBTX01JUkFHRQogI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MApAQCAtMTAxLDQgKzEwMSw0IEBACiAKIH07CiAKLWludCBhdTF4eHhfbnJfaXJxcyA9IHNpemVvZihhdTF4eHhfaXJxX21hcCkvc2l6ZW9mKGF1MXh4eF9pcnFfbWFwX3QpOworaW50IF9faW5pdGRhdGEgYXUxeHh4X25yX2lycXMgPSBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvaHlkcm9nZW4zL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9oeWRyb2dlbjMvaXJxbWFwLmMKaW5kZXggNmVhY2FhMC4uMTRlMWVkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9oeWRyb2dlbjMvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9oeWRyb2dlbjMvaXJxbWFwLmMKQEAgLTQ3LDEwICs0NywxMCBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXUxMDAwLmg+CiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCiAJLyogeyBBVTE1MDBfR1BJT18yMDUsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LCAqLwogCXsgQVUxMDAwX0dQSU9fMjEsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LAogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9tdHgtMS9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvbXR4LTEvaXJxbWFwLmMKaW5kZXggZjlhMGE4Yi4uNDY5M2E0ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9tdHgtMS9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL210eC0xL2lycW1hcC5jCkBAIC01OCw3ICs1OCw3IEBACiAgWzddID0geyAtMSwgSU5URCwgSU5UQywgSU5UWCwgSU5UWH0sICAgLyogSURTRUwgMDcgLSBBZGFwdGVyRC1TbG90MSAoYm90dG9tKSAqLwogfTsKIAotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7CiAgICAgICAgeyBBVTE1MDBfR1BJT18yMDQsIElOVENfSU5UX0hJR0hfTEVWRUwsIDB9LAogICAgICAgIHsgQVUxNTAwX0dQSU9fMjAxLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKICAgICAgICB7IEFVMTUwMF9HUElPXzIwMiwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sCkBAIC02Niw0ICs2Niw0IEBACiAgICAgICAgeyBBVTE1MDBfR1BJT18yMDUsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LAogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9wYjEwMDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTAwMC9pcnFtYXAuYwppbmRleCBhM2M0NjBlLi4xNTY1MDBiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3BiMTAwMC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTAwMC9pcnFtYXAuYwpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKLWF1MXh4eF9pcnFfbWFwX3QgYXUxeHh4X2lycV9tYXBbXSA9IHsKK2F1MXh4eF9pcnFfbWFwX3QgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewogCXsgQVUxMDAwX0dQSU9fMTUsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LAogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9wYjExMDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTEwMC9pcnFtYXAuYwppbmRleCA0M2JlNzE1Li5kOTg2OTE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3BiMTEwMC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTEwMC9pcnFtYXAuYwpAQCAtNDcsMTEgKzQ3LDExIEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7CiAJeyBBVTEwMDBfR1BJT185LCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwgLy8gUENNQ0lBIENhcmQgRnVsbHlfSW50ZXJ0ZWQjCiAJeyBBVTEwMDBfR1BJT18xMCwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sIC8vIFBDTUNJQSBDYXJkIFNUU0NIRyMKIAl7IEFVMTAwMF9HUElPXzExLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwgLy8gUENNQ0lBIENhcmQgSVJRIwogCXsgQVUxMDAwX0dQSU9fMTMsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LCAvLyBEQ19JUlEjCiB9OwogCi1pbnQgYXUxeHh4X25yX2lycXMgPSBzaXplb2YoYXUxeHh4X2lycV9tYXApL3NpemVvZihhdTF4eHhfaXJxX21hcF90KTsKK2ludCBfX2luaXRkYXRhIGF1MXh4eF9ucl9pcnFzID0gQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL3BiMTIwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvcGIxMjAwL2lycW1hcC5jCmluZGV4IDU5ZTcwZTUuLmJhY2MwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxMjAwL2lycW1hcC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvcGIxMjAwL2lycW1hcC5jCkBAIC01NSwxMSArNTUsMTEgQEAKICNkZWZpbmUgUEIxMjAwX0lOVF9FTkQgREIxMjAwX0lOVF9FTkQKICNlbmRpZgogCi1hdTF4eHhfaXJxX21hcF90IGF1MXh4eF9pcnFfbWFwW10gPSB7CithdTF4eHhfaXJxX21hcF90IF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKIAl7IEFVMTAwMF9HUElPXzcsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LCAvLyBUaGlzIGlzIGV4dGVyYW5sIGludGVycnVwdCBjYXNjYWRlCiB9OwogCi1pbnQgYXUxeHh4X25yX2lycXMgPSBzaXplb2YoYXUxeHh4X2lycV9tYXApL3NpemVvZihhdTF4eHhfaXJxX21hcF90KTsKK2ludCBfX2luaXRkYXRhIGF1MXh4eF9ucl9pcnFzID0gQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCk7CiAKIC8qCiAgKglTdXBwb3J0IGZvciBFeHRlcm5hbCBpbnRlcnJ1cHRzIG9uIHRoZSBQYkF1MTIwMCBEZXZlbG9wbWVudCBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxNTAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9wYjE1MDAvaXJxbWFwLmMKaW5kZXggOGNiNzZjMi4uNDA5ZDE2MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9wYjE1MDAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9wYjE1MDAvaXJxbWFwLmMKQEAgLTUyLDcgKzUyLDcgQEAKICBbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URH0sICAgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLwogfTsKIAotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7CiAJeyBBVTE1MDBfR1BJT18yMDQsIElOVENfSU5UX0hJR0hfTEVWRUwsIDB9LAogCXsgQVUxNTAwX0dQSU9fMjAxLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIAl7IEFVMTUwMF9HUElPXzIwMiwgSU5UQ19JTlRfTE9XX0xFVkVMLCAwIH0sCkBAIC02MCw0ICs2MCw0IEBACiAJeyBBVTE1MDBfR1BJT18yMDUsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LAogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9wYjE1NTAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTU1MC9pcnFtYXAuYwppbmRleCA0N2M3YTFjLi4yNGE5ZDE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL3BiMTU1MC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3BiMTU1MC9pcnFtYXAuYwpAQCAtNTIsOSArNTIsOSBAQAogIFsxM10gPQl7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREfSwgICAvKiBJRFNFTCAxMyAtIFBDSSBzbG90IDEgKHJpZ2h0KSAqLwogfTsKIAotYXUxeHh4X2lycV9tYXBfdCBhdTF4eHhfaXJxX21hcFtdID0geworYXUxeHh4X2lycV9tYXBfdCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7CiAJeyBBVTEwMDBfR1BJT18wLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKIAl7IEFVMTAwMF9HUElPXzEsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LAogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC94eHMxNTAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC94eHMxNTAwL2lycW1hcC5jCmluZGV4IDUyZjJmN2QuLjM4NDRjNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAveHhzMTUwMC9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL3h4czE1MDAvaXJxbWFwLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2F1MTAwMC5oPgogCi1hdTF4eHhfaXJxX21hcF90IGF1MXh4eF9pcnFfbWFwW10gPSB7CithdTF4eHhfaXJxX21hcF90IF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKIAl7IEFVMTUwMF9HUElPXzIwNCwgSU5UQ19JTlRfSElHSF9MRVZFTCwgMH0sCiAJeyBBVTE1MDBfR1BJT18yMDEsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LAogCXsgQVUxNTAwX0dQSU9fMjAyLCBJTlRDX0lOVF9MT1dfTEVWRUwsIDAgfSwKQEAgLTYzLDQgKzYzLDQgQEAKIAl7IEFVMTAwMF9HUElPXzUsIElOVENfSU5UX0xPV19MRVZFTCwgMCB9LAogfTsKIAotaW50IGF1MXh4eF9ucl9pcnFzID0gc2l6ZW9mKGF1MXh4eF9pcnFfbWFwKS9zaXplb2YoYXUxeHh4X2lycV9tYXBfdCk7CitpbnQgX19pbml0ZGF0YSBhdTF4eHhfbnJfaXJxcyA9IEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvTWFrZWZpbGUgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTkxNDJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciBCYXNsZXIgZVhjaXRlCisjCisKK29iai0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSBleGNpdGVfaXJxLm8gZXhjaXRlX3Byb20ubyBleGNpdGVfc2V0dXAubyBcCisJCQkJICAgZXhjaXRlX2RldmljZS5vIGV4Y2l0ZV9wcm9jZnMubworCitvYmotJChDT05GSUdfS0dEQikJCSs9IGV4Y2l0ZV9kYmdfaW8ubworb2JqLW0JCQkJKz0gZXhjaXRlX2lvZGV2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kYmdfaW8uYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kYmdfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y2YmRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RiZ19pby5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgJiYgQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTID4gMQorI2Vycm9yIERlYnVnIHBvcnQgdXNlZCBieSBzZXJpYWwgZHJpdmVyCisjZW5kaWYKKworI2RlZmluZSBVQVJUX0NMSwkJMjUwMDAwMDAKKyNkZWZpbmUgQkFTRV9CQVVECQkoVUFSVF9DTEsgLyAxNikKKyNkZWZpbmUgUkVHSVNURVJfQkFTRV8wCQkweDAyMDhVTAorI2RlZmluZSBSRUdJU1RFUl9CQVNFXzEJCTB4MDIzOFVMCisKKyNkZWZpbmUgUkVHSVNURVJfQkFTRV9EQkcJUkVHSVNURVJfQkFTRV8xCisKKyNkZWZpbmUgQ1BSUgkweDAwMDQKKyNkZWZpbmUgVUFDRkcJMHgwMjAwCisjZGVmaW5lIFVBSU5UUwkweDAyMDQKKyNkZWZpbmUgVUFSQlIJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDAwKQorI2RlZmluZSBVQVRIUgkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMDQpCisjZGVmaW5lIFVBRExMCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAwOCkKKyNkZWZpbmUgVUFJRVIJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDBjKQorI2RlZmluZSBVQURMSAkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMTApCisjZGVmaW5lIFVBSUlSCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAxNCkKKyNkZWZpbmUgVUFGQ1IJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDE4KQorI2RlZmluZSBVQUxDUgkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMWMpCisjZGVmaW5lIFVBTUNSCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAyMCkKKyNkZWZpbmUgVUFMU1IJKFJFR0lTVEVSX0JBU0VfREJHICsgMHgwMDI0KQorI2RlZmluZSBVQU1TUgkoUkVHSVNURVJfQkFTRV9EQkcgKyAweDAwMjgpCisjZGVmaW5lIFVBU0NSCShSRUdJU1RFUl9CQVNFX0RCRyArIDB4MDAyYykKKworI2RlZmluZQlQQVJJVFlfTk9ORQkwCisjZGVmaW5lCVBBUklUWV9PREQJMHgwOAorI2RlZmluZQlQQVJJVFlfRVZFTgkweDE4CisjZGVmaW5lCVBBUklUWV9NQVJLCTB4MjgKKyNkZWZpbmUJUEFSSVRZX1NQQUNFCTB4MzgKKworI2RlZmluZQlEQVRBXzVCSVQJMHgwCisjZGVmaW5lCURBVEFfNkJJVAkweDEKKyNkZWZpbmUJREFUQV83QklUCTB4MgorI2RlZmluZQlEQVRBXzhCSVQJMHgzCisKKyNkZWZpbmUJU1RPUF8xQklUCTB4MAorI2RlZmluZQlTVE9QXzJCSVQJMHg0CisKKyNkZWZpbmUgQkFVRF9EQkcJNTc2MDAKKyNkZWZpbmUJUEFSSVRZX0RCRwlQQVJJVFlfTk9ORQorI2RlZmluZQlEQVRBX0RCRwlEQVRBXzhCSVQKKyNkZWZpbmUJU1RPUF9EQkcJU1RPUF8xQklUCisKKy8qIEluaXRpYWxpemUgdGhlIHNlcmlhbCBwb3J0IGZvciBLR0RCIGRlYnVnZ2luZyAqLwordm9pZCBfX2luaXQgZXhjaXRlX2tnZGJfaW5pdCh2b2lkKQoreworCWNvbnN0IHUzMiBkaXZpc29yID0gQkFTRV9CQVVEIC8gQkFVRF9EQkc7CisKKwkvKiBUYWtlIHRoZSBVQVJUIG91dCBvZiByZXNldCAqLworCXRpdGFuX3dyaXRlbCgweDAwZmYxY2ZmLCBDUFJSKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgVUFDRkcpOworCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAyLCBVQUNGRyk7CisKKwl0aXRhbl93cml0ZWwoMHgwLCBVQUxDUik7CisJdGl0YW5fd3JpdGVsKDB4MCwgVUFJRVIpOworCisJLyogRGlzYWJsZSBGSUZPcyAqLworCXRpdGFuX3dyaXRlbCgweDAwLCBVQUZDUik7CisKKwl0aXRhbl93cml0ZWwoMHg4MCwgVUFMQ1IpOworCXRpdGFuX3dyaXRlbChkaXZpc29yICYgMHhmZiwgVUFETEwpOworCXRpdGFuX3dyaXRlbCgoZGl2aXNvciAmIDB4ZmYwMCkgPj4gOCwgVUFETEgpOworCXRpdGFuX3dyaXRlbCgweDAsIFVBTENSKTsKKworCXRpdGFuX3dyaXRlbChEQVRBX0RCRyB8IFBBUklUWV9EQkcgfCBTVE9QX0RCRywgVUFMQ1IpOworCisJLyogRW5hYmxlIHJlY2VpdmVyIGludGVycnVwdCAqLworCXRpdGFuX3JlYWRsKFVBUkJSKTsKKwl0aXRhbl93cml0ZWwoMHgxLCBVQUlFUik7Cit9CisKK2ludCBnZXREZWJ1Z0NoYXIodm9pZCkKK3sKKwl3aGlsZSAoISh0aXRhbl9yZWFkbChVQUxTUikgJiAweDEpKTsKKwlyZXR1cm4gdGl0YW5fcmVhZGwoVUFSQlIpOworfQorCitpbnQgcHV0RGVidWdDaGFyKGludCBkYXRhKQoreworCXdoaWxlICghKHRpdGFuX3JlYWRsKFVBTFNSKSAmIDB4MjApKTsKKwl0aXRhbl93cml0ZWwoZGF0YSwgVUFUSFIpOworCXJldHVybiAxOworfQorCisvKiBLR0RCIGludGVycnVwdCBoYW5kbGVyICovCithc21saW5rYWdlIHZvaWQgZXhjaXRlX2tnZGJfaW50aGRsKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICh1bmxpa2VseSgKKwkJKCh0aXRhbl9yZWFkbChVQUlJUikgJiAweDcpID09IDQpCisJCSYmICgodGl0YW5fcmVhZGwoVUFSQlIpICYgMHhmZikgPT0gMHgzKSkpCisJCQlzZXRfYXN5bmNfYnJlYWtwb2ludCgmcmVncy0+Y3AwX2VwYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlYzc2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kZXZpY2UuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CisKKyNpbmNsdWRlIDxleGNpdGUuaD4KKyNpbmNsdWRlIDxybTlrX2V0aC5oPgorI2luY2x1ZGUgPHJtOWtfd2R0Lmg+CisjaW5jbHVkZSA8cm05a194aWNhcC5oPgorI2luY2x1ZGUgPGV4Y2l0ZV9uYW5kZmxhc2guaD4KKworI2luY2x1ZGUgImV4Y2l0ZV9pb2Rldi5oIgorCisjZGVmaW5lIFJNOUtfR0VfVU5JVAkwCisjZGVmaW5lIFhJQ0FQX1VOSVQJMAorI2RlZmluZSBOQU5EX1VOSVQJMAorCisjZGVmaW5lIERMTF9USU1FT1VUCTMJCS8qIHNlY29uZHMgKi8KKworCisjZGVmaW5lIFJJTklUKF9fc3RhcnRfXywgX19lbmRfXywgX19uYW1lX18sIF9fcGFyZW50X18pIHsJXAorCS5uYW1lCT0gX19uYW1lX18gIl8wIiwJCQkJXAorCS5zdGFydAk9IChfX3N0YXJ0X18pLAkJCQkJXAorCS5lbmQJPSAoX19lbmRfXyksCQkJCQlcCisJLmZsYWdzCT0gMCwJCQkJCQlcCisJLnBhcmVudAk9IChfX3BhcmVudF9fKQkJCQkJXAorfQorCisjZGVmaW5lIFJJTklUX0lSUShfX2lycV9fLCBfX25hbWVfXykgewlcCisJLm5hbWUJPSBfX25hbWVfXyAiXzAiLAlcCisJLnN0YXJ0CT0gKF9faXJxX18pLAkJXAorCS5lbmQJPSAoX19pcnFfXyksCQlcCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCVwKKwkucGFyZW50CT0gTlVMTAkJCVwKK30KKworCisKK2VudW0geworCXNsaWNlX3hpY2FwLAorCXNsaWNlX2V0aAorfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UKKwlleGNpdGVfY3RyX3Jlc291cmNlID0geworCQkubmFtZQkJPSAiR1BJIGNvdW50ZXJzIiwKKwkJLnN0YXJ0CQk9IDAsCisJCS5lbmQJCT0gNSwKKwkJLmZsYWdzCQk9IDAsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLnNpYmxpbmcJPSBOVUxMLAorCQkuY2hpbGQJCT0gTlVMTAorCX0sCisJZXhjaXRlX2dwaXNsaWNlX3Jlc291cmNlID0geworCQkubmFtZQkJPSAiR1BJIHNsaWNlcyIsCisJCS5zdGFydAkJPSAwLAorCQkuZW5kCQk9IDEsCisJCS5mbGFncwkJPSAwLAorCQkucGFyZW50CQk9IE5VTEwsCisJCS5zaWJsaW5nCT0gTlVMTCwKKwkJLmNoaWxkCQk9IE5VTEwKKwl9LAorCWV4Y2l0ZV9tZGlvX2NoYW5uZWxfcmVzb3VyY2UgPSB7CisJCS5uYW1lCQk9ICJNRElPIGNoYW5uZWxzIiwKKwkJLnN0YXJ0CQk9IDAsCisJCS5lbmQJCT0gMSwKKwkJLmZsYWdzCQk9IDAsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLnNpYmxpbmcJPSBOVUxMLAorCQkuY2hpbGQJCT0gTlVMTAorCX0sCisJZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UgPSB7CisJCS5uYW1lCQk9ICJGSUZPIG1lbW9yeSIsCisJCS5zdGFydAkJPSAwLAorCQkuZW5kCQk9IDc2NywKKwkJLmZsYWdzCQk9IDAsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLnNpYmxpbmcJPSBOVUxMLAorCQkuY2hpbGQJCT0gTlVMTAorCX0sCisJZXhjaXRlX3NjcmFtX3Jlc291cmNlID0geworCQkubmFtZQkJPSAiU2NyYXRjaCBSQU0iLAorCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfU0NSQU0sCisJCS5lbmQJCT0gRVhDSVRFX1BIWVNfU0NSQU0gKyBFWENJVEVfU0laRV9TQ1JBTSAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkJLnBhcmVudAkJPSBOVUxMLAorCQkuc2libGluZwk9IE5VTEwsCisJCS5jaGlsZAkJPSBOVUxMCisJfSwKKwlleGNpdGVfZnBnYV9yZXNvdXJjZSA9IHsKKwkJLm5hbWUJCT0gIlN5c3RlbSBGUEdBIiwKKwkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX0ZQR0EsCisJCS5lbmQJCT0gRVhDSVRFX1BIWVNfRlBHQSArIEVYQ0lURV9TSVpFX0ZQR0EgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLnNpYmxpbmcJPSBOVUxMLAorCQkuY2hpbGQJCT0gTlVMTAorCX0sCisJZXhjaXRlX25hbmRfcmVzb3VyY2UgPSB7CisJCS5uYW1lCQk9ICJOQU5EIGZsYXNoIGNvbnRyb2wiLAorCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfTkFORCwKKwkJLmVuZAkJPSBFWENJVEVfUEhZU19OQU5EICsgRVhDSVRFX1NJWkVfTkFORCAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkJLnBhcmVudAkJPSBOVUxMLAorCQkuc2libGluZwk9IE5VTEwsCisJCS5jaGlsZAkJPSBOVUxMCisJfSwKKwlleGNpdGVfdGl0YW5fcmVzb3VyY2UgPSB7CisJCS5uYW1lCQk9ICJUSVRBTiByZWdpc3RlcnMiLAorCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfVElUQU4sCisJCS5lbmQJCT0gRVhDSVRFX1BIWVNfVElUQU4gKyBFWENJVEVfU0laRV9USVRBTiAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkJLnBhcmVudAkJPSBOVUxMLAorCQkuc2libGluZwk9IE5VTEwsCisJCS5jaGlsZAkJPSBOVUxMCisJfTsKKworCisKK3N0YXRpYyB2b2lkIGFkanVzdF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBuKQoreworCXN0cnVjdCByZXNvdXJjZSAqcDsKKwljb25zdCB1bnNpZ25lZCBsb25nIG1hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0KKwkJCQkgICB8IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ETUE7CisKKwlmb3IgKHAgPSByZXM7IHAgPCByZXMgKyBuOyBwKyspIHsKKwkJY29uc3Qgc3RydWN0IHJlc291cmNlICogY29uc3QgcGFyZW50ID0gcC0+cGFyZW50OworCQlpZiAocGFyZW50KSB7CisJCQlwLT5zdGFydCArPSBwYXJlbnQtPnN0YXJ0OworCQkJcC0+ZW5kICAgKz0gcGFyZW50LT5zdGFydDsKKwkJCXAtPmZsYWdzID0gIHBhcmVudC0+ZmxhZ3MgJiBtYXNrOworCQl9CisJfQorfQorCisKKworI2lmIGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSSkgfHwgZGVmaW5lZChDT05GSUdfRVhDSVRFX0ZDQVBfR1BJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeGljYXBfcnNyY1tdID0geworCVJJTklUKDB4NDg0MCwgMHg0ODZmLCBYSUNBUF9SRVNPVVJDRV9GSUZPX1JYLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDQ5NDAsIDB4NDk0YiwgWElDQVBfUkVTT1VSQ0VfRklGT19UWCwgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCisJUklOSVQoMHg1MDQwLCAweDUxMjcsIFhJQ0FQX1JFU09VUkNFX1hETUEsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4MTAwMCwgMHgxMTJmLCBYSUNBUF9SRVNPVVJDRV9QS1RQUk9DLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKKwlSSU5JVCgweDExMDAsIDB4MTEwZiwgWElDQVBfUkVTT1VSQ0VfUEtUX1NUUkVBTSwgJmV4Y2l0ZV9mcGdhX3Jlc291cmNlKSwKKwlSSU5JVCgweDA4MDAsIDB4MGJmZiwgWElDQVBfUkVTT1VSQ0VfRE1BREVTQywgJmV4Y2l0ZV9zY3JhbV9yZXNvdXJjZSksCisJUklOSVQoc2xpY2VfeGljYXAsIHNsaWNlX3hpY2FwLCBYSUNBUF9SRVNPVVJDRV9HUElfU0xJQ0UsICZleGNpdGVfZ3Bpc2xpY2VfcmVzb3VyY2UpLAorCVJJTklUKDB4MDEwMCwgMHgwMmZmLCBYSUNBUF9SRVNPVVJDRV9GSUZPX0JMSywgJmV4Y2l0ZV9maWZvbWVtX3Jlc291cmNlKSwKKwlSSU5JVF9JUlEoVElUQU5fSVJRLCAgWElDQVBfUkVTT1VSQ0VfSVJRKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgeGljYXBfcGRldiA9IHsKKwkubmFtZQkJPSBYSUNBUF9OQU1FLAorCS5pZAkJPSBYSUNBUF9VTklULAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh4aWNhcF9yc3JjKSwKKwkucmVzb3VyY2UJPSB4aWNhcF9yc3JjCit9OworCisvKgorICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgR1BJIHBvcnQgdGhhdCByZWNlaXZlcyB0aGUKKyAqIGltYWdlIGRhdGEgZnJvbSB0aGUgZW1iZWRkZWQgY2FtZXJhLgorICovCitzdGF0aWMgaW50IF9faW5pdCB4aWNhcF9kZXZpbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0ZW5kOworCXUzMiByZWc7CisJaW50IHJldHZhbDsKKworCWFkanVzdF9yZXNvdXJjZXMoeGljYXBfcnNyYywgQVJSQVlfU0laRSh4aWNhcF9yc3JjKSk7CisKKwkvKiBQb3dlciB1cCB0aGUgc2xpY2UgYW5kIGNvbmZpZ3VyZSBpdC4gKi8KKwlyZWcgPSB0aXRhbl9yZWFkbChDUFRDMVIpOworCXJlZyAmPSB+KDB4MTExMDAgPDwgc2xpY2VfeGljYXApOworCXRpdGFuX3dyaXRlbChyZWcsIENQVEMxUik7CisKKwkvKiBFbmFibGUgc2xpY2UgJiBETEwuICovCisJcmVnPSB0aXRhbl9yZWFkbChDUFJSKTsKKwlyZWcgJj0gfigweDAwMDMwMDAzIDw8IChzbGljZV94aWNhcCAqIDIpKTsKKwl0aXRhbl93cml0ZWwocmVnLCBDUFJSKTsKKworCS8qIFdhaXQgZm9yIERMTHMgdG8gbG9jayAqLworCXRlbmQgPSBqaWZmaWVzICsgRExMX1RJTUVPVVQgKiBIWjsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGVuZCkpIHsKKwkJaWYgKCEofnRpdGFuX3JlYWRsKENQRFNSKSAmICgweDEgPDwgKHNsaWNlX3hpY2FwICogNCkpKSkKKwkJCWJyZWFrOworCQl5aWVsZCgpOworCX0KKworCWlmICh+dGl0YW5fcmVhZGwoQ1BEU1IpICYgKDB4MSA8PCAoc2xpY2VfeGljYXAgKiA0KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRExMIG5vdCBsb2NrZWQgYWZ0ZXIgJXUgc2Vjb25kc1xuIiwKKwkJICAgICAgIHhpY2FwX3BkZXYubmFtZSwgRExMX1RJTUVPVVQpOworCQlyZXR2YWwgPSAtRVRJTUU7CisJfSBlbHNlIHsKKwkJLyogUmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovCisJCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmeGljYXBfcGRldik7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworZGV2aWNlX2luaXRjYWxsKHhpY2FwX2RldmluaXQpOworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSSkgfHwgZGVmaW5lZChDT05GSUdfRVhDSVRFX0ZDQVBfR1BJX01PRFVMRSkgKi8KKworCisKKyNpZiBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUEkpIHx8IGRlZmluZWQoQ09ORklHX1dEVF9STTlLX0dQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yc3JjW10gPSB7CisJUklOSVQoMCwgMCwgV0RUX1JFU09VUkNFX0NPVU5URVIsICZleGNpdGVfY3RyX3Jlc291cmNlKSwKKwlSSU5JVCgweDAwODQsIDB4MDA4ZiwgV0RUX1JFU09VUkNFX1JFR1MsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUX0lSUShUSVRBTl9JUlEsICBXRFRfUkVTT1VSQ0VfSVJRKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2R0X3BkZXYgPSB7CisJLm5hbWUJCT0gV0RUX05BTUUsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcnNyYyksCisJLnJlc291cmNlCT0gd2R0X3JzcmMKK307CisKKy8qCisgKiBDcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZm9yIHRoZSBHUEkgcG9ydCB0aGF0IHJlY2VpdmVzIHRoZQorICogaW1hZ2UgZGF0YSBmcm9tIHRoZSBlbWJlZGRlZCBjYW1lcmEuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHdkdF9kZXZpbml0KHZvaWQpCit7CisJYWRqdXN0X3Jlc291cmNlcyh3ZHRfcnNyYywgQVJSQVlfU0laRSh3ZHRfcnNyYykpOworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndkdF9wZGV2KTsKK30KKworZGV2aWNlX2luaXRjYWxsKHdkdF9kZXZpbml0KTsKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUEkpIHx8IGRlZmluZWQoQ09ORklHX1dEVF9STTlLX0dQSV9NT0RVTEUpICovCisKKworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV4Y2l0ZV9uYW5kZmxhc2hfcnNyY1tdID0geworIAlSSU5JVCgweDIwMDAsIDB4MjAxZiwgRVhDSVRFX05BTkRGTEFTSF9SRVNPVVJDRV9SRUdTLCAgJmV4Y2l0ZV9uYW5kX3Jlc291cmNlKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXhjaXRlX25hbmRmbGFzaF9wZGV2ID0geworCS5uYW1lCQk9ICJleGNpdGVfbmFuZCIsCisJLmlkCQk9IE5BTkRfVU5JVCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXhjaXRlX25hbmRmbGFzaF9yc3JjKSwKKwkucmVzb3VyY2UJPSBleGNpdGVfbmFuZGZsYXNoX3JzcmMKK307CisKKy8qCisgKiBDcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZm9yIHRoZSBhY2Nlc3MgdG8gdGhlIG5hbmQtZmxhc2gKKyAqIHBvcnQKKyAqLworc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRmbGFzaF9kZXZpbml0KHZvaWQpCit7CisJYWRqdXN0X3Jlc291cmNlcyhleGNpdGVfbmFuZGZsYXNoX3JzcmMsIEFSUkFZX1NJWkUoZXhjaXRlX25hbmRmbGFzaF9yc3JjKSk7CisKKyAgICAgICAgLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUgKi8KKworICAgICAgICAvKiBSZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8KKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZleGNpdGVfbmFuZGZsYXNoX3BkZXYpOworfQorCitkZXZpY2VfaW5pdGNhbGwoZXhjaXRlX25hbmRmbGFzaF9kZXZpbml0KTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9kZXZfcnNyY1tdID0geworCVJJTklUX0lSUShGUEdBMV9JUlEsICBJT0RFVl9SRVNPVVJDRV9JUlEpCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb19wZGV2ID0geworCS5uYW1lCQk9IElPREVWX05BTUUsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpb2Rldl9yc3JjKSwKKwkucmVzb3VyY2UJPSBpb2Rldl9yc3JjCit9OworCisvKgorICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgZXh0ZXJuYWwgSS9PIHBvcnRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBpb19kZXZpbml0KHZvaWQpCit7CisJYWRqdXN0X3Jlc291cmNlcyhpb2Rldl9yc3JjLCBBUlJBWV9TSVpFKGlvZGV2X3JzcmMpKTsKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpb19wZGV2KTsKK30KKworZGV2aWNlX2luaXRjYWxsKGlvX2RldmluaXQpOworCisKKworCisjaWYgZGVmaW5lZChDT05GSUdfUk05S19HRSkgfHwgZGVmaW5lZChDT05GSUdfUk05S19HRV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJtOWtfZ2VfcnNyY1tdID0geworCVJJTklUKDB4MjIwMCwgMHgyN2ZmLCBSTTlLX0dFX1JFU09VUkNFX01BQywgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCisJUklOSVQoMHgxODAwLCAweDFmZmYsIFJNOUtfR0VfUkVTT1VSQ0VfTVNUQVQsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4MjAwMCwgMHgyMTJmLCBSTTlLX0dFX1JFU09VUkNFX1BLVFBST0MsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4NTE0MCwgMHg1MjI3LCBSTTlLX0dFX1JFU09VUkNFX1hETUEsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4NDg3MCwgMHg0ODlmLCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9fUlgsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4NDk0YywgMHg0OTU3LCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9fVFgsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4MDAwMCwgMHgwMDdmLCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9NRU1fUlgsICZleGNpdGVfZmlmb21lbV9yZXNvdXJjZSksCisJUklOSVQoMHgwMDgwLCAweDAwZmYsIFJNOUtfR0VfUkVTT1VSQ0VfRklGT01FTV9UWCwgJmV4Y2l0ZV9maWZvbWVtX3Jlc291cmNlKSwKKwlSSU5JVCgweDAxODAsIDB4MDE5ZiwgUk05S19HRV9SRVNPVVJDRV9QSFksICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAorCVJJTklUKDB4MDAwMCwgMHgwM2ZmLCBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfUlgsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpLAorCVJJTklUKDB4MDQwMCwgMHgwN2ZmLCBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfVFgsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpLAorCVJJTklUKHNsaWNlX2V0aCwgc2xpY2VfZXRoLCBSTTlLX0dFX1JFU09VUkNFX0dQSV9TTElDRSwgJmV4Y2l0ZV9ncGlzbGljZV9yZXNvdXJjZSksCisJUklOSVQoMCwgMCwgUk05S19HRV9SRVNPVVJDRV9NRElPX0NIQU5ORUwsICZleGNpdGVfbWRpb19jaGFubmVsX3Jlc291cmNlKSwKKwlSSU5JVF9JUlEoVElUQU5fSVJRLCAgUk05S19HRV9SRVNPVVJDRV9JUlFfTUFJTiksCisJUklOSVRfSVJRKFBIWV9JUlEsIFJNOUtfR0VfUkVTT1VSQ0VfSVJRX1BIWSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJtOWtfZ2VfcGRldiA9IHsKKwkubmFtZQkJPSBSTTlLX0dFX05BTUUsCisJLmlkCQk9IFJNOUtfR0VfVU5JVCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocm05a19nZV9yc3JjKSwKKwkucmVzb3VyY2UJPSBybTlrX2dlX3JzcmMKK307CisKKworCisvKgorICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgRXRoZXJuZXQgcG9ydC4KKyAqLworc3RhdGljIGludCBfX2luaXQgcm05a19nZV9kZXZpbml0KHZvaWQpCit7CisJdTMyIHJlZzsKKworCWFkanVzdF9yZXNvdXJjZXMocm05a19nZV9yc3JjLCBBUlJBWV9TSVpFKHJtOWtfZ2VfcnNyYykpOworCisJLyogUG93ZXIgdXAgdGhlIHNsaWNlIGFuZCBjb25maWd1cmUgaXQuICovCisJcmVnID0gdGl0YW5fcmVhZGwoQ1BUQzFSKTsKKwlyZWcgJj0gfigweDExMDAwIDw8IHNsaWNlX2V0aCk7CisJcmVnIHw9IDB4MTAwIDw8IHNsaWNlX2V0aDsKKwl0aXRhbl93cml0ZWwocmVnLCBDUFRDMVIpOworCisJLyogVGFrZSB0aGUgTUFDIG91dCBvZiByZXNldCwgcmVzZXQgdGhlIERMTHMuICovCisJcmVnID0gdGl0YW5fcmVhZGwoQ1BSUik7CisJcmVnICY9IH4oMHgwMDAzMDAwMCA8PCAoc2xpY2VfZXRoICogMikpOworCXJlZyB8PSAweDMgPDwgKHNsaWNlX2V0aCAqIDIpOworCXRpdGFuX3dyaXRlbChyZWcsIENQUlIpOworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmcm05a19nZV9wZGV2KTsKK30KKworZGV2aWNlX2luaXRjYWxsKHJtOWtfZ2VfZGV2aW5pdCk7CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUk05S19HRSkgfHwgZGVmaW5lZChDT05GSUdfUk05S19HRV9NT0RVTEUpICovCisKKworCitzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfc2V0dXBfZGV2cyh2b2lkKQoreworCWludCByZXM7CisJdTMyIHJlZzsKKworCS8qIEVuYWJsZSB4ZG1hIGFuZCBmaWZvIGludGVycnVwdHMgKi8KKwlyZWcgPSB0aXRhbl9yZWFkbCgweDAwNTApOworCXRpdGFuX3dyaXRlbChyZWcgfCAweDE4MDAwMDAwLCAweDAwNTApOworCisJcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisJcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisJcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfZnBnYV9yZXNvdXJjZSk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKwlyZXMgPSByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmV4Y2l0ZV9uYW5kX3Jlc291cmNlKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCWV4Y2l0ZV9mcGdhX3Jlc291cmNlLmZsYWdzID0gZXhjaXRlX2ZwZ2FfcmVzb3VyY2UucGFyZW50LT5mbGFncyAmCisJCQkJICAgKCBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0KKwkJCQkgICB8IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ETUEpOworCWV4Y2l0ZV9uYW5kX3Jlc291cmNlLmZsYWdzID0gZXhjaXRlX25hbmRfcmVzb3VyY2UucGFyZW50LT5mbGFncyAmCisJCQkJICAgKCBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0KKwkJCQkgICB8IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ETUEpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoZXhjaXRlX3NldHVwX2RldnMpOworCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZmxhc2h0ZXN0LmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZmxhc2h0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwMjRhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9mbGFzaHRlc3QuYwpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyogIENvcHlyaWdodCAoQykgMjAwNSBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworKiAgQXV0aG9yOiBUaGllcyBNb2VsbGVyIDx0aGllcy5tb2VsbGVyQGJhc2xlcndlYi5jb20+CisqCisqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxleGNpdGUuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vcm05ay1vY2QuaD4gLy8gZm9yIG9jZF93cml0ZQorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPiAvLyBmb3IgcXVldWUKKworI2luY2x1ZGUgImV4Y2l0ZV9uYW5kZmxhc2guaCIKKyNpbmNsdWRlICJuYW5kZmxhc2guaCIKKworI2RlZmluZSBQRlggImV4Y2l0ZSBmbGFzaHRlc3Q6ICIKK3R5cGVkZWYgdm9pZCBfX2lvbWVtICppb19yZWdfdDsKKworI2RlZmluZSBpb19yZWFkYihfX2FfXykJCV9fcmF3X3JlYWRiKChfX2FfXykpCisjZGVmaW5lIGlvX3dyaXRlYihfX3ZfXywgX19hX18pCV9fcmF3X3dyaXRlYigoX192X18pLCAoX19hX18pKQorCisKKworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmV4Y2l0ZV9uYW5kZmxhc2hfZ2V0X3Jlc291cmNlKAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmJhc2VuYW1lKQoreworCWNvbnN0IGNoYXIgZm10W10gPSAiJXNfJXUiOworCWNoYXIgYnVmWzgwXTsKKworCWlmICh1bmxpa2VseShzbnByaW50ZihidWYsIHNpemVvZiBidWYsIGZtdCwgYmFzZW5hbWUsIGQtPmlkKSA+PSBzaXplb2YgYnVmKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkLCBmbGFncywgYnVmKTsKK30KKworc3RhdGljIGlubGluZSBpb19yZWdfdAorZXhjaXRlX25hbmRmbGFzaF9tYXBfcmVncyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkLCBjb25zdCBjaGFyICpiYXNlbmFtZSkKK3sKKwl2b2lkICpyZXN1bHQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqY29uc3QgciA9CisJICAgIGV4Y2l0ZV9uYW5kZmxhc2hfZ2V0X3Jlc291cmNlKGQsIElPUkVTT1VSQ0VfTUVNLCBiYXNlbmFtZSk7CisJaWYgKHIpCisJICAgcmVzdWx0ID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgKyAxIC0gci0+c3RhcnQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNvbnRyb2xsZXIgYW5kIG10ZCBpbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgZXhjaXRlX25hbmRmbGFzaF9kcnZkYXRhIHsKKwlzdHJ1Y3QgbXRkX2luZm8gYm9hcmRfbXRkOworCXN0cnVjdCBuYW5kX2NoaXAgYm9hcmRfY2hpcDsKKwlpb19yZWdfdCByZWdzOworfTsKKworCisvKiBjb21tYW5kIGFuZCBjb250cm9sIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgZXhjaXRlX25hbmRmbGFzaF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpb19yZWdfdCByZWdzID0gY29udGFpbmVyX29mKG10ZCxzdHJ1Y3QgZXhjaXRlX25hbmRmbGFzaF9kcnZkYXRhLGJvYXJkX210ZCktPnJlZ3M7CisKKwlzd2l0Y2ggKGNtZCkgeworCS8qIFNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCAqLworCWNhc2UgTkFORF9DVExfU0VUQ0xFOiB0aGlzLT5JT19BRERSX1cgPSByZWdzICsgRVhDSVRFX05BTkRGTEFTSF9DTUQ7CisJCWJyZWFrOworCS8qIERlc2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoICovCisJY2FzZSBOQU5EX0NUTF9DTFJDTEU6IHRoaXMtPklPX0FERFJfVyA9IHJlZ3MgKyBFWENJVEVfTkFOREZMQVNIX0RBVEE7CisJCWJyZWFrOworCS8qIFNlbGVjdCB0aGUgYWRkcmVzcyBsYXRjaCAqLworCWNhc2UgTkFORF9DVExfU0VUQUxFOiB0aGlzLT5JT19BRERSX1cgPSByZWdzICsgRVhDSVRFX05BTkRGTEFTSF9BRERSOworCQlicmVhazsKKwkvKiBEZXNlbGVjdCB0aGUgYWRkcmVzcyBsYXRjaCAqLworCWNhc2UgTkFORF9DVExfQ0xSQUxFOiB0aGlzLT5JT19BRERSX1cgPSByZWdzICArIEVYQ0lURV9OQU5ERkxBU0hfREFUQTsKKwkJYnJlYWs7CisJLyogU2VsZWN0IHRoZSBjaGlwICAtLSBub3QgdXNlZCAqLworCWNhc2UgTkFORF9DVExfU0VUTkNFOgorCQlicmVhazsKKwkvKiBEZXNlbGVjdCB0aGUgY2hpcCAtLSBub3QgdXNlZCAqLworCWNhc2UgTkFORF9DVExfQ0xSTkNFOgorCQlicmVhazsKKwl9CisKKwl0aGlzLT5JT19BRERSX1IgPSB0aGlzLT5JT19BRERSX1c7Cit9CisKKy8qIGV4Y2l0ZV9uYW5kZmxhc2hfZGV2cmVhZHkoKQorICoKKyAqIHJldHVybnMgMCBpZiB0aGUgbmFuZCBpcyBidXN5LCAxIGlmIGl0IGlzIHJlYWR5CisgKi8KK3N0YXRpYyBpbnQgZXhjaXRlX25hbmRmbGFzaF9kZXZyZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgZXhjaXRlX25hbmRmbGFzaF9kcnZkYXRhICpkcnZkYXRhID0KKwkgICAgY29udGFpbmVyX29mKG10ZCwgc3RydWN0IGV4Y2l0ZV9uYW5kZmxhc2hfZHJ2ZGF0YSwgYm9hcmRfbXRkKTsKKworCXJldHVybiBpb19yZWFkYihkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9TVEFUVVMpOworfQorCisvKiBkZXZpY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KKworLyogZXhjaXRlX25hbmRmbGFzaF9yZW1vdmUKKyAqCisgKiBjYWxsZWQgYnkgZGV2aWNlIGxheWVyIHRvIHJlbW92ZSB0aGUgZHJpdmVyCisgKiB0aGUgYmluZGluZyB0byB0aGUgbXRkIGFuZCBhbGwgYWxsb2NhdGVkCisgKiByZXNvdXJjZXMgYXJlIHJlbGVhc2VkCisgKi8KK3N0YXRpYyBpbnQgZXhjaXRlX25hbmRmbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBleGNpdGVfbmFuZGZsYXNoX2RydmRhdGEgKnRoaXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXByX2luZm8oUEZYICJyZW1vdmUiKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJaWYgKHRoaXMgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZyhQRlggImNhbGwgcmVtb3ZlIHdpdGhvdXQgcHJpdmF0ZSBkYXRhISEiKTsKKwkJcmV0dXJuIDA7CisJfQorCisKKwkvKiBmcmVlIHRoZSBjb21tb24gcmVzb3VyY2VzICovCisJaWYgKHRoaXMtPnJlZ3MgIT0gTlVMTCkgeworCQlpb3VubWFwKHRoaXMtPnJlZ3MpOworCQl0aGlzLT5yZWdzID0gTlVMTDsKKwl9CisKKwlrZnJlZSh0aGlzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVsYXBzZWQ7CisKK3ZvaWQgbXlfd29ya3F1ZXVlX2hhbmRsZXIodm9pZCAqYXJnKQoreworCWVsYXBzZWQgPSAxOworfQorCitERUNMQVJFX1dPUksoc2lnRWxhcHNlZCwgbXlfd29ya3F1ZXVlX2hhbmRsZXIsIDApOworCisKKy8qIGV4Y2l0ZV9uYW5kZmxhc2hfcHJvYmUKKyAqCisgKiBjYWxsZWQgYnkgZGV2aWNlIGxheWVyIHdoZW4gaXQgZmluZHMgYSBkZXZpY2UgbWF0Y2hpbmcKKyAqIG9uZSBvdXIgZHJpdmVyIGNhbiBoYW5kbGVkLiBUaGlzIGNvZGUgY2hlY2tzIHRvIHNlZSBpZgorICogaXQgY2FuIGFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgcmVzb3VyY2VzIHRoZW4gY2FsbHMgdGhlCisgKiBuYW5kIGxheWVyIHRvIGxvb2sgZm9yIGRldmljZXMKKyovCitzdGF0aWMgaW50IGV4Y2l0ZV9uYW5kZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKworCXN0cnVjdCBleGNpdGVfbmFuZGZsYXNoX2RydmRhdGEgKmRydmRhdGE7CSAgICAvKiBwcml2YXRlIGRyaXZlciBkYXRhICAgICAqLworCXN0cnVjdCBuYW5kX2NoaXAgICAgICAgICAgICAgICpib2FyZF9jaGlwOyAgLyogcHJpdmF0ZSBmbGFzaCBjaGlwIGRhdGEgKi8KKwlzdHJ1Y3QgbXRkX2luZm8gICAgICAgICAgICAgICAqYm9hcmRfbXRkOyAgIC8qIG10ZCBpbmZvIGZvciB0aGlzIGJvYXJkICovCisKKwlpbnQgZXJyICAgICAgPSAwOworCWludCBjb3VudCAgICA9IDA7CisJc3RydWN0IHRpbWV2YWwgdHYsZW5kdHY7CisJdW5zaWduZWQgaW50IGR0OworCisJcHJfaW5mbyhQRlggInByb2JlIGRldjogKCVwKVxuIiwgZGV2KTsKKworCXByX2luZm8oUEZYICJhZGp1c3QgTEIgdGltaW5nXG4iKTsKKwlvY2Rfd3JpdGVsKDB4MDAwMDAzMzAsIExEUDIpOworCisJZHJ2ZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkcnZkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFkcnZkYXRhKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJubyBtZW1vcnkgZm9yIGRydmRhdGFcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG1lbV9lcnJvcjsKKwl9CisKKwkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KKwltZW1zZXQoZHJ2ZGF0YSwgMCwgc2l6ZW9mKCpkcnZkYXRhKSk7CisKKwkvKiBiaW5kIHByaXZhdGUgZGF0YSBpbnRvIGRyaXZlciAqLworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydmRhdGEpOworCisJLyogYWxsb2NhdGUgYW5kIG1hcCB0aGUgcmVzb3VyY2UgKi8KKwlkcnZkYXRhLT5yZWdzID0KKwkgICAgZXhjaXRlX25hbmRmbGFzaF9tYXBfcmVncyhwZGV2LCBFWENJVEVfTkFOREZMQVNIX1JFU09VUkNFX1JFR1MpOworCisJaWYgKHVubGlrZWx5KCFkcnZkYXRhLT5yZWdzKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gaW9fZXJyb3I7CisJfQorCisJLyogaW5pdGlhbGlzZSBvdXIgY2hpcCAqLworCWJvYXJkX2NoaXAgPSAmZHJ2ZGF0YS0+Ym9hcmRfY2hpcDsKKworCWJvYXJkX2NoaXAtPklPX0FERFJfUiA9IGRydmRhdGEtPnJlZ3MgKyBFWENJVEVfTkFOREZMQVNIX0RBVEE7CisJYm9hcmRfY2hpcC0+SU9fQUREUl9XID0gZHJ2ZGF0YS0+cmVncyArIEVYQ0lURV9OQU5ERkxBU0hfREFUQTsKKworCWJvYXJkX2NoaXAtPmh3Y29udHJvbCA9IGV4Y2l0ZV9uYW5kZmxhc2hfaHdjb250cm9sOworCWJvYXJkX2NoaXAtPmRldl9yZWFkeSA9IGV4Y2l0ZV9uYW5kZmxhc2hfZGV2cmVhZHk7CisKKwlib2FyZF9jaGlwLT5jaGlwX2RlbGF5ID0gMjU7CisJI2lmIDAKKwkvKiBUT0RPOiBzcGVlZHVwIHRoZSBpbml0aWFsIHNjYW4gKi8KKwlib2FyZF9jaGlwLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOworCSNlbmRpZgorCWJvYXJkX2NoaXAtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCisJLyogbGluayBjaGlwIHRvIG10ZCAqLworCWJvYXJkX210ZCA9ICZkcnZkYXRhLT5ib2FyZF9tdGQ7CisJYm9hcmRfbXRkLT5wcml2ID0gYm9hcmRfY2hpcDsKKworCisJcHJfaW5mbyhQRlggIkZsYXNoVGVzdFxuIik7CisJZWxhcHNlZCA9IDA7CisvKglzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNpZ0VsYXBzZWQsIDEqSFopOworCXdoaWxlICghZWxhcHNlZCkgeworCQlpb19yZWFkYihkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9TVEFUVVMpOworCQljb3VudCsrOworCX0KKwlwcl9pbmZvKFBGWCAicmVhZHMgaW4gMSBzZWMgLS0+ICVkXG4iLGNvdW50KTsKKyovCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJZm9yIChjb3VudCA9IDAgOyBjb3VudCA8IDEwMDAwMDA7IGNvdW50ICsrKSB7CisJCWlvX3JlYWRiKGRydmRhdGEtPnJlZ3MgKyBFWENJVEVfTkFOREZMQVNIX1NUQVRVUyk7CisJfQorCWRvX2dldHRpbWVvZmRheSgmZW5kdHYpOworCWR0ID0gKGVuZHR2LnR2X3NlYyAtIHR2LnR2X3NlYykgKiAxMDAwMDAwICsgZW5kdHYudHZfdXNlYyAgLSB0di50dl91c2VjOworCXByX2luZm8oUEZYICIlOGQgdXMgdGltZXZhbFxuIixkdCk7CisJcHJfaW5mbyhQRlggIkVuZEZsYXNoVGVzdFxuIik7CisKKy8qICAgICAgcmV0dXJuIHdpdGggZXJyb3IgdG8gdW5sb2FkIGV2ZXJ5dGhpbmcKKyovCitpb19lcnJvcjoKKwlpb3VubWFwKGRydmRhdGEtPnJlZ3MpOworCittZW1fZXJyb3I6CisJa2ZyZWUoZHJ2ZGF0YSk7CisKKwlpZiAoZXJyID09IDApCisJCWVyciA9IC1FSU5WQUw7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGV4Y2l0ZV9uYW5kZmxhc2hfZHJpdmVyID0geworCS5uYW1lID0gImV4Y2l0ZV9uYW5kIiwKKwkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZSA9IGV4Y2l0ZV9uYW5kZmxhc2hfcHJvYmUsCisJLnJlbW92ZSA9IGV4Y2l0ZV9uYW5kZmxhc2hfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRmbGFzaF9pbml0KHZvaWQpCit7CisJcHJfaW5mbyhQRlggInJlZ2lzdGVyIERyaXZlciAoUmV2OiAkUmV2aXNpb246JClcbiIpOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kZmxhc2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4Y2l0ZV9uYW5kZmxhc2hfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZleGNpdGVfbmFuZGZsYXNoX2RyaXZlcik7CisJcHJfaW5mbyhQRlggIkRyaXZlciB1bnJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoZXhjaXRlX25hbmRmbGFzaF9pbml0KTsKK21vZHVsZV9leGl0KGV4Y2l0ZV9uYW5kZmxhc2hfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVzIE1vZWxsZXIgPHRoaWVzLm1vZWxsZXJAYmFzbGVyd2ViLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQmFzbGVyIGVYY2l0ZSBOQU5ELUZsYXNoIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2ZwZ2EuaCBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9mcGdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmY2RhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9mcGdhLmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZiBFWENJVEVfRlBHQV9IX0lOQ0xVREVECisjZGVmaW5lIEVYQ0lURV9GUEdBX0hfSU5DTFVERUQKKworCisvKioKKyAqIEFkcmVzcyBhbGlnbm1lbnQgb2YgdGhlIGluZGl2aWR1YWwgRlBHQSBieXRlcy4KKyAqIFRoZSBhZGRyZXNzIGFycmFuZ2VtZW50IG9mIHRoZSBpbmRpdmlkdWFsIGJ5dGVzIG9mIHRoZSBGUEdBIGlzIHR3bworICogYnl0ZSBhbGlnbmVkIGF0IHRoZSBlbWJlZGRlZCBNSzIgcGxhdGZvcm0uCisgKi8KKyNpZmRlZiBFWENJVEVfQ0NJX0ZQR0FfTUsyCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZXhjaXRlX2NjaV9mcGdhX2FsaWduX3QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMikpKTsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZXhjaXRlX2NjaV9mcGdhX2FsaWduX3Q7CisjZW5kaWYKKworCisvKioKKyAqIFNpemUgb2YgRHVhbCBQb3J0ZWQgUkFNLgorICovCisjZGVmaW5lIEVYQ0lURV9EUFJfU0laRSAyNjMKKworCisvKioKKyAqIFNpemUgb2YgUmVzZXJ2ZWQgU3RhdHVzIEZpZWxkcyBpbiBEdWFsIFBvcnRlZCBSQU0uCisgKi8KKyNkZWZpbmUgRVhDSVRFX0RQUl9TVEFUVVNfU0laRSA3CisKKworCisvKioKKyAqIEZQR0EuCisgKiBIYXJkd2FyZSByZWdpc3RlciBsYXlvdXQgb2YgdGhlIEZQR0EgaW50ZXJmYWNlLiBUaGUgRlBHQSBtdXN0IGFjY2Vzc2VkCisgKiBieXRlIHdpc2Ugc29sZWx5LgorICogQHNlZSBFWENJVEVfQ0NJX0RQUl9NSzIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZXhjaXRlX2ZwZ2EgeworCisJLyoqCisJICogRHVhbCBQb3J0ZWQgUkFNLgorCSAqLworCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IGRwcltFWENJVEVfRFBSX1NJWkVdOworCisJLyoqCisJICogU3RhdHVzLgorCSAqLworCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IHN0YXR1c1tFWENJVEVfRFBSX1NUQVRVU19TSVpFXTsKKworI2lmZGVmIEVYQ0lURV9DQ0lfRlBHQV9NSzIKKwkvKioKKwkgKiBSTTkwMDAgSW50ZXJydXB0LgorCSAqIFdyaXRlIGFjY2VzcyBpbml0aWF0ZXMgaW50ZXJydXB0IGF0IHRoZSBSTTkwMDAgKE1JUFMpIHByb2Nlc3NvciBvZiB0aGUgZVhjaXRlLgorCSAqLworCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IHJtOWtfaW50OworI2Vsc2UKKwkvKioKKwkgKiBNSzIgSW50ZXJydXB0LgorCSAqIFdyaXRlIGFjY2VzcyBpbml0aWF0ZXMgaW50ZXJydXB0IGF0IHRoZSBBUk0gcHJvY2Vzc29yIG9mIHRoZSBNSzIuCisJICovCisJZXhjaXRlX2NjaV9mcGdhX2FsaWduX3QgbWsyX2ludDsKKworCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IGdhcFsweDEwMDAtMHgxMGZdOworCisJLyoqCisJICogSVJRIFNvdXJjZS9BY2tub3dsZWRnZS4KKwkgKi8KKwlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBybTlrX2lycV9zcmM7CisKKwkvKioKKwkgKiBJUlEgTWFzay4KKwkgKiBTZXQgYml0cyBlbmFibGUgdGhlIHJlbGF0ZWQgaW50ZXJydXB0LgorCSAqLworCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IHJtOWtfaXJxX21hc2s7CisjZW5kaWYKKworCit9IGV4Y2l0ZV9mcGdhOworCisKKworI2VuZGlmCS8qIG5kZWYgRVhDSVRFX0ZQR0FfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTEyMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCisgKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKworI2luY2x1ZGUgImV4Y2l0ZV9pb2Rldi5oIgorCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqaW9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOworc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBpb2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK3N0YXRpYyBpbnQgaW9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgc3NpemVfdCBpb2Rldl9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCBzLCBsb2ZmX3QgKik7CitzdGF0aWMgdW5zaWduZWQgaW50IGlvZGV2X3BvbGwoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworc3RhdGljIGlycXJldHVybl90IGlvZGV2X2lycWhkbChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKworCitzdGF0aWMgY29uc3QgY2hhciBpb2Rldl9uYW1lW10gPSAiaW9kZXYiOworc3RhdGljIHVuc2lnbmVkIGludCBpb2Rldl9pcnE7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOworCisKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9Cit7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGlvZGV2X29wZW4sCisJLnJlbGVhc2UJPSBpb2Rldl9yZWxlYXNlLAorCS5yZWFkCQk9IGlvZGV2X3JlYWQsCisJLnBvbGwJCT0gaW9kZXZfcG9sbAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPQoreworCS5taW5vcgkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUJCT0gaW9kZXZfbmFtZSwKKwkuZm9wcwkJPSAmZm9wcworfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlvZGV2X2RyaXZlciA9Cit7CisJLm5hbWUJCT0gKGNoYXIgKikgaW9kZXZfbmFtZSwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnByb2JlCQk9IGlvZGV2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3AoaW9kZXZfcmVtb3ZlKQorfTsKKworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKgoraW9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkdiwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwljaGFyIGJ1Zls4MF07CisJaWYgKHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzXzAiLCBuYW1lKSA+PSBzaXplb2YgYnVmKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZHYsIHR5cGUsIGJ1Zik7Cit9CisKKworCisvKiBObyBob3RwbHVnZ2luZyBvbiB0aGUgcGxhdGZvcm0gYnVzIC0gdXNlIF9faW5pdCAqLworc3RhdGljIGludCBfX2luaXQgaW9kZXZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBjb25zdCBwZHYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiBjb25zdCByaSA9CisJCWlvZGV2X2dldF9yZXNvdXJjZShwZHYsIElPREVWX1JFU09VUkNFX0lSUSwgSU9SRVNPVVJDRV9JUlEpOworCisJaWYgKHVubGlrZWx5KCFyaSkpCisJCXJldHVybiAtRU5YSU87CisKKwlpb2Rldl9pcnEgPSByaS0+c3RhcnQ7CisJcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJm1pc2NkZXYpOworfQorCisKKworc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbWlzY19kZXJlZ2lzdGVyKCZtaXNjZGV2KTsKK30KKworCisKK3N0YXRpYyBpbnQgaW9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQoreworCXJldHVybiByZXF1ZXN0X2lycShpb2Rldl9pcnEsIGlvZGV2X2lycWhkbCwgU0FfSU5URVJSVVBULAorCQkJICAgaW9kZXZfbmFtZSwgJm1pc2NkZXYpOworfQorCisKKworc3RhdGljIGludCBpb2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCit7CisJZnJlZV9pcnEoaW9kZXZfaXJxLCAmbWlzY2Rldik7CisJcmV0dXJuIDA7Cit9CisKKworCisKK3N0YXRpYyBzc2l6ZV90Citpb2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9fdXNlciAqZCwgc2l6ZV90IHMsIGxvZmZfdCAqbykKK3sKKwlzc2l6ZV90IHJldDsKKwlERUZJTkVfV0FJVCh3KTsKKworCXByZXBhcmVfdG9fd2FpdCgmd3EsICZ3LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXNjaGVkdWxlKCk7CisJcmV0ID0gc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgPyAtRVJFU1RBUlRTWVMgOiAwOworCWZpbmlzaF93YWl0KCZ3cSwgJncpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludCBpb2Rldl9wb2xsKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnApCit7CisJcG9sbF93YWl0KGYsICZ3cSwgcCk7CisJcmV0dXJuIFBPTExPVVQgfCBQT0xMV1JOT1JNOworfQorCisKKworCitzdGF0aWMgaXJxcmV0dXJuX3QgaW9kZXZfaXJxaGRsKGludCBpcnEsIHZvaWQgKmN0eHQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdha2VfdXAoJndxKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworCitzdGF0aWMgaW50IF9faW5pdCBpb2Rldl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7Cit9CisKKworCitzdGF0aWMgdm9pZCBfX2V4aXQgaW9kZXZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW9kZXZfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoaW9kZXZfY2xlYW51cF9tb2R1bGUpOworCisKKworTU9EVUxFX0FVVEhPUigiVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJhc2xlciBlWGNpdGUgaS9vIGludGVycnVwdCBoYW5kbGVyIik7CitNT0RVTEVfVkVSU0lPTigiMC4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuaCBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZmJiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fRVhDSVRFX0lPREVWX0hfXworI2RlZmluZSBfX0VYQ0lURV9JT0RFVl9IX18KKworLyogRGV2aWNlIG5hbWUgKi8KKyNkZWZpbmUgSU9ERVZfTkFNRQkJImlvZGV2IgorCisvKiBSZXNvdXJjZSBuYW1lcyAqLworI2RlZmluZSBJT0RFVl9SRVNPVVJDRV9JUlEJImV4Y2l0ZV9pb2Rldl9pcnEiCisKKyNlbmRpZiAvKiBfX0VYQ0lURV9JT0RFVl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pcnEuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTFhZDg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lycS5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogIENvcHlyaWdodCAoQykgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKKyAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJlYi5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CisKKyNpbmNsdWRlIDxleGNpdGUuaD4KKworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBleGNpdGVfaGFuZGxlX2ludCh2b2lkKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGludGVycnVwdCBoYW5kbGVyCisgKi8KK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKK3sKKwltaXBzX2NwdV9pcnFfaW5pdCgwKTsKKwlybTdrX2NwdV9pcnFfaW5pdCg4KTsKKwlybTlrX2NwdV9pcnFfaW5pdCgxMik7CisKKyNpZmRlZiBDT05GSUdfS0dEQgorCWV4Y2l0ZV9rZ2RiX2luaXQoKTsKKyNlbmRpZgorfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJY29uc3QgdTMyCisJCWludGVycnVwdHMgPSByZWFkX2MwX2NhdXNlKCkgPj4gOCwKKwkJbWFzayA9ICgocmVhZF9jMF9zdGF0dXMoKSA+PiA4KSAmIDB4MDAwMDAwZmYpIHwKKwkJICAgICAgIChyZWFkX2MwX2ludGNvbnRyb2woKSAmIDB4MDAwMGZmMDApLAorCQlwZW5kaW5nID0gaW50ZXJydXB0cyAmIG1hc2s7CisJdTMyIG1zZ2ludGZsYWdzLCBtc2dpbnRtYXNrLCBtc2dpbnQ7CisKKwkvKiBwcm9jZXNzIHRpbWVyIGludGVycnVwdCAqLworCWlmIChwZW5kaW5nICYgKDEgPDwgVElNRVJfSVJRKSkgeworCQlkb19JUlEoVElNRVJfSVJRLCByZWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgUENJIGludGVycnVwdHMgKi8KKyNpZiBVU0JfSVJRIDwgMTAKKwltc2dpbnRmbGFncyA9IG9jZF9yZWFkbChJTlRQMFN0YXR1czAgKyAoVVNCX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50bWFzayAgPSBvY2RfcmVhZGwoSU5UUDBNYXNrMCArIChVU0JfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKKwltc2dpbnQJICAgID0gbXNnaW50ZmxhZ3MgJiBtc2dpbnRtYXNrICYgKDB4MSA8PCAoVVNCX01TR0lOVCAlIDB4MjApKTsKKwlpZiAoKHBlbmRpbmcgJiAoMSA8PCBVU0JfSVJRKSkgJiYgbXNnaW50KSB7CisjZWxzZQorCWlmIChwZW5kaW5nICYgKDEgPDwgVVNCX0lSUSkpIHsKKyNlbmRpZgorCQlkb19JUlEoVVNCX0lSUSwgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIFRJVEFOIGludGVycnVwdHMgKi8KKwltc2dpbnRmbGFncyA9IG9jZF9yZWFkbChJTlRQMFN0YXR1czAgKyAoVElUQU5fTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKKwltc2dpbnRtYXNrICA9IG9jZF9yZWFkbChJTlRQME1hc2swICsgKFRJVEFOX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50CSAgICA9IG1zZ2ludGZsYWdzICYgbXNnaW50bWFzayAmICgweDEgPDwgKFRJVEFOX01TR0lOVCAlIDB4MjApKTsKKwlpZiAoKHBlbmRpbmcgJiAoMSA8PCBUSVRBTl9JUlEpKSAmJiBtc2dpbnQpIHsKKwkJb2NkX3dyaXRlbChtc2dpbnQsIElOVFAwQ2xlYXIwICsgKFRJVEFOX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisjaWYgZGVmaW5lZChDT05GSUdfS0dEQikKKwkJZXhjaXRlX2tnZGJfaW50aGRsKHJlZ3MpOworI2VuZGlmCisJCWRvX0lSUShUSVRBTl9JUlEsIHJlZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogUHJvY2VzcyBGUEdBIGxpbmUgIzAgaW50ZXJydXB0cyAqLworCW1zZ2ludGZsYWdzID0gb2NkX3JlYWRsKElOVFAwU3RhdHVzMCArIChGUEdBMF9NU0dJTlQgLyAweDIwICogMHgxMCkpOworCW1zZ2ludG1hc2sgID0gb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoRlBHQTBfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKKwltc2dpbnQJICAgID0gbXNnaW50ZmxhZ3MgJiBtc2dpbnRtYXNrICYgKDB4MSA8PCAoRlBHQTBfTVNHSU5UICUgMHgyMCkpOworCWlmICgocGVuZGluZyAmICgxIDw8IEZQR0EwX0lSUSkpICYmIG1zZ2ludCkgeworCQlkb19JUlEoRlBHQTBfSVJRLCByZWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgRlBHQSBsaW5lICMxIGludGVycnVwdHMgKi8KKwltc2dpbnRmbGFncyA9IG9jZF9yZWFkbChJTlRQMFN0YXR1czAgKyAoRlBHQTFfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKKwltc2dpbnRtYXNrICA9IG9jZF9yZWFkbChJTlRQME1hc2swICsgKEZQR0ExX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50CSAgICA9IG1zZ2ludGZsYWdzICYgbXNnaW50bWFzayAmICgweDEgPDwgKEZQR0ExX01TR0lOVCAlIDB4MjApKTsKKwlpZiAoKHBlbmRpbmcgJiAoMSA8PCBGUEdBMV9JUlEpKSAmJiBtc2dpbnQpIHsKKwkJZG9fSVJRKEZQR0ExX0lSUSwgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIFBIWSBpbnRlcnJ1cHRzICovCisJbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKFBIWV9NU0dJTlQgLyAweDIwICogMHgxMCkpOworCW1zZ2ludG1hc2sgID0gb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoUEhZX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7CisJbXNnaW50CSAgICA9IG1zZ2ludGZsYWdzICYgbXNnaW50bWFzayAmICgweDEgPDwgKFBIWV9NU0dJTlQgJSAweDIwKSk7CisJaWYgKChwZW5kaW5nICYgKDEgPDwgUEhZX0lSUSkpICYmIG1zZ2ludCkgeworCQlkb19JUlEoUEhZX0lSUSwgcmVncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIHNwdXJpb3VzIGludGVycnVwdHMgKi8KKwlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvY2ZzLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvY2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyYmUwMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9jZnMuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+CisgKgorICogIFByb2NmcyBzdXBwb3J0IGZvciBCYXNsZXIgZVhjaXRlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CisKKyNpbmNsdWRlIDxleGNpdGUuaD4KKworc3RhdGljIGludCBleGNpdGVfZ2V0X3VuaXRfaWQoY2hhciAqYnVmLCBjaGFyICoqYWRkciwgb2ZmX3Qgb2ZmcywgaW50IHNpemUpCit7CisJY29uc3QgaW50IGxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTA2eCIsIHVuaXRfaWQpOworCWNvbnN0IGludCB3ID0gbGVuIC0gb2ZmczsKKwkqYWRkciA9IGJ1ZiArIG9mZnM7CisJcmV0dXJuIHcgPCBzaXplID8gdyA6IHNpemU7Cit9CisKK3N0YXRpYyBpbnQKK2V4Y2l0ZV9ib290cm9tX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwl2b2lkIF9faW9tZW0gKiBzcmM7CisKKwlpZiAob2ZmID49IEVYQ0lURV9TSVpFX0JPT1RST00pIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCWlmICgob2ZmICsgY291bnQpID4gRVhDSVRFX1NJWkVfQk9PVFJPTSkKKwkJY291bnQgPSBFWENJVEVfU0laRV9CT09UUk9NIC0gb2ZmOworCisJc3JjID0gaW9yZW1hcChFWENJVEVfUEhZU19CT09UUk9NICsgb2ZmLCBjb3VudCk7CisJaWYgKHNyYykgeworCQltZW1jcHlfZnJvbWlvKHBhZ2UsIHNyYywgY291bnQpOworCQlpb3VubWFwKHNyYyk7CisJCSpzdGFydCA9IHBhZ2U7CisJfSBlbHNlIHsKKwkJY291bnQgPSAtRU5PTUVNOworCX0KKworCXJldHVybiBjb3VudDsKK30KKwordm9pZCBleGNpdGVfcHJvY2ZzX2luaXQodm9pZCkKK3sKKwkvKiBDcmVhdGUgJiBwb3B1bGF0ZSAvcHJvYy9leGNpdGUgKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBjb25zdCBwZGlyID0gcHJvY19ta2RpcigiZXhjaXRlIiwgJnByb2Nfcm9vdCk7CisJaWYgKHBkaXIpIHsKKwkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZTsKKworCQllID0gY3JlYXRlX3Byb2NfaW5mb19lbnRyeSgidW5pdF9pZCIsIFNfSVJVR08sIHBkaXIsCisJCQkJCSAgIGV4Y2l0ZV9nZXRfdW5pdF9pZCk7CisJCWlmIChlKSBlLT5zaXplID0gNjsKKworCQllID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiYm9vdHJvbSIsIFNfSVJVR08sIHBkaXIsCisJCQkJCSAgIGV4Y2l0ZV9ib290cm9tX3JlYWQsIE5VTEwpOworCQlpZiAoZSkgZS0+c2l6ZSA9IEVYQ0lURV9TSVpFX0JPT1RST007CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb20uYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3MjRiMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9tLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IGJ5IFRob21hcyBLb2VsbGVyICh0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tKQorICogIEJhc2VkIG9uIHRoZSBQTUMtU2llcnJhIFlvc2VtaXRlIGJvYXJkIHN1cHBvcnQgYnkgUmFsZiBCYWVjaGxlIGFuZAorICogIE1hbmlzaCBMYWNod2FuaS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgorCisjaW5jbHVkZSA8ZXhjaXRlLmg+CisKKy8qIFRoaXMgc3RydWN0IGlzIHVzZWQgYnkgUmVkYm9vdCB0byBwYXNzIGFyZ3VtZW50cyB0byB0aGUga2VybmVsICovCit0eXBlZGVmIHN0cnVjdAoreworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsOworfSB0X2Vudl92YXI7CisKK3N0cnVjdCBwYXJtYmxvY2sgeworCXRfZW52X3ZhciBtZW1zaXplOworCXRfZW52X3ZhciBtb2RldHR5MDsKKwl0X2Vudl92YXIgZXRoYWRkcjsKKwl0X2Vudl92YXIgZW52X2VuZDsKKwljaGFyICphcmd2WzJdOworCWNoYXIgdGV4dFswXTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHJvbV9hcmdjOworc3RhdGljIGNvbnN0IGNoYXIgKiogcHJvbV9hcmd2Oworc3RhdGljIGNvbnN0IHRfZW52X3ZhciAqIHByb21fZW52OworCitzdGF0aWMgdm9pZCBwcm9tX2hhbHQodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKK3N0YXRpYyB2b2lkIHByb21fZXhpdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCisKKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCit7CisJcmV0dXJuICJCYXNsZXIgZVhjaXRlIjsKK30KKworLyoKKyAqIEhhbHQgdGhlIHN5c3RlbQorICovCitzdGF0aWMgdm9pZCBwcm9tX2hhbHQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogU3lzdGVtIGhhbHRlZC5cbiIpOworCXdoaWxlICgxKQorCQlhc20gdm9sYXRpbGUgKAorCQkJIlx0LnNldFx0bWlwczNcbiIKKwkJCSJcdHdhaXRcbiIKKwkJCSJcdC5zZXRcdG1pcHMwXG4iCisJCSk7Cit9CisKKy8qCisgKiBSZXNldCB0aGUgQ1BVIGFuZCByZS1lbnRlciBSZWRib290CisgKi8KK3N0YXRpYyB2b2lkIHByb21fZXhpdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiBjb25zdCBmbGcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoRVhDSVRFX0FERFJfRlBHQSArIEVYQ0lURV9GUEdBX0RQUik7CisKKwkvKiBDbGVhciB0aGUgd2F0Y2hkb2cgcmVzZXQgZmxhZywgc2V0IHRoZSByZWJvb3QgZmxhZyAqLworCSpmbGcgJj0gfjB4MDE7CisJKmZsZyB8PSAweDgwOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICAoRVhDSVRFX0FERFJfRlBHQSArIEVYQ0lURV9GUEdBX1NZU0NUTCkgPSAweDAyOworCQlpb2IoKTsKKwkJbWRlbGF5KDEwMDApOworCX0KKworCXByaW50ayhLRVJOX05PVElDRSAiUmVzZXQgZmFpbGVkXG4iKTsKKwlwcm9tX2hhbHQoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgX19pbml0ICpwcm9tX2dldGVudihjaGFyICpuYW1lKQoreworCWNvbnN0IHRfZW52X3ZhciAqIHA7CisJZm9yIChwID0gcHJvbV9lbnY7IHAtPm5hbWUgIT0gTlVMTDsgcCsrKQorCQlpZihzdHJjbXAobmFtZSwgcC0+bmFtZSkgPT0gMCkKKwkJCWJyZWFrOworCXJldHVybiBwLT52YWw7Cit9CisKKy8qCisgKiBJbml0IHJvdXRpbmUgd2hpY2ggYWNjZXB0cyB0aGUgdmFyaWFibGVzIGZyb20gUmVkYm9vdAorICovCit2b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgcGFybWJsb2NrICogY29uc3QgcGIgPSAoc3RydWN0IHBhcm1ibG9jayAqKSBmd19hcmcyOworCisJcHJvbV9hcmdjID0gZndfYXJnMDsKKwlwcm9tX2FyZ3YgPSAoY29uc3QgY2hhciAqKikgZndfYXJnMTsKKwlwcm9tX2VudiA9ICZwYi0+bWVtc2l6ZTsKKworCS8qIENhbGxiYWNrcyBmb3IgaGFsdCwgcmVzdGFydCAqLworCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCAoKikoY2hhciAqKSkgcHJvbV9leGl0OworCV9tYWNoaW5lX2hhbHQgPSBwcm9tX2hhbHQ7CisKKyNpZmRlZiBDT05GSUdfMzJCSVQKKwkvKiBjb3B5IGNvbW1hbmQgbGluZSAqLworCXN0cmNweShhcmNzX2NtZGxpbmUsIHByb21fYXJndlsxXSk7CisJbWVtc2l6ZSA9IHNpbXBsZV9zdHJ0b2wocHJvbV9nZXRlbnYoIm1lbXNpemUiKSwgTlVMTCwgMTYpOworCXN0cmNweShtb2RldHR5LCBwcm9tX2dldGVudigibW9kZXR0eTAiKSk7CisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyMJZXJyb3IgNjQgYml0IHN1cHBvcnQgbm90IGltcGxlbWVudGVkCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCisKKwltaXBzX21hY2hncm91cCA9IE1BQ0hfR1JPVVBfVElUQU47CisJbWlwc19tYWNodHlwZSA9IE1BQ0hfVElUQU5fRVhDSVRFOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGZyZWVfaW5pdG1lbSgpLCBzbyB3ZSBuZWVkIHRvIHByb3ZpZGUgaXQgKi8KK3ZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQoreworCS8qIE5vdGhpbmcgdG8gZG8gKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1YjAyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+CisgKiAgQmFzZWQgb24gdGhlIFBNQy1TaWVycmEgWW9zZW1pdGUgYm9hcmQgc3VwcG9ydCBieSBSYWxmIEJhZWNobGUgYW5kCisgKiAgTWFuaXNoIExhY2h3YW5pLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0zMi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+CisKKyNpbmNsdWRlIDxleGNpdGUuaD4KKworI2RlZmluZSBUSVRBTl9VQVJUX0NMSwkyNTAwMDAwMAorCisjaWYgMQorLyogbm9ybWFsIHNlcmlhbCBwb3J0IGFzc2lnbm1lbnQgKi8KKyNkZWZpbmUgUkVHQkFTRV9TRVIwCTB4MDIwOAorI2RlZmluZSBSRUdCQVNFX1NFUjEJMHgwMjM4CisjZGVmaW5lIE1BU0tfU0VSMAkweDEKKyNkZWZpbmUgTUFTS19TRVIxCTB4MgorI2Vsc2UKKy8qIHNlcmlhbCBwb3J0cyBzd2FwcGVkICovCisjZGVmaW5lIFJFR0JBU0VfU0VSMAkweDAyMzgKKyNkZWZpbmUgUkVHQkFTRV9TRVIxCTB4MDIwOAorI2RlZmluZSBNQVNLX1NFUjAJMHgyCisjZGVmaW5lIE1BU0tfU0VSMQkweDEKKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIG1lbXNpemU7CitjaGFyIG1vZGV0dHlbMzBdOwordW5zaWduZWQgaW50IHRpdGFuX2lycSA9IFRJVEFOX0lSUTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBjdGxfcmVnczsKK3UzMiB1bml0X2lkOworCit2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBjb25zdCBvY2RfYmFzZSA9ICh2b2lkICopIChFWENJVEVfQUREUl9PQ0QpOwordm9sYXRpbGUgdm9pZCBfX2lvbWVtICogY29uc3QgdGl0YW5fYmFzZSA9ICh2b2lkICopIChFWENJVEVfQUREUl9USVRBTik7CisKKy8qIFByb3RlY3QgYWNjZXNzIHRvIHNoYXJlZCBHUEkgcmVnaXN0ZXJzICovCitzcGlubG9ja190IHRpdGFuX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitpbnQgdGl0YW5faXJxZmxhZ3M7CisKKworc3RhdGljIHZvaWQgZXhjaXRlX3RpbWVyX2luaXQodm9pZCkKK3sKKwljb25zdCB1MzIgbW9kZWJpdDUgPSBvY2RfcmVhZGwoMHgwMGU0KTsKKwl1bnNpZ25lZCBpbnQKKwkJbXVsdCA9ICgobW9kZWJpdDUgPj4gMTEpICYgMHgxZikgKyAyLAorCQlkaXYgPSAoKG1vZGViaXQ1ID4+IDE2KSAmIDB4MWYpICsgMjsKKworCWlmIChkaXYgPT0gMzMpIGRpdiA9IDE7CisJbWlwc19ocHRfZnJlcXVlbmN5ID0gRVhDSVRFX0NQVV9FWFRfQ0xPQ0sgKiBtdWx0IC8gZGl2IC8gMjsKK30KKworc3RhdGljIHZvaWQgZXhjaXRlX3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKK3sKKwkvKiBUaGUgZVhjaXRlIHBsYXRmb3JtIHVzZXMgdGhlIGFsdGVybmF0ZSB0aW1lciBpbnRlcnJ1cHQgKi8KKwlzZXRfYzBfaW50Y29udHJvbCgweDgwKTsKKwlzZXR1cF9pcnEoVElNRVJfSVJRLCBpcnEpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBleGNpdGVfaW5pdF9jb25zb2xlKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApCisJc3RhdGljIF9faW5pdGRhdGEgY2hhciBzZXJyW10gPQorCQlLRVJOX0VSUiAiU2VyaWFsIHBvcnQgIyV1IHNldHVwIGZhaWxlZFxuIjsKKwlzdHJ1Y3QgdWFydF9wb3J0IHVwOworCisJLyogVGFrZSB0aGUgRFVBUlQgb3V0IG9mIHJlc2V0ICovCisJdGl0YW5fd3JpdGVsKDB4MDBmZjFjZmYsIENQUlIpOworCisjaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgKENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUyA+IDEpCisJLyogRW5hYmxlIGJvdGggcG9ydHMgKi8KKwl0aXRhbl93cml0ZWwoTUFTS19TRVIwIHwgTUFTS19TRVIxLCBVQUNGRyk7CisjZWxzZQorCS8qIEVuYWJsZSBwb3J0ICMwIG9ubHkgKi8KKwl0aXRhbl93cml0ZWwoTUFTS19TRVIwLCBVQUNGRyk7CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfS0dEQikgKi8KKworIAkvKgorCSAqIFNldCB1cCBzZXJpYWwgcG9ydCAjMC4gRG8gbm90IHVzZSBhdXRvZGV0ZWN0aW9uOyB0aGUgcmVzdWx0IGlzCisJICogbm90IHdoYXQgd2Ugd2FudC4KKyAJICovCisJbWVtc2V0KCZ1cCwgMCwgc2l6ZW9mKHVwKSk7CisJdXAubWVtYmFzZQk9IChjaGFyICopIHRpdGFuX2FkZHIoUkVHQkFTRV9TRVIwKTsKKwl1cC5pcnEJCT0gVElUQU5fSVJROworCXVwLnVhcnRjbGsJPSBUSVRBTl9VQVJUX0NMSzsKKwl1cC5yZWdzaGlmdAk9IDA7CisJdXAuaW90eXBlCT0gVVBJT19NRU0zMjsKKwl1cC50eXBlCQk9IFBPUlRfUk05MDAwOworCXVwLmZsYWdzCT0gVVBGX1NIQVJFX0lSUTsKKwl1cC5saW5lCQk9IDA7CisJaWYgKGVhcmx5X3NlcmlhbF9zZXR1cCgmdXApKQorCQlwcmludGsoc2VyciwgdXAubGluZSk7CisKKyNpZiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFMgPiAxCisJLyogQW5kIG5vdyBmb3IgcG9ydCAjMS4gKi8KKwl1cC5tZW1iYXNlCT0gKGNoYXIgKikgdGl0YW5fYWRkcihSRUdCQVNFX1NFUjEpOworCXVwLmxpbmUJCT0gMTsKKyAJaWYgKGVhcmx5X3NlcmlhbF9zZXR1cCgmdXApKQorCQlwcmludGsoc2VyciwgdXAubGluZSk7CisjZW5kaWYgLyogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTID4gMSAqLworI2Vsc2UKKwkvKiBMZWF2ZSB0aGUgRFVBUlQgaW4gcmVzZXQgKi8KKwl0aXRhbl93cml0ZWwoMHgwMGZmM2NmZiwgQ1BSUik7CisjZW5kaWYgIC8qIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgY2hhciBidWZbM107CisJdTggcmVnOworCXZvaWQgX19pb21lbSAqIGRwcjsKKworCS8qIEJJVSBidWZmZXIgYWxsb2NhdGlvbnMgKi8KKwlvY2Rfd3JpdGVsKDgsIENQVVJTTE1UKTsJLyogQ1BVICovCisJdGl0YW5fd3JpdGVsKDQsIENQR1JXTCk7CS8qIEdQSSAvIEV0aGVybmV0ICovCisKKwkvKiBNYXAgY29udHJvbCByZWdpc3RlcnMgbG9jYXRlZCBpbiBGUEdBICovCisJY3RsX3JlZ3MgPSBpb3JlbWFwX25vY2FjaGUoRVhDSVRFX1BIWVNfRlBHQSArIEVYQ0lURV9GUEdBX1NZU0NUTCwgMTYpOworCWlmICghY3RsX3JlZ3MpCisJCXBhbmljKCJlWGNpdGU6IGZhaWxlZCB0byBtYXAgcGxhdGZvcm0gY29udHJvbCByZWdpc3RlcnNcbiIpOworCW1lbWNweV9mcm9taW8oYnVmLCBjdGxfcmVncyArIDIsIEFSUkFZX1NJWkUoYnVmKSk7CisJdW5pdF9pZCA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCkgfCAoYnVmWzJdIDw8IDE2KTsKKworCS8qIENsZWFyIHRoZSByZWJvb3QgZmxhZyAqLworCWRwciA9IGlvcmVtYXBfbm9jYWNoZShFWENJVEVfUEhZU19GUEdBICsgRVhDSVRFX0ZQR0FfRFBSLCAxKTsKKwlyZWcgPSBfX3Jhd19yZWFkYihkcHIpOworCV9fcmF3X3dyaXRlYihyZWcgJiAweDdmLCBkcHIpOworCWlvdW5tYXAoZHByKTsKKworCS8qIEludGVycnVwdCBjb250cm9sbGVyIHNldHVwICovCisJZm9yIChpID0gSU5UUDBTdGF0dXMwOyBpIDwgSU5UUDBTdGF0dXMwICsgMHg4MDsgaSArPSAweDEwKSB7CisJCW9jZF93cml0ZWwoMHgwMDAwMDAwMCwgaSArIDB4MDQpOworCQlvY2Rfd3JpdGVsKDB4ZmZmZmZmZmYsIGkgKyAweDBjKTsKKwl9CisJb2NkX3dyaXRlbCgweDIsIE5NSUNPTkZJRyk7CisKKwlvY2Rfd3JpdGVsKDB4MSA8PCAoVElUQU5fTVNHSU5UICUgMHgyMCksCisJCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChUSVRBTl9NU0dJTlQgLyAweDIwKSkpOworCW9jZF93cml0ZWwoKDB4MSA8PCAoRlBHQTBfTVNHSU5UICUgMHgyMCkpCisJCSAgIHwgb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoMHgxMCAqIChGUEdBMF9NU0dJTlQgLyAweDIwKSkpLAorCQkgICBJTlRQME1hc2swICsgKDB4MTAgKiAoRlBHQTBfTVNHSU5UIC8gMHgyMCkpKTsKKwlvY2Rfd3JpdGVsKCgweDEgPDwgKEZQR0ExX01TR0lOVCAlIDB4MjApKQorCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoRlBHQTFfTVNHSU5UIC8gMHgyMCkpKSwKKwkJICAgSU5UUDBNYXNrMCArICgweDEwICogKEZQR0ExX01TR0lOVCAvIDB4MjApKSk7CisJb2NkX3dyaXRlbCgoMHgxIDw8IChQSFlfTVNHSU5UICUgMHgyMCkpCisJCSAgIHwgb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoMHgxMCAqIChQSFlfTVNHSU5UIC8gMHgyMCkpKSwKKwkJICAgSU5UUDBNYXNrMCArICgweDEwICogKFBIWV9NU0dJTlQgLyAweDIwKSkpOworI2lmIFVTQl9JUlEgPCAxMAorCW9jZF93cml0ZWwoKDB4MSA8PCAoVVNCX01TR0lOVCAlIDB4MjApKQorCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoVVNCX01TR0lOVCAvIDB4MjApKSksCisJCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChVU0JfTVNHSU5UIC8gMHgyMCkpKTsKKyNlbmRpZgorCS8qIEVuYWJsZSB0aGUgcGFja2V0IEZJRk8sIFhETUEgYW5kIFhETUEgYXJiaXRlciAqLworCXRpdGFuX3dyaXRlbCgweDAwZmYxOGZmLCBDUFJSKTsKKworCS8qCisJICogU2V0IHVwIHRoZSBQQURNVVguIFBvd2VyIGRvd24gYWxsIGV0aGVybmV0IHNsaWNlcywKKwkgKiB0aGV5IHdpbGwgYmUgcG93ZXJlZCB1cCBhbmQgY29uZmlndXJlZCBhdCBkZXZpY2Ugc3RhcnR1cC4KKwkgKi8KKwl0aXRhbl93cml0ZWwoMHgwMDg3ODIwNiwgQ1BUQzFSKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMTEwMCwgQ1BUQzBSKTsgLyogbGF0Y2ggUEFETVVYLCBlbmFibGUgV0NJTU9ERSAqLworCisJLyogUmVzZXQgYW5kIGVuYWJsZSB0aGUgRklGTyBibG9jayAqLworCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAxLCBTRFJYRkNJRSk7CisJdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDEsIFNEVFhGQ0lFKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMDEwMCwgU0RSWEZDSUUpOworCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBTRFRYRkNJRSk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbW1vbiBpbnRlcnJ1cHQgc2hhcmVkIGJ5IGFsbCBjb21wb25lbnRzIG9mCisJICogdGhlIEdQSS9FdGhlcm5ldCBzdWJzeXN0ZW0uCisJICovCisJdGl0YW5fd3JpdGVsKChFWENJVEVfUEhZU19PQ0QgPj4gMTIpLCBDUENGRzApOworCXRpdGFuX3dyaXRlbChUSVRBTl9NU0dJTlQsIENQQ0ZHMSk7CisKKwkvKgorCSAqIFhETUEgY29uZmlndXJhdGlvbi4KKwkgKiBJbiBvcmRlciBmb3IgdGhlIFhETUEgdG8gYmUgc2hhcmFibGUgYW1vbmcgbXVsdGlwbGUgZHJpdmVycywKKwkgKiB0aGUgc2V0dXAgbXVzdCBiZSBkb25lIGhlcmUgaW4gdGhlIHBsYXRmb3JtLiBUaGUgcmVhc29uIGlzIHRoYXQKKwkgKiB0aGlzIHNldHVwIGNhbiBvbmx5IGJlIGRvbmUgd2hpbGUgdGhlIFhETUEgaXMgaW4gcmVzZXQuIElmIHRoaXMKKwkgKiB3ZXJlIGRvbmUgaW4gYSBkcml2ZXIsIGl0IHdvdWxkIGludGVycnVwdCBhbGwgb3RoZXIgZHJpdmVycworCSAqIHVzaW5nIHRoZSBYRE1BLgorCSAqLworCXRpdGFuX3dyaXRlbCgweDgwMDIxZGZmLCBHWENGRyk7CS8qIFhETUEgcmVzZXQgKi8KKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BYQ0lTUkEpOworCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBDUFhDSVNSQik7CS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLworI2lmIGRlZmluZWQgKENPTkZJR19ISUdITUVNKQorIwllcnJvciBjaGFuZ2UgZm9yIEhJR0hNRU0gc3VwcG9ydCEKKyNlbHNlCisJdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIEdYRE1BRFJQRlgpOwkvKiBidWZmZXIgYWRkcmVzcyBwcmVmaXggKi8KKyNlbmRpZgorCXRpdGFuX3dyaXRlbCgwLCBHWERNQV9ERVNDQURSKTsKKworCWZvciAoaSA9IDB4NTA0MDsgaSA8PSAweDUzMDA7IGkgKz0gMHgwMDQwKQorCQl0aXRhbl93cml0ZWwoMHg4MDA4MDAwMCwgaSk7CS8qIHJlc2V0IGNoYW5uZWwgKi8KKworCXRpdGFuX3dyaXRlbCgoMHgxIDw8IDI5KQkJCS8qIG5vIHNwYXJzZSB0eCBkZXNjci4gKi8KKwkJICAgICB8ICgweDEgPDwgMjgpCQkJLyogbm8gc3BhcnNlIHJ4IGRlc2NyLiAqLworCQkgICAgIHwgKDB4MSA8PCAyMykgfCAoMHgxIDw8IDI0KQkvKiBkZXNjcmlwdG9yIGNvaGVyZW5jeSAqLworCQkgICAgIHwgKDB4MSA8PCAyMSkgfCAoMHgxIDw8IDIyKQkvKiBkYXRhIGNvaGVyZW5jeSAqLworCQkgICAgIHwgKDB4MSA8PCAxNykKKwkJICAgICB8IDB4MWRmZiwKKwkJICAgICBHWENGRyk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApCisjCWVycm9yIE5vIFNNUCBzdXBwb3J0CisjZWxzZQorCS8qIEFsbCBpbnRlcnJ1cHRzIGdvIHRvIGNvcmUgIzAgb25seS4gKi8KKwl0aXRhbl93cml0ZWwoMHgxZjAwN2ZmZiwgQ1BEU1QwQSk7CisJdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIENQRFNUMEIpOworCXRpdGFuX3dyaXRlbCgweDAwMDBmZjNmLCBDUERTVDFBKTsKKwl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BEU1QxQik7CisJdGl0YW5fd3JpdGVsKDB4MDBmZmZmZmYsIENQWERTVEEpOworCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBDUFhEU1RCKTsKKyNlbmRpZgorCisJLyogRW5hYmxlIERVQVJUIGludGVycnVwdHMsIGRpc2FibGUgZXZlcnl0aGluZyBlbHNlLiAqLworCXRpdGFuX3dyaXRlbCgweDA0MDAwMDAwLCBDUEdJRzBFUik7CisJdGl0YW5fd3JpdGVsKDB4MDAwMDAwYzAsIENQR0lHMUVSKTsKKworCWV4Y2l0ZV9wcm9jZnNfaW5pdCgpOworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit7CisJdm9sYXRpbGUgdTMyICogY29uc3QgYm9vdF9vY2RfYmFzZSA9ICh1MzIgKikgMHhiZjdmYzAwMDsKKworCS8qIEFubm91bmNlIFJBTSB0byBzeXN0ZW0gKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbigweDAwMDAwMDAwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOworCisJLyogU2V0IHVwIHRpbWVyIGluaXRpYWxpemF0aW9uIGhvb2tzICovCisJYm9hcmRfdGltZV9pbml0ID0gZXhjaXRlX3RpbWVyX2luaXQ7CisJYm9hcmRfdGltZXJfc2V0dXAgPSBleGNpdGVfdGltZXJfc2V0dXA7CisKKwkvKiBTZXQgdXAgdGhlIHBlcmlwaGVyYWwgYWRkcmVzcyBtYXAgKi8KKwkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCOSAvIHNpemVvZiAodTMyKSkpID0gMDsKKwkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCMTAgLyBzaXplb2YgKHUzMikpKSA9IDA7CisJKihib290X29jZF9iYXNlICsgKExLQjExIC8gc2l6ZW9mICh1MzIpKSkgPSAwOworCSooYm9vdF9vY2RfYmFzZSArIChMS0IxMiAvIHNpemVvZiAodTMyKSkpID0gMDsKKwl3bWIoKTsKKwkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCMCAvIHNpemVvZiAodTMyKSkpID0gRVhDSVRFX1BIWVNfT0NEID4+IDQ7CisJd21iKCk7CisKKwlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19USVRBTiA+PiA0KSB8IDB4MVVMLCBMS0I1KTsKKwlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfVElUQU4gPj4gNCkgJiAweDdmZmZmZjAwKSAtIDB4MTAwLCBMS001KTsKKwlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19TQ1JBTSA+PiA0KSB8IDB4MVVMLCBMS0IxMyk7CisJb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX1NDUkFNID4+IDQpICYgMHhmZmZmZmYwMCkgLSAweDEwMCwgTEtNMTMpOworCisJLyogTG9jYWwgYnVzIHNsb3QgIzAgKi8KKwlvY2Rfd3JpdGVsKDB4MDAwNDA1MTAsIExEUDApOworCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX0JPT1RST00gPj4gNCkgfCAweDFVTCwgTEtCOSk7CisJb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX0JPT1RST00gPj4gNCkgJiAweDAzZmZmZjAwKSAtIDB4MTAwLCBMS005KTsKKworCS8qIExvY2FsIGJ1cyBzbG90ICMyICovCisJb2NkX3dyaXRlbCgweDAwMDAwMzMwLCBMRFAyKTsKKwlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19GUEdBID4+IDQpIHwgMHgxLCBMS0IxMSk7CisJb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX0ZQR0EgPj4gNCkgLSAweDEwMCkgJiAweDAzZmZmZjAwLCBMS00xMSk7CisKKwkvKiBMb2NhbCBidXMgc2xvdCAjMyAqLworCW9jZF93cml0ZWwoMHgwMDEyMzQxMywgTERQMyk7CisJb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfTkFORCA+PiA0KSB8IDB4MSwgTEtCMTIpOworCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9OQU5EID4+IDQpIC0gMHgxMDApICYgMHgwM2ZmZmYwMCwgTEtNMTIpOworfQorCisKKworY29uc29sZV9pbml0Y2FsbChleGNpdGVfaW5pdF9jb25zb2xlKTsKK2FyY2hfaW5pdGNhbGwoZXhjaXRlX3BsYXRmb3JtX2luaXQpOworCitFWFBPUlRfU1lNQk9MKHRpdGFuX2xvY2spOworRVhQT1JUX1NZTUJPTCh0aXRhbl9pcnFmbGFncyk7CitFWFBPUlRfU1lNQk9MKHRpdGFuX2lycSk7CitFWFBPUlRfU1lNQk9MKG9jZF9iYXNlKTsKK0VYUE9SVF9TWU1CT0wodGl0YW5fYmFzZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L2NvbnNvbGUuYyBiL2FyY2gvbWlwcy9jb2JhbHQvY29uc29sZS5jCmluZGV4IDQ1YzJkMjcuLjMwMDc5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvY29uc29sZS5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvY29uc29sZS5jCkBAIC00MSwzICs0MSw4IEBACiAKIAlwcmludGsoIkNvYmFsdDogZWFybHkgY29uc29sZSByZWdpc3RlcmVkXG4iKTsKIH0KKwordm9pZCBfX2luaXQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJmNvbnNfaW5mbyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMgYi9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKaW5kZXggNGY5ZWExMi4uY2E3MTlkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYwpAQCAtNjgsMTkgKzY4LDQ2IEBACiBleHRlcm4gc3RydWN0IHBjaV9vcHMgZ3Q2NDExMV9wY2lfb3BzOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvYmFsdF9tZW1fcmVzb3VyY2UgPSB7Ci0JIlBDSSBtZW1vcnkiLCBHVDY0MTExX01FTV9CQVNFLCBHVDY0MTExX01FTV9FTkQsIElPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gR1Q2NDExMV9NRU1fQkFTRSwKKwkuZW5kCT0gR1Q2NDExMV9NRU1fRU5ELAorCS5uYW1lCT0gIlBDSSBtZW1vcnkiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvYmFsdF9pb19yZXNvdXJjZSA9IHsKLQkiUENJIEkvTyIsIDB4MTAwMCwgMHhmZmZmLCBJT1JFU09VUkNFX0lPCisJLnN0YXJ0CT0gMHgxMDAwLAorCS5lbmQJPSAweGZmZmYsCisJLm5hbWUJPSAiUENJIEkvTyIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2JhbHRfaW9fcmVzb3VyY2VzW10gPSB7Ci0JeyAiZG1hMSIsIDB4MDAsIDB4MWYsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgInRpbWVyIiwgMHg0MCwgMHg1ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAia2V5Ym9hcmQiLCAweDYwLCAweDZmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJkbWEgcGFnZSByZWciLCAweDgwLCAweDhmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJkbWEyIiwgMHhjMCwgMHhkZiwgSU9SRVNPVVJDRV9CVVNZIH0sCisJeworCQkuc3RhcnQJPSAweDAwLAorCQkuZW5kCT0gMHgxZiwKKwkJLm5hbWUJPSAiZG1hMSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHg0MCwKKwkJLmVuZAk9IDB4NWYsCisJCS5uYW1lCT0gInRpbWVyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDYwLAorCQkuZW5kCT0gMHg2ZiwKKwkJLm5hbWUJPSAia2V5Ym9hcmQiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4ODAsCisJCS5lbmQJPSAweDhmLAorCQkubmFtZQk9ICJkbWEgcGFnZSByZWciLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4YzAsCisJCS5lbmQJPSAweGRmLAorCQkubmFtZQk9ICJkbWEyIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwKIH07CiAKICNkZWZpbmUgQ09CQUxUX0lPX1JFU09VUkNFUyAoc2l6ZW9mKGNvYmFsdF9pb19yZXNvdXJjZXMpL3NpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKQpAQCAtOTMsNyArMTIwLDcgQEAKIAkuaW9fb2Zmc2V0CT0gMCAtIEdUNjQxMTFfSU9fQkFTRQogfTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB1YXJ0OwogCXVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihDT0JBTFRfUENJQ09ORl9WSUEsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCmluZGV4IDRiMDgwYmMuLjBjYzFiM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xNDMsNiArMTQxLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggZDg1Y2RhNS4uZGFiZjkwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTQ1LDYgKzE0MywxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NAogQ09ORklHX1BSRUVNUFRfTk9ORT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKaW5kZXggY2EwYWYxNi4uYWViN2JlOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzIsNiArMTMwLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCmluZGV4IDdkMjY5ZTYuLmQ2ODBkM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEyOSw2ICsxMjcsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKaW5kZXggNTc5YjY2NS4uNmE3YWE0MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMwLDYgKzEyOCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwppbmRleCBlNWViNTM4Li41YzJkYTU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzAsNiArMTI4LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IGE0M2ZiMjMuLjg1ZWY5MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMCw2ICsxMjgsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKaW5kZXggYWQ2MzJkOC4uNmY3NTdkOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMyLDYgKzEzMCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwppbmRleCA4MTMwZTIzLi5kYTRjN2U4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzEsNiArMTI5LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKaW5kZXggOGM5MTFiNi4uYzFjNmJmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiBDT05GSUdfRERCNTQ3Nz15CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTI5LDYgKzEyNywxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCmluZGV4IGQ4Mzg0OTYuLmQ1ZDBkM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTI4LDYgKzEyNiwxNyBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTI4PXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfMTI4SFo9eQorQ09ORklHX1NZU19TVVBQT1JUU18yNTZIWj15CitDT05GSUdfU1lTX1NVUFBPUlRTXzEwMjRIWj15CitDT05GSUdfSFo9MTI4CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKaW5kZXggMDc2MGY0My4uNDM5Njc3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9WUjQxWFg9eQogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMCw2ICsxMjgsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWYyOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKQEAgLTAsMCArMSwxMjA3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKKyMgU3VuIEp1biAxOCAxMzo0Njo1MyAyMDA2CisjCitDT05GSUdfTUlQUz15CisKKyMKKyMgTWFjaGluZSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0VBRCBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0MgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfRyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19RRU1VIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJLRUlOUz15CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUFRTV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX0lSUV9DUFU9eQorQ09ORklHX1NXQVBfSU9fU1BBQ0U9eQorQ09ORklHX0VNTUEyUkg9eQorQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQorCisjCisjIENQVSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorQ09ORklHX0NQVV9SNTAwMD15CisjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX1I1MDAwPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKKworIworIyBLZXJuZWwgdHlwZQorIworQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfTExTQz15CitDT05GSUdfQ1BVX0hBU19TWU5DPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX1BSRUVNUFRfQktMPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKK0NPTkZJR19IV19IQVNfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX01NVT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CisjCisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKKyMgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MWUwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwMjAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9bQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorQ09ORklHX05BVFNFTUk9eQorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfTEFOX1NBQTk3MzAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCisjIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19SVEM9bQorQ09ORklHX0dFTl9SVEM9bQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19CVVM9eQorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9bQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPW0KKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfRVhQT1JUPXkKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPW0KKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX05GU19ESVJFQ1RJTz15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09MTkybSBpcD1ib290cCByb290PS9kZXYvbmZzIHJ3IgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY2NDEyMF9kZWZjb25maWcKaW5kZXggNzA2N2Y2MC4uNTI0OGExZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY2NDEyMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY2NDEyMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzEsNiArMTI5LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2V2OTYxMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcKaW5kZXggMDBiNTZlZC4uNDg1ODQ5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzUsNiArMTMzLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2V4Y2l0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyY2U2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTIyMCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNAorIyBUaHUgRmViIDIzIDEzOjE1OjI3IDIwMDYKKyMKK0NPTkZJR19NSVBTPXkKKworIworIyBNYWNoaW5lIHNlbGVjdGlvbgorIworIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0MgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfRyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CitDT05GSUdfQkFTTEVSX0VYQ0lURT15CisjIENPTkZJR19CQVNMRVJfRVhDSVRFX1BST1RPVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAorIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUUVNVSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUFRTV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NFUklBTF9STTkwMDA9eQorQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfSVJRX0NQVV9STTdLPXkKK0NPTkZJR19JUlFfQ1BVX1JNOUs9eQorQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQorCisjCisjIENQVSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfUk05MDAwPXkKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorQ09ORklHX1NZU19IQVNfQ1BVX1JNOTAwMD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKKyMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAorIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19MTFNDPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCisjIENPTkZJR19TTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19QUkVFTVBUX0JLTD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQorIworQ09ORklHX0hXX0hBU19QQ0k9eQorQ09ORklHX1BDST15CisjIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAorQ09ORklHX01NVT15CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CisjCisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFEX1NJR05BTFM9eQorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0JBU0xFUl9FWENJVEVfUkROQlkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQkFTTEVSX0VYQ0lURV9QRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfVElUQU5fR0UgaXMgbm90IHNldAorQ09ORklHX1JNOUtfR0U9bQorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPW0KK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1dEVF9STTlLX0dQST1tCisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU01JVkdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkJfREQ9eQorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9bQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KK0NPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUlRURlQ9bQorIyBDT05GSUdfVVNCX0FSVFRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorCisjCisjIFNOIERldmljZXMKKyMKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKKyMKKworIworIyBlWGNpdGUgZnJhbWUgY2FwdHVyZSBzdXBwb3J0CisjCitDT05GSUdfRVhDSVRFX0ZDQVA9bQorQ09ORklHX0VYQ0lURV9GQ0FQX0dQST1tCisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkU9IiIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKaW5kZXggNjA3ZTI5OC4uODc5YmExYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzYsNiArMTM0LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggZjcyNGI0Yi4uYmIxNDI2OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC02Myw3ICs2MSw3IEBACiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9TTjBfTl9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9TTl9OX01PREUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CiBDT05GSUdfTlVNQT15CiAjIENPTkZJR19NQVBQRURfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTEzNSw2ICsxMzMsMTUgQEAKIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19NSUdSQVRJT049eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz02NApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwppbmRleCA4ZjExZDM1Li4zMWIzYzkyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNiw2ICsxMzQsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcKaW5kZXggNzU3YWRmMi4uODA5YmFlOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMwLDYgKzEyOCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZwppbmRleCAwMjE3NjFhLi41NTEwOGZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2l2cl9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMjcsNiArMTI1LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKaW5kZXggMDhmNmMzMC4uZWYyODQzNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvamFndWFyLWF0eF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzYsNiArMTM0LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwppbmRleCAzOGIxZTAyLi41ZWY1YTA4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEyNSw2ICsxMjMsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCmluZGV4IDRkMjU5OTAuLmVhYmNmZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzQsNiArMTMyLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwppbmRleCA5NzdmNTJiLi5iNzNjZmYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTU0LDYgKzE1MiwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKaW5kZXggMDA1NjBlMC4uOGRkMjdiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzgsNiArMTM2LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCmluZGV4IDI4NmEwMTguLjVkNmZmM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzIsNiArMTMwLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwppbmRleCAxY2U0MzEwLi5mZTVlM2RkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM2LDYgKzEzNCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZwppbmRleCA4YTZhYTUwLi5mNGEzM2NlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMzLDYgKzEzMSwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZwppbmRleCBmOWVlMzVlLi4yMWRlYTk1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzcsNiArMTM1LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZwppbmRleCBiNDhiZGVlLi5jNjNiMWNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTM2LDYgKzEzNCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwppbmRleCAwMWFhYzQwLi42ZjVjNzI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzIsNiArMTMwLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCmluZGV4IDM5OGMzYzIuLjU2NzZmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzMSw2ICsxMjksMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggZWEyODJhNS4uYTFjNDc5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMxLDYgKzEyOSwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKaW5kZXggNGM1N2U1Ni4uYjJkOTkxYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogQ09ORklHX1BOWDg1NTBfSkJTPXkKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzAsNiArMTI4LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKaW5kZXggM2M4ZjM1MS4uZmUwOTJhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiBDT05GSUdfUE5YODU1MF9WMlBDST15CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMwLDYgKzEyOCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9xZW11X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCmluZGV4IDRiY2MwMWQuLmRiODcwMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnCkBAIC00MSw4ICs0MSw2IEBACiAjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9WMlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1MDc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjU0NzYgaXMgbm90IHNldAogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTI4LDYgKzEyNiwxNSBAQAogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCmluZGV4IDNkNDQxOTMuLmIxNjczMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzOCw2ICsxMzYsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCmluZGV4IGVkZmI5NjcuLjhiMGRkODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzgsNiArMTM2LDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCmluZGV4IGUzODhhM2QuLmZmMzRlZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTE0OSw2ICsxNDcsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKIENPTkZJR19QUkVFTVBUX05PTkU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2VhZF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwppbmRleCA2YjhhNmE0MS4uNzdlZGVhZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2VhZF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2VhZF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzQsNiArMTMyLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCmluZGV4IGRiYTBiZGMuLjZhYTIyOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzQsNiArMTMyLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCmluZGV4IDVhOTI0YzEuLmExODdiMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzQsNiArMTMyLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCmluZGV4IDlmMjE1ZWEuLjI1ODQ1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogQ09ORklHX01BQ0hfVlI0MVhYPXkKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CkBAIC0xMzUsNiArMTMzLDE1IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKaW5kZXggYWM3NzY1ZS4uNjhhZjU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX1ZSNDFYWD15CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtMTMwLDYgKzEyOCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKaW5kZXggOGQ4OGFjMS4uNDA1NzJhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzIKLSMgTW9uIEFwciAyNCAxNDo1MTowMCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYuMTEKKyMgRnJpIE1heSAgNSAxNzoxMToyMiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTMyLDYgKzMyLDcgQEAKICMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NFQUQgaXMgbm90IHNldAorQ09ORklHX1dSX1BQTUM9eQogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAogIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX01PTUVOQ09fT0NFTE9UIGlzIG5vdCBzZXQKQEAgLTQxLDggKzQyLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotQ09ORklHX0REQjU0NzY9eQogIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldApAQCAtNjQsMjQgKzYzLDIzIEBACiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19JODI1OT15Ci0jIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX0lSUV9DUFU9eQotQ09ORklHX0REQjVYWFhfQ09NTU9OPXkKK0NPTkZJR19NSVBTX0dUNjQxMjA9eQorQ09ORklHX1NXQVBfSU9fU1BBQ0U9eQorQ09ORklHX0JPT1RfRUxGMzI9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQotQ09ORklHX0hBVkVfU1REX1BDX1NFUklBTF9QT1JUPXkKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCi0jIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKQEAgLTkyLDcgKzkwLDcgQEAKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1I1NDMyPXkKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtMTAwLDExICs5OCwxNiBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAotQ09ORklHX1NZU19IQVNfQ1BVX1I1NDMyPXkKK0NPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQorQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMj15CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzY0X1IxPXkKK0NPTkZJR19TWVNfSEFTX0NQVV9ORVZBREE9eQorQ09ORklHX1NZU19IQVNfQ1BVX1JNNzAwMD15CitDT05GSUdfQ1BVX01JUFMzMj15CitDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15Ci1DT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTExNSwxMSArMTE4LDE1IEBACiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAorIyBDT05GSUdfNjRCSVRfUEhZU19BRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTI5LDYgKzEzNiwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0xNDUsMjcgKzE2MSwzMSBAQAogIwogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKQEAgLTE3NCwxNCArMTk0LDE4IEBACiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CiAjCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CiAKICMKICMgQmxvY2sgbGF5ZXIKICMKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjAxLDcgKzIyNSw3IEBACiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKLUNPTkZJR19JU0E9eQorQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjEyLDEzICsyMzYsMTYgQEAKICMKICMgUENJIEhvdHBsdWcgU3VwcG9ydAogIwotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUdfUENJPXkKKyMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCkBAIC0yMzEsMzUgKzI1OCwzMyBAQAogIwogIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj15Ci1DT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX0lQX01ST1VURT15CisjIENPTkZJR19JUF9QSU1TTV9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CitDT05GSUdfQVJQRD15CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTMwMSwxMyArMzI2LDcgQEAKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT15Ci0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz15Ci0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTMxOCwxMyArMzM3LDEyIEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAKICMKICMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgogIwotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCkBAIC0zMzksNyArMzU3LDYgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAogCiAjCiAjIEJsb2NrIGRldmljZXMKQEAgLTM1Miw1MyArMzY5LDI1IEBACiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9eQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPXkKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwotQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotQ09ORklHX0lERV9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfSURFUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz15CisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAogCiAjCi0jIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCi0jCi0jIENPTkZJR19DRF9OT19JREVTQ1NJIGlzIG5vdCBzZXQKLQotIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQogIwogIyBDT05GSUdfTUQgaXMgbm90IHNldApAQCAtNDQwLDM0ICs0MjksNDggQEAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfUVNFTUlfUEhZPXkKLUNPTkZJR19MWFRfUEhZPXkKLUNPTkZJR19DSUNBREFfUEhZPXkKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAorQ09ORklHX01JST15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMD15CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19MQU5fU0FBOTczMCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTQ4Myw2ICs0ODYsNyBAQAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIApAQCAtNTI5LDQ2ICs1MzMsMTggQEAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPXkKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU3Niw5ICs1NTIsOCBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0xCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0xCiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYwMCw4ICs1NzUsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorQ09ORklHX1JUQz15CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQEAgLTYzNywxNCArNjExLDIwIEBACiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNjU3LDQ5ICs2MzcsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi1DT05GSUdfRkI9eQotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU01JVkdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzExLDcgKzY0OSw2IEBACiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTcyOSwxOSArNjY2LDYgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRldmljZXMKLSMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CkBAIC03NTEsMTYgKzY3NSw5IEBACiAjCiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCiAjIEZpbGUgc3lzdGVtcwogIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc3NCw3ICs2OTEsNyBAQAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotQ09ORklHX0ZVU0VfRlM9eQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNzk1LDkgKzcxMiwxMCBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04MjEsMTIgKzczOSwxNCBAQAogIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwogIwogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CkBAIC04NjEsNDYgKzc4MSwxOSBAQAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSJpcD1hbnkiCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDBuOCIKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi1DT05GSUdfS0VZUz15Ci1DT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQorIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9eQotQ09ORklHX0NSWVBUT19NRDQ9eQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPXkKLUNPTkZJR19DUllQVE9fU0hBMjU2PXkKLUNPTkZJR19DUllQVE9fU0hBNTEyPXkKLUNPTkZJR19DUllQVE9fV1A1MTI9eQotQ09ORklHX0NSWVBUT19UR1IxOTI9eQotQ09ORklHX0NSWVBUT19ERVM9eQotQ09ORklHX0NSWVBUT19CTE9XRklTSD15Ci1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9eQotQ09ORklHX0NSWVBUT19TRVJQRU5UPXkKLUNPTkZJR19DUllQVE9fQUVTPXkKLUNPTkZJR19DUllQVE9fQ0FTVDU9eQotQ09ORklHX0NSWVBUT19DQVNUNj15Ci1DT05GSUdfQ1JZUFRPX1RFQT15Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9eQotQ09ORklHX0NSWVBUT19LSEFaQUQ9eQotQ09ORklHX0NSWVBUT19BTlVCSVM9eQotQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwpAQCAtOTA5LDkgKzgwMiw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPXkKIENPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCmluZGV4IGI1MmQ3MDkuLjdlY2UyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKQEAgLTQxLDggKzQxLDYgQEAKICMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0CiAjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKIENPTkZJR19QTUNfWU9TRU1JVEU9eQpAQCAtMTMwLDYgKzEyOCwxNSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMDAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgogQ09ORklHX1BSRUVNUFRfTk9ORT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvY29tbW9uL3Byb20uYwppbmRleCBiOGQxZjc0Li4wMGM2MmMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9jb21tb24vcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9kZGI1eHh4L2NvbW1vbi9wcm9tLmMKQEAgLTU2LDEzICs1Niw3IEBACiAKIAltaXBzX21hY2hncm91cCA9IE1BQ0hfR1JPVVBfTkVDX0REQjsKIAotI2lmIGRlZmluZWQoQ09ORklHX0REQjUwNzQpCi0JbWlwc19tYWNodHlwZSA9IE1BQ0hfTkVDX0REQjUwNzQ7Ci0JYWRkX21lbW9yeV9yZWdpb24oMCwgRERCX1NEUkFNX1NJWkUsIEJPT1RfTUVNX1JBTSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19EREI1NDc2KQotCW1pcHNfbWFjaHR5cGUgPSBNQUNIX05FQ19EREI1NDc2OwotCWFkZF9tZW1vcnlfcmVnaW9uKDAsIEREQl9TRFJBTV9TSVpFLCBCT09UX01FTV9SQU0pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfRERCNTQ3NykKKyNpZiBkZWZpbmVkKENPTkZJR19EREI1NDc3KQogCWRkYjU0NzdfcnVudGltZV9kZXRlY3Rpb24oKTsKIAlhZGRfbWVtb3J5X3JlZ2lvbigwLCBib2FyZF9yYW1fc2l6ZSwgQk9PVF9NRU1fUkFNKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGMwMjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIE5FQyBEREIgVnJjLTUwNzQgc3BlY2lmaWMga2VybmVsIGludGVyZmFjZSByb3V0aW5lcwotIyB1bmRlciBMaW51eC4KLSMKLQotb2JqLXkJCQkrPSBzZXR1cC5vIGlycS5vIG5pbGU0X3BpYy5vCi0KLUVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaXJxLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGMwODdiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqICBhcmNoL21pcHMvZGRiNTA3NC9pcnEuYyAtLSBORUMgRERCIFZyYy01MDc0IGludGVycnVwdCByb3V0aW5lcwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vbmlsZTQuaD4KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTA3NC5oPgotCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9jYXNjYWRlID0geyBub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIiwgTlVMTCwgTlVMTCB9OwotCi0jZGVmaW5lIE0xNTQzX1BOUF9DT05GSUcJMHgwM2YwCS8qIFBuUCBDb25maWcgUG9ydCAqLwotI2RlZmluZSBNMTU0M19QTlBfSU5ERVgJCTB4MDNmMAkvKiBQblAgSW5kZXggUG9ydCAqLwotI2RlZmluZSBNMTU0M19QTlBfREFUQQkJMHgwM2YxCS8qIFBuUCBEYXRhIFBvcnQgKi8KLQotI2RlZmluZSBNMTU0M19QTlBfQUxUX0NPTkZJRwkweDAzNzAJLyogQWx0ZXJuYXRpdmUgUG5QIENvbmZpZyBQb3J0ICovCi0jZGVmaW5lIE0xNTQzX1BOUF9BTFRfSU5ERVgJMHgwMzcwCS8qIEFsdGVybmF0aXZlIFBuUCBJbmRleCBQb3J0ICovCi0jZGVmaW5lIE0xNTQzX1BOUF9BTFRfREFUQQkweDAzNzEJLyogQWx0ZXJuYXRpdmUgUG5QIERhdGEgUG9ydCAqLwotCi0jZGVmaW5lIE0xNTQzX0lOVDFfTUFTVEVSX0NUUkwJMHgwMDIwCS8qIElOVF8xIChtYXN0ZXIpIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTTE1NDNfSU5UMV9NQVNURVJfTUFTSwkweDAwMjEJLyogSU5UXzEgKG1hc3RlcikgTWFzayBSZWdpc3RlciAqLwotCi0jZGVmaW5lIE0xNTQzX0lOVDFfU0xBVkVfQ1RSTAkweDAwYTAJLyogSU5UXzEgKHNsYXZlKSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE0xNTQzX0lOVDFfU0xBVkVfTUFTSwkweDAwYTEJLyogSU5UXzEgKHNsYXZlKSBNYXNrIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgTTE1NDNfSU5UMV9NQVNURVJfRUxDUgkweDA0ZDAJLyogSU5UXzEgKG1hc3RlcikgRWRnZS9MZXZlbCBDb250cm9sICovCi0jZGVmaW5lIE0xNTQzX0lOVDFfU0xBVkVfRUxDUgkweDA0ZDEJLyogSU5UXzEgKHNsYXZlKSBFZGdlL0xldmVsIENvbnRyb2wgKi8KLQotCi1zdGF0aWMgdm9pZCBtMTU0M19pcnFfc2V0dXAodm9pZCkKLXsKLQkvKgotCSAqICBUaGUgQUxJIE0xNTQzIGhhcyAxMyBpbnRlcnJ1cHQgaW5wdXRzLCBJUlExLi5JUlExMy4gIE5vdCBhbGwKLQkgKiAgdGhlIHBvc3NpYmxlIElPIHNvdXJjZXMgaW4gdGhlIE0xNTQzIGFyZSBpbiB1c2UgYnkgdXMuICBXZSB3aWxsCi0JICogIHVzZSB0aGUgZm9sbG93aW5nIG1hcHBpbmc6Ci0JICoKLQkgKiAgICAgIElSUTEgIC0ga2V5Ym9hcmQgKGRlZmF1bHQgc2V0IGJ5IE0xNTQzKQotCSAqICAgICAgSVJRMyAgLSByZXNlcnZlZCBmb3IgVUFSVCBCIChkZWZhdWx0IHNldCBieSBNMTU0MykgKG5vdGUgdGhhdAotCSAqICAgICAgICAgICAgICB0aGUgc2NoZW1hdGljcyBmb3IgdGhlIEREQiBWcmMtNTA3NCBib2FyZCBzZWVtIHRvCi0JICogICAgICAgICAgICAgIGluZGljYXRlIHRoYXQgSVJRMyBpcyBjb25uZWN0ZWQgdG8gdGhlIERTMTM4NgotCSAqICAgICAgICAgICAgICB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgb3V0cHV0IHNvIHdlIG1pZ2h0IGhhdmUKLQkgKiAgICAgICAgICAgICAgYSBjb25mbGljdCkKLQkgKiAgICAgIElSUTQgIC0gcmVzZXJ2ZWQgZm9yIFVBUlQgQSAoZGVmYXVsdCBzZXQgYnkgTTE1NDMpCi0JICogICAgICBJUlE1ICAtIHBhcmFsbGVsIChkZWZhdWx0IHNldCBieSBNMTU0MykKLQkgKiAgICAgIElSUTggIC0gRFMxMzg2IHRpbWUgb2YgZGF5IChSVEMpIGludGVycnVwdAotCSAqICAgICAgSVJRMTIgLSBtb3VzZQotCSAqLwotCi0JLyoKLQkgKiAgQXNzaW5nIG1vdXNlIGludGVycnVwdCB0byBJUlExMgotCSAqLwotCi0JLyogRW50ZXIgY29uZmlndXJhdGlvbiBtb2RlICovCi0Jb3V0YigweDUxLCBNMTU0M19QTlBfQ09ORklHKTsKLQlvdXRiKDB4MjMsIE0xNTQzX1BOUF9DT05GSUcpOwotCi0JLyogU2VsZWN0IGxvZ2ljYWwgZGV2aWNlIDcgKEtleWJvYXJkKSAqLwotCW91dGIoMHgwNywgTTE1NDNfUE5QX0lOREVYKTsKLQlvdXRiKDB4MDcsIE0xNTQzX1BOUF9EQVRBKTsKLQotCS8qIFNlbGVjdCBJUlExMiAqLwotCW91dGIoMHg3MiwgTTE1NDNfUE5QX0lOREVYKTsKLQlvdXRiKDB4MGMsIE0xNTQzX1BOUF9EQVRBKTsKLQotCW91dGIoMHgzMCwgTTE1NDNfUE5QX0lOREVYKTsKLQlwcmludGsoImRldmljZSA3LCAweDMwOiAlMDJ4XG4iLGluYihNMTU0M19QTlBfREFUQSkpOwotCi0Jb3V0YigweDcwLCBNMTU0M19QTlBfSU5ERVgpOwotCXByaW50aygiZGV2aWNlIDcsIDB4NzA6ICUwMnhcbiIsaW5iKE0xNTQzX1BOUF9EQVRBKSk7Ci0KLQkvKiBMZWF2ZSBjb25maWdyYXRpb24gbW9kZSAqLwotCW91dGIoMHhiYiwgTTE1NDNfUE5QX0NPTkZJRyk7Ci0KLQotfQotCi1zdGF0aWMgdm9pZCBkZGJfbG9jYWwwX2lycWRpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXUzMiBtYXNrOwotCWludCBuaWxlNF9pcnE7Ci0KLQltYXNrID0gbmlsZTRfZ2V0X2lycV9zdGF0KDApOwotCi0JLyogSGFuZGxlIHRoZSB0aW1lciBpbnRlcnJ1cHQgZmlyc3QgKi8KLSNpZiAwCi0JaWYgKG1hc2sgJiAoMSA8PCBOSUxFNF9JTlRfR1BUKSkgewotCQlkb19JUlEobmlsZTRfdG9faXJxKE5JTEU0X0lOVF9HUFQpLCByZWdzKTsKLQkJbWFzayAmPSB+KDEgPDwgTklMRTRfSU5UX0dQVCk7Ci0JfQotI2VuZGlmCi0JZm9yIChuaWxlNF9pcnEgPSAwOyBtYXNrOyBuaWxlNF9pcnErKywgbWFzayA+Pj0gMSkKLQkJaWYgKG1hc2sgJiAxKSB7Ci0JCQlpZiAobmlsZTRfaXJxID09IE5JTEU0X0lOVF9JTlRFKSB7Ci0JCQkJaW50IGk4MjU5X2lycTsKLQotCQkJCW5pbGU0X2NsZWFyX2lycShOSUxFNF9JTlRfSU5URSk7Ci0JCQkJaTgyNTlfaXJxID0gbmlsZTRfaTgyNTlfaWFjaygpOwotCQkJCWRvX0lSUShpODI1OV9pcnEsIHJlZ3MpOwotCQkJfSBlbHNlCi0JCQkJZG9fSVJRKG5pbGU0X3RvX2lycShuaWxlNF9pcnEpLCByZWdzKTsKLQotCQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRkYl9sb2NhbDFfaXJxZGlzcGF0Y2godm9pZCkKLXsKLQlwcmludGsoImRkYl9sb2NhbDFfaXJxZGlzcGF0Y2ggY2FsbGVkXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgZGRiX2J1c2Vycm9yX2lycSh2b2lkKQotewotCXByaW50aygiZGRiX2J1c2Vycm9yX2lycSBjYWxsZWRcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBkZGJfODI1NHRpbWVyX2lycSh2b2lkKQotewotCXByaW50aygiZGRiXzgyNTR0aW1lcl9pcnEgY2FsbGVkXG4iKTsKLX0KLQotYXNtbGlua2FnZSB2b2lkIHBsYXRfaXJxX2Rpc3BhdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9jYXVzZSgpICYgcmVhZF9jMF9zdGF0dXMoKTsKLQotCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikKLQkJZGRiX2xvY2FsMF9pcnFkaXNwYXRjaChyZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykKLQkJZGRiX2xvY2FsMV9pcnFkaXNwYXRjaCgpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA2KQotCQlkZGJfYnVzZXJyb3JfaXJxKCk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIChDQVVTRUZfSVA0IHwgQ0FVU0VGX0lQNSkpCi0JCWRkYl84MjU0dGltZXJfaXJxKCk7Ci19Ci0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKLXsKLQkvKiBzZXR1cCBjYXNjYWRlIGludGVycnVwdHMgKi8KLQlzZXR1cF9pcnEoTklMRTRfSVJRX0JBU0UgICsgTklMRTRfSU5UX0lOVEUsICZpcnFfY2FzY2FkZSk7Ci0Jc2V0dXBfaXJxKENQVV9JUlFfQkFTRSArIENQVV9OSUxFNF9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOwotCi0JbmlsZTRfaXJxX3NldHVwKE5JTEU0X0lSUV9CQVNFKTsKLQltMTU0M19pcnFfc2V0dXAoKTsKLQlpbml0X2k4MjU5X2lycXMoKTsKLQotCi0JcHJpbnRrKCJDUFVfSVJRX0JBU0U6ICVkXG4iLENQVV9JUlFfQkFTRSk7Ci0KLQltaXBzX2NwdV9pcnFfaW5pdChDUFVfSVJRX0JBU0UpOwotCi0JcHJpbnRrKCJlbmFibGluZyA4MjU5IGNhc2NhZGVcbiIpOwotCi0JZGRiNTA3NF9sZWRfaGV4KDApOwotCi0JLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgY2FzY2FkZSAqLwotCW5pbGU0X2VuYWJsZV9pcnEoTklMRTRfSVJRX0JBU0UrSVJRX0k4MjU5X0NBU0NBREUpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9uaWxlNF9waWMuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvbmlsZTRfcGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NDNmZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTA3NC9uaWxlNF9waWMuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogIGFyY2gvbWlwcy9kZGI1NDc2L25pbGU0LmMgLS0KLSAqICAJbG93LWxldmVsIFBJQyBjb2RlIGZvciBORUMgVnJjLTU0NzYgKE5pbGUgNCkKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCi0gKgotICogIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogIEF1dGhvcjoganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0KLXN0YXRpYyBpbnQgaXJxX2Jhc2U7Ci0KLS8qCi0gKiAgSW50ZXJydXB0IFByb2dyYW1taW5nCi0gKi8KLXZvaWQgbmlsZTRfbWFwX2lycShpbnQgbmlsZTRfaXJxLCBpbnQgY3B1X2lycSkKLXsKLQl1MzIgb2Zmc2V0LCB0OwotCi0Jb2Zmc2V0ID0gRERCX0lOVENUUkw7Ci0JaWYgKG5pbGU0X2lycSA+PSA4KSB7Ci0JCW9mZnNldCArPSA0OwotCQluaWxlNF9pcnEgLT0gODsKLQl9Ci0JdCA9IGRkYl9pbjMyKG9mZnNldCk7Ci0JdCAmPSB+KDcgPDwgKG5pbGU0X2lycSAqIDQpKTsKLQl0IHw9IGNwdV9pcnEgPDwgKG5pbGU0X2lycSAqIDQpOwotCWRkYl9vdXQzMihvZmZzZXQsIHQpOwotfQotCi12b2lkIG5pbGU0X21hcF9pcnFfYWxsKGludCBjcHVfaXJxKQotewotCXUzMiBhbGwsIHQ7Ci0KLQlhbGwgPSBjcHVfaXJxOwotCWFsbCB8PSBhbGwgPDwgNDsKLQlhbGwgfD0gYWxsIDw8IDg7Ci0JYWxsIHw9IGFsbCA8PCAxNjsKLQl0ID0gZGRiX2luMzIoRERCX0lOVENUUkwpOwotCXQgJj0gMHg4ODg4ODg4ODsKLQl0IHw9IGFsbDsKLQlkZGJfb3V0MzIoRERCX0lOVENUUkwsIHQpOwotCXQgPSBkZGJfaW4zMihEREJfSU5UQ1RSTCArIDQpOwotCXQgJj0gMHg4ODg4ODg4ODsKLQl0IHw9IGFsbDsKLQlkZGJfb3V0MzIoRERCX0lOVENUUkwgKyA0LCB0KTsKLX0KLQotdm9pZCBuaWxlNF9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBuaWxlNF9pcnEpCi17Ci0JdTMyIG9mZnNldCwgdDsKLQotCW5pbGU0X2lycS09aXJxX2Jhc2U7Ci0KLQlkZGI1MDc0X2xlZF9oZXgoOCk7Ci0KLQlvZmZzZXQgPSBEREJfSU5UQ1RSTDsKLQlpZiAobmlsZTRfaXJxID49IDgpIHsKLQkJb2Zmc2V0ICs9IDQ7Ci0JCW5pbGU0X2lycSAtPSA4OwotCX0KLQlkZGI1MDc0X2xlZF9oZXgoOSk7Ci0JdCA9IGRkYl9pbjMyKG9mZnNldCk7Ci0JZGRiNTA3NF9sZWRfaGV4KDB4YSk7Ci0JdCB8PSA4IDw8IChuaWxlNF9pcnEgKiA0KTsKLQlkZGJfb3V0MzIob2Zmc2V0LCB0KTsKLQlkZGI1MDc0X2xlZF9oZXgoMHhiKTsKLX0KLQotdm9pZCBuaWxlNF9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgbmlsZTRfaXJxKQotewotCXUzMiBvZmZzZXQsIHQ7Ci0KLQluaWxlNF9pcnEtPWlycV9iYXNlOwotCi0Jb2Zmc2V0ID0gRERCX0lOVENUUkw7Ci0JaWYgKG5pbGU0X2lycSA+PSA4KSB7Ci0JCW9mZnNldCArPSA0OwotCQluaWxlNF9pcnEgLT0gODsKLQl9Ci0JdCA9IGRkYl9pbjMyKG9mZnNldCk7Ci0JdCAmPSB+KDggPDwgKG5pbGU0X2lycSAqIDQpKTsKLQlkZGJfb3V0MzIob2Zmc2V0LCB0KTsKLX0KLQotdm9pZCBuaWxlNF9kaXNhYmxlX2lycV9hbGwodm9pZCkKLXsKLQlkZGJfb3V0MzIoRERCX0lOVENUUkwsIDApOwotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCArIDQsIDApOwotfQotCi11MTYgbmlsZTRfZ2V0X2lycV9zdGF0KGludCBjcHVfaXJxKQotewotCXJldHVybiBkZGJfaW4xNihEREJfSU5UU1RBVDAgKyBjcHVfaXJxICogMik7Ci19Ci0KLXZvaWQgbmlsZTRfZW5hYmxlX2lycV9vdXRwdXQoaW50IGNwdV9pcnEpCi17Ci0JdTMyIHQ7Ci0KLQl0ID0gZGRiX2luMzIoRERCX0lOVFNUQVQxICsgNCk7Ci0JdCB8PSAxIDw8ICgxNiArIGNwdV9pcnEpOwotCWRkYl9vdXQzMihEREJfSU5UU1RBVDEsIHQpOwotfQotCi12b2lkIG5pbGU0X2Rpc2FibGVfaXJxX291dHB1dChpbnQgY3B1X2lycSkKLXsKLQl1MzIgdDsKLQotCXQgPSBkZGJfaW4zMihEREJfSU5UU1RBVDEgKyA0KTsKLQl0ICY9IH4oMSA8PCAoMTYgKyBjcHVfaXJxKSk7Ci0JZGRiX291dDMyKEREQl9JTlRTVEFUMSwgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfc2V0X3BjaV9pcnFfcG9sYXJpdHkoaW50IHBjaV9pcnEsIGludCBoaWdoKQotewotCXUzMiB0OwotCi0JdCA9IGRkYl9pbjMyKEREQl9JTlRQUEVTKTsKLQlpZiAoaGlnaCkKLQkJdCAmPSB+KDEgPDwgKHBjaV9pcnEgKiAyKSk7Ci0JZWxzZQotCQl0IHw9IDEgPDwgKHBjaV9pcnEgKiAyKTsKLQlkZGJfb3V0MzIoRERCX0lOVFBQRVMsIHQpOwotfQotCi12b2lkIG5pbGU0X3NldF9wY2lfaXJxX2xldmVsX29yX2VkZ2UoaW50IHBjaV9pcnEsIGludCBsZXZlbCkKLXsKLQl1MzIgdDsKLQotCXQgPSBkZGJfaW4zMihEREJfSU5UUFBFUyk7Ci0JaWYgKGxldmVsKQotCQl0IHw9IDIgPDwgKHBjaV9pcnEgKiAyKTsKLQllbHNlCi0JCXQgJj0gfigyIDw8IChwY2lfaXJxICogMikpOwotCWRkYl9vdXQzMihEREJfSU5UUFBFUywgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfY2xlYXJfaXJxKGludCBuaWxlNF9pcnEpCi17Ci0JbmlsZTRfaXJxLT1pcnFfYmFzZTsKLQlkZGJfb3V0MzIoRERCX0lOVENMUiwgMSA8PCBuaWxlNF9pcnEpOwotfQotCi12b2lkIG5pbGU0X2NsZWFyX2lycV9tYXNrKHUzMiBtYXNrKQotewotCWRkYl9vdXQzMihEREJfSU5UQ0xSLCBtYXNrKTsKLX0KLQotdTggbmlsZTRfaTgyNTlfaWFjayh2b2lkKQotewotCXU4IGlycTsKLQl1MzIgcmVnOwotCi0JLyogU2V0IHdpbmRvdyAwIGZvciBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgKi8KLQlyZWcgPSBkZGJfaW4zMihEREJfUENJSU5JVDApOwotCi0JZGRiX3NldF9wbXIoRERCX1BDSUlOSVQwLCBEREJfUENJQ01EX0lBQ0ssIDAsIEREQl9QQ0lfQUNDRVNTXzMyKTsKLQlpcnEgPSAqKHZvbGF0aWxlIHU4ICopIEtTRUcxQUREUihEREJfUENJX0lBQ0tfQkFTRSk7Ci0JLyogcmVzdG9yZSB3aW5kb3cgMCBmb3IgUENJIEkvTyBzcGFjZSAqLwotCS8vIGRkYl9zZXRfcG1yKEREQl9QQ0lJTklUMCwgRERCX1BDSUNNRF9JTywgMCwgRERCX1BDSV9BQ0NFU1NfMzIpOwotCWRkYl9vdXQzMihEREJfUENJSU5JVDAsIHJlZyk7Ci0KLQkvKiBpODI2OS5jIHNldCB0aGUgYmFzZSB2ZWN0b3IgdG8gYmUgMHgwICovCi0JcmV0dXJuIGlycSA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmlsZTRfaXJxX3N0YXJ0dXAodW5zaWduZWQgaW50IGlycSkgewotCi0JbmlsZTRfZW5hYmxlX2lycShpcnEpOwotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyB2b2lkIG5pbGU0X2Fja19pcnEodW5zaWduZWQgaW50IGlycSkgewotCi0gICAgZGRiNTA3NF9sZWRfaGV4KDQpOwotCi0JbmlsZTRfY2xlYXJfaXJxKGlycSk7Ci0gICAgZGRiNTA3NF9sZWRfaGV4KDIpOwotCW5pbGU0X2Rpc2FibGVfaXJxKGlycSk7Ci0KLSAgICBkZGI1MDc0X2xlZF9oZXgoMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5pbGU0X2lycV9lbmQodW5zaWduZWQgaW50IGlycSkgewotCi0JZGRiNTA3NF9sZWRfaGV4KDMpOwotCWlmKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkgewotCWRkYjUwNzRfbGVkX2hleCg1KTsKLQkJbmlsZTRfZW5hYmxlX2lycShpcnEpOwotCWRkYjUwNzRfbGVkX2hleCg3KTsKLQl9Ci0KLQlkZGI1MDc0X2xlZF9oZXgoMSk7Ci19Ci0KLSNkZWZpbmUgbmlsZTRfaXJxX3NodXRkb3duIG5pbGU0X2Rpc2FibGVfaXJxCi0KLXN0YXRpYyBod19pcnFfY29udHJvbGxlciBuaWxlNF9pcnFfY29udHJvbGxlciA9IHsKLQkudHlwZW5hbWUgPSAibmlsZTQiLAotCS5zdGFydHVwID0gbmlsZTRfaXJxX3N0YXJ0dXAsCi0JLnNodXRkb3duID0gbmlsZTRfaXJxX3NodXRkb3duLAotCS5lbmFibGUgPSBuaWxlNF9lbmFibGVfaXJxLAotCS5kaXNhYmxlID0gbmlsZTRfZGlzYWJsZV9pcnEsCi0JLmFjayA9IG5pbGU0X2Fja19pcnEsCi0JLmVuZCA9IG5pbGU0X2lycV9lbmQsCi19OwotCi12b2lkIG5pbGU0X2lycV9zZXR1cCh1MzIgYmFzZSkgewotCi0JaW50IGk7Ci0KLQlpcnFfYmFzZT1iYXNlOwotCi0JLyogTWFwIGFsbCBpbnRlcnJ1cHRzIHRvIENQVSBpbnQgIzAgKi8KLQluaWxlNF9tYXBfaXJxX2FsbCgwKTsKLQotCS8qIFBDSSBJTlRBIy1FIyBtdXN0IGJlIGxldmVsIHRyaWdnZXJlZCAqLwotCW5pbGU0X3NldF9wY2lfaXJxX2xldmVsX29yX2VkZ2UoMCwgMSk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZSgxLCAxKTsKLQluaWxlNF9zZXRfcGNpX2lycV9sZXZlbF9vcl9lZGdlKDIsIDEpOwotCW5pbGU0X3NldF9wY2lfaXJxX2xldmVsX29yX2VkZ2UoMywgMSk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZSg0LCAxKTsKLQotCS8qIFBDSSBJTlRBIy1EIyBtdXN0IGJlIGFjdGl2ZSBsb3csIElOVEUjIG11c3QgYmUgYWN0aXZlIGhpZ2ggKi8KLQluaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eSgwLCAwKTsKLQluaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eSgxLCAwKTsKLQluaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eSgyLCAwKTsKLQluaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eSgzLCAwKTsKLQluaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eSg0LCAxKTsKLQotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJbmlsZTRfY2xlYXJfaXJxKGkpOwotCQluaWxlNF9kaXNhYmxlX2lycShpKTsKLQl9Ci0KLQkvKiBFbmFibGUgQ1BVIGludCAjMCAqLwotCW5pbGU0X2VuYWJsZV9pcnFfb3V0cHV0KDApOwotCi0JZm9yIChpPSBiYXNlOyBpPCBiYXNlICsgTlVNX05JTEU0X0lOVEVSUlVQVFM7IGkrKykgewotCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7Ci0JCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKLQkJaXJxX2Rlc2NbaV0uaGFuZGxlciA9ICZuaWxlNF9pcnFfY29udHJvbGxlcjsKLQl9Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19SVU5USU1FX0RFQlVHKQotdm9pZCBuaWxlNF9kdW1wX2lycV9zdGF0dXModm9pZCkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiCi0JICAgICAgIENQVVNUQVQgPSAlcDolcFxuIiwgKHZvaWQgKikgZGRiX2luMzIoRERCX0NQVVNUQVQgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0NQVVNUQVQpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiCi0JICAgICAgIElOVENUUkwgPSAlcDolcFxuIiwgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVENUUkwgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVENUUkwpKTsKLQlwcmludGsoS0VSTl9ERUJVRwotCSAgICAgICAiSU5UU1RBVDAgPSAlcDolcFxuIiwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVFNUQVQwICsgNCksCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRTVEFUMCkpOwotCXByaW50ayhLRVJOX0RFQlVHCi0JICAgICAgICJJTlRTVEFUMSA9ICVwOiVwXG4iLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UU1RBVDEgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVFNUQVQxKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcKLQkgICAgICAgIklOVENMUiA9ICVwOiVwXG4iLCAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UQ0xSICsgNCksCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRDTFIpKTsKLQlwcmludGsoS0VSTl9ERUJVRwotCSAgICAgICAiSU5UUFBFUyA9ICVwOiVwXG4iLCAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UUFBFUyArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UUFBFUykpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvc2V0dXAuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjUwNzQvc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE0NTZiMC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1MDc0L3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoKLSAqICBhcmNoL21pcHMvZGRiNTA3NC9zZXR1cC5jIC0tIE5FQyBEREIgVnJjLTUwNzQgc2V0dXAgcm91dGluZXMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2JkX2xsLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgva2Rldl90Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2JjYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVib290Lmg+Ci0jaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbmlsZTQuaD4KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1MDc0Lmg+Ci0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi1zdGF0aWMgdm9pZCAoKmJhY2tfdG9fcHJvbSkgKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKSAweGJmYzAwMDAwOwotCi1zdGF0aWMgdm9pZCBkZGJfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCi17Ci0JdTMyIHQ7Ci0KLQkvKiBQQ0kgY29sZCByZXNldCAqLwotCXQgPSBuaWxlNF9pbjMyKE5JTEU0X1BDSUNUUkwgKyA0KTsKLQl0IHw9IDB4NDAwMDAwMDA7Ci0JbmlsZTRfb3V0MzIoTklMRTRfUENJQ1RSTCArIDQsIHQpOwotCS8qIENQVSBjb2xkIHJlc2V0ICovCi0JdCA9IG5pbGU0X2luMzIoTklMRTRfQ1BVU1RBVCk7Ci0JdCB8PSAxOwotCW5pbGU0X291dDMyKE5JTEU0X0NQVVNUQVQsIHQpOwotCS8qIENhbGwgdGhlIFBST00gKi8KLQliYWNrX3RvX3Byb20oKTsKLX0KLQotc3RhdGljIHZvaWQgZGRiX21hY2hpbmVfaGFsdCh2b2lkKQotewotCXByaW50aygiRERCIFZyYy01MDc0IGhhbHRlZC5cbiIpOwotCWRvIHsKLQl9IHdoaWxlICgxKTsKLX0KLQotc3RhdGljIHZvaWQgZGRiX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JcHJpbnRrKCJEREIgVnJjLTUwNzQgaGFsdGVkLiBQbGVhc2UgdHVybiBvZmYgdGhlIHBvd2VyLlxuIik7Ci0JZG8gewotCX0gd2hpbGUgKDEpOwotfQotCi1leHRlcm4gdm9pZCBydGNfZHMxMzg2X2luaXQodW5zaWduZWQgbG9uZyBiYXNlKTsKLQotZXh0ZXJuIHZvaWQgKCpib2FyZF90aW1lcl9zZXR1cCkgKHN0cnVjdCBpcnFhY3Rpb24gKiBpcnEpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZGRiX3RpbWVyX2luaXQoc3RydWN0IGlycWFjdGlvbiAqaXJxKQotewotCS8qIHNldCB0aGUgY2xvY2sgdG8gMSBIeiAqLwotCW5pbGU0X291dDMyKE5JTEU0X1QyQ1RSTCwgMTAwMDAwMCk7Ci0JLyogZW5hYmxlIHRoZSBHZW5lcmFsLVB1cnBvc2UgVGltZXIgKi8KLQluaWxlNF9vdXQzMihOSUxFNF9UMkNUUkwgKyA0LCAweDAwMDAwMDAxKTsKLQkvKiByZXNldCB0aW1lciAqLwotCW5pbGU0X291dDMyKE5JTEU0X1QyQ05UUiwgMCk7Ci0JLyogZW5hYmxlIGludGVycnVwdCAqLwotCXNldHVwX2lycShuaWxlNF90b19pcnEoTklMRTRfSU5UX0dQVCksIGlycSk7Ci0JbmlsZTRfZW5hYmxlX2lycShuaWxlNF90b19pcnEoTklMRTRfSU5UX0dQVCkpOwotCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLAotCQkgICAgICAgICAgSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwgSUVfSVJRMyB8IElFX0lSUTQpOwotCi19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBkZGJfdGltZV9pbml0KHZvaWQpCi17Ci0JLyogd2UgaGF2ZSBkczEzOTYgUlRDIGNoaXAgKi8KLQlydGNfZHMxMzg2X2luaXQoS1NFRzFBRERSKEREQl9QQ0lfTUVNX0JBU0UpKTsKLX0KLQotCi0KLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKLXsKLQlzZXRfaW9fcG9ydF9iYXNlKE5JTEU0X1BDSV9JT19CQVNFKTsKLQlpc2Ffc2xvdF9vZmZzZXQgPSBOSUxFNF9QQ0lfTUVNX0JBU0U7Ci0JYm9hcmRfdGltZXJfc2V0dXAgPSBkZGJfdGltZXJfaW5pdDsKLQlib2FyZF90aW1lX2luaXQgPSBkZGJfdGltZV9pbml0OwotCi0KLQlfbWFjaGluZV9yZXN0YXJ0ID0gZGRiX21hY2hpbmVfcmVzdGFydDsKLQlfbWFjaGluZV9oYWx0ID0gZGRiX21hY2hpbmVfaGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBkZGJfbWFjaGluZV9wb3dlcl9vZmY7Ci0KLQlkZGJfb3V0MzIoRERCX0JBUjAsIDApOwotCi0JZGRiX3NldF9wbXIoRERCX1BDSUlOSVQwLCBEREJfUENJQ01EX0lPLCAwLCAweDEwKTsKLQlkZGJfc2V0X3BtcihEREJfUENJSU5JVDEsIEREQl9QQ0lDTURfTUVNLCBEREJfUENJX01FTV9CQVNFICwgMHgxMCk7Ci0KLQkvKiBSZWJvb3Qgb24gcGFuaWMgKi8KLQlwYW5pY190aW1lb3V0ID0gMTgwOwotfQotCi0jZGVmaW5lIFVTRV9OSUxFNF9TRVJJQUwJMAotCi0jaWYgVVNFX05JTEU0X1NFUklBTAotI2RlZmluZSBuczE2NTUwX2luKHJlZykJCW5pbGU0X2luOCgocmVnKSo4KQotI2RlZmluZSBuczE2NTUwX291dChyZWcsIHZhbCkJbmlsZTRfb3V0OCgocmVnKSo4LCAodmFsKSkKLSNlbHNlCi0jZGVmaW5lIE5TMTY1NTBfQkFTRQkJKE5JTEU0X1BDSV9JT19CQVNFKzB4MDNmOCkKLXN0YXRpYyBpbmxpbmUgdTggbnMxNjU1MF9pbih1MzIgcmVnKQotewotCXJldHVybiAqKHZvbGF0aWxlIHU4ICopIChOUzE2NTUwX0JBU0UgKyByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbnMxNjU1MF9vdXQodTMyIHJlZywgdTggdmFsKQotewotCSoodm9sYXRpbGUgdTggKikgKE5TMTY1NTBfQkFTRSArIHJlZykgPSB2YWw7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBOUzE2NTUwX1JCUgkJMAotI2RlZmluZSBOUzE2NTUwX1RIUgkJMAotI2RlZmluZSBOUzE2NTUwX0RMTAkJMAotI2RlZmluZSBOUzE2NTUwX0lFUgkJMQotI2RlZmluZSBOUzE2NTUwX0RMTQkJMQotI2RlZmluZSBOUzE2NTUwX0ZDUgkJMgotI2RlZmluZSBOUzE2NTUwX0lJUgkJMgotI2RlZmluZSBOUzE2NTUwX0xDUgkJMwotI2RlZmluZSBOUzE2NTUwX01DUgkJNAotI2RlZmluZSBOUzE2NTUwX0xTUgkJNQotI2RlZmluZSBOUzE2NTUwX01TUgkJNgotI2RlZmluZSBOUzE2NTUwX1NDUgkJNwotCi0jZGVmaW5lIE5TMTY1NTBfTFNSX0RSCQkweDAxCS8qIERhdGEgcmVhZHkgKi8KLSNkZWZpbmUgTlMxNjU1MF9MU1JfT0UJCTB4MDIJLyogT3ZlcnJ1biAqLwotI2RlZmluZSBOUzE2NTUwX0xTUl9QRQkJMHgwNAkvKiBQYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgTlMxNjU1MF9MU1JfRkUJCTB4MDgJLyogRnJhbWluZyBlcnJvciAqLwotI2RlZmluZSBOUzE2NTUwX0xTUl9CSQkJMHgxMAkvKiBCcmVhayAqLwotI2RlZmluZSBOUzE2NTUwX0xTUl9USFJFCTB4MjAJLyogWG1pdCBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCi0jZGVmaW5lIE5TMTY1NTBfTFNSX1RFTVQJMHg0MAkvKiBYbWl0dGVyIGVtcHR5ICovCi0jZGVmaW5lIE5TMTY1NTBfTFNSX0VSUgkJMHg4MAkvKiBFcnJvciAqLwotCi0KLXZvaWQgX3NlcmluaXQodm9pZCkKLXsKLSNpZiBVU0VfTklMRTRfU0VSSUFMCi0JbnMxNjU1MF9vdXQoTlMxNjU1MF9MQ1IsIDB4ODApOwotCW5zMTY1NTBfb3V0KE5TMTY1NTBfRExNLCAweDAwKTsKLQluczE2NTUwX291dChOUzE2NTUwX0RMTCwgMHgzNik7CS8qIDk2MDAgYmF1ZCAqLwotCW5zMTY1NTBfb3V0KE5TMTY1NTBfTENSLCAweDAwKTsKLQluczE2NTUwX291dChOUzE2NTUwX0xDUiwgMHgwMyk7Ci0JbnMxNjU1MF9vdXQoTlMxNjU1MF9GQ1IsIDB4NDcpOwotI2Vsc2UKLQkvKiBkb25lIGJ5IFBNT04gKi8KLSNlbmRpZgotfQotCi12b2lkIF9wdXRjKGNoYXIgYykKLXsKLQl3aGlsZSAoIShuczE2NTUwX2luKE5TMTY1NTBfTFNSKSAmIE5TMTY1NTBfTFNSX1RIUkUpKTsKLQluczE2NTUwX291dChOUzE2NTUwX1RIUiwgYyk7Ci0JaWYgKGMgPT0gJ1xuJykgewotCQl3aGlsZSAoIShuczE2NTUwX2luKE5TMTY1NTBfTFNSKSAmIE5TMTY1NTBfTFNSX1RIUkUpKTsKLQkJbnMxNjU1MF9vdXQoTlMxNjU1MF9USFIsICdccicpOwotCX0KLX0KLQotdm9pZCBfcHV0cyhjb25zdCBjaGFyICpzKQotewotCWNoYXIgYzsKLQl3aGlsZSAoKGMgPSAqcysrKSkKLQkJX3B1dGMoYyk7Ci19Ci0KLWNoYXIgX2dldGModm9pZCkKLXsKLQl3aGlsZSAoIShuczE2NTUwX2luKE5TMTY1NTBfTFNSKSAmIE5TMTY1NTBfTFNSX0RSKSk7Ci0JcmV0dXJuIG5zMTY1NTBfaW4oTlMxNjU1MF9SQlIpOwotfQotCi1pbnQgX3Rlc3RjKHZvaWQpCi17Ci0JcmV0dXJuIChuczE2NTUwX2luKE5TMTY1NTBfTFNSKSAmIE5TMTY1NTBfTFNSX0RSKSAhPSAwOwotfQotCi0KLS8qCi0gKiAgSGV4YWRlY2ltYWwgNy1zZWdtZW50IExFRAotICovCi12b2lkIGRkYjUwNzRfbGVkX2hleChpbnQgaGV4KQotewotCW91dGIoaGV4LCAweDgwKTsKLX0KLQotCi0vKgotICogIExFRHMgRDIgYW5kIEQzLCBjb25uZWN0ZWQgdG8gdGhlIEdQSU8gcGlucyBvZiB0aGUgUE1VIGluIHRoZSBBTGkgTTE1NDMKLSAqLwotc3RydWN0IHBjaV9kZXYgKnBjaV9wbXUgPSBOVUxMOwotCi12b2lkIGRkYjUwNzRfbGVkX2QyKGludCBvbikKLXsKLQl1OCB0OwotCi0JaWYgKHBjaV9wbXUpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX3BtdSwgMHg3ZSwgJnQpOwotCQlpZiAob24pCi0JCQl0ICY9IDB4N2Y7Ci0JCWVsc2UKLQkJCXQgfD0gMHg4MDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9wbXUsIDB4N2UsIHQpOwotCX0KLX0KLQotdm9pZCBkZGI1MDc0X2xlZF9kMyhpbnQgb24pCi17Ci0JdTggdDsKLQotCWlmIChwY2lfcG11KSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9wbXUsIDB4N2UsICZ0KTsKLQkJaWYgKG9uKQotCQkJdCAmPSAweGJmOwotCQllbHNlCi0JCQl0IHw9IDB4NDA7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2lfcG11LCAweDdlLCB0KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L01ha2VmaWxlIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIwMzEyYy4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgTkVDIEREQiBWcmMtNTQ3NiBzcGVjaWZpYyBrZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzCi0jIHVuZGVyIExpbnV4LgotIwotCi1vYmoteQkJCSs9IHNldHVwLm8gaXJxLm8gbmlsZTRfcGljLm8gdnJjNTQ3Nl9pcnEubwotb2JqLSQoQ09ORklHX0tHREIpCSs9IGRiZ19pby5vCi0KLUVYVFJBX0FGTEFHUyA6PSAkKENGTEFHUykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvZGJnX2lvLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2RiZ19pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWU5ZTUwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvZGJnX2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIGtnZGIgaW8gZnVuY3Rpb25zIGZvciBEREI1NDc2LiAgV2UgdXNlIHRoZSBzZWNvbmQgc2VyaWFsIHBvcnQuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT0gQ09ORklHID09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKiBbanN1bl0gd2UgdXNlIHRoZSBzZWNvbmQgc2VyaWFsIHBvcnQgZm9yIGtkYiAqLwotI2RlZmluZSAgICAgICAgIEJBU0UgICAgICAgICAgICAgICAgICAgIDB4YTYwMDAyZjgKLSNkZWZpbmUgICAgICAgICBNQVhfQkFVRCAgICAgICAgICAgICAgICAxMTUyMDAKLQotLyogZGlzdGFuY2UgaW4gYnl0ZXMgYmV0d2VlbiB0d28gc2VyaWFsIHJlZ2lzdGVycyAqLwotI2RlZmluZSAgICAgICAgIFJFR19PRkZTRVQgICAgICAgICAgICAgIDEKLQotLyoKLSAqIDAgLSBrZ2RiIGRvZXMgc2VyaWFsIGluaXQKLSAqIDEgLSBrZ2RiIHNraXAgc2VyaWFsIGluaXQKLSAqLwotc3RhdGljIGludCByZW1vdGVEZWJ1Z0luaXRpYWxpemVkID0gMDsKLQotLyoKLSAqIHRoZSBkZWZhdWx0IGJhdWQgcmF0ZSAqaWYqIGtnZGIgZG9lcyBzZXJpYWwgaW5pdAotICovCi0jZGVmaW5lCQlCQVVEX0RFRkFVTFQJCVVBUlQxNjU1MF9CQVVEXzM4NDAwCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09IEVORCBPRiBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMjsKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzI0MDAgICAgICAgICAgICAgMjQwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzQ4MDAgICAgICAgICAgICAgNDgwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzk2MDAgICAgICAgICAgICAgOTYwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzE5MjAwICAgICAgICAgICAgMTkyMDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfQkFVRF8zODQwMCAgICAgICAgICAgIDM4NDAwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0JBVURfNTc2MDAgICAgICAgICAgICA1NzYwMAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9CQVVEXzExNTIwMCAgICAgICAgICAgMTE1MjAwCi0KLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX05PTkUgICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX09ERCAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX0VWRU4gICAgICAgICAgIDB4MTgKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX01BUksgICAgICAgICAgIDB4MjgKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfUEFSSVRZX1NQQUNFICAgICAgICAgIDB4MzgKLQotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzVCSVQgICAgICAgICAgICAgMHgwCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX0RBVEFfNkJJVCAgICAgICAgICAgICAweDEKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfREFUQV83QklUICAgICAgICAgICAgIDB4MgotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzhCSVQgICAgICAgICAgICAgMHgzCi0KLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfU1RPUF8xQklUICAgICAgICAgICAgIDB4MAotI2RlZmluZSAgICAgICAgIFVBUlQxNjU1MF9TVE9QXzJCSVQgICAgICAgICAgICAgMHg0Ci0KLS8qIHJlZ2lzdGVyIG9mZnNldCAqLwotI2RlZmluZSAgICAgICAgIE9GU19SQ1ZfQlVGRkVSICAgICAgICAgIDAKLSNkZWZpbmUgICAgICAgICBPRlNfVFJBTlNfSE9MRCAgICAgICAgICAwCi0jZGVmaW5lICAgICAgICAgT0ZTX1NFTkRfQlVGRkVSICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIE9GU19JTlRSX0VOQUJMRSAgICAgICAgICgxKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX0lOVFJfSUQgICAgICAgICAgICAgKDIqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfREFUQV9GT1JNQVQgICAgICAgICAoMypSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19MSU5FX0NPTlRST0wgICAgICAgICgzKlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX01PREVNX0NPTlRST0wgICAgICAgKDQqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfUlMyMzJfT1VUUFVUICAgICAgICAoNCpSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19MSU5FX1NUQVRVUyAgICAgICAgICg1KlJFR19PRkZTRVQpCi0jZGVmaW5lICAgICAgICAgT0ZTX01PREVNX1NUQVRVUyAgICAgICAgKDYqUkVHX09GRlNFVCkKLSNkZWZpbmUgICAgICAgICBPRlNfUlMyMzJfSU5QVVQgICAgICAgICAoNipSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19TQ1JBVENIX1BBRCAgICAgICAgICg3KlJFR19PRkZTRVQpCi0KLSNkZWZpbmUgICAgICAgICBPRlNfRElWSVNPUl9MU0IgICAgICAgICAoMCpSRUdfT0ZGU0VUKQotI2RlZmluZSAgICAgICAgIE9GU19ESVZJU09SX01TQiAgICAgICAgICgxKlJFR19PRkZTRVQpCi0KLQotLyogbWVtb3J5LW1hcHBlZCByZWFkL3dyaXRlIG9mIHRoZSBwb3J0ICovCi0jZGVmaW5lICAgICAgICAgVUFSVDE2NTUwX1JFQUQoeSkgICAgKCooKHZvbGF0aWxlIHVpbnQ4KikoQkFTRSArIHkpKSkKLSNkZWZpbmUgICAgICAgICBVQVJUMTY1NTBfV1JJVEUoeSwgeikgICgoKigodm9sYXRpbGUgdWludDgqKShCQVNFICsgeSkpKSA9IHopCi0KLXZvaWQgZGVidWdJbml0KHVpbnQzMiBiYXVkLCB1aW50OCBkYXRhLCB1aW50OCBwYXJpdHksIHVpbnQ4IHN0b3ApCi17Ci0gICAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotICAgICAgICBVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKLQotICAgICAgICAvKiBzZXQgdXAgYnVhZCByYXRlICovCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICB1aW50MzIgZGl2aXNvcjsKLQotICAgICAgICAgICAgICAgIC8qIHNldCBESUFCIGJpdCAqLwotICAgICAgICAgICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfTElORV9DT05UUk9MLCAweDgwKTsKLQotICAgICAgICAgICAgICAgIC8qIHNldCBkaXZpc29yICovCi0gICAgICAgICAgICAgICAgZGl2aXNvciA9IE1BWF9CQVVEIC8gYmF1ZDsKLSAgICAgICAgICAgICAgICBVQVJUMTY1NTBfV1JJVEUoT0ZTX0RJVklTT1JfTFNCLCBkaXZpc29yICYgMHhmZik7Ci0gICAgICAgICAgICAgICAgVUFSVDE2NTUwX1dSSVRFKE9GU19ESVZJU09SX01TQiwgKGRpdmlzb3IgJiAweGZmMDApID4+IDgpOwotCi0gICAgICAgICAgICAgICAgLyogY2xlYXIgRElBQiBiaXQgKi8KLSAgICAgICAgICAgICAgICBVQVJUMTY1NTBfV1JJVEUoT0ZTX0xJTkVfQ09OVFJPTCwgMHgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHNldCBkYXRhIGZvcm1hdCAqLwotICAgICAgICBVQVJUMTY1NTBfV1JJVEUoT0ZTX0RBVEFfRk9STUFULCBkYXRhIHwgcGFyaXR5IHwgc3RvcCk7Ci19Ci0KLQotdWludDggZ2V0RGVidWdDaGFyKHZvaWQpCi17Ci0gICAgICAgIGlmICghcmVtb3RlRGVidWdJbml0aWFsaXplZCkgewotICAgICAgICAgICAgICAgIHJlbW90ZURlYnVnSW5pdGlhbGl6ZWQgPSAxOwotICAgICAgICAgICAgICAgIGRlYnVnSW5pdChCQVVEX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQxNjU1MF9EQVRBXzhCSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVBUlQxNjU1MF9QQVJJVFlfTk9ORSwgVUFSVDE2NTUwX1NUT1BfMUJJVCk7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoKFVBUlQxNjU1MF9SRUFEKE9GU19MSU5FX1NUQVRVUykgJiAweDEpID09IDApOwotICAgICAgICByZXR1cm4gVUFSVDE2NTUwX1JFQUQoT0ZTX1JDVl9CVUZGRVIpOwotfQotCi0KLWludCBwdXREZWJ1Z0NoYXIodWludDggYnl0ZSkKLXsKLSAgICAgICAgaWYgKCFyZW1vdGVEZWJ1Z0luaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3RlRGVidWdJbml0aWFsaXplZCA9IDE7Ci0gICAgICAgICAgICAgICAgZGVidWdJbml0KEJBVURfREVGQVVMVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDE2NTUwX0RBVEFfOEJJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUFSVDE2NTUwX1BBUklUWV9OT05FLCBVQVJUMTY1NTBfU1RPUF8xQklUKTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICgoVUFSVDE2NTUwX1JFQUQoT0ZTX0xJTkVfU1RBVFVTKSAmIDB4MjApID09IDApOwotICAgICAgICBVQVJUMTY1NTBfV1JJVEUoT0ZTX1NFTkRfQlVGRkVSLCBieXRlKTsKLSAgICAgICAgcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2lycS5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ni9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU4M2ExZi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9taXBzL2RkYjU0NzYvaXJxLmMgLS0gTkVDIEREQiBWcmMtNTQ3NiBpbnRlcnJ1cHQgcm91dGluZXMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCi0gKgotICogUmUtd3JpdGUgdGhlIHdob2xlIHRoaW5nIHRvIHVzZSBuZXcgaXJxLmMgZmlsZS4KLSAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogSnVuIFN1biwganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0KLSNkZWZpbmUgTTE1NDNfUE5QX0NPTkZJRwkweDAzZjAJLyogUG5QIENvbmZpZyBQb3J0ICovCi0jZGVmaW5lIE0xNTQzX1BOUF9JTkRFWAkJMHgwM2YwCS8qIFBuUCBJbmRleCBQb3J0ICovCi0jZGVmaW5lIE0xNTQzX1BOUF9EQVRBCQkweDAzZjEJLyogUG5QIERhdGEgUG9ydCAqLwotCi0jZGVmaW5lIE0xNTQzX1BOUF9BTFRfQ09ORklHCTB4MDM3MAkvKiBBbHRlcm5hdGl2ZSBQblAgQ29uZmlnIFBvcnQgKi8KLSNkZWZpbmUgTTE1NDNfUE5QX0FMVF9JTkRFWAkweDAzNzAJLyogQWx0ZXJuYXRpdmUgUG5QIEluZGV4IFBvcnQgKi8KLSNkZWZpbmUgTTE1NDNfUE5QX0FMVF9EQVRBCTB4MDM3MQkvKiBBbHRlcm5hdGl2ZSBQblAgRGF0YSBQb3J0ICovCi0KLSNkZWZpbmUgTTE1NDNfSU5UMV9NQVNURVJfQ1RSTAkweDAwMjAJLyogSU5UXzEgKG1hc3RlcikgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBNMTU0M19JTlQxX01BU1RFUl9NQVNLCTB4MDAyMQkvKiBJTlRfMSAobWFzdGVyKSBNYXNrIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgTTE1NDNfSU5UMV9TTEFWRV9DVFJMCTB4MDBhMAkvKiBJTlRfMSAoc2xhdmUpIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTTE1NDNfSU5UMV9TTEFWRV9NQVNLCTB4MDBhMQkvKiBJTlRfMSAoc2xhdmUpIE1hc2sgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBNMTU0M19JTlQxX01BU1RFUl9FTENSCTB4MDRkMAkvKiBJTlRfMSAobWFzdGVyKSBFZGdlL0xldmVsIENvbnRyb2wgKi8KLSNkZWZpbmUgTTE1NDNfSU5UMV9TTEFWRV9FTENSCTB4MDRkMQkvKiBJTlRfMSAoc2xhdmUpIEVkZ2UvTGV2ZWwgQ29udHJvbCAqLwotCi1zdGF0aWMgdm9pZCBtMTU0M19pcnFfc2V0dXAodm9pZCkKLXsKLQkvKgotCSAqICBUaGUgQUxJIE0xNTQzIGhhcyAxMyBpbnRlcnJ1cHQgaW5wdXRzLCBJUlExLi5JUlExMy4gIE5vdCBhbGwKLQkgKiAgdGhlIHBvc3NpYmxlIElPIHNvdXJjZXMgaW4gdGhlIE0xNTQzIGFyZSBpbiB1c2UgYnkgdXMuICBXZSB3aWxsCi0JICogIHVzZSB0aGUgZm9sbG93aW5nIG1hcHBpbmc6Ci0JICoKLQkgKiAgICAgIElSUTEgIC0ga2V5Ym9hcmQgKGRlZmF1bHQgc2V0IGJ5IE0xNTQzKQotCSAqICAgICAgSVJRMyAgLSByZXNlcnZlZCBmb3IgVUFSVCBCIChkZWZhdWx0IHNldCBieSBNMTU0MykgKG5vdGUgdGhhdAotCSAqICAgICAgICAgICAgICB0aGUgc2NoZW1hdGljcyBmb3IgdGhlIEREQiBWcmMtNTQ3NiBib2FyZCBzZWVtIHRvCi0JICogICAgICAgICAgICAgIGluZGljYXRlIHRoYXQgSVJRMyBpcyBjb25uZWN0ZWQgdG8gdGhlIERTMTM4NgotCSAqICAgICAgICAgICAgICB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgb3V0cHV0IHNvIHdlIG1pZ2h0IGhhdmUKLQkgKiAgICAgICAgICAgICAgYSBjb25mbGljdCkKLQkgKiAgICAgIElSUTQgIC0gcmVzZXJ2ZWQgZm9yIFVBUlQgQSAoZGVmYXVsdCBzZXQgYnkgTTE1NDMpCi0JICogICAgICBJUlE1ICAtIHBhcmFsbGVsIChkZWZhdWx0IHNldCBieSBNMTU0MykKLQkgKiAgICAgIElSUTggIC0gRFMxMzg2IHRpbWUgb2YgZGF5IChSVEMpIGludGVycnVwdAotCSAqICAgICAgSVJROSAgLSBVU0IgKGhhcmR3aXJlZCBpbiBkZGJfc2V0dXApCi0JICogICAgICBJUlExMCAtIFBNVSAoaGFyZHdpcmVkIGluIGRkYl9zZXR1cCkKLQkgKiAgICAgIElSUTEyIC0gbW91c2UKLQkgKiAgICAgIElSUTE0LDE1IC0gSURFIGNvbnRyb2xsZXIgKG5lZWQgdG8gYmUgY29uZmlybWVkLCBqc3VuKQotCSAqLwotCi0JLyoKLQkgKiAgQXNzaW5nIG1vdXNlIGludGVycnVwdCB0byBJUlExMgotCSAqLwotCi0JLyogRW50ZXIgY29uZmlndXJhdGlvbiBtb2RlICovCi0Jb3V0YigweDUxLCBNMTU0M19QTlBfQ09ORklHKTsKLQlvdXRiKDB4MjMsIE0xNTQzX1BOUF9DT05GSUcpOwotCi0JLyogU2VsZWN0IGxvZ2ljYWwgZGV2aWNlIDcgKEtleWJvYXJkKSAqLwotCW91dGIoMHgwNywgTTE1NDNfUE5QX0lOREVYKTsKLQlvdXRiKDB4MDcsIE0xNTQzX1BOUF9EQVRBKTsKLQotCS8qIFNlbGVjdCBJUlExMiAqLwotCW91dGIoMHg3MiwgTTE1NDNfUE5QX0lOREVYKTsKLQlvdXRiKDB4MGMsIE0xNTQzX1BOUF9EQVRBKTsKLQotCS8qIExlYXZlIGNvbmZpZ3JhdGlvbiBtb2RlICovCi0Jb3V0YigweGJiLCBNMTU0M19QTlBfQ09ORklHKTsKLX0KLQotc3RhdGljIHZvaWQgbmlsZTRfaXJxX3NldHVwKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBNYXAgYWxsIGludGVycnVwdHMgdG8gQ1BVIGludCAjMCAoSVAyKSAqLwotCW5pbGU0X21hcF9pcnFfYWxsKDApOwotCi0JLyogUENJIElOVEEjLUUjIG11c3QgYmUgbGV2ZWwgdHJpZ2dlcmVkICovCi0JbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZSgwLCAxKTsKLQluaWxlNF9zZXRfcGNpX2lycV9sZXZlbF9vcl9lZGdlKDEsIDEpOwotCW5pbGU0X3NldF9wY2lfaXJxX2xldmVsX29yX2VkZ2UoMiwgMSk7Ci0JbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZSgzLCAxKTsKLQotCS8qIFBDSSBJTlRBIywgQiMsIEQjIG11c3QgYmUgYWN0aXZlIGxvdywgSU5UQyMgbXVzdCBiZSBhY3RpdmUgaGlnaCAqLwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDAsIDApOwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDEsIDApOwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDIsIDEpOwotCW5pbGU0X3NldF9wY2lfaXJxX3BvbGFyaXR5KDMsIDApOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCW5pbGU0X2NsZWFyX2lycShpKTsKLQotCS8qIEVuYWJsZSBDUFUgaW50ICMwICovCi0JbmlsZTRfZW5hYmxlX2lycV9vdXRwdXQoMCk7Ci0KLQkvKiBtZW1vcnkgcmVzb3VyY2UgYWNxdWlyZSBpbiBkZGJfc2V0dXAgKi8KLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Nhc2NhZGUgPSB7IG5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUiLCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfZXJyb3IgPSB7IG5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImVycm9yIiwgTlVMTCwgTlVMTCB9OwotCi1leHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICppcnFhY3Rpb24pOwotZXh0ZXJuIHZvaWQgbWlwc19jcHVfaXJxX2luaXQodTMyIGlycV9iYXNlKTsKLWV4dGVybiB2b2lkIHZyYzU0NzZfaXJxX2luaXQodTMyIGlycV9iYXNlKTsKLQotZXh0ZXJuIHZvaWQgdnJjNTQ3Nl9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi1hc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOwotCi0JaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQNykKLQkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDcsIHJlZ3MpOwotCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMikKLQkJdnJjNTQ3Nl9pcnFfZGlzcGF0Y2gocmVncyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAzKQotCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgMywgcmVncyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA0KQotCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNCwgcmVncyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA1KQotCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNSwgcmVncyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVA2KQotCQlkb19JUlEoQ1BVX0lSUV9CQVNFICsgNiwgcmVncyk7Ci0JZWxzZSBpZiAocGVuZGluZyAmIFNUQVRVU0ZfSVAwKQotCQlkb19JUlEoQ1BVX0lSUV9CQVNFLCByZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDEpCi0JCWRvX0lSUShDUFVfSVJRX0JBU0UgKyAxLCByZWdzKTsKLQotCXZyYzU0NzZfaXJxX2Rpc3BhdGNoKHJlZ3MpOwotfQotCi12b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCi17Ci0JLyogaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gKi8KLQluaWxlNF9pcnFfc2V0dXAoKTsKLQltMTU0M19pcnFfc2V0dXAoKTsKLQotCS8qIGNvbnRyb2xsZXIgc2V0dXAgKi8KLQlpbml0X2k4MjU5X2lycXMoKTsKLQl2cmM1NDc2X2lycV9pbml0KFZSQzU0NzZfSVJRX0JBU0UpOwotCW1pcHNfY3B1X2lycV9pbml0KENQVV9JUlFfQkFTRSk7Ci0KLQkvKiBzZXR1cCBjYXNjYWRlIGludGVycnVwdHMgKi8KLQlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSTgyNTlfQ0FTQ0FERSwgJmlycV9jYXNjYWRlKTsKLQlzZXR1cF9pcnEoQ1BVX0lSUV9CQVNFICsgQ1BVX1ZSQzU0NzZfQ0FTQ0FERSwgJmlycV9jYXNjYWRlKTsKLQotCS8qIHNldHVwIGVycm9yIGludGVycnVwdHMgZm9yIGRlYnVnZ2luZyAqLwotCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfQ1BDRSwgJmlycV9lcnJvcik7Ci0Jc2V0dXBfaXJxKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9DTlRELCAmaXJxX2Vycm9yKTsKLQlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX01DRSwgJmlycV9lcnJvcik7Ci0Jc2V0dXBfaXJxKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9MQlJULCAmaXJxX2Vycm9yKTsKLQlzZXR1cF9pcnEoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX1BDSVMsICZpcnFfZXJyb3IpOwotCXNldHVwX2lycShWUkM1NDc2X0lSUV9CQVNFICsgVlJDNTQ3Nl9JUlFfUENJLCAmaXJxX2Vycm9yKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvbmlsZTRfcGljLmMgYi9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L25pbGU0X3BpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTMwY2VlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvbmlsZTRfcGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSAqICBhcmNoL21pcHMvZGRiNTQ3Ni9uaWxlNC5jIC0tCi0gKiAgCWxvdy1sZXZlbCBQSUMgY29kZSBmb3IgTkVDIFZyYy01NDc2IChOaWxlIDQpCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QHNvbnljb20uY29tPgotICogICAgICAgICAgICAgICAgICAgICBTb255IFNvZnR3YXJlIERldmVsb3BtZW50IENlbnRlciBFdXJvcGUgKFNEQ0UpLCBCcnVzc2VscwotICoKLSAqICBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqICBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi0KLS8qCi0gKiAgSW50ZXJydXB0IFByb2dyYW1taW5nCi0gKi8KLXZvaWQgbmlsZTRfbWFwX2lycShpbnQgbmlsZTRfaXJxLCBpbnQgY3B1X2lycSkKLXsKLQl1MzIgb2Zmc2V0LCB0OwotCi0Jb2Zmc2V0ID0gRERCX0lOVENUUkw7Ci0JaWYgKG5pbGU0X2lycSA+PSA4KSB7Ci0JCW9mZnNldCArPSA0OwotCQluaWxlNF9pcnEgLT0gODsKLQl9Ci0JdCA9IGRkYl9pbjMyKG9mZnNldCk7Ci0JdCAmPSB+KDcgPDwgKG5pbGU0X2lycSAqIDQpKTsKLQl0IHw9IGNwdV9pcnEgPDwgKG5pbGU0X2lycSAqIDQpOwotCWRkYl9vdXQzMihvZmZzZXQsIHQpOwotfQotCi12b2lkIG5pbGU0X21hcF9pcnFfYWxsKGludCBjcHVfaXJxKQotewotCXUzMiBhbGwsIHQ7Ci0KLQlhbGwgPSBjcHVfaXJxOwotCWFsbCB8PSBhbGwgPDwgNDsKLQlhbGwgfD0gYWxsIDw8IDg7Ci0JYWxsIHw9IGFsbCA8PCAxNjsKLQl0ID0gZGRiX2luMzIoRERCX0lOVENUUkwpOwotCXQgJj0gMHg4ODg4ODg4ODsKLQl0IHw9IGFsbDsKLQlkZGJfb3V0MzIoRERCX0lOVENUUkwsIHQpOwotCXQgPSBkZGJfaW4zMihEREJfSU5UQ1RSTCArIDQpOwotCXQgJj0gMHg4ODg4ODg4ODsKLQl0IHw9IGFsbDsKLQlkZGJfb3V0MzIoRERCX0lOVENUUkwgKyA0LCB0KTsKLX0KLQotdm9pZCBuaWxlNF9lbmFibGVfaXJxKGludCBuaWxlNF9pcnEpCi17Ci0JdTMyIG9mZnNldCwgdDsKLQotCW9mZnNldCA9IEREQl9JTlRDVFJMOwotCWlmIChuaWxlNF9pcnEgPj0gOCkgewotCQlvZmZzZXQgKz0gNDsKLQkJbmlsZTRfaXJxIC09IDg7Ci0JfQotCXQgPSBkZGJfaW4zMihvZmZzZXQpOwotCXQgfD0gOCA8PCAobmlsZTRfaXJxICogNCk7Ci0JZGRiX291dDMyKG9mZnNldCwgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfZGlzYWJsZV9pcnEoaW50IG5pbGU0X2lycSkKLXsKLQl1MzIgb2Zmc2V0LCB0OwotCi0Jb2Zmc2V0ID0gRERCX0lOVENUUkw7Ci0JaWYgKG5pbGU0X2lycSA+PSA4KSB7Ci0JCW9mZnNldCArPSA0OwotCQluaWxlNF9pcnEgLT0gODsKLQl9Ci0JdCA9IGRkYl9pbjMyKG9mZnNldCk7Ci0JdCAmPSB+KDggPDwgKG5pbGU0X2lycSAqIDQpKTsKLQlkZGJfb3V0MzIob2Zmc2V0LCB0KTsKLX0KLQotdm9pZCBuaWxlNF9kaXNhYmxlX2lycV9hbGwodm9pZCkKLXsKLQlkZGJfb3V0MzIoRERCX0lOVENUUkwsIDApOwotCWRkYl9vdXQzMihEREJfSU5UQ1RSTCArIDQsIDApOwotfQotCi11MTYgbmlsZTRfZ2V0X2lycV9zdGF0KGludCBjcHVfaXJxKQotewotCXJldHVybiBkZGJfaW4xNihEREJfSU5UU1RBVDAgKyBjcHVfaXJxICogMik7Ci19Ci0KLXZvaWQgbmlsZTRfZW5hYmxlX2lycV9vdXRwdXQoaW50IGNwdV9pcnEpCi17Ci0JdTMyIHQ7Ci0KLQl0ID0gZGRiX2luMzIoRERCX0lOVFNUQVQxICsgNCk7Ci0JdCB8PSAxIDw8ICgxNiArIGNwdV9pcnEpOwotCWRkYl9vdXQzMihEREJfSU5UU1RBVDEsIHQpOwotfQotCi12b2lkIG5pbGU0X2Rpc2FibGVfaXJxX291dHB1dChpbnQgY3B1X2lycSkKLXsKLQl1MzIgdDsKLQotCXQgPSBkZGJfaW4zMihEREJfSU5UU1RBVDEgKyA0KTsKLQl0ICY9IH4oMSA8PCAoMTYgKyBjcHVfaXJxKSk7Ci0JZGRiX291dDMyKEREQl9JTlRTVEFUMSwgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfc2V0X3BjaV9pcnFfcG9sYXJpdHkoaW50IHBjaV9pcnEsIGludCBoaWdoKQotewotCXUzMiB0OwotCi0JdCA9IGRkYl9pbjMyKEREQl9JTlRQUEVTKTsKLQlpZiAoaGlnaCkKLQkJdCAmPSB+KDEgPDwgKHBjaV9pcnEgKiAyKSk7Ci0JZWxzZQotCQl0IHw9IDEgPDwgKHBjaV9pcnEgKiAyKTsKLQlkZGJfb3V0MzIoRERCX0lOVFBQRVMsIHQpOwotfQotCi12b2lkIG5pbGU0X3NldF9wY2lfaXJxX2xldmVsX29yX2VkZ2UoaW50IHBjaV9pcnEsIGludCBsZXZlbCkKLXsKLQl1MzIgdDsKLQotCXQgPSBkZGJfaW4zMihEREJfSU5UUFBFUyk7Ci0JaWYgKGxldmVsKQotCQl0IHw9IDIgPDwgKHBjaV9pcnEgKiAyKTsKLQllbHNlCi0JCXQgJj0gfigyIDw8IChwY2lfaXJxICogMikpOwotCWRkYl9vdXQzMihEREJfSU5UUFBFUywgdCk7Ci19Ci0KLXZvaWQgbmlsZTRfY2xlYXJfaXJxKGludCBuaWxlNF9pcnEpCi17Ci0JZGRiX291dDMyKEREQl9JTlRDTFIsIDEgPDwgbmlsZTRfaXJxKTsKLX0KLQotdm9pZCBuaWxlNF9jbGVhcl9pcnFfbWFzayh1MzIgbWFzaykKLXsKLQlkZGJfb3V0MzIoRERCX0lOVENMUiwgbWFzayk7Ci19Ci0KLXU4IG5pbGU0X2k4MjU5X2lhY2sodm9pZCkKLXsKLQl1OCBpcnE7Ci0JdTMyIHJlZzsKLQotCS8qIFNldCB3aW5kb3cgMCBmb3IgaW50ZXJydXB0IGFja25vd2xlZGdlICovCi0JcmVnID0gZGRiX2luMzIoRERCX1BDSUlOSVQwKTsKLQotCWRkYl9zZXRfcG1yKEREQl9QQ0lJTklUMCwgRERCX1BDSUNNRF9JQUNLLCAwLCBEREJfUENJX0FDQ0VTU18zMik7Ci0JaXJxID0gKih2b2xhdGlsZSB1OCAqKSBLU0VHMUFERFIoRERCX1BDSV9JQUNLX0JBU0UpOwotCS8qIHJlc3RvcmUgd2luZG93IDAgZm9yIFBDSSBJL08gc3BhY2UgKi8KLQkvLyBkZGJfc2V0X3BtcihEREJfUENJSU5JVDAsIEREQl9QQ0lDTURfSU8sIDAsIEREQl9QQ0lfQUNDRVNTXzMyKTsKLQlkZGJfb3V0MzIoRERCX1BDSUlOSVQwLCByZWcpOwotCi0JLyogaTgyNjkuYyBzZXQgdGhlIGJhc2UgdmVjdG9yIHRvIGJlIDB4MCAqLwotCXJldHVybiBpcnEgKyBJODI1OV9JUlFfQkFTRTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1JVTlRJTUVfREVCVUcpCi12b2lkIG5pbGU0X2R1bXBfaXJxX3N0YXR1cyh2b2lkKQotewotCXByaW50ayhLRVJOX0RFQlVHICIKLQkgICAgICAgQ1BVU1RBVCA9ICVwOiVwXG4iLCAodm9pZCAqKSBkZGJfaW4zMihEREJfQ1BVU1RBVCArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfQ1BVU1RBVCkpOwotCXByaW50ayhLRVJOX0RFQlVHICIKLQkgICAgICAgSU5UQ1RSTCA9ICVwOiVwXG4iLCAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UQ1RSTCArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UQ1RSTCkpOwotCXByaW50ayhLRVJOX0RFQlVHCi0JICAgICAgICJJTlRTVEFUMCA9ICVwOiVwXG4iLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UU1RBVDAgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVFNUQVQwKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcKLQkgICAgICAgIklOVFNUQVQxID0gJXA6JXBcbiIsCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRTVEFUMSArIDQpLAotCSAgICAgICAodm9pZCAqKSBkZGJfaW4zMihEREJfSU5UU1RBVDEpKTsKLQlwcmludGsoS0VSTl9ERUJVRwotCSAgICAgICAiSU5UQ0xSID0gJXA6JXBcbiIsICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRDTFIgKyA0KSwKLQkgICAgICAgKHZvaWQgKikgZGRiX2luMzIoRERCX0lOVENMUikpOwotCXByaW50ayhLRVJOX0RFQlVHCi0JICAgICAgICJJTlRQUEVTID0gJXA6JXBcbiIsICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRQUEVTICsgNCksCi0JICAgICAgICh2b2lkICopIGRkYl9pbjMyKEREQl9JTlRQUEVTKSk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvc2V0dXAuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwMmFkZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLyoKLSAqICBhcmNoL21pcHMvZGRiNTQ3Ni9zZXR1cC5jIC0tIE5FQyBEREIgVnJjLTU0NzYgc2V0dXAgcm91dGluZXMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgIFNvbnkgU29mdHdhcmUgRGV2ZWxvcG1lbnQgQ2VudGVyIEV1cm9wZSAoU0RDRSksIEJydXNzZWxzCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2JkX2xsLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgva2Rldl90Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2JjYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVib290Lmg+Ci0jaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KLSNpbmNsdWRlIDxhc20vdHJhcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLQotLy8gI2RlZmluZSBVU0VfQ1BVX0NPVU5URVJfVElNRVIJLyogd2hldGhlciB3ZSB1c2UgY3B1IGNvdW50ZXIgKi8KLQotI2lmZGVmIFVTRV9DUFVfQ09VTlRFUl9USU1FUgotCi0jZGVmaW5lIENQVV9DT1VOVEVSX0ZSRVFVRU5DWSAgICAgICAgICAgODMwMDAwMDAKLSNlbHNlCi0vKiBvdGhlcndpc2Ugd2UgdXNlIGdlbmVyYWwgcHVycG9zZSB0aW1lciAqLwotI2RlZmluZSBUSU1FUl9GUkVRVUVOQ1kJCQk4MzAwMDAwMAotI2RlZmluZSBUSU1FUl9CQVNFCQkJRERCX1QyQ1RSTAotI2RlZmluZSBUSU1FUl9JUlEJCQkoVlJDNTQ3Nl9JUlFfQkFTRSArIFZSQzU0NzZfSVJRX0dQVCkKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCAoKmJhY2tfdG9fcHJvbSkgKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKSAweGJmYzAwMDAwOwotCi1zdGF0aWMgdm9pZCBkZGJfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCi17Ci0JdTMyIHQ7Ci0KLQkvKiBQQ0kgY29sZCByZXNldCAqLwotCXQgPSBkZGJfaW4zMihEREJfUENJQ1RSTCArIDQpOwotCXQgfD0gMHg0MDAwMDAwMDsKLQlkZGJfb3V0MzIoRERCX1BDSUNUUkwgKyA0LCB0KTsKLQkvKiBDUFUgY29sZCByZXNldCAqLwotCXQgPSBkZGJfaW4zMihEREJfQ1BVU1RBVCk7Ci0JdCB8PSAxOwotCWRkYl9vdXQzMihEREJfQ1BVU1RBVCwgdCk7Ci0JLyogQ2FsbCB0aGUgUFJPTSAqLwotCWJhY2tfdG9fcHJvbSgpOwotfQotCi1zdGF0aWMgdm9pZCBkZGJfbWFjaGluZV9oYWx0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJEREIgVnJjLTU0NzYgaGFsdGVkLlxuIik7Ci0Jd2hpbGUgKDEpOwotfQotCi1zdGF0aWMgdm9pZCBkZGJfbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkREQiBWcmMtNTQ3NiBoYWx0ZWQuIFBsZWFzZSB0dXJuIG9mZiB0aGUgcG93ZXIuXG4iKTsKLQl3aGlsZSAoMSk7Ci19Ci0KLWV4dGVybiB2b2lkIHJ0Y19kczEzODZfaW5pdCh1bnNpZ25lZCBsb25nIGJhc2UpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZGRiX3RpbWVfaW5pdCh2b2lkKQotewotI2lmIGRlZmluZWQoVVNFX0NQVV9DT1VOVEVSX1RJTUVSKQotCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IENQVV9DT1VOVEVSX0ZSRVFVRU5DWTsKLSNlbmRpZgotCi0JLyogd2UgaGF2ZSBkczEzOTYgUlRDIGNoaXAgKi8KLQlydGNfZHMxMzg2X2luaXQoS1NFRzFBRERSKEREQl9QQ0lfTUVNX0JBU0UpKTsKLX0KLQotCi1leHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICppcnFhY3Rpb24pOwotc3RhdGljIHZvaWQgX19pbml0IGRkYl90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCi17Ci0jaWYgZGVmaW5lZChVU0VfQ1BVX0NPVU5URVJfVElNRVIpCi0KLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0KLQkvKiB3ZSBhcmUgdXNpbmcgdGhlIGNwdSBjb3VudGVyIGZvciB0aW1lciBpbnRlcnJ1cHRzICovCi0Jc2V0dXBfaXJxKENQVV9JUlFfQkFTRSArIDcsIGlycSk7Ci0KLQkvKiB0byBnZW5lcmF0ZSB0aGUgZmlyc3QgdGltZXIgaW50ZXJydXB0ICovCi0JY291bnQgPSByZWFkX2MwX2NvdW50KCk7Ci0Jd3JpdGVfYzBfY29tcGFyZShjb3VudCArIDEwMDApOwotCi0jZWxzZQotCi0JZGRiX291dDMyKFRJTUVSX0JBU0UsIFRJTUVSX0ZSRVFVRU5DWS9IWik7Ci0JZGRiX291dDMyKFRJTUVSX0JBU0UrNCwgMHgxKTsJLyogZW5hYmxlIHRpbWVyICovCi0Jc2V0dXBfaXJxKFRJTUVSX0lSUSwgaXJxKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgc3RydWN0IHsKLQlzdHJ1Y3QgcmVzb3VyY2UgZG1hMTsKLQlzdHJ1Y3QgcmVzb3VyY2UgdGltZXI7Ci0Jc3RydWN0IHJlc291cmNlIHJ0YzsKLQlzdHJ1Y3QgcmVzb3VyY2UgZG1hX3BhZ2VfcmVnOwotCXN0cnVjdCByZXNvdXJjZSBkbWEyOwotfSBkZGI1NDc2X2lvcG9ydCA9IHsKLQl7Ci0JImRtYTEiLCAweDAwLCAweDFmLCBJT1JFU09VUkNFX0JVU1l9LCB7Ci0JInRpbWVyIiwgMHg0MCwgMHg1ZiwgSU9SRVNPVVJDRV9CVVNZfSwgewotCSJydGMiLCAweDcwLCAweDdmLCBJT1JFU09VUkNFX0JVU1l9LCB7Ci0JImRtYSBwYWdlIHJlZyIsIDB4ODAsIDB4OGYsIElPUkVTT1VSQ0VfQlVTWX0sIHsKLQkiZG1hMiIsIDB4YzAsIDB4ZGYsIElPUkVTT1VSQ0VfQlVTWX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCByZXNvdXJjZSBuaWxlNDsKLX0gZGRiNTQ3Nl9pb21lbSA9IHsKLQl7ICJOaWxlIDQiLCBEREJfQkFTRSwgRERCX0JBU0UgKyBEREJfU0laRSAtIDEsIElPUkVTT1VSQ0VfQlVTWX0KLX07Ci0KLQotc3RhdGljIHZvaWQgZGRiNTQ3Nl9ib2FyZF9pbml0KHZvaWQpOwotCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCi17Ci0Jc2V0X2lvX3BvcnRfYmFzZShLU0VHMUFERFIoRERCX1BDSV9JT19CQVNFKSk7Ci0KLQlib2FyZF90aW1lX2luaXQgPSBkZGJfdGltZV9pbml0OwotCWJvYXJkX3RpbWVyX3NldHVwID0gZGRiX3RpbWVyX3NldHVwOwotCi0JX21hY2hpbmVfcmVzdGFydCA9IGRkYl9tYWNoaW5lX3Jlc3RhcnQ7Ci0JX21hY2hpbmVfaGFsdCA9IGRkYl9tYWNoaW5lX2hhbHQ7Ci0JcG1fcG93ZXJfb2ZmID0gZGRiX21hY2hpbmVfcG93ZXJfb2ZmOwotCi0JLyogcmVxdWVzdCBpbyBwb3J0L21lbSByZXNvdXJjZXMgICovCi0JaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJmRkYjU0NzZfaW9wb3J0LmRtYTEpIHx8Ci0JICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJmRkYjU0NzZfaW9wb3J0LnRpbWVyKSB8fAotCSAgICByZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZkZGI1NDc2X2lvcG9ydC5ydGMpIHx8Ci0JICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwKLQkJCSAgICAgJmRkYjU0NzZfaW9wb3J0LmRtYV9wYWdlX3JlZykKLQkgICAgfHwgcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmZGRiNTQ3Nl9pb3BvcnQuZG1hMikKLQkgICAgfHwgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkZGI1NDc2X2lvbWVtLm5pbGU0KSkgewotCQlwcmludGsKLQkJICAgICgiZGRiX3NldHVwIC0gcmVxdWVzdGluZyBvbyBwb3J0IHJlc291cmNlcyBmYWlsZWQuXG4iKTsKLQkJZm9yICg7Oyk7Ci0JfQotCi0JLyogUmVib290IG9uIHBhbmljICovCi0JcGFuaWNfdGltZW91dCA9IDE4MDsKLQotCS8qIFtqc3VuXSB3ZSBuZWVkIHRvIHNldCBCQVIwIHNvIHRoYXQgU0RSQU0gMCBhcHBlYXJzIGF0IDB4MCBpbiBQQ0kgKi8KLQkvKiAqKGxvbmcqKTB4YmZhMDAyMTggPSAweDg7ICovCi0KLQkvKiBib2FyZCBpbml0aWFsaXphdGlvbiBzdHVmZiAqLwotCWRkYjU0NzZfYm9hcmRfaW5pdCgpOwotfQotCi0vKgotICogV2UgZG9uJ3QgdHJ1c3QgYmlvcy4gIFdlIGVzc2VudGlhbGx5IGRvZXMgaGFyZHdhcmUgcmUtaW5pdGlhbGl6YXRpb24KLSAqIGFzIGNvbXBsZXRlIGFzIHBvc3NpYmxlLCBhcyBmYXIgYXMgd2Uga25vdyB3ZSBjYW4gc2FmZWx5IGRvLgotICovCi1zdGF0aWMgdm9pZCBkZGI1NDc2X2JvYXJkX2luaXQodm9pZCkKLXsKLQkvKiAtLS0tLS0tLS0tLSBzZXR1cCBQREFScyAtLS0tLS0tLS0tLS0gKi8KLQkvKiBjaGVjayBTRFJBTTAsIHdoZXRoZXIgd2UgYXJlIG9uIE1FTSBidXMgZG9lcyBub3QgbWF0dGVyICovCi0JZGJfYXNzZXJ0KChkZGJfaW4zMihEREJfU0RSQU0wKSAmIDB4ZmZmZmZmZWYpID09Ci0JCSAgZGRiX2NhbGNfcGRhcihEREJfU0RSQU1fQkFTRSwgRERCX1NEUkFNX1NJWkUsIDMyLCAwLCAxKSk7Ci0KLQkvKiBTRFJBTTEgc2hvdWxkIGJlIHR1cm5lZCBvZmYuICBXaGF0IGlzIHRoaXMgZm9yIGFueXdheSA/ICovCi0JZGJfYXNzZXJ0KCAoZGRiX2luMzIoRERCX1NEUkFNMSkgJiAweGYpID09IDApOwotCi0JLyogZmxhc2ggMSYyLCBEREIgc3RhdHVzLCBEREIgY29udHJvbCAqLwotCWRkYl9zZXRfcGRhcihEREJfRENTMiwgRERCX0RDUzJfQkFTRSwgRERCX0RDUzJfU0laRSwgMTYsIDAsIDApOwotCWRkYl9zZXRfcGRhcihEREJfRENTMywgRERCX0RDUzNfQkFTRSwgRERCX0RDUzNfU0laRSwgMTYsIDAsIDApOwotCWRkYl9zZXRfcGRhcihEREJfRENTNCwgRERCX0RDUzRfQkFTRSwgRERCX0RDUzRfU0laRSwgOCwgMCwgMCk7Ci0JZGRiX3NldF9wZGFyKEREQl9EQ1M1LCBEREJfRENTNV9CQVNFLCBEREJfRENTNV9TSVpFLCA4LCAwLCAwKTsKLQotCS8qIHNodXQgb2ZmIG90aGVyIHBkYXIgc28gdGhleSBkb24ndCBhY2NpZGVudGFsbHkgZ2V0IGludG8gdGhlIHdheSAqLwotCWRkYl9zZXRfcGRhcihEREJfRENTNiwgMHhmZmZmZmZmZiwgMCwgMzIsIDAsIDApOwotCWRkYl9zZXRfcGRhcihEREJfRENTNywgMHhmZmZmZmZmZiwgMCwgMzIsIDAsIDApOwotCWRkYl9zZXRfcGRhcihEREJfRENTOCwgMHhmZmZmZmZmZiwgMCwgMzIsIDAsIDApOwotCi0JLyogdmVyaWZ5IFZSQzU0NzcgYmFzZSBhZGRyICovCi0JLyogZG9uJ3QgY2FyZSBhYm91dCBzb21lIGRldGFpbHMgKi8KLQlkYl9hc3NlcnQoKGRkYl9pbjMyKEREQl9JTlRDUykgJiAweGZmZmZmZjBmKSA9PQotCQkgIGRkYl9jYWxjX3BkYXIoRERCX0lOVENTX0JBU0UsIEREQl9JTlRDU19TSVpFLCA4LCAwLCAwKSk7Ci0KLQkvKiB2ZXJpZnkgQk9PVCBST00gYWRkciAqLwotCS8qIGRvbid0IGNhcmUgYWJvdXQgc29tZSBkZXRhaWxzICovCi0JZGJfYXNzZXJ0KChkZGJfaW4zMihEREJfQk9PVENTKSAmIDB4ZmZmZmZmMGYpID09Ci0JCSAgZGRiX2NhbGNfcGRhcihEREJfQk9PVENTX0JBU0UsIEREQl9CT09UQ1NfU0laRSwgOCwgMCwgMCkpOwotCi0JLyogc2V0dXAgUENJIHdpbmRvd3MgLSB3aW5kb3cxIGZvciBNRU0vY29uZmlnLCB3aW5kb3cwIGZvciBJTyAqLwotCWRkYl9zZXRfcGRhcihEREJfUENJVzAsIEREQl9QQ0lfSU9fQkFTRSwgRERCX1BDSV9JT19TSVpFLCAzMiwgMCwgMSk7Ci0JZGRiX3NldF9wbXIoRERCX1BDSUlOSVQwLCBEREJfUENJQ01EX0lPLCAwLCBEREJfUENJX0FDQ0VTU18zMik7Ci0KLQlkZGJfc2V0X3BkYXIoRERCX1BDSVcxLCBEREJfUENJX01FTV9CQVNFLCBEREJfUENJX01FTV9TSVpFLCAzMiwgMCwgMSk7Ci0JZGRiX3NldF9wbXIoRERCX1BDSUlOSVQxLCBEREJfUENJQ01EX01FTSwgRERCX1BDSV9NRU1fQkFTRSwgRERCX1BDSV9BQ0NFU1NfMzIpOwotCi0JLyogLS0tLS0tLS0tLS0gc2V0dXAgUERBUnMgLS0tLS0tLS0tLS0tICovCi0JLyogdGhpcyBpcyBwcm9ibGVtYXRpYyAtIGl0IHdpbGwgcmVzZXQgQWxhZGluIHdoaWNoIGNhdXNlIHdlIGxvb3NlCi0JICogc2VyaWFsIHBvcnQsIGFuZCB3ZSBkb24ndCBrbm93IGhvdyB0byBzZXQgdXAgQWxhZGluIGNoaXAgYWdhaW4uCi0JICovCi0JLy8gZGRiX3BjaV9yZXNldF9idXMoKTsKLQotCWRkYl9vdXQzMihEREJfQkFSMCwgMHgwMDAwMDAwOCk7Ci0KLQlkZGJfb3V0MzIoRERCX0JBUkMsIDB4ZmZmZmZmZmYpOwotCWRkYl9vdXQzMihEREJfQkFSQiwgMHhmZmZmZmZmZik7Ci0JZGRiX291dDMyKEREQl9CQVIxLCAweGZmZmZmZmZmKTsKLQlkZGJfb3V0MzIoRERCX0JBUjIsIDB4ZmZmZmZmZmYpOwotCWRkYl9vdXQzMihEREJfQkFSMywgMHhmZmZmZmZmZik7Ci0JZGRiX291dDMyKEREQl9CQVI0LCAweGZmZmZmZmZmKTsKLQlkZGJfb3V0MzIoRERCX0JBUjUsIDB4ZmZmZmZmZmYpOwotCWRkYl9vdXQzMihEREJfQkFSNiwgMHhmZmZmZmZmZik7Ci0JZGRiX291dDMyKEREQl9CQVI3LCAweGZmZmZmZmZmKTsKLQlkZGJfb3V0MzIoRERCX0JBUjgsIDB4ZmZmZmZmZmYpOwotCi0JLyogLS0tLS0tLS0tLS0gc3dpdGNoIFBDSTEgdG8gUENJIENPTkZJRyBzcGFjZSAgLS0tLS0tLS0tLS0tICovCi0JZGRiX3NldF9wZGFyKEREQl9QQ0lXMSwgRERCX1BDSV9DT05GSUdfQkFTRSwgRERCX1BDSV9DT05GSUdfU0laRSwgMzIsIDAsIDEpOwotCWRkYl9zZXRfcG1yKEREQl9QQ0lJTklUMSwgRERCX1BDSUNNRF9DRkcsIDB4MCwgRERCX1BDSV9BQ0NFU1NfMzIpOwotCi0JLyogLS0tLS0gTTE1NDMgUENJIHNldHVwIC0tLS0tLSAqLwotCi0JLyogd2Uga25vdyBNMTU0MyBQQ0ktSVNBIGNvbnRyb2xsZXIgaXMgYXQgYWRkcjoxOCAqLwotCS8qIHh4eHgxMDEwIG1ha2VzIFVTQiBhdCBhZGRyOjEzIGFuZCBQTVUgYXQgYWRkcjoxNCAqLwotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAweGE4MDQwMDcyICY9IDB4ZjA7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIDB4YTgwNDAwNzIgfD0gMHhhOwotCi0JLyogc2V0dXAgVVNCIGludGVycnVwdCB0byBJUlEgOSwgKGJpdCAwOjMgLSAwMDAxKQotCSAqIG5vIElPQ0hSRFkgc2lnbmFsLCAoYml0IDcgLSAxKQotCSAqIE0xNTQzQyAmIE03MTAxIFZJRCBhbmQgU3Vic3lzIERldmljZSBJRCBhcmUgcmVhZC1vbmx5IChiaXQgNiAtIDEpCi0JICogTWFrZSBVU0IgTWFzdGVyIElOVEFKIGxldmVsIHRvIGVkZ2UgY29udmVyc2lvbiAoYml0IDQgLSAxKQotCSAqLwotCSoodW5zaWduZWQgY2hhciAqKSAweGE4MDQwMDc0ID0gMHhkMTsKLQotCS8qIHNldHVwIFBNVShTQ0kgdG8gSVJRIDEwIChiaXQgMDozIC0gMDAxMSkKLQkgKiBTQ0kgcm91dGluZyB0byBJUlEgMTMgZGlzYWJsZWQgKGJpdCA3IC0gMSkKLQkgKiBTQ0kgaW50ZXJydXB0IGxldmVsIHRvIGVkZ2UgY29udmVyc2lvbiBieXBhc3NlZCAoYml0IDQgLSAwKQotCSAqLwotCSoodW5zaWduZWQgY2hhciAqKSAweGE4MDQwMDc2ID0gMHg4MzsKLQotCS8qIHNldHVwIElERSBjb250cm9sbGVyCi0JICogZW5hYmxlIElERSBjb250cm9sbGVyIChiaXQgNiAtIDEpCi0JICogSURFIElEU0VMIHRvIGJlIGFkZHI6MjQgKGJpdCA0OjUgLSAxMSkKLQkgKiBubyBJREUgQVRBIFNlY29uZGFyeSBCdXMgU2lnbmFsIFBhZCBDb250cm9sIChiaXQgMyAtIDApCi0JICogbm8gSURFIEFUQSBQcmltYXJ5IEJ1cyBTaWduYWwgUGFkIENvbnRyb2wgKGJpdCAyIC0gMCkKLQkgKiBwcmltYXJ5IElSUSBpcyAxNCwgc2Vjb25kYXJ5IGlzIDE1IChiaXQgMTowIC0gMDEKLQkgKi8KLQkvLyAqKHVuc2lnbmVkIGNoYXIqKTB4YTgwNDAwNTggPSAweDcxOwotCS8vICoodW5zaWduZWQgY2hhciopMHhhODA0MDA1OCA9IDB4Nzk7Ci0JLy8gKih1bnNpZ25lZCBjaGFyKikweGE4MDQwMDU4ID0gMHg3NDsgICAgICAgICAgICAgIC8vIHVzZSBTSVJRLCBwcmltYXJ5IHRyaS1zdGF0ZQotCSoodW5zaWduZWQgY2hhciAqKSAweGE4MDQwMDU4ID0gMHg3NTsJLy8gcHJpbWFyeSB0cmktc3RhdGUKLQotI2lmIDAKLQkvKiB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgaWYgTTUyMjkgZG9lcyBub3QgdXNlIFNJUlEgKi8KLQkqKHVuc2lnbmVkIGNoYXIgKikgMHhhODA0MDA0NCA9IDB4MGQ7CS8vIHByaW1hcnkgdG8gSVJRIDE0Ci0JKih1bnNpZ25lZCBjaGFyICopIDB4YTgwNDAwNzUgPSAweDBkOwkvLyBzZWNvbmRhcnkgdG8gSVJRIDE0Ci0jZW5kaWYKLQotCS8qIGVuYWJsZSBJREUgaW4gdGhlIE01MjI5IGNvbmZpZyByZWdpc3RlciAweDUwIChiaXQgMCAtIDEpICovCi0JLyogTTUyMjkgSURTRUwgaXMgYWRkcjoyNDsgc2VlIGFib3ZlIHNldHRpbmcgKi8KLQkqKHVuc2lnbmVkIGNoYXIgKikgMHhhOTAwMDA1MCB8PSAweDE7Ci0KLQkvKiBlbmFibGUgYnVzIG1hc3RlciAoYml0IDIpICBhbmQgSU8gZGVjb2RpbmcgIChiaXQgMCkgKi8KLQkqKHVuc2lnbmVkIGNoYXIgKikgMHhhOTAwMDAwNCB8PSAweDU7Ci0KLQkvKiBlbmFibGUgbmF0aXZlLCBjb3BpZWQgZnJvbSBhcmNoL3BwYy9rMmJvb3QvaGVhZC5TICovCi0JLyogVE9ETyAtIG5lZWQgdm9sYXRpbGUsIG5lZWQgdG8gYmUgcG9ydGFibGUgKi8KLQkqKHVuc2lnbmVkIGNoYXIgKikgMHhhOTAwMDAwOSA9IDB4ZmY7Ci0KLQkvKiAtLS0tLSBlbmQgb2YgTTE1NDMgUENJIHNldHVwIC0tLS0tLSAqLwotCi0JLyogLS0tLS0gcmVzZXQgb24tYm9hcmQgZXRoZXIgY2hpcCAgLS0tLS0tICovCi0JKigodm9sYXRpbGUgdTMyICopIDB4YTgwMjAwMDQpIHw9IDE7CS8qIGRlY29kZSBJL08gKi8KLQkqKCh2b2xhdGlsZSB1MzIgKikgMHhhODAyMDAxMCkgPSAwOwkvKiBzZXQgQkFSIGFkZHJlc3MgKi8KLQotCS8qIHNlbmQgcmVzZXQgY29tbWFuZCAqLwotCSooKHZvbGF0aWxlIHUzMiAqKSAweGE2MDAwMDAwKSA9IDE7CS8qIGRvIGEgc29mdCByZXNldCAqLwotCi0JLyogZGlzYWJsZSBldGhlciBjaGlwICovCi0JKigodm9sYXRpbGUgdTMyICopIDB4YTgwMjAwMDQpID0gMDsJLyogZGlzYWJsZSBhbnkgZGVjb2RpbmcgKi8KLQotCS8qIHB1dCBpdCBpbnRvIHNsZWVwICovCi0JKigodm9sYXRpbGUgdTMyICopIDB4YTgwMjAwNDApID0gMHg4MDAwMDAwMDsKLQotCS8qIC0tLS0tIGVuZCBvZiByZXNldCBvbi1ib2FyZCBldGhlciBjaGlwICAtLS0tLS0gKi8KLQotCS8qIC0tLS0tLS0tLS0tIHN3aXRjaCBQQ0kxIGJhY2sgdG8gUENJIE1FTSBzcGFjZSAgLS0tLS0tLS0tLS0tICovCi0JZGRiX3NldF9wZGFyKEREQl9QQ0lXMSwgRERCX1BDSV9NRU1fQkFTRSwgRERCX1BDSV9NRU1fU0laRSwgMzIsIDAsIDEpOwotCWRkYl9zZXRfcG1yKEREQl9QQ0lJTklUMSwgRERCX1BDSUNNRF9NRU0sIEREQl9QQ0lfTUVNX0JBU0UsIEREQl9QQ0lfQUNDRVNTXzMyKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvdnJjNTQ3Nl9pcnEuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzYvdnJjNTQ3Nl9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjNWU3Yi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3ZyYzU0NzZfaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIFRoZSBpcnEgY29udHJvbGxlciBmb3IgdnJjNTQ3Ni4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi1zdGF0aWMgaW50IGlycV9iYXNlOwotCi1zdGF0aWMgdm9pZCB2cmM1NDc2X2lycV9lbmFibGUodWludCBpcnEpCi17Ci0JbmlsZTRfZW5hYmxlX2lycShpcnEgLSBpcnFfYmFzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZyYzU0NzZfaXJxX2Rpc2FibGUodWludCBpcnEpCi17Ci0JbmlsZTRfZGlzYWJsZV9pcnEoaXJxIC0gaXJxX2Jhc2UpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHZyYzU0NzZfaXJxX3N0YXJ0dXAodWludCBpcnEpCi17Ci0JbmlsZTRfZW5hYmxlX2lycShpcnEgLSBpcnFfYmFzZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgdnJjNTQ3Nl9pcnFfc2h1dGRvd24JdnJjNTQ3Nl9pcnFfZGlzYWJsZQotCi1zdGF0aWMgdm9pZCB2cmM1NDc2X2lycV9hY2sodWludCBpcnEpCi17Ci0JbmlsZTRfY2xlYXJfaXJxKGlycSAtIGlycV9iYXNlKTsKLQluaWxlNF9kaXNhYmxlX2lycShpcnEgLSBpcnFfYmFzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZyYzU0NzZfaXJxX2VuZCh1aW50IGlycSkKLXsKLQlpZighKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpCi0JCXZyYzU0NzZfaXJxX2VuYWJsZShpcnEpOwotfQotCi1zdGF0aWMgaHdfaXJxX2NvbnRyb2xsZXIgdnJjNTQ3Nl9pcnFfY29udHJvbGxlciA9IHsKLQkudHlwZW5hbWUgPSAidnJjNTQ3NiIsCi0JLnN0YXJ0dXAgPSB2cmM1NDc2X2lycV9zdGFydHVwLAotCS5zaHV0ZG93biA9IHZyYzU0NzZfaXJxX3NodXRkb3duLAotCS5lbmFibGUgPSB2cmM1NDc2X2lycV9lbmFibGUsCi0JLmRpc2FibGUgPSB2cmM1NDc2X2lycV9kaXNhYmxlLAotCS5hY2sgPSB2cmM1NDc2X2lycV9hY2ssCi0JLmVuZCA9IHZyYzU0NzZfaXJxX2VuZAotfTsKLQotdm9pZCBfX2luaXQKLXZyYzU0NzZfaXJxX2luaXQodTMyIGJhc2UpCi17Ci0JdTMyIGk7Ci0KLQlpcnFfYmFzZSA9IGJhc2U7Ci0JZm9yIChpPSBiYXNlOyBpPCBiYXNlICsgTlVNX1ZSQzU0NzZfSVJROyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOwotCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7Ci0JCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmdnJjNTQ3Nl9pcnFfY29udHJvbGxlcjsKLQl9Ci19Ci0KLQotdm9pZAotdnJjNTQ3Nl9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdTMyIG1hc2s7Ci0JaW50IG5pbGU0X2lycTsKLQotCW1hc2sgPSBuaWxlNF9nZXRfaXJxX3N0YXQoMCk7Ci0KLQkvKiBxdWljayBjaGVjayBmb3IgcG9zc2libGUgdGltZSBpbnRlcnJ1cHQgKi8KLQlpZiAobWFzayAmICgxIDw8IFZSQzU0NzZfSVJRX0dQVCkpIHsKLQkJZG9fSVJRKFZSQzU0NzZfSVJRX0JBU0UgKyBWUkM1NDc2X0lSUV9HUFQsIHJlZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2hlY2sgZm9yIGk4MjU5IGludGVycnVwdHMgKi8KLQlpZiAobWFzayAmICgxIDw8IFZSQzU0NzZfSTgyNTlfQ0FTQ0FERSkpIHsKLQkJaW50IGk4MjU5X2lycSA9IG5pbGU0X2k4MjU5X2lhY2soKTsKLQkJZG9fSVJRKEk4MjU5X0lSUV9CQVNFICsgaTgyNTlfaXJxLCByZWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHJlZ3VsYXIgbmlsZTQgaW50ZXJydXB0cyAod2Ugc2hvdWxkIG5vdCByZWFsbHkgaGF2ZSBhbnkgKi8KLQlmb3IgKG5pbGU0X2lycSA9IDA7IG1hc2s7IG5pbGU0X2lycSsrLCBtYXNrID4+PSAxKSB7Ci0JCWlmIChtYXNrICYgMSkgewotCQkJZG9fSVJRKFZSQzU0NzZfSVJRX0JBU0UgKyBuaWxlNF9pcnEsIHJlZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0Nzcva2dkYl9pby5jIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9rZ2RiX2lvLmMKaW5kZXggMWQxOGQ1OS4uMzg1YmJkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9rZ2RiX2lvLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9rZ2RiX2lvLmMKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAgICAgICAgIFVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwogCi0gICAgICAgIC8qIHNldCB1cCBidWFkIHJhdGUgKi8KKyAgICAgICAgLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogICAgICAgICB7CiAgICAgICAgICAgICAgICAgdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0Nzcvc2V0dXAuYyBiL2FyY2gvbWlwcy9kZGI1eHh4L2RkYjU0Nzcvc2V0dXAuYwppbmRleCAyZjU2NjAzLi45MzE2N2VjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9zZXR1cC5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgZGRiNTQ3N19leHRfY29udHJvbGxlcjsKIGV4dGVybiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgZGRiNTQ3N19pb19jb250cm9sbGVyOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCS8qIGluaXRpYWxpemUgYm9hcmQgLSB3ZSBkb24ndCB0cnVzdCB0aGUgbG9hZGVyICovCiAgICAgICAgIGRkYjU0NzdfYm9hcmRfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9zZXR1cC5jIGIvYXJjaC9taXBzL2RlYy9zZXR1cC5jCmluZGV4IGFkNWQ0MzYuLjljNzA3YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZGVjL3NldHVwLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogZXh0ZXJuIHZvaWQgZGVjX3RpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGRlY190aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICopOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWJvYXJkX2JlX2luaXQgPSBkZWNfYmVfaW5pdDsKIAlib2FyZF90aW1lX2luaXQgPSBkZWNfdGltZV9pbml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy90aW1lLmMgYi9hcmNoL21pcHMvZGVjL3RpbWUuYwppbmRleCA3NGNiMDU1Li43NmU0ZDA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3RpbWUuYworKysgYi9hcmNoL21pcHMvZGVjL3RpbWUuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJfQogCiAJLyogU2V0IHVwIHRoZSByYXRlIG9mIHBlcmlvZGljIERTMTI4NyBpbnRlcnJ1cHRzLiAgKi8KLQlDTU9TX1dSSVRFKFJUQ19SRUZfQ0xDS18zMktIWiB8ICgxNiAtIExPR18yX0haKSwgUlRDX1JFR19BKTsKKwlDTU9TX1dSSVRFKFJUQ19SRUZfQ0xDS18zMktIWiB8ICgxNiAtIF9fZmZzKEhaKSksIFJUQ19SRUdfQSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWZjb25maWcgYi9hcmNoL21pcHMvZGVmY29uZmlnCmluZGV4IDYwN2UyOTguLjg3OWJhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2RlZmNvbmZpZwpAQCAtNDEsOCArNDEsNiBAQAogIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTA3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc2IGlzIG5vdCBzZXQKICMgQ09ORklHX0REQjU0NzcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKQEAgLTEzNiw2ICsxMzQsMTUgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAwCiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTEyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorIworIyAgYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL01ha2VmaWxlCisjICAgICAgIE1ha2VmaWxlIGZvciB0aGUgY29tbW9uIGNvZGUgb2YgTkVDIEVNTUEyUkggYmFzZWQgYm9hcmQuCisjCisjICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA1LTIwMDYKKyMKKyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisKK29iai0kKENPTkZJR19NQVJLRUlOUykJKz0gaXJxLm8gaXJxX2VtbWEycmgubyBwcm9tLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnEuYyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDc1MjgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIGFyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnEuYworICogICAgICBUaGlzIGZpbGUgaXMgY29tbW9uIGlycSBkaXNwYXRjaGVyLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA1LTIwMDYKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBhcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycS5jCisgKgorICoJQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKKy8qCisgKiB0aGUgZmlyc3QgbGV2ZWwgaW50LWhhbmRsZXIgd2lsbCBqdW1wIGhlcmUgaWYgaXQgaXMgYSBlbW1hMnJoIGlycQorICovCithc21saW5rYWdlIHZvaWQgZW1tYTJyaF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIGludFN0YXR1czsKKwl1MzIgYml0bWFzazsKKwl1MzIgaTsKKworCWludFN0YXR1cyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfSU5UX1NUXzApCisJICAgICYgZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9JTlRfRU5fMCk7CisKKyNpZmRlZiBFTU1BMlJIX1NXX0NBU0NBREUKKwlpZiAoaW50U3RhdHVzICYKKwkgICAgKDEgPDwgKChFTU1BMlJIX1NXX0NBU0NBREUgLSBFTU1BMlJIX0lSUV9JTlQwKSAmICgzMiAtIDEpKSkpIHsKKwkJdTMyIHN3SW50U3RhdHVzOworCQlzd0ludFN0YXR1cyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1dfSU5UKQorCQkgICAgJiBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX1NXX0lOVF9FTik7CisJCWZvciAoaSA9IDAsIGJpdG1hc2sgPSAxOyBpIDwgMzI7IGkrKywgYml0bWFzayA8PD0gMSkgeworCQkJaWYgKHN3SW50U3RhdHVzICYgYml0bWFzaykgeworCQkJCWRvX0lSUShFTU1BMlJIX1NXX0lSUV9CQVNFICsgaSwgcmVncyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorI2VuZGlmCisKKwlmb3IgKGkgPSAwLCBiaXRtYXNrID0gMTsgaSA8IDMyOyBpKyssIGJpdG1hc2sgPDw9IDEpIHsKKwkJaWYgKGludFN0YXR1cyAmIGJpdG1hc2spIHsKKwkJCWRvX0lSUShFTU1BMlJIX0lSUV9CQVNFICsgaSwgcmVncyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpbnRTdGF0dXMgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX0lOVF9TVF8xKQorCSAgICAmIGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfSU5UX0VOXzEpOworCisjaWZkZWYgRU1NQTJSSF9HUElPX0NBU0NBREUKKwlpZiAoaW50U3RhdHVzICYKKwkgICAgKDEgPDwgKChFTU1BMlJIX0dQSU9fQ0FTQ0FERSAtIEVNTUEyUkhfSVJRX0lOVDApICYgKDMyIC0gMSkpKSkgeworCQl1MzIgZ3Bpb0ludFN0YXR1czsKKwkJZ3Bpb0ludFN0YXR1cyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX1NUKQorCQkgICAgJiBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLKTsKKwkJZm9yIChpID0gMCwgYml0bWFzayA9IDE7IGkgPCAzMjsgaSsrLCBiaXRtYXNrIDw8PSAxKSB7CisJCQlpZiAoZ3Bpb0ludFN0YXR1cyAmIGJpdG1hc2spIHsKKwkJCQlkb19JUlEoRU1NQTJSSF9HUElPX0lSUV9CQVNFICsgaSwgcmVncyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJfQorI2VuZGlmCisKKwlmb3IgKGkgPSAzMiwgYml0bWFzayA9IDE7IGkgPCA2NDsgaSsrLCBiaXRtYXNrIDw8PSAxKSB7CisJCWlmIChpbnRTdGF0dXMgJiBiaXRtYXNrKSB7CisJCQlkb19JUlEoRU1NQTJSSF9JUlFfQkFTRSArIGksIHJlZ3MpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaW50U3RhdHVzID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9JTlRfU1RfMikKKwkgICAgJiBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX0lOVF9FTl8yKTsKKworCWZvciAoaSA9IDY0LCBiaXRtYXNrID0gMTsgaSA8IDk2OyBpKyssIGJpdG1hc2sgPDw9IDEpIHsKKwkJaWYgKGludFN0YXR1cyAmIGJpdG1hc2spIHsKKwkJCWRvX0lSUShFTU1BMlJIX0lSUV9CQVNFICsgaSwgcmVncyk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxX2VtbWEycmguYyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnFfZW1tYTJyaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODZhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxX2VtbWEycmguYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBhcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxX2VtbWEycmguYworICogICAgICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgaXJxIGhhbmRsZXIgZm9yIEVNTUEyUkguCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDUtMjAwNgorICoKKyAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxXzU0NzcuYworICoKKyAqCUNvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qCisgKiBFTU1BMlJIIGRlZmluZXMgNjQgSVJRcy4KKyAqCisgKiBUaGlzIGZpbGUgZXhwb3J0cyBvbmUgZnVuY3Rpb246CisgKgllbW1hMnJoX2lycV9pbml0KHUzMiBpcnFfYmFzZSk7CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KKworLyogbnVtYmVyIG9mIHRvdGFsIGlycXMgc3VwcG9ydGVkIGJ5IEVNTUEyUkggKi8KKyNkZWZpbmUJTlVNX0VNTUEyUkhfSVJRCQk5NgorCitzdGF0aWMgaW50IGVtbWEycmhfaXJxX2Jhc2UgPSAtMTsKKwordm9pZCBsbF9lbW1hMnJoX2lycV9lbmFibGUoaW50KTsKK3ZvaWQgbGxfZW1tYTJyaF9pcnFfZGlzYWJsZShpbnQpOworCitzdGF0aWMgdm9pZCBlbW1hMnJoX2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlsbF9lbW1hMnJoX2lycV9lbmFibGUoaXJxIC0gZW1tYTJyaF9pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlsbF9lbW1hMnJoX2lycV9kaXNhYmxlKGlycSAtIGVtbWEycmhfaXJxX2Jhc2UpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGVtbWEycmhfaXJxX3N0YXJ0dXAodW5zaWduZWQgaW50IGlycSkKK3sKKwllbW1hMnJoX2lycV9lbmFibGUoaXJxKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZQllbW1hMnJoX2lycV9zaHV0ZG93bgllbW1hMnJoX2lycV9kaXNhYmxlCisKK3N0YXRpYyB2b2lkIGVtbWEycmhfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCS8qIGRpc2FibGUgaW50ZXJydXB0IC0gc29tZSBoYW5kbGVyIHdpbGwgcmUtZW5hYmxlIHRoZSBpcnEKKwkgKiBhbmQgaWYgdGhlIGludGVycnVwdCBpcyBsZXZlbGVkLCB3ZSB3aWxsIGhhdmUgaW5maW5pdGUgbG9vcAorCSAqLworCWxsX2VtbWEycmhfaXJxX2Rpc2FibGUoaXJxIC0gZW1tYTJyaF9pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfaXJxX2VuZCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpCisJCWxsX2VtbWEycmhfaXJxX2VuYWJsZShpcnEgLSBlbW1hMnJoX2lycV9iYXNlKTsKK30KKworaHdfaXJxX2NvbnRyb2xsZXIgZW1tYTJyaF9pcnFfY29udHJvbGxlciA9IHsKKwkudHlwZW5hbWUgPSAiZW1tYTJyaF9pcnEiLAorCS5zdGFydHVwID0gZW1tYTJyaF9pcnFfc3RhcnR1cCwKKwkuc2h1dGRvd24gPSBlbW1hMnJoX2lycV9zaHV0ZG93biwKKwkuZW5hYmxlID0gZW1tYTJyaF9pcnFfZW5hYmxlLAorCS5kaXNhYmxlID0gZW1tYTJyaF9pcnFfZGlzYWJsZSwKKwkuYWNrID0gZW1tYTJyaF9pcnFfYWNrLAorCS5lbmQgPSBlbW1hMnJoX2lycV9lbmQsCisJLnNldF9hZmZpbml0eSA9IE5VTEwJLyogbm8gYWZmaW5pdHkgc3R1ZmYgZm9yIFVQICovCit9OworCit2b2lkIGVtbWEycmhfaXJxX2luaXQodTMyIGlycV9iYXNlKQoreworCXUzMiBpOworCisJZm9yIChpID0gaXJxX2Jhc2U7IGkgPCBpcnFfYmFzZSArIE5VTV9FTU1BMlJIX0lSUTsgaSsrKSB7CisJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKKwkJaXJxX2Rlc2NbaV0uZGVwdGggPSAxOworCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmVtbWEycmhfaXJxX2NvbnRyb2xsZXI7CisJfQorCisJZW1tYTJyaF9pcnFfYmFzZSA9IGlycV9iYXNlOworfQorCit2b2lkIGxsX2VtbWEycmhfaXJxX2VuYWJsZShpbnQgZW1tYTJyaF9pcnEpCit7CisJdTMyIHJlZ192YWx1ZTsKKwl1MzIgcmVnX2JpdG1hc2s7CisJdTMyIHJlZ19pbmRleDsKKworCXJlZ19pbmRleCA9IEVNTUEyUkhfQkhJRl9JTlRfRU5fMAorCSAgICArIChFTU1BMlJIX0JISUZfSU5UX0VOXzEgLSBFTU1BMlJIX0JISUZfSU5UX0VOXzApCisJICAgICogKGVtbWEycmhfaXJxIC8gMzIpOworCXJlZ192YWx1ZSA9IGVtbWEycmhfaW4zMihyZWdfaW5kZXgpOworCXJlZ19iaXRtYXNrID0gMHgxIDw8IChlbW1hMnJoX2lycSAlIDMyKTsKKwlkYl9hc3NlcnQoKHJlZ192YWx1ZSAmIHJlZ19iaXRtYXNrKSA9PSAwKTsKKwllbW1hMnJoX291dDMyKHJlZ19pbmRleCwgcmVnX3ZhbHVlIHwgcmVnX2JpdG1hc2spOworfQorCit2b2lkIGxsX2VtbWEycmhfaXJxX2Rpc2FibGUoaW50IGVtbWEycmhfaXJxKQoreworCXUzMiByZWdfdmFsdWU7CisJdTMyIHJlZ19iaXRtYXNrOworCXUzMiByZWdfaW5kZXg7CisKKwlyZWdfaW5kZXggPSBFTU1BMlJIX0JISUZfSU5UX0VOXzAKKwkgICAgKyAoRU1NQTJSSF9CSElGX0lOVF9FTl8xIC0gRU1NQTJSSF9CSElGX0lOVF9FTl8wKQorCSAgICAqIChlbW1hMnJoX2lycSAvIDMyKTsKKwlyZWdfdmFsdWUgPSBlbW1hMnJoX2luMzIocmVnX2luZGV4KTsKKwlyZWdfYml0bWFzayA9IDB4MSA8PCAoZW1tYTJyaF9pcnEgJSAzMik7CisJZGJfYXNzZXJ0KChyZWdfdmFsdWUgJiByZWdfYml0bWFzaykgIT0gMCk7CisJZW1tYTJyaF9vdXQzMihyZWdfaW5kZXgsIHJlZ192YWx1ZSAmIH5yZWdfYml0bWFzayk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmJhMGIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogIGFyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9wcm9tLmMKKyAqICAgICAgVGhpcyBmaWxlIGlzIHByb20gZmlsZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNC0yMDA2CisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYXJjaC9taXBzL2RkYjV4eHgvY29tbW9uL3Byb20uYworICoKKyAqCUNvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlzd2l0Y2ggKG1pcHNfbWFjaHR5cGUpIHsKKwljYXNlIE1BQ0hfTkVDX01BUktFSU5TOgorCQlyZXR1cm4gIk5FQyBFTU1BMlJIIE1hcmstZWlucyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVbmtub3duIE5FQyBib2FyZCI7CisJfQorfQorCisvKiBbanN1bkBqdW5zdW4ubmV0XSBQTU9OIHBhc3NlcyBhcmd1bWVudHMgaW4gQyBtYWluKCkgc3R5bGUgKi8KK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCWludCBhcmdjID0gZndfYXJnMDsKKwljaGFyICoqYXJnID0gKGNoYXIgKiopZndfYXJnMTsKKwlpbnQgaTsKKworCS8qIGlmIHVzZXIgcGFzc2VzIGtlcm5lbCBhcmdzLCBpZ25vcmUgdGhlIGRlZmF1bHQgb25lICovCisJaWYgKGFyZ2MgPiAxKQorCQlhcmNzX2NtZGxpbmVbMF0gPSAnXDAnOworCisJLyogYXJnWzBdIGlzICJnIiwgdGhlIHJlc3QgaXMgYm9vdCBwYXJhbWV0ZXJzICovCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoc3RybGVuKGFyY3NfY21kbGluZSkgKyBzdHJsZW4oYXJnW2ldICsgMSkKKwkJICAgID49IHNpemVvZihhcmNzX2NtZGxpbmUpKQorCQkJYnJlYWs7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsIGFyZ1tpXSk7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7CisJfQorCisJbWlwc19tYWNoZ3JvdXAgPSBNQUNIX0dST1VQX05FQ19FTU1BMlJIOworCisjaWYgZGVmaW5lZChDT05GSUdfTUFSS0VJTlMpCisJbWlwc19tYWNodHlwZSA9IE1BQ0hfTkVDX01BUktFSU5TOworCWFkZF9tZW1vcnlfcmVnaW9uKDAsIEVNTUEyUkhfUkFNX1NJWkUsIEJPT1RfTUVNX1JBTSk7CisjZW5kaWYKKworfQorCit2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL01ha2VmaWxlIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmYzI2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgIGFyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL01ha2VmaWxlCisjICAgICAgIE1ha2VmaWxlIGZvciB0aGUgY29tbW9uIGNvZGUgb2YgTkVDIEVNTUEyUkggYmFzZWQgYm9hcmQuCisjCisjICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA1LTIwMDYKKyMKKyMgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisKK29iai0kKENPTkZJR19NQVJLRUlOUykgKz0gaXJxLm8gaXJxX21hcmtlaW5zLm8gc2V0dXAubyBsZWQubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9pcnEuYyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGMzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9pcnEuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBhcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9pcnEuYworICogICAgICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgaXJxIGhhbmRsZXIgZm9yIEVNTUEyUkguCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDQtMjAwNgorICoKKyAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0NzcvaXJxLmMKKyAqCisgKglDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKKy8qCisgKiBJUlEgbWFwcGluZworICoKKyAqICAwLTc6IDggQ1BVIGludGVycnVwdHMKKyAqCTAgLQlzb2Z0d2FyZSBpbnRlcnJ1cHQgMAorICoJMSAtIAlzb2Z0d2FyZSBpbnRlcnJ1cHQgMQorICoJMiAtIAltb3N0IFZyYzU0NzcgaW50ZXJydXB0cyBhcmUgcm91dGVkIHRvIHRoaXMgcGluCisgKgkzIC0gCShvcHRpb25hbCkgc29tZSBvdGhlciBpbnRlcnJ1cHRzIHJvdXRlZCB0byB0aGlzIHBpbiBmb3IgZGVidWdnCisgKgk0IC0gCW5vdCB1c2VkCisgKgk1IC0gCW5vdCB1c2VkCisgKgk2IC0gCW5vdCB1c2VkCisgKgk3IC0gCWNwdSB0aW1lciAodXNlZCBieSBkZWZhdWx0KQorICoKKyAqLworCitleHRlcm4gdm9pZCBlbW1hMnJoX3N3X2lycV9pbml0KHUzMiBiYXNlKTsKK2V4dGVybiB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfaW5pdCh1MzIgYmFzZSk7CitleHRlcm4gdm9pZCBlbW1hMnJoX2lycV9pbml0KHUzMiBiYXNlKTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgZW1tYTJyaF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfY2FzY2FkZSA9IHsKKwkgICAuaGFuZGxlciA9IG5vX2FjdGlvbiwKKwkgICAuZmxhZ3MgPSAwLAorCSAgIC5tYXNrID0gQ1BVX01BU0tfTk9ORSwKKwkgICAubmFtZSA9ICJjYXNjYWRlIiwKKwkgICAuZGV2X2lkID0gTlVMTCwKKwkgICAubmV4dCA9IE5VTEwsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCit7CisJdTMyIHJlZzsKKworCWRiX3J1bihwcmludGsoIm1hcmtlaW5zX2lycV9zZXR1cCBpbnZva2VkLlxuIikpOworCisJLyogYnkgZGVmYXVsdCwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICovCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0JISUZfSU5UX0VOXzAsIDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9CSElGX0lOVF9FTl8xLCAwKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfQkhJRl9JTlRfRU5fMiwgMCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0JISUZfSU5UMV9FTl8wLCAwKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfQkhJRl9JTlQxX0VOXzEsIDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9CSElGX0lOVDFfRU5fMiwgMCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0JISUZfU1dfSU5UX0VOLCAwKTsKKworCWNsZWFyX2MwX3N0YXR1cygweGZmMDApOworCXNldF9jMF9zdGF0dXMoMHgwNDAwKTsKKworI2RlZmluZSBHUElPX1BDSSAoMHhmPDwxNSkKKwkvKiBzZXR1cCBHUElPIGludGVycnVwdCBmb3IgUENJIGludGVyZmFjZSAqLworCS8qIGRpcmVjdGlvbiBpbnB1dCAqLworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fRElSKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19ESVIsIHJlZyAmIH5HUElPX1BDSSk7CisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSywgcmVnICYgfkdQSU9fUENJKTsKKwkvKiBsZXZlbCB0cmlnZ2VyZCAqLworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX01PREUpOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9NT0RFLCByZWcgfCBHUElPX1BDSSk7CisJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfQ05EX0EpOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9DTkRfQSwgcmVnICYgKH5HUElPX1BDSSkpOworCS8qIGludGVycnVwdCBjbGVhciAqLworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9TVCwgfkdQSU9fUENJKTsKKworCS8qIGluaXQgYWxsIGNvbnRyb2xsZXJzICovCisJZW1tYTJyaF9pcnFfaW5pdChFTU1BMlJIX0lSUV9CQVNFKTsKKwllbW1hMnJoX3N3X2lycV9pbml0KEVNTUEyUkhfU1dfSVJRX0JBU0UpOworCWVtbWEycmhfZ3Bpb19pcnFfaW5pdChFTU1BMlJIX0dQSU9fSVJRX0JBU0UpOworCW1pcHNfY3B1X2lycV9pbml0KENQVV9JUlFfQkFTRSk7CisKKwkvKiBzZXR1cCBjYXNjYWRlIGludGVycnVwdHMgKi8KKwlzZXR1cF9pcnEoRU1NQTJSSF9JUlFfQkFTRSArIEVNTUEyUkhfU1dfQ0FTQ0FERSwgJmlycV9jYXNjYWRlKTsKKwlzZXR1cF9pcnEoRU1NQTJSSF9JUlFfQkFTRSArIEVNTUEyUkhfR1BJT19DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOworCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyBDUFVfRU1NQTJSSF9DQVNDQURFLCAmaXJxX2Nhc2NhZGUpOworfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKKworCWlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDcpCisJCWRvX0lSUShDUFVfSVJRX0JBU0UgKyA3LCByZWdzKTsKKwllbHNlIGlmIChwZW5kaW5nICYgU1RBVFVTRl9JUDIpCisJCWVtbWEycmhfaXJxX2Rpc3BhdGNoKHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMSkKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDEsIHJlZ3MpOworCWVsc2UgaWYgKHBlbmRpbmcgJiBTVEFUVVNGX0lQMCkKKwkJZG9fSVJRKENQVV9JUlFfQkFTRSArIDAsIHJlZ3MpOworCWVsc2UKKwkJc3B1cmlvdXNfaW50ZXJydXB0KHJlZ3MpOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycV9tYXJrZWlucy5jIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvaXJxX21hcmtlaW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4M2ZkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycV9tYXJrZWlucy5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogIGFyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2lycV9tYXJrZWlucy5jCisgKiAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBpcnEgaGFuZGxlciBmb3IgTWFyay1laW5zLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA0LTIwMDYKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBhcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L2lycV81NDc3LmMKKyAqCisgKglDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKK3N0YXRpYyBpbnQgZW1tYTJyaF9zd19pcnFfYmFzZSA9IC0xOworc3RhdGljIGludCBlbW1hMnJoX2dwaW9faXJxX2Jhc2UgPSAtMTsKKwordm9pZCBsbF9lbW1hMnJoX3N3X2lycV9lbmFibGUoaW50IHJlZyk7Cit2b2lkIGxsX2VtbWEycmhfc3dfaXJxX2Rpc2FibGUoaW50IHJlZyk7Cit2b2lkIGxsX2VtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKGludCByZWcpOwordm9pZCBsbF9lbW1hMnJoX2dwaW9faXJxX2Rpc2FibGUoaW50IHJlZyk7CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfc3dfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWxsX2VtbWEycmhfc3dfaXJxX2VuYWJsZShpcnEgLSBlbW1hMnJoX3N3X2lycV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgZW1tYTJyaF9zd19pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWxsX2VtbWEycmhfc3dfaXJxX2Rpc2FibGUoaXJxIC0gZW1tYTJyaF9zd19pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW1tYTJyaF9zd19pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWVtbWEycmhfc3dfaXJxX2VuYWJsZShpcnEpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIGVtbWEycmhfc3dfaXJxX3NodXRkb3duIGVtbWEycmhfc3dfaXJxX2Rpc2FibGUKKworc3RhdGljIHZvaWQgZW1tYTJyaF9zd19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJbGxfZW1tYTJyaF9zd19pcnFfZGlzYWJsZShpcnEgLSBlbW1hMnJoX3N3X2lycV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgZW1tYTJyaF9zd19pcnFfZW5kKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwkJbGxfZW1tYTJyaF9zd19pcnFfZW5hYmxlKGlycSAtIGVtbWEycmhfc3dfaXJxX2Jhc2UpOworfQorCitod19pcnFfY29udHJvbGxlciBlbW1hMnJoX3N3X2lycV9jb250cm9sbGVyID0geworCS50eXBlbmFtZSA9ICJlbW1hMnJoX3N3X2lycSIsCisJLnN0YXJ0dXAgPSBlbW1hMnJoX3N3X2lycV9zdGFydHVwLAorCS5zaHV0ZG93biA9IGVtbWEycmhfc3dfaXJxX3NodXRkb3duLAorCS5lbmFibGUgPSBlbW1hMnJoX3N3X2lycV9lbmFibGUsCisJLmRpc2FibGUgPSBlbW1hMnJoX3N3X2lycV9kaXNhYmxlLAorCS5hY2sgPSBlbW1hMnJoX3N3X2lycV9hY2ssCisJLmVuZCA9IGVtbWEycmhfc3dfaXJxX2VuZCwKKwkuc2V0X2FmZmluaXR5ID0gTlVMTCwKK307CisKK3ZvaWQgZW1tYTJyaF9zd19pcnFfaW5pdCh1MzIgaXJxX2Jhc2UpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSBpcnFfYmFzZTsgaSA8IGlycV9iYXNlICsgTlVNX0VNTUEyUkhfSVJRX1NXOyBpKyspIHsKKwkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOworCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOworCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDI7CisJCWlycV9kZXNjW2ldLmhhbmRsZXIgPSAmZW1tYTJyaF9zd19pcnFfY29udHJvbGxlcjsKKwl9CisKKwllbW1hMnJoX3N3X2lycV9iYXNlID0gaXJxX2Jhc2U7Cit9CisKK3ZvaWQgbGxfZW1tYTJyaF9zd19pcnFfZW5hYmxlKGludCBpcnEpCit7CisJdTMyIHJlZzsKKworCWRiX2Fzc2VydChpcnEgPj0gMCk7CisJZGJfYXNzZXJ0KGlycSA8IE5VTV9FTU1BMlJIX0lSUV9TVyk7CisKKwlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX1NXX0lOVF9FTik7CisJcmVnIHw9IDEgPDwgaXJxOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9CSElGX1NXX0lOVF9FTiwgcmVnKTsKK30KKwordm9pZCBsbF9lbW1hMnJoX3N3X2lycV9kaXNhYmxlKGludCBpcnEpCit7CisJdTMyIHJlZzsKKworCWRiX2Fzc2VydChpcnEgPj0gMCk7CisJZGJfYXNzZXJ0KGlycSA8IDMyKTsKKworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1dfSU5UX0VOKTsKKwlyZWcgJj0gfigxIDw8IGlycSk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0JISUZfU1dfSU5UX0VOLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBlbW1hMnJoX2dwaW9faXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWxsX2VtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKGlycSAtIGVtbWEycmhfZ3Bpb19pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWxsX2VtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZShpcnEgLSBlbW1hMnJoX2dwaW9faXJxX2Jhc2UpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGVtbWEycmhfZ3Bpb19pcnFfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWVtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKGlycSk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZW1tYTJyaF9ncGlvX2lycV9zaHV0ZG93biBlbW1hMnJoX2dwaW9faXJxX2Rpc2FibGUKKworc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnEgLT0gZW1tYTJyaF9ncGlvX2lycV9iYXNlOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9TVCwgfigxIDw8IGlycSkpOworCWxsX2VtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZShpcnEpOworfQorCitzdGF0aWMgdm9pZCBlbW1hMnJoX2dwaW9faXJxX2VuZCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpCisJCWxsX2VtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKGlycSAtIGVtbWEycmhfZ3Bpb19pcnFfYmFzZSk7Cit9CisKK2h3X2lycV9jb250cm9sbGVyIGVtbWEycmhfZ3Bpb19pcnFfY29udHJvbGxlciA9IHsKKwkudHlwZW5hbWUgPSAiZW1tYTJyaF9ncGlvX2lycSIsCisJLnN0YXJ0dXAgPSBlbW1hMnJoX2dwaW9faXJxX3N0YXJ0dXAsCisJLnNodXRkb3duID0gZW1tYTJyaF9ncGlvX2lycV9zaHV0ZG93biwKKwkuZW5hYmxlID0gZW1tYTJyaF9ncGlvX2lycV9lbmFibGUsCisJLmRpc2FibGUgPSBlbW1hMnJoX2dwaW9faXJxX2Rpc2FibGUsCisJLmFjayA9IGVtbWEycmhfZ3Bpb19pcnFfYWNrLAorCS5lbmQgPSBlbW1hMnJoX2dwaW9faXJxX2VuZCwKKwkuc2V0X2FmZmluaXR5ID0gTlVMTCwKK307CisKK3ZvaWQgZW1tYTJyaF9ncGlvX2lycV9pbml0KHUzMiBpcnFfYmFzZSkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2Jhc2UgKyBOVU1fRU1NQTJSSF9JUlFfR1BJTzsgaSsrKSB7CisJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gTlVMTDsKKwkJaXJxX2Rlc2NbaV0uZGVwdGggPSAyOworCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmVtbWEycmhfZ3Bpb19pcnFfY29udHJvbGxlcjsKKwl9CisKKwllbW1hMnJoX2dwaW9faXJxX2Jhc2UgPSBpcnFfYmFzZTsKK30KKwordm9pZCBsbF9lbW1hMnJoX2dwaW9faXJxX2VuYWJsZShpbnQgaXJxKQoreworCXUzMiByZWc7CisKKwlkYl9hc3NlcnQoaXJxID49IDApOworCWRiX2Fzc2VydChpcnEgPCBOVU1fRU1NQTJSSF9JUlFfR1BJTyk7CisKKwlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLKTsKKwlyZWcgfD0gMSA8PCBpcnE7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX01BU0ssIHJlZyk7Cit9CisKK3ZvaWQgbGxfZW1tYTJyaF9ncGlvX2lycV9kaXNhYmxlKGludCBpcnEpCit7CisJdTMyIHJlZzsKKworCWRiX2Fzc2VydChpcnEgPj0gMCk7CisJZGJfYXNzZXJ0KGlycSA8IE5VTV9FTU1BMlJIX0lSUV9HUElPKTsKKworCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX01BU0spOworCXJlZyAmPSB+KDEgPDwgaXJxKTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSywgcmVnKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2xlZC5jIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1MjU0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL2xlZC5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvbGVkLmMKKyAqICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIGxlZCBkaXNwbGF5IGZvciBNYXJrLWVpbnMuCisgKgorICogIENvcHlyaWdodCAoQykgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uIDIwMDQtMjAwNgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKK2NvbnN0IHVuc2lnbmVkIGxvbmcgY2xlYXIgPSAweDIwMjAyMDIwOworCisjZGVmaW5lIExFRF9CQVNFIDB4YjE0MDAwMzgKKwordm9pZCBtYXJrZWluc19sZWRfY2xlYXIodm9pZCkKK3sKKwllbW1hMnJoX291dDMyKExFRF9CQVNFLCBjbGVhcik7CisJZW1tYTJyaF9vdXQzMihMRURfQkFTRSArIDQsIGNsZWFyKTsKK30KKwordm9pZCBtYXJrZWluc19sZWQoY29uc3QgY2hhciAqc3RyKQoreworCWludCBpOworCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKKworCW1hcmtlaW5zX2xlZF9jbGVhcigpOworCWlmIChsZW4gPiA4KQorCQlsZW4gPSA4OworCisJaWYgKGVtbWEycmhfaW4zMigweGIwMDAwODAwKSAmICgweDEgPDwgMTgpKQorCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQllbW1hMnJoX291dDgoTEVEX0JBU0UgKyBpLCBzdHJbaV0pOworCWVsc2UKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJZW1tYTJyaF9vdXQ4KExFRF9CQVNFICsgKGkgJiA0KSArICgzIC0gKGkgJiAzKSksCisJCQkJICAgICBzdHJbaV0pOworfQorCit2b2lkIG1hcmtlaW5zX2xlZF9oZXgodTMyIHZhbCkKK3sKKwljaGFyIHN0clsxMF07CisKKwlzcHJpbnRmKHN0ciwgIiUwOHgiLCB2YWwpOworCW1hcmtlaW5zX2xlZChzdHIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxZWVhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3BsYXRmb3JtLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiAgYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdG9mcm0uYworICogICAgICBUaGlzIGZpbGUgc2V0cyB1cCBwbGF0Zm9ybSBkZXZpY2VzIGZvciBFTU1BMlJIIE1hcmstZWlucy4KKyAqCisgKiAgQ29weXJpZ2h0KEMpIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLCAyMDA2CisgKgorICogIEF1dGhvcjogZG1pdHJ5IHBlcnZ1c2hpbiA8ZHBlcnZ1c2hpbkBydS5tdmlzdGEuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9iY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9nZGItc3R1Yi5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgorCisKKyNkZWZpbmUgSTJDX0VNTUEyUkggImVtbWEycmgtaWljIiAvKiBtdXN0IGJlIGluIHN5bmMgd2l0aCBJSUMgZHJpdmVyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjX2VtbWFfcmVzb3VyY2VzXzBbXSA9IHsKKwl7IE5VTEwsIEVNTUEyUkhfSVJRX1BJSUMwLCBFTU1BMlJIX0lSUV9QSUlDMCwgSU9SRVNPVVJDRV9JUlEgfSwKKwl7IE5VTEwsIEtTRUcxQUREUihFTU1BMlJIX1BJSUMwX0JBU0UpLCBLU0VHMUFERFIoRU1NQTJSSF9QSUlDMF9CQVNFICsgMHgxMDAwKSwgMCB9LAorfTsKKworc3RydWN0IHJlc291cmNlIGkyY19lbW1hX3Jlc291cmNlc18xW10gPSB7CisJeyBOVUxMLCBFTU1BMlJIX0lSUV9QSUlDMSwgRU1NQTJSSF9JUlFfUElJQzEsIElPUkVTT1VSQ0VfSVJRIH0sCisJeyBOVUxMLCBLU0VHMUFERFIoRU1NQTJSSF9QSUlDMV9CQVNFKSwgS1NFRzFBRERSKEVNTUEyUkhfUElJQzFfQkFTRSArIDB4MTAwMCksIDAgfSwKK307CisKK3N0cnVjdCByZXNvdXJjZSBpMmNfZW1tYV9yZXNvdXJjZXNfMltdID0geworCXsgTlVMTCwgRU1NQTJSSF9JUlFfUElJQzIsIEVNTUEyUkhfSVJRX1BJSUMyLCBJT1JFU09VUkNFX0lSUSB9LAorCXsgTlVMTCwgS1NFRzFBRERSKEVNTUEyUkhfUElJQzJfQkFTRSksIEtTRUcxQUREUihFTU1BMlJIX1BJSUMyX0JBU0UgKyAweDEwMDApLCAwIH0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyY19lbW1hX2RldmljZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lID0gSTJDX0VNTUEyUkgsCisJCS5pZCA9IDAsCisJCS5yZXNvdXJjZSA9IGkyY19lbW1hX3Jlc291cmNlc18wLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaTJjX2VtbWFfcmVzb3VyY2VzXzApLAorCX0sCisJWzFdID0geworCQkubmFtZSA9IEkyQ19FTU1BMlJILAorCQkuaWQgPSAxLAorCQkucmVzb3VyY2UgPSBpMmNfZW1tYV9yZXNvdXJjZXNfMSwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGkyY19lbW1hX3Jlc291cmNlc18xKSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUgPSBJMkNfRU1NQTJSSCwKKwkJLmlkID0gMiwKKwkJLnJlc291cmNlID0gaTJjX2VtbWFfcmVzb3VyY2VzXzIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmNfZW1tYV9yZXNvdXJjZXNfMiksCisJfSwKK307CisKKyNkZWZpbmUgRU1NQTJSSF9TRVJJQUxfQ0xPQ0sgMTg1NDQwMDAKKyNkZWZpbmUgRU1NQTJSSF9TRVJJQUxfRkxBR1MgVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUCisKK3N0YXRpYyBzdHJ1Y3QgIHBsYXRfc2VyaWFsODI1MF9wb3J0IHBsYXRmb3JtX3NlcmlhbF9wb3J0c1tdID0geworICAgICAgIFswXSA9IHsKKyAgICAgICAgIC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjBfQkFTRSArIDMpLAorICAgICAgICAgLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIwLAorICAgICAgICAgLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKKyAgICAgICAgIC5yZWdzaGlmdCA9IDQsCisgICAgICAgICAuaW90eXBlID0gVVBJT19NRU0sCisgICAgICAgICAuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKKyAgICAgICB9LAorICAgICAgIFsxXSA9IHsKKyAgICAgICAgIC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjFfQkFTRSArIDMpLAorICAgICAgICAgLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIxLAorICAgICAgICAgLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKKyAgICAgICAgIC5yZWdzaGlmdCA9IDQsCisgICAgICAgICAuaW90eXBlID0gVVBJT19NRU0sCisgICAgICAgICAuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKKyAgICAgICB9LAorICAgICAgIFsyXSA9IHsKKyAgICAgICAgIC5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjJfQkFTRSArIDMpLAorICAgICAgICAgLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIyLAorICAgICAgICAgLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKKyAgICAgICAgIC5yZWdzaGlmdCA9IDQsCisgICAgICAgICAuaW90eXBlID0gVVBJT19NRU0sCisgICAgICAgICAuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKKyAgICAgICB9LAorICAgICAgIFszXSA9IHsKKwkgLmZsYWdzID0gMCwKKyAgICAgICB9LAorfTsKKworc3RhdGljIHN0cnVjdCAgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9lbW1hID0geworCS5uYW1lID0gInNlcmlhbDgyNTAiLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBsYXRmb3JtX3NlcmlhbF9wb3J0cywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSA9IHsKKwkmaTJjX2VtbWFfZGV2aWNlc1swXSwKKwkmaTJjX2VtbWFfZGV2aWNlc1sxXSwKKwkmaTJjX2VtbWFfZGV2aWNlc1syXSwKKwkmc2VyaWFsX2VtbWEsCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbWFya2VpbnNfcGFydHNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lID0gIlJvb3RGUyIsCisJCS5vZmZzZXQgPSAweDAwMDAwMDAwLAorCQkuc2l6ZSA9IDB4MDBjMDAwMDAsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lID0gImJvb3QgY29kZSBhcmVhIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSAweDAwMTAwMDAwLAorCX0sCisJWzJdID0geworCQkubmFtZSA9ICJrZXJuZWwgaW1hZ2UiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IDB4MDAzMDAwMDAsCisJfSwKKwlbM10gPSB7CisJCS5uYW1lID0gIlJvb3RGUzIiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IDB4MDBjMDAwMDAsCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lID0gImJvb3QgY29kZSBhcmVhMiIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gMHgwMDEwMDAwMCwKKwl9LAorCVs1XSA9IHsKKwkJLm5hbWUgPSAia2VybmVsIGltYWdlMiIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdGZvcm1fZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXBoeXNtYXBfc2V0X3BhcnRpdGlvbnMobWFya2VpbnNfcGFydHMsIEFSUkFZX1NJWkUobWFya2VpbnNfcGFydHMpKTsKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK2FyY2hfaW5pdGNhbGwocGxhdGZvcm1fZGV2aWNlc19zZXR1cCk7CisKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3NldHVwLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOThmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9zZXR1cC5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogIGFyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3NldHVwLmMKKyAqICAgICAgVGhpcyBmaWxlIGlzIHNldHVwIGZvciBFTU1BMlJIIE1hcmstZWlucy4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNC0yMDA2CisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9zZXR1cC5jLgorICoKKyAqCUNvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4JLyogZm9yIEhaICovCisjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9iY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9nZGItc3R1Yi5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgorCisjZGVmaW5lCVVTRV9DUFVfQ09VTlRFUl9USU1FUgkvKiB3aGV0aGVyIHdlIHVzZSBjcHUgY291bnRlciAqLworCitleHRlcm4gdm9pZCBtYXJrZWluc19sZWQoY29uc3QgY2hhciAqKTsKKworc3RhdGljIGludCBidXNfZnJlcXVlbmN5ID0gMDsKKworc3RhdGljIHZvaWQgbWFya2VpbnNfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCit7CisJc3RhdGljIHZvaWQgKCpiYWNrX3RvX3Byb20pICh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSkweGJmYzAwMDAwOworCisJcHJpbnRrKCJjYW5ub3QgRU1NQTJSSCBNYXJrLWVpbnMgcmVzdGFydC5cbiIpOworCW1hcmtlaW5zX2xlZCgicmVzdGFydC4iKTsKKwliYWNrX3RvX3Byb20oKTsKK30KKworc3RhdGljIHZvaWQgbWFya2VpbnNfbWFjaGluZV9oYWx0KHZvaWQpCit7CisJcHJpbnRrKCJFTU1BMlJIIE1hcmstZWlucyBoYWx0ZWQuXG4iKTsKKwltYXJrZWluc19sZWQoImhhbHRlZC4iKTsKKwl3aGlsZSAoMSkgOworfQorCitzdGF0aWMgdm9pZCBtYXJrZWluc19tYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCXByaW50aygiRU1NQTJSSCBNYXJrLWVpbnMgaGFsdGVkLiBQbGVhc2UgdHVybiBvZmYgdGhlIHBvd2VyLlxuIik7CisJbWFya2VpbnNfbGVkKCJwb3dlcm9mZi4iKTsKKwl3aGlsZSAoMSkgOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbG9ja1s0XSA9IHsgMTY2NTAwMDAwLCAxODczMTI1MDAsIDE5OTgwMDAwMCwgMjEwNjAwMDAwIH07CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGRldGVjdF9idXNfZnJlcXVlbmN5KHVuc2lnbmVkIGxvbmcgcnRjX2Jhc2UpCit7CisJdTMyIHJlZzsKKworCS8qIGRldGVjdCBmcm9tIGJvb3Qgc3RyYXAgKi8KKwlyZWcgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX1NUUkFQXzApOworCXJlZyA9IChyZWcgPj4gNCkgJiAweDM7CisJcmV0dXJuIGNsb2NrW3JlZ107Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbW1hMnJoX3RpbWVfaW5pdCh2b2lkKQoreworCXUzMiByZWc7CisJaWYgKGJ1c19mcmVxdWVuY3kgPT0gMCkKKwkJYnVzX2ZyZXF1ZW5jeSA9IGRldGVjdF9idXNfZnJlcXVlbmN5KDApOworCisJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9TVFJBUF8wKTsKKwlpZiAoKHJlZyAmIDB4MykgPT0gMCkKKwkJcmVnID0gKHJlZyA+PiA2KSAmIDB4MzsKKwllbHNlIHsKKwkJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9NQUlOX0NUUkwpOworCQlyZWcgPSAocmVnID4+IDQpICYgMHgzOworCX0KKwltaXBzX2hwdF9mcmVxdWVuY3kgPSAoYnVzX2ZyZXF1ZW5jeSAqICg0ICsgcmVnKSkgLyA0IC8gMjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVtbWEycmhfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQoreworCS8qIHdlIGFyZSB1c2luZyB0aGUgY3B1IGNvdW50ZXIgZm9yIHRpbWVyIGludGVycnVwdHMgKi8KKwlzZXR1cF9pcnEoQ1BVX0lSUV9CQVNFICsgNywgaXJxKTsKK30KKworc3RhdGljIHZvaWQgbWFya2VpbnNfYm9hcmRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG1hcmtlaW5zX2lycV9zZXR1cCh2b2lkKTsKKworc3RhdGljIHZvaWQgaW5saW5lIF9faW5pdCBtYXJrZWluc19zaW9fc2V0dXAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfS0dEQl84MjUwCisJc3RydWN0IHVhcnRfcG9ydCBlbW1hX3BvcnQ7CisKKwltZW1zZXQoJmVtbWFfcG9ydCwgMCwgc2l6ZW9mKGVtbWFfcG9ydCkpOworCisJZW1tYV9wb3J0LmZsYWdzID0KKwkgICAgVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUOworCWVtbWFfcG9ydC5pb3R5cGUgPSBVUElPX01FTTsKKwllbW1hX3BvcnQucmVnc2hpZnQgPSA0OwkvKiBJL08gYWRkcmVzc2VzIGFyZSBldmVyeSA4IGJ5dGVzICovCisJZW1tYV9wb3J0LnVhcnRjbGsgPSAxODU0NDAwMDsJLyogQ2xvY2sgcmF0ZSBvZiB0aGUgY2hpcCAqLworCisJZW1tYV9wb3J0LmxpbmUgPSAwOworCWVtbWFfcG9ydC5tYXBiYXNlID0gS1NFRzFBRERSKEVNTUEyUkhfUEZVUjBfQkFTRSArIDMpOworCWVtbWFfcG9ydC5tZW1iYXNlID0gKHU4KillbW1hX3BvcnQubWFwYmFzZTsKKwllYXJseV9zZXJpYWxfc2V0dXAoJmVtbWFfcG9ydCk7CisKKwllbW1hX3BvcnQubGluZSA9IDE7CisJZW1tYV9wb3J0Lm1hcGJhc2UgPSBLU0VHMUFERFIoRU1NQTJSSF9QRlVSMV9CQVNFICsgMyk7CisJZW1tYV9wb3J0Lm1lbWJhc2UgPSAodTgqKWVtbWFfcG9ydC5tYXBiYXNlOworCWVhcmx5X3NlcmlhbF9zZXR1cCgmZW1tYV9wb3J0KTsKKworCWVtbWFfcG9ydC5pcnEgPSBFTU1BMlJIX0lSUV9QRlVSMTsKKwlrZ2RiODI1MF9hZGRfcG9ydCgxLCAmZW1tYV9wb3J0KTsKKyNlbmRpZgorfQorCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQoreworCS8qIGluaXRpYWxpemUgYm9hcmQgLSB3ZSBkb24ndCB0cnVzdCB0aGUgbG9hZGVyICovCisJbWFya2VpbnNfYm9hcmRfaW5pdCgpOworCisJc2V0X2lvX3BvcnRfYmFzZShLU0VHMUFERFIoRU1NQTJSSF9QQ0lfSU9fQkFTRSkpOworCisJYm9hcmRfdGltZV9pbml0ID0gZW1tYTJyaF90aW1lX2luaXQ7CisJYm9hcmRfdGltZXJfc2V0dXAgPSBlbW1hMnJoX3RpbWVyX3NldHVwOworCisJX21hY2hpbmVfcmVzdGFydCA9IG1hcmtlaW5zX21hY2hpbmVfcmVzdGFydDsKKwlfbWFjaGluZV9oYWx0ID0gbWFya2VpbnNfbWFjaGluZV9oYWx0OworCXBtX3Bvd2VyX29mZiA9IG1hcmtlaW5zX21hY2hpbmVfcG93ZXJfb2ZmOworCisJLyogc2V0dXAgcmVzb3VyY2UgbGltaXRzICovCisJaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gRU1NQTJSSF9QQ0lfSU9fQkFTRTsKKwlpb3BvcnRfcmVzb3VyY2UuZW5kID0gRU1NQTJSSF9QQ0lfSU9fQkFTRSArIEVNTUEyUkhfUENJX0lPX1NJWkUgLSAxOworCWlvbWVtX3Jlc291cmNlLnN0YXJ0ID0gRU1NQTJSSF9JT19CQVNFOworCWlvbWVtX3Jlc291cmNlLmVuZCA9IEVNTUEyUkhfUk9NX0JBU0UgLSAxOworCisJLyogUmVib290IG9uIHBhbmljICovCisJcGFuaWNfdGltZW91dCA9IDE4MDsKKworCW1hcmtlaW5zX3Npb19zZXR1cCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbWFya2VpbnNfYm9hcmRfaW5pdCh2b2lkKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9QQlJEX0lOVF9FTik7CS8qIG9wZW4gc2VyaWFsIGludGVycnVwdHMuICovCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BCUkRfSU5UX0VOLCB2YWwgfCAweGFhKTsKKwl2YWwgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9QQlJEX0NMS1NFTCk7CS8qIHNldCBzZXJpYWwgY2xvY2tzLiAqLworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQlJEX0NMS1NFTCwgdmFsIHwgMHg1KTsJLyogMThNSHogKi8KKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0NPTlRST0wsIDApOworCisJbWFya2VpbnNfbGVkKCJNVkwgRTJSSCIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvc2V0dXAuYyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3NldHVwLmMKaW5kZXggNzhkYmIxOC4uYTA0YWVhNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9zZXR1cC5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHVuc2lnbmVkIGNoYXIgbWFjXzBfMVsxMl07CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNvbmZpZyA9IHJlYWRfYzBfY29uZmlnKCk7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IHJlYWRfYzBfc3RhdHVzKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NlcmlhbEdULmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NlcmlhbEdULmMKaW5kZXggMTZlMzRhNS4uOGYwZDgzNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9zZXJpYWxHVC5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2VyaWFsR1QuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAjZWxzZQogCS8qCiAJICogTm90ZTogU2V0IGJhdWQgcmF0ZSwgaGFyZGNvZGVkIGhlcmUgZm9yIHJhdGUgb2YgMTE1MjAwCi0JICogc2luY2UgYmVjYW1lIHVuc3VyZSBvZiBhYm92ZSAiYnVhZCByYXRlIiBhbGdvcml0aG0gKD8/KS4KKwkgKiBzaW5jZSBiZWNhbWUgdW5zdXJlIG9mIGFib3ZlICJiYXVkIHJhdGUiIGFsZ29yaXRobSAoPz8pLgogCSAqLwogCW91dHJlZyhjaGFubmVsLCBMQ1IsIDB4ODMpOwogCW91dHJlZyhjaGFubmVsLCBETE0sIDB4MDApOwkvLyBTZWUgbm90ZSBhYm92ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9zZXR1cC5jIGIvYXJjaC9taXBzL2d0NjQxMjAvZXY2NDEyMC9zZXR1cC5jCmluZGV4IDZkODU5ZDEuLjQyMzZkYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ndDY0MTIwL2V2NjQxMjAvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9ldjY0MTIwL3NldHVwLmMKQEAgLTcxLDcgKzcxLDcgQEAKICAqLwogZXh0ZXJuIHZvaWQgZ3Q2NDEyMF90aW1lX2luaXQodm9pZCk7CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJX21hY2hpbmVfcmVzdGFydCA9IGdhbGlsZW9fbWFjaGluZV9yZXN0YXJ0OwogCV9tYWNoaW5lX2hhbHQgPSBnYWxpbGVvX21hY2hpbmVfaGFsdDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L2RiZ19pby5jIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvZGJnX2lvLmMKaW5kZXggODcyMGJjYy4uZjBhNmEzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvZGJnX2lvLmMKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3QvZGJnX2lvLmMKQEAgLTczLDcgKzczLDcgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAlVQVJUMTY1NTBfV1JJVEUoT0ZTX0lOVFJfRU5BQkxFLCAwKTsKIAotCS8qIHNldCB1cCBidWFkIHJhdGUgKi8KKwkvKiBzZXQgdXAgYmF1ZCByYXRlICovCiAJewogCQl1aW50MzIgZGl2aXNvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3Qvc2V0dXAuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL21vbWVuY29fb2NlbG90L3NldHVwLmMKaW5kZXggMjBiNjVkMy4uMTE5M2EyMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2d0NjQxMjAvbW9tZW5jb19vY2Vsb3Qvc2V0dXAuYworKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC9tb21lbmNvX29jZWxvdC9zZXR1cC5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAlndDY0MTIwX2Jhc2UgPSAweGUwMDAwMDAwOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXZvaWQgKCpsM2Z1bmMpKHVuc2lnbmVkIGxvbmcpPUtTRUcxQUREUigmc2V0dXBfbDNjYWNoZSk7CiAJdW5zaWduZWQgaW50IHRtcHdvcmQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvTWFrZWZpbGUgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2MDZiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IDIwMDYgV2luZCBSaXZlciBTeXN0ZW0sIEluYy4KKyMgQXV0aG9yOiBSb25na2FpLlpoYW4gPHJvbmdrYWkuemhhbkB3aW5kcml2ZXIuY29tPgorIworIyBNYWtlZmlsZSBmb3IgdGhlIFdpbmQgUml2ZXIgTUlQUyA0S0MgUFBNQyBFdmFsIEJvYXJkCisjCisKK29iai15CSs9IGludC1oYW5kbGVyLm8gaXJxLm8gcmVzZXQubyBzZXR1cC5vIHRpbWUubyBwY2kubworCitFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvaW50LWhhbmRsZXIuUyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pbnQtaGFuZGxlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZWU3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvaW50LWhhbmRsZXIuUwpAQCAtMCwwICsxLDU5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSBXaW5kIFJpdmVyIFN5c3RlbSBJbmMuIFJvbmdrYWkuWmhhbiA8cm9uZ2thaS56aGFuQHdpbmRyaXZlci5jb20+CisgKi8KKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXdycHBtYy9tYWNoLWd0NjQxMjAuaD4KKworCS5hbGlnbgk1CisJLnNldAlub2F0CitORVNURUQoaGFuZGxlX0lSUSwgUFRfU0laRSwgc3ApCisJU0FWRV9BTEwKKwlDTEkJCQkJIyBJbXBvcnRhbnQ6IG1hcmsgS0VSTkVMIG1vZGUgIQorCS5zZXQJYXQKKworCW1mYzAJdDAsIENQMF9DQVVTRQkJIyBnZXQgcGVuZGluZyBpbnRlcnJ1cHRzCisJbWZjMAl0MSwgQ1AwX1NUQVRVUwkJIyBnZXQgZW5hYmxlZCBpbnRlcnJ1cHRzCisJYW5kCXQwLCB0MCwgdDEJCSMgZ2V0IGFsbG93ZWQgaW50ZXJydXB0cworCWFuZGkJdDAsIHQwLCAweEZGMDAKKwliZXF6CXQwLCAxZgorCW1vdmUJYTEsIHNwCQkJIyBQcmVwYXJlICdzdHJ1Y3QgcHRfcmVncyAqcmVncycgcG9pbnRlcgorCisJYW5kaQl0MSwgdDAsIENBVVNFRl9JUDcJIyBDUFUgQ29tcGFyZS9Db3VudCBpbnRlcm5hbCB0aW1lcgorCWJuZXoJdDEsIGhhbmRsZV9jcHV0aW1lcl9pcnEKKwlhbmRpCXQxLCB0MCwgQ0FVU0VGX0lQNgkjIFVBUlQgMTY1NTAgcG9ydAorCWJuZXoJdDEsIGhhbmRsZV91YXJ0X2lycQorCWFuZGkJdDEsIHQwLCBDQVVTRUZfSVAzCSMgUENJIElOVF9BCisJYm5legl0MSwgaGFuZGxlX3BjaV9pbnRBX2lycQorCisJLyogd3JvbmcgYWxhcm0gb3IgbWFza2VkIC4uLiAqLworMToJaglzcHVyaW91c19pbnRlcnJ1cHQKKwlub3AKK0VORChoYW5kbGVfSVJRKQorCisJLmFsaWduCTUKK2hhbmRsZV9jcHV0aW1lcl9pcnE6CisJbGkJYTAsIFdSUFBNQ19NSVBTX1RJTUVSX0lSUQorCWphbAlkb19JUlEKKwlqCXJldF9mcm9tX2lycQorCisJLmFsaWduCTUKK2hhbmRsZV91YXJ0X2lycToKKwlsaQlhMCwgV1JQUE1DX1VBUlQxNjU1MF9JUlEKKwlqYWwJZG9fSVJRCisJaglyZXRfZnJvbV9pcnEKKworCS5hbGlnbgk1CitoYW5kbGVfcGNpX2ludEFfaXJxOgorCWxpCWEwLCBXUlBQTUNfUENJX0lOVEFfSVJRCisJamFsCWRvX0lSUQorCWoJcmV0X2Zyb21faXJxCisKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pcnEuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjA1Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL2lycS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBpcnEuYzogR1Q2NDEyMCBJbnRlcnJ1cHQgQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgV2luZCBSaXZlciBTeXN0ZW0gSW5jLgorICogQXV0aG9yOiBSb25na2FpLlpoYW4sIDxyb25na2FpLnpoYW5Ad2luZHJpdmVyLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgorI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CisKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgaGFuZGxlX0lSUSh2b2lkKTsKKworLyoqCisgKiBJbml0aWFsaXplIEdUNjQxMjAgSW50ZXJydXB0IENvbnRyb2xsZXIKKyAqLwordm9pZCBndDY0MTIwX2luaXRfcGljKHZvaWQpCit7CisJLyogY2xlYXIgQ1BVIEludGVycnVwdCBDYXVzZSBSZWdpc3RlcnMgKi8KKwlHVF9XUklURShHVF9JTlRSQ0FVU0VfT0ZTLCAoMHgxRiA8PCAyMSkpOworCUdUX1dSSVRFKEdUX0hJTlRSQ0FVU0VfT0ZTLCAweDAwKTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgZnJvbSBHVDY0MTIwIGJyaWRnZSBjaGlwICovCisJR1RfV1JJVEUoR1RfSU5UUk1BU0tfT0ZTLCAweDAwKTsKKwlHVF9XUklURShHVF9ISU5UUk1BU0tfT0ZTLCAweDAwKTsKKwlHVF9XUklURShHVF9QQ0kwX0lDTUFTS19PRlMsIDB4MDApOworCUdUX1dSSVRFKEdUX1BDSTBfSElDTUFTS19PRlMsIDB4MDApOworfQorCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCit7CisJLyogZW5hYmxlIGFsbCBDUFUgaW50ZXJydXB0IGJpdHMuICovCisJc2V0X2MwX3N0YXR1cyhTVDBfSU0pOwkvKiBJRSBiaXQgaXMgc3RpbGwgMCAqLworCisJLyogSW5zdGFsbCBNSVBTIEludGVycnVwdCBUcmFwIFZlY3RvciAqLworCXNldF9leGNlcHRfdmVjdG9yKDAsIGhhbmRsZV9JUlEpOworCisJLyogSVJRIDAgLSA3IGFyZSBmb3IgTUlQUyBjb21tb24gaXJxX2NwdSBjb250cm9sbGVyICovCisJbWlwc19jcHVfaXJxX2luaXQoMCk7CisKKwlndDY0MTIwX2luaXRfcGljKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvcGNpLmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiZTkzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9wY2kuYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogcGNpLmM6IEdUNjQxMjAgUENJIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCBXaW5kIFJpdmVyIFN5c3RlbSBJbmMuIFJvbmdrYWkuWmhhbiA8cm9uZ2thaS56aGFuQHdpbmRyaXZlci5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vZ3Q2NDEyMC5oPgorCitleHRlcm4gc3RydWN0IHBjaV9vcHMgZ3Q2NDEyMF9wY2lfb3BzOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaTBfaW9fcmVzb3VyY2UgPSB7CisJLm5hbWUgID0gInBjaV8wIGlvIiwKKwkuc3RhcnQgPSBHVF9QQ0lfSU9fQkFTRSwKKwkuZW5kICAgPSBHVF9QQ0lfSU9fQkFTRSArIEdUX1BDSV9JT19TSVpFIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2kwX21lbV9yZXNvdXJjZSA9IHsKKwkubmFtZSAgPSAicGNpXzAgbWVtb3J5IiwKKwkuc3RhcnQgPSBHVF9QQ0lfTUVNX0JBU0UsCisJLmVuZCAgID0gR1RfUENJX01FTV9CQVNFICsgR1RfUENJX01FTV9TSVpFIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZV8wID0geworCS5wY2lfb3BzCT0gJmd0NjQxMjBfcGNpX29wcywKKwkuaW9fcmVzb3VyY2UJPSAmcGNpMF9pb19yZXNvdXJjZSwKKwkubWVtX3Jlc291cmNlCT0gJnBjaTBfbWVtX3Jlc291cmNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ3Q2NDEyMF9wY2lfaW5pdCh2b2lkKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBHVF9SRUFEKEdUX1BDSTBfQ01EX09GUyk7CQkvKiBIdWg/Pz8gLS0gUmFsZiAgKi8KKwl0bXAgPSBHVF9SRUFEKEdUX1BDSTBfQkFSRV9PRlMpOworCisJLyogcmVzZXQgdGhlIHdob2xlIFBDSSBJL08gc3BhY2UgcmFuZ2UgKi8KKwlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSBHVF9QQ0lfSU9fQkFTRTsKKwlpb3BvcnRfcmVzb3VyY2UuZW5kID0gR1RfUENJX0lPX0JBU0UgKyBHVF9QQ0lfSU9fU0laRSAtIDE7CisKKwlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmaG9zZV8wKTsKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChndDY0MTIwX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9yZXNldC5jIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3MDM5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy9yZXNldC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgUmFsZiBCYWVjaGxlCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCit2b2lkIHdycHBtY19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKK3sKKwkvKgorCSAqIE91Y2gsIHdlJ3JlIHN0aWxsIGFsaXZlIC4uLiBUaGlzIHRpbWUgd2UgdGFrZSB0aGUgc2lsdmVyIGJ1bGxldCAuLi4KKwkgKiAuLi4gYW5kIGZpbmQgdGhhdCB3ZSBsZWF2ZSB0aGUgaGFyZHdhcmUgaW4gYSBzdGF0ZSBpbiB3aGljaCB0aGUKKwkgKiBrZXJuZWwgaW4gdGhlIGZsdXNoIGxvY2tzIHVwIHNvbWV3aGVuIGR1cmluZyBvZiBhZnRlciB0aGUgUENJCisJICogZGV0ZWN0aW9uIHN0dWZmLgorCSAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc2V0X2MwX3N0YXR1cyhTVDBfQkVWIHwgU1QwX0VSTCk7CisJY2hhbmdlX2MwX2NvbmZpZyhDT05GX0NNX0NNQVNLLCBDT05GX0NNX1VOQ0FDSEVEKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwl3cml0ZV9jMF93aXJlZCgwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygianJcdCUwIjo6InIiKDB4YmZjMDAwMDApKTsKK30KKwordm9pZCB3cnBwbWNfbWFjaGluZV9oYWx0KHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyXG4iKTsKKwl3aGlsZSAoMSkgeworCQlfX2FzbV9fKAorCQkJIi5zZXRcdG1pcHMzXG5cdCIKKwkJCSJ3YWl0XG5cdCIKKwkJCSIuc2V0XHRtaXBzMCIKKwkJKTsKKwl9Cit9CisKK3ZvaWQgd3JwcG1jX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJd3JwcG1jX21hY2hpbmVfaGFsdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3NldHVwLmMgYi9hcmNoL21pcHMvZ3Q2NDEyMC93cnBwbWMvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM1OTFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3NldHVwLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBzZXR1cC5jOiBTZXR1cCBwb2ludGVycyB0byBoYXJkd2FyZSBkZXBlbmRlbnQgcm91dGluZXMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDA0IGJ5IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgV2luZCBSaXZlciBTeXN0ZW0gSW5jLiBSb25na2FpLnpoYW4gPHJvbmdrYWkuemhhbkB3aW5kcml2ZXIuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CisKK3Vuc2lnbmVkIGxvbmcgZ3Q2NDEyMF9iYXNlID0gS1NFRzFBRERSKDB4MTQwMDAwMDApOworCisjaWZkZWYgV1JQUE1DX0VBUkxZX0RFQlVHCisKK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICogd3JwcG1jX2xlZCA9IFwKKwkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUtTRUcxQUREUihXUlBQTUNfTEVEX0JBU0UpOworCisvKgorICogUFBNQyBMRUQgY29udHJvbCByZWdpc3RlcjoKKyAqIC0pIGJpdFswXSBjb250cm9scyBEUzEgTEVEICgxIC0gT0ZGLCAwIC0gT04pCisgKiAtKSBiaXRbMV0gY29udHJvbHMgRFMyIExFRCAoMSAtIE9GRiwgMCAtIE9OKQorICogLSkgYml0WzJdIGNvbnRyb2xzIERTNCBMRUQgKDEgLSBPRkYsIDAgLSBPTikKKyAqLwordm9pZCB3cnBwbWNfbGVkX29uKGludCBtYXNrKQoreworCXVuc2lnbmVkIGNoYXIgdmFsdWUgPSAqd3JwcG1jX2xlZDsKKworCXZhbHVlICY9ICgweEY4IHwgbWFzayk7CisJKndycHBtY19sZWQgPSB2YWx1ZTsKK30KKworLyogSWYgbWFzayA9IDAsIHR1cm4gb2ZmIGFsbCBMRURzICovCit2b2lkIHdycHBtY19sZWRfb2ZmKGludCBtYXNrKQoreworCXVuc2lnbmVkIGNoYXIgdmFsdWUgPSAqd3JwcG1jX2xlZDsKKworCXZhbHVlIHw9ICgweDcgJiBtYXNrKTsKKwkqd3JwcG1jX2xlZCA9IHZhbHVlOworfQorCisvKgorICogV2UgYXNzdW1lIHRoYXQgYm9vdGxvYWRlciBoYXMgaW5pdGlhbGl6ZWQgVUFSVDE2NTUwIGNvcnJlY3RseQorICovCit2b2lkIF9faW5pdCB3cnBwbWNfZWFybHlfcHV0YyhjaGFyIGNoKQoreworCXN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICp3cnBwbWNfdWFydCA9IFwKKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilLU0VHMUFERFIoV1JQUE1DX1VBUlQxNjU1MF9CQVNFKTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCisJLyogV2FpdCB1bnRpbCBUcmFuc21pdC1Ib2xkaW5nLVJlZ2lzdGVyIGlzIGVtcHR5ICovCisJd2hpbGUgKDEpIHsKKwkJdmFsdWUgPSAqKHdycHBtY191YXJ0ICsgNSk7CisJCWlmICh2YWx1ZSAmIDB4MjApCisJCQlicmVhazsKKwl9CisKKwkqd3JwcG1jX3VhcnQgPSBjaDsKK30KKwordm9pZCBfX2luaXQgd3JwcG1jX2Vhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdGF0aWMgY2hhciBwYnVmWzI1Nl0gPSB7J1wwJywgfTsKKwljaGFyICpjaCA9IHBidWY7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIGludCBpOworCisJbWVtc2V0KHBidWYsIDAsIDI1Nik7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlpID0gdnNwcmludGYocGJ1ZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwkvKiBQcmludCB0aGUgc3RyaW5nICovCisJd2hpbGUgKCpjaCAhPSAnXDAnKSB7CisJCXdycHBtY19lYXJseV9wdXRjKCpjaCk7CisJCS8qIGlmIHByaW50ICdcbicsIGFsc28gcHJpbnQgJ1xyJyAqLworCQlpZiAoKmNoKysgPT0gJ1xuJykKKwkJCXdycHBtY19lYXJseV9wdXRjKCdccicpOworCX0KK30KKyNlbmRpZiAvKiBXUlBQTUNfRUFSTFlfREVCVUcgKi8KKwordW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKK3N0YXRpYyB2b2lkIHdycHBtY19zZXR1cF9zZXJpYWwodm9pZCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0IHVwOworCisJbWVtc2V0KCZ1cCwgMHgwMCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpKTsKKworCS8qCisJICogQSBub3RlIGFib3V0IG1hcGJhc2UvbWVtYmFzZQorCSAqIC0pIG1hcGJhc2UgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIElPIHBvcnQuCisJICogLSkgbWVtYmFzZSBpcyBhbiAnaW9yZW1hcHBlZCcgY29va2llLgorCSAqLworCXVwLmxpbmUgPSAwOworCXVwLnR5cGUgPSBQT1JUXzE2NTUwOworCXVwLmlvdHlwZSA9IFVQSU9fTUVNOworCXVwLm1hcGJhc2UgPSBXUlBQTUNfVUFSVDE2NTUwX0JBU0U7CisJdXAubWVtYmFzZSA9IGlvcmVtYXAodXAubWFwYmFzZSwgOCk7CisJdXAuaXJxID0gV1JQUE1DX1VBUlQxNjU1MF9JUlE7CisJdXAudWFydGNsayA9IFdSUFBNQ19VQVJUMTY1NTBfQ0xPQ0s7CisJdXAuZmxhZ3MgPSBVUEZfU0tJUF9URVNULyogfCBVUEZfQk9PVF9BVVRPQ09ORiAqLzsKKwl1cC5yZWdzaGlmdCA9IDA7CisKKwllYXJseV9zZXJpYWxfc2V0dXAoJnVwKTsKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit7CisJZXh0ZXJuIHZvaWQgd3JwcG1jX3RpbWVfaW5pdCh2b2lkKTsKKwlleHRlcm4gdm9pZCB3cnBwbWNfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqKTsKKwlleHRlcm4gdm9pZCB3cnBwbWNfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpOworCWV4dGVybiB2b2lkIHdycHBtY19tYWNoaW5lX2hhbHQodm9pZCk7CisJZXh0ZXJuIHZvaWQgd3JwcG1jX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpOworCisJX21hY2hpbmVfcmVzdGFydCA9IHdycHBtY19tYWNoaW5lX3Jlc3RhcnQ7CisJX21hY2hpbmVfaGFsdAkgPSB3cnBwbWNfbWFjaGluZV9oYWx0OworCXBtX3Bvd2VyX29mZgkgPSB3cnBwbWNfbWFjaGluZV9wb3dlcl9vZmY7CisKKwkvKiBVc2UgTUlQUyBDb3VudC9Db21wYXJlIFRpbWVyICovCisJYm9hcmRfdGltZV9pbml0ICAgPSB3cnBwbWNfdGltZV9pbml0OworCWJvYXJkX3RpbWVyX3NldHVwID0gd3JwcG1jX3RpbWVyX3NldHVwOworCisJLyogVGhpcyBtYWtlcyB0aGUgb3BlcmF0aW9ucyBvZiAnaW4vb3V0W2J3bF0nIHRvIHRoZQorCSAqIHBoeXNpY2FsIGFkZHJlc3MgKCA8IEtTRUcwKSBjYW4gd29yayB2aWEgS1NFRzEKKwkgKi8KKwlzZXRfaW9fcG9ydF9iYXNlKEtTRUcxKTsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAorCXdycHBtY19zZXR1cF9zZXJpYWwoKTsKKyNlbmRpZgorfQorCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gIldpbmQgUml2ZXIgUFBNQyAoR1Q2NDEyMCkiOworfQorCisvKgorICogSW5pdGlhbGl6ZXMgYmFzaWMgcm91dGluZXMgYW5kIHN0cnVjdHVyZXMgcG9pbnRlcnMsIG1lbW9yeSBzaXplIChhcworICogZ2l2ZW4gYnkgdGhlIGJpb3MgYW5kIHNhdmVzIHRoZSBjb21tYW5kIGxpbmUuCisgKi8KK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCW1pcHNfbWFjaGdyb3VwID0gTUFDSF9HUk9VUF9HQUxJTEVPOworCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0VWNjQxMjBBOworCisJYWRkX21lbW9yeV9yZWdpb24oV1JQUE1DX1NEUkFNX1NDUzBfQkFTRSwgV1JQUE1DX1NEUkFNX1NDUzBfU0laRSwgQk9PVF9NRU1fUkFNKTsKKwlhZGRfbWVtb3J5X3JlZ2lvbihXUlBQTUNfQk9PVFJPTV9CQVNFLCBXUlBQTUNfQk9PVFJPTV9TSVpFLCBCT09UX01FTV9ST01fREFUQSk7CisKKwl3cnBwbWNfZWFybHlfcHJpbnRrKCJwcm9tX2luaXQ6IEdUNjQxMjAgU0RSQU0gQmFuayAwOiAweCV4IC0gMHglMDhseFxuIiwKKwkJCVdSUFBNQ19TRFJBTV9TQ1MwX0JBU0UsIChXUlBQTUNfU0RSQU1fU0NTMF9CQVNFICsgV1JQUE1DX1NEUkFNX1NDUzBfU0laRSkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2d0NjQxMjAvd3JwcG1jL3RpbWUuYyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1ZDIyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy90aW1lLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIHRpbWUuYzogTUlQUyBDUFUgQ291bnQvQ29tcGFyZSB0aW1lciBob29rdXAKKyAqCisgKiBBdXRob3I6IE1hcmsuWmhhbiwgPHJvbmdrYWkuemhhbkB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwNCBieSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtIEluYy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgkvKiBmb3IgSFogKi8KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KKworI2RlZmluZSBXUlBQTUNfQ1BVX0NMS19GUkVRIDQwMDAwMDAwIC8qIDQwTUhaICovCisKK3ZvaWQgX19pbml0IHdycHBtY190aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCit7CisJLyogSW5zdGFsbCBJU1IgZm9yIHRpbWVyIGludGVycnVwdCAqLworCXNldHVwX2lycShXUlBQTUNfTUlQU19USU1FUl9JUlEsIGlycSk7CisKKwkvKiB0byBnZW5lcmF0ZSB0aGUgZmlyc3QgdGltZXIgaW50ZXJydXB0ICovCisJd3JpdGVfYzBfY29tcGFyZShtaXBzX2hwdF9mcmVxdWVuY3kvSFopOworCXdyaXRlX2MwX2NvdW50KDApOworfQorCisvKgorICogRXN0aW1hdGUgQ1BVIGZyZXF1ZW5jeS4gIFNldHMgbWlwc19ocHRfZnJlcXVlbmN5IGFzIGEgc2lkZS1lZmZlY3QKKyAqCisgKiBOT1RFOiBXZSBkaXNhYmxlIGFsbCBHVDY0MTIwIHRpbWVycywgYW5kIHVzZSBNSVBTIHByb2Nlc3NvciBpbnRlcm5hbAorICogdGltZXIgYXMgdGhlIHNvdXJjZSBvZiBrZXJuZWwgY2xvY2sgdGljay4KKyAqLwordm9pZCBfX2luaXQgd3JwcG1jX3RpbWVfaW5pdCh2b2lkKQoreworCS8qIERpc2FibGUgR1Q2NDEyMCB0aW1lcnMgKi8KKwlHVF9XUklURShHVF9UQ19DT05UUk9MX09GUywgMHgwMCk7CisJR1RfV1JJVEUoR1RfVEMwX09GUywgMHgwMCk7CisJR1RfV1JJVEUoR1RfVEMxX09GUywgMHgwMCk7CisJR1RfV1JJVEUoR1RfVEMyX09GUywgMHgwMCk7CisJR1RfV1JJVEUoR1RfVEMzX09GUywgMHgwMCk7CisKKwkvKiBVc2UgTUlQUyBjb21wYXJlL2NvdW50IGludGVybmFsIHRpbWVyICovCisJbWlwc19ocHRfZnJlcXVlbmN5ID0gV1JQUE1DX0NQVV9DTEtfRlJFUTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvZGJnX2lvLmMgYi9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2RiZ19pby5jCmluZGV4IGM0Zjg1MzAuLjZhN2NjYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvZGJnX2lvLmMKKysrIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9kYmdfaW8uYwpAQCAtNzIsNyArNzIsNyBAQAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCVVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwogCi0JLyogc2V0IHVwIGJ1YWQgcmF0ZSAqLworCS8qIHNldCB1cCBiYXVkIHJhdGUgKi8KIAl7CiAJCXVpbnQzMiBkaXZpc29yOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2l0ODE3Ml9zZXR1cC5jIGIvYXJjaC9taXBzL2l0ZS1ib2FyZHMvZ2VuZXJpYy9pdDgxNzJfc2V0dXAuYwppbmRleCBmYzczYzhkLi5kYTZhZTA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaXRlLWJvYXJkcy9nZW5lcmljL2l0ODE3Ml9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9pdGUtYm9hcmRzL2dlbmVyaWMvaXQ4MTcyX3NldHVwLmMKQEAgLTcyLDExICs3MiwyOSBAQAogICAgIHN0cnVjdCByZXNvdXJjZSBmbGFzaDsKICAgICBzdHJ1Y3QgcmVzb3VyY2UgYm9vdDsKIH0gaXQ4MTcyX3Jlc291cmNlcyA9IHsKLSAgICB7ICJSQU0iLCAgICAgICAgICAgMCwgICAgICAgICAgMCwgICAgICAgICAgSU9SRVNPVVJDRV9NRU0gfSwgLyogdG8gYmUgaW5pdHRlZCAqLwotICAgIHsgIlBDSSBNZW0iLCAgICAgICAweDEwMDAwMDAwLCAweDEzRkZGRkZGLCBJT1JFU09VUkNFX01FTSB9LAotICAgIHsgIlBDSSBJL08iLCAgICAgICAweDE0MDAwMDAwLCAweDE3RkZGRkZGICAgICAgICAgICAgICAgICB9LAotICAgIHsgIkZsYXNoIiwgICAgICAgICAweDA4MDAwMDAwLCAweDBDRkZGRkZGICAgICAgICAgICAgICAgICB9LAotICAgIHsgIkJvb3QgUk9NIiwgICAgICAweDFGQzAwMDAwLCAweDFGRkZGRkZGICAgICAgICAgICAgICAgICB9CisJeworCQkuc3RhcnQJPSAwLAkJCQkvKiB0byBiZSBpbml0dGVkICovCisJCS5lbmQJPSAwLAorCQkubmFtZQk9ICJSQU0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTNGRkZGRkYsCisJCS5uYW1lCT0gIlBDSSBNZW0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxNDAwMDAwMCwKKwkJLmVuZAk9IDB4MTdGRkZGRkYKKwkJLm5hbWUJPSAiUENJIEkvTyIsCisJfSwgeworCQkuc3RhcnQJPSAweDA4MDAwMDAwLAorCQkuZW5kCT0gMHgwQ0ZGRkZGRgorCQkubmFtZQk9ICJGbGFzaCIsCisJfSwgeworCQkuc3RhcnQJPSAweDFGQzAwMDAwLAorCQkuZW5kCT0gMHgxRkZGRkZGRgorCQkubmFtZQk9ICJCb290IFJPTSIsCisJfQogfTsKICNlbHNlCiBzdHJ1Y3QgewpAQCAtODksMTQgKzEwNyw0NCBAQAogICAgIHN0cnVjdCByZXNvdXJjZSBmbGFzaDsKICAgICBzdHJ1Y3QgcmVzb3VyY2UgYm9vdDsKIH0gaXQ4MTcyX3Jlc291cmNlcyA9IHsKLSAgICB7ICJSQU0iLCAgICAgICAgICAgMCwgICAgICAgICAgMCwgICAgICAgICAgSU9SRVNPVVJDRV9NRU0gfSwgLyogdG8gYmUgaW5pdHRlZCAqLwotICAgIHsgIlBDSSBNZW0wIiwgICAgICAweDBDMDAwMDAwLCAweDBGRkZGRkZGLCBJT1JFU09VUkNFX01FTSB9LAotICAgIHsgIlBDSSBNZW0xIiwgICAgICAweDEwMDAwMDAwLCAweDEzRkZGRkZGLCBJT1JFU09VUkNFX01FTSB9LAotICAgIHsgIlBDSSBJL08iLCAgICAgICAweDE0MDAwMDAwLCAweDE3RkZGRkZGICAgICAgICAgICAgICAgICB9LAotICAgIHsgIlBDSSBNZW0yIiwgICAgICAweDFBMDAwMDAwLCAweDFCRkZGRkZGLCBJT1JFU09VUkNFX01FTSB9LAotICAgIHsgIlBDSSBNZW0zIiwgICAgICAweDFDMDAwMDAwLCAweDFGQkZGRkZGLCBJT1JFU09VUkNFX01FTSB9LAotICAgIHsgIkZsYXNoIiwgICAgICAgICAweDA4MDAwMDAwLCAweDBDRkZGRkZGICAgICAgICAgICAgICAgICB9LAotICAgIHsgIkJvb3QgUk9NIiwgICAgICAweDFGQzAwMDAwLCAweDFGRkZGRkZGICAgICAgICAgICAgICAgICB9CisJeworCQkuc3RhcnQJPSAwLAkJCQkvKiB0byBiZSBpbml0dGVkICovCisJCS5lbmQJPSAwLAorCQkubmFtZQk9ICJSQU0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgwQzAwMDAwMCwKKwkJLmVuZAk9IDB4MEZGRkZGRkYsCisJCS5uYW1lCT0gIlBDSSBNZW0wIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwkgfSwgeworCQkuc3RhcnQJPSAweDEwMDAwMDAwLAorCQkuZW5kCT0gMHgxM0ZGRkZGRiwKKwkJLm5hbWUJPSAiUENJIE1lbTEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCSB9LCB7CisJCS5zdGFydAk9IDB4MTQwMDAwMDAsCisJCS5lbmQJPSAweDE3RkZGRkZGCisJCS5uYW1lCT0gIlBDSSBJL08iLAorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxQTAwMDAwMCwKKwkJLmVuZAk9IDB4MUJGRkZGRkYsCisJCS5uYW1lCT0gIlBDSSBNZW0yIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IDB4MUMwMDAwMDAsCisJCS5lbmQJPSAweDFGQkZGRkZGLAorCQkubmFtZQk9ICJQQ0kgTWVtMyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwgeworCQkuc3RhcnQJPSAweDA4MDAwMDAwLAorCQkuZW5kCT0gMHgwQ0ZGRkZGRgorCQkubmFtZQk9ICJGbGFzaCIsCisJfSwgeworCQkuc3RhcnQJPSAweDFGQzAwMDAwLAorCQkuZW5kCT0gMHgxRkZGRkZGRgorCQkubmFtZQk9ICJCb290IFJPTSIsCisJfQogfTsKICNlbmRpZgogCkBAIC0xMDYsNyArMTU0LDcgQEAKIAlpdDgxNzJfcmVzb3VyY2VzLnJhbS5lbmQgPSBtZW1zaXplOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIHNob3J0IGRzcjsKIAljaGFyICphcmdwdHI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9zZXR1cC5jIGIvYXJjaC9taXBzL2phenovc2V0dXAuYwppbmRleCA0MDM2ZGM0Li5jOGQwZGY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L3NldHVwLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAl7ICJkbWEyIiwgMHhjMCwgMHhkZiwgSU9SRVNPVVJDRV9CVVNZIH0sCiB9OwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvam1yMzkyNy9yYmhtYTMxMDAvc2V0dXAuYyBiL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9zZXR1cC5jCmluZGV4IDkzNTljYzQuLjMwOGU2Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9zZXR1cC5jCkBAIC04MiwxNyArODIsNTQgQEAKICAgICBzdHJ1Y3QgcmVzb3VyY2Ugc2lvMDsKICAgICBzdHJ1Y3QgcmVzb3VyY2Ugc2lvMTsKIH0gam1yMzkyN19yZXNvdXJjZXMgPSB7Ci0gICAgeyAiUkFNMCIsICAgICAgICAgICAwLCAgICAgICAgIDB4MDFGRkZGRkYsICBJT1JFU09VUkNFX01FTSB9LAotICAgIHsgIlJBTTEiLCAgICAgICAgICAweDAyMDAwMDAwLCAweDAzRkZGRkZGLCAgSU9SRVNPVVJDRV9NRU0gfSwKLSAgICB7ICJQQ0lNRU0iLCAgICAgICAgMHgwODAwMDAwMCwgMHgwN0ZGRkZGRiwgIElPUkVTT1VSQ0VfTUVNIH0sCi0gICAgeyAiSU9CIiwgICAgICAgICAgIDB4MTAwMDAwMDAsIDB4MTNGRkZGRkYgICAgICAgICAgICAgICAgICB9LAotICAgIHsgIklPQyIsICAgICAgICAgICAweDE0MDAwMDAwLCAweDE0RkZGRkZGICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJQQ0lJTyIsICAgICAgICAgMHgxNTAwMDAwMCwgMHgxNUZGRkZGRiAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAiSk1ZMTM5NCIsICAgICAgIDB4MUQwMDAwMDAsIDB4MUQzRkZGRkYgICAgICAgICAgICAgICAgICB9LAotICAgIHsgIlJPTTEiLCAgICAgICAgICAweDFFMDAwMDAwLCAweDFFM0ZGRkZGICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICJST00wIiwgICAgICAgICAgMHgxRkMwMDAwMCwgMHgxRkZGRkZGRiAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAiU0lPMCIsICAgICAgICAgIDB4RkZGRUYzMDAsIDB4RkZGRUYzRkYgICAgICAgICAgICAgICAgICB9LAotICAgIHsgIlNJTzEiLCAgICAgICAgICAweEZGRkVGNDAwLCAweEZGRkVGNEZGICAgICAgICAgICAgICAgICAgfSwKKwl7CisJCS5zdGFydAk9IDAsCisJCS5lbmQJPSAweDAxRkZGRkZGLAorCQkubmFtZQk9ICJSQU0wIiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IDB4MDIwMDAwMDAsCisJCS5lbmQJPSAweDAzRkZGRkZGLAorCQkubmFtZQk9ICJSQU0xIiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IDB4MDgwMDAwMDAsCisJCS5lbmQJPSAweDA3RkZGRkZGLAorCQkubmFtZQk9ICJQQ0lNRU0iLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTNGRkZGRkYsCisJCS5uYW1lCT0gIklPQiIKKwl9LCB7CisJCS5zdGFydAk9IDB4MTQwMDAwMDAsCisJCS5lbmQJPSAweDE0RkZGRkZGLAorCQkubmFtZQk9ICJJT0MiCisJfSwgeworCQkuc3RhcnQJPSAweDE1MDAwMDAwLAorCQkuZW5kCT0gMHgxNUZGRkZGRiwKKwkJLm5hbWUJPSAiUENJSU8iCisJfSwgeworCQkuc3RhcnQJPSAweDFEMDAwMDAwLAorCQkuZW5kCT0gMHgxRDNGRkZGRiwKKwkJLm5hbWUJPSAiSk1ZMTM5NCIKKwl9LCB7CisJCS5zdGFydAk9IDB4MUUwMDAwMDAsCisJCS5lbmQJPSAweDFFM0ZGRkZGLAorCQkubmFtZQk9ICJST00xIgorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxRkMwMDAwMCwKKwkJLmVuZAk9IDB4MUZGRkZGRkYsCisJCS5uYW1lCT0gIlJPTTAiCisJfSwgeworCQkuc3RhcnQJPSAweEZGRkVGMzAwLAorCQkuZW5kCT0gMHhGRkZFRjNGRiwKKwkJLm5hbWUJPSAiU0lPMCIKKwl9LCB7CisJCS5zdGFydAk9IDB4RkZGRUY0MDAsCisJCS5lbmQJPSAweEZGRkVGNEZGLAorCQkubmFtZQk9ICJTSU8xIgorCX0sCiB9OwogCiAvKiBkb24ndCBlbmFibGUgLSBzZWUgZXJyYXRhICovCkBAIC0yMDEsNyArMjM4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgcGNpX2lvX3Jlc291cmNlOwogZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWNoYXIgKmFyZ3B0cjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMzRlOGEyNS4uODgxYzQ2NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC0xMyw2ICsxMyw4IEBACiAKIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbWlwc19rc3ltcy5vIG1vZHVsZS5vCiAKK29iai0kKENPTkZJR19BUE0pCQkrPSBhcG0ubworCiBvYmotJChDT05GSUdfQ1BVX1IzMDAwKQkJKz0gcjIzMDBfZnB1Lm8gcjIzMDBfc3dpdGNoLm8KIG9iai0kKENPTkZJR19DUFVfVFgzOVhYKQkrPSByMjMwMF9mcHUubyByMjMwMF9zd2l0Y2gubwogb2JqLSQoQ09ORklHX0NQVV9UWDQ5WFgpCSs9IHI0a19mcHUubyByNGtfc3dpdGNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXBtLmMgYi9hcmNoL21pcHMva2VybmVsL2FwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjQ2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL2FwbS5jCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICogYmlvcy1sZXNzIEFQTSBkcml2ZXIgZm9yIE1JUFMgTGludXgKKyAqICBKYW1leSBIaWNrcyA8amFtZXlAY3JsLmRlYy5jb20+CisgKiAgYWRhcHRlZCBmcm9tIHRoZSBBUE0gQklPUyBkcml2ZXIgZm9yIExpbnV4IGJ5IFN0ZXBoZW4gUm90aHdlbGwgKHNmckBsaW51eGNhcmUuY29tKQorICoKKyAqIEFQTSAxLjIgUmVmZXJlbmNlOgorICogICBJbnRlbCBDb3Jwb3JhdGlvbiwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50CisgKiAgIChBUE0pIEJJT1MgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24sIFJldmlzaW9uIDEuMiwgRmVicnVhcnkgMTk5Ni4KKyAqCisgKiBbVGhpcyBkb2N1bWVudCBpcyBhdmFpbGFibGUgZnJvbSBNaWNyb3NvZnQgYXQ6CisgKiAgICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vaHdkZXYvYnVzYmlvcy9hbXBfMTIuaHRtXQorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCisjaW5jbHVkZSA8YXNtL2FwbS5oPiAvKiBhcG1fcG93ZXJfaW5mbyAqLworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworLyoKKyAqIFRoZSBhcG1fYmlvcyBkZXZpY2UgaXMgb25lIG9mIHRoZSBtaXNjIGNoYXIgZGV2aWNlcy4KKyAqIFRoaXMgaXMgaXRzIG1pbm9yIG51bWJlci4KKyAqLworI2RlZmluZSBBUE1fTUlOT1JfREVWCTEzNAorCisvKgorICogU2VlIERvY3VtZW50YXRpb24vQ29uZmlnLmhlbHAgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisgKgorICogVmFyaW91cyBvcHRpb25zIGNhbiBiZSBjaGFuZ2VkIGF0IGJvb3QgdGltZSBhcyBmb2xsb3dzOgorICogKFdlIGFsbG93IHVuZGVyc2NvcmVzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG1vZHVsZXMgY29kZSkKKyAqCWFwbT1vbi9vZmYJCQllbmFibGUvZGlzYWJsZSBBUE0KKyAqLworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHN0b3JlZAorICovCisjZGVmaW5lIEFQTV9NQVhfRVZFTlRTCQkxNgorCitzdHJ1Y3QgYXBtX3F1ZXVlIHsKKwl1bnNpZ25lZCBpbnQJCWV2ZW50X2hlYWQ7CisJdW5zaWduZWQgaW50CQlldmVudF90YWlsOworCWFwbV9ldmVudF90CQlldmVudHNbQVBNX01BWF9FVkVOVFNdOworfTsKKworLyoKKyAqIFRoZSBwZXItZmlsZSBBUE0gZGF0YQorICovCitzdHJ1Y3QgYXBtX3VzZXIgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKworCXVuc2lnbmVkIGludAkJc3VzZXI6IDE7CisJdW5zaWduZWQgaW50CQl3cml0ZXI6IDE7CisJdW5zaWduZWQgaW50CQlyZWFkZXI6IDE7CisKKwlpbnQJCQlzdXNwZW5kX3Jlc3VsdDsKKwl1bnNpZ25lZCBpbnQJCXN1c3BlbmRfc3RhdGU7CisjZGVmaW5lIFNVU1BFTkRfTk9ORQkwCQkvKiBubyBzdXNwZW5kIHBlbmRpbmcgKi8KKyNkZWZpbmUgU1VTUEVORF9QRU5ESU5HCTEJCS8qIHN1c3BlbmQgcGVuZGluZyByZWFkICovCisjZGVmaW5lIFNVU1BFTkRfUkVBRAkyCQkvKiBzdXNwZW5kIHJlYWQsIHBlbmRpbmcgYWNrICovCisjZGVmaW5lIFNVU1BFTkRfQUNLRUQJMwkJLyogc3VzcGVuZCBhY2tlZCAqLworI2RlZmluZSBTVVNQRU5EX0RPTkUJNAkJLyogc3VzcGVuZCBjb21wbGV0ZWQgKi8KKworCXN0cnVjdCBhcG1fcXVldWUJcXVldWU7Cit9OworCisvKgorICogTG9jYWwgdmFyaWFibGVzCisgKi8KK3N0YXRpYyBpbnQgc3VzcGVuZHNfcGVuZGluZzsKK3N0YXRpYyBpbnQgYXBtX2Rpc2FibGVkOworc3RhdGljIGludCBtaXBzX2FwbV9hY3RpdmU7CisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhcG1fd2FpdHF1ZXVlKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhcG1fc3VzcGVuZF93YWl0cXVldWUpOworCisvKgorICogVGhpcyBpcyBhIGxpc3Qgb2YgZXZlcnlvbmUgd2hvIGhhcyBvcGVuZWQgL2Rldi9hcG1fYmlvcworICovCitzdGF0aWMgREVDTEFSRV9SV1NFTSh1c2VyX2xpc3RfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGFwbV91c2VyX2xpc3QpOworCisvKgorICoga2FwbWQgaW5mby4gIGthcG1kIHByb3ZpZGVzIHVzIGEgcHJvY2VzcyBjb250ZXh0IHRvIGhhbmRsZQorICogIkFQTSIgZXZlbnRzIHdpdGhpbiAtIHNwZWNpZmljYWxseSBuZWNlc3NhcnkgaWYgd2UncmUgZ29pbmcKKyAqIHRvIGJlIHN1c3BlbmRpbmcgdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGthcG1kX3dhaXQpOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihrYXBtZF9leGl0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2FwbWRfcXVldWVfbG9jayk7CitzdGF0aWMgc3RydWN0IGFwbV9xdWV1ZSBrYXBtZF9xdWV1ZTsKKworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfdmVyc2lvbltdID0gIjEuMTMiOwkvKiBubyBzcGFjZXMgKi8KKworCisKKy8qCisgKiBDb21wYXRpYmlsaXR5IGNydWZ0IHVudGlsIHRoZSBJUEFRIHBlb3BsZSBtb3ZlIG92ZXIgdG8gdGhlIG5ldworICogaW50ZXJmYWNlLgorICovCitzdGF0aWMgdm9pZCBfX2FwbV9nZXRfcG93ZXJfc3RhdHVzKHN0cnVjdCBhcG1fcG93ZXJfaW5mbyAqaW5mbykKK3sKK30KKworLyoKKyAqIFRoaXMgYWxsb3dzIG1hY2hpbmVzIHRvIHByb3ZpZGUgdGhlaXIgb3duICJhcG0gZ2V0IHBvd2VyIHN0YXR1cyIgZnVuY3Rpb24uCisgKi8KK3ZvaWQgKCphcG1fZ2V0X3Bvd2VyX3N0YXR1cykoc3RydWN0IGFwbV9wb3dlcl9pbmZvICopID0gX19hcG1fZ2V0X3Bvd2VyX3N0YXR1czsKK0VYUE9SVF9TWU1CT0woYXBtX2dldF9wb3dlcl9zdGF0dXMpOworCisKKy8qCisgKiBBUE0gZXZlbnQgcXVldWUgbWFuYWdlbWVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcXVldWVfZW1wdHkoc3RydWN0IGFwbV9xdWV1ZSAqcSkKK3sKKwlyZXR1cm4gcS0+ZXZlbnRfaGVhZCA9PSBxLT5ldmVudF90YWlsOworfQorCitzdGF0aWMgaW5saW5lIGFwbV9ldmVudF90IHF1ZXVlX2dldF9ldmVudChzdHJ1Y3QgYXBtX3F1ZXVlICpxKQoreworCXEtPmV2ZW50X3RhaWwgPSAocS0+ZXZlbnRfdGFpbCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJcmV0dXJuIHEtPmV2ZW50c1txLT5ldmVudF90YWlsXTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfYWRkX2V2ZW50KHN0cnVjdCBhcG1fcXVldWUgKnEsIGFwbV9ldmVudF90IGV2ZW50KQoreworCXEtPmV2ZW50X2hlYWQgPSAocS0+ZXZlbnRfaGVhZCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJaWYgKHEtPmV2ZW50X2hlYWQgPT0gcS0+ZXZlbnRfdGFpbCkgeworCQlzdGF0aWMgaW50IG5vdGlmaWVkOworCisJCWlmIChub3RpZmllZCsrID09IDApCisJCSAgICBwcmludGsoS0VSTl9FUlIgImFwbTogYW4gZXZlbnQgcXVldWUgb3ZlcmZsb3dlZFxuIik7CisJCXEtPmV2ZW50X3RhaWwgPSAocS0+ZXZlbnRfdGFpbCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJfQorCXEtPmV2ZW50c1txLT5ldmVudF9oZWFkXSA9IGV2ZW50OworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9ldmVudF9vbmVfdXNlcihzdHJ1Y3QgYXBtX3VzZXIgKmFzLCBhcG1fZXZlbnRfdCBldmVudCkKK3sKKwlpZiAoYXMtPnN1c2VyICYmIGFzLT53cml0ZXIpIHsKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIEFQTV9TWVNfU1VTUEVORDoKKwkJY2FzZSBBUE1fVVNFUl9TVVNQRU5EOgorCQkJLyoKKwkJCSAqIElmIHRoaXMgdXNlciBhbHJlYWR5IGhhcyBhIHN1c3BlbmQgcGVuZGluZywKKwkJCSAqIGRvbid0IHF1ZXVlIGFub3RoZXIgb25lLgorCQkJICovCisJCQlpZiAoYXMtPnN1c3BlbmRfc3RhdGUgIT0gU1VTUEVORF9OT05FKQorCQkJCXJldHVybjsKKworCQkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX1BFTkRJTkc7CisJCQlzdXNwZW5kc19wZW5kaW5nKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlxdWV1ZV9hZGRfZXZlbnQoJmFzLT5xdWV1ZSwgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9ldmVudChhcG1fZXZlbnRfdCBldmVudCwgc3RydWN0IGFwbV91c2VyICpzZW5kZXIpCit7CisJc3RydWN0IGFwbV91c2VyICphczsKKworCWRvd25fcmVhZCgmdXNlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXMsICZhcG1fdXNlcl9saXN0LCBsaXN0KSB7CisJCWlmIChhcyAhPSBzZW5kZXIgJiYgYXMtPnJlYWRlcikKKwkJCXF1ZXVlX2V2ZW50X29uZV91c2VyKGFzLCBldmVudCk7CisJfQorCXVwX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwbV93YWl0cXVldWUpOworfQorCitzdGF0aWMgdm9pZCBhcG1fc3VzcGVuZCh2b2lkKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXM7CisJaW50IGVyciA9IHBtX3N1c3BlbmQoUE1fU1VTUEVORF9NRU0pOworCisJLyoKKwkgKiBBbnlvbmUgb24gdGhlIEFQTSBxdWV1ZXMgd2lsbCB0aGluayB3ZSdyZSBzdGlsbCBzdXNwZW5kZWQuCisJICogU2VuZCBhIG1lc3NhZ2Ugc28gZXZlcnlvbmUga25vd3Mgd2UncmUgbm93IGF3YWtlIGFnYWluLgorCSAqLworCXF1ZXVlX2V2ZW50KEFQTV9OT1JNQUxfUkVTVU1FLCBOVUxMKTsKKworCS8qCisJICogRmluYWxseSwgd2FrZSB1cCBhbnlvbmUgd2hvIGlzIHNsZWVwaW5nIG9uIHRoZSBzdXNwZW5kLgorCSAqLworCWRvd25fcmVhZCgmdXNlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXMsICZhcG1fdXNlcl9saXN0LCBsaXN0KSB7CisJCWFzLT5zdXNwZW5kX3Jlc3VsdCA9IGVycjsKKwkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX0RPTkU7CisJfQorCXVwX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKworCXdha2VfdXAoJmFwbV9zdXNwZW5kX3dhaXRxdWV1ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwbV9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFwbV91c2VyICphcyA9IGZwLT5wcml2YXRlX2RhdGE7CisJYXBtX2V2ZW50X3QgZXZlbnQ7CisJaW50IGkgPSBjb3VudCwgcmV0ID0gMDsKKworCWlmIChjb3VudCA8IHNpemVvZihhcG1fZXZlbnRfdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHF1ZXVlX2VtcHR5KCZhcy0+cXVldWUpICYmIGZwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJcmV0dXJuIC1FQUdBSU47CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYXBtX3dhaXRxdWV1ZSwgIXF1ZXVlX2VtcHR5KCZhcy0+cXVldWUpKTsKKworCXdoaWxlICgoaSA+PSBzaXplb2YoZXZlbnQpKSAmJiAhcXVldWVfZW1wdHkoJmFzLT5xdWV1ZSkpIHsKKwkJZXZlbnQgPSBxdWV1ZV9nZXRfZXZlbnQoJmFzLT5xdWV1ZSk7CisKKwkJcmV0ID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZldmVudCwgc2l6ZW9mKGV2ZW50KSkpCisJCQlicmVhazsKKworCQlpZiAoZXZlbnQgPT0gQVBNX1NZU19TVVNQRU5EIHx8IGV2ZW50ID09IEFQTV9VU0VSX1NVU1BFTkQpCisJCQlhcy0+c3VzcGVuZF9zdGF0ZSA9IFNVU1BFTkRfUkVBRDsKKworCQlidWYgKz0gc2l6ZW9mKGV2ZW50KTsKKwkJaSAtPSBzaXplb2YoZXZlbnQpOworCX0KKworCWlmIChpIDwgY291bnQpCisJCXJldCA9IGNvdW50IC0gaTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXBtX3BvbGwoc3RydWN0IGZpbGUgKmZwLCBwb2xsX3RhYmxlICogd2FpdCkKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzID0gZnAtPnByaXZhdGVfZGF0YTsKKworCXBvbGxfd2FpdChmcCwgJmFwbV93YWl0cXVldWUsIHdhaXQpOworCXJldHVybiBxdWV1ZV9lbXB0eSgmYXMtPnF1ZXVlKSA/IDAgOiBQT0xMSU4gfCBQT0xMUkROT1JNOworfQorCisvKgorICogYXBtX2lvY3RsIC0gaGFuZGxlIEFQTSBpb2N0bAorICoKKyAqIEFQTV9JT0NfU1VTUEVORAorICogICBUaGlzIElPQ1RMIGlzIG92ZXJsb2FkZWQsIGFuZCBwZXJmb3JtcyB0d28gZnVuY3Rpb25zLiAgSXQgaXMgdXNlZCB0bzoKKyAqICAgICAtIGluaXRpYXRlIGEgc3VzcGVuZAorICogICAgIC0gYWNrbm93bGVkZ2UgYSBzdXNwZW5kIHJlYWQgZnJvbSAvZGV2L2FwbV9iaW9zLgorICogICBPbmx5IHdoZW4gZXZlcnlvbmUgd2hvIGhhcyBvcGVuZWQgL2Rldi9hcG1fYmlvcyB3aXRoIHdyaXRlIHBlcm1pc3Npb24KKyAqICAgaGFzIGFja25vd2xlZGdlIGRvZXMgdGhlIGFjdHVhbCBzdXNwZW5kIGhhcHBlbi4KKyAqLworc3RhdGljIGludAorYXBtX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXMgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmICghYXMtPnN1c2VyIHx8ICFhcy0+d3JpdGVyKQorCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEFQTV9JT0NfU1VTUEVORDoKKwkJYXMtPnN1c3BlbmRfcmVzdWx0ID0gLUVJTlRSOworCisJCWlmIChhcy0+c3VzcGVuZF9zdGF0ZSA9PSBTVVNQRU5EX1JFQUQpIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSByZWFkIGEgc3VzcGVuZCBjb21tYW5kIGZyb20gL2Rldi9hcG1fYmlvcywKKwkJCSAqIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQVBNX0lPQ19TVVNQRU5EIGlvY3RsIGlzCisJCQkgKiBpbnRlcnByZXRlZCBhcyBhbiBhY2tub3dsZWRnZS4KKwkJCSAqLworCQkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX0FDS0VEOworCQkJc3VzcGVuZHNfcGVuZGluZy0tOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSBpdCBpcyBhIHJlcXVlc3QgdG8gc3VzcGVuZCB0aGUgc3lzdGVtLgorCQkJICogUXVldWUgYW4gZXZlbnQgZm9yIGFsbCByZWFkZXJzLCBhbmQgZXhwZWN0IGFuCisJCQkgKiBhY2tub3dsZWRnZSBmcm9tIGFsbCB3cml0ZXJzIHdobyBoYXZlbid0IGFscmVhZHkKKwkJCSAqIGFja25vd2xlZGdlZC4KKwkJCSAqLworCQkJcXVldWVfZXZlbnQoQVBNX1VTRVJfU1VTUEVORCwgYXMpOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgYWNrbm93bGVkZ2VzIHJlcXVpcmVkLCBzdXNwZW5kCisJCSAqIHRoZSBzeXN0ZW0uCisJCSAqLworCQlpZiAoc3VzcGVuZHNfcGVuZGluZyA9PSAwKQorCQkJYXBtX3N1c3BlbmQoKTsKKworCQkvKgorCQkgKiBXYWl0IGZvciB0aGUgc3VzcGVuZC9yZXN1bWUgdG8gY29tcGxldGUuICBJZiB0aGVyZSBhcmUKKwkJICogcGVuZGluZyBhY2tub3dsZWRnZXMsIHdlIHdhaXQgaGVyZSBmb3IgdGhlbS4KKwkJICoKKwkJICogTm90ZSB0aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIFBNIHN1YnN5c3RlbSBkb2VzCisJCSAqIG5vdCBraWNrIHVzIG91dCBvZiB0aGUgd2FpdCB3aGVuIGl0IHN1c3BlbmRzIHRoZSB0aHJlYWRzLgorCQkgKi8KKwkJZmxhZ3MgPSBjdXJyZW50LT5mbGFnczsKKwkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisKKwkJLyoKKwkJICogTm90ZTogZG8gbm90IGFsbG93IGEgdGhyZWFkIHdoaWNoIGlzIGFja2luZyB0aGUgc3VzcGVuZAorCQkgKiB0byBlc2NhcGUgdW50aWwgdGhlIHJlc3VtZSBpcyBjb21wbGV0ZS4KKwkJICovCisJCWlmIChhcy0+c3VzcGVuZF9zdGF0ZSA9PSBTVVNQRU5EX0FDS0VEKQorCQkJd2FpdF9ldmVudChhcG1fc3VzcGVuZF93YWl0cXVldWUsCisJCQkJCSBhcy0+c3VzcGVuZF9zdGF0ZSA9PSBTVVNQRU5EX0RPTkUpOworCQllbHNlCisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlLAorCQkJCQkgYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9ET05FKTsKKworCQljdXJyZW50LT5mbGFncyA9IGZsYWdzOworCQllcnIgPSBhcy0+c3VzcGVuZF9yZXN1bHQ7CisJCWFzLT5zdXNwZW5kX3N0YXRlID0gU1VTUEVORF9OT05FOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFwbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IGFwbV91c2VyICphcyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJZG93bl93cml0ZSgmdXNlcl9saXN0X2xvY2spOworCWxpc3RfZGVsKCZhcy0+bGlzdCk7CisJdXBfd3JpdGUoJnVzZXJfbGlzdF9sb2NrKTsKKworCS8qCisJICogV2UgYXJlIG5vdyB1bmhvb2tlZCBmcm9tIHRoZSBjaGFpbi4gIEFzIGZhciBhcyBuZXcKKwkgKiBldmVudHMgYXJlIGNvbmNlcm5lZCwgd2Ugbm8gbG9uZ2VyIGV4aXN0LiAgSG93ZXZlciwgd2UKKwkgKiBuZWVkIHRvIGJhbGFuY2Ugc3VzcGVuZHNfcGVuZGluZywgd2hpY2ggbWVhbnMgdGhlCisJICogcG9zc2liaWxpdHkgb2Ygc2xlZXBpbmcuCisJICovCisJaWYgKGFzLT5zdXNwZW5kX3N0YXRlICE9IFNVU1BFTkRfTk9ORSkgeworCQlzdXNwZW5kc19wZW5kaW5nIC09IDE7CisJCWlmIChzdXNwZW5kc19wZW5kaW5nID09IDApCisJCQlhcG1fc3VzcGVuZCgpOworCX0KKworCWtmcmVlKGFzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcG1fb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXM7CisKKwlhcyA9IChzdHJ1Y3QgYXBtX3VzZXIgKilremFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXMpIHsKKwkJLyoKKwkJICogWFhYIC0gdGhpcyBpcyBhIHRpbnkgYml0IGJyb2tlbiwgd2hlbiB3ZSBjb25zaWRlciBCU0QKKwkJICogcHJvY2VzcyBhY2NvdW50aW5nLiBJZiB0aGUgZGV2aWNlIGlzIG9wZW5lZCBieSByb290LCB3ZQorCQkgKiBpbnN0YW50bHkgZmxhZyB0aGF0IHdlIHVzZWQgc3VwZXJ1c2VyIHByaXZzLiBXaG8ga25vd3MsCisJCSAqIHdlIG1pZ2h0IGNsb3NlIHRoZSBkZXZpY2UgaW1tZWRpYXRlbHkgd2l0aG91dCBkb2luZyBhCisJCSAqIHByaXZpbGVnZWQgb3BlcmF0aW9uIC0tIGNldmFucworCQkgKi8KKwkJYXMtPnN1c2VyID0gY2FwYWJsZShDQVBfU1lTX0FETUlOKTsKKwkJYXMtPndyaXRlciA9IChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgPT0gRk1PREVfV1JJVEU7CisJCWFzLT5yZWFkZXIgPSAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPT0gRk1PREVfUkVBRDsKKworCQlkb3duX3dyaXRlKCZ1c2VyX2xpc3RfbG9jayk7CisJCWxpc3RfYWRkKCZhcy0+bGlzdCwgJmFwbV91c2VyX2xpc3QpOworCQl1cF93cml0ZSgmdXNlcl9saXN0X2xvY2spOworCisJCWZpbHAtPnByaXZhdGVfZGF0YSA9IGFzOworCX0KKworCXJldHVybiBhcyA/IDAgOiAtRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcG1fYmlvc19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBhcG1fcmVhZCwKKwkucG9sbAkJPSBhcG1fcG9sbCwKKwkuaW9jdGwJCT0gYXBtX2lvY3RsLAorCS5vcGVuCQk9IGFwbV9vcGVuLAorCS5yZWxlYXNlCT0gYXBtX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgYXBtX2RldmljZSA9IHsKKwkubWlub3IJCT0gQVBNX01JTk9SX0RFViwKKwkubmFtZQkJPSAiYXBtX2Jpb3MiLAorCS5mb3BzCQk9ICZhcG1fYmlvc19mb3BzCit9OworCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworLyoKKyAqIEFyZ3VtZW50cywgd2l0aCBzeW1ib2xzIGZyb20gbGludXgvYXBtX2Jpb3MuaC4KKyAqCisgKiAgIDApIExpbnV4IGRyaXZlciB2ZXJzaW9uICh0aGlzIHdpbGwgY2hhbmdlIGlmIGZvcm1hdCBjaGFuZ2VzKQorICogICAxKSBBUE0gQklPUyBWZXJzaW9uLiAgVXN1YWxseSAxLjAsIDEuMSBvciAxLjIuCisgKiAgIDIpIEFQTSBmbGFncyBmcm9tIEFQTSBJbnN0YWxsYXRpb24gQ2hlY2sgKDB4MDApOgorICoJYml0IDA6IEFQTV8xNl9CSVRfU1VQUE9SVAorICoJYml0IDE6IEFQTV8zMl9CSVRfU1VQUE9SVAorICoJYml0IDI6IEFQTV9JRExFX1NMT1dTX0NMT0NLCisgKgliaXQgMzogQVBNX0JJT1NfRElTQUJMRUQKKyAqCWJpdCA0OiBBUE1fQklPU19ESVNFTkdBR0VECisgKiAgIDMpIEFDIGxpbmUgc3RhdHVzCisgKgkweDAwOiBPZmYtbGluZQorICoJMHgwMTogT24tbGluZQorICoJMHgwMjogT24gYmFja3VwIHBvd2VyIChCSU9TID49IDEuMSBvbmx5KQorICoJMHhmZjogVW5rbm93bgorICogICA0KSBCYXR0ZXJ5IHN0YXR1cworICoJMHgwMDogSGlnaAorICoJMHgwMTogTG93CisgKgkweDAyOiBDcml0aWNhbAorICoJMHgwMzogQ2hhcmdpbmcKKyAqCTB4MDQ6IFNlbGVjdGVkIGJhdHRlcnkgbm90IHByZXNlbnQgKEJJT1MgPj0gMS4yIG9ubHkpCisgKgkweGZmOiBVbmtub3duCisgKiAgIDUpIEJhdHRlcnkgZmxhZworICoJYml0IDA6IEhpZ2gKKyAqCWJpdCAxOiBMb3cKKyAqCWJpdCAyOiBDcml0aWNhbAorICoJYml0IDM6IENoYXJnaW5nCisgKgliaXQgNzogTm8gc3lzdGVtIGJhdHRlcnkKKyAqCTB4ZmY6IFVua25vd24KKyAqICAgNikgUmVtYWluaW5nIGJhdHRlcnkgbGlmZSAocGVyY2VudGFnZSBvZiBjaGFyZ2UpOgorICoJMC0xMDA6IHZhbGlkCisgKgktMTogVW5rbm93bgorICogICA3KSBSZW1haW5pbmcgYmF0dGVyeSBsaWZlICh0aW1lIHVuaXRzKToKKyAqCU51bWJlciBvZiByZW1haW5pbmcgbWludXRlcyBvciBzZWNvbmRzCisgKgktMTogVW5rbm93bgorICogICA4KSBtaW4gPSBtaW51dGVzOyBzZWMgPSBzZWNvbmRzCisgKi8KK3N0YXRpYyBpbnQgYXBtX2dldF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBhcG1fcG93ZXJfaW5mbyBpbmZvOworCWNoYXIgKnVuaXRzOworCWludCByZXQ7CisKKwlpbmZvLmFjX2xpbmVfc3RhdHVzID0gMHhmZjsKKwlpbmZvLmJhdHRlcnlfc3RhdHVzID0gMHhmZjsKKwlpbmZvLmJhdHRlcnlfZmxhZyAgID0gMHhmZjsKKwlpbmZvLmJhdHRlcnlfbGlmZSAgID0gLTE7CisJaW5mby50aW1lCSAgICA9IC0xOworCWluZm8udW5pdHMJICAgID0gLTE7CisKKwlpZiAoYXBtX2dldF9wb3dlcl9zdGF0dXMpCisJCWFwbV9nZXRfcG93ZXJfc3RhdHVzKCZpbmZvKTsKKworCXN3aXRjaCAoaW5mby51bml0cykgeworCWRlZmF1bHQ6CXVuaXRzID0gIj8iOwlicmVhazsKKwljYXNlIDA6IAl1bml0cyA9ICJtaW4iOwlicmVhazsKKwljYXNlIDE6IAl1bml0cyA9ICJzZWMiOwlicmVhazsKKwl9CisKKwlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzIDEuMiAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnggJWQlJSAlZCAlc1xuIiwKKwkJICAgICBkcml2ZXJfdmVyc2lvbiwgQVBNXzMyX0JJVF9TVVBQT1JULAorCQkgICAgIGluZm8uYWNfbGluZV9zdGF0dXMsIGluZm8uYmF0dGVyeV9zdGF0dXMsCisJCSAgICAgaW5mby5iYXR0ZXJ5X2ZsYWcsIGluZm8uYmF0dGVyeV9saWZlLAorCQkgICAgIGluZm8udGltZSwgdW5pdHMpOworCisgCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBrYXBtZCh2b2lkICphcmcpCit7CisJZGFlbW9uaXplKCJrYXBtZCIpOworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCisJZG8geworCQlhcG1fZXZlbnRfdCBldmVudDsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoa2FwbWRfd2FpdCwKKwkJCQkhcXVldWVfZW1wdHkoJmthcG1kX3F1ZXVlKSB8fCAhbWlwc19hcG1fYWN0aXZlKTsKKworCQlpZiAoIW1pcHNfYXBtX2FjdGl2ZSkKKwkJCWJyZWFrOworCisJCXNwaW5fbG9ja19pcnEoJmthcG1kX3F1ZXVlX2xvY2spOworCQlldmVudCA9IDA7CisJCWlmICghcXVldWVfZW1wdHkoJmthcG1kX3F1ZXVlKSkKKwkJCWV2ZW50ID0gcXVldWVfZ2V0X2V2ZW50KCZrYXBtZF9xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycSgma2FwbWRfcXVldWVfbG9jayk7CisKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIDA6CisJCQlicmVhazsKKworCQljYXNlIEFQTV9MT1dfQkFUVEVSWToKKwkJY2FzZSBBUE1fUE9XRVJfU1RBVFVTX0NIQU5HRToKKwkJCXF1ZXVlX2V2ZW50KGV2ZW50LCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQVBNX1VTRVJfU1VTUEVORDoKKwkJY2FzZSBBUE1fU1lTX1NVU1BFTkQ6CisJCQlxdWV1ZV9ldmVudChldmVudCwgTlVMTCk7CisJCQlpZiAoc3VzcGVuZHNfcGVuZGluZyA9PSAwKQorCQkJCWFwbV9zdXNwZW5kKCk7CisJCQlicmVhazsKKworCQljYXNlIEFQTV9DUklUSUNBTF9TVVNQRU5EOgorCQkJYXBtX3N1c3BlbmQoKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoMSk7CisKKwljb21wbGV0ZV9hbmRfZXhpdCgma2FwbWRfZXhpdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFwbV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmIChhcG1fZGlzYWJsZWQpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJhcG06IGRpc2FibGVkIG9uIHVzZXIgcmVxdWVzdC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltaXBzX2FwbV9hY3RpdmUgPSAxOworCisJcmV0ID0ga2VybmVsX3RocmVhZChrYXBtZCwgTlVMTCwgQ0xPTkVfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQltaXBzX2FwbV9hY3RpdmUgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJY3JlYXRlX3Byb2NfaW5mb19lbnRyeSgiYXBtIiwgMCwgTlVMTCwgYXBtX2dldF9pbmZvKTsKKyNlbmRpZgorCisJcmV0ID0gbWlzY19yZWdpc3RlcigmYXBtX2RldmljZSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJhcG0iLCBOVUxMKTsKKworCQltaXBzX2FwbV9hY3RpdmUgPSAwOworCQl3YWtlX3VwKCZrYXBtZF93YWl0KTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigma2FwbWRfZXhpdCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFwbV9leGl0KHZvaWQpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZhcG1fZGV2aWNlKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiYXBtIiwgTlVMTCk7CisKKwltaXBzX2FwbV9hY3RpdmUgPSAwOworCXdha2VfdXAoJmthcG1kX3dhaXQpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmthcG1kX2V4aXQpOworfQorCittb2R1bGVfaW5pdChhcG1faW5pdCk7Cittb2R1bGVfZXhpdChhcG1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gUm90aHdlbGwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgYXBtX3NldHVwKGNoYXIgKnN0cikKK3sKKwl3aGlsZSAoKHN0ciAhPSBOVUxMKSAmJiAoKnN0ciAhPSAnXDAnKSkgeworCQlpZiAoc3RybmNtcChzdHIsICJvZmYiLCAzKSA9PSAwKQorCQkJYXBtX2Rpc2FibGVkID0gMTsKKwkJaWYgKHN0cm5jbXAoc3RyLCAib24iLCAyKSA9PSAwKQorCQkJYXBtX2Rpc2FibGVkID0gMDsKKwkJc3RyID0gc3RyY2hyKHN0ciwgJywnKTsKKwkJaWYgKHN0ciAhPSBOVUxMKQorCQkJc3RyICs9IHN0cnNwbihzdHIsICIsIFx0Iik7CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJhcG09IiwgYXBtX3NldHVwKTsKKyNlbmRpZgorCisvKioKKyAqIGFwbV9xdWV1ZV9ldmVudCAtIHF1ZXVlIGFuIEFQTSBldmVudCBmb3Iga2FwbWQKKyAqIEBldmVudDogQVBNIGV2ZW50CisgKgorICogUXVldWUgYW4gQVBNIGV2ZW50IGZvciBrYXBtZCB0byBwcm9jZXNzIGFuZCB1bHRpbWF0ZWx5IHRha2UgdGhlCisgKiBhcHByb3ByaWF0ZSBhY3Rpb24uICBPbmx5IGEgc3Vic2V0IG9mIGV2ZW50cyBhcmUgaGFuZGxlZDoKKyAqICAgJUFQTV9MT1dfQkFUVEVSWQorICogICAlQVBNX1BPV0VSX1NUQVRVU19DSEFOR0UKKyAqICAgJUFQTV9VU0VSX1NVU1BFTkQKKyAqICAgJUFQTV9TWVNfU1VTUEVORAorICogICAlQVBNX0NSSVRJQ0FMX1NVU1BFTkQKKyAqLwordm9pZCBhcG1fcXVldWVfZXZlbnQoYXBtX2V2ZW50X3QgZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZrYXBtZF9xdWV1ZV9sb2NrLCBmbGFncyk7CisJcXVldWVfYWRkX2V2ZW50KCZrYXBtZF9xdWV1ZSwgZXZlbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmthcG1kX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgma2FwbWRfd2FpdCk7Cit9CitFWFBPUlRfU1lNQk9MKGFwbV9xdWV1ZV9ldmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggOTJiMjhiNi4uZjFiYjZhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTQxLDcyICsxNDEsNzIgQEAKIHZvaWQgb3V0cHV0X3RocmVhZF9mcHVfZGVmaW5lcyh2b2lkKQogewogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRlBSMCAgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mcHJbMF0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzBdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjEgICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzFdKTsKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmZwclsxXSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFIyICAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwclsyXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMl0pOwogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRlBSMyAgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mcHJbM10pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzNdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjQgICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzRdKTsKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmZwcls0XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFI1ICAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwcls1XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbNV0pOwogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRlBSNiAgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mcHJbNl0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzZdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjcgICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzddKTsKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmZwcls3XSk7CiAJb2Zmc2V0KCIjZGVmaW5lIFRIUkVBRF9GUFI4ICAgICIsCi0JICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5oYXJkLmZwcls4XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbOF0pOwogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRlBSOSAgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mcHJbOV0pOworCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuZnByWzldKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjEwICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzEwXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTBdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjExICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzExXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTFdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjEyICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzEyXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTJdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjEzICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzEzXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTNdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjE0ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzE0XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTRdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjE1ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzE1XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTVdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjE2ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzE2XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTZdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjE3ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzE3XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTddKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjE4ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzE4XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMThdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjE5ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzE5XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMTldKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjIwICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzIwXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjBdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjIxICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzIxXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjFdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjIyICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzIyXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjJdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjIzICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzIzXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjNdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjI0ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzI0XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjRdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjI1ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzI1XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjVdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjI2ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzI2XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjZdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjI3ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzI3XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjddKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjI4ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzI4XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjhdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjI5ICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzI5XSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMjldKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjMwICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzMwXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMzBdKTsKIAlvZmZzZXQoIiNkZWZpbmUgVEhSRUFEX0ZQUjMxICAgIiwKLQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuZnB1LmhhcmQuZnByWzMxXSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mcHJbMzFdKTsKIAogCW9mZnNldCgiI2RlZmluZSBUSFJFQURfRkNSMzEgICAiLAotCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5mcHUuaGFyZC5mY3IzMSk7CisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmZwdS5mY3IzMSk7CiAJbGluZWZlZWQ7CiB9CiAKQEAgLTI3Miw4ICsyNzIsOCBAQAogCXRleHQoIi8qIExpbnV4IHNpZ2NvbnRleHQgb2Zmc2V0cy4gKi8iKTsKIAlvZmZzZXQoIiNkZWZpbmUgU0NfUkVHUyAgICAgICAiLCBzdHJ1Y3Qgc2lnY29udGV4dCwgc2NfcmVncyk7CiAJb2Zmc2V0KCIjZGVmaW5lIFNDX0ZQUkVHUyAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX2ZwcmVncyk7Ci0Jb2Zmc2V0KCIjZGVmaW5lIFNDX01ESEkgICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX2hpKTsKLQlvZmZzZXQoIiNkZWZpbmUgU0NfTURMTyAgICAgICAiLCBzdHJ1Y3Qgc2lnY29udGV4dCwgc2NfbG8pOworCW9mZnNldCgiI2RlZmluZSBTQ19NREhJICAgICAgICIsIHN0cnVjdCBzaWdjb250ZXh0LCBzY19tZGhpKTsKKwlvZmZzZXQoIiNkZWZpbmUgU0NfTURMTyAgICAgICAiLCBzdHJ1Y3Qgc2lnY29udGV4dCwgc2NfbWRsbyk7CiAJb2Zmc2V0KCIjZGVmaW5lIFNDX1BDICAgICAgICAgIiwgc3RydWN0IHNpZ2NvbnRleHQsIHNjX3BjKTsKIAlvZmZzZXQoIiNkZWZpbmUgU0NfRlBDX0NTUiAgICAiLCBzdHJ1Y3Qgc2lnY29udGV4dCwgc2NfZnBjX2Nzcik7CiAJbGluZWZlZWQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2JyYW5jaC5jIGIvYXJjaC9taXBzL2tlcm5lbC9icmFuY2guYwppbmRleCBiNjIzMmQ5Li43NmZkM2YyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2JyYW5jaC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYnJhbmNoLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlpZiAoaXNfZnB1X293bmVyKCkpCiAJCQlhc20gdm9sYXRpbGUoImNmYzFcdCUwLCQzMSIgOiAiPXIiIChmY3IzMSkpOwogCQllbHNlCi0JCQlmY3IzMSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mY3IzMTsKKwkJCWZjcjMxID0gY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAogCQliaXQgPSAoaW5zbi5pX2Zvcm1hdC5ydCA+PiAyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKaW5kZXggNDdhMDg3Yi4uZDI2ODgyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQkiZGFkZGkJJTAsICUxLCAlM1xuXHQiCiAJCSIuc2V0CXBvcCIKIAkJOiAiPXIiICh2KSwgIj0mciIgKHRtcCkKLQkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YSksICJJIiAoMHgxMjM0KSk7CisJCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWFVTCksICJJIiAoMHgxMjM0KSk7CiAJc2V0X2V4Y2VwdF92ZWN0b3IoMTIsIGhhbmRsZXIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMjI0LDcgKzIyNCw3IEBACiAJCSJkc3JsCSUxLCAlMSwgMVxuXHQiCiAJCSJkYWRkaQklMCwgJTEsICUzIgogCQk6ICI9ciIgKHYpLCAiPSZyIiAodG1wKQotCQk6ICJJIiAoMHhmZmZmZmZmZmZmZmZkYjlhKSwgIkkiICgweDEyMzQpKTsKKwkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YVVMKSwgIkkiICgweDEyMzQpKTsKIAlzZXRfZXhjZXB0X3ZlY3RvcigxMiwgaGFuZGxlcik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCkBAIC0yODAsNyArMjgwLDcgQEAKIAkJImRhZGR1CSUxLCAlMlxuXHQiCiAJCSIuc2V0CXBvcCIKIAkJOiAiPSZyIiAodiksICI9JnIiICh3KSwgIj0mciIgKHRtcCkKLQkJOiAiSSIgKDB4ZmZmZmZmZmZmZmZmZGI5YSksICJJIiAoMHgxMjM0KSk7CisJCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWFVTCksICJJIiAoMHgxMjM0KSk7CiAKIAlpZiAodiA9PSB3KSB7CiAJCXByaW50aygibm8uXG4iKTsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkiYWRkaXUJJTEsICQwLCAlNFxuXHQiCiAJCSJkYWRkdQklMSwgJTIiCiAJCTogIj0mciIgKHYpLCAiPSZyIiAodyksICI9JnIiICh0bXApCi0JCTogIkkiICgweGZmZmZmZmZmZmZmZmRiOWEpLCAiSSIgKDB4MTIzNCkpOworCQk6ICJJIiAoMHhmZmZmZmZmZmZmZmZkYjlhVUwpLCAiSSIgKDB4MTIzNCkpOwogCiAJaWYgKHYgPT0gdykgewogCQlwcmludGsoInllcy5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggNThiM2IxNC4uOGMyYzM1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xMjEsNiArMTIxLDcgQEAKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMjVLRjoKIAljYXNlIENQVV8zNEs6CisJY2FzZSBDUFVfNzRLOgogIAljYXNlIENQVV9QUjQ0NTA6CiAJCWNwdV93YWl0ID0gcjRrX3dhaXQ7CiAJCXByaW50aygiIGF2YWlsYWJsZS5cbiIpOwpAQCAtNDMyLDYgKzQzMywxNSBAQAogCQkgICAgICAgICAgICAgTUlQU19DUFVfTExTQzsKIAkJYy0+dGxic2l6ZSA9IDY0OwogCQlicmVhazsKKwljYXNlIFBSSURfSU1QX1IxNDAwMDoKKwkJYy0+Y3B1dHlwZSA9IENQVV9SMTQwMDA7CisJCWMtPmlzYV9sZXZlbCA9IE1JUFNfQ1BVX0lTQV9JVjsKKwkJYy0+b3B0aW9ucyA9IE1JUFNfQ1BVX1RMQiB8IE1JUFNfQ1BVXzRLX0NBQ0hFIHwgTUlQU19DUFVfNEtFWCB8CisJCSAgICAgICAgICAgICBNSVBTX0NQVV9GUFUgfCBNSVBTX0NQVV8zMkZQUiB8CisJCQkgICAgIE1JUFNfQ1BVX0NPVU5URVIgfCBNSVBTX0NQVV9XQVRDSCB8CisJCSAgICAgICAgICAgICBNSVBTX0NQVV9MTFNDOworCQljLT50bGJzaXplID0gNjQ7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNTkzLDYgKzYwMyw5IEBACiAJY2FzZSBQUklEX0lNUF8zNEs6CiAJCWMtPmNwdXR5cGUgPSBDUFVfMzRLOwogCQlicmVhazsKKwljYXNlIFBSSURfSU1QXzc0SzoKKwkJYy0+Y3B1dHlwZSA9IENQVV83NEs7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNjQyLDcgKzY1NSw3IEBACiAJY2FzZSBQUklEX0lNUF9TQjE6CiAJCWMtPmNwdXR5cGUgPSBDUFVfU0IxOwogCQkvKiBGUFUgaW4gcGFzczEgaXMga25vd24gdG8gaGF2ZSBpc3N1ZXMuICovCi0JCWlmICgoYy0+cHJvY2Vzc29yX2lkICYgMHhmZikgPCAweDIwKQorCQlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYpIDwgMHgwMikKIAkJCWMtPm9wdGlvbnMgJj0gfihNSVBTX0NQVV9GUFUgfCBNSVBTX0NQVV8zMkZQUik7CiAJCWJyZWFrOwogCWNhc2UgUFJJRF9JTVBfU0IxQToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUwppbmRleCBkMTAxZDJmLi5hOWM2ZGUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCkBAIC0xMDEsNyArMTAxLDcgQEAKIAlFTVQKIDE6CiAJbWZjMAl2MSwgQ1AwX1RDU1RBVFVTCi0JLyogV2Ugc2V0IElYTVQgYWJvdmUsIFhPUiBzaG91bGQgY2xlciBpdCBoZXJlICovCisJLyogV2Ugc2V0IElYTVQgYWJvdmUsIFhPUiBzaG91bGQgY2xlYXIgaXQgaGVyZSAqLwogCXhvcmkJdjEsIHYxLCBUQ1NUQVRVU19JWE1UCiAJb3IJdjEsIHYwLCB2MQogCW10YzAJdjEsIENQMF9UQ1NUQVRVUwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMgYi9hcmNoL21pcHMva2VybmVsL2dkYi1sb3cuUwppbmRleCAxMGYyOGZiLi41ZmQ3YThhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2dkYi1sb3cuUworKysgYi9hcmNoL21pcHMva2VybmVsL2dkYi1sb3cuUwpAQCAtNTQsOSArNTQsMTEgQEAKIAkJICovCiAJCW1mYzAJazAsIENQMF9DQVVTRQogCQlhbmRpCWswLCBrMCwgMHg3YwotCQlhZGQJazEsIGsxLCBrMAotCQlQVFJfTAlrMCwgc2F2ZWRfdmVjdG9ycyhrMSkKLQkJanIJazAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkJZHNsbAlrMCwgazAsIDEKKyNlbmRpZgorCQlQVFJfTAlrMSwgc2F2ZWRfdmVjdG9ycyhrMCkKKwkJanIJazEKIAkJbm9wCiAxOgogCQltb3ZlCWswLCBzcApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCmluZGV4IDIxMjViYTUuLjBjYjhlZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKQEAgLTMwMiwxMSArMzAyLDExIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBpYzFfaW9fcmVzb3VyY2UgPSB7Ci0JInBpYzEiLCAweDIwLCAweDNmLCBJT1JFU09VUkNFX0JVU1kKKwkubmFtZSA9ICJwaWMxIiwgLnN0YXJ0ID0gMHgyMCwgLmVuZCA9IDB4M2YsIC5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWQogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaWMyX2lvX3Jlc291cmNlID0gewotCSJwaWMyIiwgMHhhMCwgMHhiZiwgSU9SRVNPVVJDRV9CVVNZCisJLm5hbWUgPSAicGljMiIsIC5zdGFydCA9IDB4YTAsIC5lbmQgPSAweGJmLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lyaXhzaWcuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCmluZGV4IDgxNTBmMDcuLmE5YmY2Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAogCQlmb3IoaSA9IDA7IGkgPCAzMjsgaSsrKQogCQkJZXJyb3IgfD0gX19nZXRfdXNlcihmcmVnc1tpXSwgJmNvbnRleHQtPmZwcmVnc1tpXSk7Ci0JCWVycm9yIHw9IF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZjcjMxLCAmY29udGV4dC0+ZnBjc3IpOworCQllcnJvciB8PSBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuZmNyMzEsICZjb250ZXh0LT5mcGNzcik7CiAJfQogCiAJLyogWFhYIGRvIHNpZ3N0YWNrIGNyYXBvbGEgaGVyZS4uLiBYWFggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL21pcHMva2VybmVsL21vZHVsZS5jCmluZGV4IGU1NGE3ZjQuLmQ3YmYwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjg4LDYgKzI4OCw5IEBACiAJCXN5bSA9IChFbGZfU3ltICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcgogCQkJKyBFTEZfTUlQU19SX1NZTShyZWxbaV0pOwogCQlpZiAoIXN5bS0+c3RfdmFsdWUpIHsKKwkJCS8qIElnbm9yZSB1bnJlc29sdmVkIHdlYWsgc3ltYm9sICovCisJCQlpZiAoRUxGX1NUX0JJTkQoc3ltLT5zdF9pbmZvKSA9PSBTVEJfV0VBSykKKwkJCQljb250aW51ZTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIHN5bWJvbCAlc1xuIiwKIAkJCSAgICAgICBtZS0+bmFtZSwgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKIAkJCXJldHVybiAtRU5PRU5UOwpAQCAtMzI1LDYgKzMyOCw5IEBACiAJCXN5bSA9IChFbGZfU3ltICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcgogCQkJKyBFTEZfTUlQU19SX1NZTShyZWxbaV0pOwogCQlpZiAoIXN5bS0+c3RfdmFsdWUpIHsKKwkJCS8qIElnbm9yZSB1bnJlc29sdmVkIHdlYWsgc3ltYm9sICovCisJCQlpZiAoRUxGX1NUX0JJTkQoc3ltLT5zdF9pbmZvKSA9PSBTVEJfV0VBSykKKwkJCQljb250aW51ZTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIHN5bWJvbCAlc1xuIiwKIAkJCSAgICAgICBtZS0+bmFtZSwgc3RydGFiICsgc3ltLT5zdF9uYW1lKTsKIAkJCXJldHVybiAtRU5PRU5UOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2MuYwppbmRleCA4NGFiOTU5Li45ZGVmNTU0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2MuYwpAQCAtNDIsNiArNDIsNyBAQAogCVtDUFVfUjgwMDBdCT0gIlI4MDAwIiwKIAlbQ1BVX1IxMDAwMF0JPSAiUjEwMDAwIiwKIAlbQ1BVX1IxMjAwMF0JPSAiUjEyMDAwIiwKKwlbQ1BVX1IxNDAwMF0JPSAiUjE0MDAwIiwKIAlbQ1BVX1I0MzAwXQk9ICJSNDMwMCIsCiAJW0NQVV9SNDY1MF0JPSAiUjQ2NTAiLAogCVtDUFVfUjQ3MDBdCT0gIlI0NzAwIiwKQEAgLTc0LDYgKzc1LDcgQEAKIAlbQ1BVXzI0S10JPSAiTUlQUyAyNEsiLAogCVtDUFVfMjVLRl0JPSAiTUlQUyAyNUtmIiwKIAlbQ1BVXzM0S10JPSAiTUlQUyAzNEsiLAorCVtDUFVfNzRLXQk9ICJNSVBTIDc0SyIsCiAJW0NQVV9WUjQxMTFdCT0gIk5FQyBWUjQxMTEiLAogCVtDUFVfVlI0MTIxXQk9ICJORUMgVlI0MTIxIiwKIAlbQ1BVX1ZSNDEyMl0JPSAiTkVDIFZSNDEyMiIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwppbmRleCA5YjQ3MzNjLi4xZDQ0MDI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKQEAgLTEyMCwxMSArMTIwLDExIEBACiAJCQlfX3B1dF91c2VyICgoX191NjQpIC0xLCBpICsgKF9fdTY0IF9fdXNlciAqKSBkYXRhKTsKIAl9CiAKKwlfX3B1dF91c2VyIChjaGlsZC0+dGhyZWFkLmZwdS5mY3IzMSwgZGF0YSArIDY0KTsKKwogCWlmIChjcHVfaGFzX2ZwdSkgewogCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHRtcDsKIAotCQlfX3B1dF91c2VyIChjaGlsZC0+dGhyZWFkLmZwdS5oYXJkLmZjcjMxLCBkYXRhICsgNjQpOwotCiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlpZiAoY3B1X2hhc19taXBzbXQpIHsKIAkJCXVuc2lnbmVkIGludCB2cGZsYWdzID0gZHZwZSgpOwpAQCAtMTQyLDcgKzE0Miw2IEBACiAJCXByZWVtcHRfZW5hYmxlKCk7CiAJCV9fcHV0X3VzZXIgKHRtcCwgZGF0YSArIDY1KTsKIAl9IGVsc2UgewotCQlfX3B1dF91c2VyIChjaGlsZC0+dGhyZWFkLmZwdS5zb2Z0LmZjcjMxLCBkYXRhICsgNjQpOwogCQlfX3B1dF91c2VyICgoX191MzIpIDAsIGRhdGEgKyA2NSk7CiAJfQogCkBAIC0xNjIsMTAgKzE2MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCiAJCV9fZ2V0X3VzZXIgKGZyZWdzW2ldLCBpICsgKF9fdTY0IF9fdXNlciAqKSBkYXRhKTsKIAotCWlmIChjcHVfaGFzX2ZwdSkKLQkJX19nZXRfdXNlciAoY2hpbGQtPnRocmVhZC5mcHUuaGFyZC5mY3IzMSwgZGF0YSArIDY0KTsKLQllbHNlCi0JCV9fZ2V0X3VzZXIgKGNoaWxkLT50aHJlYWQuZnB1LnNvZnQuZmNyMzEsIGRhdGEgKyA2NCk7CisJX19nZXRfdXNlciAoY2hpbGQtPnRocmVhZC5mcHUuZmNyMzEsIGRhdGEgKyA2NCk7CiAKIAkvKiBGSVIgbWF5IG5vdCBiZSB3cml0dGVuLiAgKi8KIApAQCAtMjQxLDEwICsyMzcsNyBAQAogCQkJdG1wID0gcmVncy0+bG87CiAJCQlicmVhazsKIAkJY2FzZSBGUENfQ1NSOgotCQkJaWYgKGNwdV9oYXNfZnB1KQotCQkJCXRtcCA9IGNoaWxkLT50aHJlYWQuZnB1LmhhcmQuZmNyMzE7Ci0JCQllbHNlCi0JCQkJdG1wID0gY2hpbGQtPnRocmVhZC5mcHUuc29mdC5mY3IzMTsKKwkJCXRtcCA9IGNoaWxkLT50aHJlYWQuZnB1LmZjcjMxOwogCQkJYnJlYWs7CiAJCWNhc2UgRlBDX0VJUjogewkvKiBpbXBsZW1lbnRhdGlvbiAvIHZlcnNpb24gcmVnaXN0ZXIgKi8KIAkJCXVuc2lnbmVkIGludCBmbGFnczsKQEAgLTMzNiw5ICszMjksOSBAQAogCiAJCQlpZiAoIXRza191c2VkX21hdGgoY2hpbGQpKSB7CiAJCQkJLyogRlAgbm90IHlldCB1c2VkICAqLwotCQkJCW1lbXNldCgmY2hpbGQtPnRocmVhZC5mcHUuaGFyZCwgfjAsCi0JCQkJICAgICAgIHNpemVvZihjaGlsZC0+dGhyZWFkLmZwdS5oYXJkKSk7Ci0JCQkJY2hpbGQtPnRocmVhZC5mcHUuaGFyZC5mY3IzMSA9IDA7CisJCQkJbWVtc2V0KCZjaGlsZC0+dGhyZWFkLmZwdSwgfjAsCisJCQkJICAgICAgIHNpemVvZihjaGlsZC0+dGhyZWFkLmZwdSkpOworCQkJCWNoaWxkLT50aHJlYWQuZnB1LmZjcjMxID0gMDsKIAkJCX0KICNpZmRlZiBDT05GSUdfMzJCSVQKIAkJCS8qCkBAIC0zNjksMTAgKzM2Miw3IEBACiAJCQlyZWdzLT5sbyA9IGRhdGE7CiAJCQlicmVhazsKIAkJY2FzZSBGUENfQ1NSOgotCQkJaWYgKGNwdV9oYXNfZnB1KQotCQkJCWNoaWxkLT50aHJlYWQuZnB1LmhhcmQuZmNyMzEgPSBkYXRhOwotCQkJZWxzZQotCQkJCWNoaWxkLT50aHJlYWQuZnB1LnNvZnQuZmNyMzEgPSBkYXRhOworCQkJY2hpbGQtPnRocmVhZC5mcHUuZmNyMzEgPSBkYXRhOwogCQkJYnJlYWs7CiAJCWNhc2UgRFNQX0JBU0UgLi4uIERTUF9CQVNFICsgNTogewogCQkJZHNwcmVnX3QgKmRyZWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UzMi5jCmluZGV4IDg3MDRkYzAuLmY0MGVjZDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlMzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZTMyLmMKQEAgLTE2NiwxMCArMTY2LDcgQEAKIAkJCXRtcCA9IHJlZ3MtPmxvOwogCQkJYnJlYWs7CiAJCWNhc2UgRlBDX0NTUjoKLQkJCWlmIChjcHVfaGFzX2ZwdSkKLQkJCQl0bXAgPSBjaGlsZC0+dGhyZWFkLmZwdS5oYXJkLmZjcjMxOwotCQkJZWxzZQotCQkJCXRtcCA9IGNoaWxkLT50aHJlYWQuZnB1LnNvZnQuZmNyMzE7CisJCQl0bXAgPSBjaGlsZC0+dGhyZWFkLmZwdS5mY3IzMTsKIAkJCWJyZWFrOwogCQljYXNlIEZQQ19FSVI6IHsJLyogaW1wbGVtZW50YXRpb24gLyB2ZXJzaW9uIHJlZ2lzdGVyICovCiAJCQl1bnNpZ25lZCBpbnQgZmxhZ3M7CkBAIC0yODgsOSArMjg1LDkgQEAKIAogCQkJaWYgKCF0c2tfdXNlZF9tYXRoKGNoaWxkKSkgewogCQkJCS8qIEZQIG5vdCB5ZXQgdXNlZCAgKi8KLQkJCQltZW1zZXQoJmNoaWxkLT50aHJlYWQuZnB1LmhhcmQsIH4wLAotCQkJCSAgICAgICBzaXplb2YoY2hpbGQtPnRocmVhZC5mcHUuaGFyZCkpOwotCQkJCWNoaWxkLT50aHJlYWQuZnB1LmhhcmQuZmNyMzEgPSAwOworCQkJCW1lbXNldCgmY2hpbGQtPnRocmVhZC5mcHUsIH4wLAorCQkJCSAgICAgICBzaXplb2YoY2hpbGQtPnRocmVhZC5mcHUpKTsKKwkJCQljaGlsZC0+dGhyZWFkLmZwdS5mY3IzMSA9IDA7CiAJCQl9CiAJCQkvKgogCQkJICogVGhlIG9kZCByZWdpc3RlcnMgYXJlIGFjdHVhbGx5IHRoZSBoaWdoIG9yZGVyIGJpdHMKQEAgLTMxOCwxMCArMzE1LDcgQEAKIAkJCXJlZ3MtPmxvID0gZGF0YTsKIAkJCWJyZWFrOwogCQljYXNlIEZQQ19DU1I6Ci0JCQlpZiAoY3B1X2hhc19mcHUpCi0JCQkJY2hpbGQtPnRocmVhZC5mcHUuaGFyZC5mY3IzMSA9IGRhdGE7Ci0JCQllbHNlCi0JCQkJY2hpbGQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSA9IGRhdGE7CisJCQljaGlsZC0+dGhyZWFkLmZwdS5mY3IzMSA9IGRhdGE7CiAJCQlicmVhazsKIAkJY2FzZSBEU1BfQkFTRSAuLi4gRFNQX0JBU0UgKyA1OiB7CiAJCQlkc3ByZWdfdCAqZHJlZ3M7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3I0a19zd2l0Y2guUyBiL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TCmluZGV4IDBiMWI1NGEuLmRiOTRlNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TCkBAIC03NSw4ICs3NSw4IEBACiAJYW5kCXQwLCB0MCwgdDEKIAlMT05HX1MJdDAsIFNUX09GRih0MykKIAotCWZwdV9zYXZlX2RvdWJsZSBhMCB0MSB0MCB0MgkJIyBjMF9zdGF0dXMgcGFzc2VkIGluIHQxCi0JCQkJCQkjIGNsb2JiZXJzIHQwIGFuZCB0MgorCWZwdV9zYXZlX2RvdWJsZSBhMCB0MCB0MQkJIyBjMF9zdGF0dXMgcGFzc2VkIGluIHQwCisJCQkJCQkjIGNsb2JiZXJzIHQxCiAxOgogCiAJLyoKQEAgLTEyOSw5ICsxMjksOSBAQAogICovCiBMRUFGKF9zYXZlX2ZwKQogI2lmZGVmIENPTkZJR182NEJJVAotCW1mYzAJdDEsIENQMF9TVEFUVVMKKwltZmMwCXQwLCBDUDBfU1RBVFVTCiAjZW5kaWYKLQlmcHVfc2F2ZV9kb3VibGUgYTAgdDEgdDAgdDIJCSMgY2xvYmJlcnMgdDEKKwlmcHVfc2F2ZV9kb3VibGUgYTAgdDAgdDEJCSMgY2xvYmJlcnMgdDEKIAlqcglyYQogCUVORChfc2F2ZV9mcCkKIApAQCAtMTM5LDcgKzEzOSwxMCBAQAogICogUmVzdG9yZSBhIHRocmVhZCdzIGZwIGNvbnRleHQuCiAgKi8KIExFQUYoX3Jlc3RvcmVfZnApCi0JZnB1X3Jlc3RvcmVfZG91YmxlIGEwLCB0MQkJIyBjbG9iYmVycyB0MQorI2lmZGVmIENPTkZJR182NEJJVAorCW1mYzAJdDAsIENQMF9TVEFUVVMKKyNlbmRpZgorCWZwdV9yZXN0b3JlX2RvdWJsZSBhMCB0MCB0MQkJIyBjbG9iYmVycyB0MQogCWpyCXJhCiAJRU5EKF9yZXN0b3JlX2ZwKQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggYjUzYTkyMC4uOGVmYjIzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJUFRSCXN5c19mb3JrCiAJUFRSCXN5c19yZWFkCiAJUFRSCXN5c193cml0ZQotCVBUUglzeXNfb3BlbgkJCS8qIDQwMDUgKi8KKwlQVFIJY29tcGF0X3N5c19vcGVuCQkJLyogNDAwNSAqLwogCVBUUglzeXNfY2xvc2UKIAlQVFIJc3lzX3dhaXRwaWQKIAlQVFIJc3lzX2NyZWF0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKaW5kZXggYmNmMWIxMC4uYmZjZWM4ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAjaWZkZWYgQ09ORklHXzY0QklUCiAJLyogSEFDSzogR3Vlc3MgaWYgdGhlIHNpZ24gZXh0ZW5zaW9uIHdhcyBmb3Jnb3R0ZW4gKi8KIAlpZiAoc3RhcnQgPiAweDAwMDAwMDAwODAwMDAwMDAgJiYgc3RhcnQgPCAweDAwMDAwMDAwZmZmZmZmZmYpCi0JCXN0YXJ0IHw9IDB4ZmZmZmZmZmYwMDAwMDAwMDsKKwkJc3RhcnQgfD0gMHhmZmZmZmZmZjAwMDAwMDAwVUw7CiAjZW5kaWYKIAogCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKQEAgLTM1NSw4ICszNTUsNiBAQAogCX0KICNlbmRpZgogCi0JbWVtb3J5X3ByZXNlbnQoMCwgZmlyc3RfdXNhYmxlX3BmbiwgbWF4X2xvd19wZm4pOwotCiAJLyogSW5pdGlhbGl6ZSB0aGUgYm9vdC10aW1lIGFsbG9jYXRvciB3aXRoIGxvdyBtZW1vcnkgb25seS4gICovCiAJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtKGZpcnN0X3VzYWJsZV9wZm4sIG1heF9sb3dfcGZuKTsKIApAQCAtNDEwLDYgKzQwOCw3IEBACiAKIAkJLyogUmVnaXN0ZXIgbG93bWVtIHJhbmdlcyAqLwogCQlmcmVlX2Jvb3RtZW0oUEZOX1BIWVMoY3Vycl9wZm4pLCBQRk5fUEhZUyhzaXplKSk7CisJCW1lbW9yeV9wcmVzZW50KDAsIGN1cnJfcGZuLCBjdXJyX3BmbiArIHNpemUgLSAxKTsKIAl9CiAKIAkvKiBSZXNlcnZlIHRoZSBib290bWFwIG1lbW9yeS4gICovCkBAIC00MTksMTcgKzQxOCwyMCBAQAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7CiAJaWYgKGluaXRyZF9zdGFydCkgewotCQl1bnNpZ25lZCBsb25nIGluaXRyZF9zaXplID0gKCh1bnNpZ25lZCBjaGFyICopaW5pdHJkX2VuZCkgLSAoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfc3RhcnQpOworCQl1bnNpZ25lZCBsb25nIGluaXRyZF9zaXplID0gKCh1bnNpZ25lZCBjaGFyICopaW5pdHJkX2VuZCkgLQorCQkJKCh1bnNpZ25lZCBjaGFyICopaW5pdHJkX3N0YXJ0KTsKKwkJY29uc3QgaW50IHdpZHRoID0gc2l6ZW9mKGxvbmcpICogMjsKKwogCQlwcmludGsoIkluaXRpYWwgcmFtZGlzayBhdDogMHglcCAoJWx1IGJ5dGVzKVxuIiwKIAkJICAgICAgICh2b2lkICopaW5pdHJkX3N0YXJ0LCBpbml0cmRfc2l6ZSk7CiAKIAkJaWYgKENQSFlTQUREUihpbml0cmRfZW5kKSA+IFBGTl9QSFlTKG1heF9sb3dfcGZuKSkgewogCQkJcHJpbnRrKCJpbml0cmQgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mIG1lbW9yeSAiCiAJCQkgICAgICAgIigweCUwKkx4ID4gMHglMCpMeClcbmRpc2FibGluZyBpbml0cmRcbiIsCi0JCQkgICAgICAgc2l6ZW9mKGxvbmcpICogMiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKUNQSFlTQUREUihpbml0cmRfZW5kKSwKLQkJCSAgICAgICBzaXplb2YobG9uZykgKiAyLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKKwkJCSAgICAgICB3aWR0aCwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBDUEhZU0FERFIoaW5pdHJkX2VuZCksCisJCQkgICAgICAgd2lkdGgsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKIAkJCWluaXRyZF9zdGFydCA9IGluaXRyZF9lbmQgPSAwOwogCQkJaW5pdHJkX3Jlc2VydmVfYm9vdG1lbSA9IDA7CiAJCX0KQEAgLTQ0MCw2ICs0NDIsNDggQEAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgICovCiB9CiAKKy8qCisgKiBhcmNoX21lbV9pbml0IC0gaW5pdGlhbGl6ZSBtZW1vcnkgbWFuYWdtZW50IHN1YnN5c3RlbQorICoKKyAqICBvIHBsYXRfbWVtX3NldHVwKCkgZGV0ZWN0cyB0aGUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gYW5kIHdpbGwgcmVjb3JkIGRldGVjdGVkCisgKiAgICBtZW1vcnkgYXJlYXMgdXNpbmcgYWRkX21lbW9yeV9yZWdpb24uCisgKiAgbyBwYXJzZV9jbWRsaW5lX2Vhcmx5KCkgcGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgZm9yIG1lbT0gb3B0aW9ucyB3aGljaCwKKyAqICAgIGlmZiBkZXRlY3RlZCwgd2lsbCBvdmVycmlkZSB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbi4KKyAqCisgKiBBdCB0aGlzIHN0YWdlIHRoZSBtZW1vcnkgY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtIGlzIGtub3duIHRvIHRoZQorICoga2VybmVsIGJ1dCBnZW5lcmljIG1lbW9yeSBtYW5hZ21lbnQgc3lzdGVtIGlzIHN0aWxsIGVudGlyZWx5IHVuaW5pdGlhbGl6ZWQuCisgKgorICogIG8gYm9vdG1lbV9pbml0KCkKKyAqICBvIHNwYXJzZV9pbml0KCkKKyAqICBvIHBhZ2luZ19pbml0KCkKKyAqCisgKiBBdCB0aGlzIHN0YWdlIHRoZSBib290bWVtIGFsbG9jYXRvciBpcyByZWFkeSB0byB1c2UuCisgKgorICogTk9URTogaGlzdG9yaWNhbGx5IHBsYXRfbWVtX3NldHVwIGRpZCB0aGUgZW50aXJlIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uLgorICogICAgICAgVGhpcyB3YXMgcmF0aGVyIGltcHJhY3RpY2FsIGJlY2F1c2UgaXQgbWVhbnQgcGxhdF9tZW1fc2V0dXAgaGFkIHRvCisgKiBnZXQgYXdheSB3aXRob3V0IGFueSBraW5kIG9mIG1lbW9yeSBhbGxvY2F0b3IuICBUbyBrZWVwIG9sZCBjb2RlIGZyb20KKyAqIGJyZWFraW5nIHBsYXRfc2V0dXAgd2FzIGp1c3QgcmVuYW1lZCB0byBwbGF0X3NldHVwIGFuZCBhIHNlY29uZCBwbGF0Zm9ybQorICogaW5pdGlhbGl6YXRpb24gaG9vayBmb3IgYW55dGhpbmcgZWxzZSB3YXMgaW50cm9kdWNlZC4KKyAqLworCitleHRlcm4gdm9pZCBwbGF0X21lbV9zZXR1cCh2b2lkKTsKKworc3RhdGljIHZvaWQgX19pbml0IGFyY2hfbWVtX2luaXQoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwkvKiBjYWxsIGJvYXJkIHNldHVwIHJvdXRpbmUgKi8KKwlwbGF0X21lbV9zZXR1cCgpOworCisJc3RybGNweShjb21tYW5kX2xpbmUsIGFyY3NfY21kbGluZSwgc2l6ZW9mKGNvbW1hbmRfbGluZSkpOworCXN0cmxjcHkoc2F2ZWRfY29tbWFuZF9saW5lLCBjb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKKworCSpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7CisKKwlwYXJzZV9jbWRsaW5lX2Vhcmx5KCk7CisJYm9vdG1lbV9pbml0KCk7CisJc3BhcnNlX2luaXQoKTsKKwlwYWdpbmdfaW5pdCgpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzb3VyY2VfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtNDkzLDggKzUzNyw2IEBACiAjdW5kZWYgTUFYTUVNCiAjdW5kZWYgTUFYTUVNX1BGTgogCi1leHRlcm4gdm9pZCBwbGF0X3NldHVwKHZvaWQpOwotCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJY3B1X3Byb2JlKCk7CkBAIC01MDksMTggKzU1MSw4IEBACiAjZW5kaWYKICNlbmRpZgogCi0JLyogY2FsbCBib2FyZCBzZXR1cCByb3V0aW5lICovCi0JcGxhdF9zZXR1cCgpOworCWFyY2hfbWVtX2luaXQoY21kbGluZV9wKTsKIAotCXN0cmxjcHkoY29tbWFuZF9saW5lLCBhcmNzX2NtZGxpbmUsIHNpemVvZihjb21tYW5kX2xpbmUpKTsKLQlzdHJsY3B5KHNhdmVkX2NvbW1hbmRfbGluZSwgY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0KLQkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOwotCi0JcGFyc2VfY21kbGluZV9lYXJseSgpOwotCWJvb3RtZW1faW5pdCgpOwotCXNwYXJzZV9pbml0KCk7Ci0JcGFnaW5nX2luaXQoKTsKIAlyZXNvdXJjZV9pbml0KCk7CiAjaWZkZWYgQ09ORklHX1NNUAogCXBsYXRfc21wX3NldHVwKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaCBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLWNvbW1vbi5oCmluZGV4IDNjYTc4NjIuLmNlNmNiOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLWNvbW1vbi5oCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLWNvbW1vbi5oCkBAIC0zMSw3ICszMSw2IEBACiAJc2F2ZV9ncF9yZWcoMzEpOwogI3VuZGVmIHNhdmVfZ3BfcmVnCiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKIAllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5oaSwgJnNjLT5zY19tZGhpKTsKIAllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5sbywgJnNjLT5zY19tZGxvKTsKIAlpZiAoY3B1X2hhc19kc3ApIHsKQEAgLTQzLDIwICs0Miw2IEBACiAJCWVyciB8PSBfX3B1dF91c2VyKG1mbG8zKCksICZzYy0+c2NfbG8zKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIocmRkc3AoRFNQX01BU0spLCAmc2MtPnNjX2RzcCk7CiAJfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+aGksICZzYy0+c2NfaGlbMF0pOwotCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmxvLCAmc2MtPnNjX2xvWzBdKTsKLQlpZiAoY3B1X2hhc19kc3ApIHsKLQkJZXJyIHw9IF9fcHV0X3VzZXIobWZoaTEoKSwgJnNjLT5zY19oaVsxXSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKG1mbG8xKCksICZzYy0+c2NfbG9bMV0pOwotCQllcnIgfD0gX19wdXRfdXNlcihtZmhpMigpLCAmc2MtPnNjX2hpWzJdKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIobWZsbzIoKSwgJnNjLT5zY19sb1syXSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKG1maGkzKCksICZzYy0+c2NfaGlbM10pOwotCQllcnIgfD0gX19wdXRfdXNlcihtZmxvMygpLCAmc2MtPnNjX2xvWzNdKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIocmRkc3AoRFNQX01BU0spLCAmc2MtPnNjX2RzcCk7Ci0JfQotI2VuZGlmCiAKIAllcnIgfD0gX19wdXRfdXNlcighIXVzZWRfbWF0aCgpLCAmc2MtPnNjX3VzZWRfbWF0aCk7CiAKQEAgLTkyLDcgKzc3LDYgQEAKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2suZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7CiAKIAllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5jcDBfZXBjLCAmc2MtPnNjX3BjKTsKLSNpZmRlZiBDT05GSUdfMzJCSVQKIAllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5oaSwgJnNjLT5zY19tZGhpKTsKIAllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5sbywgJnNjLT5zY19tZGxvKTsKIAlpZiAoY3B1X2hhc19kc3ApIHsKQEAgLTEwNCwyMCArODgsNiBAQAogCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2xvMyk7IG10bG8zKHRyZWcpOwogCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2RzcCk7IHdyZHNwKHRyZWcsIERTUF9NQVNLKTsKIAl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQllcnIgfD0gX19nZXRfdXNlcihyZWdzLT5oaSwgJnNjLT5zY19oaVswXSk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+bG8sICZzYy0+c2NfbG9bMF0pOwotCWlmIChjcHVfaGFzX2RzcCkgewotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2hpWzFdKTsgbXRoaTEodHJlZyk7Ci0JCWVyciB8PSBfX2dldF91c2VyKHRyZWcsICZzYy0+c2NfbG9bMV0pOyBtdGhpMSh0cmVnKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19oaVsyXSk7IG10aGkyKHRyZWcpOwotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2xvWzJdKTsgbXRoaTIodHJlZyk7Ci0JCWVyciB8PSBfX2dldF91c2VyKHRyZWcsICZzYy0+c2NfaGlbM10pOyBtdGhpMyh0cmVnKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIodHJlZywgJnNjLT5zY19sb1szXSk7IG10aGkzKHRyZWcpOwotCQllcnIgfD0gX19nZXRfdXNlcih0cmVnLCAmc2MtPnNjX2RzcCk7IHdyZHNwKHRyZWcsIERTUF9NQVNLKTsKLQl9Ci0jZW5kaWYKIAogI2RlZmluZSByZXN0b3JlX2dwX3JlZyhpKSBkbyB7CQkJCQkJXAogCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnJlZ3NbaV0sICZzYy0+c2NfcmVnc1tpXSk7CQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwppbmRleCBkNDJmMzU4Li4yOThmODJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKQEAgLTI0Nyw2ICsyNDcsOSBAQAogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gMDsKIAlzbXBfdHVuZV9zY2hlZHVsaW5nKCk7CiAJcGxhdF9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOworI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwljcHVfcHJlc2VudF9tYXAgPSBjcHVfcG9zc2libGVfbWFwOworI2VuZGlmCiB9CiAKIC8qIHByZWxvYWQgU01QIHN0YXRlIGZvciBib290IGNwdSAqLwpAQCAtNDQyLDcgKzQ0NSw3IEBACiAJaW50IGNwdTsKIAlpbnQgcmV0OwogCi0JZm9yX2VhY2hfY3B1KGNwdSkgeworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewogCQlyZXQgPSByZWdpc3Rlcl9jcHUoJnBlcl9jcHUoY3B1X2RldmljZXMsIGNwdSksIGNwdSwgTlVMTCk7CiAJCWlmIChyZXQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0b3BvbG9neV9pbml0OiByZWdpc3Rlcl9jcHUgJWQgIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwppbmRleCAyYWVhYTJmLi41ZThhMThhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwpAQCAtMjc2LDMxICsyNzYsOSBAQAogCiBhc21saW5rYWdlIGludCBfc3lzX3N5c21pcHMoaW50IGNtZCwgbG9uZyBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMpCiB7Ci0JaW50CXRtcCwgbGVuOwotCWNoYXIJX191c2VyICpuYW1lOworCWludAl0bXA7CiAKIAlzd2l0Y2goY21kKSB7Ci0JY2FzZSBTRVROQU1FOiB7Ci0JCWNoYXIgbm9kZW5hbWVbX19ORVdfVVRTX0xFTiArIDFdOwotCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJbmFtZSA9IChjaGFyIF9fdXNlciAqKSBhcmcxOwotCi0JCWxlbiA9IHN0cm5jcHlfZnJvbV91c2VyKG5vZGVuYW1lLCBuYW1lLCBfX05FV19VVFNfTEVOKTsKLQkJaWYgKGxlbiA8IDApCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlkb3duX3dyaXRlKCZ1dHNfc2VtKTsKLQkJc3RybmNweShzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZSwgbm9kZW5hbWUsIGxlbik7Ci0JCW5vZGVuYW1lW19fTkVXX1VUU19MRU5dID0gJ1wwJzsKLQkJc3RybGNweShzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZSwgbm9kZW5hbWUsCi0JCSAgICAgICAgc2l6ZW9mKHN5c3RlbV91dHNuYW1lLm5vZGVuYW1lKSk7Ci0JCXVwX3dyaXRlKCZ1dHNfc2VtKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJY2FzZSBNSVBTX0FUT01JQ19TRVQ6CiAJCXByaW50ayhLRVJOX0NSSVQgIkhvdyBkaWQgSSBnZXQgaGVyZT9cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxMyw5ICsyOTEsNiBAQAogCWNhc2UgRkxVU0hfQ0FDSEU6CiAJCV9fZmx1c2hfY2FjaGVfYWxsKCk7CiAJCXJldHVybiAwOwotCi0JY2FzZSBNSVBTX1JETlZSQU06Ci0JCXJldHVybiAtRUlPOwogCX0KIAogCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IDQ5MDFmMGEuLmFkMTZlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTY1LDcgKzY1LDcgQEAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgaGFuZGxlX3Jlc2VydmVkKHZvaWQpOwogCiBleHRlcm4gaW50IGZwdV9lbXVsYXRvcl9jb3AxSGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqeGNwLAotCXN0cnVjdCBtaXBzX2ZwdV9zb2Z0X3N0cnVjdCAqY3R4KTsKKwlzdHJ1Y3QgbWlwc19mcHVfc3RydWN0ICpjdHgpOwogCiB2b2lkICgqYm9hcmRfYmVfaW5pdCkodm9pZCk7CiBpbnQgKCpib2FyZF9iZV9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzX2ZpeHVwKTsKQEAgLTYwMCw4ICs2MDAsNyBAQAogCQlwcmVlbXB0X2VuYWJsZSgpOwogCiAJCS8qIFJ1biB0aGUgZW11bGF0b3IgKi8KLQkJc2lnID0gZnB1X2VtdWxhdG9yX2NvcDFIYW5kbGVyIChyZWdzLAotCQkJJmN1cnJlbnQtPnRocmVhZC5mcHUuc29mdCk7CisJCXNpZyA9IGZwdV9lbXVsYXRvcl9jb3AxSGFuZGxlciAocmVncywgJmN1cnJlbnQtPnRocmVhZC5mcHUpOwogCiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCkBAIC02MTAsNyArNjA5LDcgQEAKIAkJICogV2UgY2FuJ3QgYWxsb3cgdGhlIGVtdWxhdGVkIGluc3RydWN0aW9uIHRvIGxlYXZlIGFueSBvZgogCQkgKiB0aGUgY2F1c2UgYml0IHNldCBpbiAkZmNyMzEuCiAJCSAqLwotCQljdXJyZW50LT50aHJlYWQuZnB1LnNvZnQuZmNyMzEgJj0gfkZQVV9DU1JfQUxMX1g7CisJCWN1cnJlbnQtPnRocmVhZC5mcHUuZmNyMzEgJj0gfkZQVV9DU1JfQUxMX1g7CiAKIAkJLyogUmVzdG9yZSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgc3RhdGUgKi8KIAkJcmVzdG9yZV9mcChjdXJyZW50KTsKQEAgLTc1NSw3ICs3NTQsNyBAQAogCiAJCWlmICghY3B1X2hhc19mcHUpIHsKIAkJCWludCBzaWcgPSBmcHVfZW11bGF0b3JfY29wMUhhbmRsZXIocmVncywKLQkJCQkJCSZjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQpOworCQkJCQkJJmN1cnJlbnQtPnRocmVhZC5mcHUpOwogCQkJaWYgKHNpZykKIAkJCQlmb3JjZV9zaWcoc2lnLCBjdXJyZW50KTsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9GUEFGRgpAQCAtODE5LDE1ICs4MTgsMzAgQEAKIAogYXNtbGlua2FnZSB2b2lkIGRvX21jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwljb25zdCBpbnQgZmllbGQgPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCWludCBtdWx0aV9tYXRjaCA9IHJlZ3MtPmNwMF9zdGF0dXMgJiBTVDBfVFM7CisKIAlzaG93X3JlZ3MocmVncyk7Ci0JZHVtcF90bGJfYWxsKCk7CisKKwlpZiAobXVsdGlfbWF0Y2gpIHsKKwkJcHJpbnRrKCJJbmRleCAgIDogJTB4XG4iLCByZWFkX2MwX2luZGV4KCkpOworCQlwcmludGsoIlBhZ2VtYXNrOiAlMHhcbiIsIHJlYWRfYzBfcGFnZW1hc2soKSk7CisJCXByaW50aygiRW50cnlIaSA6ICUwKmx4XG4iLCBmaWVsZCwgcmVhZF9jMF9lbnRyeWhpKCkpOworCQlwcmludGsoIkVudHJ5TG8wOiAlMCpseFxuIiwgZmllbGQsIHJlYWRfYzBfZW50cnlsbzAoKSk7CisJCXByaW50aygiRW50cnlMbzE6ICUwKmx4XG4iLCBmaWVsZCwgcmVhZF9jMF9lbnRyeWxvMSgpKTsKKwkJcHJpbnRrKCJcbiIpOworCQlkdW1wX3RsYl9hbGwoKTsKKwl9CisKKwlzaG93X2NvZGUoKHVuc2lnbmVkIGludCAqKSByZWdzLT5jcDBfZXBjKTsKKwogCS8qCiAJICogU29tZSBjaGlwcyBtYXkgaGF2ZSBvdGhlciBjYXVzZXMgb2YgbWFjaGluZSBjaGVjayAoZS5nLiBTQjEKIAkgKiBncmFkdWF0aW9uIHRpbWVyKQogCSAqLwogCXBhbmljKCJDYXVnaHQgTWFjaGluZSBDaGVjayBleGNlcHRpb24gLSAlc2NhdXNlZCBieSBtdWx0aXBsZSAiCiAJICAgICAgIm1hdGNoaW5nIGVudHJpZXMgaW4gdGhlIFRMQi4iLAotCSAgICAgIChyZWdzLT5jcDBfc3RhdHVzICYgU1QwX1RTKSA/ICIiIDogIm5vdCAiKTsKKwkgICAgICAobXVsdGlfbWF0Y2gpID8gIiIgOiAibm90ICIpOwogfQogCiBhc21saW5rYWdlIHZvaWQgZG9fbXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC05MDIsNiArOTE2LDcgQEAKIHsKIAlzd2l0Y2ggKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSkgewogCWNhc2UgQ1BVXzI0SzoKKwljYXNlIENQVV8zNEs6CiAJY2FzZSBDUFVfNUtDOgogCQl3cml0ZV9jMF9lY2MoMHg4MDAwMDAwMCk7CiAJCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAxNGZhMDBlLi5iODRkMWY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNTEsMjMgKzE1MSwxMyBAQAogCiAgIC8qIFRoaXMgaXMgdGhlIE1JUFMgc3BlY2lmaWMgbWRlYnVnIHNlY3Rpb24uICAqLwogICAubWRlYnVnIDogeyAqKC5tZGVidWcpIH0KLSAgLyogVGhlc2UgYXJlIG5lZWRlZCBmb3IgRUxGIGJhY2tlbmRzIHdoaWNoIGhhdmUgbm90IHlldCBiZWVuCi0gICAgIGNvbnZlcnRlZCB0byB0aGUgbmV3IHN0eWxlIGxpbmtlci4gICovCi0gIC5zdGFiIDAgOiB7ICooLnN0YWIpIH0KLSAgLnN0YWJzdHIgMCA6IHsgKiguc3RhYnN0cikgfQotICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KLSAgICAgU3ltYm9scyBpbiB0aGUgLmRlYnVnIERXQVJGIHNlY3Rpb24gYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gICAgIHNlY3Rpb24gc28gd2UgYmVnaW4gLmRlYnVnIGF0IDAuICBJdCdzIG5vdCBjbGVhciB5ZXQgd2hhdCBuZWVkcyB0byBoYXBwZW4KLSAgICAgZm9yIHRoZSBvdGhlcnMuICAgKi8KLSAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9Ci0gIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9Ci0gIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9Ci0gIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQotICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQotICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorCisgIFNUQUJTX0RFQlVHCisKKyAgRFdBUkZfREVCVUcKKwogICAvKiBUaGVzZSBtdXN0IGFwcGVhciByZWdhcmRsZXNzIG9mICAuICAqLwogICAuZ3B0YWIuc2RhdGEgOiB7ICooLmdwdGFiLmRhdGEpICooLmdwdGFiLnNkYXRhKSB9CiAgIC5ncHRhYi5zYnNzIDogeyAqKC5ncHRhYi5ic3MpICooLmdwdGFiLnNic3MpIH0KLSAgLmNvbW1lbnQgOiB7ICooLmNvbW1lbnQpIH0KICAgLm5vdGUgOiB7ICooLm5vdGUpIH0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9zZXR1cC5jIGIvYXJjaC9taXBzL2xhc2F0L3NldHVwLmMKaW5kZXggYmI3MGE4Mi4uM2Y2NDI3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3NldHVwLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogfQogI2VuZGlmCiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJaW50IGk7CiAJbGFzYXRfbWlzYyAgPSAmbGFzYXRfbWlzY19pbmZvW21pcHNfbWFjaHR5cGVdOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKaW5kZXggY2YxMmNhZi4uYjIyNTU0MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCkBAIC03LDQgKzcsNyBAQAogCiBvYmoteQkrPSBpb21hcC5vCiAKKyMgbGliZ2NjLXN0eWxlIHN0dWZmIG5lZWRlZCBpbiB0aGUga2VybmVsCitsaWIteSArPSBhc2hsZGkzLm8gYXNocmRpMy5vIGxzaHJkaTMubworCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL2FzaGxkaTMuYyBiL2FyY2gvbWlwcy9saWIvYXNobGRpMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYjgwZjMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xpYi9hc2hsZGkzLmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAibGliZ2NjLmgiCisKK2xvbmcgbG9uZyBfX2FzaGxkaTMobG9uZyBsb25nIHUsIHdvcmRfdHlwZSBiKQoreworCURXdW5pb24gdXUsIHc7CisJd29yZF90eXBlIGJtOworCisJaWYgKGIgPT0gMCkKKwkJcmV0dXJuIHU7CisKKwl1dS5sbCA9IHU7CisJYm0gPSAzMiAtIGI7CisKKwlpZiAoYm0gPD0gMCkgeworCQl3LnMubG93ID0gMDsKKwkJdy5zLmhpZ2ggPSAodW5zaWduZWQgaW50KSB1dS5zLmxvdyA8PCAtYm07CisJfSBlbHNlIHsKKwkJY29uc3QgdW5zaWduZWQgaW50IGNhcnJpZXMgPSAodW5zaWduZWQgaW50KSB1dS5zLmxvdyA+PiBibTsKKworCQl3LnMubG93ID0gKHVuc2lnbmVkIGludCkgdXUucy5sb3cgPDwgYjsKKwkJdy5zLmhpZ2ggPSAoKHVuc2lnbmVkIGludCkgdXUucy5oaWdoIDw8IGIpIHwgY2FycmllczsKKwl9CisKKwlyZXR1cm4gdy5sbDsKK30KKworRVhQT1JUX1NZTUJPTChfX2FzaGxkaTMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9hc2hyZGkzLmMgYi9hcmNoL21pcHMvbGliL2FzaHJkaTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODg0YTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xpYi9hc2hyZGkzLmMKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAibGliZ2NjLmgiCisKK2xvbmcgbG9uZyBfX2FzaHJkaTMobG9uZyBsb25nIHUsIHdvcmRfdHlwZSBiKQoreworCURXdW5pb24gdXUsIHc7CisJd29yZF90eXBlIGJtOworCisJaWYgKGIgPT0gMCkKKwkJcmV0dXJuIHU7CisKKwl1dS5sbCA9IHU7CisJYm0gPSAzMiAtIGI7CisKKwlpZiAoYm0gPD0gMCkgeworCQkvKiB3LnMuaGlnaCA9IDEuLjEgb3IgMC4uMCAqLworCQl3LnMuaGlnaCA9CisJCSAgICB1dS5zLmhpZ2ggPj4gMzE7CisJCXcucy5sb3cgPSB1dS5zLmhpZ2ggPj4gLWJtOworCX0gZWxzZSB7CisJCWNvbnN0IHVuc2lnbmVkIGludCBjYXJyaWVzID0gKHVuc2lnbmVkIGludCkgdXUucy5oaWdoIDw8IGJtOworCisJCXcucy5oaWdoID0gdXUucy5oaWdoID4+IGI7CisJCXcucy5sb3cgPSAoKHVuc2lnbmVkIGludCkgdXUucy5sb3cgPj4gYikgfCBjYXJyaWVzOworCX0KKworCXJldHVybiB3LmxsOworfQorCitFWFBPUlRfU1lNQk9MKF9fYXNocmRpMyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL2xpYmdjYy5oIGIvYXJjaC9taXBzL2xpYi9saWJnY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjE5ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xpYi9saWJnY2MuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVmIF9fQVNNX0xJQkdDQ19ICisjZGVmaW5lIF9fQVNNX0xJQkdDQ19ICisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3R5cGVkZWYgaW50IHdvcmRfdHlwZSBfX2F0dHJpYnV0ZV9fICgobW9kZSAoX193b3JkX18pKSk7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KK3N0cnVjdCBEV3N0cnVjdCB7CisJaW50IGhpZ2gsIGxvdzsKK307CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKK3N0cnVjdCBEV3N0cnVjdCB7CisJaW50IGxvdywgaGlnaDsKK307CisjZWxzZQorI2Vycm9yIEkgZmVlbCBzaWNrLgorI2VuZGlmCisKK3R5cGVkZWYgdW5pb24KK3sKKwlzdHJ1Y3QgRFdzdHJ1Y3QgczsKKwlsb25nIGxvbmcgbGw7Cit9IERXdW5pb247CisKKyNlbmRpZiAvKiBfX0FTTV9MSUJHQ0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9sc2hyZGkzLmMgYi9hcmNoL21pcHMvbGliL2xzaHJkaTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2Y4ZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xpYi9sc2hyZGkzLmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAibGliZ2NjLmgiCisKK2xvbmcgbG9uZyBfX2xzaHJkaTMobG9uZyBsb25nIHUsIHdvcmRfdHlwZSBiKQoreworCURXdW5pb24gdXUsIHc7CisJd29yZF90eXBlIGJtOworCisJaWYgKGIgPT0gMCkKKwkJcmV0dXJuIHU7CisKKwl1dS5sbCA9IHU7CisJYm0gPSAzMiAtIGI7CisKKwlpZiAoYm0gPD0gMCkgeworCQl3LnMuaGlnaCA9IDA7CisJCXcucy5sb3cgPSAodW5zaWduZWQgaW50KSB1dS5zLmhpZ2ggPj4gLWJtOworCX0gZWxzZSB7CisJCWNvbnN0IHVuc2lnbmVkIGludCBjYXJyaWVzID0gKHVuc2lnbmVkIGludCkgdXUucy5oaWdoIDw8IGJtOworCisJCXcucy5oaWdoID0gKHVuc2lnbmVkIGludCkgdXUucy5oaWdoID4+IGI7CisJCXcucy5sb3cgPSAoKHVuc2lnbmVkIGludCkgdXUucy5sb3cgPj4gYikgfCBjYXJyaWVzOworCX0KKworCXJldHVybiB3LmxsOworfQorCitFWFBPUlRfU1lNQk9MKF9fbHNocmRpMyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKaW5kZXggYWE1ODE4YS4uM2YwZDVkMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYwpAQCAtNjAsMTUgKzYwLDE1IEBACiAKIC8qIEZ1bmN0aW9uIHdoaWNoIGVtdWxhdGVzIGEgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb24uICovCiAKLXN0YXRpYyBpbnQgZnB1X2VtdShzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3QgKiwKK3N0YXRpYyBpbnQgZnB1X2VtdShzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgbWlwc19mcHVfc3RydWN0ICosCiAJbWlwc19pbnN0cnVjdGlvbik7CiAKICNpZiBfX21pcHMgPj0gNCAmJiBfX21pcHMgIT0gMzIKIHN0YXRpYyBpbnQgZnB1eF9lbXUoc3RydWN0IHB0X3JlZ3MgKiwKLQlzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3QgKiwgbWlwc19pbnN0cnVjdGlvbik7CisJc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqLCBtaXBzX2luc3RydWN0aW9uKTsKICNlbmRpZgogCi0vKiBGdXJ0aGVyIHByaXZhdGUgZGF0YSBmb3Igd2hpY2ggbm8gc3BhY2UgZXhpc3RzIGluIG1pcHNfZnB1X3NvZnRfc3RydWN0ICovCisvKiBGdXJ0aGVyIHByaXZhdGUgZGF0YSBmb3Igd2hpY2ggbm8gc3BhY2UgZXhpc3RzIGluIG1pcHNfZnB1X3N0cnVjdCAqLwogCiBzdHJ1Y3QgbWlwc19mcHVfZW11bGF0b3Jfc3RhdHMgZnB1ZW11c3RhdHM7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogICogVHdvIGluc3RydWN0aW9ucyBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgaW4gYSBicmFuY2ggZGVsYXkgc2xvdC4KICAqLwogCi1zdGF0aWMgaW50IGNvcDFFbXVsYXRlKHN0cnVjdCBwdF9yZWdzICp4Y3AsIHN0cnVjdCBtaXBzX2ZwdV9zb2Z0X3N0cnVjdCAqY3R4KQorc3RhdGljIGludCBjb3AxRW11bGF0ZShzdHJ1Y3QgcHRfcmVncyAqeGNwLCBzdHJ1Y3QgbWlwc19mcHVfc3RydWN0ICpjdHgpCiB7CiAJbWlwc19pbnN0cnVjdGlvbiBpcjsKIAl2b2lkICogZW11bHBjLCAqY29udHBjOwpAQCAtNTk1LDcgKzU5NSw3IEBACiBERUYzT1Aobm1hZGQsIGRwLCBpZWVlNzU0ZHBfbXVsLCBpZWVlNzU0ZHBfYWRkLCBpZWVlNzU0ZHBfbmVnKTsKIERFRjNPUChubXN1YiwgZHAsIGllZWU3NTRkcF9tdWwsIGllZWU3NTRkcF9zdWIsIGllZWU3NTRkcF9uZWcpOwogCi1zdGF0aWMgaW50IGZwdXhfZW11KHN0cnVjdCBwdF9yZWdzICp4Y3AsIHN0cnVjdCBtaXBzX2ZwdV9zb2Z0X3N0cnVjdCAqY3R4LAorc3RhdGljIGludCBmcHV4X2VtdShzdHJ1Y3QgcHRfcmVncyAqeGNwLCBzdHJ1Y3QgbWlwc19mcHVfc3RydWN0ICpjdHgsCiAJbWlwc19pbnN0cnVjdGlvbiBpcikKIHsKIAl1bnNpZ25lZCByY3NyID0gMDsJLyogcmVzdWx0aW5nIGNzciAqLwpAQCAtNzU5LDcgKzc1OSw3IEBACiAvKgogICogRW11bGF0ZSBhIHNpbmdsZSBDT1AxIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb24uCiAgKi8KLXN0YXRpYyBpbnQgZnB1X2VtdShzdHJ1Y3QgcHRfcmVncyAqeGNwLCBzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3QgKmN0eCwKK3N0YXRpYyBpbnQgZnB1X2VtdShzdHJ1Y3QgcHRfcmVncyAqeGNwLCBzdHJ1Y3QgbWlwc19mcHVfc3RydWN0ICpjdHgsCiAJbWlwc19pbnN0cnVjdGlvbiBpcikKIHsKIAlpbnQgcmZtdDsJCS8qIHJlc3VsdGluZyBmb3JtYXQgKi8KQEAgLTEyMzMsOCArMTIzMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBmcHVfZW11bGF0b3JfY29wMUhhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnhjcCwKLQlzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3QgKmN0eCkKK2ludCBmcHVfZW11bGF0b3JfY29wMUhhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnhjcCwgc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqY3R4KQogewogCXVuc2lnbmVkIGxvbmcgb2xkZXBjLCBwcmV2ZXBjOwogCW1pcHNfaW5zdHJ1Y3Rpb24gaW5zbjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9maW50LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmludC5jCmluZGV4IGExOTYyZWIuLjM5YTcxZGUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmludC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9maW50LmMKQEAgLTI5LDcgKzI5LDkgQEAKIAogaWVlZTc1NGRwIGllZWU3NTRkcF9maW50KGludCB4KQogewotCUNPTVBYRFA7CisJdTY0IHhtOworCWludCB4ZTsKKwlpbnQgeHM7CiAKIAlDTEVBUkNYOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZmxvbmcuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mbG9uZy5jCmluZGV4IGVhZTkwYTguLmYwOGYyMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mbG9uZy5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mbG9uZy5jCkBAIC0yOSw3ICsyOSw5IEBACiAKIGllZWU3NTRkcCBpZWVlNzU0ZHBfZmxvbmcoczY0IHgpCiB7Ci0JQ09NUFhEUDsKKwl1NjQgeG07CisJaW50IHhlOworCWludCB4czsKIAogCUNMRUFSQ1g7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0LmggYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NC5oCmluZGV4IDE3MWYxNzcuLmRkOTE3MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0LmgKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTQuaApAQCAtMzI5LDcgKzMyOSw3IEBACiAJdW5zaWduZWQgcGFkMDo3OwogI2VuZGlmCiB9OwotI2RlZmluZSBpZWVlNzU0X2NzciAoKihzdHJ1Y3QgX2llZWU3NTRfY3NyICopKCZjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQuZmNyMzEpKQorI2RlZmluZSBpZWVlNzU0X2NzciAoKihzdHJ1Y3QgX2llZWU3NTRfY3NyICopKCZjdXJyZW50LT50aHJlYWQuZnB1LmZjcjMxKSkKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpZWVlNzU0X2dldHJtKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUva2VybmVsX2xpbmthZ2UuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9rZXJuZWxfbGlua2FnZS5jCmluZGV4IGQxODdhYjcuLjU2Y2EwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9rZXJuZWxfbGlua2FnZS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9rZXJuZWxfbGlua2FnZS5jCkBAIC0zOSw5ICszOSw5IEBACiAJCXByaW50aygiQWxnb3JpdGhtaWNzL01JUFMgRlBVIEVtdWxhdG9yIHYxLjVcbiIpOwogCX0KIAotCWN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSA9IDA7CisJY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZwcltpXSA9IFNJR05BTExJTkdfTkFOOworCQljdXJyZW50LT50aHJlYWQuZnB1LmZwcltpXSA9IFNJR05BTExJTkdfTkFOOwogCX0KIH0KIApAQCAtNTksMTAgKzU5LDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCWVyciB8PQotCQkgICAgX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQuZnByW2ldLAotCQkJICAgICAgICZzYy0+c2NfZnByZWdzW2ldKTsKKwkJICAgIF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5mcHJbaV0sICZzYy0+c2NfZnByZWdzW2ldKTsKIAl9Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZjcjMxLCAmc2MtPnNjX2ZwY19jc3IpOworCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuZmNyMzEsICZzYy0+c2NfZnBjX2Nzcik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzQsMTAgKzczLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCWVyciB8PQotCQkgICAgX19nZXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LnNvZnQuZnByW2ldLAotCQkJICAgICAgICZzYy0+c2NfZnByZWdzW2ldKTsKKwkJICAgIF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5mcHJbaV0sICZzYy0+c2NfZnByZWdzW2ldKTsKIAl9Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZjcjMxLCAmc2MtPnNjX2ZwY19jc3IpOworCWVyciB8PSBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuZmNyMzEsICZzYy0+c2NfZnBjX2Nzcik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTQsMTAgKzkyLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSs9MikgewogCQllcnIgfD0KLQkJICAgIF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZwcltpXSwKLQkJCSAgICAgICAmc2MtPnNjX2ZwcmVnc1tpXSk7CisJCSAgICBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuZnByW2ldLCAmc2MtPnNjX2ZwcmVnc1tpXSk7CiAJfQotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSwgJnNjLT5zY19mcGNfY3NyKTsKKwllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LmZjcjMxLCAmc2MtPnNjX2ZwY19jc3IpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTEwOSwxMCArMTA2LDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSs9MikgewogCQllcnIgfD0KLQkJICAgIF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwdS5zb2Z0LmZwcltpXSwKLQkJCSAgICAgICAmc2MtPnNjX2ZwcmVnc1tpXSk7CisJCSAgICBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuZnByW2ldLCAmc2MtPnNjX2ZwcmVnc1tpXSk7CiAJfQotCWVyciB8PSBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHUuc29mdC5mY3IzMSwgJnNjLT5zY19mcGNfY3NyKTsKKwllcnIgfD0gX19nZXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnB1LmZjcjMxLCAmc2MtPnNjX2ZwY19jc3IpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9maW50LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmludC5jCmluZGV4IDdhYWMxM2EuLmU4OGUxMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9maW50LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX2ZpbnQuYwpAQCAtMjksNyArMjksOSBAQAogCiBpZWVlNzU0c3AgaWVlZTc1NHNwX2ZpbnQoaW50IHgpCiB7Ci0JQ09NUFhTUDsKKwl1bnNpZ25lZCB4bTsKKwlpbnQgeGU7CisJaW50IHhzOwogCiAJQ0xFQVJDWDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L3NwX2Zsb25nLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmxvbmcuYwppbmRleCAzZDZjMWQxLi4yNmQ2OTE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmxvbmcuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfZmxvbmcuYwpAQCAtMjksNyArMjksOSBAQAogCiBpZWVlNzU0c3AgaWVlZTc1NHNwX2Zsb25nKHM2NCB4KQogewotCUNPTVBYRFA7CQkvKiA8LS0tIG5lZWQgNjQtYml0IG1hbnRpc3NhIHRlbXAgKi8KKwl1NjQgeG07CQkvKiA8LS0tIG5lZWQgNjQtYml0IG1hbnRpc3NhIHRlbXAgKi8KKwlpbnQgeGU7CisJaW50IHhzOwogCiAJQ0xFQVJDWDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfc2V0dXAuYwppbmRleCBjMjBkNDAxLi44Y2M5ZWZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfc2V0dXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfc2V0dXAuYwpAQCAtNTAsNyArNTAsNyBAQAogCXJldHVybiAiTUlQUyBBdGxhcyI7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJbWlwc19wY2liaW9zX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYwppbmRleCBiYzRkMDkzLi5mZDQ5MjU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYwpAQCAtNzYsNiArNzYsMTUgQEAKIAkJCW1lbXNpemUgPSBzaW1wbGVfc3RydG9sKG1lbXNpemVfc3RyLCBOVUxMLCAwKTsKIAkJfQogCX0KKworI2lmZGVmIENPTkZJR19DUFVfQklHX0VORElBTgorCS8qCisJICogU09DLWl0IHN3YXBzLCBvciBwZXJoYXBzIGRvZXNuJ3Qgc3dhcCwgd2hlbiBETUEnaW5nIHRoZSBsYXN0CisJICogd29yZCBvZiBwaHlzaWNhbCBtZW1vcnkKKwkgKi8KKwltZW1zaXplIC09IFBBR0VfU0laRTsKKyNlbmRpZgorCiAJbWVtc2V0KG1kZXNjLCAwLCBzaXplb2YobWRlc2MpKTsKIAogCW1kZXNjWzBdLnR5cGUgPSB5YW1vbl9kb250dXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYwppbmRleCBiODQ4OGFhLi4wNzY2ZTQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYwpAQCAtNTMsMTEgKzUzLDExIEBACiAjZW5kaWYKIAogc3RydWN0IHJlc291cmNlIHN0YW5kYXJkX2lvX3Jlc291cmNlc1tdID0gewotCXsgImRtYTEiLCAweDAwLCAweDFmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJ0aW1lciIsIDB4NDAsIDB4NWYsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgImtleWJvYXJkIiwgMHg2MCwgMHg2ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiZG1hIHBhZ2UgcmVnIiwgMHg4MCwgMHg4ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiZG1hMiIsIDB4YzAsIDB4ZGYsIElPUkVTT1VSQ0VfQlVTWSB9LAorCXsgLm5hbWUgPSAiZG1hMSIsIC5zdGFydCA9IDB4MDAsIC5lbmQgPSAweDFmLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfSwKKwl7IC5uYW1lID0gInRpbWVyIiwgLnN0YXJ0ID0gMHg0MCwgLmVuZCA9IDB4NWYsIC5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB9LAorCXsgLm5hbWUgPSAia2V5Ym9hcmQiLCAuc3RhcnQgPSAweDYwLCAuZW5kID0gMHg2ZiwgLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZIH0sCisJeyAubmFtZSA9ICJkbWEgcGFnZSByZWciLCAuc3RhcnQgPSAweDgwLCAuZW5kID0gMHg4ZiwgLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZIH0sCisJeyAubmFtZSA9ICJkbWEyIiwgLnN0YXJ0ID0gMHhjMCwgLmVuZCA9IDB4ZGYsIC5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB9LAogfTsKIAogI2lmZGVmIENPTkZJR19NVEQKQEAgLTExMSw3ICsxMTEsNyBAQAogfQogI2VuZGlmCiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zbXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zbXAuYwppbmRleCA2YzZjOGVlLi5jZjk2NzE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc21wLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL21hbHRhL21hbHRhX3NtcC5jCkBAIC0zNCwyNSArMzQsNiBAQAogfQogCiAvKgotICogRGV0ZWN0IGF2YWlsYWJsZSBDUFVzL1ZQRXMvVENzIGFuZCBwb3B1bGF0ZSBwaHlzX2NwdV9wcmVzZW50X21hcAotICovCi0KLXZvaWQgX19pbml0IHByb21fYnVpbGRfY3B1X21hcCh2b2lkKQotewotCWludCBuZXh0c2xvdDsKLQotCS8qCi0JICogQXMgb2YgTm92ZW1iZXIsIDIwMDQsIE1JUFNzaW0gb25seSBzaW11bGF0ZXMgb25lIGNvcmUKLQkgKiBhdCBhIHRpbWUuICBIb3dldmVyLCB0aGF0IGNvcmUgbWF5IGJlIGEgTUlQUyBNVCBjb3JlCi0JICogd2l0aCBtdWx0aXBsZSB2aXJ0dWFsIHByb2Nlc3NvcnMgYW5kIHRocmVhZCBjb250ZXh0cy4KLQkgKi8KLQotCWlmIChyZWFkX2MwX2NvbmZpZzMoKSAmICgxPDwyKSkgewotCQluZXh0c2xvdCA9IG1pcHNtdF9idWlsZF9jcHVfbWFwKDEpOwotCX0KLX0KLQotLyoKICAqIFBsYXRmb3JtICJDUFUiIHN0YXJ0dXAgaG9vawogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfc2V0dXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfc2V0dXAuYwppbmRleCA0MjY2Y2U0Li42NDMwZjExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9zZXR1cC5jCkBAIC00NSw3ICs0NSw3IEBACiAJcmV0dXJuICJNSVBTIFNFQUQiOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSAweDdmZmZmZmZmOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zZXR1cC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc2V0dXAuYwppbmRleCBhMmZkNjI5Li4xNWE1ZGFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NldHVwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAlyZXR1cm4gIk1JUFNzaW0iOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXNldF9pb19wb3J0X2Jhc2UoMHhiZmQwMDAwMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMKaW5kZXggYjcwODRlNy4uMDA0MDcwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc21wLmMKQEAgLTUxLDI3ICs1MSw2IEBACiB9CiAKIC8qCi0gKiBEZXRlY3QgYXZhaWxhYmxlIENQVXMvVlBFcy9UQ3MgYW5kIHBvcHVsYXRlIHBoeXNfY3B1X3ByZXNlbnRfbWFwCi0gKi8KLQotdm9pZCBfX2luaXQgcHJvbV9idWlsZF9jcHVfbWFwKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCWludCBuZXh0c2xvdDsKLQotCS8qCi0JICogQXMgb2YgTm92ZW1iZXIsIDIwMDQsIE1JUFNzaW0gb25seSBzaW11bGF0ZXMgb25lIGNvcmUKLQkgKiBhdCBhIHRpbWUuICBIb3dldmVyLCB0aGF0IGNvcmUgbWF5IGJlIGEgTUlQUyBNVCBjb3JlCi0JICogd2l0aCBtdWx0aXBsZSB2aXJ0dWFsIHByb2Nlc3NvcnMgYW5kIHRocmVhZCBjb250ZXh0cy4KLQkgKi8KLQotCWlmIChyZWFkX2MwX2NvbmZpZzMoKSAmICgxPDwyKSkgewotCQluZXh0c2xvdCA9IG1pcHNtdF9idWlsZF9jcHVfbWFwKDEpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCi19Ci0KLS8qCiAgKiBQbGF0Zm9ybSAiQ1BVIiBzdGFydHVwIGhvb2sKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IDQxODJlMTEuLjRhNDM5MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC0yOSw2ICsyOSwyNyBAQAogI2luY2x1ZGUgPGFzbS93YXIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPiAvKiBmb3IgcnVuX3VuY2FjaGVkKCkgKi8KIAorCisvKgorICogU3BlY2lhbCBWYXJpYW50IG9mIHNtcF9jYWxsX2Z1bmN0aW9uIGZvciB1c2UgYnkgY2FjaGUgZnVuY3Rpb25zOgorICoKKyAqICBvIE5vIHJldHVybiB2YWx1ZQorICogIG8gY29sbGFwc2VzIHRvIG5vcm1hbCBmdW5jdGlvbiBjYWxsIG9uIFVQIGtlcm5lbHMKKyAqICBvIGNvbGxhcHNlcyB0byBub3JtYWwgZnVuY3Rpb24gY2FsbCBvbiBzeXN0ZW1zIHdpdGggYSBzaW5nbGUgc2hhcmVkCisgKiAgICBwcmltYXJ5IGNhY2hlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcjRrX29uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXRyeSwgaW50IHdhaXQpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApICYmICFkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCisJc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgcmV0cnksIHdhaXQpOworI2VuZGlmCisJZnVuYyhpbmZvKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCiAvKgogICogTXVzdCBkaWUuCiAgKi8KQEAgLTI5OSw3ICszMjAsNyBAQAogCWlmICghY3B1X2hhc19kY19hbGlhc2VzKQogCQlyZXR1cm47CiAKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfYWxsLCBOVUxMLCAxLCAxKTsKKwlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX2FsbCwgTlVMTCwgMSwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfX19mbHVzaF9jYWNoZV9hbGwodm9pZCAqIGFyZ3MpCkBAIC0zMTQsMTMgKzMzNSwxNCBAQAogCWNhc2UgQ1BVX1I0NDAwTUM6CiAJY2FzZSBDUFVfUjEwMDAwOgogCWNhc2UgQ1BVX1IxMjAwMDoKKwljYXNlIENQVV9SMTQwMDA6CiAJCXI0a19ibGFzdF9zY2FjaGUoKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHI0a19fX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKQogewotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19fX2ZsdXNoX2NhY2hlX2FsbCwgTlVMTCwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19fX2ZsdXNoX2NhY2hlX2FsbCwgTlVMTCwgMSwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcmFuZ2Uodm9pZCAqIGFyZ3MpCkBAIC0zNDEsNyArMzYzLDcgQEAKIHN0YXRpYyB2b2lkIHI0a19mbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcmFuZ2UsIHZtYSwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9yYW5nZSwgdm1hLCAxLCAxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3I0a19mbHVzaF9jYWNoZV9tbSh2b2lkICogYXJncykKQEAgLTM3MCw3ICszOTIsNyBAQAogCWlmICghY3B1X2hhc19kY19hbGlhc2VzKQogCQlyZXR1cm47CiAKLQlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfbW0sIG1tLCAxLCAxKTsKKwlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2NhY2hlX21tLCBtbSwgMSwgMSk7CiB9CiAKIHN0cnVjdCBmbHVzaF9jYWNoZV9wYWdlX2FyZ3MgewpAQCAtNDYxLDcgKzQ4Myw3IEBACiAJYXJncy5hZGRyID0gYWRkcjsKIAlhcmdzLnBmbiA9IHBmbjsKIAotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9wYWdlLCAmYXJncywgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9wYWdlLCAmYXJncywgMSwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9yNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlKHZvaWQgKiBhZGRyKQpAQCAtNDcxLDcgKzQ5Myw3IEBACiAKIHN0YXRpYyB2b2lkIHI0a19mbHVzaF9kYXRhX2NhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQogewotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9kYXRhX2NhY2hlX3BhZ2UsICh2b2lkICopIGFkZHIsIDEsIDEpOworCXI0a19vbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfZGF0YV9jYWNoZV9wYWdlLCAodm9pZCAqKSBhZGRyLCAxLCAxKTsKIH0KIAogc3RydWN0IGZsdXNoX2ljYWNoZV9yYW5nZV9hcmdzIHsKQEAgLTUxNCw3ICs1MzYsNyBAQAogCWFyZ3Muc3RhcnQgPSBzdGFydDsKIAlhcmdzLmVuZCA9IGVuZDsKIAotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9pY2FjaGVfcmFuZ2UsICZhcmdzLCAxLCAxKTsKKwlyNGtfb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2ljYWNoZV9yYW5nZSwgJmFyZ3MsIDEsIDEpOwogCWluc3RydWN0aW9uX2hhemFyZCgpOwogfQogCkBAIC01OTAsNyArNjEyLDcgQEAKIAlhcmdzLnZtYSA9IHZtYTsKIAlhcmdzLnBhZ2UgPSBwYWdlOwogCi0Jb25fZWFjaF9jcHUobG9jYWxfcjRrX2ZsdXNoX2ljYWNoZV9wYWdlLCAmYXJncywgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9pY2FjaGVfcGFnZSwgJmFyZ3MsIDEsIDEpOwogfQogCiAKQEAgLTY4OSw3ICs3MTEsNyBAQAogCiBzdGF0aWMgdm9pZCByNGtfZmx1c2hfY2FjaGVfc2lndHJhbXAodW5zaWduZWQgbG9uZyBhZGRyKQogewotCW9uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9zaWd0cmFtcCwgKHZvaWQgKikgYWRkciwgMSwgMSk7CisJcjRrX29uX2VhY2hfY3B1KGxvY2FsX3I0a19mbHVzaF9jYWNoZV9zaWd0cmFtcCwgKHZvaWQgKikgYWRkciwgMSwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHI0a19mbHVzaF9pY2FjaGVfYWxsKHZvaWQpCkBAIC04MTIsNiArODM0LDcgQEAKIAogCWNhc2UgQ1BVX1IxMDAwMDoKIAljYXNlIENQVV9SMTIwMDA6CisJY2FzZSBDUFVfUjE0MDAwOgogCQlpY2FjaGVfc2l6ZSA9IDEgPDwgKDEyICsgKChjb25maWcgJiBSMTBLX0NPTkZfSUMpID4+IDI5KSk7CiAJCWMtPmljYWNoZS5saW5lc3ogPSA2NDsKIAkJYy0+aWNhY2hlLndheXMgPSAyOwpAQCAtOTY1LDkgKzk4OCwxMSBAQAogCQljLT5kY2FjaGUuZmxhZ3MgfD0gTUlQU19DQUNIRV9QSU5ERVg7CiAJY2FzZSBDUFVfUjEwMDAwOgogCWNhc2UgQ1BVX1IxMjAwMDoKKwljYXNlIENQVV9SMTQwMDA6CiAJY2FzZSBDUFVfU0IxOgogCQlicmVhazsKIAljYXNlIENQVV8yNEs6CisJY2FzZSBDUFVfMzRLOgogCQlpZiAoIShyZWFkX2MwX2NvbmZpZzcoKSAmICgxIDw8IDE2KSkpCiAJZGVmYXVsdDoKIAkJCWlmIChjLT5kY2FjaGUud2F5c2l6ZSA+IFBBR0VfU0laRSkKQEAgLTEwOTEsNiArMTExNiw3IEBACiAKIAljYXNlIENQVV9SMTAwMDA6CiAJY2FzZSBDUFVfUjEyMDAwOgorCWNhc2UgQ1BVX1IxNDAwMDoKIAkJc2NhY2hlX3NpemUgPSAweDgwMDAwIDw8ICgoY29uZmlnICYgUjEwS19DT05GX1NTKSA+PiAxNik7CiAJCWMtPnNjYWNoZS5saW5lc3ogPSA2NCA8PCAoKGNvbmZpZyA+PiAxMykgJiAxKTsKIAkJYy0+c2NhY2hlLndheXMgPSAyOwpAQCAtMTEzNSw2ICsxMTYxLDMxIEBACiAJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9TVUJTRVRfQ0FDSEVTOwogfQogCit2b2lkIGF1MXgwMF9maXh1cF9jb25maWdfb2Qodm9pZCkKK3sKKwkvKgorCSAqIGMwX2NvbmZpZy5vZCAoYml0IDE5KSB3YXMgd3JpdGUgb25seSAoYW5kIHJlYWQgYXMgMCkKKwkgKiBvbiB0aGUgZWFybHkgcmV2aXNpb25zIG9mIEFsY2hlbXkgU09Dcy4gIEl0IGRpc2FibGVzIHRoZSBidXMKKwkgKiB0cmFuc2FjdGlvbiBvdmVybGFwcGluZyBhbmQgbmVlZHMgdG8gYmUgc2V0IHRvIGZpeCB2YXJpb3VzIGVycmF0YS4KKwkgKi8KKwlzd2l0Y2ggKHJlYWRfYzBfcHJpZCgpKSB7CisJY2FzZSAweDAwMDMwMTAwOiAvKiBBdTEwMDAgREEgKi8KKwljYXNlIDB4MDAwMzAyMDE6IC8qIEF1MTAwMCBIQSAqLworCWNhc2UgMHgwMDAzMDIwMjogLyogQXUxMDAwIEhCICovCisJY2FzZSAweDAxMDMwMjAwOiAvKiBBdTE1MDAgQUIgKi8KKwkvKgorCSAqIEF1MTEwMCBlcnJhdGEgYWN0dWFsbHkga2VlcHMgc2lsZW5jZSBhYm91dCB0aGlzIGJpdCwgc28gd2Ugc2V0IGl0CisJICoganVzdCBpbiBjYXNlIGZvciB0aG9zZSByZXZpc2lvbnMgdGhhdCByZXF1aXJlIGl0IHRvIGJlIHNldCBhY2NvcmRpbmcKKwkgKiB0byBhcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jcHV0YWJsZS5jCisJICovCisJY2FzZSAweDAyMDMwMjAwOiAvKiBBdTExMDAgQUIgKi8KKwljYXNlIDB4MDIwMzAyMDE6IC8qIEF1MTEwMCBCQSAqLworCWNhc2UgMHgwMjAzMDIwMjogLyogQXUxMTAwIEJDICovCisJCXNldF9jMF9jb25maWcoMSA8PCAxOSk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGlubGluZSB2b2lkIGNvaGVyZW5jeV9zZXR1cCh2b2lkKQogewogCWNoYW5nZV9jMF9jb25maWcoQ09ORl9DTV9DTUFTSywgQ09ORl9DTV9ERUZBVUxUKTsKQEAgLTExNTUsNiArMTIwNiwxNSBAQAogCWNhc2UgQ1BVX1I0NDAwTUM6CiAJCWNsZWFyX2MwX2NvbmZpZyhDT05GX0NVKTsKIAkJYnJlYWs7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGNhdGNoIHRoZSBlYWxyeSBBbGNoZW15IFNPQ3Mgd2l0aAorCSAqIHRoZSB3cml0ZS1vbmx5IGNvX2NvbmZpZy5vZCBiaXQgYW5kIHNldCBpdCBiYWNrIHRvIG9uZS4uLgorCSAqLworCWNhc2UgQ1BVX0FVMTAwMDogLyogcmV2LiBEQSwgSEEsIEhCICovCisJY2FzZSBDUFVfQVUxMTAwOiAvKiByZXYuIEFCLCBCQSwgQkMgPz8gKi8KKwljYXNlIENQVV9BVTE1MDA6IC8qIHJldi4gQUIgKi8KKwkJYXUxeDAwX2ZpeHVwX2NvbmZpZ19vZCgpOworCQlicmVhazsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IGMyMjMwOGI5Li4zM2Y2ZTFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCWZvciAodG1wID0gMDsgdG1wIDwgbWF4X2xvd19wZm47IHRtcCsrKQogCQlpZiAocGFnZV9pc19yYW0odG1wKSkgewogCQkJcmFtKys7Ci0JCQlpZiAoUGFnZVJlc2VydmVkKG1lbV9tYXArdG1wKSkKKwkJCWlmIChQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UodG1wKSkpCiAJCQkJcmVzZXJ2ZWRwYWdlcysrOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9wZy1yNGsuYwppbmRleCBlNDM5MGRjLi5iN2M3NDkyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGctcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3BnLXI0ay5jCkBAIC0zNTcsNiArMzU3LDcgQEAKIAogCQljYXNlIENQVV9SMTAwMDA6CiAJCWNhc2UgQ1BVX1IxMjAwMDoKKwkJY2FzZSBDUFVfUjE0MDAwOgogCQkJcHJlZl9zcmNfbW9kZSA9IFByZWZfTG9hZFN0cmVhbWVkOwogCQkJcHJlZl9kc3RfbW9kZSA9IFByZWZfU3RvcmVTdHJlYW1lZDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggOWRjYTA5OS4uOTY1Y2I0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC00MTMsNyArNDEzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gdm9pZCBfX2luaXQgc2FuaXRpemVfdGxiX2VudHJpZXModm9pZCk7CiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvYmVfdGxiKHVuc2lnbmVkIGxvbmcgY29uZmlnKQogewogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggMDUzZGJhYy4uNTQ1MDdiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTg3NSw2ICs4NzUsNyBAQAogCiAJY2FzZSBDUFVfUjEwMDAwOgogCWNhc2UgQ1BVX1IxMjAwMDoKKwljYXNlIENQVV9SMTQwMDA6CiAJY2FzZSBDUFVfNEtDOgogCWNhc2UgQ1BVX1NCMToKIAljYXNlIENQVV9TQjFBOgpAQCAtOTA2LDYgKzkwNyw3IEBACiAJY2FzZSBDUFVfNEtFQzoKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMzRLOgorCWNhc2UgQ1BVXzc0SzoKIAkJaV9laGIocCk7CiAJCXRsYncocCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvZGJnX2lvLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYwppbmRleCA1NDJlYWM4Li5kN2RlYTBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9kYmdfaW8uYwpAQCAtNzMsNyArNzMsNyBAQAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCVVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwogCi0JLyogc2V0IHVwIGJ1YWQgcmF0ZSAqLworCS8qIHNldCB1cCBiYXVkIHJhdGUgKi8KIAl7CiAJCXVpbnQzMiBkaXZpc29yOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYwppbmRleCAxMzc5Yzc2Li5kZjE0ODU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCiBhcmNoX2luaXRjYWxsKGphX3BjaV9pbml0KTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wd29yZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYwppbmRleCBjNjkxOTUyLi44YzUzNDkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90XzMvc2V0dXAuYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIGFyY2hfaW5pdGNhbGwoamFfcGNpX2luaXQpOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGludCB0bXB3b3JkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvZGJnX2lvLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvZGJnX2lvLmMKaW5kZXggODcyMGJjYy4uZjBhNmEzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL2RiZ19pby5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9kYmdfaW8uYwpAQCAtNzMsNyArNzMsNyBAQAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCVVBUlQxNjU1MF9XUklURShPRlNfSU5UUl9FTkFCTEUsIDApOwogCi0JLyogc2V0IHVwIGJ1YWQgcmF0ZSAqLworCS8qIHNldCB1cCBiYXVkIHJhdGUgKi8KIAl7CiAJCXVpbnQzMiBkaXZpc29yOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2Mvc2V0dXAuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCmluZGV4IGEzZTZmNTUuLjI1N2UxZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlydGNfbWlwc19zZXRfdGltZSA9IG00OHQzN3lfc2V0X3RpbWU7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHRtcHdvcmQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9kYmdfaW8uYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9kYmdfaW8uYwppbmRleCA4NzIwYmNjLi5mMGE2YTM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZGJnX2lvLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2RiZ19pby5jCkBAIC03Myw3ICs3Myw3IEBACiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJVUFSVDE2NTUwX1dSSVRFKE9GU19JTlRSX0VOQUJMRSwgMCk7CiAKLQkvKiBzZXQgdXAgYnVhZCByYXRlICovCisJLyogc2V0IHVwIGJhdWQgcmF0ZSAqLwogCXsKIAkJdWludDMyIGRpdmlzb3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKaW5kZXggZmVkNGU4ZS4uNzIxNDNhYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXByaW50aygiRG9uZVxuIik7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdm9pZCAoKmwzZnVuYykodW5zaWduZWQgbG9uZykgPSAodm9pZCAqKSBLU0VHMUFERFIoc2V0dXBfbDNjYWNoZSk7CiAJdW5zaWduZWQgaW50IHRtcHdvcmQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKaW5kZXggZjJiNDg2Mi4uYzMxZTRjZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYwpAQCAtMTQsOCArMTQsOCBAQAogCiAjaW5jbHVkZSAib3BfaW1wbC5oIgogCi1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4IF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDAgX19hdHRyaWJ1dGVfXygod2VhaykpOworZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX21pcHN4eF9vcHMgX19hdHRyaWJ1dGVfXygod2VhaykpOworZXh0ZXJuIHN0cnVjdCBvcF9taXBzX21vZGVsIG9wX21vZGVsX3JtOTAwMF9vcHMgX19hdHRyaWJ1dGVfXygod2VhaykpOwogCiBzdGF0aWMgc3RydWN0IG9wX21pcHNfbW9kZWwgKm1vZGVsOwogCkBAIC04MCwxMyArODAsMTQgQEAKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMjVLRjoKIAljYXNlIENQVV8zNEs6CisJY2FzZSBDUFVfNzRLOgogCWNhc2UgQ1BVX1NCMToKIAljYXNlIENQVV9TQjFBOgotCQlsbW9kZWwgPSAmb3BfbW9kZWxfbWlwc3h4OworCQlsbW9kZWwgPSAmb3BfbW9kZWxfbWlwc3h4X29wczsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9STTkwMDA6Ci0JCWxtb2RlbCA9ICZvcF9tb2RlbF9ybTkwMDA7CisJCWxtb2RlbCA9ICZvcF9tb2RlbF9ybTkwMDBfb3BzOwogCQlicmVhazsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbWlwc3h4LmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbWlwc3h4LmMKaW5kZXggOTVkNDg4Yy4uZjI2YTAwZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX21pcHN4eC5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9taXBzeHguYwpAQCAtMjMsNyArMjMsNyBAQAogCiAjZGVmaW5lIE1fQ09VTlRFUl9PVkVSRkxPVwkJKDFVTCAgICA8PCAzMSkKIAotc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4Oworc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wczsKIAogc3RhdGljIHN0cnVjdCBtaXBzeHhfcmVnaXN0ZXJfY29uZmlnIHsKIAl1bnNpZ25lZCBpbnQgY29udHJvbFs0XTsKQEAgLTM0LDcgKzM0LDcgQEAKIAogc3RhdGljIHZvaWQgbWlwc3h4X3JlZ19zZXR1cChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmN0cikKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHgubnVtX2NvdW50ZXJzOworCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eF9vcHMubnVtX2NvdW50ZXJzOwogCWludCBpOwogCiAJLyogQ29tcHV0ZSB0aGUgcGVyZm9ybWFuY2UgY291bnRlciBjb250cm9sIHdvcmQuICAqLwpAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgdm9pZCBtaXBzeHhfY3B1X3NldHVwICh2b2lkICphcmdzKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eC5udW1fY291bnRlcnM7CisJdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4X29wcy5udW1fY291bnRlcnM7CiAKIAlzd2l0Y2ggKGNvdW50ZXJzKSB7CiAJY2FzZSA0OgpAQCAtODMsNyArODMsNyBAQAogLyogU3RhcnQgYWxsIGNvdW50ZXJzIG9uIGN1cnJlbnQgQ1BVICovCiBzdGF0aWMgdm9pZCBtaXBzeHhfY3B1X3N0YXJ0KHZvaWQgKmFyZ3MpCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gb3BfbW9kZWxfbWlwc3h4Lm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHhfb3BzLm51bV9jb3VudGVyczsKIAogCXN3aXRjaCAoY291bnRlcnMpIHsKIAljYXNlIDQ6CkBAIC0xMDAsNyArMTAwLDcgQEAKIC8qIFN0b3AgYWxsIGNvdW50ZXJzIG9uIGN1cnJlbnQgQ1BVICovCiBzdGF0aWMgdm9pZCBtaXBzeHhfY3B1X3N0b3Aodm9pZCAqYXJncykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHgubnVtX2NvdW50ZXJzOworCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eF9vcHMubnVtX2NvdW50ZXJzOwogCiAJc3dpdGNoIChjb3VudGVycykgewogCWNhc2UgNDoKQEAgLTExNiw3ICsxMTYsNyBAQAogCiBzdGF0aWMgaW50IG1pcHN4eF9wZXJmY291bnRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBvcF9tb2RlbF9taXBzeHgubnVtX2NvdW50ZXJzOworCXVuc2lnbmVkIGludCBjb3VudGVycyA9IG9wX21vZGVsX21pcHN4eF9vcHMubnVtX2NvdW50ZXJzOwogCXVuc2lnbmVkIGludCBjb250cm9sOwogCXVuc2lnbmVkIGludCBjb3VudGVyOwogCWludCBoYW5kbGVkID0gMDsKQEAgLTE4NywzMyArMTg3LDM3IEBACiAKIAlyZXNldF9jb3VudGVycyhjb3VudGVycyk7CiAKLQlvcF9tb2RlbF9taXBzeHgubnVtX2NvdW50ZXJzID0gY291bnRlcnM7CisJb3BfbW9kZWxfbWlwc3h4X29wcy5udW1fY291bnRlcnMgPSBjb3VudGVyczsKIAlzd2l0Y2ggKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSkgewogCWNhc2UgQ1BVXzIwS0M6Ci0JCW9wX21vZGVsX21pcHN4eC5jcHVfdHlwZSA9ICJtaXBzLzIwSyI7CisJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy8yMEsiOwogCQlicmVhazsKIAogCWNhc2UgQ1BVXzI0SzoKLQkJb3BfbW9kZWxfbWlwc3h4LmNwdV90eXBlID0gIm1pcHMvMjRLIjsKKwkJb3BfbW9kZWxfbWlwc3h4X29wcy5jcHVfdHlwZSA9ICJtaXBzLzI0SyI7CiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfMjVLRjoKLQkJb3BfbW9kZWxfbWlwc3h4LmNwdV90eXBlID0gIm1pcHMvMjVLIjsKKwkJb3BfbW9kZWxfbWlwc3h4X29wcy5jcHVfdHlwZSA9ICJtaXBzLzI1SyI7CiAJCWJyZWFrOwogCiAjaWZuZGVmIENPTkZJR19TTVAKIAljYXNlIENQVV8zNEs6Ci0JCW9wX21vZGVsX21pcHN4eC5jcHVfdHlwZSA9ICJtaXBzLzM0SyI7CisJCW9wX21vZGVsX21pcHN4eF9vcHMuY3B1X3R5cGUgPSAibWlwcy8zNEsiOworCQlicmVhazsKKworCWNhc2UgQ1BVXzc0SzoKKwkJb3BfbW9kZWxfbWlwc3h4X29wcy5jcHVfdHlwZSA9ICJtaXBzLzc0SyI7CiAJCWJyZWFrOwogI2VuZGlmCiAKIAljYXNlIENQVV81S0M6Ci0JCW9wX21vZGVsX21pcHN4eC5jcHVfdHlwZSA9ICJtaXBzLzVLIjsKKwkJb3BfbW9kZWxfbWlwc3h4X29wcy5jcHVfdHlwZSA9ICJtaXBzLzVLIjsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9TQjE6CiAJY2FzZSBDUFVfU0IxQToKLQkJb3BfbW9kZWxfbWlwc3h4LmNwdV90eXBlID0gIm1pcHMvc2IxIjsKKwkJb3BfbW9kZWxfbWlwc3h4X29wcy5jcHVfdHlwZSA9ICJtaXBzL3NiMSI7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTIyOSwxMiArMjMzLDEyIEBACiAKIHN0YXRpYyB2b2lkIG1pcHN4eF9leGl0KHZvaWQpCiB7Ci0JcmVzZXRfY291bnRlcnMob3BfbW9kZWxfbWlwc3h4Lm51bV9jb3VudGVycyk7CisJcmVzZXRfY291bnRlcnMob3BfbW9kZWxfbWlwc3h4X29wcy5udW1fY291bnRlcnMpOwogCiAJcGVyZl9pcnEgPSBudWxsX3BlcmZfaXJxOwogfQogCi1zdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHggPSB7CitzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHhfb3BzID0gewogCS5yZWdfc2V0dXAJPSBtaXBzeHhfcmVnX3NldHVwLAogCS5jcHVfc2V0dXAJPSBtaXBzeHhfY3B1X3NldHVwLAogCS5pbml0CQk9IG1pcHN4eF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX3JtOTAwMC5jIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX3JtOTAwMC5jCmluZGV4IDliNzVlNDEuLmI3MDYzZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9ybTkwMDAuYworKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfcm05MDAwLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWZyZWVfaXJxKHJtOTAwMF9wZXJmY291bnRfaXJxLCBOVUxMKTsKIH0KIAotc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwID0geworc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwX29wcyA9IHsKIAkucmVnX3NldHVwCT0gcm05MDAwX3JlZ19zZXR1cCwKIAkuY3B1X3NldHVwCT0gcm05MDAwX2NwdV9zZXR1cCwKIAkuaW5pdAkJPSBybTkwMDBfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCmluZGV4IDE2MjA1YjUuLjQ2NTc3OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQpAQCAtMTgsMTIgKzE4LDEyIEBACiBvYmotJChDT05GSUdfTUlQU19UWDM5MjcpCSs9IG9wcy10eDM5Mjcubwogb2JqLSQoQ09ORklHX1BDSV9WUjQxWFgpCSs9IG9wcy12cjQxeHgubyBwY2ktdnI0MXh4Lm8KIG9iai0kKENPTkZJR19ORUNfQ01CVlI0MTMzKQkrPSBmaXh1cC12cjQxMzMubworb2JqLSQoQ09ORklHX01BUktFSU5TKQkJKz0gb3BzLWVtbWEycmgubyBwY2ktZW1tYTJyaC5vIGZpeHVwLWVtbWEycmgubwogCiAjCiAjIFRoZXNlIGFyZSBzdGlsbCBwcmV0dHkgbXVjaCBpbiB0aGUgb2xkIHN0YXRlLCB3YXRjaCwgZ28gYmxpbmQuCiAjCi1vYmotJChDT05GSUdfRERCNTA3NCkJCSs9IGZpeHVwLWRkYjUwNzQubyBwY2ktZGRiNTA3NC5vIG9wcy1kZGI1MDc0Lm8KLW9iai0kKENPTkZJR19EREI1NDc2KQkJKz0gb3BzLWRkYjU0NzYubyBwY2ktZGRiNTQ3Ni5vCitvYmotJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJPSBvcHMtdGl0YW4ubyBwY2ktZXhjaXRlLm8gZml4dXAtZXhjaXRlLm8KIG9iai0kKENPTkZJR19EREI1NDc3KQkJKz0gZml4dXAtZGRiNTQ3Ny5vIHBjaS1kZGI1NDc3Lm8gb3BzLWRkYjU0Nzcubwogb2JqLSQoQ09ORklHX0xBU0FUKQkJKz0gcGNpLWxhc2F0Lm8KIG9iai0kKENPTkZJR19NSVBTX0FUTEFTKQkrPSBmaXh1cC1hdGxhcy5vCkBAIC00Myw3ICs0Myw3IEBACiBvYmotJChDT05GSUdfTU9NRU5DT19PQ0VMT1RfRykJKz0gZml4dXAtb2NlbG90LWcubyBwY2ktb2NlbG90LWcubwogb2JqLSQoQ09ORklHX1BNQ19ZT1NFTUlURSkJKz0gZml4dXAteW9zZW1pdGUubyBvcHMtdGl0YW4ubyBvcHMtdGl0YW4taHQubyBcCiAJCQkJICAgcGNpLXlvc2VtaXRlLm8KLW9iai0kKENPTkZJR19TR0lfSVAyNykJCSs9IHBjaS1pcDI3Lm8KK29iai0kKENPTkZJR19TR0lfSVAyNykJCSs9IG9wcy1icmlkZ2UubyBwY2ktaXAyNy5vCiBvYmotJChDT05GSUdfU0dJX0lQMzIpCQkrPSBmaXh1cC1pcDMyLm8gb3BzLW1hY2UubyBwY2ktaXAzMi5vCiBvYmotJChDT05GSUdfU0lCWVRFX1NCMTI1MCkJKz0gZml4dXAtc2IxMjUwLm8gcGNpLXNiMTI1MC5vCiBvYmotJChDT05GSUdfU0lCWVRFX0JDTTExMlgpCSs9IGZpeHVwLXNiMTI1MC5vIHBjaS1zYjEyNTAubwpAQCAtNTcsMyArNTcsNCBAQAogb2JqLSQoQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzgpCSs9IGZpeHVwLXR4NDkzOC5vIG9wcy10eDQ5Mzgubwogb2JqLSQoQ09ORklHX1ZJQ1RPUl9NUEMzMFgpCSs9IGZpeHVwLW1wYzMweC5vCiBvYmotJChDT05GSUdfWkFPX0NBUENFTExBKQkrPSBmaXh1cC1jYXBjZWxsYS5vCitvYmotJChDT05GSUdfV1JfUFBNQykJCSs9IGZpeHVwLXdycHBtYy5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWRkYjUwNzQuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtZGRiNTA3NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTRhN2MyLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtZGRiNTA3NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqIEl0J3MgbmljZSB0byBoYXZlIHRoZSBMRURzIG9uIHRoZSBHUElPIHBpbnMgYXZhaWxhYmxlIGZvciBkZWJ1Z2dpbmcKLSAqLwotc3RhdGljIHZvaWQgZGRiNTA3NF9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWV4dGVybiBzdHJ1Y3QgcGNpX2RldiAqcGNpX3BtdTsKLQl1OCB0ODsKLQotCXBjaV9wbXUgPSBkZXY7ICAvKiBmb3IgTEVEcyBEMiBhbmQgRDMgKi8KLQkvKiBQcm9ncmFtIHRoZSBsaW5lcyBmb3IgTEVEcyBEMiBhbmQgRDMgdG8gb3V0cHV0ICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDdkLCAmdDgpOwotCXQ4IHw9IDB4YzA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg3ZCwgdDgpOwotCS8qIFR1cm4gTEVEcyBEMiBhbmQgRDMgb2ZmICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDdlLCAmdDgpOwotCXQ4IHw9IDB4YzA7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg3ZSwgdDgpOwotfQotCi1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX003MTAxLAotCSAgZGRiNTA3NF9maXh1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtZW1tYTJyaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzRjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBhcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYworICogICAgICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgUENJIGNvbmZpZ3JhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNC0yMDA2CisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYXJjaC9taXBzL2RkYjV4eHgvZGRiNTQ3Ny9wY2kuYworICoKKyAqCUNvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCisjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgorCisjZGVmaW5lIEVNTUEyUkhfUENJX0hPU1RfU0xPVCAweDA5CisjZGVmaW5lIEVNTUEyUkhfVVNCX1NMT1QgMHgwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19FTU1BMlJIICAgICAgMHgwMTRiIC8qIEVNTUEyUkggUENJIEhvc3QgKi8KKworLyoKKyAqIHdlIGZpeCB1cCBpcnFzIGJhc2VkIG9uIHRoZSBzbG90IG51bWJlci4KKyAqIFRoZSBmaXJzdCBlbnRyeSBpcyBhdCBBRDoxMS4KKyAqIEZvcnR1bmF0ZWx5IHRoaXMgd29ya3MgYmVjYXVzZSwgYWx0aG91Z2ggd2UgaGF2ZSB0d28gcGNpIGJ1c2VzLAorICogdGhleSBhbGwgaGF2ZSBkaWZmZXJlbnQgc2xvdCBudW1iZXJzIChleGNlcHQgZm9yIHJvY2tob3BwZXIgc2xvdCAyMAorICogd2hpY2ggaXMgaGFuZGxlZCBiZWxvdykuCisgKgorICovCisKKyNkZWZpbmUJTUFYX1NMT1RfTlVNIDEwCitzdGF0aWMgdW5zaWduZWQgY2hhciBpcnFfbWFwW11bNV0gX19pbml0ZGF0YSA9IHsKKwlbM10gPSB7MCwgTUFSS0VJTlNfUENJX0lSUV9JTlRCLCBNQVJLRUlOU19QQ0lfSVJRX0lOVEMsCisJICAgICAgIE1BUktFSU5TX1BDSV9JUlFfSU5URCwgMCx9LAorCVs0XSA9IHswLCBNQVJLRUlOU19QQ0lfSVJRX0lOVEEsIDAsIDAsIDAsfSwKKwlbNV0gPSB7MCwgMCwgMCwgMCwgMCx9LAorCVs2XSA9IHswLCBNQVJLRUlOU19QQ0lfSVJRX0lOVEMsIE1BUktFSU5TX1BDSV9JUlFfSU5URCwKKwkgICAgICAgTUFSS0VJTlNfUENJX0lSUV9JTlRBLCBNQVJLRUlOU19QQ0lfSVJRX0lOVEIsfSwKK307CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBuZWNfdXNiX2NvbnRyb2xsZXJfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gRU1NQTJSSF9VU0JfU0xPVCkKKwkJLyogb24gYm9hcmQgVVNCIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiAqLworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHhlNCwgMSA8PCA1KTsKK30KKworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9ORUMsIFBDSV9ERVZJQ0VfSURfTkVDX1VTQiwKKwkJCW5lY191c2JfY29udHJvbGxlcl9maXh1cCk7CisKKy8qCisgKiBQcmV2ZW50IHRoZSBQQ0kgbGF5ZXIgZnJvbSBzZWVpbmcgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gdGhpcyBkZXZpY2UKKyAqIGlmIGl0IGlzIHRoZSBob3N0IGJyaWRnZSBieSBtYXJraW5nIGl0IGFzIHN1Y2guICBUaGVzZSByZXNvdXJjZXMgYXJlIG9mCisgKiBubyBjb25zZXF1ZW5jZSB0byB0aGUgUENJIGxheWVyICh0aGV5IGFyZSBoYW5kbGVkIGVsc2V3aGVyZSkuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBlbW1hMnJoX3BjaV9ob3N0X2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IGk7CisKKwlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gRU1NQTJSSF9QQ0lfSE9TVF9TTE9UKSB7CisJCWRldi0+Y2xhc3MgJj0gMHhmZjsKKwkJZGV2LT5jbGFzcyB8PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgPDwgODsKKwkJZm9yIChpID0gMDsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspIHsKKwkJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSAwOworCQkJZGV2LT5yZXNvdXJjZVtpXS5lbmQgPSAwOworCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IDA7CisJCX0KKwl9Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfRU1NQTJSSCwKKwkJCSBlbW1hMnJoX3BjaV9ob3N0X2ZpeHVwKTsKKworaW50IF9faW5pdCBwY2liaW9zX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXJldHVybiBpcnFfbWFwW3Nsb3RdW3Bpbl07Cit9CisKKy8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KK2ludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtZXhjaXRlLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWV4Y2l0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYTY5NmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWV4Y2l0ZS5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCisgKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxleGNpdGUuaD4KKworaW50IF9faW5pdCBwY2liaW9zX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWlmIChwaW4gPT0gMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIFVTQl9JUlE7CQkvKiBVU0IgY29udHJvbGxlciBpcyB0aGUgb25seSBQQ0kgZGV2aWNlICovCit9CisKKy8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KK2ludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtd3JwcG1jLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLXdycHBtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTdjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLXdycHBtYy5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBmaXh1cC13cnBwbWMuYzogUFBNQyBib2FyZCBzcGVjaWZpYyBQQ0kgZml4dXAKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIFdpbmQgUml2ZXIgSW5jLiBSb25na2FpLnpoYW4gKHJvbmdrYWkuemhhbkB3aW5kcml2ZXIuY29tKQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CisKKy8qIFBDSSBpbnRlcnJ1cHQgcGlucyAqLworI2RlZmluZSBQQ0lfSU5UQQkJMQorI2RlZmluZSBQQ0lfSU5UQgkJMgorI2RlZmluZSBQQ0lfSU5UQwkJMworI2RlZmluZSBQQ0lfSU5URAkJNAorCisjZGVmaW5lIFBDSV9TTE9UX01BWE5SCTMyIC8qIEVhY2ggUENJIGJ1cyBoYXMgMzIgcGh5c2ljYWwgc2xvdHMgKi8KKworc3RhdGljIGNoYXIgcGNpX2lycV90YWJbUENJX1NMT1RfTUFYTlJdWzVdIF9faW5pdGRhdGEgPSB7CisJLyogMCAgICBJTlRBICAgSU5UQiAgIElOVEMgICBJTlREICovCisJWzBdID0gezAsIDAsIDAsIDAsIDB9LAkJLyogU2xvdCAwOiBHVDY0MTIwIFBDSSBicmlkZ2UgKi8KKwlbNl0gPSB7MCwgV1JQUE1DX1BDSV9JTlRBX0lSUSwgMCwgMCwgMH0sCit9OworCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJcmV0dXJuIHBjaV9pcnFfdGFiW3Nsb3RdW3Bpbl07Cit9CisKKy8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KK2ludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWJyaWRnZS5jIGIvYXJjaC9taXBzL3BjaS9vcHMtYnJpZGdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhMDk5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWJyaWRnZS5jCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAwNCwgMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9wYWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BjaS9icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9zbi9pbnRyLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWIuaD4KKworLyoKKyAqIFRoZSBCcmlkZ2UgQVNJQyBzdXBwb3J0cyBib3RoIHR5cGUgMCBhbmQgdHlwZSAxIGFjY2Vzcy4gIFR5cGUgMSBpcworICogbm90IHJlYWxseSBkb2N1bWVudGVkLCBzbyByaWdodCBub3cgSSBjYW4ndCB3cml0ZSBjb2RlIHdoaWNoIHVzZXMgaXQuCisgKiBUaGVyZWZvcmUgd2UgdXNlIHR5cGUgMCBhY2Nlc3NlcyBmb3Igbm93IGV2ZW4gdGhvdWdoIHRoZXkgd29uJ3Qgd29yaworICogY29ycmVjbHkgZm9yIFBDSS10by1QQ0kgYnJpZGdlcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gaXMgY29tcGxpY2F0ZWQgYnkgdGhlIHVsdGltYXRlIGJyb2tlbmVzcyBvZiB0aGUgSU9DMyBjaGlwCisgKiB3aGljaCBpcyB1c2VkIGluIFNHSSBzeXN0ZW1zLiAgVGhlIElPQzMgY2FuIG9ubHkgaGFuZGxlIDMyLWJpdCBQQ0kKKyAqIGFjY2Vzc2VzIGFuZCBkb2VzIG9ubHkgZGVjb2RlIHBhcnRzIG9mIGl0J3MgYWRkcmVzcyBzcGFjZS4KKyAqLworCitzdGF0aWMgaW50IHBjaV9jb25mMF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqIHZhbHVlKQoreworCXN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqYmMgPSBCUklER0VfQ09OVFJPTExFUihidXMpOworCWJyaWRnZV90ICpicmlkZ2UgPSBiYy0+YmFzZTsKKwlpbnQgc2xvdCA9IFBDSV9TTE9UKGRldmZuKTsKKwlpbnQgZm4gPSBQQ0lfRlVOQyhkZXZmbik7CisJdm9sYXRpbGUgdm9pZCAqYWRkcjsKKwl1MzIgY2YsIHNoaWZ0LCBtYXNrOworCWludCByZXM7CisKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmNbUENJX1ZFTkRPUl9JRF07CisJaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKKwkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIGxvb2sgYXQgaXQgZm9yIHJlYWwgLi4uCisJICovCisJaWYgKGNmID09IChQQ0lfVkVORE9SX0lEX1NHSSB8IChQQ0lfREVWSUNFX0lEX1NHSV9JT0MzIDw8IDE2KSkpCisJCWdvdG8gb2hfbXlfZ2F3ZDsKKworCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUwX2NmZ19kZXZbc2xvdF0uZltmbl0uY1t3aGVyZSBeICg0IC0gc2l6ZSldOworCisJaWYgKHNpemUgPT0gMSkKKwkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1OCAqKSBhZGRyKTsKKwllbHNlIGlmIChzaXplID09IDIpCisJCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTE2ICopIGFkZHIpOworCWVsc2UKKwkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1MzIgKikgYWRkcik7CisKKwlyZXR1cm4gcmVzID8gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EIDogUENJQklPU19TVUNDRVNTRlVMOworCitvaF9teV9nYXdkOgorCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IHRoZSB3cm9uZyByZWdpc3Rlci4KKwkgKi8KKwlpZiAoKHdoZXJlID49IDB4MTQgJiYgd2hlcmUgPCAweDQwKSB8fCAod2hlcmUgPj0gMHg0OCkpIHsKKwkJKnZhbHVlID0gMDsKKwkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwl9CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IHRyeSB0byBhY2Nlc3MKKwkgKiBhbnl0aGluZyBidXQgMzItYml0IHdvcmRzIC4uLgorCSAqLworCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUwX2NmZ19kZXZbc2xvdF0uZltmbl0ubFt3aGVyZSA+PiAyXTsKKworCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc2hpZnQgPSAoKHdoZXJlICYgMykgPDwgMyk7CisJbWFzayA9ICgweGZmZmZmZmZmVSA+PiAoKDQgLSBzaXplKSA8PCAzKSk7CisJKnZhbHVlID0gKGNmID4+IHNoaWZ0KSAmIG1hc2s7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaV9jb25mMV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqIHZhbHVlKQoreworCXN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqYmMgPSBCUklER0VfQ09OVFJPTExFUihidXMpOworCWJyaWRnZV90ICpicmlkZ2UgPSBiYy0+YmFzZTsKKwlpbnQgYnVzbm8gPSBidXMtPm51bWJlcjsKKwlpbnQgc2xvdCA9IFBDSV9TTE9UKGRldmZuKTsKKwlpbnQgZm4gPSBQQ0lfRlVOQyhkZXZmbik7CisJdm9sYXRpbGUgdm9pZCAqYWRkcjsKKwl1MzIgY2YsIHNoaWZ0LCBtYXNrOworCWludCByZXM7CisKKwlicmlkZ2UtPmJfcGNpX2NmZyA9IChidXNubyA8PCAxNikgfCAoc2xvdCA8PCAxMSk7CisJYWRkciA9ICZicmlkZ2UtPmJfdHlwZTFfY2ZnLmNbKGZuIDw8IDgpIHwgUENJX1ZFTkRPUl9JRF07CisJaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKKwkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIGxvb2sgYXQgaXQgZm9yIHJlYWwgLi4uCisJICovCisJaWYgKGNmID09IChQQ0lfVkVORE9SX0lEX1NHSSB8IChQQ0lfREVWSUNFX0lEX1NHSV9JT0MzIDw8IDE2KSkpCisJCWdvdG8gb2hfbXlfZ2F3ZDsKKworCWJyaWRnZS0+Yl9wY2lfY2ZnID0gKGJ1c25vIDw8IDE2KSB8IChzbG90IDw8IDExKTsKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMV9jZmcuY1soZm4gPDwgOCkgfCAod2hlcmUgXiAoNCAtIHNpemUpKV07CisKKwlpZiAoc2l6ZSA9PSAxKQorCQlyZXMgPSBnZXRfZGJlKCp2YWx1ZSwgKHU4ICopIGFkZHIpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1MTYgKikgYWRkcik7CisJZWxzZQorCQlyZXMgPSBnZXRfZGJlKCp2YWx1ZSwgKHUzMiAqKSBhZGRyKTsKKworCXJldHVybiByZXMgPyBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQgOiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKK29oX215X2dhd2Q6CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKKwkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIGxvb2sgYXQgdGhlIHdyb25nIHJlZ2lzdGVyLgorCSAqLworCWlmICgod2hlcmUgPj0gMHgxNCAmJiB3aGVyZSA8IDB4NDApIHx8ICh3aGVyZSA+PSAweDQ4KSkgeworCQkqdmFsdWUgPSAwOworCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworCX0KKworCS8qCisJICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgdHJ5IHRvIGFjY2VzcworCSAqIGFueXRoaW5nIGJ1dCAzMi1iaXQgd29yZHMgLi4uCisJICovCisJYnJpZGdlLT5iX3BjaV9jZmcgPSAoYnVzbm8gPDwgMTYpIHwgKHNsb3QgPDwgMTEpOworCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUxX2NmZy5jWyhmbiA8PCA4KSB8IHdoZXJlXTsKKworCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc2hpZnQgPSAoKHdoZXJlICYgMykgPDwgMyk7CisJbWFzayA9ICgweGZmZmZmZmZmVSA+PiAoKDQgLSBzaXplKSA8PCAzKSk7CisJKnZhbHVlID0gKGNmID4+IHNoaWZ0KSAmIG1hc2s7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKiB2YWx1ZSkKK3sKKwlpZiAoYnVzLT5udW1iZXIgPiAwKQorCQlyZXR1cm4gcGNpX2NvbmYxX3JlYWRfY29uZmlnKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWx1ZSk7CisKKwlyZXR1cm4gcGNpX2NvbmYwX3JlYWRfY29uZmlnKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2NvbmYwX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGJyaWRnZV9jb250cm9sbGVyICpiYyA9IEJSSURHRV9DT05UUk9MTEVSKGJ1cyk7CisJYnJpZGdlX3QgKmJyaWRnZSA9IGJjLT5iYXNlOworCWludCBzbG90ID0gUENJX1NMT1QoZGV2Zm4pOworCWludCBmbiA9IFBDSV9GVU5DKGRldmZuKTsKKwl2b2xhdGlsZSB2b2lkICphZGRyOworCXUzMiBjZiwgc2hpZnQsIG1hc2ssIHNtYXNrOworCWludCByZXM7CisKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmNbUENJX1ZFTkRPUl9JRF07CisJaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKKwkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIGxvb2sgYXQgaXQgZm9yIHJlYWwgLi4uCisJICovCisJaWYgKGNmID09IChQQ0lfVkVORE9SX0lEX1NHSSB8IChQQ0lfREVWSUNFX0lEX1NHSV9JT0MzIDw8IDE2KSkpCisJCWdvdG8gb2hfbXlfZ2F3ZDsKKworCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUwX2NmZ19kZXZbc2xvdF0uZltmbl0uY1t3aGVyZSBeICg0IC0gc2l6ZSldOworCisJaWYgKHNpemUgPT0gMSkgeworCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTggKikgYWRkcik7CisJfSBlbHNlIGlmIChzaXplID09IDIpIHsKKwkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHUxNiAqKSBhZGRyKTsKKwl9IGVsc2UgeworCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTMyICopIGFkZHIpOworCX0KKworCWlmIChyZXMpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworCitvaF9teV9nYXdkOgorCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byB0b3VjaCB0aGUgd3JvbmcgcmVnaXN0ZXIuCisJICovCisJaWYgKCh3aGVyZSA+PSAweDE0ICYmIHdoZXJlIDwgMHg0MCkgfHwgKHdoZXJlID49IDB4NDgpKQorCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCB0cnkgdG8gYWNjZXNzCisJICogYW55dGhpbmcgYnV0IDMyLWJpdCB3b3JkcyAuLi4KKwkgKi8KKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmxbd2hlcmUgPj4gMl07CisKKwlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXNoaWZ0ID0gKCh3aGVyZSAmIDMpIDw8IDMpOworCW1hc2sgPSAoMHhmZmZmZmZmZlUgPj4gKCg0IC0gc2l6ZSkgPDwgMykpOworCXNtYXNrID0gbWFzayA8PCBzaGlmdDsKKworCWNmID0gKGNmICYgfnNtYXNrKSB8ICgodmFsdWUgJiBtYXNrKSA8PCBzaGlmdCk7CisJaWYgKHB1dF9kYmUoY2YsICh1MzIgKikgYWRkcikpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaV9jb25mMV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqYmMgPSBCUklER0VfQ09OVFJPTExFUihidXMpOworCWJyaWRnZV90ICpicmlkZ2UgPSBiYy0+YmFzZTsKKwlpbnQgc2xvdCA9IFBDSV9TTE9UKGRldmZuKTsKKwlpbnQgZm4gPSBQQ0lfRlVOQyhkZXZmbik7CisJaW50IGJ1c25vID0gYnVzLT5udW1iZXI7CisJdm9sYXRpbGUgdm9pZCAqYWRkcjsKKwl1MzIgY2YsIHNoaWZ0LCBtYXNrLCBzbWFzazsKKwlpbnQgcmVzOworCisJYnJpZGdlLT5iX3BjaV9jZmcgPSAoYnVzbm8gPDwgMTYpIHwgKHNsb3QgPDwgMTEpOworCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUxX2NmZy5jWyhmbiA8PCA4KSB8IFBDSV9WRU5ET1JfSURdOworCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJLyoKKwkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCisJICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IGl0IGZvciByZWFsIC4uLgorCSAqLworCWlmIChjZiA9PSAoUENJX1ZFTkRPUl9JRF9TR0kgfCAoUENJX0RFVklDRV9JRF9TR0lfSU9DMyA8PCAxNikpKQorCQlnb3RvIG9oX215X2dhd2Q7CisKKwlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMV9jZmcuY1soZm4gPDwgOCkgfCAod2hlcmUgXiAoNCAtIHNpemUpKV07CisKKwlpZiAoc2l6ZSA9PSAxKSB7CisJCXJlcyA9IHB1dF9kYmUodmFsdWUsICh1OCAqKSBhZGRyKTsKKwl9IGVsc2UgaWYgKHNpemUgPT0gMikgeworCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTE2ICopIGFkZHIpOworCX0gZWxzZSB7CisJCXJlcyA9IHB1dF9kYmUodmFsdWUsICh1MzIgKikgYWRkcik7CisJfQorCisJaWYgKHJlcykKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKK29oX215X2dhd2Q6CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IGV2ZW4gZ2l2ZSB0aGUKKwkgKiBnZW5lcmljIFBDSSBjb2RlIGEgY2hhbmNlIHRvIHRvdWNoIHRoZSB3cm9uZyByZWdpc3Rlci4KKwkgKi8KKwlpZiAoKHdoZXJlID49IDB4MTQgJiYgd2hlcmUgPCAweDQwKSB8fCAod2hlcmUgPj0gMHg0OCkpCisJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKKwkvKgorCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IHRyeSB0byBhY2Nlc3MKKwkgKiBhbnl0aGluZyBidXQgMzItYml0IHdvcmRzIC4uLgorCSAqLworCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUwX2NmZ19kZXZbc2xvdF0uZltmbl0ubFt3aGVyZSA+PiAyXTsKKworCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc2hpZnQgPSAoKHdoZXJlICYgMykgPDwgMyk7CisJbWFzayA9ICgweGZmZmZmZmZmVSA+PiAoKDQgLSBzaXplKSA8PCAzKSk7CisJc21hc2sgPSBtYXNrIDw8IHNoaWZ0OworCisJY2YgPSAoY2YgJiB+c21hc2spIHwgKCh2YWx1ZSAmIG1hc2spIDw8IHNoaWZ0KTsKKwlpZiAocHV0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgcGNpX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCWlmIChidXMtPm51bWJlciA+IDApCisJCXJldHVybiBwY2lfY29uZjFfd3JpdGVfY29uZmlnKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWx1ZSk7CisKKwlyZXR1cm4gcGNpX2NvbmYwX3dyaXRlX2NvbmZpZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOworfQorCitzdHJ1Y3QgcGNpX29wcyBicmlkZ2VfcGNpX29wcyA9IHsKKwkucmVhZAk9IHBjaV9yZWFkX2NvbmZpZywKKwkud3JpdGUJPSBwY2lfd3JpdGVfY29uZmlnLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWRkYjUwNzQuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLWRkYjUwNzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmOTdiZWY0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWRkYjUwNzQuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IEp1biBTdW4sIGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBhcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3BjaV9vcHMuYwotICogICAgIERlZmluZSB0aGUgcGNpX29wcyBmb3IgREI1NDc3LgotICoKLSAqIE11Y2ggb2YgdGhlIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBEREI1MDc0IHBvcnQgYnkKLSAqIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi0vKgotICogY29uZmlnX3N3YXAgc3RydWN0dXJlIHJlY29yZHMgd2hhdCBzZXQgb2YgcGRhci9wbXIgYXJlIHVzZWQKLSAqIHRvIGFjY2VzcyBwY2kgY29uZmlnIHNwYWNlLiAgSXQgYWxzbyBwcm92aWRlcyBhIHBsYWNlIGhvbGQgdGhlCi0gKiBvcmlnaW5hbCB2YWx1ZXMgZm9yIGZ1dHVyZSByZXN0b3JpbmcuCi0gKi8KLXN0cnVjdCBwY2lfY29uZmlnX3N3YXAgewotCXUzMiBwZGFyOwotCXUzMiBwbXI7Ci0JdTMyIGNvbmZpZ19iYXNlOwotCXUzMiBjb25maWdfc2l6ZTsKLQl1MzIgcGRhcl9iYWNrdXA7Ci0JdTMyIHBtcl9iYWNrdXA7Ci19OwotCi0vKgotICogT24gRERCNTQ3Niwgd2UgaGF2ZSBvbmUgc2V0IG9mIHN3YXAgcmVnaXN0ZXJzCi0gKi8KLXN0cnVjdCBwY2lfY29uZmlnX3N3YXAgZXh0X3BjaV9zd2FwID0gewotCUREQl9QQ0lXMCwKLQlEREJfUENJSU5JVDAsCi0JRERCX1BDSV9DT05GSUdfQkFTRSwKLQlEREJfUENJX0NPTkZJR19TSVpFCi19OwotCi1zdGF0aWMgaW50IHBjaV9jb25maWdfd29ya2Fyb3VuZCA9IDE7Ci0KLS8qCi0gKiBhY2Nlc3MgY29uZmlnIHNwYWNlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGRkYl9hY2Nlc3NfY29uZmlnX2Jhc2Uoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwgdTMyIGJ1cywJLyogMCBtZWFucyB0b3AgbGV2ZWwgYnVzICovCi0JCQkJCSB1MzIgc2xvdF9udW0pCi17Ci0JdTMyIHBjaV9hZGRyID0gMDsKLQl1MzIgcGNpaW5pdF9vZmZzZXQgPSAwOwotCXUzMiB2aXJ0X2FkZHIgPSBzd2FwLT5jb25maWdfYmFzZTsKLQl1MzIgb3B0aW9uOwotCi0JaWYgKHBjaV9jb25maWdfd29ya2Fyb3VuZCkgewotCQlpZiAoc2xvdF9udW0gPT0gNSkKLQkJCXNsb3RfbnVtID0gMTQ7Ci0JfSBlbHNlIHsKLQkJaWYgKHNsb3RfbnVtID09IDUpCi0JCQlyZXR1cm4gRERCX0JBU0UgKyBEREJfUENJX0JBU0U7Ci0JfQotCi0JLyogbWluaW11bSBwZGFyICh3aW5kb3cpIHNpemUgaXMgMk1CICovCi0JZGJfYXNzZXJ0KHN3YXAtPmNvbmZpZ19zaXplID49ICgyIDw8IDIwKSk7Ci0KLQlkYl9hc3NlcnQoc2xvdF9udW0gPCAoMSA8PCA1KSk7Ci0JZGJfYXNzZXJ0KGJ1cyA8ICgxIDw8IDgpKTsKLQotCS8qIGJhY2t1cCByZWdpc3RlcnMgKi8KLQlzd2FwLT5wZGFyX2JhY2t1cCA9IGRkYl9pbjMyKHN3YXAtPnBkYXIpOwotCXN3YXAtPnBtcl9iYWNrdXAgPSBkZGJfaW4zMihzd2FwLT5wbXIpOwotCi0JLyogc2V0IHRoZSBwZGFyIChwY2kgd2luZG93KSByZWdpc3RlciAqLwotCWRkYl9zZXRfcGRhcihzd2FwLT5wZGFyLCBzd2FwLT5jb25maWdfYmFzZSwgc3dhcC0+Y29uZmlnX3NpemUsIDMyLAkvKiAzMiBiaXQgd2lkZSAqLwotCQkgICAgIDAsCQkvKiBub3Qgb24gbG9jYWwgbWVtb3J5IGJ1cyAqLwotCQkgICAgIDApOwkvKiBub3QgdmlzaWJsZSBmcm9tIFBDSSBidXMgKE4vQSkgKi8KLQotCS8qCi0JICogY2FsY3VhdGUgdGhlIGFic29sdXRlIHBjaSBjb25maWcgYWRkcjsKLQkgKiBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHdlIHN0YXJ0IHNjYW5uaW5nIGZyb20gYWRyOjExICgweDgwMCkKLQkgKi8KLQlpZiAoYnVzID09IDApIHsKLQkJLyogdHlwZSAwIGNvbmZpZyAqLwotCQlwY2lfYWRkciA9IDB4MDAwNDAwMDAgPDwgc2xvdF9udW07Ci0JfSBlbHNlIHsKLQkJLyogdHlwZSAxIGNvbmZpZyAqLwotCQlwY2lfYWRkciA9IDB4MDAwNDAwMDAgPDwgc2xvdF9udW07Ci0JCXBhbmljCi0JCSAgICAoImRkYl9hY2Nlc3NfY29uZmlnX2Jhc2U6IHdlIGRvbid0IHN1cHBvcnQgdHlwZSAxIGNvbmZpZyBZZXQiKTsKLQl9Ci0KLQkvKgotCSAqIGlmIHBjaV9hZGRyIGlzIGxlc3MgdGhhbiBwY2kgY29uZmlnIHdpbmRvdyBzaXplLCAgd2Ugc2V0Ci0JICogcGNpaW5pdF9vZmZzZXQgdG8gMCBhbmQgYWRqdXN0IHRoZSB2aXJ0X2FkZHJlc3MuCi0JICogT3RoZXJ3aXNlIHdlIHdpbGwgdHJ5IHRvIGFkanVzdCBwY2lpbml0X29mZnNldC4KLQkgKi8KLQlpZiAocGNpX2FkZHIgPCBzd2FwLT5jb25maWdfc2l6ZSkgewotCQl2aXJ0X2FkZHIgPSBLU0VHMUFERFIoc3dhcC0+Y29uZmlnX2Jhc2UgKyBwY2lfYWRkcik7Ci0JCXBjaWluaXRfb2Zmc2V0ID0gMDsKLQl9IGVsc2UgewotCQlkYl9hc3NlcnQoKHBjaV9hZGRyICYgKHN3YXAtPmNvbmZpZ19zaXplIC0gMSkpID09IDApOwotCQl2aXJ0X2FkZHIgPSBLU0VHMUFERFIoc3dhcC0+Y29uZmlnX2Jhc2UpOwotCQlwY2lpbml0X29mZnNldCA9IHBjaV9hZGRyOwotCX0KLQotCS8qIHNldCB0aGUgcG1yIHJlZ2lzdGVyICovCi0Jb3B0aW9uID0gRERCX1BDSV9BQ0NFU1NfMzI7Ci0JaWYgKGJ1cyAhPSAwKQotCQlvcHRpb24gfD0gRERCX1BDSV9DRkdUWVBFMTsKLQlkZGJfc2V0X3Btcihzd2FwLT5wbXIsIEREQl9QQ0lDTURfQ0ZHLCBwY2lpbml0X29mZnNldCwgb3B0aW9uKTsKLQotCXJldHVybiB2aXJ0X2FkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZGJfY2xvc2VfY29uZmlnX2Jhc2Uoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCkKLXsKLQlkZGJfb3V0MzIoc3dhcC0+cGRhciwgc3dhcC0+cGRhcl9iYWNrdXApOwotCWRkYl9vdXQzMihzd2FwLT5wbXIsIHN3YXAtPnBtcl9iYWNrdXApOwotfQotCi1zdGF0aWMgaW50IHJlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsCi0JCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB3aGVyZSwgdTMyICogdmFsKQotewotCXUzMiBidXMsIHNsb3RfbnVtLCBmdW5jX251bTsKLQl1MzIgYmFzZTsKLQotCWRiX2Fzc2VydCgod2hlcmUgJiAzKSA9PSAwKTsKLQlkYl9hc3NlcnQod2hlcmUgPCAoMSA8PCA4KSk7Ci0KLQkvKiBjaGVjayBpZiB0aGUgYnVzIGlzIHRvcC1sZXZlbCAqLwotCWlmIChkZXYtPmJ1cy0+cGFyZW50ICE9IE5VTEwpIHsKLQkJYnVzID0gZGV2LT5idXMtPm51bWJlcjsKLQkJZGJfYXNzZXJ0KGJ1cyAhPSAwKTsKLQl9IGVsc2UgewotCQlidXMgPSAwOwotCX0KLQotCXNsb3RfbnVtID0gUENJX1NMT1QoZGV2LT5kZXZmbik7Ci0JZnVuY19udW0gPSBQQ0lfRlVOQyhkZXYtPmRldmZuKTsKLQliYXNlID0gZGRiX2FjY2Vzc19jb25maWdfYmFzZShzd2FwLCBidXMsIHNsb3RfbnVtKTsKLQkqdmFsID0gKih2b2xhdGlsZSB1MzIgKikgKGJhc2UgKyAoZnVuY19udW0gPDwgOCkgKyB3aGVyZSk7Ci0JZGRiX2Nsb3NlX2NvbmZpZ19iYXNlKHN3YXApOwotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZF9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB3aGVyZSwgdTE2ICogdmFsKQotewotCWludCBzdGF0dXM7Ci0JdTMyIHJlc3VsdDsKLQotCWRiX2Fzc2VydCgod2hlcmUgJiAxKSA9PSAwKTsKLQotCXN0YXR1cyA9IHJlYWRfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgJnJlc3VsdCk7Ci0JaWYgKHdoZXJlICYgMikKLQkJcmVzdWx0ID4+PSAxNjsKLQkqdmFsID0gcmVzdWx0ICYgMHhmZmZmOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB3aGVyZSwgdTggKiB2YWwpCi17Ci0JaW50IHN0YXR1czsKLQl1MzIgcmVzdWx0OwotCi0Jc3RhdHVzID0gcmVhZF9jb25maWdfZHdvcmQoc3dhcCwgZGV2LCB3aGVyZSAmIH4zLCAmcmVzdWx0KTsKLQlpZiAod2hlcmUgJiAxKQotCQlyZXN1bHQgPj49IDg7Ci0JaWYgKHdoZXJlICYgMikKLQkJcmVzdWx0ID4+PSAxNjsKLQkqdmFsID0gcmVzdWx0ICYgMHhmZjsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHdoZXJlLCB1MzIgdmFsKQotewotCXUzMiBidXMsIHNsb3RfbnVtLCBmdW5jX251bTsKLQl1MzIgYmFzZTsKLQotCWRiX2Fzc2VydCgod2hlcmUgJiAzKSA9PSAwKTsKLQlkYl9hc3NlcnQod2hlcmUgPCAoMSA8PCA4KSk7Ci0KLQkvKiBjaGVjayBpZiB0aGUgYnVzIGlzIHRvcC1sZXZlbCAqLwotCWlmIChkZXYtPmJ1cy0+cGFyZW50ICE9IE5VTEwpIHsKLQkJYnVzID0gZGV2LT5idXMtPm51bWJlcjsKLQkJZGJfYXNzZXJ0KGJ1cyAhPSAwKTsKLQl9IGVsc2UgewotCQlidXMgPSAwOwotCX0KLQotCXNsb3RfbnVtID0gUENJX1NMT1QoZGV2LT5kZXZmbik7Ci0JZnVuY19udW0gPSBQQ0lfRlVOQyhkZXYtPmRldmZuKTsKLQliYXNlID0gZGRiX2FjY2Vzc19jb25maWdfYmFzZShzd2FwLCBidXMsIHNsb3RfbnVtKTsKLQkqKHZvbGF0aWxlIHUzMiAqKSAoYmFzZSArIChmdW5jX251bSA8PCA4KSArIHdoZXJlKSA9IHZhbDsKLQlkZGJfY2xvc2VfY29uZmlnX2Jhc2Uoc3dhcCk7Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCB3cml0ZV9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHUxNiB2YWwpCi17Ci0JaW50IHN0YXR1cywgc2hpZnQgPSAwOwotCXUzMiByZXN1bHQ7Ci0KLQlkYl9hc3NlcnQoKHdoZXJlICYgMSkgPT0gMCk7Ci0KLQlzdGF0dXMgPSByZWFkX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsICZyZXN1bHQpOwotCWlmIChzdGF0dXMgIT0gUENJQklPU19TVUNDRVNTRlVMKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKHdoZXJlICYgMikKLQkJc2hpZnQgKz0gMTY7Ci0JcmVzdWx0ICY9IH4oMHhmZmZmIDw8IHNoaWZ0KTsKLQlyZXN1bHQgfD0gdmFsIDw8IHNoaWZ0OwotCXJldHVybiB3cml0ZV9jb25maWdfZHdvcmQoc3dhcCwgZGV2LCB3aGVyZSAmIH4zLCByZXN1bHQpOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXAsCi0JCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB3aGVyZSwgdTggdmFsKQotewotCWludCBzdGF0dXMsIHNoaWZ0ID0gMDsKLQl1MzIgcmVzdWx0OwotCi0Jc3RhdHVzID0gcmVhZF9jb25maWdfZHdvcmQoc3dhcCwgZGV2LCB3aGVyZSAmIH4zLCAmcmVzdWx0KTsKLQlpZiAoc3RhdHVzICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKLQkJcmV0dXJuIHN0YXR1czsKLQotCWlmICh3aGVyZSAmIDIpCi0JCXNoaWZ0ICs9IDE2OwotCWlmICh3aGVyZSAmIDEpCi0JCXNoaWZ0ICs9IDg7Ci0JcmVzdWx0ICY9IH4oMHhmZiA8PCBzaGlmdCk7Ci0JcmVzdWx0IHw9IHZhbCA8PCBzaGlmdDsKLQlyZXR1cm4gd3JpdGVfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgcmVzdWx0KTsKLX0KLQotI2RlZmluZQlNQUtFX1BDSV9PUFMocHJlZml4LCBydywgdW5pdG5hbWUsIHVuaXR0eXBlLCBwY2lzd2FwKSBcCi1zdGF0aWMgaW50IHByZWZpeCMjXyMjcncjI19jb25maWdfIyN1bml0bmFtZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHVuaXR0eXBlIHZhbCkgXAoteyBcCi0gICAgIHJldHVybiBydyMjX2NvbmZpZ18jI3VuaXRuYW1lKHBjaXN3YXAsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCk7IFwKLX0KLQotTUFLRV9QQ0lfT1BTKGV4dHBjaSwgcmVhZCwgYnl0ZSwgdTggKiwgJmV4dF9wY2lfc3dhcCkKLSAgICBNQUtFX1BDSV9PUFMoZXh0cGNpLCByZWFkLCB3b3JkLCB1MTYgKiwgJmV4dF9wY2lfc3dhcCkKLSAgICBNQUtFX1BDSV9PUFMoZXh0cGNpLCByZWFkLCBkd29yZCwgdTMyICosICZleHRfcGNpX3N3YXApCi0KLSAgICBNQUtFX1BDSV9PUFMoZXh0cGNpLCB3cml0ZSwgYnl0ZSwgdTgsICZleHRfcGNpX3N3YXApCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgd3JpdGUsIHdvcmQsIHUxNiwgJmV4dF9wY2lfc3dhcCkKLSAgICBNQUtFX1BDSV9PUFMoZXh0cGNpLCB3cml0ZSwgZHdvcmQsIHUzMiwgJmV4dF9wY2lfc3dhcCkKLQotc3RydWN0IHBjaV9vcHMgZGRiNTQ3Nl9leHRfcGNpX29wcyA9IHsKLQlleHRwY2lfcmVhZF9jb25maWdfYnl0ZSwKLQlleHRwY2lfcmVhZF9jb25maWdfd29yZCwKLQlleHRwY2lfcmVhZF9jb25maWdfZHdvcmQsCi0JZXh0cGNpX3dyaXRlX2NvbmZpZ19ieXRlLAotCWV4dHBjaV93cml0ZV9jb25maWdfd29yZCwKLQlleHRwY2lfd3JpdGVfY29uZmlnX2R3b3JkCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtZGRiNTQ3Ni5jIGIvYXJjaC9taXBzL3BjaS9vcHMtZGRiNTQ3Ni5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmRhNThlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWRkYjU0NzYuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IEp1biBTdW4sIGpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLSAqCi0gKiBhcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc2L3BjaV9vcHMuYwotICogICAgIERlZmluZSB0aGUgcGNpX29wcyBmb3IgREI1NDc3LgotICoKLSAqIE11Y2ggb2YgdGhlIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBEREI1MDc0IHBvcnQgYnkKLSAqIEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAc29ueWNvbS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi0vKgotICogY29uZmlnX3N3YXAgc3RydWN0dXJlIHJlY29yZHMgd2hhdCBzZXQgb2YgcGRhci9wbXIgYXJlIHVzZWQKLSAqIHRvIGFjY2VzcyBwY2kgY29uZmlnIHNwYWNlLiAgSXQgYWxzbyBwcm92aWRlcyBhIHBsYWNlIGhvbGQgdGhlCi0gKiBvcmlnaW5hbCB2YWx1ZXMgZm9yIGZ1dHVyZSByZXN0b3JpbmcuCi0gKi8KLXN0cnVjdCBwY2lfY29uZmlnX3N3YXAgewotCXUzMiBwZGFyOwotCXUzMiBwbXI7Ci0JdTMyIGNvbmZpZ19iYXNlOwotCXUzMiBjb25maWdfc2l6ZTsKLQl1MzIgcGRhcl9iYWNrdXA7Ci0JdTMyIHBtcl9iYWNrdXA7Ci19OwotCi0vKgotICogT24gRERCNTQ3Niwgd2UgaGF2ZSBvbmUgc2V0IG9mIHN3YXAgcmVnaXN0ZXJzCi0gKi8KLXN0cnVjdCBwY2lfY29uZmlnX3N3YXAgZXh0X3BjaV9zd2FwID0gewotCUREQl9QQ0lXMCwKLQlEREJfUENJSU5JVDAsCi0JRERCX1BDSV9DT05GSUdfQkFTRSwKLQlEREJfUENJX0NPTkZJR19TSVpFCi19OwotCi1zdGF0aWMgaW50IHBjaV9jb25maWdfd29ya2Fyb3VuZCA9IDE7Ci0KLS8qCi0gKiBhY2Nlc3MgY29uZmlnIHNwYWNlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGRkYl9hY2Nlc3NfY29uZmlnX2Jhc2Uoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwgdTMyIGJ1cywJLyogMCBtZWFucyB0b3AgbGV2ZWwgYnVzICovCi0JCQkJCSB1MzIgc2xvdF9udW0pCi17Ci0JdTMyIHBjaV9hZGRyID0gMDsKLQl1MzIgcGNpaW5pdF9vZmZzZXQgPSAwOwotCXUzMiB2aXJ0X2FkZHIgPSBzd2FwLT5jb25maWdfYmFzZTsKLQl1MzIgb3B0aW9uOwotCi0JaWYgKHBjaV9jb25maWdfd29ya2Fyb3VuZCkgewotCQkvKiBbanN1bl0gd29yayBhcm91bmQgVnJjNTQ3NiBjb250cm9sbGVyIGl0c2VsZiwgcmV0dXJubmluZwotCQkgKiBzbG90IDAgZXNzZW50aWFsbHkgbWFrZXMgdnJjNTQ3NiBpbnZpc2libGUKLQkJICovCi0JCWlmIChzbG90X251bSA9PSAxMikKLQkJCXNsb3RfbnVtID0gMDsKLQotI2lmIDAKLQkJLyogQlVHIDogc2tpcCBQMlAgYnJpZGdlIGZvciBub3cgKi8KLQkJaWYgKHNsb3RfbnVtID09IDUpCi0JCQlzbG90X251bSA9IDA7Ci0jZW5kaWYKLQotCX0gZWxzZSB7Ci0JCS8qIG5vdyB3ZSBoYXZlIHRvIGJlIGhvcm5lc3QsIHJldHVybmluZyB0aGUgdHJ1ZQotCQkgKiBQQ0kgY29uZmlnIGhlYWRlcnMgZm9yIHZyYzU0NzYKLQkJICovCi0JCWlmIChzbG90X251bSA9PSAxMikgewotCQkJc3dhcC0+cGRhcl9iYWNrdXAgPSBkZGJfaW4zMihzd2FwLT5wZGFyKTsKLQkJCXN3YXAtPnBtcl9iYWNrdXAgPSBkZGJfaW4zMihzd2FwLT5wbXIpOwotCQkJcmV0dXJuIEREQl9CQVNFICsgRERCX1BDSV9CQVNFOwotCQl9Ci0JfQotCi0JLyogbWluaW11bSBwZGFyICh3aW5kb3cpIHNpemUgaXMgMk1CICovCi0JZGJfYXNzZXJ0KHN3YXAtPmNvbmZpZ19zaXplID49ICgyIDw8IDIwKSk7Ci0KLQlkYl9hc3NlcnQoc2xvdF9udW0gPCAoMSA8PCA1KSk7Ci0JZGJfYXNzZXJ0KGJ1cyA8ICgxIDw8IDgpKTsKLQotCS8qIGJhY2t1cCByZWdpc3RlcnMgKi8KLQlzd2FwLT5wZGFyX2JhY2t1cCA9IGRkYl9pbjMyKHN3YXAtPnBkYXIpOwotCXN3YXAtPnBtcl9iYWNrdXAgPSBkZGJfaW4zMihzd2FwLT5wbXIpOwotCi0JLyogc2V0IHRoZSBwZGFyIChwY2kgd2luZG93KSByZWdpc3RlciAqLwotCWRkYl9zZXRfcGRhcihzd2FwLT5wZGFyLCBzd2FwLT5jb25maWdfYmFzZSwgc3dhcC0+Y29uZmlnX3NpemUsIDMyLAkvKiAzMiBiaXQgd2lkZSAqLwotCQkgICAgIDAsCQkvKiBub3Qgb24gbG9jYWwgbWVtb3J5IGJ1cyAqLwotCQkgICAgIDApOwkvKiBub3QgdmlzaWJsZSBmcm9tIFBDSSBidXMgKE4vQSkgKi8KLQotCS8qCi0JICogY2FsY3VhdGUgdGhlIGFic29sdXRlIHBjaSBjb25maWcgYWRkcjsKLQkgKiBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHdlIHN0YXJ0IHNjYW5uaW5nIGZyb20gYWRyOjExICgweDgwMCkKLQkgKi8KLQlpZiAoYnVzID09IDApIHsKLQkJLyogdHlwZSAwIGNvbmZpZyAqLwotCQlwY2lfYWRkciA9IDB4ODAwIDw8IHNsb3RfbnVtOwotCX0gZWxzZSB7Ci0JCS8qIHR5cGUgMSBjb25maWcgKi8KLQkJcGNpX2FkZHIgPSAoYnVzIDw8IDE2KSB8IChzbG90X251bSA8PCAxMSk7Ci0JCS8qIHBhbmljKCJkZGJfYWNjZXNzX2NvbmZpZ19iYXNlOiB3ZSBkb24ndCBzdXBwb3J0IHR5cGUgMSBjb25maWcgWWV0Iik7ICovCi0JfQotCi0JLyoKLQkgKiBpZiBwY2lfYWRkciBpcyBsZXNzIHRoYW4gcGNpIGNvbmZpZyB3aW5kb3cgc2l6ZSwgIHdlIHNldAotCSAqIHBjaWluaXRfb2Zmc2V0IHRvIDAgYW5kIGFkanVzdCB0aGUgdmlydF9hZGRyZXNzLgotCSAqIE90aGVyd2lzZSB3ZSB3aWxsIHRyeSB0byBhZGp1c3QgcGNpaW5pdF9vZmZzZXQuCi0JICovCi0JaWYgKHBjaV9hZGRyIDwgc3dhcC0+Y29uZmlnX3NpemUpIHsKLQkJdmlydF9hZGRyID0gS1NFRzFBRERSKHN3YXAtPmNvbmZpZ19iYXNlICsgcGNpX2FkZHIpOwotCQlwY2lpbml0X29mZnNldCA9IDA7Ci0JfSBlbHNlIHsKLQkJZGJfYXNzZXJ0KChwY2lfYWRkciAmIChzd2FwLT5jb25maWdfc2l6ZSAtIDEpKSA9PSAwKTsKLQkJdmlydF9hZGRyID0gS1NFRzFBRERSKHN3YXAtPmNvbmZpZ19iYXNlKTsKLQkJcGNpaW5pdF9vZmZzZXQgPSBwY2lfYWRkcjsKLQl9Ci0KLQkvKiBzZXQgdGhlIHBtciByZWdpc3RlciAqLwotCW9wdGlvbiA9IEREQl9QQ0lfQUNDRVNTXzMyOwotCWlmIChidXMgIT0gMCkKLQkJb3B0aW9uIHw9IEREQl9QQ0lfQ0ZHVFlQRTE7Ci0JZGRiX3NldF9wbXIoc3dhcC0+cG1yLCBEREJfUENJQ01EX0NGRywgcGNpaW5pdF9vZmZzZXQsIG9wdGlvbik7Ci0KLQlyZXR1cm4gdmlydF9hZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGRiX2Nsb3NlX2NvbmZpZ19iYXNlKHN0cnVjdCBwY2lfY29uZmlnX3N3YXAgKnN3YXApCi17Ci0JZGRiX291dDMyKHN3YXAtPnBkYXIsIHN3YXAtPnBkYXJfYmFja3VwKTsKLQlkZGJfb3V0MzIoc3dhcC0+cG1yLCBzd2FwLT5wbXJfYmFja3VwKTsKLX0KLQotc3RhdGljIGludCByZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHUzMiAqIHZhbCkKLXsKLQl1MzIgYnVzLCBzbG90X251bSwgZnVuY19udW07Ci0JdTMyIGJhc2U7Ci0KLQlkYl9hc3NlcnQoKHdoZXJlICYgMykgPT0gMCk7Ci0JZGJfYXNzZXJ0KHdoZXJlIDwgKDEgPDwgOCkpOwotCi0JLyogY2hlY2sgaWYgdGhlIGJ1cyBpcyB0b3AtbGV2ZWwgKi8KLQlpZiAoZGV2LT5idXMtPnBhcmVudCAhPSBOVUxMKSB7Ci0JCWJ1cyA9IGRldi0+YnVzLT5udW1iZXI7Ci0JCWRiX2Fzc2VydChidXMgIT0gMCk7Ci0JfSBlbHNlIHsKLQkJYnVzID0gMDsKLQl9Ci0KLQlzbG90X251bSA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOwotCWZ1bmNfbnVtID0gUENJX0ZVTkMoZGV2LT5kZXZmbik7Ci0JYmFzZSA9IGRkYl9hY2Nlc3NfY29uZmlnX2Jhc2Uoc3dhcCwgYnVzLCBzbG90X251bSk7Ci0JKnZhbCA9ICoodm9sYXRpbGUgdTMyICopIChiYXNlICsgKGZ1bmNfbnVtIDw8IDgpICsgd2hlcmUpOwotCWRkYl9jbG9zZV9jb25maWdfYmFzZShzd2FwKTsKLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHJlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHUxNiAqIHZhbCkKLXsKLQlpbnQgc3RhdHVzOwotCXUzMiByZXN1bHQ7Ci0KLQlkYl9hc3NlcnQoKHdoZXJlICYgMSkgPT0gMCk7Ci0KLQlzdGF0dXMgPSByZWFkX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsICZyZXN1bHQpOwotCWlmICh3aGVyZSAmIDIpCi0JCXJlc3VsdCA+Pj0gMTY7Ci0JKnZhbCA9IHJlc3VsdCAmIDB4ZmZmZjsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IHJlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHU4ICogdmFsKQotewotCWludCBzdGF0dXM7Ci0JdTMyIHJlc3VsdDsKLQotCXN0YXR1cyA9IHJlYWRfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgJnJlc3VsdCk7Ci0JaWYgKHdoZXJlICYgMSkKLQkJcmVzdWx0ID4+PSA4OwotCWlmICh3aGVyZSAmIDIpCi0JCXJlc3VsdCA+Pj0gMTY7Ci0JKnZhbCA9IHJlc3VsdCAmIDB4ZmY7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCB3cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiB3aGVyZSwgdTMyIHZhbCkKLXsKLQl1MzIgYnVzLCBzbG90X251bSwgZnVuY19udW07Ci0JdTMyIGJhc2U7Ci0KLQlkYl9hc3NlcnQoKHdoZXJlICYgMykgPT0gMCk7Ci0JZGJfYXNzZXJ0KHdoZXJlIDwgKDEgPDwgOCkpOwotCi0JLyogY2hlY2sgaWYgdGhlIGJ1cyBpcyB0b3AtbGV2ZWwgKi8KLQlpZiAoZGV2LT5idXMtPnBhcmVudCAhPSBOVUxMKSB7Ci0JCWJ1cyA9IGRldi0+YnVzLT5udW1iZXI7Ci0JCWRiX2Fzc2VydChidXMgIT0gMCk7Ci0JfSBlbHNlIHsKLQkJYnVzID0gMDsKLQl9Ci0KLQlzbG90X251bSA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOwotCWZ1bmNfbnVtID0gUENJX0ZVTkMoZGV2LT5kZXZmbik7Ci0JYmFzZSA9IGRkYl9hY2Nlc3NfY29uZmlnX2Jhc2Uoc3dhcCwgYnVzLCBzbG90X251bSk7Ci0JKih2b2xhdGlsZSB1MzIgKikgKGJhc2UgKyAoZnVuY19udW0gPDwgOCkgKyB3aGVyZSkgPSB2YWw7Ci0JZGRiX2Nsb3NlX2NvbmZpZ19iYXNlKHN3YXApOwotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb25maWdfc3dhcCAqc3dhcCwKLQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHdoZXJlLCB1MTYgdmFsKQotewotCWludCBzdGF0dXMsIHNoaWZ0ID0gMDsKLQl1MzIgcmVzdWx0OwotCi0JZGJfYXNzZXJ0KCh3aGVyZSAmIDEpID09IDApOwotCi0Jc3RhdHVzID0gcmVhZF9jb25maWdfZHdvcmQoc3dhcCwgZGV2LCB3aGVyZSAmIH4zLCAmcmVzdWx0KTsKLQlpZiAoc3RhdHVzICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKLQkJcmV0dXJuIHN0YXR1czsKLQotCWlmICh3aGVyZSAmIDIpCi0JCXNoaWZ0ICs9IDE2OwotCXJlc3VsdCAmPSB+KDB4ZmZmZiA8PCBzaGlmdCk7Ci0JcmVzdWx0IHw9IHZhbCA8PCBzaGlmdDsKLQlyZXR1cm4gd3JpdGVfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgcmVzdWx0KTsKLX0KLQotc3RhdGljIGludCB3cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NvbmZpZ19zd2FwICpzd2FwLAotCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgd2hlcmUsIHU4IHZhbCkKLXsKLQlpbnQgc3RhdHVzLCBzaGlmdCA9IDA7Ci0JdTMyIHJlc3VsdDsKLQotCXN0YXR1cyA9IHJlYWRfY29uZmlnX2R3b3JkKHN3YXAsIGRldiwgd2hlcmUgJiB+MywgJnJlc3VsdCk7Ci0JaWYgKHN0YXR1cyAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAod2hlcmUgJiAyKQotCQlzaGlmdCArPSAxNjsKLQlpZiAod2hlcmUgJiAxKQotCQlzaGlmdCArPSA4OwotCXJlc3VsdCAmPSB+KDB4ZmYgPDwgc2hpZnQpOwotCXJlc3VsdCB8PSB2YWwgPDwgc2hpZnQ7Ci0JcmV0dXJuIHdyaXRlX2NvbmZpZ19kd29yZChzd2FwLCBkZXYsIHdoZXJlICYgfjMsIHJlc3VsdCk7Ci19Ci0KLSNkZWZpbmUJTUFLRV9QQ0lfT1BTKHByZWZpeCwgcncsIHVuaXRuYW1lLCB1bml0dHlwZSwgcGNpc3dhcCkgXAotc3RhdGljIGludCBwcmVmaXgjI18jI3J3IyNfY29uZmlnXyMjdW5pdG5hbWUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1bml0dHlwZSB2YWwpIFwKLXsgXAotICAgICByZXR1cm4gcncjI19jb25maWdfIyN1bml0bmFtZShwY2lzd2FwLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwpOyBcCi19Ci0KLU1BS0VfUENJX09QUyhleHRwY2ksIHJlYWQsIGJ5dGUsIHU4ICosICZleHRfcGNpX3N3YXApCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgcmVhZCwgd29yZCwgdTE2ICosICZleHRfcGNpX3N3YXApCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgcmVhZCwgZHdvcmQsIHUzMiAqLCAmZXh0X3BjaV9zd2FwKQotCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgd3JpdGUsIGJ5dGUsIHU4LCAmZXh0X3BjaV9zd2FwKQotICAgIE1BS0VfUENJX09QUyhleHRwY2ksIHdyaXRlLCB3b3JkLCB1MTYsICZleHRfcGNpX3N3YXApCi0gICAgTUFLRV9QQ0lfT1BTKGV4dHBjaSwgd3JpdGUsIGR3b3JkLCB1MzIsICZleHRfcGNpX3N3YXApCi0KLXN0cnVjdCBwY2lfb3BzIGRkYjU0NzZfZXh0X3BjaV9vcHMgPSB7Ci0JZXh0cGNpX3JlYWRfY29uZmlnX2J5dGUsCi0JZXh0cGNpX3JlYWRfY29uZmlnX3dvcmQsCi0JZXh0cGNpX3JlYWRfY29uZmlnX2R3b3JkLAotCWV4dHBjaV93cml0ZV9jb25maWdfYnl0ZSwKLQlleHRwY2lfd3JpdGVfY29uZmlnX3dvcmQsCi0JZXh0cGNpX3dyaXRlX2NvbmZpZ19kd29yZAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWVtbWEycmguYyBiL2FyY2gvbWlwcy9wY2kvb3BzLWVtbWEycmguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjFiMTFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtZW1tYTJyaC5jCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogIGFyY2gvbWlwcy9wY2kvb3BzLWVtbWEycmguYworICogICAgICBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgUENJIG9wZXJhdGlvbiBmb3IgRU1NQTJSSC4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNC0yMDA2CisgKgorICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgYXJjaC9taXBzL3BjaS9vcHMtdnI0MXh4LmMKKyAqCisgKglDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KKworI2RlZmluZSBSVEFCT1JUICgweDE8PDkpCisjZGVmaW5lIFJNQUJPUlQgKDB4MTw8MTApCisjZGVmaW5lIEVNTUEyUkhfUENJX1NMT1RfTlVNIDkJLyogMDAwMDowOS4wIGlzIGZpbmFsIFBDSSBkZXZpY2UgKi8KKworLyoKKyAqIGFjY2VzcyBjb25maWcgc3BhY2UKKyAqLworCitzdGF0aWMgaW50IGNoZWNrX2FyZ3Moc3RydWN0IHBjaV9idXMgKmJ1cywgdTMyIGRldmZuLCB1MzIgKiBidXNfbnVtKQoreworCS8qIGNoZWNrIGlmIHRoZSBidXMgaXMgdG9wLWxldmVsICovCisJaWYgKGJ1cy0+cGFyZW50ICE9IE5VTEwpIHsKKwkJKmJ1c19udW0gPSBidXMtPm51bWJlcjsKKwkJZGJfYXNzZXJ0KGJ1c19udW0gIT0gMCk7CisJfSBlbHNlCisJCSpidXNfbnVtID0gMDsKKworCWlmICgqYnVzX251bSA9PSAwKSB7CisJCS8qIFR5cGUgMCAqLworCQlpZiAoUENJX1NMT1QoZGV2Zm4pID49IDEwKQorCQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwl9IGVsc2UgeworCQkvKiBUeXBlIDEgKi8KKwkJaWYgKCgqYnVzX251bSA+PSA2NCkgfHwgKFBDSV9TTE9UKGRldmZuKSA+PSAxNikpCisJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2V0X3BjaV9jb25maWd1cmF0aW9uX2FkZHJlc3ModW5zaWduZWQgY2hhciBidXNfbnVtLAorCQkJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUpCit7CisJdTMyIGNvbmZpZ193aW4wOworCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JTlQsIH5STUFCT1JUKTsKKwlpZiAoYnVzX251bSA9PSAwKQorCQkvKgorCQkgKiBUeXBlIDAgY29uZmlndXJhdGlvbgorCQkgKi8KKwkJY29uZmlnX3dpbjAgPSAoMSA8PCAoMjIgKyBQQ0lfU0xPVChkZXZmbikpKSB8ICg1IDw8IDkpOworCWVsc2UKKwkJLyoKKwkJICogVHlwZSAxIGNvbmZpZ3VyYXRpb24KKwkJICovCisJCWNvbmZpZ193aW4wID0gKGJ1c19udW0gPDwgMjYpIHwgKFBDSV9TTE9UKGRldmZuKSA8PCAyMikgfAorCQkgICAgKDEgPDwgMTUpIHwgKDUgPDwgOSk7CisKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0lXSU4wX0NUUiwgY29uZmlnX3dpbjApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2NvbmZpZ19yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQkJICAgaW50IHNpemUsIHVpbnQzMl90ICogdmFsKQoreworCXUzMiBidXNfbnVtOworCXUzMiBiYXNlID0gS1NFRzFBRERSKEVNTUEyUkhfUENJX0NPTkZJR19CQVNFKTsKKwl1MzIgYmFja3VwX3dpbjA7CisJdTMyIGRhdGE7CisKKwkqdmFsID0gMHhmZmZmZmZmZlU7CisKKwlpZiAoY2hlY2tfYXJncyhidXMsIGRldmZuLCAmYnVzX251bSkgPT0gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJYmFja3VwX3dpbjAgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9QQ0lfSVdJTjBfQ1RSKTsKKworCWlmIChzZXRfcGNpX2NvbmZpZ3VyYXRpb25fYWRkcmVzcyhidXNfbnVtLCBkZXZmbiwgd2hlcmUpIDwgMCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCWRhdGEgPQorCSAgICAqKHZvbGF0aWxlIHUzMiAqKShiYXNlICsgKFBDSV9GVU5DKGRldmZuKSA8PCA4KSArCisJCQkgICAgICAod2hlcmUgJiAweGZmZmZmZmZjKSk7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZlU7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAyKSA8PCAzKSkgJiAweGZmZmZVOworCQlicmVhazsKKwljYXNlIDQ6CisJCSp2YWwgPSBkYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0lXSU4wX0NUUiwgYmFja3VwX3dpbjApOworCQlyZXR1cm4gUENJQklPU19GVU5DX05PVF9TVVBQT1JURUQ7CisJfQorCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JV0lOMF9DVFIsIGJhY2t1cF93aW4wKTsKKworCWlmIChlbW1hMnJoX2luMzIoRU1NQTJSSF9QQ0lfSU5UKSAmIFJNQUJPUlQpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaV9jb25maWdfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCQkgICAgaW50IHNpemUsIHUzMiB2YWwpCit7CisJdTMyIGJ1c19udW07CisJdTMyIGJhc2UgPSBLU0VHMUFERFIoRU1NQTJSSF9QQ0lfQ09ORklHX0JBU0UpOworCXUzMiBiYWNrdXBfd2luMDsKKwl1MzIgZGF0YTsKKwlpbnQgc2hpZnQ7CisKKwlpZiAoY2hlY2tfYXJncyhidXMsIGRldmZuLCAmYnVzX251bSkgPT0gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJYmFja3VwX3dpbjAgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9QQ0lfSVdJTjBfQ1RSKTsKKworCWlmIChzZXRfcGNpX2NvbmZpZ3VyYXRpb25fYWRkcmVzcyhidXNfbnVtLCBkZXZmbiwgd2hlcmUpIDwgMCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCS8qIHJlYWQgbW9kaWZ5IHdyaXRlICovCisJZGF0YSA9CisJICAgICoodm9sYXRpbGUgdTMyICopKGJhc2UgKyAoUENJX0ZVTkMoZGV2Zm4pIDw8IDgpICsKKwkJCSAgICAgICh3aGVyZSAmIDB4ZmZmZmZmZmMpKTsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJc2hpZnQgPSAod2hlcmUgJiAzKSA8PCAzOworCQlkYXRhICY9IH4oMHhmZlUgPDwgc2hpZnQpOworCQlkYXRhIHw9ICgodmFsICYgMHhmZlUpIDw8IHNoaWZ0KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzaGlmdCA9ICh3aGVyZSAmIDIpIDw8IDM7CisJCWRhdGEgJj0gfigweGZmZmZVIDw8IHNoaWZ0KTsKKwkJZGF0YSB8PSAoKHZhbCAmIDB4ZmZmZlUpIDw8IHNoaWZ0KTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkYXRhID0gdmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0lXSU4wX0NUUiwgYmFja3VwX3dpbjApOworCQlyZXR1cm4gUENJQklPU19GVU5DX05PVF9TVVBQT1JURUQ7CisJfQorCSoodm9sYXRpbGUgdTMyICopKGJhc2UgKyAoUENJX0ZVTkMoZGV2Zm4pIDw8IDgpICsKKwkJCSAgKHdoZXJlICYgMHhmZmZmZmZmYykpID0gZGF0YTsKKworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfSVdJTjBfQ1RSLCBiYWNrdXBfd2luMCk7CisJaWYgKGVtbWEycmhfaW4zMihFTU1BMlJIX1BDSV9JTlQpICYgUk1BQk9SVCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0cnVjdCBwY2lfb3BzIGVtbWEycmhfcGNpX29wcyA9IHsKKwkucmVhZCA9IHBjaV9jb25maWdfcmVhZCwKKwkud3JpdGUgPSBwY2lfY29uZmlnX3dyaXRlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWl0ODE3Mi5jIGIvYXJjaC9taXBzL3BjaS9vcHMtaXQ4MTcyLmMKaW5kZXggYjdhOGI5YS4uYmE4MzI4NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtaXQ4MTcyLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtaXQ4MTcyLmMKQEAgLTUwLDMwICs1MCwyOCBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlXzE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX2lvX3Jlc291cmNlID0gewotCSJpbyBwY2kgSU8gc3BhY2UiLAotCTB4MTQwMTgwMDAsCi0JMHgxN0ZGRkZGRiwKLQlJT1JFU09VUkNFX0lPCisJLnN0YXJ0CT0gMHgxNDAxODAwMCwKKwkuZW5kCT0gMHgxN0ZGRkZGRiwKKwkubmFtZQk9ICJpbyBwY2kgSU8gc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZV8wID0gewotCSJleHQgcGNpIG1lbW9yeSBzcGFjZSAwLzEiLAotCTB4MTAxMDEwMDAsCi0JMHgxM0ZGRkZGRiwKLQlJT1JFU09VUkNFX01FTSwKLQkmcGNpX21lbV9yZXNvdXJjZV8wLAotCU5VTEwsCi0JJnBjaV9tZW1fcmVzb3VyY2VfMQorCS5zdGFydAk9IDB4MTAxMDEwMDAsCisJLmVuZAk9IDB4MTNGRkZGRkYsCisJLm5hbWUJPSAiZXh0IHBjaSBtZW1vcnkgc3BhY2UgMC8xIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkucGFyZW50CT0gJnBjaV9tZW1fcmVzb3VyY2VfMCwKKwkuc2libGluZyA9IE5VTEwsCisJLmNoaWxkCT0gJnBjaV9tZW1fcmVzb3VyY2VfMQogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlXzEgPSB7Ci0JImV4dCBwY2kgbWVtb3J5IHNwYWNlIDIvMyIsCi0JMHgxQTAwMDAwMCwKLQkweDFGQkZGRkZGLAotCUlPUkVTT1VSQ0VfTUVNLAotCSZwY2lfbWVtX3Jlc291cmNlXzAsCi0JTlVMTCwKLQlOVUxMCisJLnN0YXJ0CT0gMHgxQTAwMDAwMCwKKwkuZW5kCT0gMHgxRkJGRkZGRiwKKwkubmFtZQk9ICJleHQgcGNpIG1lbW9yeSBzcGFjZSAyLzMiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCS5wYXJlbnQJPSAmcGNpX21lbV9yZXNvdXJjZV8wCiB9OwogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgaXQ4MTcyX3BjaV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1zbmkuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXNuaS5jCmluZGV4IDYyYmRkMTkuLjJiMGNjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXNuaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXNuaS5jCkBAIC00NywxMyArNDcsMTMgQEAKIAogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgMToKLQkJKnZhbCA9ICoodm9sYXRpbGUgIHU4ICopIChQQ0lNVF9DT05GSUdfREFUQSArIChyZWcgJiAzKSk7CisJCSp2YWwgPSBpbmIoUENJTVRfQ09ORklHX0RBVEEgKyAocmVnICYgMykpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCSp2YWwgPSAqKHZvbGF0aWxlIHUxNiAqKSAoUENJTVRfQ09ORklHX0RBVEEgKyAocmVnICYgMikpOworCQkqdmFsID0gaW53KFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDIpKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQkqdmFsID0gKih2b2xhdGlsZSB1MzIgKikgUENJTVRfQ09ORklHX0RBVEE7CisJCSp2YWwgPSBpbmwoUENJTVRfQ09ORklHX0RBVEEpOwogCQlicmVhazsKIAl9CiAKQEAgLTcwLDEzICs3MCwxMyBAQAogCiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAxOgotCQkqKHZvbGF0aWxlICB1OCAqKSAoUENJTVRfQ09ORklHX0RBVEEgKyAocmVnICYgMykpID0gdmFsOworCQlvdXRiICh2YWwsIFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDMpKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQkqKHZvbGF0aWxlIHUxNiAqKSAoUENJTVRfQ09ORklHX0RBVEEgKyAocmVnICYgMikpID0gdmFsOworCQlvdXR3ICh2YWwsIFBDSU1UX0NPTkZJR19EQVRBICsgKHJlZyAmIDIpKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQkqKHZvbGF0aWxlIHUzMiAqKSBQQ0lNVF9DT05GSUdfREFUQSA9IHZhbDsKKwkJb3V0bCAodmFsLCBQQ0lNVF9DT05GSUdfREFUQSk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtdGl0YW4uYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXRpdGFuLmMKaW5kZXggMjMzZWM2Zi4uZWJmOGZjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtdGl0YW4uYworKysgYi9hcmNoL21pcHMvcGNpL29wcy10aXRhbi5jCkBAIC0yNiw4ICsyNiwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCi0jaW5jbHVkZSA8YXNtL3RpdGFuX2RlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcm05ay1vY2QuaD4KIAorLyoKKyAqIFBDSSBzcGVjaWZpYyBkZWZpbmVzCisgKi8KKyNkZWZpbmUJVElUQU5fUENJXzBfQ09ORklHX0FERFJFU1MJMHg3ODAKKyNkZWZpbmUJVElUQU5fUENJXzBfQ09ORklHX0RBVEEJCTB4Nzg0CisKKy8qCisgKiBUaXRhbiBQQ0kgQ29uZmlnIFJlYWQgQnl0ZQorICovCiBzdGF0aWMgaW50IHRpdGFuX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHJlZywKIAlpbnQgc2l6ZSwgdTMyICogdmFsKQogewpAQCAtNDMsOCArNTQsOCBAQAogCiAKIAkvKiBzdGFydCB0aGUgY29uZmlndXJhdGlvbiBjeWNsZSAqLwotCVRJVEFOX1dSSVRFKFRJVEFOX1BDSV8wX0NPTkZJR19BRERSRVNTLCBhZGRyZXNzKTsKLQl0bXAgPSBUSVRBTl9SRUFEKFRJVEFOX1BDSV8wX0NPTkZJR19EQVRBKSA+PiAoKHJlZyAmIDMpIDw8IDMpOworCW9jZF93cml0ZWwoYWRkcmVzcywgVElUQU5fUENJXzBfQ09ORklHX0FERFJFU1MpOworCXRtcCA9IG9jZF9yZWFkbChUSVRBTl9QQ0lfMF9DT05GSUdfREFUQSkgPj4gKChyZWcgJiAzKSA8PCAzKTsKIAogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgMToKQEAgLTcxLDIwICs4MiwyMCBAQAogCQkocmVnICYgMHhmYykgfCAweDgwMDAwMDAwOwogCiAJLyogc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gY3ljbGUgKi8KLQlUSVRBTl9XUklURShUSVRBTl9QQ0lfMF9DT05GSUdfQUREUkVTUywgYWRkcmVzcyk7CisJb2NkX3dyaXRlbChhZGRyZXNzLCBUSVRBTl9QQ0lfMF9DT05GSUdfQUREUkVTUyk7CiAKIAkvKiB3cml0ZSB0aGUgZGF0YSAqLwogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgMToKLQkJVElUQU5fV1JJVEVfOChUSVRBTl9QQ0lfMF9DT05GSUdfREFUQSArICh+cmVnICYgMHgzKSwgdmFsKTsKKwkJb2NkX3dyaXRlYih2YWwsIFRJVEFOX1BDSV8wX0NPTkZJR19EQVRBICsgKH5yZWcgJiAweDMpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDI6Ci0JCVRJVEFOX1dSSVRFXzE2KFRJVEFOX1BDSV8wX0NPTkZJR19EQVRBICsgKH5yZWcgJiAweDIpLCB2YWwpOworCQlvY2Rfd3JpdGV3KHZhbCwgVElUQU5fUENJXzBfQ09ORklHX0RBVEEgKyAofnJlZyAmIDB4MikpOwogCQlicmVhazsKIAogCWNhc2UgNDoKLQkJVElUQU5fV1JJVEUoVElUQU5fUENJXzBfQ09ORklHX0RBVEEsIHZhbCk7CisJCW9jZF93cml0ZWwodmFsLCBUSVRBTl9QQ0lfMF9DT05GSUdfREFUQSk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktZGRiNTA3NC5jIGIvYXJjaC9taXBzL3BjaS9wY2ktZGRiNTA3NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2Y5Y2VlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjUwNzQuYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNXh4eC5oPgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV4dHBjaV9pb19yZXNvdXJjZSA9IHsKLQkicGNpIElPIHNwYWNlIiwKLQkweDEwMDAsCQkJLyogbGVhdmUgc29tZSByb29tIGZvciBJU0EgYnVzICovCi0JRERCX1BDSV9JT19TSVpFIC0gMSwKLQlJT1JFU09VUkNFX0lPCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV4dHBjaV9tZW1fcmVzb3VyY2UgPSB7Ci0JInBjaSBtZW1vcnkgc3BhY2UiLAotCUREQl9QQ0lfTUVNX0JBU0UgKyAweDAwMTAwMDAwLAkvKiBsZWF2ZSAxIE1CIGZvciBSVEMgKi8KLQlEREJfUENJX01FTV9CQVNFICsgRERCX1BDSV9NRU1fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9NRU0KLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcGNpX29wcyBkZGI1NDc2X2V4dF9wY2lfb3BzOwotCi1zdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgZGRiNTQ3Nl9jb250cm9sbGVyID0gewotCS5wY2lfb3BzCT0gJmRkYjU0NzZfZXh0X3BjaV9vcHMsCi0JLmlvX3Jlc291cmNlCT0gJmV4dHBjaV9pb19yZXNvdXJjZSwKLQkubWVtX3Jlc291cmNlCT0gJmV4dHBjaV9tZW1fcmVzb3VyY2UsCi19OwotCi0jZGVmaW5lICAgICBQQ0lfRVhUX0lOVEEgICAgICAgIDgKLSNkZWZpbmUgICAgIFBDSV9FWFRfSU5UQiAgICAgICAgOQotI2RlZmluZSAgICAgUENJX0VYVF9JTlRDICAgICAgICAxMAotI2RlZmluZSAgICAgUENJX0VYVF9JTlREICAgICAgICAxMQotI2RlZmluZSAgICAgUENJX0VYVF9JTlRFICAgICAgICAxMgotCi0jZGVmaW5lICAgICBNQVhfU0xPVF9OVU0gICAgICAgIDE0Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlycV9tYXBbTUFYX1NMT1RfTlVNXSA9IHsKLSAgWyAwXSA9IG5pbGU0X3RvX2lycShQQ0lfRVhUX0lOVEUpLAotICBbIDFdID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5UQSksCi0gIFsgMl0gPSBuaWxlNF90b19pcnEoUENJX0VYVF9JTlRBKSwKLSAgWyAzXSA9IG5pbGU0X3RvX2lycShQQ0lfRVhUX0lOVEIpLAotICBbIDRdID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5UQyksCi0gIFsgNV0gPSBuaWxlNF90b19pcnEoTklMRTRfSU5UX1VBUlQpLAotICBbMTBdID0gbmlsZTRfdG9faXJxKFBDSV9FWFRfSU5URSksCi0gIFsxM10gPSBuaWxlNF90b19pcnEoUENJX0VYVF9JTlRFKSwKLX07Ci0KLWludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQlyZXR1cm4gaXJxX21hcFtzbG90XTsKLX0KLQotLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLwotaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBkZGJfcGNpX3Jlc2V0X2J1cyh2b2lkKQotewotCXUzMiB0ZW1wOwotCi0JLyoKLQkgKiBJIGFtIG5vdCBzdXJlIGFib3V0IHRoZSAib2ZmaWNpYWwiIHByb2NlZHVyZSwgdGhlIGZvbGxvd2luZwotCSAqIHN0ZXBzIHdvcmsgYXMgZmFyIGFzIEkga25vdzoKLQkgKiBXZSBmaXJzdCBzZXQgUENJIGNvbGQgcmVzZXQgYml0IChiaXQgMzEpIGluIFBDSUNUUkwtSC4KLQkgKiBUaGVuIHdlIGNsZWFyIHRoZSBQQ0kgd2FybSByZXNldCBiaXQgKGJpdCAzMCkgdG8gMCBpbiBQQ0lDVFJMLUguCi0JICogVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYm90aCBQQ0kgY2hhbm5lbHMuCi0JICovCi0JdGVtcCA9IGRkYl9pbjMyKEREQl9QQ0lDVFJMICsgNCk7Ci0JdGVtcCB8PSAweDgwMDAwMDAwOwotCWRkYl9vdXQzMihEREJfUENJQ1RSTCArIDQsIHRlbXApOwotCXRlbXAgJj0gfjB4YzAwMDAwMDA7Ci0JZGRiX291dDMyKEREQl9QQ0lDVFJMICsgNCwgdGVtcCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjU0NzYuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjU0NzYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkZDQ5NS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1kZGI1NDc2LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjV4eHguaD4KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHRwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JInBjaSBJTyBzcGFjZSIsCi0JMHgxMDAwLAkJCS8qIGxlYXZlIHNvbWUgcm9vbSBmb3IgSVNBIGJ1cyAqLwotCUREQl9QQ0lfSU9fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBleHRwY2lfbWVtX3Jlc291cmNlID0gewotCSJwY2kgbWVtb3J5IHNwYWNlIiwKLQlEREJfUENJX01FTV9CQVNFICsgMHgwMDEwMDAwMCwJLyogbGVhdmUgMSBNQiBmb3IgUlRDICovCi0JRERCX1BDSV9NRU1fQkFTRSArIEREQl9QQ0lfTUVNX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfTUVNCi19OwotCi1leHRlcm4gc3RydWN0IHBjaV9vcHMgZGRiNTQ3Nl9leHRfcGNpX29wczsKLQotc3RydWN0IHBjaV9jb250cm9sbGVyIGRkYjU0NzZfY29udHJvbGxlciA9IHsKLQkucGNpX29wcwk9ICZkZGI1NDc2X2V4dF9wY2lfb3BzLAotCS5pb19yZXNvdXJjZQk9ICZleHRwY2lfaW9fcmVzb3VyY2UsCi0JLm1lbV9yZXNvdXJjZQk9ICZleHRwY2lfbWVtX3Jlc291cmNlCi19OwotCi0KLS8qCi0gKiB3ZSBmaXggdXAgaXJxcyBiYXNlZCBvbiB0aGUgc2xvdCBudW1iZXIuCi0gKiBUaGUgZmlyc3QgZW50cnkgaXMgYXQgQUQ6MTEuCi0gKgotICogVGhpcyBkb2VzIG5vdCB3b3JrIGZvciBkZXZpY2VzIG9uIHN1Yi1idXNlcyB5ZXQuCi0gKi8KLQotLyoKLSAqIHRlbXBvcmFyeQotICovCi0KLSNkZWZpbmUJCVBDSV9FWFRfSU5UQQkJOAotI2RlZmluZQkJUENJX0VYVF9JTlRCCQk5Ci0jZGVmaW5lCQlQQ0lfRVhUX0lOVEMJCTEwCi0jZGVmaW5lCQlQQ0lfRVhUX0lOVEQJCTExCi0jZGVmaW5lCQlQQ0lfRVhUX0lOVEUJCTEyCi0KLS8qCi0gKiBiYXNlZCBvbiBkZGI1NDc3IG1hbnVhbCBwYWdlIDExCi0gKi8KLSNkZWZpbmUJCU1BWF9TTE9UX05VTQkJMjEKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlycV9tYXBbTUFYX1NMT1RfTlVNXSA9IHsKLSBbIDJdID0gOSwJCQkJLyogQUQ6MTMJVVNCCQkqLwotIFsgM10gPSAxMCwJCQkJLyogQUQ6MTQJUE1VCQkqLwotIFsgNV0gPSAwLAkJCQkvKiBBRDoxNiAJUDJQIGJyaWRnZQkqLwotIFsgNl0gPSBuaWxlNF90b19pcnEoUENJX0VYVF9JTlRCKSwJLyogQUQ6MTcJCQkqLwotIFsgN10gPQluaWxlNF90b19pcnEoUENJX0VYVF9JTlRDKSwJLyogQUQ6MTgJCQkqLwotIFsgOF0gPSBuaWxlNF90b19pcnEoUENJX0VYVF9JTlREKSwJLyogQUQ6MTkJCQkqLwotIFsgOV0gPSBuaWxlNF90b19pcnEoUENJX0VYVF9JTlRBKSwJLyogQUQ6MjAJCQkqLwotIFsxM10gPSAxNCwJCQkJLyogQUQ6MjQgSEQgY29udHJvbGxlciwgTTUyMjkJKi8KLX07Ci0KLWludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQlyZXR1cm4gaXJxX21hcFtzbG90XTsKLX0KLQotLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLwotaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBkZGJfcGNpX3Jlc2V0X2J1cyh2b2lkKQotewotCXUzMiB0ZW1wOwotCi0JLyoKLQkgKiBJIGFtIG5vdCBzdXJlIGFib3V0IHRoZSAib2ZmaWNpYWwiIHByb2NlZHVyZSwgdGhlIGZvbGxvd2luZwotCSAqIHN0ZXBzIHdvcmsgYXMgZmFyIGFzIEkga25vdzoKLQkgKiBXZSBmaXJzdCBzZXQgUENJIGNvbGQgcmVzZXQgYml0IChiaXQgMzEpIGluIFBDSUNUUkwtSC4KLQkgKiBUaGVuIHdlIGNsZWFyIHRoZSBQQ0kgd2FybSByZXNldCBiaXQgKGJpdCAzMCkgdG8gMCBpbiBQQ0lDVFJMLUguCi0JICogVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYm90aCBQQ0kgY2hhbm5lbHMuCi0JICovCi0JdGVtcCA9IGRkYl9pbjMyKEREQl9QQ0lDVFJMICsgNCk7Ci0JdGVtcCB8PSAweDgwMDAwMDAwOwotCWRkYl9vdXQzMihEREJfUENJQ1RSTCArIDQsIHRlbXApOwotCXRlbXAgJj0gfjB4YzAwMDAwMDA7Ci0JZGRiX291dDMyKEREQl9QQ0lDVFJMICsgNCwgdGVtcCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjU0NzcuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWRkYjU0NzcuYwppbmRleCA4MjZkNjUzLi5kMDcxYmMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1kZGI1NDc3LmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktZGRiNTQ3Ny5jCkBAIC0yMiwzMSArMjIsMzEgQEAKICNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh0cGNpX2lvX3Jlc291cmNlID0gewotCSJleHQgcGNpIElPIHNwYWNlIiwKLQlEREJfUENJMF9JT19CQVNFIC0gRERCX1BDSV9JT19CQVNFICsgMHg0MDAwLAotCUREQl9QQ0kwX0lPX0JBU0UgLSBEREJfUENJX0lPX0JBU0UgKyBEREJfUENJMF9JT19TSVpFIC0gMSwKLQlJT1JFU09VUkNFX0lPCisJLnN0YXJ0CT0gRERCX1BDSTBfSU9fQkFTRSAtIEREQl9QQ0lfSU9fQkFTRSArIDB4NDAwMCwKKwkuZW5kCT0gRERCX1BDSTBfSU9fQkFTRSAtIEREQl9QQ0lfSU9fQkFTRSArIEREQl9QQ0kwX0lPX1NJWkUgLSAxLAorCS5uYW1lCT0gImV4dCBwY2kgSU8gc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXh0cGNpX21lbV9yZXNvdXJjZSA9IHsKLQkiZXh0IHBjaSBtZW1vcnkgc3BhY2UiLAotCUREQl9QQ0kwX01FTV9CQVNFICsgMHgxMDAwMDAsCi0JRERCX1BDSTBfTUVNX0JBU0UgKyBEREJfUENJMF9NRU1fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9NRU0KKwkuc3RhcnQJPSBEREJfUENJMF9NRU1fQkFTRSArIDB4MTAwMDAwLAorCS5lbmQJPSBEREJfUENJMF9NRU1fQkFTRSArIEREQl9QQ0kwX01FTV9TSVpFIC0gMSwKKwkubmFtZQk9ICJleHQgcGNpIG1lbW9yeSBzcGFjZSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9wY2lfaW9fcmVzb3VyY2UgPSB7Ci0JImlvIHBjaSBJTyBzcGFjZSIsCi0JRERCX1BDSTFfSU9fQkFTRSAtIEREQl9QQ0lfSU9fQkFTRSwKLQlEREJfUENJMV9JT19CQVNFIC0gRERCX1BDSV9JT19CQVNFICsgRERCX1BDSTFfSU9fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9JTworCS5zdGFydAk9IEREQl9QQ0kxX0lPX0JBU0UgLSBEREJfUENJX0lPX0JBU0UsCisJLmVuZAk9IEREQl9QQ0kxX0lPX0JBU0UgLSBEREJfUENJX0lPX0JBU0UgKyBEREJfUENJMV9JT19TSVpFIC0gMSwKKwkubmFtZQk9ICJpbyBwY2kgSU8gc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9wY2lfbWVtX3Jlc291cmNlID0gewotCSJleHQgcGNpIG1lbW9yeSBzcGFjZSIsCi0JRERCX1BDSTFfTUVNX0JBU0UsCi0JRERCX1BDSTFfTUVNX0JBU0UgKyBEREJfUENJMV9NRU1fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9NRU0KKwkuc3RhcnQJPSBEREJfUENJMV9NRU1fQkFTRSwKKwkuZW5kCT0gRERCX1BDSTFfTUVNX0JBU0UgKyBEREJfUENJMV9NRU1fU0laRSAtIDEsCisJLm5hbWUJPSAiZXh0IHBjaSBtZW1vcnkgc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiB9OwogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgZGRiNTQ3N19leHRfcGNpX29wczsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjhiMjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktZW1tYTJyaC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgYXJjaC9taXBzL3BjaS9wY2ktZW1tYTJyaC5jCisgKiAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBQQ0kgY29uZmlncmF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA0LTIwMDYKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBhcmNoL21pcHMvZGRiNXh4eC9kZGI1NDc3L3BjaS5jCisgKgorICoJQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisKKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX2lvX3Jlc291cmNlID0geworCS5uYW1lID0gInBjaSBJTyBzcGFjZSIsCisJLnN0YXJ0ID0gRU1NQTJSSF9QQ0lfSU9fQkFTRSwKKwkuZW5kID0gRU1NQTJSSF9QQ0lfSU9fQkFTRSArIEVNTUEyUkhfUENJX0lPX1NJWkUgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2UgPSB7CisJLm5hbWUgPSAicGNpIG1lbW9yeSBzcGFjZSIsCisJLnN0YXJ0ID0gRU1NQTJSSF9QQ0lfTUVNX0JBU0UsCisJLmVuZCA9IEVNTUEyUkhfUENJX01FTV9CQVNFICsgRU1NQTJSSF9QQ0lfTUVNX1NJWkUgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGVtbWEycmhfcGNpX29wczsKKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBlbW1hMnJoX3BjaV9jb250cm9sbGVyID0geworCS5wY2lfb3BzID0gJmVtbWEycmhfcGNpX29wcywKKwkubWVtX3Jlc291cmNlID0gJnBjaV9tZW1fcmVzb3VyY2UsCisJLmlvX3Jlc291cmNlID0gJnBjaV9pb19yZXNvdXJjZSwKKwkubWVtX29mZnNldCA9IC0weDA0MDAwMDAwLAorCS5pb19vZmZzZXQgPSAwLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVtbWEycmhfcGNpX2luaXQodm9pZCkKK3sKKwkvKiBzZXR1cCBQQ0kgaW50ZXJmYWNlICovCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9BUkJJVF9DVFIsIDB4NzBmKTsKKworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfSVdJTjBfQ1RSLCAweDgwMDAwYTE4KTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfUENJX0NPTkZJR19CQVNFICsgUENJX0NPTU1BTkQsCisJCSAgICAgIFBDSV9TVEFUVVNfREVWU0VMX01FRElVTSB8IFBDSV9TVEFUVVNfQ0FQX0xJU1QgfAorCQkgICAgICBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfQ09ORklHX0JBU0UgKyBQQ0lfQkFTRV9BRERSRVNTXzAsIDB4MTAwMDAwMDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfQ09ORklHX0JBU0UgKyBQQ0lfQkFTRV9BRERSRVNTXzEsIDB4MDAwMDAwMDApOworCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JV0lOMF9DVFIsIDB4MTIwMDAwMDAgfCAweDIxOCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JV0lOMV9DVFIsIDB4MTgwMDAwMDAgfCAweDYwMCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9JTklUX0VTV1AsIDB4MDAwMDAyMDApOworCisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9UV0lOX0NUUiwgMHgwMDAwOTIwMCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9UV0lOX0JBRFIsIDB4MDAwMDAwMDApOworCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9QQ0lfVFdJTjBfREFEUiwgMHgwMDAwMDAwMCk7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX1BDSV9UV0lOMV9EQURSLCAweDAwMDAwMDAwKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZW1tYTJyaF9wY2lfc2V0dXAodm9pZCkKK3sKKwllbW1hMnJoX3BjaV9pbml0KCk7CisJcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJmVtbWEycmhfcGNpX2NvbnRyb2xsZXIpOworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKGVtbWEycmhfcGNpX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWV4Y2l0ZS5jIGIvYXJjaC9taXBzL3BjaS9wY2ktZXhjaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4NmM3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWV4Y2l0ZS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+CisgKiAgQmFzZWQgb24gdGhlIFBNQy1TaWVycmEgWW9zZW1pdGUgYm9hcmQgc3VwcG9ydCBieSBSYWxmIEJhZWNobGUuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vcm05ay1vY2QuaD4KKyNpbmNsdWRlIDxleGNpdGUuaD4KKworCitleHRlcm4gc3RydWN0IHBjaV9vcHMgdGl0YW5fcGNpX29wczsKKworCitzdGF0aWMgc3RydWN0IHJlc291cmNlCisJbWVtX3Jlc291cmNlID0gCXsKKwkJLm5hbWUJPSAiUENJIG1lbW9yeSIsCisJCS5zdGFydAk9IEVYQ0lURV9QSFlTX1BDSV9NRU0sCisJCS5lbmQJPSBFWENJVEVfUEhZU19QQ0lfTUVNICsgRVhDSVRFX1NJWkVfUENJX01FTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwlpb19yZXNvdXJjZSA9IHsKKwkJLm5hbWUJPSAiUENJIEkvTyIsCisJCS5zdGFydAk9IEVYQ0lURV9QSFlTX1BDSV9JTywKKwkJLmVuZAk9IEVYQ0lURV9QSFlTX1BDSV9JTyArIEVYQ0lURV9TSVpFX1BDSV9JTyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KKwl9OworCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgYnhfY29udHJvbGxlciA9IHsKKwkucGNpX29wcwk9ICZ0aXRhbl9wY2lfb3BzLAorCS5tZW1fcmVzb3VyY2UJPSAmbWVtX3Jlc291cmNlLAorCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMFVMLAorCS5pb19yZXNvdXJjZQk9ICZpb19yZXNvdXJjZSwKKwkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMFVMCit9OworCisKK3N0YXRpYyBjaGFyCisJaW9wYWdlX2ZhaWxlZFtdIF9faW5pdGRhdGEgICA9ICJDYW5ub3QgYWxsb2NhdGUgUENJIEkvTyBwYWdlIiwKKwltb2RlYml0c19ub19wY2lbXSBfX2luaXRkYXRhID0gIlBDSSBpcyBub3QgY29uZmlndXJlZCBpbiBtb2RlIGJpdHMiOworCisjZGVmaW5lIFJNOTAwMHgyX09DRF9IVFNDCTB4MDYwNAorI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRCSEwJMHgwNjBjCisjZGVmaW5lIFJNOTAwMHgyX09DRF9QQ0lIUlNUCTB4MDc4YworCisjZGVmaW5lIFJNOUtfT0NEX01PREVCSVQxCTB4MDBkNCAvKiAoTU9ERUJJVDEpIE1vZGUgQml0IDEgKi8KKyNkZWZpbmUgUk05S19PQ0RfQ1BIRENSCQkweDAwZjQgLyogQ1BVLVBDSS9IVCBEYXRhIENvbnRyb2wuICovCisKKyNkZWZpbmUgUENJU0NfRkIyQiAJCTB4MDAwMDAyMDAKKyNkZWZpbmUgUENJU0NfTVdJQ0cJCTB4MDAwMDAwMTAKKyNkZWZpbmUgUENJU0NfRU1DCQkweDAwMDAwMDA0CisjZGVmaW5lIFBDSVNDX0VSTUEJCTB4MDAwMDAwMDIKKworCisKK3N0YXRpYyBpbnQgX19pbml0IGJhc2xlcl9leGNpdGVfcGNpX3NldHVwKHZvaWQpCit7CisJY29uc3QgdW5zaWduZWQgaW50IGZ1bGxiYXJzID0gbWVtc2l6ZSAvICgyNTYgPDwgMjApOworCXVuc2lnbmVkIGludCBpOworCisJLyogQ2hlY2sgbW9kZWJpdHMgdG8gc2VlIGlmIFBDSSBpcyByZWFsbHkgZW5hYmxlZC4gKi8KKwlpZiAoISgob2NkX3JlYWRsKFJNOUtfT0NEX01PREVCSVQxKSA+PiAoNDctMzIpKSAmIDB4MSkpCisJCXBhbmljKG1vZGViaXRzX25vX3BjaSk7CisKKwlpZiAoTlVMTCA9PSByZXF1ZXN0X21lbV9yZWdpb24oRVhDSVRFX1BIWVNfUENJX0lPLCBFWENJVEVfU0laRV9QQ0lfSU8sCisJCQkJICAgICAgICJNZW1vcnktbWFwcGVkIFBDSSBJL08gcGFnZSIpKQorCQlwYW5pYyhpb3BhZ2VfZmFpbGVkKTsKKworCS8qIEVuYWJsZSBQQ0kgMCBhcyBtYXN0ZXIgZm9yIGNvbmZpZyBjeWNsZXMgKi8KKwlvY2Rfd3JpdGVsKFBDSVNDX0VNQyB8IFBDSVNDX0VSTUEsIFJNOTAwMHgyX09DRF9IVFNDKTsKKworCisJLyogU2V0IHVwIGxhdGVuY3kgdGltZXIgKi8KKwlvY2Rfd3JpdGVsKDB4ODAwOCwgUk05MDAweDJfT0NEX0hUQkhMKTsKKworCS8qICBTZXR1cCBob3N0IElPIGFuZCBNZW1vcnkgc3BhY2UgKi8KKwlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19QQ0lfSU8gPj4gNCkgfCAxLCBMS0I3KTsKKwlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfUENJX0lPID4+IDQpICYgMHg3ZmZmZmYwMCkgLSAweDEwMCwgTEtNNyk7CisJb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfUENJX01FTSA+PiA0KSB8IDEsIExLQjgpOworCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9QQ0lfTUVNID4+IDQpICYgMHg3ZmZmZmYwMCkgLSAweDEwMCwgTEtNOCk7CisKKwkvKiBTZXQgdXAgUENJIEJBUnMgdG8gbWFwIGFsbCBpbnN0YWxsZWQgbWVtb3J5ICovCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQljb25zdCB1bnNpZ25lZCBpbnQgYmFyID0gMHg2MTAgKyBpICogNDsKKworCSAgICAgCWlmIChpIDwgZnVsbGJhcnMpIHsKKwkJCW9jZF93cml0ZWwoMHgxMDAwMDAwMCAqIGksIGJhcik7CisJCQlvY2Rfd3JpdGVsKDB4MDEwMDAwMDAgKiBpLCBiYXIgKyAweDE0MCk7CisJCQlvY2Rfd3JpdGVsKDB4MGZmZmYwMjksIGJhciArIDB4MTAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkgICAgIAlpZiAoaSA9PSBmdWxsYmFycykgeworCQkJaW50IG87CisJCQl1MzIgbWFzazsKKworCQkJY29uc3QgdW5zaWduZWQgbG9uZyByZW0gPSBtZW1zaXplIC0gaSAqIDB4MTAwMDAwMDA7CisJCQlpZiAoIXJlbSkgeworCQkJCW9jZF93cml0ZWwoMHgwMDAwMDAwMCwgYmFyICsgMHgxMDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlvID0gZmZzKHJlbSkgLSAxOworCQkJaWYgKHJlbSAmIH4oMHgxIDw8IG8pKQorCQkJCW8rKzsKKwkJCW1hc2sgPSAoKDB4MSA8PCBvKSAmIDB4MGZmZmYwMDApIC0gMHgxMDAwOworCQkJb2NkX3dyaXRlbCgweDEwMDAwMDAwICogaSwgYmFyKTsKKwkJCW9jZF93cml0ZWwoMHgwMTAwMDAwMCAqIGksIGJhciArIDB4MTQwKTsKKwkJCW9jZF93cml0ZWwoMHgwMDAwMDAyOSB8IG1hc2ssIGJhciArIDB4MTAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJb2NkX3dyaXRlbCgweDAwMDAwMDAwLCBiYXIgKyAweDEwMCk7CisJfQorCisJLyogRmluYWxseSwgZW5hYmxlIHRoZSBQQ0kgaW50ZXJ1cHQgKi8KKyNpZiBVU0JfSVJRID4gNworCXNldF9jMF9pbnRjb250cm9sKDEgPDwgVVNCX0lSUSk7CisjZWxzZQorCXNldF9jMF9zdGF0dXMoMSA8PCAoVVNCX0lSUSArIDgpKTsKKyNlbmRpZgorCisJaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gRVhDSVRFX1BIWVNfUENJX0lPOworCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBFWENJVEVfUEhZU19QQ0lfSU8gKyBFWENJVEVfU0laRV9QQ0lfSU8gLSAxOworCXNldF9pb19wb3J0X2Jhc2UoKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShFWENJVEVfUEhZU19QQ0lfSU8sIEVYQ0lURV9TSVpFX1BDSV9JTykpOworCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZieF9jb250cm9sbGVyKTsKKwlyZXR1cm4gMDsKK30KKworCithcmNoX2luaXRjYWxsKGJhc2xlcl9leGNpdGVfcGNpX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWlwMjcuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWlwMjcuYwppbmRleCA2MDAyZDJhLi44MGViOWFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1pcDI3LmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktaXAyNy5jCkBAIC00MCwyOTcgKzQwLDcgQEAKIHN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqaXJxX3RvX2JyaWRnZVtNQVhfUENJX0JVU1NFUyAqIE1BWF9ERVZJQ0VTX1BFUl9QQ0lCVVNdOwogaW50IGlycV90b19zbG90W01BWF9QQ0lfQlVTU0VTICogTUFYX0RFVklDRVNfUEVSX1BDSUJVU107CiAKLS8qCi0gKiBUaGUgQnJpZGdlIEFTSUMgc3VwcG9ydHMgYm90aCB0eXBlIDAgYW5kIHR5cGUgMSBhY2Nlc3MuICBUeXBlIDEgaXMKLSAqIG5vdCByZWFsbHkgZG9jdW1lbnRlZCwgc28gcmlnaHQgbm93IEkgY2FuJ3Qgd3JpdGUgY29kZSB3aGljaCB1c2VzIGl0LgotICogVGhlcmVmb3JlIHdlIHVzZSB0eXBlIDAgYWNjZXNzZXMgZm9yIG5vdyBldmVuIHRob3VnaCB0aGV5IHdvbid0IHdvcmsKLSAqIGNvcnJlY2x5IGZvciBQQ0ktdG8tUENJIGJyaWRnZXMuCi0gKgotICogVGhlIGZ1bmN0aW9uIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZSB1bHRpbWF0ZSBicm9rZW5lc3Mgb2YgdGhlIElPQzMgY2hpcAotICogd2hpY2ggaXMgdXNlZCBpbiBTR0kgc3lzdGVtcy4gIFRoZSBJT0MzIGNhbiBvbmx5IGhhbmRsZSAzMi1iaXQgUENJCi0gKiBhY2Nlc3NlcyBhbmQgZG9lcyBvbmx5IGRlY29kZSBwYXJ0cyBvZiBpdCdzIGFkZHJlc3Mgc3BhY2UuCi0gKi8KLQotc3RhdGljIGludCBwY2lfY29uZjBfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCSBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjID0gQlJJREdFX0NPTlRST0xMRVIoYnVzKTsKLQlicmlkZ2VfdCAqYnJpZGdlID0gYmMtPmJhc2U7Ci0JaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7Ci0JaW50IGZuID0gUENJX0ZVTkMoZGV2Zm4pOwotCXZvbGF0aWxlIHZvaWQgKmFkZHI7Ci0JdTMyIGNmLCBzaGlmdCwgbWFzazsKLQlpbnQgcmVzOwotCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5jW1BDSV9WRU5ET1JfSURdOwotCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCi0JICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IGl0IGZvciByZWFsIC4uLgotCSAqLwotCWlmIChjZiA9PSAoUENJX1ZFTkRPUl9JRF9TR0kgfCAoUENJX0RFVklDRV9JRF9TR0lfSU9DMyA8PCAxNikpKQotCQlnb3RvIG9oX215X2dhd2Q7Ci0KLQlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmNbd2hlcmUgXiAoNCAtIHNpemUpXTsKLQotCWlmIChzaXplID09IDEpCi0JCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTggKikgYWRkcik7Ci0JZWxzZSBpZiAoc2l6ZSA9PSAyKQotCQlyZXMgPSBnZXRfZGJlKCp2YWx1ZSwgKHUxNiAqKSBhZGRyKTsKLQllbHNlCi0JCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTMyICopIGFkZHIpOwotCi0JcmV0dXJuIHJlcyA/IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORCA6IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotb2hfbXlfZ2F3ZDoKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCB0aGUgd3JvbmcgcmVnaXN0ZXIuCi0JICovCi0JaWYgKCh3aGVyZSA+PSAweDE0ICYmIHdoZXJlIDwgMHg0MCkgfHwgKHdoZXJlID49IDB4NDgpKSB7Ci0JCSp2YWx1ZSA9IDA7Ci0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0JfQotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCB0cnkgdG8gYWNjZXNzCi0JICogYW55dGhpbmcgYnV0IDMyLWJpdCB3b3JkcyAuLi4KLQkgKi8KLQlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmxbd2hlcmUgPj4gMl07Ci0KLQlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCXNoaWZ0ID0gKCh3aGVyZSAmIDMpIDw8IDMpOwotCW1hc2sgPSAoMHhmZmZmZmZmZlUgPj4gKCg0IC0gc2l6ZSkgPDwgMykpOwotCSp2YWx1ZSA9IChjZiA+PiBzaGlmdCkgJiBtYXNrOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBwY2lfY29uZjFfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCSBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjID0gQlJJREdFX0NPTlRST0xMRVIoYnVzKTsKLQlicmlkZ2VfdCAqYnJpZGdlID0gYmMtPmJhc2U7Ci0JaW50IGJ1c25vID0gYnVzLT5udW1iZXI7Ci0JaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7Ci0JaW50IGZuID0gUENJX0ZVTkMoZGV2Zm4pOwotCXZvbGF0aWxlIHZvaWQgKmFkZHI7Ci0JdTMyIGNmLCBzaGlmdCwgbWFzazsKLQlpbnQgcmVzOwotCi0JYnJpZGdlLT5iX3BjaV9jZmcgPSAoYnVzbm8gPDwgMTYpIHwgKHNsb3QgPDwgMTEpOwotCWFkZHIgPSAmYnJpZGdlLT5iX3R5cGUxX2NmZy5jWyhmbiA8PCA4KSB8IFBDSV9WRU5ET1JfSURdOwotCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCi0JICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IGl0IGZvciByZWFsIC4uLgotCSAqLwotCWlmIChjZiA9PSAoUENJX1ZFTkRPUl9JRF9TR0kgfCAoUENJX0RFVklDRV9JRF9TR0lfSU9DMyA8PCAxNikpKQotCQlnb3RvIG9oX215X2dhd2Q7Ci0KLQlicmlkZ2UtPmJfcGNpX2NmZyA9IChidXNubyA8PCAxNikgfCAoc2xvdCA8PCAxMSk7Ci0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTFfY2ZnLmNbKGZuIDw8IDgpIHwgKHdoZXJlIF4gKDQgLSBzaXplKSldOwotCi0JaWYgKHNpemUgPT0gMSkKLQkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1OCAqKSBhZGRyKTsKLQllbHNlIGlmIChzaXplID09IDIpCi0JCXJlcyA9IGdldF9kYmUoKnZhbHVlLCAodTE2ICopIGFkZHIpOwotCWVsc2UKLQkJcmVzID0gZ2V0X2RiZSgqdmFsdWUsICh1MzIgKikgYWRkcik7Ci0KLQlyZXR1cm4gcmVzID8gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EIDogUENJQklPU19TVUNDRVNTRlVMOwotCi1vaF9teV9nYXdkOgotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCi0JICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IHRoZSB3cm9uZyByZWdpc3Rlci4KLQkgKi8KLQlpZiAoKHdoZXJlID49IDB4MTQgJiYgd2hlcmUgPCAweDQwKSB8fCAod2hlcmUgPj0gMHg0OCkpIHsKLQkJKnZhbHVlID0gMDsKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQl9Ci0KLQkvKgotCSAqIElPQzMgaXMgZnVja2VkIGZ1Y2tlZCBiZXlvbmQgYmVsaWV2ZSAuLi4gIERvbid0IHRyeSB0byBhY2Nlc3MKLQkgKiBhbnl0aGluZyBidXQgMzItYml0IHdvcmRzIC4uLgotCSAqLwotCWJyaWRnZS0+Yl9wY2lfY2ZnID0gKGJ1c25vIDw8IDE2KSB8IChzbG90IDw8IDExKTsKLQlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMV9jZmcuY1soZm4gPDwgOCkgfCB3aGVyZV07Ci0KLQlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCXNoaWZ0ID0gKCh3aGVyZSAmIDMpIDw8IDMpOwotCW1hc2sgPSAoMHhmZmZmZmZmZlUgPj4gKCg0IC0gc2l6ZSkgPDwgMykpOwotCSp2YWx1ZSA9IChjZiA+PiBzaGlmdCkgJiBtYXNrOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBwY2lfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICogdmFsdWUpCi17Ci0JaWYgKGJ1cy0+bnVtYmVyID4gMCkKLQkJcmV0dXJuIHBjaV9jb25mMV9yZWFkX2NvbmZpZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOwotCi0JcmV0dXJuIHBjaV9jb25mMF9yZWFkX2NvbmZpZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50IHBjaV9jb25mMF93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCSAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQotewotCXN0cnVjdCBicmlkZ2VfY29udHJvbGxlciAqYmMgPSBCUklER0VfQ09OVFJPTExFUihidXMpOwotCWJyaWRnZV90ICpicmlkZ2UgPSBiYy0+YmFzZTsKLQlpbnQgc2xvdCA9IFBDSV9TTE9UKGRldmZuKTsKLQlpbnQgZm4gPSBQQ0lfRlVOQyhkZXZmbik7Ci0Jdm9sYXRpbGUgdm9pZCAqYWRkcjsKLQl1MzIgY2YsIHNoaWZ0LCBtYXNrLCBzbWFzazsKLQlpbnQgcmVzOwotCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5jW1BDSV9WRU5ET1JfSURdOwotCWlmIChnZXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCi0JICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byBsb29rIGF0IGl0IGZvciByZWFsIC4uLgotCSAqLwotCWlmIChjZiA9PSAoUENJX1ZFTkRPUl9JRF9TR0kgfCAoUENJX0RFVklDRV9JRF9TR0lfSU9DMyA8PCAxNikpKQotCQlnb3RvIG9oX215X2dhd2Q7Ci0KLQlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmNbd2hlcmUgXiAoNCAtIHNpemUpXTsKLQotCWlmIChzaXplID09IDEpIHsKLQkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHU4ICopIGFkZHIpOwotCX0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7Ci0JCXJlcyA9IHB1dF9kYmUodmFsdWUsICh1MTYgKikgYWRkcik7Ci0JfSBlbHNlIHsKLQkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHUzMiAqKSBhZGRyKTsKLQl9Ci0KLQlpZiAocmVzKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotb2hfbXlfZ2F3ZDoKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gdG91Y2ggdGhlIHdyb25nIHJlZ2lzdGVyLgotCSAqLwotCWlmICgod2hlcmUgPj0gMHgxNCAmJiB3aGVyZSA8IDB4NDApIHx8ICh3aGVyZSA+PSAweDQ4KSkKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgdHJ5IHRvIGFjY2VzcwotCSAqIGFueXRoaW5nIGJ1dCAzMi1iaXQgd29yZHMgLi4uCi0JICovCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTBfY2ZnX2RldltzbG90XS5mW2ZuXS5sW3doZXJlID4+IDJdOwotCi0JaWYgKGdldF9kYmUoY2YsICh1MzIgKikgYWRkcikpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlzaGlmdCA9ICgod2hlcmUgJiAzKSA8PCAzKTsKLQltYXNrID0gKDB4ZmZmZmZmZmZVID4+ICgoNCAtIHNpemUpIDw8IDMpKTsKLQlzbWFzayA9IG1hc2sgPDwgc2hpZnQ7Ci0KLQljZiA9IChjZiAmIH5zbWFzaykgfCAoKHZhbHVlICYgbWFzaykgPDwgc2hpZnQpOwotCWlmIChwdXRfZGJlKGNmLCAodTMyICopIGFkZHIpKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBwY2lfY29uZjFfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjID0gQlJJREdFX0NPTlRST0xMRVIoYnVzKTsKLQlicmlkZ2VfdCAqYnJpZGdlID0gYmMtPmJhc2U7Ci0JaW50IHNsb3QgPSBQQ0lfU0xPVChkZXZmbik7Ci0JaW50IGZuID0gUENJX0ZVTkMoZGV2Zm4pOwotCWludCBidXNubyA9IGJ1cy0+bnVtYmVyOwotCXZvbGF0aWxlIHZvaWQgKmFkZHI7Ci0JdTMyIGNmLCBzaGlmdCwgbWFzaywgc21hc2s7Ci0JaW50IHJlczsKLQotCWJyaWRnZS0+Yl9wY2lfY2ZnID0gKGJ1c25vIDw8IDE2KSB8IChzbG90IDw8IDExKTsKLQlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMV9jZmcuY1soZm4gPDwgOCkgfCBQQ0lfVkVORE9SX0lEXTsKLQlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCS8qCi0JICogSU9DMyBpcyBmdWNrZWQgZnVja2VkIGJleW9uZCBiZWxpZXZlIC4uLiAgRG9uJ3QgZXZlbiBnaXZlIHRoZQotCSAqIGdlbmVyaWMgUENJIGNvZGUgYSBjaGFuY2UgdG8gbG9vayBhdCBpdCBmb3IgcmVhbCAuLi4KLQkgKi8KLQlpZiAoY2YgPT0gKFBDSV9WRU5ET1JfSURfU0dJIHwgKFBDSV9ERVZJQ0VfSURfU0dJX0lPQzMgPDwgMTYpKSkKLQkJZ290byBvaF9teV9nYXdkOwotCi0JYWRkciA9ICZicmlkZ2UtPmJfdHlwZTFfY2ZnLmNbKGZuIDw8IDgpIHwgKHdoZXJlIF4gKDQgLSBzaXplKSldOwotCi0JaWYgKHNpemUgPT0gMSkgewotCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTggKikgYWRkcik7Ci0JfSBlbHNlIGlmIChzaXplID09IDIpIHsKLQkJcmVzID0gcHV0X2RiZSh2YWx1ZSwgKHUxNiAqKSBhZGRyKTsKLQl9IGVsc2UgewotCQlyZXMgPSBwdXRfZGJlKHZhbHVlLCAodTMyICopIGFkZHIpOwotCX0KLQotCWlmIChyZXMpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi1vaF9teV9nYXdkOgotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCBldmVuIGdpdmUgdGhlCi0JICogZ2VuZXJpYyBQQ0kgY29kZSBhIGNoYW5jZSB0byB0b3VjaCB0aGUgd3JvbmcgcmVnaXN0ZXIuCi0JICovCi0JaWYgKCh3aGVyZSA+PSAweDE0ICYmIHdoZXJlIDwgMHg0MCkgfHwgKHdoZXJlID49IDB4NDgpKQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0JLyoKLQkgKiBJT0MzIGlzIGZ1Y2tlZCBmdWNrZWQgYmV5b25kIGJlbGlldmUgLi4uICBEb24ndCB0cnkgdG8gYWNjZXNzCi0JICogYW55dGhpbmcgYnV0IDMyLWJpdCB3b3JkcyAuLi4KLQkgKi8KLQlhZGRyID0gJmJyaWRnZS0+Yl90eXBlMF9jZmdfZGV2W3Nsb3RdLmZbZm5dLmxbd2hlcmUgPj4gMl07Ci0KLQlpZiAoZ2V0X2RiZShjZiwgKHUzMiAqKSBhZGRyKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCXNoaWZ0ID0gKCh3aGVyZSAmIDMpIDw8IDMpOwotCW1hc2sgPSAoMHhmZmZmZmZmZlUgPj4gKCg0IC0gc2l6ZSkgPDwgMykpOwotCXNtYXNrID0gbWFzayA8PCBzaGlmdDsKLQotCWNmID0gKGNmICYgfnNtYXNrKSB8ICgodmFsdWUgJiBtYXNrKSA8PCBzaGlmdCk7Ci0JaWYgKHB1dF9kYmUoY2YsICh1MzIgKikgYWRkcikpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHBjaV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWx1ZSkKLXsKLQlpZiAoYnVzLT5udW1iZXIgPiAwKQotCQlyZXR1cm4gcGNpX2NvbmYxX3dyaXRlX2NvbmZpZyhidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOwotCi0JcmV0dXJuIHBjaV9jb25mMF93cml0ZV9jb25maWcoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfb3BzIGJyaWRnZV9wY2lfb3BzID0gewotCS5yZWFkID0gcGNpX3JlYWRfY29uZmlnLAotCS53cml0ZSA9IHBjaV93cml0ZV9jb25maWcsCi19OworZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGJyaWRnZV9wY2lfb3BzOwogCiBpbnQgX19pbml0IGJyaWRnZV9wcm9iZShuYXNpZF90IG5hc2lkLCBpbnQgd2lkZ2V0X2lkLCBpbnQgbWFzdGVyd2lkKQogewpAQCAtMzcwLDggKzgwLDcgQEAKIAliYy0+d2lkZ2V0X2lkID0gd2lkZ2V0X2lkOwogCWJjLT5uYXNpZCA9IG5hc2lkOwogCi0JYmMtPmJhZGRyID0gKHU2NCltYXN0ZXJ3aWQgPDwgNjA7Ci0JYmMtPmJhZGRyIHw9ICgxVUwgPDwgNTYpOwkvKiBCYXJyaWVyIHNldCAqLworCWJjLT5iYWRkciA9ICh1NjQpbWFzdGVyd2lkIDw8IDYwIHwgUENJNjRfQVRUUl9CQVI7CiAKIAkvKgogCSAqIHBvaW50IHRvIHRoaXMgYnJpZGdlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1qbXIzOTI3LmMgYi9hcmNoL21pcHMvcGNpL3BjaS1qbXIzOTI3LmMKaW5kZXggZjAyZWY2ZS4uY2I4NGY0ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktam1yMzkyNy5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWptcjM5MjcuYwpAQCAtMzUsMTcgKzM1LDE3IEBACiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAKIHN0cnVjdCByZXNvdXJjZSBwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JIklPIE1FTSIsCi0JMHgxMDAwLAkJCS8qIHJlc2VydmUgcmVnYWN5IEkvTyBzcGFjZSAqLwotCTB4MTAwMCArIEpNUjM5MjdfUENJSU9fU0laRSAtIDEsCi0JSU9SRVNPVVJDRV9JTworCS5uYW1lCT0gIklPIE1FTSIsCisJLnN0YXJ0CT0gMHgxMDAwLAkJCS8qIHJlc2VydmUgcmVnYWN5IEkvTyBzcGFjZSAqLworCS5lbmQJPSAweDEwMDAgKyBKTVIzOTI3X1BDSUlPX1NJWkUgLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiAKIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlID0gewotCSJQQ0kgTUVNIiwKLQlKTVIzOTI3X1BDSU1FTSwKLQlKTVIzOTI3X1BDSU1FTSArIEpNUjM5MjdfUENJTUVNX1NJWkUgLSAxLAotCUlPUkVTT1VSQ0VfTUVNCisJLm5hbWUJPSAiUENJIE1FTSIsCisJLnN0YXJ0CT0gSk1SMzkyN19QQ0lNRU0sCisJLmVuZAk9IEpNUjM5MjdfUENJTUVNICsgSk1SMzkyN19QQ0lNRU1fU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBqbXIzOTI3X3BjaV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1vY2Vsb3QuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC5jCmluZGV4IDNkYThhNGUuLjJiOTQ5NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC5jCkBAIC03MSwxMyArNzEsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvY2Vsb3RfbWVtX3Jlc291cmNlID0gewotCWlvbWVtX3Jlc291cmNlLnN0YXJ0ID0gR1RfUENJX01FTV9CQVNFOwotCWlvbWVtX3Jlc291cmNlLmVuZCA9IEdUX1BDSV9NRU1fQkFTRSArIEdUX1BDSV9NRU1fQkFTRSAtIDE7CisJc3RhcnQJPSBHVF9QQ0lfTUVNX0JBU0U7CisJZW5kCT0gR1RfUENJX01FTV9CQVNFICsgR1RfUENJX01FTV9CQVNFIC0gMTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb2NlbG90X2lvX3Jlc291cmNlID0gewotCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IEdUX1BDSV9JT19CQVNFOwotCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBHVF9QQ0lfSU9fQkFTRSArIEdUX1BDSV9JT19TSVpFIC0gMTsKKwlzdGFydAk9IEdUX1BDSV9JT19CQVNFOworCWVuZAk9IEdUX1BDSV9JT19CQVNFICsgR1RfUENJX0lPX1NJWkUgLSAxOwogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBvY2Vsb3RfcGNpX2NvbnRyb2xsZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS15b3NlbWl0ZS5jIGIvYXJjaC9taXBzL3BjaS9wY2kteW9zZW1pdGUuYwppbmRleCBkYWM5ZWQ0Li4wMzU3OTQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS15b3NlbWl0ZS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLXlvc2VtaXRlLmMKQEAgLTE0LDcgKzE0LDEwIEBACiBleHRlcm4gc3RydWN0IHBjaV9vcHMgdGl0YW5fcGNpX29wczsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweV9tZW1fcmVzb3VyY2UgPSB7Ci0JIlRpdGFuIFBDSSBNRU0iLCAweGUwMDAwMDAwVUwsIDB4ZTNmZmZmZmZVTCwgSU9SRVNPVVJDRV9NRU0KKwkuc3RhcnQJPSAweGUwMDAwMDAwVUwsCisJLmVuZAk9IDB4ZTNmZmZmZmZVTCwKKwkubmFtZQk9ICJUaXRhbiBQQ0kgTUVNIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQogfTsKIAogLyoKQEAgLTI2LDcgKzI5LDEwIEBACiAjZGVmaW5lIFRJVEFOX0lPX0JBU0UJMHhlODAwMDAwMFVMCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHlfaW9fcmVzb3VyY2UgPSB7Ci0JIlRpdGFuIElPIE1FTSIsIDB4MDAwMDEwMDBVTCwgVElUQU5fSU9fU0laRSAtIDEsIElPUkVTT1VSQ0VfSU8sCisJLnN0YXJ0CT0gMHgwMDAwMTAwMFVMLAorCS5lbmQJPSBUSVRBTl9JT19TSVpFIC0gMSwKKwkubmFtZQk9ICJUaXRhbiBJTyBNRU0iLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHB5X2NvbnRyb2xsZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS5jIGIvYXJjaC9taXBzL3BjaS9wY2kuYwppbmRleCAyMTQwMmZmLi40ZGZjZTE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKQEAgLTc2LDExICs3Niw2IEBACiAJcmVzLT5zdGFydCA9IHN0YXJ0OwogfQogCi1zdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBfX2luaXQgYWxsb2NfcGNpX2NvbnRyb2xsZXIodm9pZCkKLXsKLQlyZXR1cm4gYWxsb2NfYm9vdG1lbShzaXplb2Yoc3RydWN0IHBjaV9jb250cm9sbGVyKSk7Ci19Ci0KIHZvaWQgX19pbml0IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKIAkqaG9zZV90YWlsID0gaG9zZTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3BjaS5jIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vcGNpLmMKaW5kZXggYmFhNjkwNS4uZWVlNGYzZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vcGNpLmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vcGNpLmMKQEAgLTI3LDE3ICsyNywxNyBAQAogI2luY2x1ZGUgPG5hbmQuaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JInBjaSBJTyBzcGFjZSIsCi0JKHUzMikoUE5YODU1MF9QQ0lJTyArIDB4MTAwMCksCS8qIHJlc2VydmUgcmVnYWN5IEkvTyBzcGFjZSAqLwotCSh1MzIpKFBOWDg1NTBfUENJSU8gKyBQTlg4NTUwX1BDSUlPX1NJWkUpLAotCUlPUkVTT1VSQ0VfSU8KKwkuc3RhcnQJPSBQTlg4NTUwX1BDSUlPICsgMHgxMDAwLAkvKiByZXNlcnZlIHJlZ2FjeSBJL08gc3BhY2UgKi8KKwkuZW5kCT0gUE5YODU1MF9QQ0lJTyArIFBOWDg1NTBfUENJSU9fU0laRSwKKwkubmFtZQk9ICJwY2kgSU8gc3BhY2UiLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbV9yZXNvdXJjZSA9IHsKLQkicGNpIG1lbW9yeSBzcGFjZSIsCi0JKHUzMikoUE5YODU1MF9QQ0lNRU0pLAotCSh1MzIpKFBOWDg1NTBfUENJTUVNICsgUE5YODU1MF9QQ0lNRU1fU0laRSAtIDEpLAotCUlPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gUE5YODU1MF9QQ0lNRU0sCisJLmVuZAk9IFBOWDg1NTBfUENJTUVNICsgUE5YODU1MF9QQ0lNRU1fU0laRSAtIDEsCisJLm5hbWUJPSAicGNpIG1lbW9yeSBzcGFjZSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBwbng4NTUwX3BjaV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vc2V0dXAuYwppbmRleCAwZDhhNzc2Li4wZTc5MWY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3NldHVwLmMKQEAgLTU4LDEwICs1OCwyNyBAQAogZXh0ZXJuIGNoYXIgKnByb21fZ2V0Y21kbGluZSh2b2lkKTsKIAogc3RydWN0IHJlc291cmNlIHN0YW5kYXJkX2lvX3Jlc291cmNlc1tdID0gewotCXsiZG1hMSIsIDB4MDAsIDB4MWYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyJ0aW1lciIsIDB4NDAsIDB4NWYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyJkbWEgcGFnZSByZWciLCAweDgwLCAweDhmLCBJT1JFU09VUkNFX0JVU1l9LAotCXsiZG1hMiIsIDB4YzAsIDB4ZGYsIElPUkVTT1VSQ0VfQlVTWX0sCisJeworCQkuc3RhcnQJPSAuMHgwMCwKKwkJLmVuZAk9IDB4MWYsCisJCS5uYW1lCT0gImRtYTEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4NDAsCisJCS5lbmQJPSAweDVmLAorCQkubmFtZQk9ICJ0aW1lciIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHg4MCwKKwkJLmVuZAk9IDB4OGYsCisJCS5uYW1lCT0gImRtYSBwYWdlIHJlZyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHhjMCwKKwkJLmVuZAk9IDB4ZGYsCisJCS5uYW1lCT0gImRtYTIiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LAogfTsKIAogI2RlZmluZSBTVEFOREFSRF9JT19SRVNPVVJDRVMgKHNpemVvZihzdGFuZGFyZF9pb19yZXNvdXJjZXMpL3NpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKQpAQCAtODIsNyArOTksNyBAQAogCiBpbnQgcG54ODU1MF9jb25zb2xlX3BvcnQgPSAtMTsKIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlpbnQgaTsKIAljaGFyKiBhcmdwdHI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYwppbmRleCAzZjcyNGQ2Li5hYTBkNmZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXB5X3J0Y19zZXR1cCgpOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWJvYXJkX3RpbWVfaW5pdCA9IHlvc2VtaXRlX3RpbWVfaW5pdDsKIAlsYXRlX3RpbWVfaW5pdCA9IHB5X2xhdGVfdGltZV9pbml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUgYi9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQppbmRleCA3MzBmNDU5Li4wNzhjZDMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQpAQCAtMiw2ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIFFlbXUgc3BlY2lmaWMga2VybmVsIGludGVyZmFjZSByb3V0aW5lcyB1bmRlciBMaW51eC4KICMKIAotb2JqLXkJCT0gcS1maXJtd2FyZS5vIHEtaXJxLm8gcS1tZW0ubyBxLXNldHVwLm8KK29iai15CQk9IHEtZmlybXdhcmUubyBxLWlycS5vIHEtbWVtLm8gcS1zZXR1cC5vIHEtcmVzZXQubwogCiBvYmotJChDT05GSUdfU01QKSArPSBxLXNtcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcWVtdS9xLXJlc2V0LmMgYi9hcmNoL21pcHMvcWVtdS9xLXJlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0ZWJjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9xZW11L3EtcmVzZXQuYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcWVtdS5oPgorCitzdGF0aWMgdm9pZCBxZW11X21hY2hpbmVfcmVzdGFydChjaGFyICpjb21tYW5kKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcmVnID0gKHVuc2lnbmVkIGludCAqKVFFTVVfUkVTVEFSVF9SRUc7CisKKwlzZXRfYzBfc3RhdHVzKFNUMF9CRVYgfCBTVDBfRVJMKTsKKwljaGFuZ2VfYzBfY29uZmlnKENPTkZfQ01fQ01BU0ssIENPTkZfQ01fVU5DQUNIRUQpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCXdyaXRlX2MwX3dpcmVkKDApOworCSpyZWcgPSA0MjsKKwl3aGlsZSAoMSkKKwkJY3B1X3dhaXQoKTsKK30KKworc3RhdGljIHZvaWQgcWVtdV9tYWNoaW5lX2hhbHQodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnJlZyA9ICh1bnNpZ25lZCBpbnQgKilRRU1VX0hBTFRfUkVHOworCisJKnJlZyA9IDQyOworCXdoaWxlICgxKQorCQljcHVfd2FpdCgpOworfQorCit2b2lkIHFlbXVfcmVib290X3NldHVwKHZvaWQpCit7CisJX21hY2hpbmVfcmVzdGFydCA9IHFlbXVfbWFjaGluZV9yZXN0YXJ0OworCV9tYWNoaW5lX2hhbHQgPSBxZW11X21hY2hpbmVfaGFsdDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9xZW11L3Etc2V0dXAuYyBiL2FyY2gvbWlwcy9xZW11L3Etc2V0dXAuYwppbmRleCAwMjJlYjFhLi5lMTAwZDYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcWVtdS9xLXNldHVwLmMKKysrIGIvYXJjaC9taXBzL3FlbXUvcS1zZXR1cC5jCkBAIC0yLDYgKzIsOCBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKK2V4dGVybiB2b2lkIHFlbXVfcmVib290X3NldHVwKHZvaWQpOworCiAjZGVmaW5lIFFFTVVfUE9SVF9CQVNFIDB4YjQwMDAwMDAKIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCkBAIC0xOCw4ICsyMCwxMCBAQAogCXNldHVwX2lycSgwLCBpcnEpOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXNldF9pb19wb3J0X2Jhc2UoUUVNVV9QT1JUX0JBU0UpOwogCWJvYXJkX3RpbWVyX3NldHVwID0gcWVtdV90aW1lcl9zZXR1cDsKKworCXFlbXVfcmVib290X3NldHVwKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwppbmRleCA3MDE4ZTE4Li5kNzEzODkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIGV4dGVybiB2b2lkIGlwMjJfYmVfaW5pdCh2b2lkKSBfX2luaXQ7CiBleHRlcm4gdm9pZCBpcDIyX3RpbWVfaW5pdCh2b2lkKSBfX2luaXQ7CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJY2hhciAqY3R5cGU7CiAJY2hhciAqY3NlcmlhbDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnIGIvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKaW5kZXggN2IwYmM0NC4uZjE0ZWYzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKQEAgLTQsMzEgKzQsMjkgQEAKICMJICBUaGlzIG9wdGlvbnMgYWRkcyBzdXBwb3J0IGZvciB1c2Vyc3BhY2UgcHJvY2Vzc2VzIHVwdG8gMTZUQiBzaXplLgogIwkgIE5vcm1hbGx5IHRoZSBsaW1pdCBpcyBqdXN0IC41VEIuCiAKLWNvbmZpZyBTR0lfU04wX05fTU9ERQorY2hvaWNlCisJcHJvbXB0ICJOb2RlIGFkZHJlc3NpbmcgbW9kZSIKKwlkZXBlbmRzIG9uIFNHSV9JUDI3CisJZGVmYXVsdCBTR0lfU05fTV9NT0RFCisKK2NvbmZpZyBTR0lfU05fTV9NT0RFCisJYm9vbCAiSVAyNyBNLU1vZGUiCisJaGVscAorCSAgVGhlIG5vZGVzIG9mIE9yaWdpbiwgT255eCwgRnVlbCBhbmQgVGV6cm8gc3lzdGVtcyBjYW4gYmUgY29uZmlndXJlZAorCSAgaW4gZWl0aGVyIE4tTW9kZXMgd2hpY2ggYWxsb3dzIGZvciBtb3JlIG5vZGVzIG9yIE0tTW9kZSB3aGljaCBhbGxvd3MKKwkgIGZvciBtb3JlIG1lbW9yeS4gIFlvdXIgaGFyZHdhcmUgaXMgYWxtb3N0IGNlcnRhaW5seSBydW5uaW5nIGluCisJICBNLU1vZGUsIHNvIGNob29zZSBNLW1vZGUgaGVyZS4KKworY29uZmlnIFNHSV9TTl9OX01PREUKIAlib29sICJJUDI3IE4tTW9kZSIKLQlkZXBlbmRzIG9uIFNHSV9JUDI3CisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAloZWxwCi0JICBUaGUgbm9kZXMgb2YgT3JpZ2luIDIwMCwgT3JpZ2luIDIwMDAgYW5kIE9ueXggMiBzeXN0ZW1zIGNhbiBiZQotCSAgY29uZmlndXJlZCBpbiBlaXRoZXIgTi1Nb2RlcyB3aGljaCBhbGxvd3MgZm9yIG1vcmUgbm9kZXMgb3IgTS1Nb2RlCi0JICB3aGljaCBhbGxvd3MgZm9yIG1vcmUgbWVtb3J5LiAgWW91ciBzeXN0ZW0gaXMgbW9zdCBwcm9iYWJseQotCSAgcnVubmluZyBpbiBNLU1vZGUsIHNvIHlvdSBzaG91bGQgc2F5IE4gaGVyZS4KKwkgIFRoZSBub2RlcyBvZiBPcmlnaW4sIE9ueXgsIEZ1ZWwgYW5kIFRlenJvIHN5c3RlbXMgY2FuIGJlIGNvbmZpZ3VyZWQKKwkgIGluIGVpdGhlciBOLU1vZGVzIHdoaWNoIGFsbG93cyBmb3IgbW9yZSBub2RlcyBvciBNLU1vZGUgd2hpY2ggYWxsb3dzCisJICBmb3IgbW9yZSBtZW1vcnkuICBZb3VyIGhhcmR3YXJlIGlzIGFsbW9zdCBjZXJ0YWlubHkgcnVubmluZyBpbgorCSAgTS1Nb2RlLCBzbyBjaG9vc2UgTS1tb2RlIGhlcmUuCiAKLWNvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKLQlib29sCi0JZGVmYXVsdCB5IGlmIFNHSV9JUDI3Ci0JaGVscAotCSAgU2F5IFkgdG8gdXBwb3J0IGVmZmljaWVudCBoYW5kbGluZyBvZiBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSwKLQkgIGZvciBhcmNoaXRlY3R1cmVzIHdoaWNoIGFyZSBlaXRoZXIgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcykKLQkgIG9yIGhhdmUgaHVnZSBob2xlcyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBmb3Igb3RoZXIgcmVhc29ucy4KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZtL251bWE+IGZvciBtb3JlLgotCi1jb25maWcgTlVNQQotCWJvb2wgIk5VTUEgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNHSV9JUDI3Ci0JaGVscAotCSAgU2F5IFkgdG8gY29tcGlsZSB0aGUga2VybmVsIHRvIHN1cHBvcnQgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5Ci0JICBBY2Nlc3MpLiAgVGhpcyBvcHRpb24gaXMgZm9yIGNvbmZpZ3VyaW5nIGhpZ2gtZW5kIG11bHRpcHJvY2Vzc29yCi0JICBzZXJ2ZXIgbWFjaGluZXMuICBJZiBpbiBkb3VidCwgc2F5IE4uCitlbmRjaG9pY2UKIAogY29uZmlnIE1BUFBFRF9LRVJORUwKIAlib29sICJNYXBwZWQga2VybmVsIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMKaW5kZXggODY1MWEwZS4uYTZiNDkwZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWluaXQuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiBleHRlcm4gdm9pZCBpcDI3X3RpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGlwMjdfcmVib290X3NldHVwKHZvaWQpOwogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWh1YnJlZ190IHAsIGUsIG5fbW9kZTsKIAluYXNpZF90IG5pZDsKQEAgLTIyOCw3ICsyMjgsNyBAQAogCSAqLwogCW5fbW9kZSA9IExPQ0FMX0hVQl9MKE5JX1NUQVRVU19SRVZfSUQpICYgTlNSSV9NT1JFTk9ERVNfTUFTSzsKIAlwcmludGsoIk1hY2hpbmUgaXMgaW4gJWMgbW9kZS5cbiIsIG5fbW9kZSA/ICdOJyA6ICdNJyk7Ci0jaWZkZWYgQ09ORklHX1NHSV9TTjBfTl9NT0RFCisjaWZkZWYgQ09ORklHX1NHSV9TTl9OX01PREUKIAlpZiAoIW5fbW9kZSkKIAkJcGFuaWMoIktlcm5lbCBjb21waWxlZCBmb3IgTSBtb2RlLiIpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKaW5kZXggMmU2NDNkMi4uMGI2MWEzOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpcnFfbWFwW05SX0lSUVMgLyBCSVRTX1BFUl9MT05HXTsKIAotc3RhdGljIGludCBhbGxvY2F0ZV9pcnFubyh2b2lkKQoraW50IGFsbG9jYXRlX2lycW5vKHZvaWQpCiB7CiAJaW50IGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKaW5kZXggMzZiNjYyZS4uMWZiODYwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCkBAIC04OSwxMSArODksMTMgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdW5zaWduZWQgaW50IHJ0X3RpbWVyX2lycTsKKwogdm9pZCBpcDI3X3J0X3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWludCBjcHVBID0gY3B1dG9zbGljZShjcHUpID09IDA7Ci0JaW50IGlycSA9IDk7CQkJCS8qIFhYWCBBc3NpZ24gbnVtYmVyICovCisJdW5zaWduZWQgaW50IGlycSA9IHJ0X3RpbWVyX2lycTsKIAogCWlycV9lbnRlcigpOwogCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwpAQCAtMTc5LDEzICsxODEsNjggQEAKICAgICAgICAgcmV0dXJuIG1rdGltZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWluLCBzZWMpOwogfQogCitzdGF0aWMgdm9pZCBzdGFydHVwX3J0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9ydF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3J0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3J0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfcnQodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgZW5kX3J0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIHJ0X2lycV90eXBlID0geworCS50eXBlbmFtZQk9ICJTTiBIVUIgUlQgdGltZXIiLAorCS5zdGFydHVwCT0gc3RhcnR1cF9ydF9pcnEsCisJLnNodXRkb3duCT0gc2h1dGRvd25fcnRfaXJxLAorCS5lbmFibGUJCT0gZW5hYmxlX3J0X2lycSwKKwkuZGlzYWJsZQk9IGRpc2FibGVfcnRfaXJxLAorCS5hY2sJCT0gbWFza19hbmRfYWNrX3J0LAorCS5lbmQJCT0gZW5kX3J0X2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHJ0X2lycWFjdGlvbiA9IHsKKwkuaGFuZGxlcgk9IGlwMjdfcnRfdGltZXJfaW50ZXJydXB0LAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKKwkubmFtZQkJPSAidGltZXIiCit9OworCitleHRlcm4gaW50IGFsbG9jYXRlX2lycW5vKHZvaWQpOworCiBzdGF0aWMgdm9pZCBpcDI3X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKIHsKKwlpbnQgaXJxbm8gID0gYWxsb2NhdGVfaXJxbm8oKTsKKworCWlmIChpcnFubyA8IDApCisJCXBhbmljKCJDYW4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHQgbnVtYmVyIGZvciB0aW1lciBpbnRlcnJ1cHQiKTsKKworCWlycV9kZXNjW2lycW5vXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CisJaXJxX2Rlc2NbaXJxbm9dLmFjdGlvbiA9IE5VTEw7CisJaXJxX2Rlc2NbaXJxbm9dLmRlcHRoID0gMTsKKwlpcnFfZGVzY1tpcnFub10uaGFuZGxlciA9ICZydF9pcnFfdHlwZTsKKwogCS8qIG92ZXItd3JpdGUgdGhlIGhhbmRsZXIsIHdlIHVzZSBvdXIgb3duIHdheSAqLwogCWlycS0+aGFuZGxlciA9IG5vX2FjdGlvbjsKIAogCS8qIHNldHVwIGlycWFjdGlvbiAqLwotLy8Jc2V0dXBfaXJxKElQMjdfVElNRVJfSVJRLCBpcnEpOwkJLyogWFhYIENhbid0IGRvIHRoaXMgeWV0LiAgKi8KKwlpcnFfZGVzY1tpcnFub10uc3RhdHVzIHw9IElSUV9QRVJfQ1BVOworCisJcnRfdGltZXJfaXJxID0gaXJxbm87CiB9CiAKIHZvaWQgX19pbml0IGlwMjdfdGltZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCmluZGV4IGRlMDFjOTguLjhiYTA4MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCkBAIC0zMSwxMiArMzEsMTIgQEAKIC8qIGlzc3VlIGEgUElPIHJlYWQgdG8gbWFrZSBzdXJlIG5vIFBJTyB3cml0ZXMgYXJlIHBlbmRpbmcgKi8KIHN0YXRpYyB2b2lkIGlubGluZSBmbHVzaF9jcmltZV9idXModm9pZCkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGp1bmsgPSBjcmltZS0+Y29udHJvbDsKKwljcmltZS0+Y29udHJvbDsKIH0KIAogc3RhdGljIHZvaWQgaW5saW5lIGZsdXNoX21hY2VfYnVzKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBqdW5rID0gbWFjZS0+cGVyaWYuY3RybC5taXNjOworCW1hY2UtPnBlcmlmLmN0cmwubWlzYzsKIH0KIAogI3VuZGVmIERFQlVHX0lSUQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKaW5kZXggYTJkZDhhZS4uYWNiZGFkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJc2V0dXBfaXJxKElQMzJfUjRLX1RJTUVSX0lSUSwgaXJxKTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF9zZXR1cCh2b2lkKQordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlib2FyZF9iZV9pbml0ID0gaXAzMl9iZV9pbml0OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3RpbWUuYwppbmRleCBlNTQ1NzUyLi5lZmFmODNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC90aW1lLmMKQEAgLTExMCwxNyArMTEwLDE4IEBACiAJX19yYXdfd3JpdGVxKE1fU0NEX1RJTUVSX0VOQUJMRXxNX1NDRF9USU1FUl9NT0RFX0NPTlRJTlVPVVMsCiAJICAgICAgSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKGNwdSwgUl9TQ0RfVElNRVJfQ0ZHKSkpOwogCi0JLyoKLQkgKiBDUFUgMCBoYW5kbGVzIHRoZSBnbG9iYWwgdGltZXIgaW50ZXJydXB0IGpvYgotCSAqLwogCWlmIChjcHUgPT0gMCkgeworCQkvKgorCQkgKiBDUFUgMCBoYW5kbGVzIHRoZSBnbG9iYWwgdGltZXIgaW50ZXJydXB0IGpvYgorCQkgKi8KIAkJbGxfdGltZXJfaW50ZXJydXB0KGlycSwgcmVncyk7CiAJfQotCi0JLyoKLQkgKiBldmVyeSBDUFUgc2hvdWxkIGRvIHByb2ZpbGluZyBhbmQgcHJvY2VzcyBhY2NvdXRpbmcKLQkgKi8KLQlsbF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoaXJxLCByZWdzKTsKKwllbHNlIHsKKwkJLyoKKwkJICogb3RoZXIgQ1BVcyBzaG91bGQganVzdCBkbyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZworCQkgKi8KKwkJbGxfbG9jYWxfdGltZXJfaW50ZXJydXB0KGlycSwgcmVncyk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwppbmRleCAwZjZlNTRkLi5mODUzYzMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwpAQCAtNDM1LDEzICs0MzUsMTcgQEAKIAlyZXR1cm4gbHo7CiB9CiAKK2V4dGVybiB2b2lkIHNiMTI1MF90aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgc2IxMjUwX21haWxib3hfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHNiMTI1MF9rZ2RiX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKIGFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgcGVuZGluZzsKIAogI2lmZGVmIENPTkZJR19TSUJZVEVfU0IxMjUwX1BST0YKIAkvKiBTZXQgY29tcGFyZSB0byBjb3VudCB0byBzaWxlbmNlIGNvdW50L2NvbXBhcmUgdGltZXIgaW50ZXJydXB0cyAqLwotCXdyaXRlX2MwX2NvdW50KHJlYWRfYzBfY291bnQoKSk7CisJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvdW50KCkpOwogI2VuZGlmCiAKIAkvKgpAQCAtNDgyLDcgKzQ4Niw3IEBACiAJCSAqIERlZmF1bHQuLi53ZSd2ZSBoaXQgYW4gSVBbMl0gaW50ZXJydXB0LCB3aGljaCBtZWFucyB3ZSd2ZQogCQkgKiBnb3QgdG8gY2hlY2sgdGhlIDEyNTAgaW50ZXJydXB0IHJlZ2lzdGVycyB0byBmaWd1cmUgb3V0IHdoYXQKIAkJICogdG8gZG8uICBOZWVkIHRvIGRldGVjdCB3aGljaCBDUFUgd2UncmUgb24sIG5vdyB0aGF0Ci0JCSB+IHNtcF9hZmZpbml0eSBpcyBzdXBwb3J0ZWQuCisJCSAqIHNtcF9hZmZpbml0eSBpcyBzdXBwb3J0ZWQuCiAJCSAqLwogCQltYXNrID0gX19yYXdfcmVhZHEoSU9BRERSKEFfSU1SX1JFR0lTVEVSKHNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUl9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFKSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCmluZGV4IDRiNWY3NGYuLmY5ZTY5NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKQEAgLTcyLDggKzcyLDEwIEBACiAKIHZvaWQgX19pbml0IHN3YXJtX3RpbWVfaW5pdCh2b2lkKQogeworI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9TQjEyNTApIHx8IGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xMTJYKQogCS8qIFNldHVwIEhQVCAqLwogCXNiMTI1MF9ocHRfc2V0dXAoKTsKKyNlbmRpZgogfQogCiB2b2lkIF9faW5pdCBzd2FybV90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCkBAIC0xMDMsNyArMTA1LDcgQEAKIAlyZXR1cm4gKGlzX2ZpeHVwID8gTUlQU19CRV9GSVhVUCA6IE1JUFNfQkVfRkFUQUwpOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xeDU1KSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfQkNNMXg4MCkKIAliY20xNDgwX3NldHVwKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL01ha2VmaWxlIGIvYXJjaC9taXBzL3NuaS9NYWtlZmlsZQppbmRleCA5YzdlYWE1Li5hNWViMGFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9zbmkvTWFrZWZpbGUKQEAgLTMsNSArMyw2IEBACiAjCiAKIG9iai15CSAJKz0gaXJxLm8gcGNpbXRfc2NhY2hlLm8gcmVzZXQubyBzZXR1cC5vCitvYmotJChDT05GSUdfQ1BVX0JJR19FTkRJQU4pICs9IHNuaXByb20ubwogCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3NldHVwLmMgYi9hcmNoL21pcHMvc25pL3NldHVwLmMKaW5kZXggMDFiYTZjNS4uYTA1MGJiNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvc2V0dXAuYwpAQCAtMjEsOCArMjEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogCisjaWZkZWYgQ09ORklHX0FSQwogI2luY2x1ZGUgPGFzbS9hcmMvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2dpYWxpYi5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxhc20vYmNhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC03Miw4ICs3NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbmlfZGlzcGxheV9zZXR1cCh2b2lkKQogewotI2lmZGVmIENPTkZJR19WVAotI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9DT05TT0xFKQorI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfQVJDKQogCXN0cnVjdCBzY3JlZW5faW5mbyAqc2kgPSAmc2NyZWVuX2luZm87CiAJRElTUExBWV9TVEFUVVMgKmRpOwogCkBAIC04OCwyNCArOTAsNTQgQEAKIAkJc2ktPm9yaWdfdmlkZW9fcG9pbnRzCT0gMTY7CiAJfQogI2VuZGlmCi0jZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmlfaW9fcmVzb3VyY2UgPSB7Ci0JIlBDSU1UIElPIE1FTSIsIDB4MDAwMDEwMDBVTCwgMHgwM2JmZmZmZlVMLCBJT1JFU09VUkNFX0lPLAorCS5zdGFydAk9IDB4MDAwMDEwMDBVTCwKKwkuZW5kCT0gMHgwM2JmZmZmZlVMLAorCS5uYW1lCT0gIlBDSU1UIElPIE1FTSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpbXRfaW9fcmVzb3VyY2VzW10gPSB7Ci0JeyAiZG1hMSIsIDB4MDAsIDB4MWYsIElPUkVTT1VSQ0VfQlVTWSB9LAotCXsgInRpbWVyIiwgMHg0MCwgMHg1ZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAia2V5Ym9hcmQiLCAweDYwLCAweDZmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJkbWEgcGFnZSByZWciLCAweDgwLCAweDhmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJkbWEyIiwgMHhjMCwgMHhkZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiUENJIGNvbmZpZyBkYXRhIiwgMHhjZmMsIDB4Y2ZmLCBJT1JFU09VUkNFX0JVU1kgfQorCXsKKwkJLnN0YXJ0CT0gMHgwMCwKKwkJLmVuZAk9IDB4MWYsCisJCS5uYW1lCT0gImRtYTEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9ICAweDQwLAorCQkuZW5kCT0gMHg1ZiwKKwkJLm5hbWUJPSAidGltZXIiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9ICAweDYwLAorCQkuZW5kCT0gMHg2ZiwKKwkJLm5hbWUJPSAia2V5Ym9hcmQiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9ICAweDgwLAorCQkuZW5kCT0gMHg4ZiwKKwkJLm5hbWUJPSAiZG1hIHBhZ2UgcmVnIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAgMHhjMCwKKwkJLmVuZAk9IDB4ZGYsCisJCS5uYW1lCT0gImRtYTIiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9ICAweGNmYywKKwkJLmVuZAk9IDB4Y2ZmLAorCQkubmFtZQk9ICJQQ0kgY29uZmlnIGRhdGEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9CiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNuaV9tZW1fcmVzb3VyY2UgPSB7Ci0JIlBDSU1UIFBDSSBNRU0iLCAweDEwMDAwMDAwVUwsIDB4ZmZmZmZmZmZVTCwgSU9SRVNPVVJDRV9NRU0KKwkuc3RhcnQJPSAweDEwMDAwMDAwVUwsCisJLmVuZAk9IDB4ZmZmZmZmZmZVTCwKKwkubmFtZQk9ICJQQ0lNVCBQQ0kgTUVNIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQogfTsKIAogLyoKQEAgLTEyMiwxOSArMTU0LDcyIEBACiAgKiAweGEwMDAwMDAwIC0gMHhmZmZmZmZmZiAoMS41R0IpIFBDSS9FSVNBIEJ1cyBNZW1vcnkKICAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2ltdF9tZW1fcmVzb3VyY2VzW10gPSB7Ci0JeyAiVmlkZW8gUkFNIGFyZWEiLCAweDEwMGEwMDAwLCAweDEwMGJmZmZmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJJU0EgUmVzZXJ2ZWQiLCAweDEwMGMwMDAwLCAweDEwMGZmZmZmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJQQ0kgSU8iLCAweDE0MDAwMDAwLCAweDE3YmZmZmZmLCBJT1JFU09VUkNFX0JVU1kgfSwKLQl7ICJDYWNoZSBSZXBsYWNlbWVudCBBcmVhIiwgMHgxN2MwMDAwMCwgMHgxN2ZmZmZmZiwgSU9SRVNPVVJDRV9CVVNZfSwKLQl7ICJQQ0kgSU5UIEFja25vd2xlZGdlIiwgMHgxYTAwMDAwMCwgMHgxYTAwMDAwMywgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiQm9vdCBQUk9NIiwgMHgxZmMwMDAwMCwgMHgxZmM3ZmZmZiwgSU9SRVNPVVJDRV9CVVNZfSwKLQl7ICJEaWFnIFBST00iLCAweDFmYzgwMDAwLCAweDFmY2ZmZmZmLCBJT1JFU09VUkNFX0JVU1l9LAotCXsgIlgtQnVzIiwgMHgxZmQwMDAwMCwgMHgxZmRmZmZmZiwgSU9SRVNPVVJDRV9CVVNZfSwKLQl7ICJCSU9TIG1hcCIsIDB4MWZlMDAwMDAsIDB4MWZlZmZmZmYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyAiTlZSQU0gLyBFRVBST00iLCAweDFmZjAwMDAwLCAweDFmZjdmZmZmLCBJT1JFU09VUkNFX0JVU1l9LAotCXsgIkFTSUMgUENJIiwgMHgxZmZmMDAwMCwgMHgxZmZmZWZmZiwgSU9SRVNPVVJDRV9CVVNZfSwKLQl7ICJNUCBBZ2VudCIsIDB4MWZmZmYwMDAsIDB4MWZmZmZmZmYsIElPUkVTT1VSQ0VfQlVTWX0sCi0JeyAiTWFpbiBNZW1vcnkiLCAweDIwMDAwMDAwLCAweDlmZmZmZmZmLCBJT1JFU09VUkNFX0JVU1l9CisJeworCQkuc3RhcnQJPSAweDEwMGEwMDAwLAorCQkuZW5kCT0gMHgxMDBiZmZmZiwKKwkJLm5hbWUJPSAiVmlkZW8gUkFNIGFyZWEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MTAwYzAwMDAsCisJCS5lbmQJPSAweDEwMGZmZmZmLAorCQkubmFtZQk9ICJJU0EgUmVzZXJ2ZWQiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MTQwMDAwMDAsCisJCS5lbmQJPSAweDE3YmZmZmZmLAorCQkubmFtZQk9ICJQQ0kgSU8iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MTdjMDAwMDAsCisJCS5lbmQJPSAweDE3ZmZmZmZmLAorCQkubmFtZQk9ICJDYWNoZSBSZXBsYWNlbWVudCBBcmVhIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFhMDAwMDAwLAorCQkuZW5kCT0gMHgxYTAwMDAwMywKKwkJLm5hbWUJPSAiUENJIElOVCBBY2tub3dsZWRnZSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmMwMDAwMCwKKwkJLmVuZAk9IDB4MWZjN2ZmZmYsCisJCS5uYW1lCT0gIkJvb3QgUFJPTSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmM4MDAwMCwKKwkJLmVuZAk9IDB4MWZjZmZmZmYsCisJCS5uYW1lCT0gIkRpYWcgUFJPTSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmQwMDAwMCwKKwkJLmVuZAk9IDB4MWZkZmZmZmYsCisJCS5uYW1lCT0gIlgtQnVzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmZTAwMDAwLAorCQkuZW5kCT0gMHgxZmVmZmZmZiwKKwkJLm5hbWUJPSAiQklPUyBtYXAiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MWZmMDAwMDAsCisJCS5lbmQJPSAweDFmZjdmZmZmLAorCQkubmFtZQk9ICJOVlJBTSAvIEVFUFJPTSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0sIHsKKwkJLnN0YXJ0CT0gMHgxZmZmMDAwMCwKKwkJLmVuZAk9IDB4MWZmZmVmZmYsCisJCS5uYW1lCT0gIkFTSUMgUENJIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZCisJfSwgeworCQkuc3RhcnQJPSAweDFmZmZmMDAwLAorCQkuZW5kCT0gMHgxZmZmZmZmZiwKKwkJLm5hbWUJPSAiTVAgQWdlbnQiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kKKwl9LCB7CisJCS5zdGFydAk9IDB4MjAwMDAwMDAsCisJCS5lbmQJPSAweDlmZmZmZmZmLAorCQkubmFtZQk9ICJNYWluIE1lbW9yeSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWQorCX0KIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbmlfcmVzb3VyY2VfaW5pdCh2b2lkKQpAQCAtMTY4LDcgKzI1Myw3IEBACiAJcnRjX21pcHNfc2V0X3RpbWUgPSBtYzE0NjgxOF9zZXRfcnRjX21tc3M7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJc25pX3BjaW10X2RldGVjdCgpOwogCXNuaV9wY2ltdF9zY19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3NuaXByb20uYyBiL2FyY2gvbWlwcy9zbmkvc25pcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZDBmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvc25pL3NuaXByb20uYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIEJpZyBFbmRpYW4gUFJPTSBjb2RlIGZvciBTTkkgUk0gbWFjaGluZXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBGbG9yaWFuIExvaG9mZiAoZmxvQHJmYzgyMi5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUaG9tYXMgQm9nZW5kb2VyZmVyICh0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL3NuaS5oPgorI2luY2x1ZGUgPGFzbS9taXBzcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisvKiBzcGVjaWFsIFNOSSBwcm9tIGNhbGxzICovCisvKgorICogVGhpcyBkb2VzIG5vdCBleGlzdCBpbiBhbGwgcHJvbXMgLSBTSU5JWCBjb21wYXJlcworICogdGhlIHByb20gZW52IHZhcmlhYmxlICJ2ZXJzaW9uIiBhZ2FpbnN0ICIyLjAwMDgiCisgKiBvciBncmVhdGVyLiBJZiBsZXNzZXIgaXQgdHJpZXMgdG8gcHJvYmUgaW50ZXJlc3RpbmcKKyAqIHJlZ2lzdGVycworICovCisjZGVmaW5lIFBST01fR0VUX01FTUNPTkYJNTgKKworI2RlZmluZSBQUk9NX1ZFQwkJKHU2NCAqKUNLU0VHMUFERFIoMHgxZmMwMDAwMCkKKyNkZWZpbmUgUFJPTV9FTlRSWSh4KQkJKFBST01fVkVDICsgKHgpKQorCisKKyN1bmRlZiBERUJVRworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCR19QUklOVEYoeC4uLikgICAgIHByb21fcHJpbnRmKHgpCisjZWxzZQorI2RlZmluZSBEQkdfUFJJTlRGKHguLi4pCisjZW5kaWYKKworc3RhdGljIGludCAqKCpfX3Byb21fcHV0Y2hhcikoaW50KSAgICAgICAgPSAoaW50ICooKikoaW50KSlQUk9NX0VOVFJZKFBST01fUFVUQ0hBUik7CitzdGF0aWMgY2hhciAqKCpfX3Byb21fZ2V0ZW52KShjaGFyICopICAgICA9IChjaGFyICooKikoY2hhciAqKSlQUk9NX0VOVFJZKFBST01fR0VURU5WKTsKK3N0YXRpYyB2b2lkICgqX19wcm9tX2dldF9tZW1jb25mKSh2b2lkICopID0gKHZvaWQgKCopKHZvaWQgKikpUFJPTV9FTlRSWShQUk9NX0dFVF9NRU1DT05GKTsKKworY2hhciAqcHJvbV9nZXRlbnYgKGNoYXIgKnMpCit7CisJcmV0dXJuIF9fcHJvbV9nZXRlbnYocyk7Cit9CisKK3ZvaWQgcHJvbV9wcmludGYoY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgcHBidWZbMTAyNF07CisJY2hhciAqYnB0cjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNwcmludGYocHBidWYsIGZtdCwgYXJncyk7CisKKwlicHRyID0gcHBidWY7CisKKwl3aGlsZSAoKmJwdHIgIT0gMCkgeworCQlpZiAoKmJwdHIgPT0gJ1xuJykKKwkJCV9fcHJvbV9wdXRjaGFyKCdccicpOworCisJCV9fcHJvbV9wdXRjaGFyKCpicHRyKyspOworCX0KKwl2YV9lbmQoYXJncyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAvcHJvYy9jcHVpbmZvIHN5c3RlbSB0eXBlCisgKgorICovCitzdGF0aWMgY29uc3QgY2hhciAqc3lzdHlwZSA9ICJVbmtub3duIjsKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiBzeXN0eXBlOworfQorCisjZGVmaW5lIFNOSV9JRFBST01fQkFTRSAgICAgICAgICAgICAgICAweGJmZjAwMDAwCisjZGVmaW5lIFNOSV9JRFBST01fTUVNU0laRSAgICAgICAgICAgICAoU05JX0lEUFJPTV9CQVNFKzB4MjgpICAvKiBNZW1zaXplIGluIDE2TUIgcXVhbnRpdGllcyAqLworI2RlZmluZSBTTklfSURQUk9NX0JSRFRZUEUgICAgICAgICAgICAgKFNOSV9JRFBST01fQkFTRSsweDI5KSAgLyogQm9hcmQgVHlwZSAqLworI2RlZmluZSBTTklfSURQUk9NX0NQVVRZUEUgICAgICAgICAgICAgKFNOSV9JRFBST01fQkFTRSsweDMwKSAgLyogQ1BVIFR5cGUgKi8KKworI2RlZmluZSBTTklfSURQUk9NX1NJWkUJMHgxMDAwCisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgc25pX2lkcHJvbV9kdW1wKHZvaWQpCit7CisJaW50CWk7CisKKwlwcm9tX3ByaW50ZigiU05JIElEUHJvbSBkdW1wIChmaXJzdCAxMjhieXRlKTpcbiIpOworCWZvcihpPTA7aTwxMjg7aSsrKSB7CisJCWlmIChpJTE2ID09IDApCisJCQlwcm9tX3ByaW50ZigiJTA0eCAiLCBpKTsKKworCQlwcm9tX3ByaW50ZigiJTAyeCAiLCAqKHVuc2lnbmVkIGNoYXIgKikgKFNOSV9JRFBST01fQkFTRStpKSk7CisKKwkJaWYgKGklMTYgPT0gMTUpCisJCQlwcm9tX3ByaW50ZigiXG4iKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgc25pX21lbV9pbml0KHZvaWQgKQoreworCWludCBpLCBtZW1zaXplOworCXN0cnVjdCBtZW1iYW5rIHsKKwkgICAgICAgIHUzMgkJc2l6ZTsKKwkgICAgICAgIHUzMgkJYmFzZTsKKwkgICAgICAgIHUzMgkJc2l6ZTI7CisJICAgICAgICB1MzIJCXBhZDE7CisJICAgICAgICB1MzIJCXBhZDI7CisJfSBtZW1jb25mWzhdOworCisJLyogTWVtU0laRSBmcm9tIHByb20gaW4gMTZNQnl0ZSBjaHVua3MgKi8KKwltZW1zaXplPSooKHVuc2lnbmVkIGNoYXIgKikgU05JX0lEUFJPTV9NRU1TSVpFKSAqIDE2OworCisJREJHX1BSSU5URigiSURQcm9tIG1lbXNpemU6ICVsdSBNQnl0ZVxuIiwgbWVtc2l6ZSk7CisKKwkvKiBnZXQgbWVtb3J5IGJhbmsgbGF5b3V0IGZyb20gcHJvbSAqLworCV9fcHJvbV9nZXRfbWVtY29uZigmbWVtY29uZik7CisKKwlEQkdfUFJJTlRGKCJwcm9tX2dldF9tZW1fY29uZiBtZW1vcnkgY29uZmlndXJhdGlvbjpcbiIpOworCWZvcihpPTA7aTw4ICYmIG1lbWNvbmZbaV0uc2l6ZTtpKyspIHsKKwkJcHJvbV9wcmludGYoIkJhbmslZDogJTA4eCBAICUwOHhcbiIsIGksCisJCQltZW1jb25mW2ldLnNpemUsIG1lbWNvbmZbaV0uYmFzZSk7CisJCWFkZF9tZW1vcnlfcmVnaW9uKG1lbWNvbmZbaV0uYmFzZSwgbWVtY29uZltpXS5zaXplLCBCT09UX01FTV9SQU0pOworCX0KK30KKwordm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCit7CisJaW50IGFyZ2MgPSBmd19hcmcwOworCWNoYXIgKiphcmd2ID0gKHZvaWQgKilmd19hcmcxOworCXVuc2lnbmVkIGludCBzbmlfYnJkX3R5cGUgPSAqKHVuc2lnbmVkIGNoYXIgKikgU05JX0lEUFJPTV9CUkRUWVBFOworCWludCBpOworCisJREJHX1BSSU5URigiRm91bmQgU05JIGJyZHR5cGUgJTAyeFxuIiwgc25pX2JyZF90eXBlKTsKKworI2lmZGVmIERFQlVHCisJc25pX2lkcHJvbV9kdW1wKCk7CisjZW5kaWYKKwlzbmlfbWVtX2luaXQoKTsKKworCS8qIGNvcHkgcHJvbSBjbWRsaW5lIHBhcmFtZXRlcnMgdG8ga2VybmVsIGNtZGxpbmUgKi8KKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsIGFyZ3ZbaV0pOworCQlpZiAoaSA8IChhcmdjIC0gMSkpCisJCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiICIpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkyNy9jb21tb24vdHg0OTI3X3NldHVwLmMgYi9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5Mjdfc2V0dXAuYwppbmRleCA3N2MzYjY2Li44MWE1YWNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5Mjdfc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5Mjdfc2V0dXAuYwpAQCAtNjQsNyArNjQsNyBAQAogfQogCiAKLXZvaWQgX19pbml0IHBsYXRfc2V0dXAodm9pZCkKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJYm9hcmRfdGltZV9pbml0ID0gdHg0OTI3X3RpbWVfaW5pdDsKIAlib2FyZF90aW1lcl9zZXR1cCA9IHR4NDkyN190aW1lcl9zZXR1cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL3NldHVwLmMgYi9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9zZXR1cC5jCmluZGV4IGZjOTkyOTUuLmVmNTlhNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vc2V0dXAuYwpAQCAtNjEsNyArNjEsNyBAQAogfQogCiB2b2lkIF9faW5pdAotcGxhdF9zZXR1cCh2b2lkKQorcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlib2FyZF90aW1lX2luaXQgPSB0eDQ5MzhfdGltZV9pbml0OwogCWJvYXJkX3RpbWVyX3NldHVwID0gdHg0OTM4X3RpbWVyX3NldHVwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkzOC90b3NoaWJhX3JidHg0OTM4L3NldHVwLmMgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYwppbmRleCA5MTY2Y2Q0Li45NmU4MzNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYwpAQCAtNjY0LDcgKzY2NCwxMCBAQAogCiBzdGF0aWMgY2hhciBwY29kZV9zdHJbOF07CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHR4NDkzOF9yZWdfcmVzb3VyY2UgPSB7Ci0JcGNvZGVfc3RyLCBUWDQ5MzhfUkVHX0JBU0UsIFRYNDkzOF9SRUdfQkFTRStUWDQ5MzhfUkVHX1NJWkUsIElPUkVTT1VSQ0VfTUVNCisJLnN0YXJ0CT0gVFg0OTM4X1JFR19CQVNFLAorCS5lbmQJPSBUWDQ5MzhfUkVHX0JBU0UgKyBUWDQ5MzhfUkVHX1NJWkUsCisJLm5hbWUJPSBwY29kZV9zdHIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIHZvaWQgX19pbml0IHR4NDkzOF9ib2FyZF9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnIGIvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnCmluZGV4IDA1NWEyY2QuLjYwNDZlZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZworKysgYi9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcKQEAgLTQsNyArNCw2IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IElTQQotCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCkBAIC0xNCwxOCArMTMsMTUgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgSVNBCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKIGNvbmZpZyBORUNfQ01CVlI0MTMzCiAJYm9vbCAiU3VwcG9ydCBmb3IgTkVDIENNQi1WUjQxMzMiCiAJZGVwZW5kcyBvbiBNQUNIX1ZSNDFYWAotCXNlbGVjdCBDUFVfVlI0MVhYCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IEhXX0hBU19QQ0kKLQlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIApAQCAtNDEsNyArMzcsNiBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJaGVscApAQCAtNzQsNyArNjksNiBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKQEAgLTg0LDcgKzc4LDYgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbml0LmMgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbml0LmMKaW5kZXggNzA3YmQwOS4uOTE1YmZhNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2luaXQuYwpAQCAtNTgsNyArNTgsNyBAQAogCWJvYXJkX3RpbWVyX3NldHVwID0gc2V0dXBfdGltZXJfaXJxOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3NldHVwKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXZyNDF4eF9jYWxjdWxhdGVfY2xvY2tfZnJlcXVlbmN5KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDJkODA2NTMuLmY3MGJkMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtODIyLDYgKzgyMiw3IEBACiAJCS8qIHRyeSBjYWxsaW5nIHRoZSBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IG1ldGhvZCAqLwogCQlpZiAoY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCAzLCAyLCAmcmV0LAogCQkJCSAgQUREUigiaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCIpLAorCQkJCSAgcm9vdCwKIAkJCQkgIEFERFIoaWJtX2FyY2hpdGVjdHVyZV92ZWMpKSA9PSAwKSB7CiAJCQkvKiB0aGUgY2FsbCBleGlzdHMuLi4gKi8KIAkJCWlmIChyZXQpCkBAIC0xNjIyLDYgKzE2MjMsMTUgQEAKIAkJCWlmIChzdHJzdHIocCwgUkVMT0MoIlBvd2VyIE1hY2ludG9zaCIpKSB8fAogCQkJICAgIHN0cnN0cihwLCBSRUxPQygiTWFjUklTQyIpKSkKIAkJCQlyZXR1cm4gUExBVEZPUk1fUE9XRVJNQUM7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCQkvKiBXZSBtdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBkZXRlY3QgdGhlIElCTSBDZWxsCisJCQkgKiBibGFkZXMgYXMgcFNlcmllcyBkdWUgdG8gc29tZSBmaXJtd2FyZSBpc3N1ZXMsCisJCQkgKiBzbyB3ZSBkbyBpdCBoZXJlLgorCQkJICovCisJCQlpZiAoc3Ryc3RyKHAsIFJFTE9DKCJJQk0sQ0JFQSIpKSB8fAorCQkJICAgIHN0cnN0cihwLCBSRUxPQygiSUJNLENQQlctMS4wIikpKQorCQkJCXJldHVybiBQTEFURk9STV9HRU5FUklDOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCQkJaSArPSBzbCArIDE7CiAJCX0KIAl9CkBAIC0yMDU3LDEwICsyMDY3LDQ1IEBACiAKIH0KIAotCi1zdGF0aWMgdm9pZCBfX2luaXQgZml4dXBfZGV2aWNlX3RyZWUodm9pZCkKKyNpZmRlZiBDT05GSUdfUFBDX01BUExFCisvKiBQSUJTIFZlcnNpb24gMS4wNS4wMDAwIDA0LzI2LzIwMDUgaGFzIGFuIGluY29ycmVjdCAvaHQvaXNhL3JhbmdlcyBwcm9wZXJ0eS4KKyAqIFRoZSB2YWx1ZXMgYXJlIGJhZCwgYW5kIGl0IGRvZXNuJ3QgZXZlbiBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgY2VsbHMuICovCitzdGF0aWMgdm9pZCBfX2luaXQgZml4dXBfZGV2aWNlX3RyZWVfbWFwbGUodm9pZCkKIHsKKwlwaGFuZGxlIGlzYTsKKwl1MzIgaXNhX3Jhbmdlc1s2XTsKKworCWlzYSA9IGNhbGxfcHJvbSgiZmluZGRldmljZSIsIDEsIDEsIEFERFIoIi9odEAwL2lzYUA0IikpOworCWlmICghUEhBTkRMRV9WQUxJRChpc2EpKQorCQlyZXR1cm47CisKKwlpZiAocHJvbV9nZXRwcm9wKGlzYSwgInJhbmdlcyIsIGlzYV9yYW5nZXMsIHNpemVvZihpc2FfcmFuZ2VzKSkKKwkJPT0gUFJPTV9FUlJPUikKKwkJcmV0dXJuOworCisJaWYgKGlzYV9yYW5nZXNbMF0gIT0gMHgxIHx8CisJCWlzYV9yYW5nZXNbMV0gIT0gMHhmNDAwMDAwMCB8fAorCQlpc2FfcmFuZ2VzWzJdICE9IDB4MDAwMTAwMDApCisJCXJldHVybjsKKworCXByb21fcHJpbnRmKCJmaXhpbmcgdXAgYm9ndXMgSVNBIHJhbmdlIG9uIE1hcGxlLi4uXG4iKTsKKworCWlzYV9yYW5nZXNbMF0gPSAweDE7CisJaXNhX3Jhbmdlc1sxXSA9IDB4MDsKKwlpc2FfcmFuZ2VzWzJdID0gMHgwMTAwMjAwMDsgLyogSU8gc3BhY2U7IFBDSSBkZXZpY2UgPSA0ICovCisJaXNhX3Jhbmdlc1szXSA9IDB4MDsKKwlpc2FfcmFuZ2VzWzRdID0gMHgwOworCWlzYV9yYW5nZXNbNV0gPSAweDAwMDEwMDAwOworCXByb21fc2V0cHJvcChpc2EsICIvaHRAMC9pc2FANCIsICJyYW5nZXMiLAorCQkJaXNhX3Jhbmdlcywgc2l6ZW9mKGlzYV9yYW5nZXMpKTsKK30KKyNlbHNlCisjZGVmaW5lIGZpeHVwX2RldmljZV90cmVlX21hcGxlKCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpICYmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKQorc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX2RldmljZV90cmVlX3BtYWModm9pZCkKK3sKIAlwaGFuZGxlIHUzLCBpMmMsIG1waWM7CiAJdTMyIHUzX3JldjsKIAl1MzIgaW50ZXJydXB0c1syXTsKQEAgLTIwOTcsOSArMjE0MiwxNiBAQAogCXBhcmVudCA9ICh1MzIpbXBpYzsKIAlwcm9tX3NldHByb3AoaTJjLCAiL3UzQDAsZjgwMDAwMDAvaTJjQGY4MDAxMDAwIiwgImludGVycnVwdC1wYXJlbnQiLAogCQkgICAgICZwYXJlbnQsIHNpemVvZihwYXJlbnQpKTsKLSNlbmRpZgogfQorI2Vsc2UKKyNkZWZpbmUgZml4dXBfZGV2aWNlX3RyZWVfcG1hYygpCisjZW5kaWYKIAorc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX2RldmljZV90cmVlKHZvaWQpCit7CisJZml4dXBfZGV2aWNlX3RyZWVfbWFwbGUoKTsKKwlmaXh1cF9kZXZpY2VfdHJlZV9wbWFjKCk7Cit9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9tX2ZpbmRfYm9vdF9jcHUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDAxZTNjMDguLjhmZGVjYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtODAzLDEwICs4MDMsMTMgQEAKIAkJaWYgKF9fZ2V0X3VzZXIoY21jcCwgJnVjcC0+dWNfcmVncykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJbWNwID0gKHN0cnVjdCBtY29udGV4dCBfX3VzZXIgKikodTY0KWNtY3A7CisJCS8qIG5vIG5lZWQgdG8gY2hlY2sgYWNjZXNzX29rKG1jcCksIHNpbmNlIG1jcCA8IDRHQiAqLwogCX0KICNlbHNlCiAJaWYgKF9fZ2V0X3VzZXIobWNwLCAmdWNwLT51Y19yZWdzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIG1jcCwgc2l6ZW9mKCptY3ApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAjZW5kaWYKIAlyZXN0b3JlX3NpZ21hc2soJnNldCk7CiAJaWYgKHJlc3RvcmVfdXNlcl9yZWdzKHJlZ3MsIG1jcCwgc2lnKSkKQEAgLTkwOCwxMyArOTExLDE0IEBACiB7CiAJc3RydWN0IHNpZ19kYmdfb3Agb3A7CiAJaW50IGk7CisJdW5zaWduZWQgY2hhciB0bXA7CiAJdW5zaWduZWQgbG9uZyBuZXdfbXNyID0gcmVncy0+bXNyOwogI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCiAJdW5zaWduZWQgbG9uZyBuZXdfZGJjcjAgPSBjdXJyZW50LT50aHJlYWQuZGJjcjA7CiAjZW5kaWYKIAogCWZvciAoaT0wOyBpPG5kYmc7IGkrKykgewotCQlpZiAoX19jb3B5X2Zyb21fdXNlcigmb3AsIGRiZywgc2l6ZW9mKG9wKSkpCisJCWlmIChjb3B5X2Zyb21fdXNlcigmb3AsIGRiZyArIGksIHNpemVvZihvcCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXN3aXRjaCAob3AuZGJnX3R5cGUpIHsKIAkJY2FzZSBTSUdfREJHX1NJTkdMRV9TVEVQUElORzoKQEAgLTk1OSw2ICs5NjMsMTEgQEAKIAljdXJyZW50LT50aHJlYWQuZGJjcjAgPSBuZXdfZGJjcjA7CiAjZW5kaWYKIAorCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBjdHgsIHNpemVvZigqY3R4KSkKKwkgICAgfHwgX19nZXRfdXNlcih0bXAsICh1OCBfX3VzZXIgKikgY3R4KQorCSAgICB8fCBfX2dldF91c2VyKHRtcCwgKHU4IF9fdXNlciAqKSAoY3R4ICsgMSkgLSAxKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAkvKgogCSAqIElmIHdlIGdldCBhIGZhdWx0IGNvcHlpbmcgdGhlIGNvbnRleHQgaW50byB0aGUga2VybmVsJ3MKIAkgKiBpbWFnZSBvZiB0aGUgdXNlcidzIHJlZ2lzdGVycywgd2UgY2FuJ3QganVzdCByZXR1cm4gLUVGQVVMVApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggMjdmNjViOS4uYzJkYjY0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCkBAIC0xODIsNiArMTgyLDggQEAKIAllcnIgfD0gX19nZXRfdXNlcihtc3IsICZzYy0+Z3BfcmVnc1tQVF9NU1JdKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOworCWlmICh2X3JlZ3MgJiYgIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdl9yZWdzLCAzNCAqIHNpemVvZih2ZWN0b3IxMjgpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJLyogQ29weSAzMyB2ZWMgcmVnaXN0ZXJzICh2cjAuLjMxIGFuZCB2c2NyKSBmcm9tIHRoZSBzdGFjayAqLwogCWlmICh2X3JlZ3MgIT0gMCAmJiAobXNyICYgTVNSX1ZFQykgIT0gMCkKIAkJZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoY3VycmVudC0+dGhyZWFkLnZyLCB2X3JlZ3MsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCmluZGV4IDMzNjU0ZDEuLjk5NDg1NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCkBAIC01Miw3ICs1Miw3IEBACiAJZGVmYXVsdDoKIAkJcGVuYyA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5wZW5jOwogCQl2YSAmPSB+KCgxdWwgPDwgbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0KSAtIDEpOwotCQl2YSB8PSAoMHg3ZiA+PiAoOCAtIHBlbmMpKSA8PCAxMjsKKwkJdmEgfD0gcGVuYyA8PCAxMjsKIAkJYXNtIHZvbGF0aWxlKCJ0bGJpZSAlMCwxIiA6IDogInIiICh2YSkgOiAibWVtb3J5Iik7CiAJCWJyZWFrOwogCX0KQEAgLTc0LDcgKzc0LDcgQEAKIAlkZWZhdWx0OgogCQlwZW5jID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnBlbmM7CiAJCXZhICY9IH4oKDF1bCA8PCBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQpIC0gMSk7Ci0JCXZhIHw9ICgweDdmID4+ICg4IC0gcGVuYykpIDw8IDEyOworCQl2YSB8PSBwZW5jIDw8IDEyOwogCQlhc20gdm9sYXRpbGUoIi5sb25nIDB4N2MwMDAyMjQgfCAoJTAgPDwgMTEpIHwgKDEgPDwgMjEpIgogCQkJICAgICA6IDogInIiKHZhKSA6ICJtZW1vcnkiKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCmluZGV4IDY1NzRiMjIuLmZkM2U1NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCkBAIC0xMjUsMTQgKzEyNSwxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjZWxsX3Byb2JlKHZvaWQpCiB7Ci0JLyogWFhYIFRoaXMgaXMgdGVtcG9yYXJ5LCB0aGUgQ2VsbCBtYWludGFpbmVyIHdpbGwgY29tZSB1cCB3aXRoCi0JICogbW9yZSBhcHByb3ByaWF0ZSBkZXRlY3Rpb24gbG9naWMKLQkgKi8KIAl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIklCTSxDUEJXLTEuMCIpKQotCQlyZXR1cm4gMDsKIAotCXJldHVybiAxOworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIklCTSxDQkVBIikgfHwKKwkgICAgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ1BCVy0xLjAiKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKaW5kZXggZGYyMzQzZS4uYzg5NmNlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMKQEAgLTExNTcsNiArMTE1Nyw3IEBACiAvKiBzb21lIHF1aXJrcyBmb3IgcGxhdGZvcm0gZnVuY3Rpb24gZGVjb2RpbmcgKi8KIGVudW0gewogCXBtYWNfaTJjX3F1aXJrX2ludm1hc2sgPSAweDAwMDAwMDAxdSwKKwlwbWFjX2kyY19xdWlya19za2lwID0gMHgwMDAwMDAwMnUsCiB9OwogCiBzdGF0aWMgdm9pZCBwbWFjX2kyY19kZXZzY2FuKHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGRldmljZV9ub2RlICpkZXYsCkBAIC0xMTcyLDYgKzExNzMsMTUgQEAKIAkJLyogWFhYIFN0dWR5IGRldmljZS10cmVlJ3MgJiBhcHBsZSBkcml2ZXJzIGFyZSBnZXQgdGhlIHF1aXJrcwogCQkgKiByaWdodCAhCiAJCSAqLworCQkvKiBXb3JrYXJvdW5kOiBJdCBzZWVtcyB0aGF0IHJ1bm5pbmcgdGhlIGNsb2Nrc3ByZWFkaW5nCisJCSAqIHByb3BlcnRpZXMgb24gdGhlIGVNYWMgd2lsbCBjYXVzZSBsb2NrdXBzIGR1cmluZyBib290LgorCQkgKiBUaGUgbWFjaGluZSBzZWVtcyB0byB3b3JrIGZpbmUgd2l0aG91dCB0aGF0LiBTbyBmb3Igbm93LAorCQkgKiBsZXQncyBtYWtlIHN1cmUgaTJjLWh3Y2xvY2sgZG9lc24ndCBtYXRjaCBhYm91dCAiaW1pYyIKKwkJICogY2xvY2tzIGFuZCB3ZSdsbCBmaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBuZWVkIHRvIGRvCisJCSAqIHNvbWV0aGluZyBzcGVjaWFsIGFib3V0IHRob3NlIGxhdGVyLgorCQkgKi8KKwkJeyAiaTJjLWh3Y2xvY2siLCAiaW1pYzUwMDIiLCBwbWFjX2kyY19xdWlya19za2lwIH0sCisJCXsgImkyYy1od2Nsb2NrIiwgImltaWM1MDAzIiwgcG1hY19pMmNfcXVpcmtfc2tpcCB9LAogCQl7ICJpMmMtaHdjbG9jayIsIE5VTEwsIHBtYWNfaTJjX3F1aXJrX2ludm1hc2sgfSwKIAkJeyAiaTJjLWNwdS12b2x0YWdlIiwgTlVMTCwgMH0sCiAJCXsgICJ0ZW1wLW1vbml0b3IiLCBOVUxMLCAwIH0sCkBAIC0xMTk4LDYgKzEyMDgsOCBAQAogCQkJCWlmIChwLT5jb21wYXRpYmxlICYmCiAJCQkJICAgICFkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgcC0+Y29tcGF0aWJsZSkpCiAJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwLT5xdWlya3MgJiBwbWFjX2kyY19xdWlya19za2lwKQorCQkJCQlicmVhazsKIAkJCQljYWxsYmFjayhucCwgcC0+cXVpcmtzKTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKaW5kZXggNGJhYTc1Yi4uZjA4MTczYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTU0Niw2ICs1NDcsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHBtZl9kZXZpY2VzKTsKIHN0YXRpYyBzcGlubG9ja190IHBtZl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIERFRklORV9NVVRFWChwbWZfaXJxX211dGV4KTsKIAogc3RhdGljIHZvaWQgcG1mX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKQogewpAQCAtODY0LDE1ICs4NjYsMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwbWZfbG9jaywgZmxhZ3MpOwogCWZ1bmMgPSBfX3BtZl9maW5kX2Z1bmN0aW9uKHRhcmdldCwgbmFtZSwgUE1GX0ZMQUdTX0lOVF9HRU4pOwotCWlmIChmdW5jID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwlpZiAoZnVuYykKKwkJZnVuYyA9IHBtZl9nZXRfZnVuY3Rpb24oZnVuYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwlpZiAoZnVuYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJbXV0ZXhfbG9jaygmcG1mX2lycV9tdXRleCk7CiAJaWYgKGxpc3RfZW1wdHkoJmZ1bmMtPmlycV9jbGllbnRzKSkKIAkJZnVuYy0+ZGV2LT5oYW5kbGVycy0+aXJxX2VuYWJsZShmdW5jKTsKIAlsaXN0X2FkZCgmY2xpZW50LT5saW5rLCAmZnVuYy0+aXJxX2NsaWVudHMpOwogCWNsaWVudC0+ZnVuYyA9IGZ1bmM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1mX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnBtZl9pcnFfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODEsMTYgKzg4NSwxNiBAQAogdm9pZCBwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KHN0cnVjdCBwbWZfaXJxX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBwbWZfZnVuY3Rpb24gKmZ1bmMgPSBjbGllbnQtPmZ1bmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUJVR19PTihmdW5jID09IE5VTEwpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtZl9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcG1mX2lycV9tdXRleCk7CiAJY2xpZW50LT5mdW5jID0gTlVMTDsKIAlsaXN0X2RlbCgmY2xpZW50LT5saW5rKTsKIAlpZiAobGlzdF9lbXB0eSgmZnVuYy0+aXJxX2NsaWVudHMpKQogCQlmdW5jLT5kZXYtPmhhbmRsZXJzLT5pcnFfZGlzYWJsZShmdW5jKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWZfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcG1mX2lycV9tdXRleCk7CisJcG1mX3B1dF9mdW5jdGlvbihmdW5jKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggNGQxNWUzOS4uYjkyMDBmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtNDYzLDExICs0NjMsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwbWFjX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAxOworCS8qIGNhbid0IGRvIGFueSBvdGhlciBzdGF0ZXMgdmlhIGdlbmVyaWMgbWVjaGFuaXNtIHlldCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBwbV9vcHMgcG1hY19wbV9vcHMgPSB7CiAJLnBtX2Rpc2tfbW9kZQk9IFBNX0RJU0tfU0hVVERPV04sCiAJLnByZXBhcmUJPSBwbWFjX3BtX3ByZXBhcmUsCiAJLmVudGVyCQk9IHBtYWNfcG1fZW50ZXIsCiAJLmZpbmlzaAkJPSBwbWFjX3BtX2ZpbmlzaCwKKwkudmFsaWQJCT0gcG1hY19wbV92YWxpZCwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfU09GVFdBUkVfU1VTUEVORCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwppbmRleCA1Zjc5ZjAxLi4zYmE4NzgzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwpAQCAtMzg5LDYgKzM4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBTZXJpZXNfcHJvYmUodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CiAgCWNoYXIgKmR0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChvZl9nZXRfZmxhdF9kdF9yb290KCksCiAgCQkJCQkgICJkZXZpY2VfdHlwZSIsIE5VTEwpOwogIAlpZiAoZHR5cGUgPT0gTlVMTCkKQEAgLTM5Niw2ICszOTcsMTMgQEAKICAJaWYgKHN0cmNtcChkdHlwZSwgImNocnAiKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBDZWxsIGJsYWRlcyBmaXJtd2FyZSBjbGFpbXMgdG8gYmUgY2hycCB3aGlsZSBpdCdzIG5vdC4gVW50aWwgdGhpcworCSAqIGlzIGZpeGVkLCB3ZSBuZWVkIHRvIGF2b2lkIHRob3NlIGhlcmUuCisJICovCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiSUJNLENQQlctMS4wIikgfHwKKwkgICAgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ0JFQSIpKQorCQlyZXR1cm4gMDsKKwogCURCRygicFNlcmllcyBkZXRlY3RlZCwgbG9va2luZyBmb3IgTFBBUiBjYXBhYmlsaXR5Li4uXG4iKTsKIAogCS8qIE5vdyB0cnkgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcnVubmluZyBvbiBMUEFSICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGNjN2M0YWUuLjJmNWM1ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlERUZJTkUoVElfVEFTSywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0YXNrKSk7CiAJREVGSU5FKFRJX0VYRUNET01BSU4sIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZXhlY19kb21haW4pKTsKIAlERUZJTkUoVElfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKTsKLQlERUZJTkUoVElfTE9DQUxfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKTsKKwlERUZJTkUoVElfTE9DQUxfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgbG9jYWxfZmxhZ3MpKTsKIAlERUZJTkUoVElfQ1BVLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGNwdSkpOwogCURFRklORShUSV9QUkVFTVBULCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4MjcyYWRzX3NldHVwLmMKaW5kZXggZTYyYjc1Ny4uYWJiNzE1NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODI3MmFkc19zZXR1cC5jCkBAIC0yNzksMTEgKzI3OSwxMSBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fbm90aWZ5X2Rldl9tYXAgZGV2X21hcFtdID0gewogCQl7CiAJCQkuYnVzX2lkID0gImZzbC1jcG0tZmNjIiwKLQkJCS5ydG4gPSBtcGM4MjcyYWRzX2ZpeHVwX2VuZXRfcGRhdGEKKwkJCS5ydG4gPSBtcGM4MjcyYWRzX2ZpeHVwX2VuZXRfcGRhdGEsCiAJCX0sCiAJCXsKIAkJCS5idXNfaWQgPSAiZnNsLWNwbS1zY2M6dWFydCIsCi0JCQkucnRuID0gbXBjCisJCQkucnRuID0gbXBjODI3MmFkc19maXh1cF91YXJ0X3BkYXRhLAogCQl9LAogCQl7CiAJCQkuYnVzX2lkID0gTlVMTApAQCAtMzM1LDE1ICszMzUsMTUgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBwZGV2ID0gTlVMTDsKIAlpZihpbmRleCkgeyAvKmFzc3VtZSBTQ0M0IGhlcmUqLwogCQlwZGV2ID0gJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEM4Mnh4X0NQTV9TQ0M0XTsKLQkJcGluZm8gPSAmbXBjODI3MjxGMTI+X3VhcnRfcGRhdGFbMV07CisJCXBpbmZvID0gJm1wYzgyNzJfdWFydF9wZGF0YVtmc2lkX3NjYzRfdWFydF07CiAJfSBlbHNlIHsgLypvdmVyIFNDQzEqLwogCQlwZGV2ID0gJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tNUEM4Mnh4X0NQTV9TQ0MxXTsKLQkJcGluZm8gPSAmbXBjODI3Ml91YXJ0X3BkYXRhWzBdOworCQlwaW5mbyA9ICZtcGM4MjcyX3VhcnRfcGRhdGFbZnNpZF9zY2MxX3VhcnRdOwogCX0KIAogCXBpbmZvLT51YXJ0X2NsayA9IGJkLT5iaV9pbnRmcmVxOwogCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGluZm87Ci0JcHBjX3N5c19maXh1cF9tZW1fcmVzb3VyY2UocGRldiwgSU1BUF9BRERSKTsKKwlwcGNfc3lzX2ZpeHVwX21lbV9yZXNvdXJjZShwZGV2LCBDUE1fTUFQX0FERFIpOwogCXJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCmluZGV4IDA2MzZhZWQuLjg2OTJkMDBjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYwpAQCAtMTIxLDEzICsxMjEsMTMgQEAKIAkJLm51bV9yZXNvdXJjZXMJID0gMywKIAkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CiAJCQl7Ci0JCQkJLm5hbWUJPSAic2NjX21lbSIsCisJCQkJLm5hbWUJPSAicmVncyIsCiAJCQkJLnN0YXJ0CT0gMHgxMUEwMCwKIAkJCQkuZW5kCT0gMHgxMUExRiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7Ci0JCQkJLm5hbWUJPSAic2NjX3ByYW0iLAorCQkJCS5uYW1lCT0gInByYW0iLAogCQkJCS5zdGFydAk9IDB4ODAwMCwKIAkJCQkuZW5kCT0gMHg4MGZmLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLApAQCAtMTQ1LDEzICsxNDUsMTMgQEAKIAkJLm51bV9yZXNvdXJjZXMJID0gMywKIAkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CiAJCQl7Ci0JCQkJLm5hbWUJPSAic2NjX21lbSIsCisJCQkJLm5hbWUJPSAicmVncyIsCiAJCQkJLnN0YXJ0CT0gMHgxMUEyMCwKIAkJCQkuZW5kCT0gMHgxMUEzRiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7Ci0JCQkJLm5hbWUJPSAic2NjX3ByYW0iLAorCQkJCS5uYW1lCT0gInByYW0iLAogCQkJCS5zdGFydAk9IDB4ODEwMCwKIAkJCQkuZW5kCT0gMHg4MWZmLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLApAQCAtMTY5LDEzICsxNjksMTMgQEAKIAkJLm51bV9yZXNvdXJjZXMJID0gMywKIAkJLnJlc291cmNlID0gKHN0cnVjdCByZXNvdXJjZVtdKSB7CiAJCQl7Ci0JCQkJLm5hbWUgCT0gInNjY19tZW0iLAorCQkJCS5uYW1lIAk9ICJyZWdzIiwKIAkJCQkuc3RhcnQJPSAweDExQTQwLAogCQkJCS5lbmQJPSAweDExQTVGLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKLQkJCQkubmFtZQk9ICJzY2NfcHJhbSIsCisJCQkJLm5hbWUJPSAicHJhbSIsCiAJCQkJLnN0YXJ0CT0gMHg4MjAwLAogCQkJCS5lbmQJPSAweDgyZmYsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCkBAIC0xOTMsMTMgKzE5MywxMyBAQAogCQkubnVtX3Jlc291cmNlcwkgPSAzLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKLQkJCQkubmFtZQk9ICJzY2NfbWVtIiwKKwkJCQkubmFtZQk9ICJyZWdzIiwKIAkJCQkuc3RhcnQJPSAweDExQTYwLAogCQkJCS5lbmQJPSAweDExQTdGLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKLQkJCQkubmFtZQk9ICJzY2NfcHJhbSIsCisJCQkJLm5hbWUJPSAicHJhbSIsCiAJCQkJLnN0YXJ0CT0gMHg4MzAwLAogCQkJCS5lbmQJPSAweDgzZmYsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jIGIvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYwppbmRleCA0MzNiMGZhLi5mZWU4OTQ4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfc3lzLmMKQEAgLTEzOSwxMyArMTM5LDEzIEBACiAJCS5wcGNfc3lzX25hbWUJPSAiODI3MiIsCiAJCS5tYXNrCQk9IDB4MDAwMGZmMDAsCiAJCS52YWx1ZQkJPSAweDAwMDAwYzAwLAotCQkubnVtX2RldmljZXMJPSAxMSwKKwkJLm51bV9kZXZpY2VzCT0gMTIsCiAJCS5kZXZpY2VfbGlzdCA9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQogCQl7CiAJCQlNUEM4Mnh4X0NQTV9GQ0MxLCBNUEM4Mnh4X0NQTV9GQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MxLAotCQkJTVBDODJ4eF9DUE1fU0NDMiwgTVBDODJ4eF9DUE1fU0NDMywgTVBDODJ4eF9DUE1fU01DMSwKLQkJCU1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwgTVBDODJ4eF9DUE1fSTJDLAotCQkJTVBDODJ4eF9DUE1fVVNCLCBNUEM4Mnh4X1NFQzEsCisJCQlNUEM4Mnh4X0NQTV9TQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MzLCBNUEM4Mnh4X0NQTV9TQ0M0LAorCQkJTVBDODJ4eF9DUE1fU01DMSwgTVBDODJ4eF9DUE1fU01DMiwgTVBDODJ4eF9DUE1fU1BJLAorCQkJTVBDODJ4eF9DUE1fSTJDLCBNUEM4Mnh4X0NQTV9VU0IsIE1QQzgyeHhfU0VDMSwKIAkJfSwKIAl9LAogCS8qIGJlbG93IGlzIGEgbGlzdCBvZiB0aGUgODI4MCBmYW1pbHkgb2YgcHJvY2Vzc29ycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCBjZTE5YWQ0Li4yYTZjNmVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJbmV4dCA9IG5leHRfdGltZXJfaW50ZXJydXB0KCk7CiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkJdGltZXIgPSAoX191NjQgbmV4dCkgLSAoX191NjQgamlmZmllcykgKyBqaWZmaWVzXzY0OworCQl0aW1lciA9ICgoX191NjQpIG5leHQpIC0gKChfX3U2NCkgamlmZmllcykgKyBqaWZmaWVzXzY0OwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwogCXRvZHZhbCA9IC0xVUxMOwogCS8qIEJlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3dzLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYwppbmRleCBhOTNmNWRhLi40MGI0MmM4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYwpAQCAtNjksNiArNjksMTcgQEAKIAkJCQkJCSAgICAgImNsb2NrLWZyZXF1ZW5jeSIsIDApOwogCWNwdV9kYXRhKGlkKS5wcm9tX25vZGUgPSBjcHVfbm9kZTsKIAljcHVfZGF0YShpZCkubWlkID0gY3B1X2dldF9od21pZChjcHVfbm9kZSk7CisKKwkvKiB0aGlzIGlzIHJlcXVpcmVkIHRvIHR1bmUgdGhlIHNjaGVkdWxlciBjb3JyZWN0bHkgKi8KKwkvKiBpcyBpdCBwb3NzaWJsZSB0byBoYXZlIENQVXMgd2l0aCBkaWZmZXJlbnQgY2FjaGUgc2l6ZXM/ICovCisJaWYgKGlkID09IGJvb3RfY3B1X2lkKSB7CisJCWludCBjYWNoZV9saW5lLGNhY2hlX25saW5lczsKKwkJY2FjaGVfbGluZSA9IDB4MjA7CisJCWNhY2hlX2xpbmUgPSBwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJlY2FjaGUtbGluZS1zaXplIiwgY2FjaGVfbGluZSk7CisJCWNhY2hlX25saW5lcyA9IDB4ODAwMDsKKwkJY2FjaGVfbmxpbmVzID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiZWNhY2hlLW5saW5lcyIsIGNhY2hlX25saW5lcyk7CisJCW1heF9jYWNoZV9zaXplID0gY2FjaGVfbGluZSAqIGNhY2hlX25saW5lczsKKwl9CiAJaWYgKGNwdV9kYXRhKGlkKS5taWQgPCAwKQogCQlwYW5pYygiTm8gTUlEIGZvdW5kIGZvciBDUFUlZCBhdCBub2RlIDB4JTA4ZCIsIGlkLCBjcHVfbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCmluZGV4IDNlYWRhYzUuLjMxYzU4OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KICNpbmNsdWRlIDxhc20vcHN0YXRlLmg+CkBAIC00OTMsNiArNDk0LDM1IEBACiAJY2FsbAlwcm9tX2luaXQKIAkgbW92CSVsNywgJW8wCQkJISBPcGVuUFJPTSBjaWYgaGFuZGxlcgogCisJLyogSW5pdGlhbGl6ZSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSBhcyBlYXJseSBhcyBwb3NzaWJsZS4KKwkgKiBJbiBvcmRlciB0byBkbyB0aGF0IGFjY3VyYXRlbHkgd2UgaGF2ZSB0byBwYXRjaCB1cCB0aGUgZ2V0X2NwdWlkKCkKKwkgKiBhc3NlbWJsZXIgc2VxdWVuY2VzLiAgQW5kIHRoYXQsIGluIHR1cm4sIHJlcXVpcmVzIHRoYXQgd2Uga25vdworCSAqIGlmIHdlIGFyZSBvbiBhIFN0YXJmaXJlIGJveCBvciBub3QuICBXaGlsZSB3ZSdyZSBoZXJlLCBwYXRjaCB1cAorCSAqIHRoZSBzdW40diBzZXF1ZW5jZXMgYXMgd2VsbC4KKwkgKi8KKwljYWxsCWNoZWNrX2lmX3N0YXJmaXJlCisJIG5vcAorCWNhbGwJcGVyX2NwdV9wYXRjaAorCSBub3AKKwljYWxsCXN1bjR2X3BhdGNoCisJIG5vcAorCisjaWZkZWYgQ09ORklHX1NNUAorCWNhbGwJaGFyZF9zbXBfcHJvY2Vzc29yX2lkCisJIG5vcAorCWNtcAklbzAsIE5SX0NQVVMKKwlibHUscHQJJXhjYywgMWYKKwkgbm9wCisJY2FsbAlib290X2NwdV9pZF90b29fbGFyZ2UKKwkgbm9wCisJLyogTm90IHJlYWNoZWQuLi4gKi8KKworMToKKyNlbHNlCisJbW92CTAsICVvMAorI2VuZGlmCisJc3RiCSVvMCwgWyVnNiArIFRJX0NQVV0KKwogCS8qIE9mZiB3ZSBnby4uLi4gKi8KIAljYWxsCXN0YXJ0X2tlcm5lbAogCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCmluZGV4IDJiN2ExZjMuLjBjMDg5NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtNTk5LDE4ICs1OTksMTI4IEBACiAKIC8qIFNVTjRWIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc29ycy4gKi8KIAotc3RhdGljIGlubGluZSBpbnQgcGNpX3N1bjR2X291dF9vZl9yYW5nZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQorc3RydWN0IHBkZXZfZW50cnkgeworCXN0cnVjdCBwZGV2X2VudHJ5CSpuZXh0OworCXUzMgkJCWRldmhhbmRsZTsKKwl1bnNpZ25lZCBpbnQJCWJ1czsKKwl1bnNpZ25lZCBpbnQJCWRldmljZTsKKwl1bnNpZ25lZCBpbnQJCWZ1bmM7Cit9OworCisjZGVmaW5lIFBERVZfSFRBQl9TSVpFCTE2CisjZGVmaW5lIFBERVZfSFRBQl9NQVNLCShQREVWX0hUQUJfU0laRSAtIDEpCitzdGF0aWMgc3RydWN0IHBkZXZfZW50cnkgKnBkZXZfaHRhYltQREVWX0hUQUJfU0laRV07CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBkZXZfaGFzaGZuKHUzMiBkZXZoYW5kbGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQogewotCWlmIChidXMgPT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pIHsKLQkJaWYgKGRldmljZSA9PSAwICYmIGZ1bmMgPT0gMCkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gMTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gKGRldmhhbmRsZSBeIChkZXZoYW5kbGUgPj4gNCkpOworCXZhbCBePSBidXM7CisJdmFsIF49IGRldmljZTsKKwl2YWwgXj0gZnVuYzsKKworCXJldHVybiB2YWwgJiBQREVWX0hUQUJfTUFTSzsKK30KKworc3RhdGljIGludCBwZGV2X2h0YWJfYWRkKHUzMiBkZXZoYW5kbGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQoreworCXN0cnVjdCBwZGV2X2VudHJ5ICpwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqKnNsb3Q7CisKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJc2xvdCA9ICZwZGV2X2h0YWJbcGRldl9oYXNoZm4oZGV2aGFuZGxlLCBidXMsIGRldmljZSwgZnVuYyldOworCXAtPm5leHQgPSAqc2xvdDsKKwkqc2xvdCA9IHA7CisKKwlwLT5kZXZoYW5kbGUgPSBkZXZoYW5kbGU7CisJcC0+YnVzID0gYnVzOworCXAtPmRldmljZSA9IGRldmljZTsKKwlwLT5mdW5jID0gZnVuYzsKKworCXJldHVybiAwOworfQorCisvKiBSZWN1cnNpdmVseSBkZXNjZW5kIGludG8gdGhlIE9CUCBkZXZpY2UgdHJlZSwgcm9vdGVkIGF0IHRvcGxldmVsX25vZGUsCisgKiBsb29raW5nIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYnVzIGFuZCBkZXZmbi4KKyAqLworc3RhdGljIGludCBvYnBfZmluZChzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmVnaXN0ZXJzICpwcmVncywgaW50IHRvcGxldmVsX25vZGUsIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbikKK3sKKwl0b3BsZXZlbF9ub2RlID0gcHJvbV9nZXRjaGlsZCh0b3BsZXZlbF9ub2RlKTsKKworCXdoaWxlICh0b3BsZXZlbF9ub2RlICE9IDApIHsKKwkJaW50IHJldCA9IG9icF9maW5kKHByZWdzLCB0b3BsZXZlbF9ub2RlLCBidXMsIGRldmZuKTsKKworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHByb21fZ2V0cHJvcGVydHkodG9wbGV2ZWxfbm9kZSwgInJlZyIsIChjaGFyICopIHByZWdzLAorCQkJCSAgICAgICBzaXplb2YoKnByZWdzKSAqIFBST01SRUdfTUFYKTsKKwkJaWYgKHJldCA9PSAwIHx8IHJldCA9PSAtMSkKKwkJCWdvdG8gbmV4dF9zaWJsaW5nOworCisJCWlmICgoKHByZWdzWzBdLnBoeXNfaGkgPj4gMTYpICYgMHhmZikgPT0gYnVzICYmCisJCSAgICAoKHByZWdzWzBdLnBoeXNfaGkgPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKKwkJCWJyZWFrOworCisJbmV4dF9zaWJsaW5nOgorCQl0b3BsZXZlbF9ub2RlID0gcHJvbV9nZXRzaWJsaW5nKHRvcGxldmVsX25vZGUpOwogCX0KIAorCXJldHVybiB0b3BsZXZlbF9ub2RlOworfQorCitzdGF0aWMgaW50IHBkZXZfaHRhYl9wb3B1bGF0ZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCit7CisJc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyBwcltQUk9NUkVHX01BWF07CisJdTMyIGRldmhhbmRsZSA9IHBibS0+ZGV2aGFuZGxlOworCXVuc2lnbmVkIGludCBidXM7CisKKwlmb3IgKGJ1cyA9IHBibS0+cGNpX2ZpcnN0X2J1c25vOyBidXMgPD0gcGJtLT5wY2lfbGFzdF9idXNubzsgYnVzKyspIHsKKwkJdW5zaWduZWQgaW50IGRldmZuOworCisJCWZvciAoZGV2Zm4gPSAwOyBkZXZmbiA8IDI1NjsgZGV2Zm4rKykgeworCQkJdW5zaWduZWQgaW50IGRldmljZSA9IFBDSV9TTE9UKGRldmZuKTsKKwkJCXVuc2lnbmVkIGludCBmdW5jID0gUENJX0ZVTkMoZGV2Zm4pOworCisJCQlpZiAob2JwX2ZpbmQocHIsIHBibS0+cHJvbV9ub2RlLCBidXMsIGRldmZuKSkgeworCQkJCWludCBlcnIgPSBwZGV2X2h0YWJfYWRkKGRldmhhbmRsZSwgYnVzLAorCQkJCQkJCWRldmljZSwgZnVuYyk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBkZXZfZW50cnkgKnBkZXZfZmluZCh1MzIgZGV2aGFuZGxlLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCB1bnNpZ25lZCBpbnQgZnVuYykKK3sKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcDsKKworCXAgPSBwZGV2X2h0YWJbcGRldl9oYXNoZm4oZGV2aGFuZGxlLCBidXMsIGRldmljZSwgZnVuYyldOworCXdoaWxlIChwKSB7CisJCWlmIChwLT5kZXZoYW5kbGUgPT0gZGV2aGFuZGxlICYmCisJCSAgICBwLT5idXMgPT0gYnVzICYmCisJCSAgICBwLT5kZXZpY2UgPT0gZGV2aWNlICYmCisJCSAgICBwLT5mdW5jID09IGZ1bmMpCisJCQlicmVhazsKKworCQlwID0gcC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGNpX3N1bjR2X291dF9vZl9yYW5nZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQorewogCWlmIChidXMgPCBwYm0tPnBjaV9maXJzdF9idXNubyB8fAogCSAgICBidXMgPiBwYm0tPnBjaV9sYXN0X2J1c25vKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGRldl9maW5kKHBibS0+ZGV2aGFuZGxlLCBidXMsIGRldmljZSwgZnVuYykgPT0gTlVMTDsKIH0KIAogc3RhdGljIGludCBwY2lfc3VuNHZfcmVhZF9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCkBAIC0xMDYzLDYgKzExNzMsOCBAQAogCiAJcGNpX3N1bjR2X2dldF9idXNfcmFuZ2UocGJtKTsKIAlwY2lfc3VuNHZfaW9tbXVfaW5pdChwYm0pOworCisJcGRldl9odGFiX3BvcHVsYXRlKHBibSk7CiB9CiAKIHZvaWQgc3VuNHZfcGNpX2luaXQoaW50IG5vZGUsIGNoYXIgKm1vZGVsX25hbWUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKaW5kZXggMDA1MTY3Zi4uOWNmMWM4OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVncyA9IHsgeyAwLCB9LCAwLCAwLCAwLCAwIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwZXJfY3B1X3BhdGNoKHZvaWQpCit2b2lkIF9faW5pdCBwZXJfY3B1X3BhdGNoKHZvaWQpCiB7CiAJc3RydWN0IGNwdWlkX3BhdGNoX2VudHJ5ICpwOwogCXVuc2lnbmVkIGxvbmcgdmVyOwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc3VuNHZfcGF0Y2godm9pZCkKK3ZvaWQgX19pbml0IHN1bjR2X3BhdGNoKHZvaWQpCiB7CiAJc3RydWN0IHN1bjR2XzFpbnNuX3BhdGNoX2VudHJ5ICpwMTsKIAlzdHJ1Y3Qgc3VuNHZfMmluc25fcGF0Y2hfZW50cnkgKnAyOwpAQCAtMzE1LDYgKzMxNSwxNSBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgX19pbml0IGJvb3RfY3B1X2lkX3Rvb19sYXJnZShpbnQgY3B1KQoreworCXByb21fcHJpbnRmKCJTZXJpb3VzIHByb2JsZW0sIGJvb3QgY3B1IGlkICglZCkgPj0gTlJfQ1BVUyAoJWQpXG4iLAorCQkgICAgY3B1LCBOUl9DUFVTKTsKKwlwcm9tX2hhbHQoKTsKK30KKyNlbmRpZgorCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogSW5pdGlhbGl6ZSBQUk9NIGNvbnNvbGUgYW5kIGNvbW1hbmQgbGluZS4gKi8KQEAgLTMzMiwxNiArMzQxLDYgQEAKIAljb25zd2l0Y2hwID0gJnByb21fY29uOwogI2VuZGlmCiAKLQkvKiBXb3JrIG91dCBpZiB3ZSBhcmUgc3RhcmZpcmUgZWFybHkgb24gKi8KLQljaGVja19pZl9zdGFyZmlyZSgpOwotCi0JLyogTm93IHdlIGtub3cgZW5vdWdoIHRvIHBhdGNoIHRoZSBnZXRfY3B1aWQgc2VxdWVuY2VzCi0JICogdXNlZCBieSB0cmFwIGNvZGUuCi0JICovCi0JcGVyX2NwdV9wYXRjaCgpOwotCi0Jc3VuNHZfcGF0Y2goKTsKLQogCWJvb3RfZmxhZ3NfaW5pdCgqY21kbGluZV9wKTsKIAogCWlkcHJvbV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCA5MGVhY2EzLi5mMDNkNTJkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKQEAgLTEyNjQsNyArMTI2NCw2IEBACiAJYm9vdF9jcHVfaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIAljdXJyZW50X3RpY2tfb2Zmc2V0ID0gdGltZXJfdGlja19vZmZzZXQ7CiAKLQljcHVfc2V0KGJvb3RfY3B1X2lkLCBjcHVfb25saW5lX21hcCk7CiAJcHJvZl9jb3VudGVyKGJvb3RfY3B1X2lkKSA9IHByb2ZfbXVsdGlwbGllcihib290X2NwdV9pZCkgPSAxOwogfQogCkBAIC0xMjg4LDYgKzEyODcsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHNtcF90dW5lX3NjaGVkdWxpbmcodm9pZCkKK3sKKwlpbnQgaW5zdGFuY2UsIG5vZGU7CisJdW5zaWduZWQgaW50IGRlZiwgc21hbGxlc3QgPSB+MFU7CisKKwlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KKwkgICAgICAgKDMgKiAxMDI0ICogMTAyNCkgOgorCSAgICAgICAoNCAqIDEwMjQgKiAxMDI0KSk7CisKKwlpbnN0YW5jZSA9IDA7CisJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShpbnN0YW5jZSwgJm5vZGUsIE5VTEwpKSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisKKwkJdmFsID0gcHJvbV9nZXRpbnRkZWZhdWx0KG5vZGUsICJlY2FjaGUtc2l6ZSIsIGRlZik7CisJCWlmICh2YWwgPCBzbWFsbGVzdCkKKwkJCXNtYWxsZXN0ID0gdmFsOworCisJCWluc3RhbmNlKys7CisJfQorCisJLyogQW55IHZhbHVlIGxlc3MgdGhhbiAyNTZLIGlzIG5vbnNlbnNlLiAgKi8KKwlpZiAoc21hbGxlc3QgPCAoMjU2VSAqIDEwMjRVKSkKKwkJc21hbGxlc3QgPSAyNTYgKiAxMDI0OworCisJbWF4X2NhY2hlX3NpemUgPSBzbWFsbGVzdDsKKworCWlmIChzbWFsbGVzdCA8IDFVICogMTAyNFUgKiAxMDI0VSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbWF4X2NhY2hlX3NpemUgb2YgJXVLQlxuIiwKKwkJICAgICAgIHNtYWxsZXN0IC8gMTAyNFUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbWF4X2NhY2hlX3NpemUgb2YgJXVNQlxuIiwKKwkJICAgICAgIHNtYWxsZXN0IC8gMTAyNFUgLyAxMDI0VSk7Cit9CisKIC8qIENvbnN0cmFpbiB0aGUgbnVtYmVyIG9mIGNwdXMgdG8gbWF4X2NwdXMuICAqLwogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CkBAIC0xMzIzLDYgKzEzNTYsNyBAQAogCX0KIAogCXNtcF9zdG9yZV9jcHVfaW5mbyhib290X2NwdV9pZCk7CisJc21wX3R1bmVfc2NoZWR1bGluZygpOwogfQogCiAvKiBTZXQgdGhpcyB1cCBlYXJseSBzbyB0aGF0IHRoaW5ncyBsaWtlIHRoZSBzY2hlZHVsZXIgY2FuIGluaXQKQEAgLTEzNDUsMTggKzEzNzksNiBAQAogCiB2b2lkIF9fZGV2aW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQogewotCWludCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChjcHUgPj0gTlJfQ1BVUykgewotCQlwcm9tX3ByaW50ZigiU2VyaW91cyBwcm9ibGVtLCBib290IGNwdSBpZCA+PSBOUl9DUFVTXG4iKTsKLQkJcHJvbV9oYWx0KCk7Ci0JfQotCi0JY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBjcHU7Ci0JX19sb2NhbF9wZXJfY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXQoY3B1KTsKLQotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKIH0KIAogaW50IF9fZGV2aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQpAQCAtMTQzMyw0ICsxNDU1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyssIHB0ciArPSBzaXplKQogCQltZW1jcHkocHRyLCBfX3Blcl9jcHVfc3RhcnQsIF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQpOworCisJLyogU2V0dXAgJWc1IGZvciB0aGUgYm9vdCBjcHUuICAqLworCV9fbG9jYWxfcGVyX2NwdV9vZmZzZXQgPSBfX3Blcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NwYXJjNjRfa3N5bXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCmluZGV4IDYyZDhhOTkuLjM4ZTU2OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jCkBAIC0yOTcsNyArMjk3LDYgQEAKIEVYUE9SVF9TWU1CT0woc3ZyNF9zZXRjb250ZXh0KTsKIEVYUE9SVF9TWU1CT0woY29tcGF0X3N5c19pb2N0bCk7CiBFWFBPUlRfU1lNQk9MKHNwYXJjMzJfb3Blbik7Ci1FWFBPUlRfU1lNQk9MKHN5c19jbG9zZSk7CiAjZW5kaWYKIAogLyogU3BlY2lhbCBpbnRlcm5hbCB2ZXJzaW9ucyBvZiBsaWJyYXJ5IGZ1bmN0aW9ucy4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwppbmRleCAyNzkzYTVkLi41NjNkYjUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCkBAIC0xNzk3LDcgKzE3OTcsOSBAQAogCX07CiB9CiAKLXN0YXRpYyB2b2lkIHN1bjR2X2xvZ19lcnJvcihzdHJ1Y3Qgc3VuNHZfZXJyb3JfZW50cnkgKmVudCwgaW50IGNwdSwgY29uc3QgY2hhciAqcGZ4LCBhdG9taWNfdCAqb2NudCkKK2V4dGVybiB2b2lkIF9fc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CisKK3N0YXRpYyB2b2lkIHN1bjR2X2xvZ19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGludCBjcHUsIGNvbnN0IGNoYXIgKnBmeCwgYXRvbWljX3QgKm9jbnQpCiB7CiAJaW50IGNudDsKIApAQCAtMTgzMCw2ICsxODMyLDggQEAKIAkgICAgICAgcGZ4LAogCSAgICAgICBlbnQtPmVycl9yYWRkciwgZW50LT5lcnJfc2l6ZSwgZW50LT5lcnJfY3B1KTsKIAorCV9fc2hvd19yZWdzKHJlZ3MpOworCiAJaWYgKChjbnQgPSBhdG9taWNfcmVhZChvY250KSkgIT0gMCkgewogCQlhdG9taWNfc2V0KG9jbnQsIDApOwogCQl3bWIoKTsKQEAgLTE4NjIsNyArMTg2Niw3IEBACiAKIAlwdXRfY3B1KCk7CiAKLQlzdW40dl9sb2dfZXJyb3IoJmxvY2FsX2NvcHksIGNwdSwKKwlzdW40dl9sb2dfZXJyb3IocmVncywgJmxvY2FsX2NvcHksIGNwdSwKIAkJCUtFUk5fRVJSICJSRVNVTUFCTEUgRVJST1IiLAogCQkJJnN1bjR2X3Jlc3VtX29mbG93X2NudCk7CiB9CkBAIC0xOTEwLDcgKzE5MTQsNyBAQAogCX0KICNlbmRpZgogCi0Jc3VuNHZfbG9nX2Vycm9yKCZsb2NhbF9jb3B5LCBjcHUsCisJc3VuNHZfbG9nX2Vycm9yKHJlZ3MsICZsb2NhbF9jb3B5LCBjcHUsCiAJCQlLRVJOX0VNRVJHICJOT04tUkVTVU1BQkxFIEVSUk9SIiwKIAkJCSZzdW40dl9ub25yZXN1bV9vZmxvd19jbnQpOwogCkBAIC0yMjAwLDcgKzIyMDQsNiBAQAogdm9pZCBkaWVfaWZfa2VybmVsKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RhdGljIGludCBkaWVfY291bnRlcjsKLQlleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogCWV4dGVybiB2b2lkIHNtcF9yZXBvcnRfcmVncyh2b2lkKTsKIAlpbnQgY291bnQgPSAwOwogCQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9jaGVja3N1bS5TIGIvYXJjaC9zcGFyYzY0L2xpYi9jaGVja3N1bS5TCmluZGV4IGJhOWNkM2MuLjFkMjMwZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvY2hlY2tzdW0uUworKysgYi9hcmNoL3NwYXJjNjQvbGliL2NoZWNrc3VtLlMKQEAgLTE2NSw4ICsxNjUsOSBAQAogCXNsbAkJJWcxLCA4LCAlZzEKIAlvcgkJJW81LCAlZzEsICVvNAogCi0xOglhZGQJCSVvMiwgJW80LCAlbzIKKzE6CWFkZGNjCQklbzIsICVvNCwgJW8yCisJYWRkYwkJJWcwLCAlbzIsICVvMgogCiBjc3VtX3BhcnRpYWxfZmluaXNoOgogCXJldGwKLQkgbW92CQklbzIsICVvMAorCSBzcmwJCSVvMiwgMCwgJW8wCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weS5TIGIvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHkuUwppbmRleCA3MWFmNDg4Li5lNTY2Yzc3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weS5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvY3N1bV9jb3B5LlMKQEAgLTIyMSwxMSArMjIxLDEyIEBACiAJc2xsCQklZzEsIDgsICVnMQogCW9yCQklbzUsICVnMSwgJW80CiAKLTE6CWFkZAkJJW8zLCAlbzQsICVvMworMToJYWRkY2MJCSVvMywgJW80LCAlbzMKKwlhZGRjCQklZzAsICVvMywgJW8zCiAKIDcwOgogCXJldGwKLQkgbW92CQklbzMsICVvMAorCSBzcmwJCSVvMywgMCwgJW8wCiAKIDk1Ogltb3YJCTAsIEdMT0JBTF9TUEFSRQogCWJybGV6LHBuCSVvMiwgNGYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUtaTM4NiBiL2FyY2gvdW0vTWFrZWZpbGUtaTM4NgppbmRleCA3YTBlMDRlLi5iNjVjYTExIDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLWkzODYKKysrIGIvYXJjaC91bS9NYWtlZmlsZS1pMzg2CkBAIC0zMyw1ICszMyw5IEBACiAjIHByZXZlbnQgZ2NjIGZyb20ga2VlcGluZyB0aGUgc3RhY2sgMTYgYnl0ZSBhbGlnbmVkLiBUYWtlbiBmcm9tIGkzODYuCiBjZmxhZ3MteSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTIpCiAKKyMgUHJldmVudCBzcHJpbnRmIGluIG5mc2QgZnJvbSBiZWluZyBjb252ZXJ0ZWQgdG8gc3RyY3B5IGFuZCByZXN1bHRpbmcgaW4KKyMgYW4gdW5yZXNvbHZlZCByZWZlcmVuY2UuCitjZmxhZ3MteSArPSAtZmZyZWVzdGFuZGluZworCiBDRkxBR1MgKz0gJChjZmxhZ3MteSkKIFVTRVJfQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmggYi9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKaW5kZXggZWZhM2QzMy4uMzEwOTgwYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaApAQCAtMTIwLDIwICsxMjAsMTEgQEAKIGV4dGVybiB2b2lkIGZyZWVfaXJxKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKIGV4dGVybiBpbnQgY3B1KHZvaWQpOwogCitleHRlcm4gdm9pZCB0aW1lX2luaXRfa2Vybih2b2lkKTsKKwogLyogQXJlIHdlIGRpc2FsbG93ZWQgdG8gc2xlZXA/IFVzZWQgdG8gY2hvb3NlIGJldHdlZW4gR0ZQX0tFUk5FTCBhbmQgR0ZQX0FUT01JQy4gKi8KIGV4dGVybiBpbnQgX19jYW50X3NsZWVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2Vndl9oYW5kbGVyKGludCBzaWcsIHVuaW9uIHVtbF9wdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHNpZ2lvX2hhbmRsZXIoaW50IHNpZywgdW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYyBiL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYwppbmRleCBmYzBmMGIwLi4xNjZjYjA5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jCkBAIC02OSw3ICs2OSw3IEBACiAJCXBhbmljKCJQaHlzaWNhbCByZW1hcHBpbmcgZm9yICVwIGFscmVhZHkgcHJlc2VudCIsCiAJCSAgICAgIGRlc2MtPnZpcnQpOwogCi0JcmJfbGlua19ub2RlKCZkZXNjLT5yYiwgKCpuKS0+cmJfcGFyZW50LCBuKTsKKwlyYl9saW5rX25vZGUoJmRlc2MtPnJiLCByYl9wYXJlbnQoKm4pLCBuKTsKIAlyYl9pbnNlcnRfY29sb3IoJmRlc2MtPnJiLCAmcGh5c19tYXBwaW5ncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWVfa2Vybi5jIGIvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKaW5kZXggNTI4Y2Y2Mi4uODZmNTFkMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdGltZV9rZXJuLmMKQEAgLTg0LDYgKzg0LDE2IEBACiAJfQogfQogCisKK3ZvaWQgdGltZV9pbml0X2tlcm4odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3M7CisKKwluc2VjcyA9IG9zX25zZWNzKCk7CisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCAtbnNlY3MgLyBCSUxMSU9OLAorCQkJCS1uc2VjcyAlIEJJTExJT04pOworfQorCiB2b2lkIGRvX2Jvb3RfdGltZXJfaGFuZGxlcihzdHJ1Y3Qgc2lnY29udGV4dCAqIHNjKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L21haW4uYyBiL2FyY2gvdW0vb3MtTGludXgvbWFpbi5jCmluZGV4IDNhMGFjMzguLjkwOTEyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvbWFpbi5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvbWFpbi5jCkBAIC01OSw3ICs1OSw3IEBACiAJaW5pdGNhbGxfdCAqY2FsbDsKIAogCWNhbGwgPSAmX191bWxfaW5pdGNhbGxfc3RhcnQ7Ci0Jd2hpbGUgKGNhbGwgPCAmX191bWxfaW5pdGNhbGxfZW5kKXs7CisJd2hpbGUgKGNhbGwgPCAmX191bWxfaW5pdGNhbGxfZW5kKXsKIAkJKCpjYWxsKSgpOwogCQljYWxsKys7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC90aW1lLmMgYi9hcmNoL3VtL29zLUxpbnV4L3RpbWUuYwppbmRleCA2Zjc2MjY3Li4yODBjNGZiIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3RpbWUuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3RpbWUuYwpAQCAtODEsMjAgKzgxLDEyIEBACiAJc2V0X2ludGVydmFsKElUSU1FUl9SRUFMKTsKIH0KIAotZXh0ZXJuIHZvaWQga3RpbWVfZ2V0X3RzKHN0cnVjdCB0aW1lc3BlYyAqdHMpOwotI2RlZmluZSBkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSh0cykga3RpbWVfZ2V0X3RzKHRzKQotCiB2b2lkIHRpbWVfaW5pdCh2b2lkKQogewotCXN0cnVjdCB0aW1lc3BlYyBub3c7Ci0KIAlpZihzaWduYWwoU0lHVlRBTFJNLCBib290X3RpbWVyX2hhbmRsZXIpID09IFNJR19FUlIpCiAJCXBhbmljKCJDb3VsZG4ndCBzZXQgU0lHVlRBTFJNIGhhbmRsZXIiKTsKIAlzZXRfaW50ZXJ2YWwoSVRJTUVSX1ZJUlRVQUwpOwotCi0JZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJm5vdyk7Ci0Jd2FsbF90b19tb25vdG9uaWMudHZfc2VjID0gLW5vdy50dl9zZWM7Ci0Jd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyA9IC1ub3cudHZfbnNlYzsKKwl0aW1lX2luaXRfa2VybigpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgb3NfbnNlY3Modm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYwppbmRleCA3NDlkZDFiLi43MTBkNWZiOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNjYWxscy5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYwpAQCAtOTksMTEgKzk5LDEyIEBACiAKIAlzd2l0Y2ggKGNhbGwpIHsKIAljYXNlIFNFTU9QOgotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmICopIHB0ciwgc2Vjb25kLAotCQkJCSAgICAgIE5VTEwpOworCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKSBwdHIsCisJCQkJICAgICAgc2Vjb25kLCBOVUxMKTsKIAljYXNlIFNFTVRJTUVET1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgKikgcHRyLCBzZWNvbmQsCi0JCQkJICAgICAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKSBmaWZ0aCk7CisJCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopIHB0ciwKKwkJCQkgICAgICBzZWNvbmQsCisJCQkJICAgICAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKikgZmlmdGgpOwogCWNhc2UgU0VNR0VUOgogCQlyZXR1cm4gc3lzX3NlbWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwogCWNhc2UgU0VNQ1RMOiB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMKaW5kZXggYTRjNDZhOC4uOWVkZjExNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgInNrYXMuaCIKIAogc3RhdGljIGludCBjb3B5X3NjX2Zyb21fdXNlcl9za2FzKHN0cnVjdCBwdF9yZWdzICpyZWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKmZyb20pCiB7CiAgICAgICAgaW50IGVyciA9IDA7CiAKQEAgLTU0LDcgKzU0LDggQEAKICAgICAgICByZXR1cm4oZXJyKTsKIH0KIAotaW50IGNvcHlfc2NfdG9fdXNlcl9za2FzKHN0cnVjdCBzaWdjb250ZXh0ICp0bywgc3RydWN0IF9mcHN0YXRlICp0b19mcCwKK2ludCBjb3B5X3NjX3RvX3VzZXJfc2thcyhzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnRvLAorCQkJIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKnRvX2ZwLAogCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG1hc2ssCiAJCQkgdW5zaWduZWQgbG9uZyBzcCkKIHsKQEAgLTEwNiwxMCArMTA3LDExIEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NT0RFX1RUCi1pbnQgY29weV9zY19mcm9tX3VzZXJfdHQoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3Qgc2lnY29udGV4dCAqZnJvbSwKK2ludCBjb3B5X3NjX2Zyb21fdXNlcl90dChzdHJ1Y3Qgc2lnY29udGV4dCAqdG8sIHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqZnJvbSwKIAkJCSBpbnQgZnBzaXplKQogewotCXN0cnVjdCBfZnBzdGF0ZSAqdG9fZnAsICpmcm9tX2ZwOworCXN0cnVjdCBfZnBzdGF0ZSAqdG9fZnA7CisJc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqZnJvbV9mcDsKIAl1bnNpZ25lZCBsb25nIHNpZ3M7CiAJaW50IGVycjsKIApAQCAtMTI0LDEzICsxMjYsMTQgQEAKIAlyZXR1cm4oZXJyKTsKIH0KIAotaW50IGNvcHlfc2NfdG9fdXNlcl90dChzdHJ1Y3Qgc2lnY29udGV4dCAqdG8sIHN0cnVjdCBfZnBzdGF0ZSAqZnAsCitpbnQgY29weV9zY190b191c2VyX3R0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqdG8sIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwLAogCQkgICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKmZyb20sIGludCBmcHNpemUsIHVuc2lnbmVkIGxvbmcgc3ApCiB7Ci0Jc3RydWN0IF9mcHN0YXRlICp0b19mcCwgKmZyb21fZnA7CisJc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqdG9fZnA7CisJc3RydWN0IF9mcHN0YXRlICpmcm9tX2ZwOwogCWludCBlcnI7CiAKLQl0b19mcCA9IChmcCA/IGZwIDogKHN0cnVjdCBfZnBzdGF0ZSAqKSAodG8gKyAxKSk7CisJdG9fZnAgPSAoZnAgPyBmcCA6IChzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICopICh0byArIDEpKTsKIAlmcm9tX2ZwID0gZnJvbS0+ZnBzdGF0ZTsKIAllcnIgPSBjb3B5X3RvX3VzZXIodG8sIGZyb20sIHNpemVvZigqdG8pKTsKIAkvKiBUaGUgU1AgaW4gdGhlIHNpZ2NvbnRleHQgaXMgdGhlIHVwZGF0ZWQgb25lIGZvciB0aGUgc2lnbmFsCkBAIC0xNTgsNyArMTYxLDggQEAKICAgICAgICByZXR1cm4ocmV0KTsKIH0KIAotc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgKnRvLCBzdHJ1Y3QgX2Zwc3RhdGUgKmZwLAorc3RhdGljIGludCBjb3B5X3NjX3RvX3VzZXIoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICp0bywKKwkJCSAgIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwLAogCQkJICAgc3RydWN0IHB0X3JlZ3MgKmZyb20sIHVuc2lnbmVkIGxvbmcgbWFzaywKIAkJCSAgIHVuc2lnbmVkIGxvbmcgc3ApCiB7CkBAIC0xNjksNyArMTczLDcgQEAKIAogc3RydWN0IHJ0X3NpZ2ZyYW1lCiB7Ci0gICAgICAgY2hhciAqcHJldGNvZGU7CisgICAgICAgY2hhciBfX3VzZXIgKnByZXRjb2RlOwogICAgICAgIHN0cnVjdCB1Y29udGV4dCB1YzsKICAgICAgICBzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogfTsKQEAgLTE4OCw3ICsxOTIsNyBAQAogCiAJZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqKQogCQlyb3VuZF9kb3duKHN0YWNrX3RvcCAtIHNpemVvZihzdHJ1Y3QgcnRfc2lnZnJhbWUpLCAxNikgLSA4OwotICAgICAgICBmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgKikgKCh1bnNpZ25lZCBsb25nKSBmcmFtZSAtIDEyOCk7CisgICAgICAgIGZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKikgKCh1bnNpZ25lZCBsb25nKSBmcmFtZSAtIDEyOCk7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZwLCBzaXplb2Yoc3RydWN0IF9mcHN0YXRlKSkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxzLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwppbmRleCA2YWNlZTVjLi42ZmNlOWY0IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwpAQCAtNDUsNyArNDUsNyBAQAogCWNhc2UgQVJDSF9HRVRfR1M6CiAJCXJldCA9IGFyY2hfcHJjdGwoY29kZSwgKHVuc2lnbmVkIGxvbmcpICZ0bXApOwogCQlpZighcmV0KQotCQkJcmV0ID0gcHV0X3VzZXIodG1wLCAmYWRkcik7CisJCQlyZXQgPSBwdXRfdXNlcih0bXAsIChsb25nIF9fdXNlciAqKWFkZHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCmluZGV4IGU3NzYxMzkuLjkyNmM0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKQEAgLTMzOSw3ICszMzksNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJaW50IGksIHJldDsKIAotCXN0YWNrX2Jhc2UgPSBJQTMyX1NUQUNLX1RPUCAtIE1BWF9BUkdfUEFHRVMgKiBQQUdFX1NJWkU7CisJc3RhY2tfYmFzZSA9IHN0YWNrX3RvcCAtIE1BWF9BUkdfUEFHRVMgKiBQQUdFX1NJWkU7CiAJbW0tPmFyZ19zdGFydCA9IGJwcm0tPnAgKyBzdGFja19iYXNlOwogCiAJYnBybS0+cCArPSBzdGFja19iYXNlOwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJewogCQltcG50LT52bV9tbSA9IG1tOwogCQltcG50LT52bV9zdGFydCA9IFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKSBicHJtLT5wOwotCQltcG50LT52bV9lbmQgPSBJQTMyX1NUQUNLX1RPUDsKKwkJbXBudC0+dm1fZW5kID0gc3RhY2tfdG9wOwogCQlpZiAoZXhlY3V0YWJsZV9zdGFjayA9PSBFWFNUQUNLX0VOQUJMRV9YKQogCQkJbXBudC0+dm1fZmxhZ3MgPSBWTV9TVEFDS19GTEFHUyB8ICBWTV9FWEVDOwogCQllbHNlIGlmIChleGVjdXRhYmxlX3N0YWNrID09IEVYU1RBQ0tfRElTQUJMRV9YKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKaW5kZXggMjIyYjViNC4uMWVmNjAyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJCWFkZHIgPSBzdGFydDsKIAkJaWYgKGFkZHIgPiBlaS0+YWRkciArIGVpLT5zaXplKSAKIAkJCWNvbnRpbnVlOyAKLQkJd2hpbGUgKGJhZF9hZGRyKCZhZGRyLCBzaXplKSAmJiBhZGRyK3NpemUgPCBlaS0+YWRkciArIGVpLT5zaXplKQorCQl3aGlsZSAoYmFkX2FkZHIoJmFkZHIsIHNpemUpICYmIGFkZHIrc2l6ZSA8PSBlaS0+YWRkcitlaS0+c2l6ZSkKIAkJCTsKIAkJbGFzdCA9IGFkZHIgKyBzaXplOwogCQlpZiAobGFzdCA+IGVpLT5hZGRyICsgZWktPnNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IGM5NDZlNGYuLjU4NmIzNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TCkBAIC0yODEsMTIgKzI4MSw3IEBACiAJamEgIDFmCiAJbW92cSAlcjEwLCVyY3gJLyogZml4dXAgZm9yIEMgKi8KIAljYWxsICpzeXNfY2FsbF90YWJsZSgsJXJheCw4KQotCW1vdnEgJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCi0xOglTQVZFX1JFU1QKLQltb3ZxICVyc3AsJXJkaQotCWNhbGwgc3lzY2FsbF90cmFjZV9sZWF2ZQotCVJFU1RPUkVfVE9QX09GX1NUQUNLICVyYngKLQlSRVNUT1JFX1JFU1QKKzE6CW1vdnEgJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCiAJLyogVXNlIElSRVQgYmVjYXVzZSB1c2VyIGNvdWxkIGhhdmUgY2hhbmdlZCBmcmFtZSAqLwogCWptcCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKIAlDRklfRU5EUFJPQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKaW5kZXggMGRlM2VhOS4uOWNjNzAzMSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCkBAIC0yNzEsNiArMjcxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCisKKyNpZmRlZiBDT05GSUdfQUNQSQorCitzdGF0aWMgaW50IG52aWRpYV9ocGV0X2RldGVjdGVkIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgX19pbml0IG52aWRpYV9ocGV0X2NoZWNrKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCW52aWRpYV9ocGV0X2RldGVjdGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKiBUZW1wb3JhcnkgSGFjay4gTnZpZGlhIGFuZCBWSUEgYm9hcmRzIGN1cnJlbnRseSBvbmx5IHdvcmsgd2l0aCBJTy1BUElDCiAgICBvZmYuIENoZWNrIGZvciBhbiBOdmlkaWEgb3IgVklBIFBDSSBicmlkZ2UgYW5kIHR1cm4gaXQgb2ZmLgogICAgVXNlIHBjaSBkaXJlY3QgaW5mcmFzdHJ1Y3R1cmUgYmVjYXVzZSB0aGlzIHJ1bnMgYmVmb3JlIHRoZSBQQ0kgc3Vic3lzdGVtLiAKQEAgLTMxNywxMSArMzI5LDE5IEBACiAJCQkJCXJldHVybjsKIAkJCQljYXNlIFBDSV9WRU5ET1JfSURfTlZJRElBOgogI2lmZGVmIENPTkZJR19BQ1BJCi0JCQkJCS8qIEFsbCB0aW1lciBvdmVycmlkZXMgb24gTnZpZGlhCi0JCQkJICAgICAgICAgICBzZWVtIHRvIGJlIHdyb25nLiBTa2lwIHRoZW0uICovCi0JCQkJCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSA9IDE7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gCi0JICAgICAiTnZpZGlhIGJvYXJkIGRldGVjdGVkLiBJZ25vcmluZyBBQ1BJIHRpbWVyIG92ZXJyaWRlLlxuIik7CisJCQkJCS8qCisJCQkJCSAqIEFsbCB0aW1lciBvdmVycmlkZXMgb24gTnZpZGlhIGFyZQorCQkJCQkgKiB3cm9uZyB1bmxlc3MgSFBFVCBpcyBlbmFibGVkLgorCQkJCQkgKi8KKwkJCQkJbnZpZGlhX2hwZXRfZGV0ZWN0ZWQgPSAwOworCQkJCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfSFBFVCwKKwkJCQkJCQludmlkaWFfaHBldF9jaGVjayk7CisJCQkJCWlmIChudmlkaWFfaHBldF9kZXRlY3RlZCA9PSAwKSB7CisJCQkJCQlhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgPSAxOworCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiTnZpZGlhIGJvYXJkICIKKwkJCQkJCSAgICAiZGV0ZWN0ZWQuIElnbm9yaW5nIEFDUEkgIgorCQkJCQkJICAgICJ0aW1lciBvdmVycmlkZS5cbiIpOworCQkJCQl9CiAjZW5kaWYKIAkJCQkJLyogUkVELVBFTiBza2lwIHRoZW0gb24gbXB0YWJsZXMgdG9vPyAqLwogCQkJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYwppbmRleCBhZjAzNWVkLi5hOTI3NWM5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jCkBAIC01NCw2ICs1NCwxMCBAQAogCWVsc2UKICNlbmRpZgogCQlub2RlID0gbnVtYV9ub2RlX2lkKCk7CisKKwlpZiAobm9kZSA8IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKSkKKwkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKwogCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgb3JkZXIpOwogCXJldHVybiBwYWdlID8gcGFnZV9hZGRyZXNzKHBhZ2UpIDogTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKaW5kZXggMjQ4MGQzZi4uODJhN2M5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1nYXJ0LmMKQEAgLTYzMSwxMCArNjMxLDggQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogRGlzYWJsaW5nIElPTU1VLlxuIik7CiAJCWlmIChlbmRfcGZuID4gTUFYX0RNQTMyX1BGTikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIG1vcmUgdGhhbiA0R0Igb2YgbWVtb3J5ICIKLQkJCQkJImJ1dCBJT01NVSBub3QgY29tcGlsZWQgaW4uXG4iCi0JCQkgICAgICAgS0VSTl9FUlIgIldBUk5JTkcgMzJiaXQgUENJIG1heSBtYWxmdW5jdGlvbi5cbiIKLQkJCSAgICAgICBLRVJOX0VSUiAiWW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlICIKLQkJCQkJIkNPTkZJR19HQVJUX0lPTU1VXG4iKTsKKwkJCQkJImJ1dCBJT01NVSBub3QgYXZhaWxhYmxlLlxuIgorCQkJICAgICAgIEtFUk5fRVJSICJXQVJOSU5HIDMyYml0IFBDSSBtYXkgbWFsZnVuY3Rpb24uXG4iKTsKIAkJfQogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BtdGltZXIuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wbXRpbWVyLmMKaW5kZXggYjA0NDRhNC4uYmY0MjFlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3BtdGltZXIuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcG10aW1lci5jCkBAIC02OCw3ICs2OCw3IEBACiAJb2Zmc2V0X2RlbGF5ID0gZGVsdGEgJSAoVVNFQ19QRVJfU0VDIC8gSFopOwogCiAJcmR0c2NsbCh0c2MpOwotCXZ4dGltZS5sYXN0X3RzYyA9IHRzYyAtIG9mZnNldF9kZWxheSAqIGNwdV9raHo7CisJdnh0aW1lLmxhc3RfdHNjID0gdHNjIC0gb2Zmc2V0X2RlbGF5ICogKHU2NCljcHVfa2h6IC8gMTAwMDsKIAogCS8qIGRvbid0IGNhbGN1bGF0ZSBkZWxheSBmb3IgZmlyc3QgcnVuLAogCSAgIG9yIGlmIHdlJ3ZlIGdvdCBsZXNzIHRoZW4gYSB0aWNrICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGYwODcwYmUuLjY1NWI5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCSAgIGZvciBub3cuICovCiAJbm9kZSA9IGFwaWNpZF90b19ub2RlW2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlpZiAobm9kZSA9PSBOVU1BX05PX05PREUpCi0JCW5vZGUgPSAwOworCQlub2RlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwogCW51bWFfc2V0X25vZGUoY3B1LCBub2RlKTsKIAogCWlmIChhY3BpX251bWEgPiAwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vc3JhdC5jIGIvYXJjaC94ODZfNjQvbW0vc3JhdC5jCmluZGV4IGUxNTEzNTMuLjQ3NGRmMjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL3NyYXQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9zcmF0LmMKQEAgLTM5OSw4ICszOTksMTAgQEAKIAkvKiBGaXJzdCBjbGVhbiB1cCB0aGUgbm9kZSBsaXN0ICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7CiAgCQljdXRvZmZfbm9kZShpLCBzdGFydCwgZW5kKTsKLQkJaWYgKChub2Rlc1tpXS5lbmQgLSBub2Rlc1tpXS5zdGFydCkgPCBOT0RFX01JTl9TSVpFKQorCQlpZiAoKG5vZGVzW2ldLmVuZCAtIG5vZGVzW2ldLnN0YXJ0KSA8IE5PREVfTUlOX1NJWkUpIHsKIAkJCXVucGFyc2Vfbm9kZShpKTsKKwkJCW5vZGVfc2V0X29mZmxpbmUoaSk7CisJCX0KIAl9CiAKIAlpZiAoYWNwaV9udW1hIDw9IDApCmRpZmYgLS1naXQgYS9ibG9jay9hcy1pb3NjaGVkLmMgYi9ibG9jay9hcy1pb3NjaGVkLmMKaW5kZXggZTI1YTVkNy4uMGM3NTAzOSAxMDA2NDQKLS0tIGEvYmxvY2svYXMtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwpAQCAtMzUzLDEwICszNTMsOSBAQAogLyoKICAqIHJiIHRyZWUgc3VwcG9ydCBmdW5jdGlvbnMKICAqLwotI2RlZmluZSBSQl9OT05FCQkoMikKICNkZWZpbmUgUkJfRU1QVFkocm9vdCkJKChyb290KS0+cmJfbm9kZSA9PSBOVUxMKQotI2RlZmluZSBPTl9SQihub2RlKQkoKG5vZGUpLT5yYl9jb2xvciAhPSBSQl9OT05FKQotI2RlZmluZSBSQl9DTEVBUihub2RlKQkoKG5vZGUpLT5yYl9jb2xvciA9IFJCX05PTkUpCisjZGVmaW5lIE9OX1JCKG5vZGUpCShyYl9wYXJlbnQobm9kZSkgIT0gbm9kZSkKKyNkZWZpbmUgUkJfQ0xFQVIobm9kZSkJKHJiX3NldF9wYXJlbnQobm9kZSwgbm9kZSkpCiAjZGVmaW5lIHJiX2VudHJ5X2FycShub2RlKQlyYl9lbnRyeSgobm9kZSksIHN0cnVjdCBhc19ycSwgcmJfbm9kZSkKICNkZWZpbmUgQVJRX1JCX1JPT1QoYWQsIGFycSkJKCYoYWQpLT5zb3J0X2xpc3RbKGFycSktPmlzX3N5bmNdKQogI2RlZmluZSBycV9yYl9rZXkocnEpCQkocnEpLT5zZWN0b3IKQEAgLTE2NDgsMTcgKzE2NDcsMTcgQEAKICAqIGluaXRpYWxpemUgZWxldmF0b3IgcHJpdmF0ZSBkYXRhIChhc19kYXRhKSwgYW5kIGFsbG9jIGEgYXJxIGZvcgogICogZWFjaCByZXF1ZXN0IG9uIHRoZSBmcmVlIGxpc3RzCiAgKi8KLXN0YXRpYyBpbnQgYXNfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCAqYXNfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCiB7CiAJc3RydWN0IGFzX2RhdGEgKmFkOwogCWludCBpOwogCiAJaWYgKCFhcnFfcG9vbCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJYWQgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKCphZCksIEdGUF9LRVJORUwsIHEtPm5vZGUpOwogCWlmICghYWQpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAltZW1zZXQoYWQsIDAsIHNpemVvZigqYWQpKTsKIAogCWFkLT5xID0gcTsgLyogSWRlbnRpZnkgd2hhdCBxdWV1ZSB0aGUgZGF0YSBiZWxvbmdzIHRvICovCkBAIC0xNjY3LDcgKzE2NjYsNyBAQAogCQkJCUdGUF9LRVJORUwsIHEtPm5vZGUpOwogCWlmICghYWQtPmhhc2gpIHsKIAkJa2ZyZWUoYWQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJYWQtPmFycV9wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZShCTEtERVZfTUlOX1JRLCBtZW1wb29sX2FsbG9jX3NsYWIsCkBAIC0xNjc1LDcgKzE2NzQsNyBAQAogCWlmICghYWQtPmFycV9wb29sKSB7CiAJCWtmcmVlKGFkLT5oYXNoKTsKIAkJa2ZyZWUoYWQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyogYW50aWNpcGF0b3J5IHNjaGVkdWxpbmcgaGVscGVycyAqLwpAQCAtMTY5NiwxNCArMTY5NSwxMyBAQAogCWFkLT5hbnRpY19leHBpcmUgPSBkZWZhdWx0X2FudGljX2V4cGlyZTsKIAlhZC0+YmF0Y2hfZXhwaXJlW1JFUV9TWU5DXSA9IGRlZmF1bHRfcmVhZF9iYXRjaF9leHBpcmU7CiAJYWQtPmJhdGNoX2V4cGlyZVtSRVFfQVNZTkNdID0gZGVmYXVsdF93cml0ZV9iYXRjaF9leHBpcmU7Ci0JZS0+ZWxldmF0b3JfZGF0YSA9IGFkOwogCiAJYWQtPmN1cnJlbnRfYmF0Y2hfZXhwaXJlcyA9IGppZmZpZXMgKyBhZC0+YmF0Y2hfZXhwaXJlW1JFUV9TWU5DXTsKIAlhZC0+d3JpdGVfYmF0Y2hfY291bnQgPSBhZC0+YmF0Y2hfZXhwaXJlW1JFUV9BU1lOQ10gLyAxMDsKIAlpZiAoYWQtPndyaXRlX2JhdGNoX2NvdW50IDwgMikKIAkJYWQtPndyaXRlX2JhdGNoX2NvdW50ID0gMjsKIAotCXJldHVybiAwOworCXJldHVybiBhZDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDI1NDBkZmEuLjYyMDBkOWIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIENGUV9LRVlfQVNZTkMJCSgwKQogCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhjZnFfZXhpdF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2ZxX2V4aXRfbG9jayk7CiAKIC8qCiAgKiBmb3IgdGhlIGhhc2ggb2YgY2ZxcSBpbnNpZGUgdGhlIGNmcWQKQEAgLTYwLDE0ICs2MCw5IEBACiAvKgogICogcmItdHJlZSBkZWZpbmVzCiAgKi8KLSNkZWZpbmUgUkJfTk9ORQkJCSgyKQogI2RlZmluZSBSQl9FTVBUWShub2RlKQkJKChub2RlKS0+cmJfbm9kZSA9PSBOVUxMKQotI2RlZmluZSBSQl9DTEVBUl9DT0xPUihub2RlKQkobm9kZSktPnJiX2NvbG9yID0gUkJfTk9ORQogI2RlZmluZSBSQl9DTEVBUihub2RlKQkJZG8gewlcCi0JKG5vZGUpLT5yYl9wYXJlbnQgPSBOVUxMOwlcCi0JUkJfQ0xFQVJfQ09MT1IoKG5vZGUpKTsJCVwKLQkobm9kZSktPnJiX3JpZ2h0ID0gTlVMTDsJXAotCShub2RlKS0+cmJfbGVmdCA9IE5VTEw7CQlcCisJCW1lbXNldChub2RlLCAwLCBzaXplb2YoKm5vZGUpKTsgXAogfSB3aGlsZSAoMCkKICNkZWZpbmUgUkJfQ0xFQVJfUk9PVChyb290KQkoKHJvb3QpLT5yYl9ub2RlID0gTlVMTCkKICNkZWZpbmUgcmJfZW50cnlfY3JxKG5vZGUpCXJiX2VudHJ5KChub2RlKSwgc3RydWN0IGNmcV9ycSwgcmJfbm9kZSkKQEAgLTEzMyw2ICsxMjgsNyBAQAogCW1lbXBvb2xfdCAqY3JxX3Bvb2w7CiAKIAlpbnQgcnFfaW5fZHJpdmVyOworCWludCBod190YWc7CiAKIAkvKgogCSAqIHNjaGVkdWxlIHNsaWNlIHN0YXRlIGluZm8KQEAgLTUwMCwxMCArNDk2LDEzIEBACiAKIAkvKgogCSAqIGlmIHF1ZXVlIHdhcyBwcmVlbXB0ZWQsIGp1c3QgYWRkIHRvIGZyb250IHRvIGJlIGZhaXIuIGJ1c3lfcnIKLQkgKiBpc24ndCBzb3J0ZWQuCisJICogaXNuJ3Qgc29ydGVkLCBidXQgaW5zZXJ0IGF0IHRoZSBiYWNrIGZvciBmYWlybmVzcy4KIAkgKi8KIAlpZiAocHJlZW1wdGVkIHx8IGxpc3QgPT0gJmNmcWQtPmJ1c3lfcnIpIHsKLQkJbGlzdF9hZGQoJmNmcXEtPmNmcV9saXN0LCBsaXN0KTsKKwkJaWYgKHByZWVtcHRlZCkKKwkJCWxpc3QgPSBsaXN0LT5wcmV2OworCisJCWxpc3RfYWRkX3RhaWwoJmNmcXEtPmNmcV9saXN0LCBsaXN0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTYzLDcgKzU2Miw2IEBACiAJY2ZxX3VwZGF0ZV9uZXh0X2NycShjcnEpOwogCiAJcmJfZXJhc2UoJmNycS0+cmJfbm9kZSwgJmNmcXEtPnNvcnRfbGlzdCk7Ci0JUkJfQ0xFQVJfQ09MT1IoJmNycS0+cmJfbm9kZSk7CiAKIAlpZiAoY2ZxX2NmcXFfb25fcnIoY2ZxcSkgJiYgUkJfRU1QVFkoJmNmcXEtPnNvcnRfbGlzdCkpCiAJCWNmcV9kZWxfY2ZxcV9ycihjZnFkLCBjZnFxKTsKQEAgLTY2NCw2ICs2NjIsMTUgQEAKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKIAogCWNmcWQtPnJxX2luX2RyaXZlcisrOworCisJLyoKKwkgKiBJZiB0aGUgZGVwdGggaXMgbGFyZ2VyIDEsIGl0IHJlYWxseSBjb3VsZCBiZSBxdWV1ZWluZy4gQnV0IGxldHMKKwkgKiBtYWtlIHRoZSBtYXJrIGEgbGl0dGxlIGhpZ2hlciAtIGlkbGluZyBjb3VsZCBzdGlsbCBiZSBnb29kIGZvcgorCSAqIGxvdyBxdWV1ZWluZywgYW5kIGEgbG93IHF1ZXVlaW5nIG51bWJlciBjb3VsZCBhbHNvIGp1c3QgaW5kaWNhdGUKKwkgKiBhIFNDU0kgbWlkIGxheWVyIGxpa2UgYmVoYXZpb3VyIHdoZXJlIGxpbWl0KzEgaXMgb2Z0ZW4gc2Vlbi4KKwkgKi8KKwlpZiAoIWNmcWQtPmh3X3RhZyAmJiBjZnFkLT5ycV9pbl9kcml2ZXIgPiA0KQorCQljZnFkLT5od190YWcgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfZGVhY3RpdmF0ZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQpAQCAtODc5LDYgKzg4NiwxMyBAQAogCQljZnFxID0gbGlzdF9lbnRyeV9jZnFxKGNmcWQtPmN1cl9yci5uZXh0KTsKIAogCS8qCisJICogSWYgbm8gbmV3IHF1ZXVlcyBhcmUgYXZhaWxhYmxlLCBjaGVjayBpZiB0aGUgYnVzeSBsaXN0IGhhcyBzb21lCisJICogYmVmb3JlIGZhbGxpbmcgYmFjayB0byBpZGxlIGlvLgorCSAqLworCWlmICghY2ZxcSAmJiAhbGlzdF9lbXB0eSgmY2ZxZC0+YnVzeV9ycikpCisJCWNmcXEgPSBsaXN0X2VudHJ5X2NmcXEoY2ZxZC0+YnVzeV9yci5uZXh0KTsKKworCS8qCiAJICogaWYgd2UgaGF2ZSBpZGxlIHF1ZXVlcyBhbmQgbm8gcnQgb3IgYmUgcXVldWVzIGhhZCBwZW5kaW5nCiAJICogcmVxdWVzdHMsIGVpdGhlciBhbGxvdyBpbW1lZGlhdGUgc2VydmljZSBpZiB0aGUgZ3JhY2UgcGVyaW9kCiAJICogaGFzIHBhc3NlZCBvciBhcm0gdGhlIGlkbGUgZ3JhY2UgdGltZXIKQEAgLTEyODQsNyArMTI5OCw3IEBACiAJLyoKIAkgKiBwdXQgdGhlIHJlZmVyZW5jZSB0aGlzIHRhc2sgaXMgaG9sZGluZyB0byB0aGUgdmFyaW91cyBxdWV1ZXMKIAkgKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmY2ZxX2V4aXRfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjZnFfZXhpdF9sb2NrLCBmbGFncyk7CiAKIAluID0gcmJfZmlyc3QoJmlvYy0+Y2ljX3Jvb3QpOwogCXdoaWxlIChuICE9IE5VTEwpIHsKQEAgLTEyOTQsNyArMTMwOCw3IEBACiAJCW4gPSByYl9uZXh0KG4pOwogCX0KIAotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmNmcV9leGl0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjZnFfZXhpdF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKgpAQCAtMTMwMywxNyArMTMxNywxMiBAQAogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljID0ga21lbV9jYWNoZV9hbGxvYyhjZnFfaW9jX3Bvb2wsIGdmcF9tYXNrKTsKIAogCWlmIChjaWMpIHsKLQkJUkJfQ0xFQVIoJmNpYy0+cmJfbm9kZSk7Ci0JCWNpYy0+a2V5ID0gTlVMTDsKLQkJY2ljLT5jZnFxW0FTWU5DXSA9IE5VTEw7Ci0JCWNpYy0+Y2ZxcVtTWU5DXSA9IE5VTEw7CisJCW1lbXNldChjaWMsIDAsIHNpemVvZigqY2ljKSk7CisJCVJCX0NMRUFSX0NPTE9SKCZjaWMtPnJiX25vZGUpOwogCQljaWMtPmxhc3RfZW5kX3JlcXVlc3QgPSBqaWZmaWVzOwotCQljaWMtPnR0aW1lX3RvdGFsID0gMDsKLQkJY2ljLT50dGltZV9zYW1wbGVzID0gMDsKLQkJY2ljLT50dGltZV9tZWFuID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJmNpYy0+cXVldWVfbGlzdCk7CiAJCWNpYy0+ZHRvciA9IGNmcV9mcmVlX2lvX2NvbnRleHQ7CiAJCWNpYy0+ZXhpdCA9IGNmcV9leGl0X2lvX2NvbnRleHQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZjaWMtPnF1ZXVlX2xpc3QpOwogCQlhdG9taWNfaW5jKCZpb2NfY291bnQpOwogCX0KIApAQCAtMTQwMCwxNyArMTQwOSwxNyBAQAogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwogCXN0cnVjdCByYl9ub2RlICpuOwogCi0Jd3JpdGVfbG9jaygmY2ZxX2V4aXRfbG9jayk7CisJc3Bpbl9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKIAogCW4gPSByYl9maXJzdCgmaW9jLT5jaWNfcm9vdCk7CiAJd2hpbGUgKG4gIT0gTlVMTCkgewogCQljaWMgPSByYl9lbnRyeShuLCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsIHJiX25vZGUpOwotIAorCiAJCWNoYW5nZWRfaW9wcmlvKGNpYyk7CiAJCW4gPSByYl9uZXh0KG4pOwogCX0KIAotCXdyaXRlX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CisJc3Bpbl91bmxvY2soJmNmcV9leGl0X2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDU4LDcgKzE0NjcsOCBAQAogCQkgKiBzZXQgLT5zbGljZV9sZWZ0IHRvIGFsbG93IHByZWVtcHRpb24gZm9yIGEgbmV3IHByb2Nlc3MKIAkJICovCiAJCWNmcXEtPnNsaWNlX2xlZnQgPSAyICogY2ZxZC0+Y2ZxX3NsaWNlX2lkbGU7Ci0JCWNmcV9tYXJrX2NmcXFfaWRsZV93aW5kb3coY2ZxcSk7CisJCWlmICghY2ZxZC0+aHdfdGFnKQorCQkJY2ZxX21hcmtfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKTsKIAkJY2ZxX21hcmtfY2ZxcV9wcmlvX2NoYW5nZWQoY2ZxcSk7CiAJCWNmcV9pbml0X3ByaW9fZGF0YShjZnFxKTsKIAl9CkBAIC0xNDc1LDkgKzE0ODUsMTAgQEAKIHN0YXRpYyB2b2lkCiBjZnFfZHJvcF9kZWFkX2NpYyhzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYykKIHsKLQlyZWFkX2xvY2soJmNmcV9leGl0X2xvY2spOworCXNwaW5fbG9jaygmY2ZxX2V4aXRfbG9jayk7CiAJcmJfZXJhc2UoJmNpYy0+cmJfbm9kZSwgJmlvYy0+Y2ljX3Jvb3QpOwotCXJlYWRfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZjaWMtPnF1ZXVlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKIAlrbWVtX2NhY2hlX2ZyZWUoY2ZxX2lvY19wb29sLCBjaWMpOwogCWF0b21pY19kZWMoJmlvY19jb3VudCk7CiB9CkBAIC0xNTQ1LDExICsxNTU2LDExIEBACiAJCQlCVUcoKTsKIAl9CiAKLQlyZWFkX2xvY2soJmNmcV9leGl0X2xvY2spOworCXNwaW5fbG9jaygmY2ZxX2V4aXRfbG9jayk7CiAJcmJfbGlua19ub2RlKCZjaWMtPnJiX25vZGUsIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZjaWMtPnJiX25vZGUsICZpb2MtPmNpY19yb290KTsKIAlsaXN0X2FkZCgmY2ljLT5xdWV1ZV9saXN0LCAmY2ZxZC0+Y2ljX2xpc3QpOwotCXJlYWRfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiB9CiAKIC8qCkBAIC0xNjQ4LDcgKzE2NTksNyBAQAogewogCWludCBlbmFibGVfaWRsZSA9IGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpOwogCi0JaWYgKCFjaWMtPmlvYy0+dGFzayB8fCAhY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUpCisJaWYgKCFjaWMtPmlvYy0+dGFzayB8fCAhY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUgfHwgY2ZxZC0+aHdfdGFnKQogCQllbmFibGVfaWRsZSA9IDA7CiAJZWxzZSBpZiAoc2FtcGxlX3ZhbGlkKGNpYy0+dHRpbWVfc2FtcGxlcykpIHsKIAkJaWYgKGNpYy0+dHRpbWVfbWVhbiA+IGNmcWQtPmNmcV9zbGljZV9pZGxlKQpAQCAtMTczOSwxNCArMTc1MCwyNCBAQAogCiAJY2ZxcS0+bmV4dF9jcnEgPSBjZnFfY2hvb3NlX3JlcShjZnFkLCBjZnFxLT5uZXh0X2NycSwgY3JxKTsKIAorCWNpYyA9IGNycS0+aW9fY29udGV4dDsKKwogCS8qCiAJICogd2UgbmV2ZXIgd2FpdCBmb3IgYW4gYXN5bmMgcmVxdWVzdCBhbmQgd2UgZG9uJ3QgYWxsb3cgcHJlZW1wdGlvbgogCSAqIG9mIGFuIGFzeW5jIHJlcXVlc3QuIHNvIGp1c3QgcmV0dXJuIGVhcmx5CiAJICovCi0JaWYgKCFjZnFfY3JxX2lzX3N5bmMoY3JxKSkKKwlpZiAoIWNmcV9jcnFfaXNfc3luYyhjcnEpKSB7CisJCS8qCisJCSAqIHN5bmMgcHJvY2VzcyBpc3N1ZWQgYW4gYXN5bmMgcmVxdWVzdCwgaWYgaXQncyB3YWl0aW5nCisJCSAqIHRoZW4gZXhwaXJlIGl0IGFuZCBraWNrIHJxIGhhbmRsaW5nLgorCQkgKi8KKwkJaWYgKGNpYyA9PSBjZnFkLT5hY3RpdmVfY2ljICYmCisJCSAgICBkZWxfdGltZXIoJmNmcWQtPmlkbGVfc2xpY2VfdGltZXIpKSB7CisJCQljZnFfc2xpY2VfZXhwaXJlZChjZnFkLCAwKTsKKwkJCWNmcV9zdGFydF9xdWV1ZWluZyhjZnFkLCBjZnFxKTsKKwkJfQogCQlyZXR1cm47Ci0KLQljaWMgPSBjcnEtPmlvX2NvbnRleHQ7CisJfQogCiAJY2ZxX3VwZGF0ZV9pb190aGlua3RpbWUoY2ZxZCwgY2ljKTsKIAljZnFfdXBkYXRlX2lvX3NlZWt0aW1lKGNmcWQsIGNpYywgY3JxKTsKQEAgLTIxNjQsMTAgKzIxODUsOSBAQAogCSAqIHJhY2Ugd2l0aCBhIG5vbi1pZGxlIHF1ZXVlLCByZXNldCB0aW1lcgogCSAqLwogCWVuZCA9IGNmcWQtPmxhc3RfZW5kX3JlcXVlc3QgKyBDRlFfSURMRV9HUkFDRTsKLQlpZiAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSkgewotCQljZnFkLT5pZGxlX2NsYXNzX3RpbWVyLmV4cGlyZXMgPSBlbmQ7Ci0JCWFkZF90aW1lcigmY2ZxZC0+aWRsZV9jbGFzc190aW1lcik7Ci0JfSBlbHNlCisJaWYgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGVuZCkpCisJCW1vZF90aW1lcigmY2ZxZC0+aWRsZV9jbGFzc190aW1lciwgZW5kKTsKKwllbHNlCiAJCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2ZxZC0+cXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKQEAgLTIxODcsNyArMjIwNyw3IEBACiAKIAljZnFfc2h1dGRvd25fdGltZXJfd3EoY2ZxZCk7CiAKLQl3cml0ZV9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX2xvY2soJmNmcV9leGl0X2xvY2spOwogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAKIAlpZiAoY2ZxZC0+YWN0aXZlX3F1ZXVlKQpAQCAtMjIxMCw3ICsyMjMwLDcgQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0Jd3JpdGVfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAKIAljZnFfc2h1dGRvd25fdGltZXJfd3EoY2ZxZCk7CiAKQEAgLTIyMjAsMTQgKzIyNDAsMTQgQEAKIAlrZnJlZShjZnFkKTsKIH0KIAotc3RhdGljIGludCBjZnFfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCitzdGF0aWMgdm9pZCAqY2ZxX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZDsKIAlpbnQgaTsKIAogCWNmcWQgPSBrbWFsbG9jKHNpemVvZigqY2ZxZCksIEdGUF9LRVJORUwpOwogCWlmICghY2ZxZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJbWVtc2V0KGNmcWQsIDAsIHNpemVvZigqY2ZxZCkpOwogCkBAIC0yMjU3LDggKzIyNzcsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBDRlFfUUhBU0hfRU5UUklFUzsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJmNmcWQtPmNmcV9oYXNoW2ldKTsKIAotCWUtPmVsZXZhdG9yX2RhdGEgPSBjZnFkOwotCiAJY2ZxZC0+cXVldWUgPSBxOwogCiAJY2ZxZC0+bWF4X3F1ZXVlZCA9IHEtPm5yX3JlcXVlc3RzIC8gNDsKQEAgLTIyODUsMTQgKzIzMDMsMTQgQEAKIAljZnFkLT5jZnFfc2xpY2VfYXN5bmNfcnEgPSBjZnFfc2xpY2VfYXN5bmNfcnE7CiAJY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUgPSBjZnFfc2xpY2VfaWRsZTsKIAotCXJldHVybiAwOworCXJldHVybiBjZnFkOwogb3V0X2NycXBvb2w6CiAJa2ZyZWUoY2ZxZC0+Y2ZxX2hhc2gpOwogb3V0X2NmcWhhc2g6CiAJa2ZyZWUoY2ZxZC0+Y3JxX2hhc2gpOwogb3V0X2NycWhhc2g6CiAJa2ZyZWUoY2ZxZCk7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9zbGFiX2tpbGwodm9pZCkKZGlmZiAtLWdpdCBhL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYyBiL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYwppbmRleCAzOTlmYTFlLi5jOTRkZThlIDEwMDY0NAotLS0gYS9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKKysrIGIvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCkBAIC0xNjUsMTAgKzE2NSw5IEBACiAvKgogICogcmIgdHJlZSBzdXBwb3J0IGZ1bmN0aW9ucwogICovCi0jZGVmaW5lIFJCX05PTkUJCSgyKQogI2RlZmluZSBSQl9FTVBUWShyb290KQkoKHJvb3QpLT5yYl9ub2RlID09IE5VTEwpCi0jZGVmaW5lIE9OX1JCKG5vZGUpCSgobm9kZSktPnJiX2NvbG9yICE9IFJCX05PTkUpCi0jZGVmaW5lIFJCX0NMRUFSKG5vZGUpCSgobm9kZSktPnJiX2NvbG9yID0gUkJfTk9ORSkKKyNkZWZpbmUgT05fUkIobm9kZSkJKHJiX3BhcmVudChub2RlKSAhPSBub2RlKQorI2RlZmluZSBSQl9DTEVBUihub2RlKQkocmJfc2V0X3BhcmVudChub2RlLCBub2RlKSkKICNkZWZpbmUgcmJfZW50cnlfZHJxKG5vZGUpCXJiX2VudHJ5KChub2RlKSwgc3RydWN0IGRlYWRsaW5lX3JxLCByYl9ub2RlKQogI2RlZmluZSBEUlFfUkJfUk9PVChkZCwgZHJxKQkoJihkZCktPnNvcnRfbGlzdFtycV9kYXRhX2RpcigoZHJxKS0+cmVxdWVzdCldKQogI2RlZmluZSBycV9yYl9rZXkocnEpCQkocnEpLT5zZWN0b3IKQEAgLTYxMywyNCArNjEyLDI0IEBACiAgKiBpbml0aWFsaXplIGVsZXZhdG9yIHByaXZhdGUgZGF0YSAoZGVhZGxpbmVfZGF0YSksIGFuZCBhbGxvYyBhIGRycSBmb3IKICAqIGVhY2ggcmVxdWVzdCBvbiB0aGUgZnJlZSBsaXN0cwogICovCi1zdGF0aWMgaW50IGRlYWRsaW5lX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQorc3RhdGljIHZvaWQgKmRlYWRsaW5lX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZDsKIAlpbnQgaTsKIAogCWlmICghZHJxX3Bvb2wpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAogCWRkID0ga21hbGxvY19ub2RlKHNpemVvZigqZGQpLCBHRlBfS0VSTkVMLCBxLT5ub2RlKTsKIAlpZiAoIWRkKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAKIAlkZC0+aGFzaCA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkqRExfSEFTSF9FTlRSSUVTLAogCQkJCUdGUF9LRVJORUwsIHEtPm5vZGUpOwogCWlmICghZGQtPmhhc2gpIHsKIAkJa2ZyZWUoZGQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJZGQtPmRycV9wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZShCTEtERVZfTUlOX1JRLCBtZW1wb29sX2FsbG9jX3NsYWIsCkBAIC02MzgsNyArNjM3LDcgQEAKIAlpZiAoIWRkLT5kcnFfcG9vbCkgewogCQlrZnJlZShkZC0+aGFzaCk7CiAJCWtmcmVlKGRkKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBETF9IQVNIX0VOVFJJRVM7IGkrKykKQEAgLTY1Myw4ICs2NTIsNyBAQAogCWRkLT53cml0ZXNfc3RhcnZlZCA9IHdyaXRlc19zdGFydmVkOwogCWRkLT5mcm9udF9tZXJnZXMgPSAxOwogCWRkLT5maWZvX2JhdGNoID0gZmlmb19iYXRjaDsKLQllLT5lbGV2YXRvcl9kYXRhID0gZGQ7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGRkOwogfQogCiBzdGF0aWMgdm9pZCBkZWFkbGluZV9wdXRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDg3NjhhMzYuLmEwYWZkZDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtMTIxLDE2ICsxMjEsMTYgQEAKIAlyZXR1cm4gZTsKIH0KIAotc3RhdGljIGludCBlbGV2YXRvcl9hdHRhY2gocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKQorc3RhdGljIHZvaWQgKmVsZXZhdG9yX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKQogewotCWludCByZXQgPSAwOworCXJldHVybiBlcS0+b3BzLT5lbGV2YXRvcl9pbml0X2ZuKHEsIGVxKTsKK30KIAorc3RhdGljIHZvaWQgZWxldmF0b3JfYXR0YWNoKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CiAJcS0+ZWxldmF0b3IgPSBlcTsKLQotCWlmIChlcS0+b3BzLT5lbGV2YXRvcl9pbml0X2ZuKQotCQlyZXQgPSBlcS0+b3BzLT5lbGV2YXRvcl9pbml0X2ZuKHEsIGVxKTsKLQotCXJldHVybiByZXQ7CisJZXEtPmVsZXZhdG9yX2RhdGEgPSBkYXRhOwogfQogCiBzdGF0aWMgY2hhciBjaG9zZW5fZWxldmF0b3JbMTZdOwpAQCAtMTgxLDYgKzE4MSw3IEBACiAJc3RydWN0IGVsZXZhdG9yX3R5cGUgKmUgPSBOVUxMOwogCXN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXE7CiAJaW50IHJldCA9IDA7CisJdm9pZCAqZGF0YTsKIAogCUlOSVRfTElTVF9IRUFEKCZxLT5xdWV1ZV9oZWFkKTsKIAlxLT5sYXN0X21lcmdlID0gTlVMTDsKQEAgLTIwMiwxMCArMjAzLDEzIEBACiAJaWYgKCFlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBlbGV2YXRvcl9hdHRhY2gocSwgZXEpOwotCWlmIChyZXQpCisJZGF0YSA9IGVsZXZhdG9yX2luaXRfcXVldWUocSwgZXEpOworCWlmICghZGF0YSkgewogCQlrb2JqZWN0X3B1dCgmZXEtPmtvYmopOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKKwllbGV2YXRvcl9hdHRhY2gocSwgZXEsIGRhdGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcyMiwxMyArNzI2LDE2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgdm9pZCBfX2Vsdl91bnJlZ2lzdGVyX3F1ZXVlKGVsZXZhdG9yX3QgKmUpCit7CisJa29iamVjdF91ZXZlbnQoJmUtPmtvYmosIEtPQkpfUkVNT1ZFKTsKKwlrb2JqZWN0X2RlbCgmZS0+a29iaik7Cit9CisKIHZvaWQgZWx2X3VucmVnaXN0ZXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JaWYgKHEpIHsKLQkJZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOwotCQlrb2JqZWN0X3VldmVudCgmZS0+a29iaiwgS09CSl9SRU1PVkUpOwotCQlrb2JqZWN0X2RlbCgmZS0+a29iaik7Ci0JfQorCWlmIChxKQorCQlfX2Vsdl91bnJlZ2lzdGVyX3F1ZXVlKHEtPmVsZXZhdG9yKTsKIH0KIAogaW50IGVsdl9yZWdpc3RlcihzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZSkKQEAgLTc4MCw2ICs3ODcsNyBAQAogc3RhdGljIGludCBlbGV2YXRvcl9zd2l0Y2gocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqbmV3X2UpCiB7CiAJZWxldmF0b3JfdCAqb2xkX2VsZXZhdG9yLCAqZTsKKwl2b2lkICpkYXRhOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBuZXcgZWxldmF0b3IKQEAgLTc4OCw2ICs3OTYsMTIgQEAKIAlpZiAoIWUpCiAJCXJldHVybiAwOwogCisJZGF0YSA9IGVsZXZhdG9yX2luaXRfcXVldWUocSwgZSk7CisJaWYgKCFkYXRhKSB7CisJCWtvYmplY3RfcHV0KCZlLT5rb2JqKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBUdXJuIG9uIEJZUEFTUyBhbmQgZHJhaW4gYWxsIHJlcXVlc3RzIHcvIGVsZXZhdG9yIHByaXZhdGUgZGF0YQogCSAqLwpAQCAtODA2LDE5ICs4MjAsMTkgQEAKIAkJZWx2X2RyYWluX2VsZXZhdG9yKHEpOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQogCS8qCi0JICogdW5yZWdpc3RlciBvbGQgZWxldmF0b3IgZGF0YQorCSAqIFJlbWVtYmVyIG9sZCBlbGV2YXRvci4KIAkgKi8KLQllbHZfdW5yZWdpc3Rlcl9xdWV1ZShxKTsKIAlvbGRfZWxldmF0b3IgPSBxLT5lbGV2YXRvcjsKIAogCS8qCiAJICogYXR0YWNoIGFuZCBzdGFydCBuZXcgZWxldmF0b3IKIAkgKi8KLQlpZiAoZWxldmF0b3JfYXR0YWNoKHEsIGUpKQotCQlnb3RvIGZhaWw7CisJZWxldmF0b3JfYXR0YWNoKHEsIGUsIGRhdGEpOworCisJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCisJX19lbHZfdW5yZWdpc3Rlcl9xdWV1ZShvbGRfZWxldmF0b3IpOwogCiAJaWYgKGVsdl9yZWdpc3Rlcl9xdWV1ZShxKSkKIAkJZ290byBmYWlsX3JlZ2lzdGVyOwpAQCAtODM3LDcgKzg1MSw2IEBACiAJICovCiAJZWxldmF0b3JfZXhpdChlKTsKIAllID0gTlVMTDsKLWZhaWw6CiAJcS0+ZWxldmF0b3IgPSBvbGRfZWxldmF0b3I7CiAJZWx2X3JlZ2lzdGVyX3F1ZXVlKHEpOwogCWNsZWFyX2JpdChRVUVVRV9GTEFHX0VMVlNXSVRDSCwgJnEtPnF1ZXVlX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL25vb3AtaW9zY2hlZC5jIGIvYmxvY2svbm9vcC1pb3NjaGVkLmMKaW5kZXggZjM3MGU0YS4uNTZhN2M2MiAxMDA2NDQKLS0tIGEvYmxvY2svbm9vcC1pb3NjaGVkLmMKKysrIGIvYmxvY2svbm9vcC1pb3NjaGVkLmMKQEAgLTY1LDE2ICs2NSwxNSBAQAogCXJldHVybiBsaXN0X2VudHJ5KHJxLT5xdWV1ZWxpc3QubmV4dCwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CiB9CiAKLXN0YXRpYyBpbnQgbm9vcF9pbml0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgZWxldmF0b3JfdCAqZSkKK3N0YXRpYyB2b2lkICpub29wX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBub29wX2RhdGEgKm5kOwogCiAJbmQgPSBrbWFsbG9jKHNpemVvZigqbmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5kKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJm5kLT5xdWV1ZSk7Ci0JZS0+ZWxldmF0b3JfZGF0YSA9IG5kOwotCXJldHVybiAwOworCXJldHVybiBuZDsKIH0KIAogc3RhdGljIHZvaWQgbm9vcF9leGl0X3F1ZXVlKGVsZXZhdG9yX3QgKmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggYWViNWFiMi4uOGIxMWNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtNzIsNCArNzIsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvcnRjL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9kbWEvS2NvbmZpZyIKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggNDQ3ZDhlNi4uM2M1MTcwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC03NCwzICs3NCw0IEBACiBvYmoteQkJCQkrPSBmaXJtd2FyZS8KIG9iai0kKENPTkZJR19DUllQVE8pCQkrPSBjcnlwdG8vCiBvYmotJChDT05GSUdfU1VQRVJIKQkJKz0gc2gvCitvYmotJChDT05GSUdfRE1BX0VOR0lORSkJKz0gZG1hLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYwppbmRleCAwN2JjNmRmLi44OTIwZThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYwpAQCAtODEyLDYgKzgxMiw5IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJpcnFyb3V0ZXJfcmVzdW1lIik7CiAKKwkvKiBNYWtlIHN1cmUgU0NJIGlzIGVuYWJsZWQgYWdhaW4gKEFwcGxlIGZpcm13YXJlIGJ1Zz8pICovCisJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfU0NJX0VOQUJMRSwgMSwgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOworCiAJYWNwaV9pbl9yZXN1bWUgPSAxOwogCWxpc3RfZm9yX2VhY2gobm9kZSwgJmFjcGlfbGluay5lbnRyaWVzKSB7CiAJCWxpbmsgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBhY3BpX3BjaV9saW5rLCBub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggYWJiZGIzNy4uZjM2ZGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTU3Nyw2ICs1NzcsOCBAQAogCQlyZXR1cm5fVkFMVUUoLUVCVVNZKTsKIAl9CiAKKwlXQVJOX09OKCFwZXJmb3JtYW5jZSk7CisKIAlwci0+cGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTsKIAogCWlmIChhY3BpX3Byb2Nlc3Nvcl9nZXRfcGVyZm9ybWFuY2VfaW5mbyhwcikpIHsKQEAgLTYwOSw3ICs2MTEsOCBAQAogCQlyZXR1cm5fVk9JRDsKIAl9CiAKLQlrZnJlZShwci0+cGVyZm9ybWFuY2UtPnN0YXRlcyk7CisJaWYgKHByLT5wZXJmb3JtYW5jZSkKKwkJa2ZyZWUocHItPnBlcmZvcm1hbmNlLT5zdGF0ZXMpOwogCXByLT5wZXJmb3JtYW5jZSA9IE5VTEw7CiAKIAlhY3BpX2NwdWZyZXFfcmVtb3ZlX2ZpbGUocHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zdXNwZW5kLmMKaW5kZXggNjYyMjA5ZC4uMmE3NjljYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jCkBAIC04LDcgKzgsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KQEAgLTY2LDYgKzY1LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKwogLyoqCiAgKglkZXZpY2Vfc3VzcGVuZCAtIFNhdmUgc3RhdGUgYW5kIHN0b3AgYWxsIGRldmljZXMgaW4gc3lzdGVtLgogICoJQHN0YXRlOgkJUG93ZXIgc3RhdGUgdG8gcHV0IGVhY2ggZGV2aWNlIGluLgpAQCAtODUsOSArODUsNiBAQAogewogCWludCBlcnJvciA9IDA7CiAKLQlpZiAoIWlzX2NvbnNvbGVfc3VzcGVuZF9zYWZlKCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJZG93bigmZHBtX3NlbSk7CiAJZG93bigmZHBtX2xpc3Rfc2VtKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9hY3RpdmUpICYmIGVycm9yID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKaW5kZXggZmRmZjc3NC4uYzE0MzRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKQEAgLTExNiw4ICsxMTYsNyBAQAogCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkKLQlpZiAoc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpIDwgMCkKKwlpZiAoc2tiX2xpbmVhcml6ZShza2IpKQogCQlnb3RvIGV4aXQ7CiAJaWYgKCFpc19hb2VfbmV0aWYoaWZwKSkKIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IGE1OTg3NmEuLjMxNzBlYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTEwMDksOSArMTAwOSw5IEBACiAJCWlmIChmcC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJCXJldCA9IC1FUk9GUzsKIAkJCWlmIChjZHJvbV9vcGVuX3dyaXRlKGNkaSkpCi0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnJfcmVsZWFzZTsKIAkJCWlmICghQ0RST01fQ0FOKENEQ19SQU0pKQotCQkJCWdvdG8gZXJyOworCQkJCWdvdG8gZXJyX3JlbGVhc2U7CiAJCQlyZXQgPSAwOwogCQkJY2RpLT5tZWRpYV93cml0dGVuID0gMDsKIAkJfQpAQCAtMTAyNiw2ICsxMDI2LDggQEAKIAkgICAgbm90IGJlIG1vdW50aW5nLCBidXQgb3BlbmluZyB3aXRoIE9fTk9OQkxPQ0sgKi8KIAljaGVja19kaXNrX2NoYW5nZShpcC0+aV9iZGV2KTsKIAlyZXR1cm4gMDsKK2Vycl9yZWxlYXNlOgorCWNkaS0+b3BzLT5yZWxlYXNlKGNkaSk7CiBlcnI6CiAJY2RpLT51c2VfY291bnQtLTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IGY1YjAxYzYuLmZiOTE5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTQxLDkgKzQxLDkgQEAKIG9iai0kKENPTkZJR19BTUlHQV9CVUlMVElOX1NFUklBTCkgKz0gYW1pc2VyaWFsLm8KIG9iai0kKENPTkZJR19TWCkJCSs9IHN4Lm8gZ2VuZXJpY19zZXJpYWwubwogb2JqLSQoQ09ORklHX1JJTykJCSs9IHJpby8gZ2VuZXJpY19zZXJpYWwubwotb2JqLSQoQ09ORklHX0hWQ19EUklWRVIpCSs9IGh2Y19jb25zb2xlLm8KIG9iai0kKENPTkZJR19IVkNfQ09OU09MRSkJKz0gaHZjX3Zpby5vIGh2c2kubwogb2JqLSQoQ09ORklHX0hWQ19SVEFTKQkJKz0gaHZjX3J0YXMubworb2JqLSQoQ09ORklHX0hWQ19EUklWRVIpCSs9IGh2Y19jb25zb2xlLm8KIG9iai0kKENPTkZJR19SQVdfRFJJVkVSKQkrPSByYXcubwogb2JqLSQoQ09ORklHX1NHSV9TTlNDKQkJKz0gc25zYy5vIHNuc2NfZXZlbnQubwogb2JqLSQoQ09ORklHX01NVElNRVIpCQkrPSBtbXRpbWVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwppbmRleCAwYjljZjljLi43Yzg4YzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCkBAIC04Niw3ICs4Niw3IEBACiAKIGNvbmZpZyBBR1BfU0lTCiAJdHJpc3RhdGUgIlNpUyBjaGlwc2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCisJZGVwZW5kcyBvbiBBR1AKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mCiAJICBYIG9uIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdIGNoaXBzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKaW5kZXggMmI1ODM4ZS4uYjRlMDBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCkBAIC00NiwxMiArNDYsNiBAQAogfTsKIAogCi1zdGF0aWMgaW50IGFscGhhX2NvcmVfYWdwX25vcCh2b2lkKQotewotCS8qIGp1c3QgcmV0dXJuIHN1Y2Nlc3MgKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBhbHBoYV9jb3JlX2FncF9mZXRjaF9zaXplKHZvaWQpCiB7CiAJcmV0dXJuIGFscGhhX2NvcmVfYWdwX3NpemVzWzBdLnNpemU7CkBAIC0xMjAsNiArMTE0LDExIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGludCBhbHBoYV9jb3JlX2FncF9jcmVhdGVfZnJlZV9nYXR0X3RhYmxlKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmEpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbHBoYV9jb3JlX2FncF9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gYWxwaGFfY29yZV9hZ3Bfc2l6ZXMsCkBAIC0xMzUsOCArMTM0LDggQEAKIAkudGxiX2ZsdXNoCQk9IGFscGhhX2NvcmVfYWdwX3RsYmZsdXNoLAogCS5tYXNrX21lbW9yeQkJPSBhZ3BfZ2VuZXJpY19tYXNrX21lbW9yeSwKIAkuY2FjaGVfZmx1c2gJCT0gZ2xvYmFsX2NhY2hlX2ZsdXNoLAotCS5jcmVhdGVfZ2F0dF90YWJsZQk9IGFscGhhX2NvcmVfYWdwX25vcCwKLQkuZnJlZV9nYXR0X3RhYmxlCT0gYWxwaGFfY29yZV9hZ3Bfbm9wLAorCS5jcmVhdGVfZ2F0dF90YWJsZQk9IGFscGhhX2NvcmVfYWdwX2NyZWF0ZV9mcmVlX2dhdHRfdGFibGUsCisJLmZyZWVfZ2F0dF90YWJsZQk9IGFscGhhX2NvcmVfYWdwX2NyZWF0ZV9mcmVlX2dhdHRfdGFibGUsCiAJLmluc2VydF9tZW1vcnkJCT0gYWxwaGFfY29yZV9hZ3BfaW5zZXJ0X21lbW9yeSwKIAkucmVtb3ZlX21lbW9yeQkJPSBhbHBoYV9jb3JlX2FncF9yZW1vdmVfbWVtb3J5LAogCS5hbGxvY19ieV90eXBlCQk9IGFncF9nZW5lcmljX2FsbG9jX2J5X3R5cGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAzNjUxN2Q0Li5hYzNjMzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTYxNyw2ICs2MTcsOSBAQAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAorCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OVklESUEpCisJCW5mb3JjZTNfYWdwX2luaXQocGRldik7CisKIAlyZXR1cm4gYW1kXzgxNTFfY29uZmlndXJlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKaW5kZXggNGUxODkxZS4uYTkyYWI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKQEAgLTgwOSwxMiArODA5LDEwIEBACiAJCQkJY2FzZSBVMzJfQVBFUl9TSVpFOgogCQkJCQlicmlkZ2UtPmN1cnJlbnRfc2l6ZSA9IEFfSURYMzIoYnJpZGdlKTsKIAkJCQkJYnJlYWs7Ci0JCQkJCS8qIFRoaXMgY2FzZSB3aWxsIG5ldmVyIHJlYWxseSBoYXBwZW4uICovCisJCQkJLyogVGhlc2UgY2FzZXMgd2lsbCBuZXZlciByZWFsbHkgaGFwcGVuLiAqLwogCQkJCWNhc2UgRklYRURfQVBFUl9TSVpFOgogCQkJCWNhc2UgTFZMMl9BUEVSX1NJWkU6CiAJCQkJZGVmYXVsdDoKLQkJCQkJYnJpZGdlLT5jdXJyZW50X3NpemUgPQotCQkJCQkgICAgYnJpZGdlLT5jdXJyZW50X3NpemU7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQl0ZW1wID0gYnJpZGdlLT5jdXJyZW50X3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCBiZGRjYWU1Li42MWFjMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTczNiw3ICs3MzYsNyBAQAogc3RhdGljIGludCBpbnRlbF9pOTE1X2ZldGNoX3NpemUodm9pZCkKIHsKIAlzdHJ1Y3QgYXBlcl9zaXplX2luZm9fZml4ZWQgKnZhbHVlczsKLQl1MzIgdGVtcCwgb2Zmc2V0ID0gMDsKKwl1MzIgdGVtcCwgb2Zmc2V0OwogCiAjZGVmaW5lIEk5MTVfMjU2TUJfQUREUkVTU19NQVNLICgxPDwyNykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKaW5kZXggOTg0NmRlZi4uMWRlMWIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCkBAIC0zMjksNyArMzI5LDcgQEAKIAkvKiB0dXJuIG9mZiBBR1Agb24gdGhlIGJyaWRnZSAqLwogCWFncCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBhZ3AgKyBQQ0lfQUdQX0NPTU1BTkQsICZjbWQpOwotCWJyaWRnZS0+ZGV2X3ByaXZhdGVfZGF0YSA9ICh2b2lkICopY21kOworCWJyaWRnZS0+ZGV2X3ByaXZhdGVfZGF0YSA9ICh2b2lkICopKGxvbmcpY21kOwogCWlmIChjbWQgJiBQQ0lfQUdQX0NPTU1BTkRfQUdQKSB7CiAJCXByaW50aygidW5pbm9ydGgtYWdwOiBkaXNhYmxpbmcgQUdQIG9uIGJyaWRnZSAlc1xuIiwKIAkJCQlwY2lfbmFtZShwZGV2KSk7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAlpZiAoYnJpZGdlID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY29tbWFuZCA9ICh1MzIpYnJpZGdlLT5kZXZfcHJpdmF0ZV9kYXRhOworCWNvbW1hbmQgPSAobG9uZylicmlkZ2UtPmRldl9wcml2YXRlX2RhdGE7CiAJYnJpZGdlLT5kZXZfcHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlpZiAoIShjb21tYW5kICYgUENJX0FHUF9DT01NQU5EX0FHUCkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwppbmRleCA5N2IwYTg5Li5iOGVjMjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtMzQ1LDYgKzM0NSwxMiBAQAogCQkuY2hpcHNldF9uYW1lCT0gIlBUODgwIiwKIAl9LAogCisJLyogUFQ4ODAgVWx0cmEgKi8KKwl7CisJCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MFVMVFJBLAorCQkuY2hpcHNldF9uYW1lCT0gIlBUODgwIFVsdHJhIiwKKwl9LAorCiAJLyogUFQ4OTAgKi8KIAl7CiAJCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzAsCkBAIC01MTEsNiArNTE3LDcgQEAKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzhfMCksCiAJSUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODApLAorCUlEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEpLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCksCiAJSUQoUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCksCiAJSUQoUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggYjM2ZWVmMC4uMDJhN2RkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTExODQsMjAgKzExODQsMjAgQEAKIHN0YXRpYyB2b2lkIHBvcnRfY2xlYW51cChzdHJ1Y3Qgc21pX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgaW50IGFkZHIgPSBpbmZvLT5pby5hZGRyX2RhdGE7Ci0JaW50ICAgICAgICAgIG1hcHNpemU7CisJaW50ICAgICAgICAgIGlkeDsKIAogCWlmIChhZGRyKSB7Ci0JCW1hcHNpemUgPSAoKGluZm8tPmlvX3NpemUgKiBpbmZvLT5pby5yZWdzcGFjaW5nKQotCQkJICAgLSAoaW5mby0+aW8ucmVnc3BhY2luZyAtIGluZm8tPmlvLnJlZ3NpemUpKTsKLQotCQlyZWxlYXNlX3JlZ2lvbiAoYWRkciwgbWFwc2l6ZSk7CisJICAJZm9yIChpZHggPSAwOyBpZHggPCBpbmZvLT5pb19zaXplOyBpZHgrKykgeworCQkJcmVsZWFzZV9yZWdpb24oYWRkciArIGlkeCAqIGluZm8tPmlvLnJlZ3NwYWNpbmcsCisJCQkJICAgICAgIGluZm8tPmlvLnJlZ3NpemUpOworCQl9CiAJfQogfQogCiBzdGF0aWMgaW50IHBvcnRfc2V0dXAoc3RydWN0IHNtaV9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBhZGRyID0gaW5mby0+aW8uYWRkcl9kYXRhOwotCWludCAgICAgICAgICBtYXBzaXplOworCWludCAgICAgICAgICBpZHg7CiAKIAlpZiAoIWFkZHIpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTIyNSwxNiArMTIyNSwyMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBDYWxjdWxhdGUgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgdG8gY2xhaW0uICBUaGlzIGlzIGFuCi0JICogdW51c3VhbCBsb29raW5nIGNhbGN1bGF0aW9uLCBidXQgaXQgYXZvaWRzIGNsYWltaW5nIGFueQotCSAqIG1vcmUgbWVtb3J5IHRoYW4gaXQgaGFzIHRvLiAgSXQgd2lsbCBjbGFpbSBldmVyeXRoaW5nCi0JICogYmV0d2VlbiB0aGUgZmlyc3QgYWRkcmVzcyB0byB0aGUgZW5kIG9mIHRoZSBsYXN0IGZ1bGwKLQkgKiByZWdpc3Rlci4gKi8KLQltYXBzaXplID0gKChpbmZvLT5pb19zaXplICogaW5mby0+aW8ucmVnc3BhY2luZykKLQkJICAgLSAoaW5mby0+aW8ucmVnc3BhY2luZyAtIGluZm8tPmlvLnJlZ3NpemUpKTsKLQotCWlmIChyZXF1ZXN0X3JlZ2lvbihhZGRyLCBtYXBzaXplLCBERVZJQ0VfTkFNRSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU87CisJLyogU29tZSBCSU9TZXMgcmVzZXJ2ZSBkaXNqb2ludCBJL08gcmVnaW9ucyBpbiB0aGVpciBBQ1BJCisJICogdGFibGVzLiAgVGhpcyBjYXVzZXMgcHJvYmxlbXMgd2hlbiB0cnlpbmcgdG8gcmVnaXN0ZXIgdGhlCisJICogZW50aXJlIEkvTyByZWdpb24uICBUaGVyZWZvcmUgd2UgbXVzdCByZWdpc3RlciBlYWNoIEkvTworCSAqIHBvcnQgc2VwYXJhdGVseS4KKwkgKi8KKyAgCWZvciAoaWR4ID0gMDsgaWR4IDwgaW5mby0+aW9fc2l6ZTsgaWR4KyspIHsKKwkJaWYgKHJlcXVlc3RfcmVnaW9uKGFkZHIgKyBpZHggKiBpbmZvLT5pby5yZWdzcGFjaW5nLAorCQkJCSAgIGluZm8tPmlvLnJlZ3NpemUsIERFVklDRV9OQU1FKSA9PSBOVUxMKSB7CisJCQkvKiBVbmRvIGFsbG9jYXRpb25zICovCisJCQl3aGlsZSAoaWR4LS0pIHsKKwkJCQlyZWxlYXNlX3JlZ2lvbihhZGRyICsgaWR4ICogaW5mby0+aW8ucmVnc3BhY2luZywKKwkJCQkJICAgICAgIGluZm8tPmlvLnJlZ3NpemUpOworCQkJfQorCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3R0eS5jIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKaW5kZXggZWRlMzY1ZC4uYjkzNzFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25fdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKQEAgLTEzODQsOCArMTM4NCwxMCBAQAogCQkgKiBsb25nZXIgdGhhbiBUVFlfVEhSRVNIT0xEX1VOVEhST1RUTEUgaW4gY2Fub25pY2FsIG1vZGUsCiAJCSAqIHdlIHdvbid0IGdldCBhbnkgbW9yZSBjaGFyYWN0ZXJzLgogCQkgKi8KLQkJaWYgKG5fdHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpIDw9IFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSkKKwkJaWYgKG5fdHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpIDw9IFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSkgeworCQkJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkJCWNoZWNrX3VudGhyb3R0bGUodHR5KTsKKwkJfQogCiAJCWlmIChiIC0gYnVmID49IG1pbmltdW0pCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDEyOGIyNjMuLmVhYjUzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAjZGVmaW5lCVpFUk9fREVWKGRldikgIAkJCQkJCVwKIAltZW1zZXQoJmRldi0+YXRyX2NzdW0sMCwJCQkJXAogCQlzaXplb2Yoc3RydWN0IGNtNDAwMF9kZXYpIC0gCQkJXAotCQkvKmxpbmsqLyBzaXplb2Yoc3RydWN0IHBjbWNpYV9kZXZpY2UpIC0gCVwKKwkJLypsaW5rKi8gc2l6ZW9mKHN0cnVjdCBwY21jaWFfZGV2aWNlICopIC0gCVwKIAkJLypub2RlKi8gc2l6ZW9mKGRldl9ub2RlX3QpIC0gCQkJXAogCQkvKmF0ciovIE1BWF9BVFIqc2l6ZW9mKGNoYXIpIC0gCQkJXAogCQkvKnJidWYqLyA1MTIqc2l6ZW9mKGNoYXIpIC0gCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYmlvcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYmlvcy5jCmluZGV4IGU0NWYwZDMuLmE2MTE5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2Jpb3MuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9iaW9zLmMKQEAgLTEwNSw2ICsxMDUsMTIgQEAKIAkiTm9uLUhvc3QgSW5mbyIKIH07CiAKK3N0cnVjdCB0Y3BhX3BjX2V2ZW50IHsKKwl1MzIgZXZlbnRfaWQ7CisJdTMyIGV2ZW50X3NpemU7CisJdTggZXZlbnRfZGF0YVswXTsKK307CisKIGVudW0gdGNwYV9wY19ldmVudF9pZHMgewogCVNNQklPUyA9IDEsCiAJQklTX0NFUlQsCkBAIC0xMTQsMTQgKzEyMCwxNSBAQAogCU5WUkFNLAogCU9QVElPTl9ST01fRVhFQywKIAlPUFRJT05fUk9NX0NPTkZJRywKLQlPUFRJT05fUk9NX01JQ1JPQ09ERSwKKwlPUFRJT05fUk9NX01JQ1JPQ09ERSA9IDEwLAogCVNfQ1JUTV9WRVJTSU9OLAogCVNfQ1JUTV9DT05URU5UUywKIAlQT1NUX0NPTlRFTlRTLAorCUhPU1RfVEFCTEVfT0ZfREVWSUNFUywKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB0Y3BhX3BjX2V2ZW50X2lkX3N0cmluZ3NbXSA9IHsKLQkiIgorCSIiLAogCSJTTUJJT1MiLAogCSJCSVMgQ2VydGlmaWNhdGUiLAogCSJQT1NUIEJJT1MgIiwKQEAgLTEzMCwxMSArMTM3LDEyIEBACiAJIk5WUkFNIiwKIAkiT3B0aW9uIFJPTSIsCiAJIk9wdGlvbiBST00gY29uZmlnIiwKLQkiT3B0aW9uIFJPTSBtaWNyb2NvZGUiLAorCSIiLAorCSJPcHRpb24gUk9NIG1pY3JvY29kZSAiLAogCSJTLUNSVE0gVmVyc2lvbiIsCi0JIlMtQ1JUTSBDb250ZW50cyIsCi0JIlMtQ1JUTSBQT1NUIENvbnRlbnRzIiwKLQkiUE9TVCBDb250ZW50cyIsCisJIlMtQ1JUTSBDb250ZW50cyAiLAorCSJQT1NUIENvbnRlbnRzICIsCisJIlRhYmxlIG9mIERldmljZXMiLAogfTsKIAogLyogcmV0dXJucyBwb2ludGVyIHRvIHN0YXJ0IG9mIHBvcy4gZW50cnkgb2YgdGNnIGxvZyAqLwpAQCAtMjA2LDcgKzIxNCw3IEBACiAJY29uc3QgY2hhciAqbmFtZSA9ICIiOwogCWNoYXIgZGF0YVs0MF0gPSAiIjsKIAlpbnQgaSwgbl9sZW4gPSAwLCBkX2xlbiA9IDA7Ci0JdTMyIGV2ZW50X2lkOworCXN0cnVjdCB0Y3BhX3BjX2V2ZW50ICpwY19ldmVudDsKIAogCXN3aXRjaChldmVudC0+ZXZlbnRfdHlwZSkgewogCWNhc2UgUFJFQk9PVDoKQEAgLTIzNSwzMSArMjQzLDMyIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9UQUc6Ci0JCWV2ZW50X2lkID0gYmUzMl90b19jcHUoKigodTMyICopZXZlbnRfZW50cnkpKTsKKwkJcGNfZXZlbnQgPSAoc3RydWN0IHRjcGFfcGNfZXZlbnQgKilldmVudF9lbnRyeTsKIAogCQkvKiBUb0RvIFJvdyBkYXRhIC0+IEJhc2U2NCAqLwogCi0JCXN3aXRjaCAoZXZlbnRfaWQpIHsKKwkJc3dpdGNoIChwY19ldmVudC0+ZXZlbnRfaWQpIHsKIAkJY2FzZSBTTUJJT1M6CiAJCWNhc2UgQklTX0NFUlQ6CiAJCWNhc2UgQ01PUzoKIAkJY2FzZSBOVlJBTToKIAkJY2FzZSBPUFRJT05fUk9NX0VYRUM6CiAJCWNhc2UgT1BUSU9OX1JPTV9DT05GSUc6Ci0JCWNhc2UgT1BUSU9OX1JPTV9NSUNST0NPREU6CiAJCWNhc2UgU19DUlRNX1ZFUlNJT046Ci0JCWNhc2UgU19DUlRNX0NPTlRFTlRTOgotCQljYXNlIFBPU1RfQ09OVEVOVFM6Ci0JCQluYW1lID0gdGNwYV9wY19ldmVudF9pZF9zdHJpbmdzW2V2ZW50X2lkXTsKKwkJCW5hbWUgPSB0Y3BhX3BjX2V2ZW50X2lkX3N0cmluZ3NbcGNfZXZlbnQtPmV2ZW50X2lkXTsKIAkJCW5fbGVuID0gc3RybGVuKG5hbWUpOwogCQkJYnJlYWs7CisJCS8qIGhhc2ggZGF0YSAqLwogCQljYXNlIFBPU1RfQklPU19ST006CiAJCWNhc2UgRVNDRDoKLQkJCW5hbWUgPSB0Y3BhX3BjX2V2ZW50X2lkX3N0cmluZ3NbZXZlbnRfaWRdOworCQljYXNlIE9QVElPTl9ST01fTUlDUk9DT0RFOgorCQljYXNlIFNfQ1JUTV9DT05URU5UUzoKKwkJY2FzZSBQT1NUX0NPTlRFTlRTOgorCQkJbmFtZSA9IHRjcGFfcGNfZXZlbnRfaWRfc3RyaW5nc1twY19ldmVudC0+ZXZlbnRfaWRdOwogCQkJbl9sZW4gPSBzdHJsZW4obmFtZSk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKLQkJCQlkX2xlbiArPSBzcHJpbnRmKGRhdGEsICIlMDJ4IiwKLQkJCQkJCWV2ZW50X2VudHJ5WzggKyBpXSk7CisJCQkJZF9sZW4gKz0gc3ByaW50ZigmZGF0YVsyKmldLCAiJTAyeCIsCisJCQkJCQlwY19ldmVudC0+ZXZlbnRfZGF0YVtpXSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtMjc1LDUzICsyODQsMTMgQEAKIAogc3RhdGljIGludCB0cG1fYmluYXJ5X2Jpb3NfbWVhc3VyZW1lbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCB0Y3BhX2V2ZW50ICpldmVudCA9IHY7CisJY2hhciAqZGF0YSA9IHY7CisJaW50IGk7CiAKLQljaGFyICpldmVudG5hbWU7Ci0JY2hhciBkYXRhWzRdOwotCXUzMiBoZWxwOwotCWludCBpLCBsZW47Ci0Jc3RydWN0IHRjcGFfZXZlbnQgKmV2ZW50ID0gKHN0cnVjdCB0Y3BhX2V2ZW50ICopIHY7Ci0JdW5zaWduZWQgY2hhciAqZXZlbnRfZW50cnkgPQotCSAgICAodW5zaWduZWQgY2hhciAqKSAodiArIHNpemVvZihzdHJ1Y3QgdGNwYV9ldmVudCkpOwotCi0JZXZlbnRuYW1lID0ga21hbGxvYyhNQVhfVEVYVF9FVkVOVCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldmVudG5hbWUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRVJST1IgLSBObyBNZW1vcnkgZm9yIGV2ZW50IG5hbWVcbiAiLAotCQkgICAgICAgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiAxc3Q6IFBDUiB1c2VkIGlzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICg0IGJ5dGVzKSAqLwotCWhlbHAgPSBsZTMyX3RvX2NwdShldmVudC0+cGNyX2luZGV4KTsKLQltZW1jcHkoZGF0YSwgJmhlbHAsIDQpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdGNwYV9ldmVudCkgKyBldmVudC0+ZXZlbnRfc2l6ZTsgaSsrKQogCQlzZXFfcHV0YyhtLCBkYXRhW2ldKTsKIAotCS8qIDJuZDogU0hBMSAoMjAgYnl0ZXMpICovCi0JZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCi0JCXNlcV9wdXRjKG0sIGV2ZW50LT5wY3JfdmFsdWVbaV0pOwotCi0JLyogM3JkOiBldmVudCB0eXBlIGlkZW50aWZpZXIgKDQgYnl0ZXMpICovCi0JaGVscCA9IGxlMzJfdG9fY3B1KGV2ZW50LT5ldmVudF90eXBlKTsKLQltZW1jcHkoZGF0YSwgJmhlbHAsIDQpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCXNlcV9wdXRjKG0sIGRhdGFbaV0pOwotCi0JbGVuID0gMDsKLQotCWxlbiArPSBnZXRfZXZlbnRfbmFtZShldmVudG5hbWUsIGV2ZW50LCBldmVudF9lbnRyeSk7Ci0KLQkvKiA0dGg6ICBmaWxlbmFtZSA8PSAyNTUgKyBcJzAnIGRlbGltaXRlciAqLwotCWlmIChsZW4gPiBUQ0dfRVZFTlRfTkFNRV9MRU5fTUFYKQotCQlsZW4gPSBUQ0dfRVZFTlRfTkFNRV9MRU5fTUFYOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlzZXFfcHV0YyhtLCBldmVudG5hbWVbaV0pOwotCi0JLyogNXRoOiBkZWxpbWl0ZXIgKi8KLQlzZXFfcHV0YyhtLCAnXDAnKTsKLQotCWtmcmVlKGV2ZW50bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKaW5kZXggZjYyMTE2OC4uOGVhNzA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKQEAgLTQ1NywxMCArNDU3LDYgQEAKIAl9CiAKIAl2ZW5kb3IgPSBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX0RJRF9WSUQoMCkpOwotCWlmICgodmVuZG9yICYgMHhGRkZGKSA9PSAweEZGRkYpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dF9lcnI7Ci0JfQogCiAJLyogRGVmYXVsdCB0aW1lb3V0cyAqLwogCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZmaWVzKFRJU19TSE9SVF9USU1FT1VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggYWNjNWQ0Ny4uNmM5NDg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTMyMzgsMTQgKzMyMzgsNiBAQAogCX0KIH0KIAotaW50IGlzX2NvbnNvbGVfc3VzcGVuZF9zYWZlKHZvaWQpCi17Ci0JLyogSXQgaXMgdW5zYWZlIHRvIHN1c3BlbmQgZGV2aWNlcyB3aGlsZSBYIGhhcyBjb250cm9sIG9mIHRoZQotCSAqIGhhcmR3YXJlLiBNYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgb24gYSBrZXJuZWwtY29udHJvbGxlZCBjb25zb2xlLgotCSAqLwotCXJldHVybiB2Y19jb25zW2ZnX2NvbnNvbGVdLmQtPnZjX21vZGUgPT0gS0RfVEVYVDsKLX0KLQogLyoKICAqCVZpc2libGUgc3ltYm9scyBmb3IgbW9kdWxlcwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwppbmRleCA5ZjJmMDBkLi4wNWY4Y2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJaWYgKGZvdW5kKSB7CiAJCWNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soY2JxKTsKLQkJYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5yZWZjbnQpOworCQlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCAyOWIyZmE1Li40NGQxZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCQlpZiAoIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkgewogCQkJaWYgKChwb2xpY3kpICYmIChwb2xpY3ktPmNwdSA9PSBmcmVxcy0+Y3B1KSAmJgogCQkJICAgIChwb2xpY3ktPmN1cikgJiYgKHBvbGljeS0+Y3VyICE9IGZyZXFzLT5vbGQpKSB7Ci0JCQkJZHByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgaXMiCisJCQkJZHByaW50aygiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBpcyIKIAkJCQkJIiAldSwgY3B1ZnJlcSBhc3N1bWVkICV1IGtIei5cbiIsCiAJCQkJCWZyZXFzLT5vbGQsIHBvbGljeS0+Y3VyKTsKIAkJCQlmcmVxcy0+b2xkID0gcG9saWN5LT5jdXI7CkBAIC04NzQsNyArODc0LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCWRwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IG91dCBvZiBzeW5jOiBjcHVmcmVxIGFuZCB0aW1pbmcgIgorCWRwcmludGsoIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgb3V0IG9mIHN5bmM6IGNwdWZyZXEgYW5kIHRpbWluZyAiCiAJICAgICAgICJjb3JlIHRoaW5rcyBvZiAldSwgaXMgJXUga0h6LlxuIiwgb2xkX2ZyZXEsIG5ld19mcmVxKTsKIAogCWZyZXFzLmNwdSA9IGNwdTsKQEAgLTEwMDYsNyArMTAwNiw3IEBACiAJCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCiAJCWlmICghKGNwdWZyZXFfZHJpdmVyLT5mbGFncyAmIENQVUZSRVFfUE1fTk9fV0FSTikpCi0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgaXMgJXUsICIKKwkJCWRwcmludGsoIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgaXMgJXUsICIKIAkJCSAgICAgICAiY3B1ZnJlcSBhc3N1bWVkICV1IGtIei5cbiIsCiAJCQkgICAgICAgY3VyX2ZyZXEsIGNwdV9wb2xpY3ktPmN1cik7CiAKQEAgLTEwODcsNyArMTA4Nyw3IEBACiAJCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAogCQkJaWYgKCEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9QTV9OT19XQVJOKSkKLQkJCQlkcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSIKKwkJCQlkcHJpbnRrKCJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IgogCQkJCSAgICAgICAiaXMgJXUsIGNwdWZyZXEgYXNzdW1lZCAldSBrSHouXG4iLAogCQkJCSAgICAgICBjdXJfZnJlcSwgY3B1X3BvbGljeS0+Y3VyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggOTY5NGI2ZS4uYzU3NmMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC03NCw3ICs3NCw3IEBACiBzaG93X3RvdGFsX3RyYW5zKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBjcHVmcmVxX3N0YXRzX3RhYmxlW3BvbGljeS0+Y3B1XTsKLQlpZighc3RhdCkKKwlpZiAoIXN0YXQpCiAJCXJldHVybiAwOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAogCQkJY3B1ZnJlcV9zdGF0c190YWJsZVtzdGF0LT5jcHVdLT50b3RhbF90cmFucyk7CkBAIC04Niw3ICs4Niw3IEBACiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpOwogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gY3B1ZnJlcV9zdGF0c190YWJsZVtwb2xpY3ktPmNwdV07Ci0JaWYoIXN0YXQpCisJaWYgKCFzdGF0KQogCQlyZXR1cm4gMDsKIAljcHVmcmVxX3N0YXRzX3VwZGF0ZShzdGF0LT5jcHUpOwogCWZvciAoaSA9IDA7IGkgPCBzdGF0LT5zdGF0ZV9udW07IGkrKykgewpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaW50IGksIGo7CiAKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IGNwdWZyZXFfc3RhdHNfdGFibGVbcG9saWN5LT5jcHVdOwotCWlmKCFzdGF0KQorCWlmICghc3RhdCkKIAkJcmV0dXJuIDA7CiAJY3B1ZnJlcV9zdGF0c191cGRhdGUoc3RhdC0+Y3B1KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIgICBGcm9tICA6ICAgIFRvXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCmluZGV4IGE0ODE4Y2UuLjU1MWY0Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwpAQCAtMjAsNyArMjAsNyBAQAogewogCXVuc2lnbmVkIGludCBtaW5fZnJlcSA9IH4wOwogCXVuc2lnbmVkIGludCBtYXhfZnJlcSA9IDA7Ci0JdW5zaWduZWQgaW50IGkgPSAwOworCXVuc2lnbmVkIGludCBpOwogCiAJZm9yIChpPTA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CkBAIC01MSw3ICs1MSw3IEBACiAJCQkJICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgbmV4dF9sYXJnZXIgPSB+MDsKLQl1bnNpZ25lZCBpbnQgaSA9IDA7CisJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAogCWRwcmludGsoInJlcXVlc3QgZm9yIHZlcmlmaWNhdGlvbiBvZiBwb2xpY3kgKCV1IC0gJXUga0h6KSBmb3IgY3B1ICV1XG4iLCBwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsIHBvbGljeS0+Y3B1KTsKQEAgLTkxLDIwICs5MSwyNCBAQAogCQkJCSAgIHVuc2lnbmVkIGludCByZWxhdGlvbiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgKmluZGV4KQogewotCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBvcHRpbWFsID0geyAuaW5kZXggPSB+MCwgfTsKLQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgc3Vib3B0aW1hbCA9IHsgLmluZGV4ID0gfjAsIH07CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIG9wdGltYWwgPSB7CisJCS5pbmRleCA9IH4wLAorCQkuZnJlcXVlbmN5ID0gMCwKKwl9OworCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBzdWJvcHRpbWFsID0geworCQkuaW5kZXggPSB+MCwKKwkJLmZyZXF1ZW5jeSA9IDAsCisJfTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWRwcmludGsoInJlcXVlc3QgZm9yIHRhcmdldCAldSBrSHogKHJlbGF0aW9uOiAldSkgZm9yIGNwdSAldVxuIiwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCBwb2xpY3ktPmNwdSk7CiAKIAlzd2l0Y2ggKHJlbGF0aW9uKSB7CiAJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0g6Ci0JCW9wdGltYWwuZnJlcXVlbmN5ID0gMDsKIAkJc3Vib3B0aW1hbC5mcmVxdWVuY3kgPSB+MDsKIAkJYnJlYWs7CiAJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0w6CiAJCW9wdGltYWwuZnJlcXVlbmN5ID0gfjA7Ci0JCXN1Ym9wdGltYWwuZnJlcXVlbmN5ID0gMDsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQwMjFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtMCwwICsxLDM0IEBACisjCisjIERNQSBlbmdpbmUgY29uZmlndXJhdGlvbgorIworCittZW51ICJETUEgRW5naW5lIHN1cHBvcnQiCisKK2NvbmZpZyBETUFfRU5HSU5FCisJYm9vbCAiU3VwcG9ydCBmb3IgRE1BIGVuZ2luZXMiCisJLS0taGVscC0tLQorCSAgRE1BIGVuZ2luZXMgb2ZmbG9hZCBjb3B5IG9wZXJhdGlvbnMgZnJvbSB0aGUgQ1BVIHRvIGRlZGljYXRlZAorCSAgaGFyZHdhcmUsIGFsbG93aW5nIHRoZSBjb3BpZXMgdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5LgorCitjb21tZW50ICJETUEgQ2xpZW50cyIKKworY29uZmlnIE5FVF9ETUEKKwlib29sICJOZXR3b3JrOiBUQ1AgcmVjZWl2ZSBjb3B5IG9mZmxvYWQiCisJZGVwZW5kcyBvbiBETUFfRU5HSU5FICYmIE5FVAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIERNQSBlbmdpbmVzIGluIHRoZSBuZXR3b3JrIHN0YWNrIHRvCisJICBvZmZsb2FkIHJlY2VpdmUgY29weS10by11c2VyIG9wZXJhdGlvbnMsIGZyZWVpbmcgQ1BVIGN5Y2xlcy4KKwkgIFNpbmNlIHRoaXMgaXMgdGhlIG1haW4gdXNlciBvZiB0aGUgRE1BIGVuZ2luZSwgaXQgc2hvdWxkIGJlIGVuYWJsZWQ7CisJICBzYXkgWSBoZXJlLgorCitjb21tZW50ICJETUEgRGV2aWNlcyIKKworY29uZmlnIElOVEVMX0lPQVRETUEKKwl0cmlzdGF0ZSAiSW50ZWwgSS9PQVQgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBETUFfRU5HSU5FICYmIFBDSQorCWRlZmF1bHQgbQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgSW50ZWwoUikgSS9PQVQgRE1BIGVuZ2luZS4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGNmZGJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfRE1BX0VOR0lORSkgKz0gZG1hZW5naW5lLm8KK29iai0kKENPTkZJR19ORVRfRE1BKSArPSBpb3Zsb2NrLm8KK29iai0kKENPTkZJR19JTlRFTF9JT0FURE1BKSArPSBpb2F0ZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jIGIvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyOTE0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2RtYWVuZ2luZS5jCkBAIC0wLDAgKzEsNDA4IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisvKgorICogVGhpcyBjb2RlIGltcGxlbWVudHMgdGhlIERNQSBzdWJzeXN0ZW0uIEl0IHByb3ZpZGVzIGEgSFctbmV1dHJhbCBpbnRlcmZhY2UKKyAqIGZvciBvdGhlciBrZXJuZWwgY29kZSB0byB1c2UgYXN5bmNocm9ub3VzIG1lbW9yeSBjb3B5IGNhcGFiaWxpdGllcywKKyAqIGlmIHByZXNlbnQsIGFuZCBhbGxvd3MgZGlmZmVyZW50IEhXIERNQSBkcml2ZXJzIHRvIHJlZ2lzdGVyIGFzIHByb3ZpZGluZworICogdGhpcyBjYXBhYmlsaXR5LgorICoKKyAqIER1ZSB0byB0aGUgZmFjdCB3ZSBhcmUgYWNjZWxlcmF0aW5nIHdoYXQgaXMgYWxyZWFkeSBhIHJlbGF0aXZlbHkgZmFzdAorICogb3BlcmF0aW9uLCB0aGUgY29kZSBnb2VzIHRvIGdyZWF0IGxlbmd0aHMgdG8gYXZvaWQgYWRkaXRpb25hbCBvdmVyaGVhZCwKKyAqIHN1Y2ggYXMgbG9ja2luZy4KKyAqCisgKiBMT0NLSU5HOgorICoKKyAqIFRoZSBzdWJzeXN0ZW0ga2VlcHMgdHdvIGdsb2JhbCBsaXN0cywgZG1hX2RldmljZV9saXN0IGFuZCBkbWFfY2xpZW50X2xpc3QuCisgKiBCb3RoIG9mIHRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgYSBtdXRleCwgZG1hX2xpc3RfbXV0ZXguCisgKgorICogRWFjaCBkZXZpY2UgaGFzIGEgY2hhbm5lbHMgbGlzdCwgd2hpY2ggcnVucyB1bmxvY2tlZCBidXQgaXMgbmV2ZXIgbW9kaWZpZWQKKyAqIG9uY2UgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCBpdCdzIGp1c3Qgc2V0dXAgYnkgdGhlIGRyaXZlci4KKyAqCisgKiBFYWNoIGNsaWVudCBoYXMgYSBjaGFubmVscyBsaXN0LCBpdCdzIG9ubHkgbW9kaWZpZWQgdW5kZXIgdGhlIGNsaWVudC0+bG9jaworICogYW5kIGluIGFuIFJDVSBjYWxsYmFjaywgc28gaXQncyBzYWZlIHRvIHJlYWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLgorICoKKyAqIEVhY2ggZGV2aWNlIGhhcyBhIGtyZWYsIHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIDEgd2hlbiB0aGUgZGV2aWNlIGlzCisgKiByZWdpc3RlcmVkLiBBIGtyZWZfcHV0IGlzIGRvbmUgZm9yIGVhY2ggY2xhc3NfZGV2aWNlIHJlZ2lzdGVyZWQuICBXaGVuIHRoZQorICogY2xhc3NfZGV2aWNlIGlzIHJlbGVhc2VkLCB0aGUgY29yZXNwb25kaW5nIGtyZWZfcHV0IGlzIGRvbmUgaW4gdGhlIHJlbGVhc2UKKyAqIG1ldGhvZC4gRXZlcnkgdGltZSBvbmUgb2YgdGhlIGRldmljZSdzIGNoYW5uZWxzIGlzIGFsbG9jYXRlZCB0byBhIGNsaWVudCwKKyAqIGEga3JlZl9nZXQgb2NjdXJzLiAgV2hlbiB0aGUgY2hhbm5lbCBpcyBmcmVlZCwgdGhlIGNvcmVzcG9uZGluZyBrcmVmX3B1dAorICogaGFwcGVucy4gVGhlIGRldmljZSdzIHJlbGVhc2UgZnVuY3Rpb24gZG9lcyBhIGNvbXBsZXRpb24sIHNvCisgKiB1bnJlZ2lzdGVyX2RldmljZSBkb2VzIGEgcmVtb3ZlIGV2ZW50LCBjbGFzc19kZXZpY2VfdW5yZWdpc3RlciwgYSBrcmVmX3B1dAorICogZm9yIHRoZSBmaXJzdCByZWZlcmVuY2UsIHRoZW4gd2FpdHMgb24gdGhlIGNvbXBsZXRpb24gZm9yIGFsbCBvdGhlcgorICogcmVmZXJlbmNlcyB0byBmaW5pc2guCisgKgorICogRWFjaCBjaGFubmVsIGhhcyBhbiBvcGVuLWNvZGVkIGltcGxlbWVudGF0aW9uIG9mIFJ1c3R5IFJ1c3NlbGwncyAiYmlncmVmLCIKKyAqIHdpdGggYSBrcmVmIGFuZCBhIHBlcl9jcHUgbG9jYWxfdC4gIEEgc2luZ2xlIHJlZmVyZW5jZSBpcyBzZXQgd2hlbiBvbiBhbgorICogQURERUQgZXZlbnQsIGFuZCByZW1vdmVkIHdpdGggYSBSRU1PVkUgZXZlbnQuICBOZXQgRE1BIGNsaWVudCB0YWtlcyBhbgorICogZXh0cmEgcmVmZXJlbmNlIHBlciBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbi4gIFRoZSByZWxhc2UgZnVuY3Rpb24gZG9lcyBhCisgKiBrcmVmX3B1dCBvbiB0aGUgZGV2aWNlLiAtQ2hyaXNMCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZG1hX2xpc3RfbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChkbWFfZGV2aWNlX2xpc3QpOworc3RhdGljIExJU1RfSEVBRChkbWFfY2xpZW50X2xpc3QpOworCisvKiAtLS0gc3lzZnMgaW1wbGVtZW50YXRpb24gLS0tICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWVtY3B5X2NvdW50KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgZG1hX2NoYW4sIGNsYXNzX2Rldik7CisJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJY291bnQgKz0gcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGkpLT5tZW1jcHlfY291bnQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGNvdW50KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19ieXRlc190cmFuc2ZlcnJlZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IGRtYV9jaGFuLCBjbGFzc19kZXYpOworCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCWNvdW50ICs9IHBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBpKS0+Ynl0ZXNfdHJhbnNmZXJyZWQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGNvdW50KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19pbl91c2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCBkbWFfY2hhbiwgY2xhc3NfZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoY2hhbi0+Y2xpZW50ID8gMSA6IDApKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGRtYV9jbGFzc19hdHRyc1tdID0geworCV9fQVRUUihtZW1jcHlfY291bnQsIFNfSVJVR08sIHNob3dfbWVtY3B5X2NvdW50LCBOVUxMKSwKKwlfX0FUVFIoYnl0ZXNfdHJhbnNmZXJyZWQsIFNfSVJVR08sIHNob3dfYnl0ZXNfdHJhbnNmZXJyZWQsIE5VTEwpLAorCV9fQVRUUihpbl91c2UsIFNfSVJVR08sIHNob3dfaW5fdXNlLCBOVUxMKSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIHZvaWQgZG1hX2FzeW5jX2RldmljZV9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKTsKKworc3RhdGljIHZvaWQgZG1hX2NsYXNzX2Rldl9yZWxlYXNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IGRtYV9jaGFuLCBjbGFzc19kZXYpOworCWtyZWZfcHV0KCZjaGFuLT5kZXZpY2UtPnJlZmNvdW50LCBkbWFfYXN5bmNfZGV2aWNlX2NsZWFudXApOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzIGRtYV9kZXZjbGFzcyA9IHsKKwkubmFtZSAgICAgICAgICAgID0gImRtYSIsCisJLmNsYXNzX2Rldl9hdHRycyA9IGRtYV9jbGFzc19hdHRycywKKwkucmVsZWFzZSA9IGRtYV9jbGFzc19kZXZfcmVsZWFzZSwKK307CisKKy8qIC0tLSBjbGllbnQgYW5kIGRldmljZSByZWdpc3RyYXRpb24gLS0tICovCisKKy8qKgorICogZG1hX2NsaWVudF9jaGFuX2FsbG9jIC0gdHJ5IHRvIGFsbG9jYXRlIGEgY2hhbm5lbCB0byBhIGNsaWVudAorICogQGNsaWVudDogJmRtYV9jbGllbnQKKyAqCisgKiBDYWxsZWQgd2l0aCBkbWFfbGlzdF9tdXRleCBoZWxkLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpkbWFfY2xpZW50X2NoYW5fYWxsb2Moc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBkZXNjOwkvKiBhbGxvY2F0ZWQgZGVzY3JpcHRvciBjb3VudCAqLworCisJLyogRmluZCBhIGNoYW5uZWwsIGFueSBETUEgZW5naW5lIHdpbGwgZG8gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmRtYV9kZXZpY2VfbGlzdCwgZ2xvYmFsX25vZGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmZGV2aWNlLT5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKKwkJCWlmIChjaGFuLT5jbGllbnQpCisJCQkJY29udGludWU7CisKKwkJCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyhjaGFuKTsKKwkJCWlmIChkZXNjID49IDApIHsKKwkJCQlrcmVmX2dldCgmZGV2aWNlLT5yZWZjb3VudCk7CisJCQkJa3JlZl9pbml0KCZjaGFuLT5yZWZjb3VudCk7CisJCQkJY2hhbi0+c2xvd19yZWYgPSAwOworCQkJCUlOSVRfUkNVX0hFQUQoJmNoYW4tPnJjdSk7CisJCQkJY2hhbi0+Y2xpZW50ID0gY2xpZW50OworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJCQlsaXN0X2FkZF90YWlsX3JjdSgmY2hhbi0+Y2xpZW50X25vZGUsCisJCQkJICAgICAgICAgICAgICAgICAgJmNsaWVudC0+Y2hhbm5lbHMpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOworCQkJCXJldHVybiBjaGFuOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZG1hX2NsaWVudF9jaGFuX2ZyZWUgLSByZWxlYXNlIGEgRE1BIGNoYW5uZWwKKyAqIEBjaGFuOiAmZG1hX2NoYW4KKyAqLwordm9pZCBkbWFfY2hhbl9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZG1hX2NoYW4sIHJlZmNvdW50KTsKKwljaGFuLT5kZXZpY2UtPmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzKGNoYW4pOworCWNoYW4tPmNsaWVudCA9IE5VTEw7CisJa3JlZl9wdXQoJmNoYW4tPmRldmljZS0+cmVmY291bnQsIGRtYV9hc3luY19kZXZpY2VfY2xlYW51cCk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9jaGFuX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBkbWFfY2hhbiwgcmN1KTsKKwlpbnQgYmlhcyA9IDB4N0ZGRkZGRkY7CisJaW50IGk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCWJpYXMgLT0gbG9jYWxfcmVhZCgmcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGkpLT5yZWZjb3VudCk7CisJYXRvbWljX3N1YihiaWFzLCAmY2hhbi0+cmVmY291bnQucmVmY291bnQpOworCWtyZWZfcHV0KCZjaGFuLT5yZWZjb3VudCwgZG1hX2NoYW5fY2xlYW51cCk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9jbGllbnRfY2hhbl9mcmVlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlhdG9taWNfYWRkKDB4N0ZGRkZGRkYsICZjaGFuLT5yZWZjb3VudC5yZWZjb3VudCk7CisJY2hhbi0+c2xvd19yZWYgPSAxOworCWNhbGxfcmN1KCZjaGFuLT5yY3UsIGRtYV9jaGFuX2ZyZWVfcmN1KTsKK30KKworLyoqCisgKiBkbWFfY2hhbnNfcmViYWxhbmNlIC0gcmVhbGxvY2F0ZSBjaGFubmVscyB0byBjbGllbnRzCisgKgorICogV2hlbiB0aGUgbnVtYmVyIG9mIERNQSBjaGFubmVsIGluIHRoZSBzeXN0ZW0gY2hhbmdlcywKKyAqIGNoYW5uZWxzIG5lZWQgdG8gYmUgcmViYWxhbmNlZCBhbW9uZyBjbGllbnRzCisgKi8KK3N0YXRpYyB2b2lkIGRtYV9jaGFuc19yZWJhbGFuY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZkbWFfY2xpZW50X2xpc3QsIGdsb2JhbF9ub2RlKSB7CisJCXdoaWxlIChjbGllbnQtPmNoYW5zX2Rlc2lyZWQgPiBjbGllbnQtPmNoYW5fY291bnQpIHsKKwkJCWNoYW4gPSBkbWFfY2xpZW50X2NoYW5fYWxsb2MoY2xpZW50KTsKKwkJCWlmICghY2hhbikKKwkJCQlicmVhazsKKwkJCWNsaWVudC0+Y2hhbl9jb3VudCsrOworCQkJY2xpZW50LT5ldmVudF9jYWxsYmFjayhjbGllbnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfUkVTT1VSQ0VfQURERUQpOworCQl9CisJCXdoaWxlIChjbGllbnQtPmNoYW5zX2Rlc2lyZWQgPCBjbGllbnQtPmNoYW5fY291bnQpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJCWNoYW4gPSBsaXN0X2VudHJ5KGNsaWVudC0+Y2hhbm5lbHMubmV4dCwKKwkJCSAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfY2hhbiwKKwkJCSAgICAgICAgICAgICAgICAgIGNsaWVudF9ub2RlKTsKKwkJCWxpc3RfZGVsX3JjdSgmY2hhbi0+Y2xpZW50X25vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CisJCQljbGllbnQtPmNoYW5fY291bnQtLTsKKwkJCWNsaWVudC0+ZXZlbnRfY2FsbGJhY2soY2xpZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBjaGFuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBETUFfUkVTT1VSQ0VfUkVNT1ZFRCk7CisJCQlkbWFfY2xpZW50X2NoYW5fZnJlZShjaGFuKTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOworfQorCisvKioKKyAqIGRtYV9hc3luY19jbGllbnRfcmVnaXN0ZXIgLSBhbGxvY2F0ZSBhbmQgcmVnaXN0ZXIgYSAmZG1hX2NsaWVudAorICogQGV2ZW50X2NhbGxiYWNrOiBjYWxsYmFjayBmb3Igbm90aWZpY2F0aW9uIG9mIGNoYW5uZWwgYWRkaXRpb24vcmVtb3ZhbAorICovCitzdHJ1Y3QgZG1hX2NsaWVudCAqZG1hX2FzeW5jX2NsaWVudF9yZWdpc3RlcihkbWFfZXZlbnRfY2FsbGJhY2sgZXZlbnRfY2FsbGJhY2spCit7CisJc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudDsKKworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5jaGFubmVscyk7CisJc3Bpbl9sb2NrX2luaXQoJmNsaWVudC0+bG9jayk7CisJY2xpZW50LT5jaGFuc19kZXNpcmVkID0gMDsKKwljbGllbnQtPmNoYW5fY291bnQgPSAwOworCWNsaWVudC0+ZXZlbnRfY2FsbGJhY2sgPSBldmVudF9jYWxsYmFjazsKKworCW11dGV4X2xvY2soJmRtYV9saXN0X211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmdsb2JhbF9ub2RlLCAmZG1hX2NsaWVudF9saXN0KTsKKwltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKKworCXJldHVybiBjbGllbnQ7Cit9CisKKy8qKgorICogZG1hX2FzeW5jX2NsaWVudF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIGNsaWVudCBhbmQgZnJlZSB0aGUgJmRtYV9jbGllbnQKKyAqIEBjbGllbnQ6CisgKgorICogRm9yY2UgZnJlZXMgYW55IGFsbG9jYXRlZCBETUEgY2hhbm5lbHMsIGZyZWVzIHRoZSAmZG1hX2NsaWVudCBtZW1vcnkKKyAqLwordm9pZCBkbWFfYXN5bmNfY2xpZW50X3VucmVnaXN0ZXIoc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNoYW4sICZjbGllbnQtPmNoYW5uZWxzLCBjbGllbnRfbm9kZSkKKwkJZG1hX2NsaWVudF9jaGFuX2ZyZWUoY2hhbik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwltdXRleF9sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisJbGlzdF9kZWwoJmNsaWVudC0+Z2xvYmFsX25vZGUpOworCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCisJa2ZyZWUoY2xpZW50KTsKKwlkbWFfY2hhbnNfcmViYWxhbmNlKCk7Cit9CisKKy8qKgorICogZG1hX2FzeW5jX2NsaWVudF9jaGFuX3JlcXVlc3QgLSByZXF1ZXN0IERNQSBjaGFubmVscworICogQGNsaWVudDogJmRtYV9jbGllbnQKKyAqIEBudW1iZXI6IGNvdW50IG9mIERNQSBjaGFubmVscyByZXF1ZXN0ZWQKKyAqCisgKiBDbGllbnRzIGNhbGwgZG1hX2FzeW5jX2NsaWVudF9jaGFuX3JlcXVlc3QoKSB0byBzcGVjaWZ5IGhvdyBtYW55CisgKiBETUEgY2hhbm5lbHMgdGhleSBuZWVkLCAwIHRvIGZyZWUgYWxsIGN1cnJlbnRseSBhbGxvY2F0ZWQuCisgKiBUaGUgcmVzdWx0aW5nIGFsbG9jYXRpb25zL2ZyZWVzIGFyZSBpbmRpY2F0ZWQgdG8gdGhlIGNsaWVudCB2aWEgdGhlCisgKiBldmVudCBjYWxsYmFjay4KKyAqLwordm9pZCBkbWFfYXN5bmNfY2xpZW50X2NoYW5fcmVxdWVzdChzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50LAorCQkJdW5zaWduZWQgaW50IG51bWJlcikKK3sKKwljbGllbnQtPmNoYW5zX2Rlc2lyZWQgPSBudW1iZXI7CisJZG1hX2NoYW5zX3JlYmFsYW5jZSgpOworfQorCisvKioKKyAqIGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIgLQorICogQGRldmljZTogJmRtYV9kZXZpY2UKKyAqLworaW50IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRtYV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdGF0aWMgaW50IGlkOworCWludCBjaGFuY250ID0gMDsKKwlzdHJ1Y3QgZG1hX2NoYW4qIGNoYW47CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbml0X2NvbXBsZXRpb24oJmRldmljZS0+ZG9uZSk7CisJa3JlZl9pbml0KCZkZXZpY2UtPnJlZmNvdW50KTsKKwlkZXZpY2UtPmRldl9pZCA9IGlkKys7CisKKwkvKiByZXByZXNlbnQgY2hhbm5lbHMgaW4gc3lzZnMuIFByb2JhYmx5IHdhbnQgZGV2cyB0b28gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZkZXZpY2UtPmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgeworCQljaGFuLT5sb2NhbCA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKmNoYW4tPmxvY2FsKSk7CisJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJY2hhbi0+Y2hhbl9pZCA9IGNoYW5jbnQrKzsKKwkJY2hhbi0+Y2xhc3NfZGV2LmNsYXNzID0gJmRtYV9kZXZjbGFzczsKKwkJY2hhbi0+Y2xhc3NfZGV2LmRldiA9IE5VTEw7CisJCXNucHJpbnRmKGNoYW4tPmNsYXNzX2Rldi5jbGFzc19pZCwgQlVTX0lEX1NJWkUsICJkbWElZGNoYW4lZCIsCisJCSAgICAgICAgIGRldmljZS0+ZGV2X2lkLCBjaGFuLT5jaGFuX2lkKTsKKworCQlrcmVmX2dldCgmZGV2aWNlLT5yZWZjb3VudCk7CisJCWNsYXNzX2RldmljZV9yZWdpc3RlcigmY2hhbi0+Y2xhc3NfZGV2KTsKKwl9CisKKwltdXRleF9sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmZGV2aWNlLT5nbG9iYWxfbm9kZSwgJmRtYV9kZXZpY2VfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisKKwlkbWFfY2hhbnNfcmViYWxhbmNlKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIgLQorICogQGRldmljZTogJmRtYV9kZXZpY2UKKyAqLworc3RhdGljIHZvaWQgZG1hX2FzeW5jX2RldmljZV9jbGVhbnVwKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2U7CisKKwlkZXZpY2UgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRtYV9kZXZpY2UsIHJlZmNvdW50KTsKKwljb21wbGV0ZSgmZGV2aWNlLT5kb25lKTsKK30KKwordm9pZCBkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGRtYV9kZXZpY2UqIGRldmljZSkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmRtYV9saXN0X211dGV4KTsKKwlsaXN0X2RlbCgmZGV2aWNlLT5nbG9iYWxfbm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZkZXZpY2UtPmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgeworCQlpZiAoY2hhbi0+Y2xpZW50KSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CisJCQlsaXN0X2RlbCgmY2hhbi0+Y2xpZW50X25vZGUpOworCQkJY2hhbi0+Y2xpZW50LT5jaGFuX2NvdW50LS07CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5jbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJCWNoYW4tPmNsaWVudC0+ZXZlbnRfY2FsbGJhY2soY2hhbi0+Y2xpZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfUkVTT1VSQ0VfUkVNT1ZFRCk7CisJCQlkbWFfY2xpZW50X2NoYW5fZnJlZShjaGFuKTsKKwkJfQorCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmY2hhbi0+Y2xhc3NfZGV2KTsKKwl9CisJZG1hX2NoYW5zX3JlYmFsYW5jZSgpOworCisJa3JlZl9wdXQoJmRldmljZS0+cmVmY291bnQsIGRtYV9hc3luY19kZXZpY2VfY2xlYW51cCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZGV2aWNlLT5kb25lKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZG1hX2J1c19pbml0KHZvaWQpCit7CisJbXV0ZXhfaW5pdCgmZG1hX2xpc3RfbXV0ZXgpOworCXJldHVybiBjbGFzc19yZWdpc3RlcigmZG1hX2RldmNsYXNzKTsKK30KKworc3Vic3lzX2luaXRjYWxsKGRtYV9idXNfaW5pdCk7CisKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX2NsaWVudF9yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19jbGllbnRfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19jbGllbnRfY2hhbl9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX21lbWNweV9idWZfdG9fYnVmKTsKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcpOworRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfbWVtY3B5X3BnX3RvX3BnKTsKK0VYUE9SVF9TWU1CT0woZG1hX2FzeW5jX21lbWNweV9jb21wbGV0ZSk7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19tZW1jcHlfaXNzdWVfcGVuZGluZyk7CitFWFBPUlRfU1lNQk9MKGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChkbWFfY2hhbl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRkbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXRkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmRmN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYS5jCkBAIC0wLDAgKzEsODQwIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisvKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgYW4gSW50ZWwgSS9PQVQgRE1BIGVuZ2luZSwgd2hpY2ggZG9lcyBhc3luY2hyb25vdXMKKyAqIGNvcHkgb3BlcmF0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlICJpb2F0ZG1hLmgiCisjaW5jbHVkZSAiaW9hdGRtYV9pby5oIgorI2luY2x1ZGUgImlvYXRkbWFfcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAiaW9hdGRtYV9ody5oIgorCisjZGVmaW5lIHRvX2lvYXRfY2hhbihjaGFuKSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGlvYXRfZG1hX2NoYW4sIGNvbW1vbikKKyNkZWZpbmUgdG9faW9hdF9kZXZpY2UoZGV2KSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaW9hdF9kZXZpY2UsIGNvbW1vbikKKyNkZWZpbmUgdG9faW9hdF9kZXNjKGxoKSBjb250YWluZXJfb2YobGgsIHN0cnVjdCBpb2F0X2Rlc2Nfc3csIG5vZGUpCisKKy8qIGludGVybmFsIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBfX2RldmluaXQgaW9hdF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaW9hdF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCitzdGF0aWMgaW50IGVudW1lcmF0ZV9kbWFfY2hhbm5lbHMoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UpCit7CisJdTggeGZlcmNhcF9zY2FsZTsKKwl1MzIgeGZlcmNhcDsKKwlpbnQgaTsKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuOworCisJZGV2aWNlLT5jb21tb24uY2hhbmNudCA9IGlvYXRkbWFfcmVhZDgoZGV2aWNlLCBJT0FUX0NIQU5DTlRfT0ZGU0VUKTsKKwl4ZmVyY2FwX3NjYWxlID0gaW9hdGRtYV9yZWFkOChkZXZpY2UsIElPQVRfWEZFUkNBUF9PRkZTRVQpOworCXhmZXJjYXAgPSAoeGZlcmNhcF9zY2FsZSA9PSAwID8gLTEgOiAoMVVMIDw8IHhmZXJjYXBfc2NhbGUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPmNvbW1vbi5jaGFuY250OyBpKyspIHsKKwkJaW9hdF9jaGFuID0ga3phbGxvYyhzaXplb2YoKmlvYXRfY2hhbiksIEdGUF9LRVJORUwpOworCQlpZiAoIWlvYXRfY2hhbikgeworCQkJZGV2aWNlLT5jb21tb24uY2hhbmNudCA9IGk7CisJCQlicmVhazsKKwkJfQorCisJCWlvYXRfY2hhbi0+ZGV2aWNlID0gZGV2aWNlOworCQlpb2F0X2NoYW4tPnJlZ19iYXNlID0gZGV2aWNlLT5yZWdfYmFzZSArICgweDgwICogKGkgKyAxKSk7CisJCWlvYXRfY2hhbi0+eGZlcmNhcCA9IHhmZXJjYXA7CisJCXNwaW5fbG9ja19pbml0KCZpb2F0X2NoYW4tPmNsZWFudXBfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZpb2F0X2NoYW4tPmZyZWVfZGVzYyk7CisJCUlOSVRfTElTVF9IRUFEKCZpb2F0X2NoYW4tPnVzZWRfZGVzYyk7CisJCS8qIFRoaXMgc2hvdWxkIGJlIG1hZGUgY29tbW9uIHNvbWV3aGVyZSBpbiBkbWFlbmdpbmUuYyAqLworCQlpb2F0X2NoYW4tPmNvbW1vbi5kZXZpY2UgPSAmZGV2aWNlLT5jb21tb247CisJCWlvYXRfY2hhbi0+Y29tbW9uLmNsaWVudCA9IE5VTEw7CisJCWxpc3RfYWRkX3RhaWwoJmlvYXRfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlLAorCQkgICAgICAgICAgICAgICZkZXZpY2UtPmNvbW1vbi5jaGFubmVscyk7CisJfQorCXJldHVybiBkZXZpY2UtPmNvbW1vbi5jaGFuY250OworfQorCitzdGF0aWMgc3RydWN0IGlvYXRfZGVzY19zdyAqaW9hdF9kbWFfYWxsb2NfZGVzY3JpcHRvcigKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuLAorCWludCBmbGFncykKK3sKKwlzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpkZXNjX3N3OworCXN0cnVjdCBpb2F0X2RldmljZSAqaW9hdF9kZXZpY2U7CisJZG1hX2FkZHJfdCBwaHlzOworCisJaW9hdF9kZXZpY2UgPSB0b19pb2F0X2RldmljZShpb2F0X2NoYW4tPmNvbW1vbi5kZXZpY2UpOworCWRlc2MgPSBwY2lfcG9vbF9hbGxvYyhpb2F0X2RldmljZS0+ZG1hX3Bvb2wsIGZsYWdzLCAmcGh5cyk7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXNjX3N3ID0ga3phbGxvYyhzaXplb2YoKmRlc2Nfc3cpLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KCFkZXNjX3N3KSkgeworCQlwY2lfcG9vbF9mcmVlKGlvYXRfZGV2aWNlLT5kbWFfcG9vbCwgZGVzYywgcGh5cyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKKwlkZXNjX3N3LT5odyA9IGRlc2M7CisJZGVzY19zdy0+cGh5cyA9IHBoeXM7CisKKwlyZXR1cm4gZGVzY19zdzsKK30KKworI2RlZmluZSBJTklUSUFMX0lPQVRfREVTQ19DT1VOVCAxMjgKKworc3RhdGljIHZvaWQgaW9hdF9zdGFydF9udWxsX2Rlc2Moc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbik7CisKKy8qIHJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxsb2NhdGVkIGRlc2NyaXB0b3JzICovCitzdGF0aWMgaW50IGlvYXRfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCXN0cnVjdCBpb2F0X2Rlc2Nfc3cgKmRlc2MgPSBOVUxMOworCXUxNiBjaGFuY3RybDsKKwl1MzIgY2hhbmVycjsKKwlpbnQgaTsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyoKKwkgKiBJbi11c2UgYml0IGF1dG9tYXRpY2FsbHkgc2V0IGJ5IHJlYWRpbmcgY2hhbmN0cmwKKwkgKiBJZiAwLCB3ZSBnb3QgaXQsIGlmIDEsIHNvbWVvbmUgZWxzZSBkaWQKKwkgKi8KKwljaGFuY3RybCA9IGlvYXRkbWFfY2hhbl9yZWFkMTYoaW9hdF9jaGFuLCBJT0FUX0NIQU5DVFJMX09GRlNFVCk7CisJaWYgKGNoYW5jdHJsICYgSU9BVF9DSEFOQ1RSTF9DSEFOTkVMX0lOX1VTRSkKKwkJcmV0dXJuIC1FQlVTWTsKKworICAgICAgICAvKiBTZXR1cCByZWdpc3RlciB0byBpbnRlcnJ1cHQgYW5kIHdyaXRlIGNvbXBsZXRpb24gc3RhdHVzIG9uIGVycm9yICovCisJY2hhbmN0cmwgPSBJT0FUX0NIQU5DVFJMX0NIQU5ORUxfSU5fVVNFIHwKKwkJSU9BVF9DSEFOQ1RSTF9FUlJfSU5UX0VOIHwKKwkJSU9BVF9DSEFOQ1RSTF9BTllfRVJSX0FCT1JUX0VOIHwKKwkJSU9BVF9DSEFOQ1RSTF9FUlJfQ09NUExFVElPTl9FTjsKKyAgICAgICAgaW9hdGRtYV9jaGFuX3dyaXRlMTYoaW9hdF9jaGFuLCBJT0FUX0NIQU5DVFJMX09GRlNFVCwgY2hhbmN0cmwpOworCisJY2hhbmVyciA9IGlvYXRkbWFfY2hhbl9yZWFkMzIoaW9hdF9jaGFuLCBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKwlpZiAoY2hhbmVycikgeworCQlwcmludGsoIklPQVQ6IENIQU5FUlIgPSAleCwgY2xlYXJpbmdcbiIsIGNoYW5lcnIpOworCQlpb2F0ZG1hX2NoYW5fd3JpdGUzMihpb2F0X2NoYW4sIElPQVRfQ0hBTkVSUl9PRkZTRVQsIGNoYW5lcnIpOworCX0KKworCS8qIEFsbG9jYXRlIGRlc2NyaXB0b3JzICovCisJZm9yIChpID0gMDsgaSA8IElOSVRJQUxfSU9BVF9ERVNDX0NPVU5UOyBpKyspIHsKKwkJZGVzYyA9IGlvYXRfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoaW9hdF9jaGFuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkZXNjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIklPQVQ6IE9ubHkgJWQgaW5pdGlhbCBkZXNjcmlwdG9yc1xuIiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZkZXNjLT5ub2RlLCAmdG1wX2xpc3QpOworCX0KKwlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKwlsaXN0X3NwbGljZSgmdG1wX2xpc3QsICZpb2F0X2NoYW4tPmZyZWVfZGVzYyk7CisJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKworCS8qIGFsbG9jYXRlIGEgY29tcGxldGlvbiB3cml0ZWJhY2sgYXJlYSAqLworCS8qIGRvaW5nIDIgMzJiaXQgd3JpdGVzIHRvIG1taW8gc2luY2UgMSA2NGIgd3JpdGUgZG9lc24ndCB3b3JrICovCisJaW9hdF9jaGFuLT5jb21wbGV0aW9uX3ZpcnQgPQorCQlwY2lfcG9vbF9hbGxvYyhpb2F0X2NoYW4tPmRldmljZS0+Y29tcGxldGlvbl9wb29sLAorCQkgICAgICAgICAgICAgICBHRlBfS0VSTkVMLAorCQkgICAgICAgICAgICAgICAmaW9hdF9jaGFuLT5jb21wbGV0aW9uX2FkZHIpOworCW1lbXNldChpb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydCwgMCwKKwkgICAgICAgc2l6ZW9mKCppb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydCkpOworCWlvYXRkbWFfY2hhbl93cml0ZTMyKGlvYXRfY2hhbiwgSU9BVF9DSEFOQ01QX09GRlNFVF9MT1csCisJICAgICAgICAgICAgICAgKCh1NjQpIGlvYXRfY2hhbi0+Y29tcGxldGlvbl9hZGRyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJaW9hdGRtYV9jaGFuX3dyaXRlMzIoaW9hdF9jaGFuLCBJT0FUX0NIQU5DTVBfT0ZGU0VUX0hJR0gsCisJICAgICAgICAgICAgICAgKCh1NjQpIGlvYXRfY2hhbi0+Y29tcGxldGlvbl9hZGRyKSA+PiAzMik7CisKKwlpb2F0X3N0YXJ0X251bGxfZGVzYyhpb2F0X2NoYW4pOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBpb2F0X2RtYV9tZW1jcHlfY2xlYW51cChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuKTsKKworc3RhdGljIHZvaWQgaW9hdF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiA9IHRvX2lvYXRfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgaW9hdF9kZXZpY2UgKmlvYXRfZGV2aWNlID0gdG9faW9hdF9kZXZpY2UoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpkZXNjLCAqX2Rlc2M7CisJdTE2IGNoYW5jdHJsOworCWludCBpbl91c2VfZGVzY3MgPSAwOworCisJaW9hdF9kbWFfbWVtY3B5X2NsZWFudXAoaW9hdF9jaGFuKTsKKworCWlvYXRkbWFfY2hhbl93cml0ZTgoaW9hdF9jaGFuLCBJT0FUX0NIQU5DTURfT0ZGU0VULCBJT0FUX0NIQU5DTURfUkVTRVQpOworCisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmaW9hdF9jaGFuLT51c2VkX2Rlc2MsIG5vZGUpIHsKKwkJaW5fdXNlX2Rlc2NzKys7CisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKwkJcGNpX3Bvb2xfZnJlZShpb2F0X2RldmljZS0+ZG1hX3Bvb2wsIGRlc2MtPmh3LCBkZXNjLT5waHlzKTsKKwkJa2ZyZWUoZGVzYyk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJmlvYXRfY2hhbi0+ZnJlZV9kZXNjLCBub2RlKSB7CisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKwkJcGNpX3Bvb2xfZnJlZShpb2F0X2RldmljZS0+ZG1hX3Bvb2wsIGRlc2MtPmh3LCBkZXNjLT5waHlzKTsKKwkJa2ZyZWUoZGVzYyk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisKKwlwY2lfcG9vbF9mcmVlKGlvYXRfZGV2aWNlLT5jb21wbGV0aW9uX3Bvb2wsCisJICAgICAgICAgICAgICBpb2F0X2NoYW4tPmNvbXBsZXRpb25fdmlydCwKKwkgICAgICAgICAgICAgIGlvYXRfY2hhbi0+Y29tcGxldGlvbl9hZGRyKTsKKworCS8qIG9uZSBpcyBvayBzaW5jZSB3ZSBsZWZ0IGl0IG9uIHRoZXJlIG9uIHB1cnBvc2UgKi8KKwlpZiAoaW5fdXNlX2Rlc2NzID4gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICJJT0FUOiBGcmVlaW5nICVkIGluIHVzZSBkZXNjcmlwdG9ycyFcbiIsCisJCQlpbl91c2VfZGVzY3MgLSAxKTsKKworCWlvYXRfY2hhbi0+bGFzdF9jb21wbGV0aW9uID0gaW9hdF9jaGFuLT5jb21wbGV0aW9uX2FkZHIgPSAwOworCisJLyogVGVsbCBodyB0aGUgY2hhbiBpcyBmcmVlICovCisJY2hhbmN0cmwgPSBpb2F0ZG1hX2NoYW5fcmVhZDE2KGlvYXRfY2hhbiwgSU9BVF9DSEFOQ1RSTF9PRkZTRVQpOworCWNoYW5jdHJsICY9IH5JT0FUX0NIQU5DVFJMX0NIQU5ORUxfSU5fVVNFOworCWlvYXRkbWFfY2hhbl93cml0ZTE2KGlvYXRfY2hhbiwgSU9BVF9DSEFOQ1RSTF9PRkZTRVQsIGNoYW5jdHJsKTsKK30KKworLyoqCisgKiBkb19pb2F0X2RtYV9tZW1jcHkgLSBhY3R1YWwgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgYSBJT0FUIERNQSB0cmFuc2FjdGlvbgorICogQGNoYW46IElPQVQgRE1BIGNoYW5uZWwgaGFuZGxlCisgKiBAZGVzdDogRE1BIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBzcmM6IERNQSBzb3VyY2UgYWRkcmVzcworICogQGxlbjogdHJhbnNhY3Rpb24gbGVuZ3RoIGluIGJ5dGVzCisgKi8KKworc3RhdGljIGRtYV9jb29raWVfdCBkb19pb2F0X2RtYV9tZW1jcHkoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3QgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3Qgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpmaXJzdDsKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpwcmV2OworCXN0cnVjdCBpb2F0X2Rlc2Nfc3cgKm5ldzsKKwlkbWFfY29va2llX3QgY29va2llOworCUxJU1RfSEVBRChuZXdfY2hhaW4pOworCXUzMiBjb3B5OworCXNpemVfdCBvcmlnX2xlbjsKKwlkbWFfYWRkcl90IG9yaWdfc3JjLCBvcmlnX2RzdDsKKwl1bnNpZ25lZCBpbnQgZGVzY19jb3VudCA9IDA7CisJdW5zaWduZWQgaW50IGFwcGVuZCA9IDA7CisKKwlpZiAoIWlvYXRfY2hhbiB8fCAhZGVzdCB8fCAhc3JjKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghbGVuKQorCQlyZXR1cm4gaW9hdF9jaGFuLT5jb21tb24uY29va2llOworCisJb3JpZ19sZW4gPSBsZW47CisJb3JpZ19zcmMgPSBzcmM7CisJb3JpZ19kc3QgPSBkZXN0OworCisJZmlyc3QgPSBOVUxMOworCXByZXYgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisKKwl3aGlsZSAobGVuKSB7CisJCWlmICghbGlzdF9lbXB0eSgmaW9hdF9jaGFuLT5mcmVlX2Rlc2MpKSB7CisJCQluZXcgPSB0b19pb2F0X2Rlc2MoaW9hdF9jaGFuLT5mcmVlX2Rlc2MubmV4dCk7CisJCQlsaXN0X2RlbCgmbmV3LT5ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHRyeSB0byBnZXQgYW5vdGhlciBkZXNjICovCisJCQluZXcgPSBpb2F0X2RtYV9hbGxvY19kZXNjcmlwdG9yKGlvYXRfY2hhbiwgR0ZQX0FUT01JQyk7CisJCQkvKiB3aWxsIHRoaXMgZXZlciBoYXBwZW4/ICovCisJCQkvKiBUT0RPIGFkZCB1cHBlciBsaW1pdCBvbiB0aGVzZSAqLworCQkJQlVHX09OKCFuZXcpOworCQl9CisKKwkJY29weSA9IG1pbigodTMyKSBsZW4sIGlvYXRfY2hhbi0+eGZlcmNhcCk7CisKKwkJbmV3LT5ody0+c2l6ZSA9IGNvcHk7CisJCW5ldy0+aHctPmN0bCA9IDA7CisJCW5ldy0+aHctPnNyY19hZGRyID0gc3JjOworCQluZXctPmh3LT5kc3RfYWRkciA9IGRlc3Q7CisJCW5ldy0+Y29va2llID0gMDsKKworCQkvKiBjaGFpbiB0b2dldGhlciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBsaXN0IGZvciB0aGUgSFcgKi8KKwkJaWYgKCFmaXJzdCkKKwkJCWZpcnN0ID0gbmV3OworCQllbHNlCisJCQlwcmV2LT5ody0+bmV4dCA9ICh1NjQpIG5ldy0+cGh5czsKKworCQlwcmV2ID0gbmV3OworCisJCWxlbiAgLT0gY29weTsKKwkJZGVzdCArPSBjb3B5OworCQlzcmMgICs9IGNvcHk7CisKKwkJbGlzdF9hZGRfdGFpbCgmbmV3LT5ub2RlLCAmbmV3X2NoYWluKTsKKwkJZGVzY19jb3VudCsrOworCX0KKwluZXctPmh3LT5jdGwgPSBJT0FUX0RNQV9ERVNDUklQVE9SX0NUTF9DUF9TVFM7CisJbmV3LT5ody0+bmV4dCA9IDA7CisKKwkvKiBjb29raWUgaW5jciBhbmQgYWRkaXRpb24gdG8gdXNlZF9saXN0IG11c3QgYmUgYXRvbWljICovCisKKwljb29raWUgPSBpb2F0X2NoYW4tPmNvbW1vbi5jb29raWU7CisJY29va2llKys7CisJaWYgKGNvb2tpZSA8IDApCisJCWNvb2tpZSA9IDE7CisJaW9hdF9jaGFuLT5jb21tb24uY29va2llID0gbmV3LT5jb29raWUgPSBjb29raWU7CisKKwlwY2lfdW5tYXBfYWRkcl9zZXQobmV3LCBzcmMsIG9yaWdfc3JjKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQobmV3LCBkc3QsIG9yaWdfZHN0KTsKKwlwY2lfdW5tYXBfbGVuX3NldChuZXcsIHNyY19sZW4sIG9yaWdfbGVuKTsKKwlwY2lfdW5tYXBfbGVuX3NldChuZXcsIGRzdF9sZW4sIG9yaWdfbGVuKTsKKworCS8qIHdyaXRlIGFkZHJlc3MgaW50byBOZXh0RGVzY3JpcHRvciBmaWVsZCBvZiBsYXN0IGRlc2MgaW4gY2hhaW4gKi8KKwl0b19pb2F0X2Rlc2MoaW9hdF9jaGFuLT51c2VkX2Rlc2MucHJldiktPmh3LT5uZXh0ID0gZmlyc3QtPnBoeXM7CisJbGlzdF9zcGxpY2VfaW5pdCgmbmV3X2NoYWluLCBpb2F0X2NoYW4tPnVzZWRfZGVzYy5wcmV2KTsKKworCWlvYXRfY2hhbi0+cGVuZGluZyArPSBkZXNjX2NvdW50OworCWlmIChpb2F0X2NoYW4tPnBlbmRpbmcgPj0gMjApIHsKKwkJYXBwZW5kID0gMTsKKwkJaW9hdF9jaGFuLT5wZW5kaW5nID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOworCisJaWYgKGFwcGVuZCkKKwkJaW9hdGRtYV9jaGFuX3dyaXRlOChpb2F0X2NoYW4sCisJCSAgICAgICAgICAgICAgICAgICAgSU9BVF9DSEFOQ01EX09GRlNFVCwKKwkJICAgICAgICAgICAgICAgICAgICBJT0FUX0NIQU5DTURfQVBQRU5EKTsKKwlyZXR1cm4gY29va2llOworfQorCisvKioKKyAqIGlvYXRfZG1hX21lbWNweV9idWZfdG9fYnVmIC0gd3JhcHBlciB0aGF0IHRha2VzIHNyYyAmIGRlc3QgYnVmcworICogQGNoYW46IElPQVQgRE1BIGNoYW5uZWwgaGFuZGxlCisgKiBAZGVzdDogRE1BIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBzcmM6IERNQSBzb3VyY2UgYWRkcmVzcworICogQGxlbjogdHJhbnNhY3Rpb24gbGVuZ3RoIGluIGJ5dGVzCisgKi8KKworc3RhdGljIGRtYV9jb29raWVfdCBpb2F0X2RtYV9tZW1jcHlfYnVmX3RvX2J1ZihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikKK3sKKwlkbWFfYWRkcl90IGRlc3RfYWRkcjsKKwlkbWFfYWRkcl90IHNyY19hZGRyOworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4oY2hhbik7CisKKwlkZXN0X2FkZHIgPSBwY2lfbWFwX3NpbmdsZShpb2F0X2NoYW4tPmRldmljZS0+cGRldiwKKwkJZGVzdCwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXNyY19hZGRyID0gcGNpX21hcF9zaW5nbGUoaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYsCisJCXNyYywgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCXJldHVybiBkb19pb2F0X2RtYV9tZW1jcHkoaW9hdF9jaGFuLCBkZXN0X2FkZHIsIHNyY19hZGRyLCBsZW4pOworfQorCisvKioKKyAqIGlvYXRfZG1hX21lbWNweV9idWZfdG9fcGcgLSB3cmFwcGVyLCBjb3B5aW5nIGZyb20gYSBidWYgdG8gYSBwYWdlCisgKiBAY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKKyAqIEBwYWdlOiBwb2ludGVyIHRvIHRoZSBwYWdlIHRvIGNvcHkgdG8KKyAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoYXQgcGFnZQorICogQHNyYzogRE1BIHNvdXJjZSBhZGRyZXNzCisgKiBAbGVuOiB0cmFuc2FjdGlvbiBsZW5ndGggaW4gYnl0ZXMKKyAqLworCitzdGF0aWMgZG1hX2Nvb2tpZV90IGlvYXRfZG1hX21lbWNweV9idWZfdG9fcGcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisJZG1hX2FkZHJfdCBkZXN0X2FkZHI7CisJZG1hX2FkZHJfdCBzcmNfYWRkcjsKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCisJZGVzdF9hZGRyID0gcGNpX21hcF9wYWdlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlwYWdlLCBvZmZzZXQsIGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlzcmNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlzcmMsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlyZXR1cm4gZG9faW9hdF9kbWFfbWVtY3B5KGlvYXRfY2hhbiwgZGVzdF9hZGRyLCBzcmNfYWRkciwgbGVuKTsKK30KKworLyoqCisgKiBpb2F0X2RtYV9tZW1jcHlfcGdfdG9fcGcgLSB3cmFwcGVyLCBjb3B5aW5nIGJldHdlZW4gdHdvIHBhZ2VzCisgKiBAY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKKyAqIEBkZXN0X3BnOiBwb2ludGVyIHRvIHRoZSBwYWdlIHRvIGNvcHkgdG8KKyAqIEBkZXN0X29mZjogb2Zmc2V0IGludG8gdGhhdCBwYWdlCisgKiBAc3JjX3BnOiBwb2ludGVyIHRvIHRoZSBwYWdlIHRvIGNvcHkgZnJvbQorICogQHNyY19vZmY6IG9mZnNldCBpbnRvIHRoYXQgcGFnZQorICogQGxlbjogdHJhbnNhY3Rpb24gbGVuZ3RoIGluIGJ5dGVzLiBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gbm90IG1ha2UgYSBjb3B5CisgKgkgYWNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAqLworCitzdGF0aWMgZG1hX2Nvb2tpZV90IGlvYXRfZG1hX21lbWNweV9wZ190b19wZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqZGVzdF9wZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0X29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICpzcmNfcGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3JjX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCit7CisJZG1hX2FkZHJfdCBkZXN0X2FkZHI7CisJZG1hX2FkZHJfdCBzcmNfYWRkcjsKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCisJZGVzdF9hZGRyID0gcGNpX21hcF9wYWdlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlkZXN0X3BnLCBkZXN0X29mZiwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXNyY19hZGRyID0gcGNpX21hcF9wYWdlKGlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LAorCQlzcmNfcGcsIHNyY19vZmYsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlyZXR1cm4gZG9faW9hdF9kbWFfbWVtY3B5KGlvYXRfY2hhbiwgZGVzdF9hZGRyLCBzcmNfYWRkciwgbGVuKTsKK30KKworLyoqCisgKiBpb2F0X2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyAtIHB1c2ggcG90ZW50aWFsbHkgdW5yZWNvZ25vaXplZCBhcHBlbmRlZCBkZXNjcmlwdG9ycyB0byBodworICogQGNoYW46IERNQSBjaGFubmVsIGhhbmRsZQorICovCisKK3N0YXRpYyB2b2lkIGlvYXRfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOworCisJaWYgKGlvYXRfY2hhbi0+cGVuZGluZyAhPSAwKSB7CisJCWlvYXRfY2hhbi0+cGVuZGluZyA9IDA7CisJCWlvYXRkbWFfY2hhbl93cml0ZTgoaW9hdF9jaGFuLAorCQkgICAgICAgICAgICAgICAgICAgIElPQVRfQ0hBTkNNRF9PRkZTRVQsCisJCSAgICAgICAgICAgICAgICAgICAgSU9BVF9DSEFOQ01EX0FQUEVORCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpb2F0X2RtYV9tZW1jcHlfY2xlYW51cChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXNfY29tcGxldGU7CisJc3RydWN0IGlvYXRfZGVzY19zdyAqZGVzYywgKl9kZXNjOworCWRtYV9jb29raWVfdCBjb29raWUgPSAwOworCisJcHJlZmV0Y2goY2hhbi0+Y29tcGxldGlvbl92aXJ0KTsKKworCWlmICghc3Bpbl90cnlsb2NrKCZjaGFuLT5jbGVhbnVwX2xvY2spKQorCQlyZXR1cm47CisKKwkvKiBUaGUgY29tcGxldGlvbiB3cml0ZWJhY2sgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSwKKwkgICBzbyByZWFkcyBieSB0aGUgZHJpdmVyIG5lZWQgdG8gYmUgYXRvbWljIG9wZXJhdGlvbnMKKwkgICBUaGUgZGVzY3JpcHRvciBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlIGxpbWl0ZWQgdG8gMzItYml0cworCSAgIHdoZW4gdGhlIENQVSBjYW4gb25seSBkbyBhIDMyLWJpdCBtb3YgKi8KKworI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQorCXBoeXNfY29tcGxldGUgPQorCWNoYW4tPmNvbXBsZXRpb25fdmlydC0+ZnVsbCAmIElPQVRfQ0hBTlNUU19DT01QTEVURURfREVTQ1JJUFRPUl9BRERSOworI2Vsc2UKKwlwaHlzX2NvbXBsZXRlID0gY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5sb3cgJiBJT0FUX0xPV19DT01QTEVUSU9OX01BU0s7CisjZW5kaWYKKworCWlmICgoY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5mdWxsICYgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVMpID09CisJCUlPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTX0hBTFRFRCkgeworCQlwcmludGsoIklPQVQ6IENoYW5uZWwgaGFsdGVkLCBjaGFuZXJyID0gJXhcbiIsCisJCQlpb2F0ZG1hX2NoYW5fcmVhZDMyKGNoYW4sIElPQVRfQ0hBTkVSUl9PRkZTRVQpKTsKKworCQkvKiBUT0RPIGRvIHNvbWV0aGluZyB0byBzYWx2YWdlIHRoZSBzaXR1YXRpb24gKi8KKwl9CisKKwlpZiAocGh5c19jb21wbGV0ZSA9PSBjaGFuLT5sYXN0X2NvbXBsZXRpb24pIHsKKwkJc3Bpbl91bmxvY2soJmNoYW4tPmNsZWFudXBfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmNoYW4tPmRlc2NfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmY2hhbi0+dXNlZF9kZXNjLCBub2RlKSB7CisKKwkJLyoKKwkJICogSW5jb21pbmcgRE1BIHJlcXVlc3RzIG1heSB1c2UgbXVsdGlwbGUgZGVzY3JpcHRvcnMsIGR1ZSB0bworCQkgKiBleGNlZWRpbmcgeGZlcmNhcCwgcGVyaGFwcy4gSWYgc28sIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwKKwkJICogaGF2ZSBhIGNvb2tpZSwgYW5kIHJlcXVpcmUgdW5tYXBwaW5nLgorCQkgKi8KKwkJaWYgKGRlc2MtPmNvb2tpZSkgeworCQkJY29va2llID0gZGVzYy0+Y29va2llOworCisJCQkvKiB5ZXMgd2UgYXJlIHVubWFwcGluZyBib3RoIF9wYWdlIGFuZCBfc2luZ2xlIGFsbG9jJ2QKKwkJCSAgIHJlZ2lvbnMgd2l0aCB1bm1hcF9wYWdlLiBJcyB0aGlzICpyZWFsbHkqIHRoYXQgYmFkPworCQkJKi8KKwkJCXBjaV91bm1hcF9wYWdlKGNoYW4tPmRldmljZS0+cGRldiwKKwkJCQkJcGNpX3VubWFwX2FkZHIoZGVzYywgZHN0KSwKKwkJCQkJcGNpX3VubWFwX2xlbihkZXNjLCBkc3RfbGVuKSwKKwkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXBjaV91bm1hcF9wYWdlKGNoYW4tPmRldmljZS0+cGRldiwKKwkJCQkJcGNpX3VubWFwX2FkZHIoZGVzYywgc3JjKSwKKwkJCQkJcGNpX3VubWFwX2xlbihkZXNjLCBzcmNfbGVuKSwKKwkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCX0KKworCQlpZiAoZGVzYy0+cGh5cyAhPSBwaHlzX2NvbXBsZXRlKSB7CisJCQkvKiBhIGNvbXBsZXRlZCBlbnRyeSwgYnV0IG5vdCB0aGUgbGFzdCwgc28gY2xlYW51cCAqLworCQkJbGlzdF9kZWwoJmRlc2MtPm5vZGUpOworCQkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmNoYW4tPmZyZWVfZGVzYyk7CisJCX0gZWxzZSB7CisJCQkvKiBsYXN0IHVzZWQgZGVzYy4gRG8gbm90IHJlbW92ZSwgc28gd2UgY2FuIGFwcGVuZCBmcm9tCisJCQkgICBpdCwgYnV0IGRvbid0IGxvb2sgYXQgaXQgbmV4dCB0aW1lLCBlaXRoZXIgKi8KKwkJCWRlc2MtPmNvb2tpZSA9IDA7CisKKwkJCS8qIFRPRE8gY2hlY2sgc3RhdHVzIGJpdHM/ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZjaGFuLT5kZXNjX2xvY2spOworCisJY2hhbi0+bGFzdF9jb21wbGV0aW9uID0gcGh5c19jb21wbGV0ZTsKKwlpZiAoY29va2llICE9IDApCisJCWNoYW4tPmNvbXBsZXRlZF9jb29raWUgPSBjb29raWU7CisKKwlzcGluX3VubG9jaygmY2hhbi0+Y2xlYW51cF9sb2NrKTsKK30KKworLyoqCisgKiBpb2F0X2RtYV9pc19jb21wbGV0ZSAtIHBvbGwgdGhlIHN0YXR1cyBvZiBhIElPQVQgRE1BIHRyYW5zYWN0aW9uCisgKiBAY2hhbjogSU9BVCBETUEgY2hhbm5lbCBoYW5kbGUKKyAqIEBjb29raWU6IERNQSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgKi8KKworc3RhdGljIGVudW0gZG1hX3N0YXR1cyBpb2F0X2RtYV9pc19jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jb29raWVfdCBjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jb29raWVfdCAqZG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2Nvb2tpZV90ICp1c2VkKQoreworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4oY2hhbik7CisJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKKwlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKKwllbnVtIGRtYV9zdGF0dXMgcmV0OworCisJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOworCWxhc3RfY29tcGxldGUgPSBpb2F0X2NoYW4tPmNvbXBsZXRlZF9jb29raWU7CisKKwlpZiAoZG9uZSkKKwkJKmRvbmU9IGxhc3RfY29tcGxldGU7CisJaWYgKHVzZWQpCisJCSp1c2VkID0gbGFzdF91c2VkOworCisJcmV0ID0gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKKwlpZiAocmV0ID09IERNQV9TVUNDRVNTKQorCQlyZXR1cm4gcmV0OworCisJaW9hdF9kbWFfbWVtY3B5X2NsZWFudXAoaW9hdF9jaGFuKTsKKworCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKKwlsYXN0X2NvbXBsZXRlID0gaW9hdF9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCisJaWYgKGRvbmUpCisJCSpkb25lPSBsYXN0X2NvbXBsZXRlOworCWlmICh1c2VkKQorCQkqdXNlZCA9IGxhc3RfdXNlZDsKKworCXJldHVybiBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOworfQorCisvKiBQQ0kgQVBJICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpb2F0X3BjaV90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUKSB9LAorCXsgMCwgfQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlvYXRfcGNpX2RydiA9IHsKKwkubmFtZSAJPSAiaW9hdGRtYSIsCisJLmlkX3RhYmxlID0gaW9hdF9wY2lfdGJsLAorCS5wcm9iZQk9IGlvYXRfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGlvYXRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpb2F0X2RvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaW9hdF9kZXZpY2UgKmluc3RhbmNlID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGF0dG5zdGF0dXM7CisJdTggaW50cmN0cmw7CisKKwlpbnRyY3RybCA9IGlvYXRkbWFfcmVhZDgoaW5zdGFuY2UsIElPQVRfSU5UUkNUUkxfT0ZGU0VUKTsKKworCWlmICghKGludHJjdHJsICYgSU9BVF9JTlRSQ1RSTF9NQVNURVJfSU5UX0VOKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKCEoaW50cmN0cmwgJiBJT0FUX0lOVFJDVFJMX0lOVF9TVEFUVVMpKSB7CisJCWlvYXRkbWFfd3JpdGU4KGluc3RhbmNlLCBJT0FUX0lOVFJDVFJMX09GRlNFVCwgaW50cmN0cmwpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJYXR0bnN0YXR1cyA9IGlvYXRkbWFfcmVhZDMyKGluc3RhbmNlLCBJT0FUX0FUVE5TVEFUVVNfT0ZGU0VUKTsKKworCXByaW50ayhLRVJOX0VSUiAiaW9hdGRtYSBlcnJvcjogaW50ZXJydXB0ISBzdGF0dXMgJWx4XG4iLCBhdHRuc3RhdHVzKTsKKworCWlvYXRkbWFfd3JpdGU4KGluc3RhbmNlLCBJT0FUX0lOVFJDVFJMX09GRlNFVCwgaW50cmN0cmwpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgaW9hdF9zdGFydF9udWxsX2Rlc2Moc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbikKK3sKKwlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpkZXNjOworCisJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmlvYXRfY2hhbi0+ZnJlZV9kZXNjKSkgeworCQlkZXNjID0gdG9faW9hdF9kZXNjKGlvYXRfY2hhbi0+ZnJlZV9kZXNjLm5leHQpOworCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7CisJfSBlbHNlIHsKKwkJLyogdHJ5IHRvIGdldCBhbm90aGVyIGRlc2MgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKwkJZGVzYyA9IGlvYXRfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoaW9hdF9jaGFuLCBHRlBfS0VSTkVMKTsKKwkJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CisJCS8qIHdpbGwgdGhpcyBldmVyIGhhcHBlbj8gKi8KKwkJQlVHX09OKCFkZXNjKTsKKwl9CisKKwlkZXNjLT5ody0+Y3RsID0gSU9BVF9ETUFfREVTQ1JJUFRPUl9OVUw7CisJZGVzYy0+aHctPm5leHQgPSAwOworCisJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmlvYXRfY2hhbi0+dXNlZF9kZXNjKTsKKwlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5kZXNjX2xvY2spOworCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCisJaW9hdGRtYV9jaGFuX3dyaXRlNjQoaW9hdF9jaGFuLCBJT0FUX0NIQUlOQUREUl9PRkZTRVQsIGRlc2MtPnBoeXMpOworI2Vsc2UKKwlpb2F0ZG1hX2NoYW5fd3JpdGUzMihpb2F0X2NoYW4sCisJICAgICAgICAgICAgICAgICAgICAgSU9BVF9DSEFJTkFERFJfT0ZGU0VUX0xPVywKKwkgICAgICAgICAgICAgICAgICAgICAodTMyKSBkZXNjLT5waHlzKTsKKwlpb2F0ZG1hX2NoYW5fd3JpdGUzMihpb2F0X2NoYW4sIElPQVRfQ0hBSU5BRERSX09GRlNFVF9ISUdILCAwKTsKKyNlbmRpZgorCWlvYXRkbWFfY2hhbl93cml0ZTgoaW9hdF9jaGFuLCBJT0FUX0NIQU5DTURfT0ZGU0VULCBJT0FUX0NIQU5DTURfU1RBUlQpOworfQorCisvKgorICogUGVyZm9ybSBhIElPQVQgdHJhbnNhY3Rpb24gdG8gdmVyaWZ5IHRoZSBIVyB3b3Jrcy4KKyAqLworI2RlZmluZSBJT0FUX1RFU1RfU0laRSAyMDAwCisKK3N0YXRpYyBpbnQgaW9hdF9zZWxmX3Rlc3Qoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGk7CisJdTggKnNyYzsKKwl1OCAqZGVzdDsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuOworCWRtYV9jb29raWVfdCBjb29raWU7CisJaW50IGVyciA9IDA7CisKKwlzcmMgPSBremFsbG9jKHNpemVvZih1OCkgKiBJT0FUX1RFU1RfU0laRSwgU0xBQl9LRVJORUwpOworCWlmICghc3JjKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXN0ID0ga3phbGxvYyhzaXplb2YodTgpICogSU9BVF9URVNUX1NJWkUsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWRlc3QpIHsKKwkJa2ZyZWUoc3JjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogRmlsbCBpbiBzcmMgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IElPQVRfVEVTVF9TSVpFOyBpKyspCisJCXNyY1tpXSA9ICh1OClpOworCisJLyogU3RhcnQgY29weSwgdXNpbmcgZmlyc3QgRE1BIGNoYW5uZWwgKi8KKwlkbWFfY2hhbiA9IGNvbnRhaW5lcl9vZihkZXZpY2UtPmNvbW1vbi5jaGFubmVscy5uZXh0LAorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfY2hhbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Vfbm9kZSk7CisJaWYgKGlvYXRfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKGRtYV9jaGFuKSA8IDEpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJY29va2llID0gaW9hdF9kbWFfbWVtY3B5X2J1Zl90b19idWYoZG1hX2NoYW4sIGRlc3QsIHNyYywgSU9BVF9URVNUX1NJWkUpOworCWlvYXRfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKGRtYV9jaGFuKTsKKwltc2xlZXAoMSk7CisKKwlpZiAoaW9hdF9kbWFfaXNfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb2F0ZG1hOiBTZWxmLXRlc3QgY29weSB0aW1lZCBvdXQsIGRpc2FibGluZ1xuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9yZXNvdXJjZXM7CisJfQorCWlmIChtZW1jbXAoc3JjLCBkZXN0LCBJT0FUX1RFU1RfU0laRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb2F0ZG1hOiBTZWxmLXRlc3QgY29weSBmYWlsZWQgY29tcGFyZSwgZGlzYWJsaW5nXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3Jlc291cmNlczsKKwl9CisKK2ZyZWVfcmVzb3VyY2VzOgorCWlvYXRfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoZG1hX2NoYW4pOworb3V0OgorCWtmcmVlKHNyYyk7CisJa2ZyZWUoZGVzdCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaW9hdF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47CisJdm9pZCAqcmVnX2Jhc2U7CisJc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2U7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9lbmFibGVfZGV2aWNlOworCisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJaWYgKGVycikKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc2V0X2RtYV9tYXNrOworCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBpb2F0X3BjaV9kcnYubmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVxdWVzdF9yZWdpb25zOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwlyZWdfYmFzZSA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWlmICghcmVnX2Jhc2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlkZXZpY2UgPSBremFsbG9jKHNpemVvZigqZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZpY2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfa3phbGxvYzsKKwl9CisKKwkvKiBETUEgY29oZXJlbnQgbWVtb3J5IHBvb2wgZm9yIERNQSBkZXNjcmlwdG9yIGFsbG9jYXRpb25zICovCisJZGV2aWNlLT5kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgiZG1hX2Rlc2NfcG9vbCIsIHBkZXYsCisJCXNpemVvZihzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciksIDY0LCAwKTsKKwlpZiAoIWRldmljZS0+ZG1hX3Bvb2wpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZG1hX3Bvb2w7CisJfQorCisJZGV2aWNlLT5jb21wbGV0aW9uX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImNvbXBsZXRpb25fcG9vbCIsIHBkZXYsIHNpemVvZih1NjQpLCBTTVBfQ0FDSEVfQllURVMsIFNNUF9DQUNIRV9CWVRFUyk7CisJaWYgKCFkZXZpY2UtPmNvbXBsZXRpb25fcG9vbCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9jb21wbGV0aW9uX3Bvb2w7CisJfQorCisJZGV2aWNlLT5wZGV2ID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2aWNlKTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWlmIChwY2lfZW5hYmxlX21zaShwZGV2KSA9PSAwKSB7CisJCWRldmljZS0+bXNpID0gMTsKKwl9IGVsc2UgeworCQlkZXZpY2UtPm1zaSA9IDA7CisJfQorI2VuZGlmCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCAmaW9hdF9kb19pbnRlcnJ1cHQsIFNBX1NISVJRLCAiaW9hdCIsCisJCWRldmljZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfaXJxOworCisJZGV2aWNlLT5yZWdfYmFzZSA9IHJlZ19iYXNlOworCisJaW9hdGRtYV93cml0ZTgoZGV2aWNlLCBJT0FUX0lOVFJDVFJMX09GRlNFVCwgSU9BVF9JTlRSQ1RSTF9NQVNURVJfSU5UX0VOKTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCUlOSVRfTElTVF9IRUFEKCZkZXZpY2UtPmNvbW1vbi5jaGFubmVscyk7CisJZW51bWVyYXRlX2RtYV9jaGFubmVscyhkZXZpY2UpOworCisJZGV2aWNlLT5jb21tb24uZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gaW9hdF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZGV2aWNlLT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBpb2F0X2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCWRldmljZS0+Y29tbW9uLmRldmljZV9tZW1jcHlfYnVmX3RvX2J1ZiA9IGlvYXRfZG1hX21lbWNweV9idWZfdG9fYnVmOworCWRldmljZS0+Y29tbW9uLmRldmljZV9tZW1jcHlfYnVmX3RvX3BnID0gaW9hdF9kbWFfbWVtY3B5X2J1Zl90b19wZzsKKwlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfbWVtY3B5X3BnX3RvX3BnID0gaW9hdF9kbWFfbWVtY3B5X3BnX3RvX3BnOworCWRldmljZS0+Y29tbW9uLmRldmljZV9tZW1jcHlfY29tcGxldGUgPSBpb2F0X2RtYV9pc19jb21wbGV0ZTsKKwlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfbWVtY3B5X2lzc3VlX3BlbmRpbmcgPSBpb2F0X2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKKwlwcmludGsoS0VSTl9JTkZPICJJbnRlbChSKSBJL09BVCBETUEgRW5naW5lIGZvdW5kLCAlZCBjaGFubmVsc1xuIiwKKwkJZGV2aWNlLT5jb21tb24uY2hhbmNudCk7CisKKwllcnIgPSBpb2F0X3NlbGZfdGVzdChkZXZpY2UpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3NlbGZfdGVzdDsKKworCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmRldmljZS0+Y29tbW9uKTsKKworCXJldHVybiAwOworCitlcnJfc2VsZl90ZXN0OgorZXJyX2lycToKKwlwY2lfcG9vbF9kZXN0cm95KGRldmljZS0+Y29tcGxldGlvbl9wb29sKTsKK2Vycl9jb21wbGV0aW9uX3Bvb2w6CisJcGNpX3Bvb2xfZGVzdHJveShkZXZpY2UtPmRtYV9wb29sKTsKK2Vycl9kbWFfcG9vbDoKKwlrZnJlZShkZXZpY2UpOworZXJyX2t6YWxsb2M6CisJaW91bm1hcChyZWdfYmFzZSk7CitlcnJfaW9yZW1hcDoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX3JlcXVlc3RfcmVnaW9uczoKK2Vycl9zZXRfZG1hX21hc2s6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyX2VuYWJsZV9kZXZpY2U6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGlvYXRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpb2F0X2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgKl9jaGFuOworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW47CisKKwlkZXZpY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZkZXZpY2UtPmNvbW1vbik7CisKKwlmcmVlX2lycShkZXZpY2UtPnBkZXYtPmlycSwgZGV2aWNlKTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWlmIChkZXZpY2UtPm1zaSkKKwkJcGNpX2Rpc2FibGVfbXNpKGRldmljZS0+cGRldik7CisjZW5kaWYKKwlwY2lfcG9vbF9kZXN0cm95KGRldmljZS0+ZG1hX3Bvb2wpOworCXBjaV9wb29sX2Rlc3Ryb3koZGV2aWNlLT5jb21wbGV0aW9uX3Bvb2wpOworCWlvdW5tYXAoZGV2aWNlLT5yZWdfYmFzZSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYW4sIF9jaGFuLCAmZGV2aWNlLT5jb21tb24uY2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CisJCWlvYXRfY2hhbiA9IHRvX2lvYXRfY2hhbihjaGFuKTsKKwkJbGlzdF9kZWwoJmNoYW4tPmRldmljZV9ub2RlKTsKKwkJa2ZyZWUoaW9hdF9jaGFuKTsKKwl9CisJa2ZyZWUoZGV2aWNlKTsKK30KKworLyogTU9EVUxFIEFQSSAqLworTU9EVUxFX1ZFUlNJT04oIjEuNyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKKworc3RhdGljIGludCBfX2luaXQgaW9hdF9pbml0X21vZHVsZSh2b2lkKQoreworCS8qIGl0J3MgY3VycmVudGx5IHVuc2FmZSB0byB1bmxvYWQgdGhpcyBtb2R1bGUgKi8KKwkvKiBpZiBmb3JjZWQsIHdvcnN0IGNhc2UgaXMgdGhhdCBybW1vZCBoYW5ncyAqLworCWlmIChUSElTX01PRFVMRSAhPSBOVUxMKQorCQlUSElTX01PRFVMRS0+dW5zYWZlID0gMTsKKworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmlvYXRfcGNpX2Rydik7Cit9CisKK21vZHVsZV9pbml0KGlvYXRfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgaW9hdF9leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaW9hdF9wY2lfZHJ2KTsKK30KKworbW9kdWxlX2V4aXQoaW9hdF9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hLmggYi9kcml2ZXJzL2RtYS9pb2F0ZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkM2IzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWEuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKyNpZm5kZWYgSU9BVERNQV9ICisjZGVmaW5lIElPQVRETUFfSAorCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSAiaW9hdGRtYV9ody5oIgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisKKyNkZWZpbmUgSU9BVF9MT1dfQ09NUExFVElPTl9NQVNLCTB4ZmZmZmZmYzAKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZG1hX2RldmljZV9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZG1hX2NsaWVudF9saXN0OworCisvKioKKyAqIHN0cnVjdCBpb2F0X2RldmljZSAtIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgSU9BVCBkZXZpY2UKKyAqIEBwZGV2OiBQQ0ktRXhwcmVzcyBkZXZpY2UKKyAqIEByZWdfYmFzZTogTU1JTyByZWdpc3RlciBzcGFjZSBiYXNlIGFkZHJlc3MKKyAqIEBkbWFfcG9vbDogZm9yIGFsbG9jYXRpbmcgRE1BIGRlc2NyaXB0b3JzCisgKiBAY29tbW9uOiBlbWJlZGRlZCBzdHJ1Y3QgZG1hX2RldmljZQorICogQG1zaTogTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgbnVtYmVyCisgKi8KKworc3RydWN0IGlvYXRfZGV2aWNlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl2b2lkICpyZWdfYmFzZTsKKwlzdHJ1Y3QgcGNpX3Bvb2wgKmRtYV9wb29sOworCXN0cnVjdCBwY2lfcG9vbCAqY29tcGxldGlvbl9wb29sOworCisJc3RydWN0IGRtYV9kZXZpY2UgY29tbW9uOworCXU4IG1zaTsKK307CisKKy8qKgorICogc3RydWN0IGlvYXRfZG1hX2NoYW4gLSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIERNQSBjaGFubmVsCisgKiBAZGV2aWNlOgorICogQHJlZ19iYXNlOgorICogQHN3X2luX3VzZToKKyAqIEBjb21wbGV0aW9uOgorICogQGNvbXBsZXRpb25fbG93OgorICogQGNvbXBsZXRpb25faGlnaDoKKyAqIEBjb21wbGV0ZWRfY29va2llOiBsYXN0IGNvb2tpZSBzZWVuIGNvbXBsZXRlZCBvbiBjbGVhbnVwCisgKiBAY29va2llOiB2YWx1ZSBvZiBsYXN0IGNvb2tpZSBnaXZlbiB0byBjbGllbnQKKyAqIEBsYXN0X2NvbXBsZXRpb246CisgKiBAeGZlcmNhcDoKKyAqIEBkZXNjX2xvY2s6CisgKiBAZnJlZV9kZXNjOgorICogQHVzZWRfZGVzYzoKKyAqIEByZXNvdXJjZToKKyAqIEBkZXZpY2Vfbm9kZToKKyAqLworCitzdHJ1Y3QgaW9hdF9kbWFfY2hhbiB7CisKKwl2b2lkICpyZWdfYmFzZTsKKworCWRtYV9jb29raWVfdCBjb21wbGV0ZWRfY29va2llOworCXVuc2lnbmVkIGxvbmcgbGFzdF9jb21wbGV0aW9uOworCisJdTMyIHhmZXJjYXA7CS8qIFhGRVJDQVAgcmVnaXN0ZXIgdmFsdWUgZXhwYW5kZWQgb3V0ICovCisKKwlzcGlubG9ja190IGNsZWFudXBfbG9jazsKKwlzcGlubG9ja190IGRlc2NfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfZGVzYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWRfZGVzYzsKKworCWludCBwZW5kaW5nOworCisJc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGRtYV9jaGFuIGNvbW1vbjsKKworCWRtYV9hZGRyX3QgY29tcGxldGlvbl9hZGRyOworCXVuaW9uIHsKKwkJdTY0IGZ1bGw7IC8qIEhXIGNvbXBsZXRpb24gd3JpdGViYWNrICovCisJCXN0cnVjdCB7CisJCQl1MzIgbG93OworCQkJdTMyIGhpZ2g7CisJCX07CisJfSAqY29tcGxldGlvbl92aXJ0OworfTsKKworLyogd3JhcHBlciBhcm91bmQgaGFyZHdhcmUgZGVzY3JpcHRvciBmb3JtYXQgKyBhZGRpdGlvbmFsIHNvZnR3YXJlIGZpZWxkcyAqLworCisvKioKKyAqIHN0cnVjdCBpb2F0X2Rlc2Nfc3cgLSB3cmFwcGVyIGFyb3VuZCBoYXJkd2FyZSBkZXNjcmlwdG9yCisgKiBAaHc6IGhhcmR3YXJlIERNQSBkZXNjcmlwdG9yCisgKiBAbm9kZToKKyAqIEBjb29raWU6CisgKiBAcGh5czoKKyAqLworCitzdHJ1Y3QgaW9hdF9kZXNjX3N3IHsKKwlzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciAqaHc7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCWRtYV9jb29raWVfdCBjb29raWU7CisJZG1hX2FkZHJfdCBwaHlzOworCURFQ0xBUkVfUENJX1VOTUFQX0FERFIoc3JjKQorCURFQ0xBUkVfUENJX1VOTUFQX0xFTihzcmNfbGVuKQorCURFQ0xBUkVfUENJX1VOTUFQX0FERFIoZHN0KQorCURFQ0xBUkVfUENJX1VOTUFQX0xFTihkc3RfbGVuKQorfTsKKworI2VuZGlmIC8qIElPQVRETUFfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmggYi9kcml2ZXJzL2RtYS9pb2F0ZG1hX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3YTEyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfaHcuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworI2lmbmRlZiBfSU9BVF9IV19IXworI2RlZmluZSBfSU9BVF9IV19IXworCisvKiBQQ0kgQ29uZmlndXJhdGlvbiBTcGFjZSBWYWx1ZXMgKi8KKyNkZWZpbmUgSU9BVF9QQ0lfVklECQkJMHg4MDg2CisjZGVmaW5lIElPQVRfUENJX0RJRAkJCTB4MUEzOAorI2RlZmluZSBJT0FUX1BDSV9SSUQJCQkweDAwCisjZGVmaW5lIElPQVRfUENJX1NWSUQJCQkweDgwODYKKyNkZWZpbmUgSU9BVF9QQ0lfU0lECQkJMHg4MDg2CisjZGVmaW5lIElPQVRfVkVSCQkJMHgxMgkvKiBWZXJzaW9uIDEuMiAqLworCitzdHJ1Y3QgaW9hdF9kbWFfZGVzY3JpcHRvciB7CisJdWludDMyX3QJc2l6ZTsKKwl1aW50MzJfdAljdGw7CisJdWludDY0X3QJc3JjX2FkZHI7CisJdWludDY0X3QJZHN0X2FkZHI7CisJdWludDY0X3QJbmV4dDsKKwl1aW50NjRfdAlyc3YxOworCXVpbnQ2NF90CXJzdjI7CisJdWludDY0X3QJdXNlcjE7CisJdWludDY0X3QJdXNlcjI7Cit9OworCisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0lOVF9HTgkweDAwMDAwMDAxCisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX1NSQ19TTgkweDAwMDAwMDAyCisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0RTVF9TTgkweDAwMDAwMDA0CisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0NQX1NUUwkweDAwMDAwMDA4CisjZGVmaW5lIElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0ZSQU1FCTB4MDAwMDAwMTAKKyNkZWZpbmUgSU9BVF9ETUFfREVTQ1JJUFRPUl9OVUwJCTB4MDAwMDAwMjAKKyNkZWZpbmUgSU9BVF9ETUFfREVTQ1JJUFRPUl9PUENPREUJMHhGRjAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRkbWFfaW8uaCBiL2RyaXZlcnMvZG1hL2lvYXRkbWFfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI0YmY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9pby5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworI2lmbmRlZiBJT0FURE1BX0lPX0gKKyNkZWZpbmUgSU9BVERNQV9JT19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIGRldmljZSBhbmQgcGVyLWNoYW5uZWwgTU1JTyByZWdpc3RlciByZWFkIGFuZCB3cml0ZSBmdW5jdGlvbnMKKyAqIHRoaXMgaXMgYSBsb3Qgb2YgYW5veWluZyBpbmxpbmUgZnVuY3Rpb25zLCBidXQgaXQncyB0eXBlc2FmZQorICovCisKK3N0YXRpYyBpbmxpbmUgdTggaW9hdGRtYV9yZWFkOChzdHJ1Y3QgaW9hdF9kZXZpY2UgKmRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkYihkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaW9hdGRtYV9yZWFkMTYoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkdyhkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaW9hdGRtYV9yZWFkMzIoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlvYXRkbWFfd3JpdGU4KHN0cnVjdCBpb2F0X2RldmljZSAqZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHU4IHZhbHVlKQoreworCXdyaXRlYih2YWx1ZSwgZGV2aWNlLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2F0ZG1hX3dyaXRlMTYoc3RydWN0IGlvYXRfZGV2aWNlICpkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHUxNiB2YWx1ZSkKK3sKKwl3cml0ZXcodmFsdWUsIGRldmljZS0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV93cml0ZTMyKHN0cnVjdCBpb2F0X2RldmljZSAqZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCBkZXZpY2UtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1OCBpb2F0ZG1hX2NoYW5fcmVhZDgoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkYihjaGFuLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGlvYXRkbWFfY2hhbl9yZWFkMTYoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWR3KGNoYW4tPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaW9hdGRtYV9jaGFuX3JlYWQzMihzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV9jaGFuX3dyaXRlOChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHU4IHZhbHVlKQoreworCXdyaXRlYih2YWx1ZSwgY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV9jaGFuX3dyaXRlMTYoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdTE2IHZhbHVlKQoreworCXdyaXRldyh2YWx1ZSwgY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9hdGRtYV9jaGFuX3dyaXRlMzIoc3RydWN0IGlvYXRfZG1hX2NoYW4gKmNoYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHZhbHVlKQoreworCXdyaXRlbCh2YWx1ZSwgY2hhbi0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCitzdGF0aWMgaW5saW5lIHU2NCBpb2F0ZG1hX2NoYW5fcmVhZDY0KHN0cnVjdCBpb2F0X2RtYV9jaGFuICpjaGFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiByZWFkcShjaGFuLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb2F0ZG1hX2NoYW5fd3JpdGU2NChzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqY2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1NjQgdmFsdWUpCit7CisJd3JpdGVxKHZhbHVlLCBjaGFuLT5yZWdfYmFzZSArIG9mZnNldCk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIElPQVRETUFfSU9fSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0ZG1hX3JlZ2lzdGVycy5oIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWEyMWFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYV9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKyNpZm5kZWYgX0lPQVRfUkVHSVNURVJTX0hfCisjZGVmaW5lIF9JT0FUX1JFR0lTVEVSU19IXworCisKKy8qIE1NSU8gRGV2aWNlIFJlZ2lzdGVycyAqLworI2RlZmluZSBJT0FUX0NIQU5DTlRfT0ZGU0VUCQkJMHgwMAkvKiAgOC1iaXQgKi8KKworI2RlZmluZSBJT0FUX1hGRVJDQVBfT0ZGU0VUCQkJMHgwMQkvKiAgOC1iaXQgKi8KKyNkZWZpbmUgSU9BVF9YRkVSQ0FQXzRLQgkJCTEyCisjZGVmaW5lIElPQVRfWEZFUkNBUF84S0IJCQkxMworI2RlZmluZSBJT0FUX1hGRVJDQVBfMTZLQgkJCTE0CisjZGVmaW5lIElPQVRfWEZFUkNBUF8zMktCCQkJMTUKKyNkZWZpbmUgSU9BVF9YRkVSQ0FQXzMyR0IJCQkwCisKKyNkZWZpbmUgSU9BVF9HRU5DVFJMX09GRlNFVAkJCTB4MDIJLyogIDgtYml0ICovCisjZGVmaW5lIElPQVRfR0VOQ1RSTF9ERUJVR19FTgkJCTB4MDEKKworI2RlZmluZSBJT0FUX0lOVFJDVFJMX09GRlNFVAkJCTB4MDMJLyogIDgtYml0ICovCisjZGVmaW5lIElPQVRfSU5UUkNUUkxfTUFTVEVSX0lOVF9FTgkJMHgwMQkvKiBNYXN0ZXIgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJT0FUX0lOVFJDVFJMX0lOVF9TVEFUVVMJCTB4MDIJLyogQVRUTlNUQVRVUyAtb3ItIENoYW5uZWwgSW50ICovCisjZGVmaW5lIElPQVRfSU5UUkNUUkxfSU5UCQkJMHgwNAkvKiBJTlRfU1RBVFVTIC1hbmQtIE1BU1RFUl9JTlRfRU4gKi8KKworI2RlZmluZSBJT0FUX0FUVE5TVEFUVVNfT0ZGU0VUCQkJMHgwNAkvKiBFYWNoIGJpdCBpcyBhIGNoYW5uZWwgKi8KKworI2RlZmluZSBJT0FUX1ZFUl9PRkZTRVQJCQkJMHgwOAkvKiAgOC1iaXQgKi8KKyNkZWZpbmUgSU9BVF9WRVJfTUFKT1JfTUFTSwkJCTB4RjAKKyNkZWZpbmUgSU9BVF9WRVJfTUlOT1JfTUFTSwkJCTB4MEYKKyNkZWZpbmUgR0VUX0lPQVRfVkVSX01BSk9SKHgpCQkJKCh4KSAmIElPQVRfVkVSX01BSk9SX01BU0spCisjZGVmaW5lIEdFVF9JT0FUX1ZFUl9NSU5PUih4KQkJCSgoeCkgJiBJT0FUX1ZFUl9NSU5PUl9NQVNLKQorCisjZGVmaW5lIElPQVRfUEVSUE9SVE9GRlNFVF9PRkZTRVQJCTB4MEEJLyogMTYtYml0ICovCisKKyNkZWZpbmUgSU9BVF9JTlRSREVMQVlfT0ZGU0VUCQkJMHgwQwkvKiAxNi1iaXQgKi8KKyNkZWZpbmUgSU9BVF9JTlRSREVMQVlfSU5UX0RFTEFZX01BU0sJCTB4M0ZGRgkvKiBJbnRlcnJ1cHQgRGVsYXkgVGltZSAqLworI2RlZmluZSBJT0FUX0lOVFJERUxBWV9DT0FMRVNFX1NVUFBPUlQJCTB4ODAwMAkvKiBJbnRlcnJ1cHQgQ29hbGVzaW5nIFN1cHBvcnRlZCAqLworCisjZGVmaW5lIElPQVRfREVWSUNFX1NUQVRVU19PRkZTRVQJCTB4MEUJLyogMTYtYml0ICovCisjZGVmaW5lIElPQVRfREVWSUNFX1NUQVRVU19ERUdSQURFRF9NT0RFCTB4MDAwMQorCisKKyNkZWZpbmUgSU9BVF9DSEFOTkVMX01NSU9fU0laRQkJCTB4ODAJLyogRWFjaCBDaGFubmVsIE1NSU8gc3BhY2UgaXMgdGhpcyBzaXplICovCisKKy8qIERNQSBDaGFubmVsIFJlZ2lzdGVycyAqLworI2RlZmluZSBJT0FUX0NIQU5DVFJMX09GRlNFVAkJCTB4MDAJLyogMTYtYml0IENoYW5uZWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NIQU5DVFJMX0NIQU5ORUxfUFJJT1JJVFlfTUFTSwkweEYwMDAKKyNkZWZpbmUgSU9BVF9DSEFOQ1RSTF9DSEFOTkVMX0lOX1VTRQkJMHgwMTAwCisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfREVTQ1JJUFRPUl9BRERSX1NOT09QX0NPTlRST0wJMHgwMDIwCisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfRVJSX0lOVF9FTgkJMHgwMDEwCisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfQU5ZX0VSUl9BQk9SVF9FTgkJMHgwMDA4CisjZGVmaW5lIElPQVRfQ0hBTkNUUkxfRVJSX0NPTVBMRVRJT05fRU4JCTB4MDAwNAorI2RlZmluZSBJT0FUX0NIQU5DVFJMX0lOVF9ESVNBQkxFCQkweDAwMDEKKworI2RlZmluZSBJT0FUX0RNQV9DT01QX09GRlNFVAkJCTB4MDIJLyogMTYtYml0IERNQSBjaGFubmVsIGNvbXBhdGFiaWxpdHkgKi8KKyNkZWZpbmUgSU9BVF9ETUFfQ09NUF9WMQkJCTB4MDAwMQkvKiBDb21wYXRhYmlsaXR5IHdpdGggRE1BIHZlcnNpb24gMSAqLworCisjZGVmaW5lIElPQVRfQ0hBTlNUU19PRkZTRVQJCQkweDA0CS8qIDY0LWJpdCBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NIQU5TVFNfT0ZGU0VUX0xPVwkJCTB4MDQKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX09GRlNFVF9ISUdICQkweDA4CisjZGVmaW5lIElPQVRfQ0hBTlNUU19DT01QTEVURURfREVTQ1JJUFRPUl9BRERSCTB4RkZGRkZGRkZGRkZGRkZDMAorI2RlZmluZSBJT0FUX0NIQU5TVFNfU09GVF9FUlIJCQkweDAwMDAwMDAwMDAwMDAwMTAKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVMJMHgwMDAwMDAwMDAwMDAwMDA3CisjZGVmaW5lIElPQVRfQ0hBTlNUU19ETUFfVFJBTlNGRVJfU1RBVFVTX0FDVElWRQkweDAKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVNfRE9ORQkweDEKKyNkZWZpbmUgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVNfU1VTUEVOREVECTB4MgorI2RlZmluZSBJT0FUX0NIQU5TVFNfRE1BX1RSQU5TRkVSX1NUQVRVU19IQUxURUQJMHgzCisKKyNkZWZpbmUgSU9BVF9DSEFJTkFERFJfT0ZGU0VUCQkJMHgwQwkvKiA2NC1iaXQgRGVzY3JpcHRvciBDaGFpbiBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIElPQVRfQ0hBSU5BRERSX09GRlNFVF9MT1cJCTB4MEMKKyNkZWZpbmUgSU9BVF9DSEFJTkFERFJfT0ZGU0VUX0hJR0gJCTB4MTAKKworI2RlZmluZSBJT0FUX0NIQU5DTURfT0ZGU0VUCQkJMHgxNAkvKiAgOC1iaXQgRE1BIENoYW5uZWwgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NIQU5DTURfUkVTRVQJCQkweDIwCisjZGVmaW5lIElPQVRfQ0hBTkNNRF9SRVNVTUUJCQkweDEwCisjZGVmaW5lIElPQVRfQ0hBTkNNRF9BQk9SVAkJCTB4MDgKKyNkZWZpbmUgSU9BVF9DSEFOQ01EX1NVU1BFTkQJCQkweDA0CisjZGVmaW5lIElPQVRfQ0hBTkNNRF9BUFBFTkQJCQkweDAyCisjZGVmaW5lIElPQVRfQ0hBTkNNRF9TVEFSVAkJCTB4MDEKKworI2RlZmluZSBJT0FUX0NIQU5DTVBfT0ZGU0VUCQkJMHgxOAkvKiA2NC1iaXQgQ2hhbm5lbCBDb21wbGV0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU9BVF9DSEFOQ01QX09GRlNFVF9MT1cJCQkweDE4CisjZGVmaW5lIElPQVRfQ0hBTkNNUF9PRkZTRVRfSElHSAkJMHgxQworCisjZGVmaW5lIElPQVRfQ0RBUl9PRkZTRVQJCQkweDIwCS8qIDY0LWJpdCBDdXJyZW50IERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBJT0FUX0NEQVJfT0ZGU0VUX0xPVwkJCTB4MjAKKyNkZWZpbmUgSU9BVF9DREFSX09GRlNFVF9ISUdICQkJMHgyNAorCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9PRkZTRVQJCQkweDI4CS8qIDMyLWJpdCBDaGFubmVsIEVycm9yIFJlZ2lzdGVyICovCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9ETUFfVFJBTlNGRVJfU1JDX0FERFJfRVJSCTB4MDAwMQorI2RlZmluZSBJT0FUX0NIQU5FUlJfRE1BX1RSQU5TRkVSX0RFU1RfQUREUl9FUlIJMHgwMDAyCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9ORVhUX0RFU0NSSVBUT1JfQUREUl9FUlIJMHgwMDA0CisjZGVmaW5lIElPQVRfQ0hBTkVSUl9ORVhUX0RFU0NSSVBUT1JfQUxJR05NRU5UX0VSUgkweDAwMDgKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0NIQUlOX0FERFJfVkFMVUVfRVJSCTB4MDAxMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfQ0hBTkNNRF9FUlIJCTB4MDAyMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfQ0hJUFNFVF9VTkNPUlJFQ1RBQkxFX0RBVEFfSU5URUdSSVRZX0VSUgkweDAwNDAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0RNQV9VTkNPUlJFQ1RBQkxFX0RBVEFfSU5URUdSSVRZX0VSUgkweDAwODAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX1JFQURfREFUQV9FUlIJCTB4MDEwMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfV1JJVEVfREFUQV9FUlIJCTB4MDIwMAorI2RlZmluZSBJT0FUX0NIQU5FUlJfREVTQ1JJUFRPUl9DT05UUk9MX0VSUgkweDA0MDAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0RFU0NSSVBUT1JfTEVOR1RIX0VSUgkweDA4MDAKKyNkZWZpbmUgSU9BVF9DSEFORVJSX0NPTVBMRVRJT05fQUREUl9FUlIJMHgxMDAwCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9JTlRfQ09ORklHVVJBVElPTl9FUlIJMHgyMDAwCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9TT0ZUX0VSUgkJCTB4NDAwMAorCisjZGVmaW5lIElPQVRfQ0hBTkVSUl9NQVNLX09GRlNFVAkJMHgyQwkvKiAzMi1iaXQgQ2hhbm5lbCBFcnJvciBSZWdpc3RlciAqLworCisjZW5kaWYgLyogX0lPQVRfUkVHSVNURVJTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb3Zsb2NrLmMgYi9kcml2ZXJzL2RtYS9pb3Zsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkMzI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL2lvdmxvY2suYwpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIGJhc2VkIG9uIG5ldC9jb3JlL2RhdGFncmFtLmMgYW5kIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKy8qCisgKiBUaGlzIGNvZGUgYWxsb3dzIHRoZSBuZXQgc3RhY2sgdG8gbWFrZSB1c2Ugb2YgYSBETUEgZW5naW5lIGZvcgorICogc2tiIHRvIGlvdmVjIGNvcGllcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4gLyogZm9yIG1lbWNweV90b2lvdmVjICovCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworaW50IG51bV9wYWdlc19zcGFubmVkKHN0cnVjdCBpb3ZlYyAqaW92KQoreworCXJldHVybgorCSgoUEFHRV9BTElHTigodW5zaWduZWQgbG9uZylpb3YtPmlvdl9iYXNlICsgaW92LT5pb3ZfbGVuKSAtCisJKCh1bnNpZ25lZCBsb25nKWlvdi0+aW92X2Jhc2UgJiBQQUdFX01BU0spKSA+PiBQQUdFX1NISUZUKTsKK30KKworLyoKKyAqIFBpbiBkb3duIGFsbCB0aGUgaW92ZWMgcGFnZXMgbmVlZGVkIGZvciBsZW4gYnl0ZXMuCisgKiBSZXR1cm4gYSBzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0IHRvIGtlZXAgdHJhY2sgb2YgcGFnZXMgcGlubmVkIGRvd24uCisgKgorICogV2UgYXJlIGFsbG9jYXRpbmcgYSBzaW5nbGUgY2h1bmsgb2YgbWVtb3J5LCBhbmQgdGhlbiBjYXJ2aW5nIGl0IHVwIGludG8KKyAqIDMgc2VjdGlvbnMsIHRoZSBsYXR0ZXIgMiB3aG9zZSBzaXplIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBpb3ZlY3MgYW5kIHRoZQorICogdG90YWwgbnVtYmVyIG9mIHBhZ2VzLCByZXNwZWN0aXZlbHkuCisgKi8KK3N0cnVjdCBkbWFfcGlubmVkX2xpc3QgKmRtYV9waW5faW92ZWNfcGFnZXMoc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqbG9jYWxfbGlzdDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCWludCBpOworCWludCByZXQ7CisJaW50IG5yX2lvdmVjcyA9IDA7CisJaW50IGlvdmVjX2xlbl91c2VkID0gMDsKKwlpbnQgaW92ZWNfcGFnZXNfdXNlZCA9IDA7CisJbG9uZyBlcnI7CisKKwkvKiBkb24ndCBwaW4gZG93biBub24tdXNlci1iYXNlZCBpb3ZlY3MgKi8KKwlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBkZXRlcm1pbmUgaG93IG1hbnkgaW92ZWNzL3BhZ2VzIHRoZXJlIGFyZSwgdXAgZnJvbnQgKi8KKwlkbyB7CisJCWlvdmVjX2xlbl91c2VkICs9IGlvdltucl9pb3ZlY3NdLmlvdl9sZW47CisJCWlvdmVjX3BhZ2VzX3VzZWQgKz0gbnVtX3BhZ2VzX3NwYW5uZWQoJmlvdltucl9pb3ZlY3NdKTsKKwkJbnJfaW92ZWNzKys7CisJfSB3aGlsZSAoaW92ZWNfbGVuX3VzZWQgPCBsZW4pOworCisJLyogc2luZ2xlIGttYWxsb2MgZm9yIHBpbm5lZCBsaXN0LCBwYWdlX2xpc3RbXSwgYW5kIHRoZSBwYWdlIGFycmF5cyAqLworCWxvY2FsX2xpc3QgPSBrbWFsbG9jKHNpemVvZigqbG9jYWxfbGlzdCkKKwkJKyAobnJfaW92ZWNzICogc2l6ZW9mIChzdHJ1Y3QgZG1hX3BhZ2VfbGlzdCkpCisJCSsgKGlvdmVjX3BhZ2VzX3VzZWQgKiBzaXplb2YgKHN0cnVjdCBwYWdlKikpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsX2xpc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbGlzdCBvZiBwYWdlcyBzdGFydHMgcmlnaHQgYWZ0ZXIgdGhlIHBhZ2UgbGlzdCBhcnJheSAqLworCXBhZ2VzID0gKHN0cnVjdCBwYWdlICoqKSAmbG9jYWxfbGlzdC0+cGFnZV9saXN0W25yX2lvdmVjc107CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW92ZWNzOyBpKyspIHsKKwkJc3RydWN0IGRtYV9wYWdlX2xpc3QgKnBhZ2VfbGlzdCA9ICZsb2NhbF9saXN0LT5wYWdlX2xpc3RbaV07CisKKwkJbGVuIC09IGlvdltpXS5pb3ZfbGVuOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbikpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIHVucGluOworCQl9CisKKwkJcGFnZV9saXN0LT5ucl9wYWdlcyA9IG51bV9wYWdlc19zcGFubmVkKCZpb3ZbaV0pOworCQlwYWdlX2xpc3QtPmJhc2VfYWRkcmVzcyA9IGlvdltpXS5pb3ZfYmFzZTsKKworCQlwYWdlX2xpc3QtPnBhZ2VzID0gcGFnZXM7CisJCXBhZ2VzICs9IHBhZ2VfbGlzdC0+bnJfcGFnZXM7CisKKwkJLyogcGluIHBhZ2VzIGRvd24gKi8KKwkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlyZXQgPSBnZXRfdXNlcl9wYWdlcygKKwkJCWN1cnJlbnQsCisJCQljdXJyZW50LT5tbSwKKwkJCSh1bnNpZ25lZCBsb25nKSBpb3ZbaV0uaW92X2Jhc2UsCisJCQlwYWdlX2xpc3QtPm5yX3BhZ2VzLAorCQkJMSwJLyogd3JpdGUgKi8KKwkJCTAsCS8qIGZvcmNlICovCisJCQlwYWdlX2xpc3QtPnBhZ2VzLAorCQkJTlVMTCk7CisJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwkJaWYgKHJldCAhPSBwYWdlX2xpc3QtPm5yX3BhZ2VzKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byB1bnBpbjsKKwkJfQorCisJCWxvY2FsX2xpc3QtPm5yX2lvdmVjcyA9IGkgKyAxOworCX0KKworCXJldHVybiBsb2NhbF9saXN0OworCit1bnBpbjoKKwlkbWFfdW5waW5faW92ZWNfcGFnZXMobG9jYWxfbGlzdCk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBkbWFfdW5waW5faW92ZWNfcGFnZXMoc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqcGlubmVkX2xpc3QpCit7CisJaW50IGksIGo7CisKKwlpZiAoIXBpbm5lZF9saXN0KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcGlubmVkX2xpc3QtPm5yX2lvdmVjczsgaSsrKSB7CisJCXN0cnVjdCBkbWFfcGFnZV9saXN0ICpwYWdlX2xpc3QgPSAmcGlubmVkX2xpc3QtPnBhZ2VfbGlzdFtpXTsKKwkJZm9yIChqID0gMDsgaiA8IHBhZ2VfbGlzdC0+bnJfcGFnZXM7IGorKykgeworCQkJc2V0X3BhZ2VfZGlydHlfbG9jayhwYWdlX2xpc3QtPnBhZ2VzW2pdKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlX2xpc3QtPnBhZ2VzW2pdKTsKKwkJfQorCX0KKworCWtmcmVlKHBpbm5lZF9saXN0KTsKK30KKworc3RhdGljIGRtYV9jb29raWVfdCBkbWFfbWVtY3B5X3RvX2tlcm5lbF9pb3ZlYyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdAorCWlvdmVjICppb3YsIHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBzaXplX3QgbGVuKQoreworCWRtYV9jb29raWVfdCBkbWFfY29va2llID0gMDsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCWlmIChpb3YtPmlvdl9sZW4pIHsKKwkJCWludCBjb3B5ID0gbWluX3QodW5zaWduZWQgaW50LCBpb3YtPmlvdl9sZW4sIGxlbik7CisJCQlkbWFfY29va2llID0gZG1hX2FzeW5jX21lbWNweV9idWZfdG9fYnVmKAorCQkJCQljaGFuLAorCQkJCQlpb3YtPmlvdl9iYXNlLAorCQkJCQlrZGF0YSwKKwkJCQkJY29weSk7CisJCQlrZGF0YSArPSBjb3B5OworCQkJbGVuIC09IGNvcHk7CisJCQlpb3YtPmlvdl9sZW4gLT0gY29weTsKKwkJCWlvdi0+aW92X2Jhc2UgKz0gY29weTsKKwkJfQorCQlpb3YrKzsKKwl9CisKKwlyZXR1cm4gZG1hX2Nvb2tpZTsKK30KKworLyoKKyAqIFdlIGhhdmUgYWxyZWFkeSBwaW5uZWQgZG93biB0aGUgcGFnZXMgd2Ugd2lsbCBiZSB1c2luZyBpbiB0aGUgaW92ZWNzLgorICogRWFjaCBlbnRyeSBpbiBpb3YgYXJyYXkgaGFzIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gcGlubmVkX2xpc3QtPnBhZ2VfbGlzdC4KKyAqIFVzaW5nIGFycmF5IGluZGV4aW5nIHRvIGtlZXAgaW92W10gYW5kIHBhZ2VfbGlzdFtdIGluIHN5bmMuCisgKiBJbml0aWFsIGVsZW1lbnRzIGluIGlvdiBhcnJheSdzIGlvdi0+aW92X2xlbiB3aWxsIGJlIDAgaWYgYWxyZWFkeSBjb3BpZWQgaW50bworICogICBieSBhbm90aGVyIGNhbGwuCisgKiBpb3YgYXJyYXkgbGVuZ3RoIHJlbWFpbmluZyBndWFyYW50ZWVkIHRvIGJlIGJpZ2dlciB0aGFuIGxlbi4KKyAqLworZG1hX2Nvb2tpZV90IGRtYV9tZW1jcHlfdG9faW92ZWMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwlzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0ICpwaW5uZWRfbGlzdCwgdW5zaWduZWQgY2hhciAqa2RhdGEsIHNpemVfdCBsZW4pCit7CisJaW50IGlvdl9ieXRlX29mZnNldDsKKwlpbnQgY29weTsKKwlkbWFfY29va2llX3QgZG1hX2Nvb2tpZSA9IDA7CisJaW50IGlvdmVjX2lkeDsKKwlpbnQgcGFnZV9pZHg7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybiBtZW1jcHlfdG9pb3ZlYyhpb3YsIGtkYXRhLCBsZW4pOworCisJLyogLT4ga2VybmVsIGNvcGllcyAoZS5nLiBzbWJmcykgKi8KKwlpZiAoIXBpbm5lZF9saXN0KQorCQlyZXR1cm4gZG1hX21lbWNweV90b19rZXJuZWxfaW92ZWMoY2hhbiwgaW92LCBrZGF0YSwgbGVuKTsKKworCWlvdmVjX2lkeCA9IDA7CisJd2hpbGUgKGlvdmVjX2lkeCA8IHBpbm5lZF9saXN0LT5ucl9pb3ZlY3MpIHsKKwkJc3RydWN0IGRtYV9wYWdlX2xpc3QgKnBhZ2VfbGlzdDsKKworCQkvKiBza2lwIGFscmVhZHkgdXNlZC11cCBpb3ZlY3MgKi8KKwkJd2hpbGUgKCFpb3ZbaW92ZWNfaWR4XS5pb3ZfbGVuKQorCQkJaW92ZWNfaWR4Kys7CisKKwkJcGFnZV9saXN0ID0gJnBpbm5lZF9saXN0LT5wYWdlX2xpc3RbaW92ZWNfaWR4XTsKKworCQlpb3ZfYnl0ZV9vZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpaW92W2lvdmVjX2lkeF0uaW92X2Jhc2UgJiB+UEFHRV9NQVNLKTsKKwkJcGFnZV9pZHggPSAoKCh1bnNpZ25lZCBsb25nKWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICYgUEFHRV9NQVNLKQorCQkJIC0gKCh1bnNpZ25lZCBsb25nKXBhZ2VfbGlzdC0+YmFzZV9hZGRyZXNzICYgUEFHRV9NQVNLKSkgPj4gUEFHRV9TSElGVDsKKworCQkvKiBicmVhayB1cCBjb3BpZXMgdG8gbm90IGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKwkJd2hpbGUgKGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pIHsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIFBBR0VfU0laRSAtIGlvdl9ieXRlX29mZnNldCwgbGVuKTsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIGNvcHksIGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pOworCisJCQlkbWFfY29va2llID0gZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcoY2hhbiwKKwkJCQkJcGFnZV9saXN0LT5wYWdlc1twYWdlX2lkeF0sCisJCQkJCWlvdl9ieXRlX29mZnNldCwKKwkJCQkJa2RhdGEsCisJCQkJCWNvcHkpOworCisJCQlsZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9sZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICs9IGNvcHk7CisKKwkJCWlmICghbGVuKQorCQkJCXJldHVybiBkbWFfY29va2llOworCisJCQlrZGF0YSArPSBjb3B5OworCQkJaW92X2J5dGVfb2Zmc2V0ID0gMDsKKwkJCXBhZ2VfaWR4Kys7CisJCX0KKwkJaW92ZWNfaWR4Kys7CisJfQorCisJLyogcmVhbGx5IGJhZCBpZiB3ZSBldmVyIHJ1biBvdXQgb2YgaW92ZWNzICovCisJQlVHKCk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK2RtYV9jb29raWVfdCBkbWFfbWVtY3B5X3BnX3RvX2lvdmVjKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IGlvdmVjICppb3YsCisJc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqcGlubmVkX2xpc3QsIHN0cnVjdCBwYWdlICpwYWdlLAorCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBsZW4pCit7CisJaW50IGlvdl9ieXRlX29mZnNldDsKKwlpbnQgY29weTsKKwlkbWFfY29va2llX3QgZG1hX2Nvb2tpZSA9IDA7CisJaW50IGlvdmVjX2lkeDsKKwlpbnQgcGFnZV9pZHg7CisJaW50IGVycjsKKworCS8qIHRoaXMgbmVlZHMgYXMteWV0LXVuaW1wbGVtZW50ZWQgYnVmLXRvLWJ1ZmYsIHNvIHB1bnQuICovCisJLyogVE9ETzogdXNlIGRtYSBmb3IgdGhpcyAqLworCWlmICghY2hhbiB8fCAhcGlubmVkX2xpc3QpIHsKKwkJdTggKnZhZGRyID0ga21hcChwYWdlKTsKKwkJZXJyID0gbWVtY3B5X3RvaW92ZWMoaW92LCB2YWRkciArIG9mZnNldCwgbGVuKTsKKwkJa3VubWFwKHBhZ2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlvdmVjX2lkeCA9IDA7CisJd2hpbGUgKGlvdmVjX2lkeCA8IHBpbm5lZF9saXN0LT5ucl9pb3ZlY3MpIHsKKwkJc3RydWN0IGRtYV9wYWdlX2xpc3QgKnBhZ2VfbGlzdDsKKworCQkvKiBza2lwIGFscmVhZHkgdXNlZC11cCBpb3ZlY3MgKi8KKwkJd2hpbGUgKCFpb3ZbaW92ZWNfaWR4XS5pb3ZfbGVuKQorCQkJaW92ZWNfaWR4Kys7CisKKwkJcGFnZV9saXN0ID0gJnBpbm5lZF9saXN0LT5wYWdlX2xpc3RbaW92ZWNfaWR4XTsKKworCQlpb3ZfYnl0ZV9vZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpaW92W2lvdmVjX2lkeF0uaW92X2Jhc2UgJiB+UEFHRV9NQVNLKTsKKwkJcGFnZV9pZHggPSAoKCh1bnNpZ25lZCBsb25nKWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICYgUEFHRV9NQVNLKQorCQkJIC0gKCh1bnNpZ25lZCBsb25nKXBhZ2VfbGlzdC0+YmFzZV9hZGRyZXNzICYgUEFHRV9NQVNLKSkgPj4gUEFHRV9TSElGVDsKKworCQkvKiBicmVhayB1cCBjb3BpZXMgdG8gbm90IGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKwkJd2hpbGUgKGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pIHsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIFBBR0VfU0laRSAtIGlvdl9ieXRlX29mZnNldCwgbGVuKTsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIGNvcHksIGlvdltpb3ZlY19pZHhdLmlvdl9sZW4pOworCisJCQlkbWFfY29va2llID0gZG1hX2FzeW5jX21lbWNweV9wZ190b19wZyhjaGFuLAorCQkJCQlwYWdlX2xpc3QtPnBhZ2VzW3BhZ2VfaWR4XSwKKwkJCQkJaW92X2J5dGVfb2Zmc2V0LAorCQkJCQlwYWdlLAorCQkJCQlvZmZzZXQsCisJCQkJCWNvcHkpOworCisJCQlsZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9sZW4gLT0gY29weTsKKwkJCWlvdltpb3ZlY19pZHhdLmlvdl9iYXNlICs9IGNvcHk7CisKKwkJCWlmICghbGVuKQorCQkJCXJldHVybiBkbWFfY29va2llOworCisJCQlvZmZzZXQgKz0gY29weTsKKwkJCWlvdl9ieXRlX29mZnNldCA9IDA7CisJCQlwYWdlX2lkeCsrOworCQl9CisJCWlvdmVjX2lkeCsrOworCX0KKworCS8qIHJlYWxseSBiYWQgaWYgd2UgZXZlciBydW4gb3V0IG9mIGlvdmVjcyAqLworCUJVRygpOworCXJldHVybiAtRUZBVUxUOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKaW5kZXggYTE0MGU0NS4uNzY2Y2M5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCkBAIC00OTEsNyArNDkxLDcgQEAKIAogI2RlZmluZSBNU1JfTEJBUl9TTUIJCTB4NTE0MDAwMEIKIAotc3RhdGljIGludCBzY3gyMDBfYWRkX2NzNTUzeCh2b2lkKQorc3RhdGljIF9faW5pdCBpbnQgc2N4MjAwX2FkZF9jczU1M3godm9pZCkKIHsKIAl1MzIJbG93LCBoaTsKIAl1MzIJc21iX2Jhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwppbmRleCA0M2I5NmUyLi4yN2M5ZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKQEAgLTM0NSwxNyArMzQ1LDE3IEBACiBzdGF0aWMgdTgKIHNnaWlvYzRfSU5CKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQl1OCByZWcgPSAodTgpIGluYihwb3J0KTsKKwl1OCByZWcgPSAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7CiAKIAlpZiAoKHBvcnQgJiAweEZGRikgPT0gMHgxMUMpIHsJLyogU3RhdHVzIHJlZ2lzdGVyIG9mIElPQzQgKi8KIAkJaWYgKHJlZyAmIDB4NTEpIHsJLyogTm90IGJ1c3kuLi5jaGVjayBmb3IgaW50ZXJydXB0ICovCiAJCQl1bnNpZ25lZCBsb25nIG90aGVyX2lyID0gcG9ydCAtIDB4MTEwOwotCQkJdW5zaWduZWQgaW50IGludHJfcmVnID0gKHUzMikgaW5sKG90aGVyX2lyKTsKKwkJCXVuc2lnbmVkIGludCBpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwogCiAJCQkvKiBDbGVhciB0aGUgSW50ZXJydXB0LCBFcnJvciBiaXRzIG9uIHRoZSBJT0M0ICovCiAJCQlpZiAoaW50cl9yZWcgJiAweDAzKSB7Ci0JCQkJb3V0bCgweDAzLCBvdGhlcl9pcik7Ci0JCQkJaW50cl9yZWcgPSAodTMyKSBpbmwob3RoZXJfaXIpOworCQkJCXdyaXRlbCgweDAzLCAodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKKwkJCQlpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwogCQkJfQogCQl9CiAJfQpAQCAtNjA2LDYgKzYwNiwxMiBAQAogCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYgPSAmc2dpaW9jNF9pZGVfZG1hX2hvc3Rfb2ZmOwogCWh3aWYtPmlkZV9kbWFfbG9zdGlycSA9ICZzZ2lpb2M0X2lkZV9kbWFfbG9zdGlycTsKIAlod2lmLT5pZGVfZG1hX3RpbWVvdXQgPSAmX19pZGVfZG1hX3RpbWVvdXQ7CisKKwkvKgorCSAqIFRoZSBJT0M0IHVzZXMgTU1JTyByYXRoZXIgdGhhbiBQb3J0IElPLgorCSAqIEl0IGFsc28gbmVlZHMgc3BlY2lhbCB3b3JrYXJvdW5kcyBmb3IgSU5CLgorCSAqLworCWRlZmF1bHRfaHdpZl9tbWlvcHMoaHdpZik7CiAJaHdpZi0+SU5CID0gJnNnaWlvYzRfSU5COwogfQogCkBAIC03NDMsNiArNzQ5LDYgQEAKIG1vZHVsZV9pbml0KGlvYzRfaWRlX2luaXQpOwogbW9kdWxlX2V4aXQoaW9jNF9pZGVfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkFuaWtldCBNYWxhdHB1cmUgLSBTaWxpY29uIEdyYXBoaWNzIEluYy4gKFNHSSkiKTsKK01PRFVMRV9BVVRIT1IoIkFuaWtldCBNYWxhdHB1cmUvSmVyZW15IEhpZ2RvbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJREUgUENJIGRyaXZlciBtb2R1bGUgZm9yIFNHSSBJT0M0IEJhc2UtSU8gQ2FyZCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCA4YTIzZmI1Li41NDEzZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJCQkmc2JwMl9oaWdobGV2ZWwsIHVkLT5uZS0+aG9zdCwgJnNicDJfb3BzLAogCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX3N0YXR1c19ibG9jayksIHNpemVvZihxdWFkbGV0X3QpLAogCQkJMHgwMTAwMDAwMDAwMDBVTEwsIENTUjEyMTJfQUxMX1NQQUNFX0VORCk7Ci0JaWYgKCFzY3NpX2lkLT5zdGF0dXNfZmlmb19hZGRyKSB7CisJaWYgKHNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIgPT0gfjBVTEwpIHsKIAkJU0JQMl9FUlIoImZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0dXMgRklGTyBhZGRyZXNzIHJhbmdlIik7CiAJCWdvdG8gZmFpbGVkX2FsbG9jOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcKaW5kZXggYWZjNjEyYi4uYmEyZDY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcKQEAgLTI5LDYgKzI5LDExIEBACiAJICBsaWJpYnZlcmJzLCBsaWJpYmNtIGFuZCBhIGhhcmR3YXJlIGRyaXZlciBsaWJyYXJ5IGZyb20KIAkgIDxodHRwOi8vd3d3Lm9wZW5pYi5vcmc+LgogCitjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TCisJYm9vbAorCWRlcGVuZHMgb24gSU5GSU5JQkFORCAmJiBJTkVUCisJZGVmYXVsdCB5CisKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCmluZGV4IGVjMzM1M2YuLjY4ZTczZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAoraW5maW5pYmFuZC0kKENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlMpCTo9IGliX2FkZHIubyByZG1hX2NtLm8KKwogb2JqLSQoQ09ORklHX0lORklOSUJBTkQpICs9CQlpYl9jb3JlLm8gaWJfbWFkLm8gaWJfc2EubyBcCi0JCQkJCWliX2NtLm8KKwkJCQkJaWJfY20ubyAkKGluZmluaWJhbmQteSkKIG9iai0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEKSArPQlpYl91bWFkLm8KIG9iai0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTKSArPQlpYl91dmVyYnMubyBpYl91Y20ubwogCkBAIC0xMiw4ICsxNCwxMyBAQAogCiBpYl9jbS15IDo9CQkJY20ubwogCityZG1hX2NtLXkgOj0JCQljbWEubworCitpYl9hZGRyLXkgOj0JCQlhZGRyLm8KKwogaWJfdW1hZC15IDo9CQkJdXNlcl9tYWQubwogCiBpYl91Y20teSA6PQkJCXVjbS5vCiAKLWliX3V2ZXJicy15IDo9CQkJdXZlcmJzX21haW4ubyB1dmVyYnNfY21kLm8gdXZlcmJzX21lbS5vCitpYl91dmVyYnMteSA6PQkJCXV2ZXJic19tYWluLm8gdXZlcmJzX2NtZC5vIHV2ZXJic19tZW0ubyBcCisJCQkJdXZlcmJzX21hcnNoYWxsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjk0YmJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFZvbHRhaXJlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwgTmV0d29yayBBcHBsaWFuY2UsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1LCBNZWxsYW5veCBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBTb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciBvbmUgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlczoKKyAqCisgKiAxKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJDb21tb24gUHVibGljIExpY2Vuc2UgMS4wIiBhIGNvcHkgb2Ygd2hpY2ggaXMKKyAqICAgIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvY3BsLnBocC4KKyAqCisgKiAyKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJUaGUgQlNEIExpY2Vuc2UiIGEgY29weSBvZiB3aGljaCBpcworICogICAgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuCisgKgorICogMykgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIiBhCisgKiAgICBjb3B5IG9mIHdoaWNoIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwLgorICoKKyAqIExpY2Vuc2VlIGhhcyB0aGUgcmlnaHQgdG8gY2hvb3NlIG9uZSBvZiB0aGUgYWJvdmUgbGljZW5zZXMuCisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgb25lIG9mIHRoZSBsaWNlbnNlIG5vdGljZXMuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCBvbmUgb2YgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPG5ldC9hcnAuaD4KKyNpbmNsdWRlIDxuZXQvbmVpZ2hib3VyLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8cmRtYS9pYl9hZGRyLmg+CisKK01PRFVMRV9BVVRIT1IoIlNlYW4gSGVmdHkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSUIgQWRkcmVzcyBUcmFuc2xhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCitzdHJ1Y3QgYWRkcl9yZXEgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgc29ja2FkZHIgc3JjX2FkZHI7CisJc3RydWN0IHNvY2thZGRyIGRzdF9hZGRyOworCXN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyOworCXZvaWQgKmNvbnRleHQ7CisJdm9pZCAoKmNhbGxiYWNrKShpbnQgc3RhdHVzLCBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJIHN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyLCB2b2lkICpjb250ZXh0KTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHN0YXR1czsKK307CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmVxKHZvaWQgKmRhdGEpOworCitzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworc3RhdGljIExJU1RfSEVBRChyZXFfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9XT1JLKHdvcmssIHByb2Nlc3NfcmVxLCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYWRkcl93cTsKKworc3RhdGljIGludCBjb3B5X2FkZHIoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRzdF9kZXZfYWRkcikKK3sKKwlzd2l0Y2ggKGRldi0+dHlwZSkgeworCWNhc2UgQVJQSFJEX0lORklOSUJBTkQ6CisJCWRldl9hZGRyLT5kZXZfdHlwZSA9IElCX05PREVfQ0E7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwl9CisKKwltZW1jcHkoZGV2X2FkZHItPnNyY19kZXZfYWRkciwgZGV2LT5kZXZfYWRkciwgTUFYX0FERFJfTEVOKTsKKwltZW1jcHkoZGV2X2FkZHItPmJyb2FkY2FzdCwgZGV2LT5icm9hZGNhc3QsIE1BWF9BRERSX0xFTik7CisJaWYgKGRzdF9kZXZfYWRkcikKKwkJbWVtY3B5KGRldl9hZGRyLT5kc3RfZGV2X2FkZHIsIGRzdF9kZXZfYWRkciwgTUFYX0FERFJfTEVOKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJkbWFfdHJhbnNsYXRlX2lwKHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdTMyIGlwID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9hZGRyLnNfYWRkcjsKKwlpbnQgcmV0OworCisJZGV2ID0gaXBfZGV2X2ZpbmQoaXApOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwlyZXQgPSBjb3B5X2FkZHIoZGV2X2FkZHIsIGRldiwgTlVMTCk7CisJZGV2X3B1dChkZXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfdHJhbnNsYXRlX2lwKTsKKworc3RhdGljIHZvaWQgc2V0X3RpbWVvdXQodW5zaWduZWQgbG9uZyB0aW1lKQoreworCXVuc2lnbmVkIGxvbmcgZGVsYXk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZ3b3JrKTsKKworCWRlbGF5ID0gdGltZSAtIGppZmZpZXM7CisJaWYgKChsb25nKWRlbGF5IDw9IDApCisJCWRlbGF5ID0gMTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhhZGRyX3dxLCAmd29yaywgZGVsYXkpOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9yZXEoc3RydWN0IGFkZHJfcmVxICpyZXEpCit7CisJc3RydWN0IGFkZHJfcmVxICp0ZW1wX3JlcTsKKworCW11dGV4X2xvY2soJmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh0ZW1wX3JlcSwgJnJlcV9saXN0LCBsaXN0KSB7CisJCWlmICh0aW1lX2FmdGVyKHJlcS0+dGltZW91dCwgdGVtcF9yZXEtPnRpbWVvdXQpKQorCQkJYnJlYWs7CisJfQorCisJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJnRlbXBfcmVxLT5saXN0KTsKKworCWlmIChyZXFfbGlzdC5uZXh0ID09ICZyZXEtPmxpc3QpCisJCXNldF90aW1lb3V0KHJlcS0+dGltZW91dCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KKworc3RhdGljIHZvaWQgYWRkcl9zZW5kX2FycChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRzdF9pbikKK3sKKwlzdHJ1Y3QgcnRhYmxlICpydDsKKwlzdHJ1Y3QgZmxvd2kgZmw7CisJdTMyIGRzdF9pcCA9IGRzdF9pbi0+c2luX2FkZHIuc19hZGRyOworCisJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mIGZsKTsKKwlmbC5ubF91LmlwNF91LmRhZGRyID0gZHN0X2lwOworCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZydCwgJmZsKSkKKwkJcmV0dXJuOworCisJYXJwX3NlbmQoQVJQT1BfUkVRVUVTVCwgRVRIX1BfQVJQLCBydC0+cnRfZ2F0ZXdheSwgcnQtPmlkZXYtPmRldiwKKwkJIHJ0LT5ydF9zcmMsIE5VTEwsIHJ0LT5pZGV2LT5kZXYtPmRldl9hZGRyLCBOVUxMKTsKKwlpcF9ydF9wdXQocnQpOworfQorCitzdGF0aWMgaW50IGFkZHJfcmVzb2x2ZV9yZW1vdGUoc3RydWN0IHNvY2thZGRyX2luICpzcmNfaW4sCisJCQkgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpkc3RfaW4sCisJCQkgICAgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIpCit7CisJdTMyIHNyY19pcCA9IHNyY19pbi0+c2luX2FkZHIuc19hZGRyOworCXUzMiBkc3RfaXAgPSBkc3RfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwlzdHJ1Y3QgZmxvd2kgZmw7CisJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CisJaW50IHJldDsKKworCW1lbXNldCgmZmwsIDAsIHNpemVvZiBmbCk7CisJZmwubmxfdS5pcDRfdS5kYWRkciA9IGRzdF9pcDsKKwlmbC5ubF91LmlwNF91LnNhZGRyID0gc3JjX2lwOworCXJldCA9IGlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCAmZmwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogSWYgdGhlIGRldmljZSBkb2VzIEFSUCBpbnRlcm5hbGx5LCByZXR1cm4gJ2RvbmUnICovCisJaWYgKHJ0LT5pZGV2LT5kZXYtPmZsYWdzICYgSUZGX05PQVJQKSB7CisJCWNvcHlfYWRkcihhZGRyLCBydC0+aWRldi0+ZGV2LCBOVUxMKTsKKwkJZ290byBwdXQ7CisJfQorCisJbmVpZ2ggPSBuZWlnaF9sb29rdXAoJmFycF90YmwsICZydC0+cnRfZ2F0ZXdheSwgcnQtPmlkZXYtPmRldik7CisJaWYgKCFuZWlnaCkgeworCQlyZXQgPSAtRU5PREFUQTsKKwkJZ290byBwdXQ7CisJfQorCisJaWYgKCEobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkpIHsKKwkJcmV0ID0gLUVOT0RBVEE7CisJCWdvdG8gcmVsZWFzZTsKKwl9CisKKwlpZiAoIXNyY19pcCkgeworCQlzcmNfaW4tPnNpbl9mYW1pbHkgPSBkc3RfaW4tPnNpbl9mYW1pbHk7CisJCXNyY19pbi0+c2luX2FkZHIuc19hZGRyID0gcnQtPnJ0X3NyYzsKKwl9CisKKwlyZXQgPSBjb3B5X2FkZHIoYWRkciwgbmVpZ2gtPmRldiwgbmVpZ2gtPmhhKTsKK3JlbGVhc2U6CisJbmVpZ2hfcmVsZWFzZShuZWlnaCk7CitwdXQ6CisJaXBfcnRfcHV0KHJ0KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3JlcSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBhZGRyX3JlcSAqcmVxLCAqdGVtcF9yZXE7CisJc3RydWN0IHNvY2thZGRyX2luICpzcmNfaW4sICpkc3RfaW47CisJc3RydWN0IGxpc3RfaGVhZCBkb25lX2xpc3Q7CisKKwlJTklUX0xJU1RfSEVBRCgmZG9uZV9saXN0KTsKKworCW11dGV4X2xvY2soJmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRlbXBfcmVxLCAmcmVxX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJlcS0+c3RhdHVzKSB7CisJCQlzcmNfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZyZXEtPnNyY19hZGRyOworCQkJZHN0X2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmcmVxLT5kc3RfYWRkcjsKKwkJCXJlcS0+c3RhdHVzID0gYWRkcl9yZXNvbHZlX3JlbW90ZShzcmNfaW4sIGRzdF9pbiwKKwkJCQkJCQkgIHJlcS0+YWRkcik7CisJCX0KKwkJaWYgKHJlcS0+c3RhdHVzICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgcmVxLT50aW1lb3V0KSkKKwkJCXJlcS0+c3RhdHVzID0gLUVUSU1FRE9VVDsKKwkJZWxzZSBpZiAocmVxLT5zdGF0dXMgPT0gLUVOT0RBVEEpCisJCQljb250aW51ZTsKKworCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmZG9uZV9saXN0KTsKKwl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJlcV9saXN0KSkgeworCQlyZXEgPSBsaXN0X2VudHJ5KHJlcV9saXN0Lm5leHQsIHN0cnVjdCBhZGRyX3JlcSwgbGlzdCk7CisJCXNldF90aW1lb3V0KHJlcS0+dGltZW91dCk7CisJfQorCW11dGV4X3VubG9jaygmbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0ZW1wX3JlcSwgJmRvbmVfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwkJcmVxLT5jYWxsYmFjayhyZXEtPnN0YXR1cywgJnJlcS0+c3JjX2FkZHIsIHJlcS0+YWRkciwKKwkJCSAgICAgIHJlcS0+Y29udGV4dCk7CisJCWtmcmVlKHJlcSk7CisJfQorfQorCitzdGF0aWMgaW50IGFkZHJfcmVzb2x2ZV9sb2NhbChzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyY19pbiwKKwkJCSAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqZHN0X2luLAorCQkJICAgICAgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1MzIgc3JjX2lwID0gc3JjX2luLT5zaW5fYWRkci5zX2FkZHI7CisJdTMyIGRzdF9pcCA9IGRzdF9pbi0+c2luX2FkZHIuc19hZGRyOworCWludCByZXQ7CisKKwlkZXYgPSBpcF9kZXZfZmluZChkc3RfaXApOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwlpZiAoWkVST05FVChzcmNfaXApKSB7CisJCXNyY19pbi0+c2luX2ZhbWlseSA9IGRzdF9pbi0+c2luX2ZhbWlseTsKKwkJc3JjX2luLT5zaW5fYWRkci5zX2FkZHIgPSBkc3RfaXA7CisJCXJldCA9IGNvcHlfYWRkcihhZGRyLCBkZXYsIGRldi0+ZGV2X2FkZHIpOworCX0gZWxzZSBpZiAoTE9PUEJBQ0soc3JjX2lwKSkgeworCQlyZXQgPSByZG1hX3RyYW5zbGF0ZV9pcCgoc3RydWN0IHNvY2thZGRyICopZHN0X2luLCBhZGRyKTsKKwkJaWYgKCFyZXQpCisJCQltZW1jcHkoYWRkci0+ZHN0X2Rldl9hZGRyLCBkZXYtPmRldl9hZGRyLCBNQVhfQUREUl9MRU4pOworCX0gZWxzZSB7CisJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKilzcmNfaW4sIGFkZHIpOworCQlpZiAoIXJldCkKKwkJCW1lbWNweShhZGRyLT5kc3RfZGV2X2FkZHIsIGRldi0+ZGV2X2FkZHIsIE1BWF9BRERSX0xFTik7CisJfQorCisJZGV2X3B1dChkZXYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZG1hX3Jlc29sdmVfaXAoc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKKwkJICAgIHN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyLCBpbnQgdGltZW91dF9tcywKKwkJICAgIHZvaWQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKKwkJCQkgICAgIHN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyLCB2b2lkICpjb250ZXh0KSwKKwkJICAgIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzcmNfaW4sICpkc3RfaW47CisJc3RydWN0IGFkZHJfcmVxICpyZXE7CisJaW50IHJldCA9IDA7CisKKwlyZXEgPSBrbWFsbG9jKHNpemVvZiAqcmVxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mICpyZXEpOworCisJaWYgKHNyY19hZGRyKQorCQltZW1jcHkoJnJlcS0+c3JjX2FkZHIsIHNyY19hZGRyLCBpcF9hZGRyX3NpemUoc3JjX2FkZHIpKTsKKwltZW1jcHkoJnJlcS0+ZHN0X2FkZHIsIGRzdF9hZGRyLCBpcF9hZGRyX3NpemUoZHN0X2FkZHIpKTsKKwlyZXEtPmFkZHIgPSBhZGRyOworCXJlcS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwlyZXEtPmNvbnRleHQgPSBjb250ZXh0OworCisJc3JjX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmcmVxLT5zcmNfYWRkcjsKKwlkc3RfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZyZXEtPmRzdF9hZGRyOworCisJcmVxLT5zdGF0dXMgPSBhZGRyX3Jlc29sdmVfbG9jYWwoc3JjX2luLCBkc3RfaW4sIGFkZHIpOworCWlmIChyZXEtPnN0YXR1cyA9PSAtRUFERFJOT1RBVkFJTCkKKwkJcmVxLT5zdGF0dXMgPSBhZGRyX3Jlc29sdmVfcmVtb3RlKHNyY19pbiwgZHN0X2luLCBhZGRyKTsKKworCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCXJlcS0+dGltZW91dCA9IGppZmZpZXM7CisJCXF1ZXVlX3JlcShyZXEpOworCQlicmVhazsKKwljYXNlIC1FTk9EQVRBOgorCQlyZXEtPnRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpICsgamlmZmllczsKKwkJcXVldWVfcmVxKHJlcSk7CisJCWFkZHJfc2VuZF9hcnAoZHN0X2luKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gcmVxLT5zdGF0dXM7CisJCWtmcmVlKHJlcSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX3Jlc29sdmVfaXApOworCit2b2lkIHJkbWFfYWRkcl9jYW5jZWwoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIpCit7CisJc3RydWN0IGFkZHJfcmVxICpyZXEsICp0ZW1wX3JlcTsKKworCW11dGV4X2xvY2soJmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRlbXBfcmVxLCAmcmVxX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJlcS0+YWRkciA9PSBhZGRyKSB7CisJCQlyZXEtPnN0YXR1cyA9IC1FQ0FOQ0VMRUQ7CisJCQlyZXEtPnRpbWVvdXQgPSBqaWZmaWVzOworCQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CisJCQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmcmVxX2xpc3QpOworCQkJc2V0X3RpbWVvdXQocmVxLT50aW1lb3V0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfYWRkcl9jYW5jZWwpOworCitzdGF0aWMgaW50IGFkZHJfYXJwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgcGFja2V0X3R5cGUgKnBrdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQoreworCXN0cnVjdCBhcnBoZHIgKmFycF9oZHI7CisKKwlhcnBfaGRyID0gKHN0cnVjdCBhcnBoZHIgKikgc2tiLT5uaC5yYXc7CisKKwlpZiAoYXJwX2hkci0+YXJfb3AgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkgfHwKKwkgICAgYXJwX2hkci0+YXJfb3AgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKQorCQlzZXRfdGltZW91dChqaWZmaWVzKTsKKworCWtmcmVlX3NrYihza2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFkZHJfYXJwID0geworCS50eXBlICAgICAgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSwKKwkuZnVuYyAgICAgICAgICAgPSBhZGRyX2FycF9yZWN2LAorCS5hZl9wYWNrZXRfcHJpdiA9ICh2b2lkKikgMSwKK307CisKK3N0YXRpYyBpbnQgYWRkcl9pbml0KHZvaWQpCit7CisJYWRkcl93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJpYl9hZGRyX3dxIik7CisJaWYgKCFhZGRyX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9hZGRfcGFjaygmYWRkcl9hcnApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRyX2NsZWFudXAodm9pZCkKK3sKKwlkZXZfcmVtb3ZlX3BhY2soJmFkZHJfYXJwKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShhZGRyX3dxKTsKK30KKworbW9kdWxlX2luaXQoYWRkcl9pbml0KTsKK21vZHVsZV9leGl0KGFkZHJfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYwppbmRleCA1MDM2NGMwLi5lMDVjYTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMKQEAgLTE5MSw2ICsxOTEsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWJfZmluZF9jYWNoZWRfcGtleSk7CiAKK2ludCBpYl9nZXRfY2FjaGVkX2xtYyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCisJCSAgICAgIHU4ICAgICAgICAgICAgICAgIHBvcnRfbnVtLAorCQkgICAgICB1OCAgICAgICAgICAgICAgICAqbG1jKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAocG9ydF9udW0gPCBzdGFydF9wb3J0KGRldmljZSkgfHwgcG9ydF9udW0gPiBlbmRfcG9ydChkZXZpY2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlYWRfbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNhY2hlLmxvY2ssIGZsYWdzKTsKKwkqbG1jID0gZGV2aWNlLT5jYWNoZS5sbWNfY2FjaGVbcG9ydF9udW0gLSBzdGFydF9wb3J0KGRldmljZSldOworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZS0+Y2FjaGUubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaWJfZ2V0X2NhY2hlZF9sbWMpOworCiBzdGF0aWMgdm9pZCBpYl9jYWNoZV91cGRhdGUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAogCQkJICAgIHU4ICAgICAgICAgICAgICAgIHBvcnQpCiB7CkBAIC0yNTEsNiArMjY5LDggQEAKIAlkZXZpY2UtPmNhY2hlLnBrZXlfY2FjaGVbcG9ydCAtIHN0YXJ0X3BvcnQoZGV2aWNlKV0gPSBwa2V5X2NhY2hlOwogCWRldmljZS0+Y2FjaGUuZ2lkX2NhY2hlIFtwb3J0IC0gc3RhcnRfcG9ydChkZXZpY2UpXSA9IGdpZF9jYWNoZTsKIAorCWRldmljZS0+Y2FjaGUubG1jX2NhY2hlW3BvcnQgLSBzdGFydF9wb3J0KGRldmljZSldID0gdHByb3BzLT5sbWM7CisKIAl3cml0ZV91bmxvY2tfaXJxKCZkZXZpY2UtPmNhY2hlLmxvY2spOwogCiAJa2ZyZWUob2xkX3BrZXlfY2FjaGUpOwpAQCAtMzA1LDcgKzMyNSwxMyBAQAogCQlrbWFsbG9jKHNpemVvZiAqZGV2aWNlLT5jYWNoZS5naWRfY2FjaGUgKgogCQkJKGVuZF9wb3J0KGRldmljZSkgLSBzdGFydF9wb3J0KGRldmljZSkgKyAxKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoIWRldmljZS0+Y2FjaGUucGtleV9jYWNoZSB8fCAhZGV2aWNlLT5jYWNoZS5naWRfY2FjaGUpIHsKKwlkZXZpY2UtPmNhY2hlLmxtY19jYWNoZSA9IGttYWxsb2Moc2l6ZW9mICpkZXZpY2UtPmNhY2hlLmxtY19jYWNoZSAqCisJCQkJCSAgKGVuZF9wb3J0KGRldmljZSkgLQorCQkJCQkgICBzdGFydF9wb3J0KGRldmljZSkgKyAxKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKworCWlmICghZGV2aWNlLT5jYWNoZS5wa2V5X2NhY2hlIHx8ICFkZXZpY2UtPmNhY2hlLmdpZF9jYWNoZSB8fAorCSAgICAhZGV2aWNlLT5jYWNoZS5sbWNfY2FjaGUpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGRuJ3QgYWxsb2NhdGUgY2FjaGUgIgogCQkgICAgICAgImZvciAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKIAkJZ290byBlcnI7CkBAIC0zMzMsNiArMzU5LDcgQEAKIGVycjoKIAlrZnJlZShkZXZpY2UtPmNhY2hlLnBrZXlfY2FjaGUpOwogCWtmcmVlKGRldmljZS0+Y2FjaGUuZ2lkX2NhY2hlKTsKKwlrZnJlZShkZXZpY2UtPmNhY2hlLmxtY19jYWNoZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGliX2NhY2hlX2NsZWFudXBfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKQEAgLTM0OSw2ICszNzYsNyBAQAogCiAJa2ZyZWUoZGV2aWNlLT5jYWNoZS5wa2V5X2NhY2hlKTsKIAlrZnJlZShkZXZpY2UtPmNhY2hlLmdpZF9jYWNoZSk7CisJa2ZyZWUoZGV2aWNlLT5jYWNoZS5sbWNfY2FjaGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGliX2NsaWVudCBjYWNoZV9jbGllbnQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwppbmRleCA4NmZlZTQzLi40NTBhZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICAqIFNPRlRXQVJFLgogICoKLSAqICRJZDogY20uYyAyODIxIDIwMDUtMDctMDggMTc6MDc6MjhaIHNlYW4uaGVmdHkgJAorICogJElkOiBjbS5jIDQzMTEgMjAwNS0xMi0wNSAxODo0MjowMVogc2Vhbi5oZWZ0eSAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KQEAgLTEzMiw2ICsxMzIsNyBAQAogCS8qIHRvZG86IHVzZSBhbHRlcm5hdGUgcG9ydCBvbiBzZW5kIGZhaWx1cmUgKi8KIAlzdHJ1Y3QgY21fYXYgYXY7CiAJc3RydWN0IGNtX2F2IGFsdF9hdjsKKwlzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhICpjb21wYXJlX2RhdGE7CiAKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAJX19iZTY0IHRpZDsKQEAgLTI1MywyMyArMjU0LDEzIEBACiAJY21faWRfcHJpdi0+cHJpdmF0ZV9kYXRhX2xlbiA9IHByaXZhdGVfZGF0YV9sZW47CiB9CiAKLXN0YXRpYyB2b2lkIGNtX3NldF9haF9hdHRyKHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyLCB1OCBwb3J0X251bSwKLQkJCSAgIHUxNiBkbGlkLCB1OCBzbCwgdTE2IHNyY19wYXRoX2JpdHMpCi17Ci0JbWVtc2V0KGFoX2F0dHIsIDAsIHNpemVvZiBhaF9hdHRyKTsKLQlhaF9hdHRyLT5kbGlkID0gZGxpZDsKLQlhaF9hdHRyLT5zbCA9IHNsOwotCWFoX2F0dHItPnNyY19wYXRoX2JpdHMgPSBzcmNfcGF0aF9iaXRzOwotCWFoX2F0dHItPnBvcnRfbnVtID0gcG9ydF9udW07Ci19Ci0KLXN0YXRpYyB2b2lkIGNtX2luaXRfYXZfZm9yX3Jlc3BvbnNlKHN0cnVjdCBjbV9wb3J0ICpwb3J0LAotCQkJCSAgICBzdHJ1Y3QgaWJfd2MgKndjLCBzdHJ1Y3QgY21fYXYgKmF2KQorc3RhdGljIHZvaWQgY21faW5pdF9hdl9mb3JfcmVzcG9uc2Uoc3RydWN0IGNtX3BvcnQgKnBvcnQsIHN0cnVjdCBpYl93YyAqd2MsCisJCQkJICAgIHN0cnVjdCBpYl9ncmggKmdyaCwgc3RydWN0IGNtX2F2ICphdikKIHsKIAlhdi0+cG9ydCA9IHBvcnQ7CiAJYXYtPnBrZXlfaW5kZXggPSB3Yy0+cGtleV9pbmRleDsKLQljbV9zZXRfYWhfYXR0cigmYXYtPmFoX2F0dHIsIHBvcnQtPnBvcnRfbnVtLCB3Yy0+c2xpZCwKLQkJICAgICAgIHdjLT5zbCwgd2MtPmRsaWRfcGF0aF9iaXRzKTsKKwlpYl9pbml0X2FoX2Zyb21fd2MocG9ydC0+Y21fZGV2LT5kZXZpY2UsIHBvcnQtPnBvcnRfbnVtLCB3YywKKwkJCSAgIGdyaCwgJmF2LT5haF9hdHRyKTsKIH0KIAogc3RhdGljIGludCBjbV9pbml0X2F2X2J5X3BhdGgoc3RydWN0IGliX3NhX3BhdGhfcmVjICpwYXRoLCBzdHJ1Y3QgY21fYXYgKmF2KQpAQCAtMjk5LDkgKzI5MCw4IEBACiAJCXJldHVybiByZXQ7CiAKIAlhdi0+cG9ydCA9IHBvcnQ7Ci0JY21fc2V0X2FoX2F0dHIoJmF2LT5haF9hdHRyLCBhdi0+cG9ydC0+cG9ydF9udW0sCi0JCSAgICAgICBiZTE2X3RvX2NwdShwYXRoLT5kbGlkKSwgcGF0aC0+c2wsCi0JCSAgICAgICBiZTE2X3RvX2NwdShwYXRoLT5zbGlkKSAmIDB4N0YpOworCWliX2luaXRfYWhfZnJvbV9wYXRoKGNtX2Rldi0+ZGV2aWNlLCBwb3J0LT5wb3J0X251bSwgcGF0aCwKKwkJCSAgICAgJmF2LT5haF9hdHRyKTsKIAlhdi0+cGFja2V0X2xpZmVfdGltZSA9IHBhdGgtPnBhY2tldF9saWZlX3RpbWU7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNTcsNiArMzQ3LDQxIEBACiAJcmV0dXJuIGNtX2lkX3ByaXY7CiB9CiAKK3N0YXRpYyB2b2lkIGNtX21hc2tfY29weSh1OCAqZHN0LCB1OCAqc3JjLCB1OCAqbWFzaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJQl9DTV9DT01QQVJFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykKKwkJKCh1bnNpZ25lZCBsb25nICopIGRzdClbaV0gPSAoKHVuc2lnbmVkIGxvbmcgKikgc3JjKVtpXSAmCisJCQkJCSAgICAgKCh1bnNpZ25lZCBsb25nICopIG1hc2spW2ldOworfQorCitzdGF0aWMgaW50IGNtX2NvbXBhcmVfZGF0YShzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhICpzcmNfZGF0YSwKKwkJCSAgIHN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgKmRzdF9kYXRhKQoreworCXU4IHNyY1tJQl9DTV9DT01QQVJFX1NJWkVdOworCXU4IGRzdFtJQl9DTV9DT01QQVJFX1NJWkVdOworCisJaWYgKCFzcmNfZGF0YSB8fCAhZHN0X2RhdGEpCisJCXJldHVybiAwOworCisJY21fbWFza19jb3B5KHNyYywgc3JjX2RhdGEtPmRhdGEsIGRzdF9kYXRhLT5tYXNrKTsKKwljbV9tYXNrX2NvcHkoZHN0LCBkc3RfZGF0YS0+ZGF0YSwgc3JjX2RhdGEtPm1hc2spOworCXJldHVybiBtZW1jbXAoc3JjLCBkc3QsIElCX0NNX0NPTVBBUkVfU0laRSk7Cit9CisKK3N0YXRpYyBpbnQgY21fY29tcGFyZV9wcml2YXRlX2RhdGEodTggKnByaXZhdGVfZGF0YSwKKwkJCQkgICBzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhICpkc3RfZGF0YSkKK3sKKwl1OCBzcmNbSUJfQ01fQ09NUEFSRV9TSVpFXTsKKworCWlmICghZHN0X2RhdGEpCisJCXJldHVybiAwOworCisJY21fbWFza19jb3B5KHNyYywgcHJpdmF0ZV9kYXRhLCBkc3RfZGF0YS0+bWFzayk7CisJcmV0dXJuIG1lbWNtcChzcmMsIGRzdF9kYXRhLT5kYXRhLCBJQl9DTV9DT01QQVJFX1NJWkUpOworfQorCiBzdGF0aWMgc3RydWN0IGNtX2lkX3ByaXZhdGUgKiBjbV9pbnNlcnRfbGlzdGVuKHN0cnVjdCBjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2KQogewogCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZjbS5saXN0ZW5fc2VydmljZV90YWJsZS5yYl9ub2RlOwpAQCAtMzY0LDE0ICszODksMTggQEAKIAlzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqY3VyX2NtX2lkX3ByaXY7CiAJX19iZTY0IHNlcnZpY2VfaWQgPSBjbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkOwogCV9fYmU2NCBzZXJ2aWNlX21hc2sgPSBjbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2s7CisJaW50IGRhdGFfY21wOwogCiAJd2hpbGUgKCpsaW5rKSB7CiAJCXBhcmVudCA9ICpsaW5rOwogCQljdXJfY21faWRfcHJpdiA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGNtX2lkX3ByaXZhdGUsCiAJCQkJCSAgc2VydmljZV9ub2RlKTsKKwkJZGF0YV9jbXAgPSBjbV9jb21wYXJlX2RhdGEoY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhLAorCQkJCQkgICBjdXJfY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhKTsKIAkJaWYgKChjdXJfY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrICYgc2VydmljZV9pZCkgPT0KIAkJICAgIChzZXJ2aWNlX21hc2sgJiBjdXJfY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCkgJiYKLQkJICAgIChjbV9pZF9wcml2LT5pZC5kZXZpY2UgPT0gY3VyX2NtX2lkX3ByaXYtPmlkLmRldmljZSkpCisJCSAgICAoY21faWRfcHJpdi0+aWQuZGV2aWNlID09IGN1cl9jbV9pZF9wcml2LT5pZC5kZXZpY2UpICYmCisJCSAgICAhZGF0YV9jbXApCiAJCQlyZXR1cm4gY3VyX2NtX2lkX3ByaXY7CiAKIAkJaWYgKGNtX2lkX3ByaXYtPmlkLmRldmljZSA8IGN1cl9jbV9pZF9wcml2LT5pZC5kZXZpY2UpCkBAIC0zODAsNiArNDA5LDEwIEBACiAJCQlsaW5rID0gJigqbGluayktPnJiX3JpZ2h0OwogCQllbHNlIGlmIChzZXJ2aWNlX2lkIDwgY3VyX2NtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQpCiAJCQlsaW5rID0gJigqbGluayktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHNlcnZpY2VfaWQgPiBjdXJfY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCkKKwkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfcmlnaHQ7CisJCWVsc2UgaWYgKGRhdGFfY21wIDwgMCkKKwkJCWxpbmsgPSAmKCpsaW5rKS0+cmJfbGVmdDsKIAkJZWxzZQogCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsKIAl9CkBAIC0zODksMTYgKzQyMiwyMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNtX2lkX3ByaXZhdGUgKiBjbV9maW5kX2xpc3RlbihzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCi0JCQkJCSAgICAgX19iZTY0IHNlcnZpY2VfaWQpCisJCQkJCSAgICAgX19iZTY0IHNlcnZpY2VfaWQsCisJCQkJCSAgICAgdTggKnByaXZhdGVfZGF0YSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IGNtLmxpc3Rlbl9zZXJ2aWNlX3RhYmxlLnJiX25vZGU7CiAJc3RydWN0IGNtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisJaW50IGRhdGFfY21wOwogCiAJd2hpbGUgKG5vZGUpIHsKIAkJY21faWRfcHJpdiA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBjbV9pZF9wcml2YXRlLCBzZXJ2aWNlX25vZGUpOworCQlkYXRhX2NtcCA9IGNtX2NvbXBhcmVfcHJpdmF0ZV9kYXRhKHByaXZhdGVfZGF0YSwKKwkJCQkJCSAgIGNtX2lkX3ByaXYtPmNvbXBhcmVfZGF0YSk7CiAJCWlmICgoY21faWRfcHJpdi0+aWQuc2VydmljZV9tYXNrICYgc2VydmljZV9pZCkgPT0KIAkJICAgICBjbV9pZF9wcml2LT5pZC5zZXJ2aWNlX2lkICYmCi0JCSAgICAoY21faWRfcHJpdi0+aWQuZGV2aWNlID09IGRldmljZSkpCisJCSAgICAoY21faWRfcHJpdi0+aWQuZGV2aWNlID09IGRldmljZSkgJiYgIWRhdGFfY21wKQogCQkJcmV0dXJuIGNtX2lkX3ByaXY7CiAKIAkJaWYgKGRldmljZSA8IGNtX2lkX3ByaXYtPmlkLmRldmljZSkKQEAgLTQwNyw2ICs0NDQsMTAgQEAKIAkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKIAkJZWxzZSBpZiAoc2VydmljZV9pZCA8IGNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQpCiAJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoc2VydmljZV9pZCA+IGNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQpCisJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7CisJCWVsc2UgaWYgKGRhdGFfY21wIDwgMCkKKwkJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OwogCQllbHNlCiAJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7CiAJfQpAQCAtNzMwLDE1ICs3NzEsMTQgQEAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjbV9pZF9wcml2LT5jb21wKTsKIAl3aGlsZSAoKHdvcmsgPSBjbV9kZXF1ZXVlX3dvcmsoY21faWRfcHJpdikpICE9IE5VTEwpCiAJCWNtX2ZyZWVfd29yayh3b3JrKTsKLQlpZiAoY21faWRfcHJpdi0+cHJpdmF0ZV9kYXRhICYmIGNtX2lkX3ByaXYtPnByaXZhdGVfZGF0YV9sZW4pCi0JCWtmcmVlKGNtX2lkX3ByaXYtPnByaXZhdGVfZGF0YSk7CisJa2ZyZWUoY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhKTsKKwlrZnJlZShjbV9pZF9wcml2LT5wcml2YXRlX2RhdGEpOwogCWtmcmVlKGNtX2lkX3ByaXYpOwogfQogRVhQT1JUX1NZTUJPTChpYl9kZXN0cm95X2NtX2lkKTsKIAotaW50IGliX2NtX2xpc3RlbihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLAotCQkgX19iZTY0IHNlcnZpY2VfaWQsCi0JCSBfX2JlNjQgc2VydmljZV9tYXNrKQoraW50IGliX2NtX2xpc3RlbihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLCBfX2JlNjQgc2VydmljZV9pZCwgX19iZTY0IHNlcnZpY2VfbWFzaywKKwkJIHN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgKmNvbXBhcmVfZGF0YSkKIHsKIAlzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqY21faWRfcHJpdiwgKmN1cl9jbV9pZF9wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NTIsNyArNzkyLDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJY21faWRfcHJpdiA9IGNvbnRhaW5lcl9vZihjbV9pZCwgc3RydWN0IGNtX2lkX3ByaXZhdGUsIGlkKTsKLQlCVUdfT04oY21faWQtPnN0YXRlICE9IElCX0NNX0lETEUpOworCWlmIChjbV9pZC0+c3RhdGUgIT0gSUJfQ01fSURMRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29tcGFyZV9kYXRhKSB7CisJCWNtX2lkX3ByaXYtPmNvbXBhcmVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mICpjb21wYXJlX2RhdGEsCisJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjbV9pZF9wcml2LT5jb21wYXJlX2RhdGEpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJY21fbWFza19jb3B5KGNtX2lkX3ByaXYtPmNvbXBhcmVfZGF0YS0+ZGF0YSwKKwkJCSAgICAgY29tcGFyZV9kYXRhLT5kYXRhLCBjb21wYXJlX2RhdGEtPm1hc2spOworCQltZW1jcHkoY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhLT5tYXNrLCBjb21wYXJlX2RhdGEtPm1hc2ssCisJCSAgICAgICBJQl9DTV9DT01QQVJFX1NJWkUpOworCX0KIAogCWNtX2lkLT5zdGF0ZSA9IElCX0NNX0xJU1RFTjsKIApAQCAtNzY5LDYgKzgyMSw4IEBACiAKIAlpZiAoY3VyX2NtX2lkX3ByaXYpIHsKIAkJY21faWQtPnN0YXRlID0gSUJfQ01fSURMRTsKKwkJa2ZyZWUoY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhKTsKKwkJY21faWRfcHJpdi0+Y29tcGFyZV9kYXRhID0gTlVMTDsKIAkJcmV0ID0gLUVCVVNZOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTI0MSw3ICsxMjk1LDggQEAKIAogCS8qIEZpbmQgbWF0Y2hpbmcgbGlzdGVuIHJlcXVlc3QuICovCiAJbGlzdGVuX2NtX2lkX3ByaXYgPSBjbV9maW5kX2xpc3RlbihjbV9pZF9wcml2LT5pZC5kZXZpY2UsCi0JCQkJCSAgIHJlcV9tc2ctPnNlcnZpY2VfaWQpOworCQkJCQkgICByZXFfbXNnLT5zZXJ2aWNlX2lkLAorCQkJCQkgICByZXFfbXNnLT5wcml2YXRlX2RhdGEpOwogCWlmICghbGlzdGVuX2NtX2lkX3ByaXYpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY20ubG9jaywgZmxhZ3MpOwogCQljbV9pc3N1ZV9yZWood29yay0+cG9ydCwgd29yay0+bWFkX3JlY3Zfd2MsCkBAIC0xMjc2LDYgKzEzMzEsNyBAQAogCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBjbV9pZF9wcml2YXRlLCBpZCk7CiAJY21faWRfcHJpdi0+aWQucmVtb3RlX2lkID0gcmVxX21zZy0+bG9jYWxfY29tbV9pZDsKIAljbV9pbml0X2F2X2Zvcl9yZXNwb25zZSh3b3JrLT5wb3J0LCB3b3JrLT5tYWRfcmVjdl93Yy0+d2MsCisJCQkJd29yay0+bWFkX3JlY3Zfd2MtPnJlY3ZfYnVmLmdyaCwKIAkJCQkmY21faWRfcHJpdi0+YXYpOwogCWNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8gPSBjbV9jcmVhdGVfdGltZXdhaXRfaW5mbyhjbV9pZF9wcml2LT4KIAkJCQkJCQkgICAgaWQubG9jYWxfaWQpOwpAQCAtMjU0OSw3ICsyNjA1LDcgQEAKIAljbV9mb3JtYXRfbWFkX2hkcigmc2lkcl9yZXFfbXNnLT5oZHIsIENNX1NJRFJfUkVRX0FUVFJfSUQsCiAJCQkgIGNtX2Zvcm1fdGlkKGNtX2lkX3ByaXYsIENNX01TR19TRVFVRU5DRV9TSURSKSk7CiAJc2lkcl9yZXFfbXNnLT5yZXF1ZXN0X2lkID0gY21faWRfcHJpdi0+aWQubG9jYWxfaWQ7Ci0Jc2lkcl9yZXFfbXNnLT5wa2V5ID0gY3B1X3RvX2JlMTYocGFyYW0tPnBrZXkpOworCXNpZHJfcmVxX21zZy0+cGtleSA9IGNwdV90b19iZTE2KHBhcmFtLT5wYXRoLT5wa2V5KTsKIAlzaWRyX3JlcV9tc2ctPnNlcnZpY2VfaWQgPSBwYXJhbS0+c2VydmljZV9pZDsKIAogCWlmIChwYXJhbS0+cHJpdmF0ZV9kYXRhICYmIHBhcmFtLT5wcml2YXRlX2RhdGFfbGVuKQpAQCAtMjY0MSw2ICsyNjk3LDcgQEAKIAljbV9pZF9wcml2LT5hdi5kZ2lkLmdsb2JhbC5zdWJuZXRfcHJlZml4ID0gY3B1X3RvX2JlNjQod2MtPnNsaWQpOwogCWNtX2lkX3ByaXYtPmF2LmRnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCA9IDA7CiAJY21faW5pdF9hdl9mb3JfcmVzcG9uc2Uod29yay0+cG9ydCwgd29yay0+bWFkX3JlY3Zfd2MtPndjLAorCQkJCXdvcmstPm1hZF9yZWN2X3djLT5yZWN2X2J1Zi5ncmgsCiAJCQkJJmNtX2lkX3ByaXYtPmF2KTsKIAljbV9pZF9wcml2LT5pZC5yZW1vdGVfaWQgPSBzaWRyX3JlcV9tc2ctPnJlcXVlc3RfaWQ7CiAJY21faWRfcHJpdi0+aWQuc3RhdGUgPSBJQl9DTV9TSURSX1JFUV9SQ1ZEOwpAQCAtMjY1NCw3ICsyNzExLDggQEAKIAkJZ290byBvdXQ7IC8qIER1cGxpY2F0ZSBtZXNzYWdlLiAqLwogCX0KIAljdXJfY21faWRfcHJpdiA9IGNtX2ZpbmRfbGlzdGVuKGNtX2lkLT5kZXZpY2UsCi0JCQkJCXNpZHJfcmVxX21zZy0+c2VydmljZV9pZCk7CisJCQkJCXNpZHJfcmVxX21zZy0+c2VydmljZV9pZCwKKwkJCQkJc2lkcl9yZXFfbXNnLT5wcml2YXRlX2RhdGEpOwogCWlmICghY3VyX2NtX2lkX3ByaXYpIHsKIAkJcmJfZXJhc2UoJmNtX2lkX3ByaXYtPnNpZHJfaWRfbm9kZSwgJmNtLnJlbW90ZV9zaWRyX3RhYmxlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY20ubG9jaywgZmxhZ3MpOwpAQCAtMzI5MSw3ICszMzQ5LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGliX2NtX2NsZWFudXAodm9pZCkKIHsKLQlmbHVzaF93b3JrcXVldWUoY20ud3EpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGNtLndxKTsKIAlpYl91bnJlZ2lzdGVyX2NsaWVudCgmY21fY2xpZW50KTsKIAlpZHJfZGVzdHJveSgmY20ubG9jYWxfaWRfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY4MzRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKQEAgLTAsMCArMSwxOTI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFZvbHRhaXJlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSwgTmV0d29yayBBcHBsaWFuY2UsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1LCBNZWxsYW5veCBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIFNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzOgorICoKKyAqIDEpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkNvbW1vbiBQdWJsaWMgTGljZW5zZSAxLjAiIGEgY29weSBvZiB3aGljaCBpcworICogICAgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9jcGwucGhwLgorICoKKyAqIDIpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIlRoZSBCU0QgTGljZW5zZSIgYSBjb3B5IG9mIHdoaWNoIGlzCisgKiAgICBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4KKyAqCisgKiAzKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIiIGEKKyAqICAgIGNvcHkgb2Ygd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHAuCisgKgorICogTGljZW5zZWUgaGFzIHRoZSByaWdodCB0byBjaG9vc2Ugb25lIG9mIHRoZSBhYm92ZSBsaWNlbnNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCBvbmUgb2YgdGhlIGxpY2Vuc2Ugbm90aWNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIG9uZSBvZiB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisKKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY21faWIuaD4KKyNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CisjaW5jbHVkZSA8cmRtYS9pYl9jbS5oPgorI2luY2x1ZGUgPHJkbWEvaWJfc2EuaD4KKworTU9EVUxFX0FVVEhPUigiU2VhbiBIZWZ0eSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIFJETUEgQ00gQWdlbnQiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKKworI2RlZmluZSBDTUFfQ01fUkVTUE9OU0VfVElNRU9VVCAyMAorI2RlZmluZSBDTUFfTUFYX0NNX1JFVFJJRVMgMworCitzdGF0aWMgdm9pZCBjbWFfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworc3RhdGljIHZvaWQgY21hX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKKworc3RhdGljIHN0cnVjdCBpYl9jbGllbnQgY21hX2NsaWVudCA9IHsKKwkubmFtZSAgID0gImNtYSIsCisJLmFkZCAgICA9IGNtYV9hZGRfb25lLAorCS5yZW1vdmUgPSBjbWFfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIExJU1RfSEVBRChkZXZfbGlzdCk7CitzdGF0aWMgTElTVF9IRUFEKGxpc3Rlbl9hbnlfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjbWFfd3E7CitzdGF0aWMgREVGSU5FX0lEUihzZHBfcHMpOworc3RhdGljIERFRklORV9JRFIodGNwX3BzKTsKKworc3RydWN0IGNtYV9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgaWJfZGV2aWNlCSpkZXZpY2U7CisJX19iZTY0CQkJbm9kZV9ndWlkOworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXA7CisJYXRvbWljX3QJCXJlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJaWRfbGlzdDsKK307CisKK2VudW0gY21hX3N0YXRlIHsKKwlDTUFfSURMRSwKKwlDTUFfQUREUl9RVUVSWSwKKwlDTUFfQUREUl9SRVNPTFZFRCwKKwlDTUFfUk9VVEVfUVVFUlksCisJQ01BX1JPVVRFX1JFU09MVkVELAorCUNNQV9DT05ORUNULAorCUNNQV9ESVNDT05ORUNULAorCUNNQV9BRERSX0JPVU5ELAorCUNNQV9MSVNURU4sCisJQ01BX0RFVklDRV9SRU1PVkFMLAorCUNNQV9ERVNUUk9ZSU5HCit9OworCitzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QgeworCXN0cnVjdCBpZHIJCSpwczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlvd25lcnM7CisJdW5zaWduZWQgc2hvcnQJCXBvcnQ7Cit9OworCisvKgorICogRGV2aWNlIHJlbW92YWwgY2FuIG9jY3VyIGF0IGFueXRpbWUsIHNvIHdlIG5lZWQgZXh0cmEgaGFuZGxpbmcgdG8KKyAqIHNlcmlhbGl6ZSBub3RpZnlpbmcgdGhlIHVzZXIgb2YgZGV2aWNlIHJlbW92YWwgd2l0aCBvdGhlciBjYWxsYmFja3MuCisgKiBXZSBkbyB0aGlzIGJ5IGRpc2FibGluZyByZW1vdmFsIG5vdGlmaWNhdGlvbiB3aGlsZSBhIGNhbGxiYWNrIGlzIGluIHByb2Nlc3MsCisgKiBhbmQgcmVwb3J0aW5nIGl0IGFmdGVyIHRoZSBjYWxsYmFjayBjb21wbGV0ZXMuCisgKi8KK3N0cnVjdCByZG1hX2lkX3ByaXZhdGUgeworCXN0cnVjdCByZG1hX2NtX2lkCWlkOworCisJc3RydWN0IHJkbWFfYmluZF9saXN0CSpiaW5kX2xpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUJbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0ZW5fbGlzdDsKKwlzdHJ1Y3QgY21hX2RldmljZQkqY21hX2RldjsKKworCWVudW0gY21hX3N0YXRlCQlzdGF0ZTsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXA7CisJYXRvbWljX3QJCXJlZmNvdW50OworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfcmVtb3ZlOworCWF0b21pY190CQlkZXZfcmVtb3ZlOworCisJaW50CQkJYmFja2xvZzsKKwlpbnQJCQl0aW1lb3V0X21zOworCXN0cnVjdCBpYl9zYV9xdWVyeQkqcXVlcnk7CisJaW50CQkJcXVlcnlfaWQ7CisJdW5pb24geworCQlzdHJ1Y3QgaWJfY21faWQJKmliOworCX0gY21faWQ7CisKKwl1MzIJCQlzZXFfbnVtOworCXUzMgkJCXFwX251bTsKKwllbnVtIGliX3FwX3R5cGUJCXFwX3R5cGU7CisJdTgJCQlzcnE7Cit9OworCitzdHJ1Y3QgY21hX3dvcmsgeworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUJKmlkOworCWVudW0gY21hX3N0YXRlCQlvbGRfc3RhdGU7CisJZW51bSBjbWFfc3RhdGUJCW5ld19zdGF0ZTsKKwlzdHJ1Y3QgcmRtYV9jbV9ldmVudAlldmVudDsKK307CisKK3VuaW9uIGNtYV9pcF9hZGRyIHsKKwlzdHJ1Y3QgaW42X2FkZHIgaXA2OworCXN0cnVjdCB7CisJCV9fdTMyIHBhZFszXTsKKwkJX191MzIgYWRkcjsKKwl9IGlwNDsKK307CisKK3N0cnVjdCBjbWFfaGRyIHsKKwl1OCBjbWFfdmVyc2lvbjsKKwl1OCBpcF92ZXJzaW9uOwkvKiBJUCB2ZXJzaW9uOiA3OjQgKi8KKwlfX3UxNiBwb3J0OworCXVuaW9uIGNtYV9pcF9hZGRyIHNyY19hZGRyOworCXVuaW9uIGNtYV9pcF9hZGRyIGRzdF9hZGRyOworfTsKKworc3RydWN0IHNkcF9oaCB7CisJdTggYnNkaFsxNl07CisJdTggc2RwX3ZlcnNpb247IC8qIE1ham9yIHZlcnNpb246IDc6NCAqLworCXU4IGlwX3ZlcnNpb247CS8qIElQIHZlcnNpb246IDc6NCAqLworCXU4IHNkcF9zcGVjaWZpYzFbMTBdOworCV9fdTE2IHBvcnQ7CisJX191MTYgc2RwX3NwZWNpZmljMjsKKwl1bmlvbiBjbWFfaXBfYWRkciBzcmNfYWRkcjsKKwl1bmlvbiBjbWFfaXBfYWRkciBkc3RfYWRkcjsKK307CisKK3N0cnVjdCBzZHBfaGFoIHsKKwl1OCBic2RoWzE2XTsKKwl1OCBzZHBfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgQ01BX1ZFUlNJT04gMHgwMAorI2RlZmluZSBTRFBfTUFKX1ZFUlNJT04gMHgyCisKK3N0YXRpYyBpbnQgY21hX2NvbXAoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwgZW51bSBjbWFfc3RhdGUgY29tcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldCA9IChpZF9wcml2LT5zdGF0ZSA9PSBjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZF9wcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWFfY29tcF9leGNoKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgZW51bSBjbWFfc3RhdGUgY29tcCwgZW51bSBjbWFfc3RhdGUgZXhjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmICgocmV0ID0gKGlkX3ByaXYtPnN0YXRlID09IGNvbXApKSkKKwkJaWRfcHJpdi0+c3RhdGUgPSBleGNoOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBjbWFfc3RhdGUgY21hX2V4Y2goc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSAgICAgICBlbnVtIGNtYV9zdGF0ZSBleGNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZW51bSBjbWFfc3RhdGUgb2xkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlvbGQgPSBpZF9wcml2LT5zdGF0ZTsKKwlpZF9wcml2LT5zdGF0ZSA9IGV4Y2g7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggY21hX2dldF9pcF92ZXIoc3RydWN0IGNtYV9oZHIgKmhkcikKK3sKKwlyZXR1cm4gaGRyLT5pcF92ZXJzaW9uID4+IDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbWFfc2V0X2lwX3ZlcihzdHJ1Y3QgY21hX2hkciAqaGRyLCB1OCBpcF92ZXIpCit7CisJaGRyLT5pcF92ZXJzaW9uID0gKGlwX3ZlciA8PCA0KSB8IChoZHItPmlwX3ZlcnNpb24gJiAweEYpOworfQorCitzdGF0aWMgaW5saW5lIHU4IHNkcF9nZXRfbWFqdih1OCBzZHBfdmVyc2lvbikKK3sKKwlyZXR1cm4gc2RwX3ZlcnNpb24gPj4gNDsKK30KKworc3RhdGljIGlubGluZSB1OCBzZHBfZ2V0X2lwX3ZlcihzdHJ1Y3Qgc2RwX2hoICpoaCkKK3sKKwlyZXR1cm4gaGgtPmlwX3ZlcnNpb24gPj4gNDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNkcF9zZXRfaXBfdmVyKHN0cnVjdCBzZHBfaGggKmhoLCB1OCBpcF92ZXIpCit7CisJaGgtPmlwX3ZlcnNpb24gPSAoaXBfdmVyIDw8IDQpIHwgKGhoLT5pcF92ZXJzaW9uICYgMHhGKTsKK30KKworc3RhdGljIHZvaWQgY21hX2F0dGFjaF90b19kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2KQoreworCWF0b21pY19pbmMoJmNtYV9kZXYtPnJlZmNvdW50KTsKKwlpZF9wcml2LT5jbWFfZGV2ID0gY21hX2RldjsKKwlpZF9wcml2LT5pZC5kZXZpY2UgPSBjbWFfZGV2LT5kZXZpY2U7CisJbGlzdF9hZGRfdGFpbCgmaWRfcHJpdi0+bGlzdCwgJmNtYV9kZXYtPmlkX2xpc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY21hX2RlcmVmX2RldihzdHJ1Y3QgY21hX2RldmljZSAqY21hX2RldikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY21hX2Rldi0+cmVmY291bnQpKQorCQljb21wbGV0ZSgmY21hX2Rldi0+Y29tcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9kZXRhY2hfZnJvbV9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlsaXN0X2RlbCgmaWRfcHJpdi0+bGlzdCk7CisJY21hX2RlcmVmX2RldihpZF9wcml2LT5jbWFfZGV2KTsKKwlpZF9wcml2LT5jbWFfZGV2ID0gTlVMTDsKK30KKworc3RhdGljIGludCBjbWFfYWNxdWlyZV9pYl9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgY21hX2RldmljZSAqY21hX2RldjsKKwl1bmlvbiBpYl9naWQgKmdpZDsKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWdpZCA9IGliX2FkZHJfZ2V0X3NnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIpOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbWFfZGV2LCAmZGV2X2xpc3QsIGxpc3QpIHsKKwkJcmV0ID0gaWJfZmluZF9jYWNoZWRfZ2lkKGNtYV9kZXYtPmRldmljZSwgZ2lkLAorCQkJCQkgJmlkX3ByaXYtPmlkLnBvcnRfbnVtLCBOVUxMKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWNtYV9hdHRhY2hfdG9fZGV2KGlkX3ByaXYsIGNtYV9kZXYpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtYV9hY3F1aXJlX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN3aXRjaCAoaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkci5kZXZfdHlwZSkgeworCWNhc2UgSUJfTk9ERV9DQToKKwkJcmV0dXJuIGNtYV9hY3F1aXJlX2liX2RldihpZF9wcml2KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9kZXJlZl9pZChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpZF9wcml2LT5yZWZjb3VudCkpCisJCWNvbXBsZXRlKCZpZF9wcml2LT5jb21wKTsKK30KKworc3RhdGljIHZvaWQgY21hX3JlbGVhc2VfcmVtb3ZlKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlkX3ByaXYtPmRldl9yZW1vdmUpKQorCQl3YWtlX3VwKCZpZF9wcml2LT53YWl0X3JlbW92ZSk7Cit9CisKK3N0cnVjdCByZG1hX2NtX2lkICpyZG1hX2NyZWF0ZV9pZChyZG1hX2NtX2V2ZW50X2hhbmRsZXIgZXZlbnRfaGFuZGxlciwKKwkJCQkgIHZvaWQgKmNvbnRleHQsIGVudW0gcmRtYV9wb3J0X3NwYWNlIHBzKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisKKwlpZF9wcml2ID0ga3phbGxvYyhzaXplb2YgKmlkX3ByaXYsIEdGUF9LRVJORUwpOworCWlmICghaWRfcHJpdikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZF9wcml2LT5zdGF0ZSA9IENNQV9JRExFOworCWlkX3ByaXYtPmlkLmNvbnRleHQgPSBjb250ZXh0OworCWlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXIgPSBldmVudF9oYW5kbGVyOworCWlkX3ByaXYtPmlkLnBzID0gcHM7CisJc3Bpbl9sb2NrX2luaXQoJmlkX3ByaXYtPmxvY2spOworCWluaXRfY29tcGxldGlvbigmaWRfcHJpdi0+Y29tcCk7CisJYXRvbWljX3NldCgmaWRfcHJpdi0+cmVmY291bnQsIDEpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlkX3ByaXYtPndhaXRfcmVtb3ZlKTsKKwlhdG9taWNfc2V0KCZpZF9wcml2LT5kZXZfcmVtb3ZlLCAwKTsKKwlJTklUX0xJU1RfSEVBRCgmaWRfcHJpdi0+bGlzdGVuX2xpc3QpOworCWdldF9yYW5kb21fYnl0ZXMoJmlkX3ByaXYtPnNlcV9udW0sIHNpemVvZiBpZF9wcml2LT5zZXFfbnVtKTsKKworCXJldHVybiAmaWRfcHJpdi0+aWQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfY3JlYXRlX2lkKTsKKworc3RhdGljIGludCBjbWFfaW5pdF9pYl9xcChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCBzdHJ1Y3QgaWJfcXAgKnFwKQoreworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyOworCWludCByZXQ7CisKKwlkZXZfYWRkciA9ICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyOworCXJldCA9IGliX2ZpbmRfY2FjaGVkX3BrZXkoaWRfcHJpdi0+aWQuZGV2aWNlLCBpZF9wcml2LT5pZC5wb3J0X251bSwKKwkJCQkgIGliX2FkZHJfZ2V0X3BrZXkoZGV2X2FkZHIpLAorCQkJCSAgJnFwX2F0dHIucGtleV9pbmRleCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfSU5JVDsKKwlxcF9hdHRyLnFwX2FjY2Vzc19mbGFncyA9IElCX0FDQ0VTU19MT0NBTF9XUklURTsKKwlxcF9hdHRyLnBvcnRfbnVtID0gaWRfcHJpdi0+aWQucG9ydF9udW07CisJcmV0dXJuIGliX21vZGlmeV9xcChxcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFIHwgSUJfUVBfQUNDRVNTX0ZMQUdTIHwKKwkJCQkJICBJQl9RUF9QS0VZX0lOREVYIHwgSUJfUVBfUE9SVCk7Cit9CisKK2ludCByZG1hX2NyZWF0ZV9xcChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBpYl9wZCAqcGQsCisJCSAgIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cikKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCXN0cnVjdCBpYl9xcCAqcXA7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoaWQtPmRldmljZSAhPSBwZC0+ZGV2aWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXFwID0gaWJfY3JlYXRlX3FwKHBkLCBxcF9pbml0X2F0dHIpOworCWlmIChJU19FUlIocXApKQorCQlyZXR1cm4gUFRSX0VSUihxcCk7CisKKwlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgeworCWNhc2UgSUJfTk9ERV9DQToKKwkJcmV0ID0gY21hX2luaXRfaWJfcXAoaWRfcHJpdiwgcXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PU1lTOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWlkLT5xcCA9IHFwOworCWlkX3ByaXYtPnFwX251bSA9IHFwLT5xcF9udW07CisJaWRfcHJpdi0+cXBfdHlwZSA9IHFwLT5xcF90eXBlOworCWlkX3ByaXYtPnNycSA9IChxcC0+c3JxICE9IE5VTEwpOworCXJldHVybiAwOworZXJyOgorCWliX2Rlc3Ryb3lfcXAocXApOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfY3JlYXRlX3FwKTsKKwordm9pZCByZG1hX2Rlc3Ryb3lfcXAoc3RydWN0IHJkbWFfY21faWQgKmlkKQoreworCWliX2Rlc3Ryb3lfcXAoaWQtPnFwKTsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9kZXN0cm95X3FwKTsKKworc3RhdGljIGludCBjbWFfbW9kaWZ5X3FwX3J0cihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpCit7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKwlpbnQgcXBfYXR0cl9tYXNrLCByZXQ7CisKKwlpZiAoIWlkLT5xcCkKKwkJcmV0dXJuIDA7CisKKwkvKiBOZWVkIHRvIHVwZGF0ZSBRUCBhdHRyaWJ1dGVzIGZyb20gZGVmYXVsdCB2YWx1ZXMuICovCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19JTklUOworCXJldCA9IHJkbWFfaW5pdF9xcF9hdHRyKGlkLCAmcXBfYXR0ciwgJnFwX2F0dHJfbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGliX21vZGlmeV9xcChpZC0+cXAsICZxcF9hdHRyLCBxcF9hdHRyX21hc2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX1JUUjsKKwlyZXQgPSByZG1hX2luaXRfcXBfYXR0cihpZCwgJnFwX2F0dHIsICZxcF9hdHRyX21hc2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaWJfbW9kaWZ5X3FwKGlkLT5xcCwgJnFwX2F0dHIsIHFwX2F0dHJfbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgY21hX21vZGlmeV9xcF9ydHMoc3RydWN0IHJkbWFfY21faWQgKmlkKQoreworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisJaW50IHFwX2F0dHJfbWFzaywgcmV0OworCisJaWYgKCFpZC0+cXApCisJCXJldHVybiAwOworCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19SVFM7CisJcmV0ID0gcmRtYV9pbml0X3FwX2F0dHIoaWQsICZxcF9hdHRyLCAmcXBfYXR0cl9tYXNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGliX21vZGlmeV9xcChpZC0+cXAsICZxcF9hdHRyLCBxcF9hdHRyX21hc2spOworfQorCitzdGF0aWMgaW50IGNtYV9tb2RpZnlfcXBfZXJyKHN0cnVjdCByZG1hX2NtX2lkICppZCkKK3sKKwlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOworCisJaWYgKCFpZC0+cXApCisJCXJldHVybiAwOworCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJcmV0dXJuIGliX21vZGlmeV9xcChpZC0+cXAsICZxcF9hdHRyLCBJQl9RUF9TVEFURSk7Cit9CisKK2ludCByZG1hX2luaXRfcXBfYXR0cihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLAorCQkgICAgICAgaW50ICpxcF9hdHRyX21hc2spCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCXN3aXRjaCAoaWRfcHJpdi0+aWQuZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwljYXNlIElCX05PREVfQ0E6CisJCXJldCA9IGliX2NtX2luaXRfcXBfYXR0cihpZF9wcml2LT5jbV9pZC5pYiwgcXBfYXR0ciwKKwkJCQkJIHFwX2F0dHJfbWFzayk7CisJCWlmIChxcF9hdHRyLT5xcF9zdGF0ZSA9PSBJQl9RUFNfUlRSKQorCQkJcXBfYXR0ci0+cnFfcHNuID0gaWRfcHJpdi0+c2VxX251bTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9pbml0X3FwX2F0dHIpOworCitzdGF0aWMgaW5saW5lIGludCBjbWFfemVyb19hZGRyKHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgaW42X2FkZHIgKmlwNjsKKworCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJcmV0dXJuIFpFUk9ORVQoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9hZGRyLnNfYWRkcik7CisJZWxzZSB7CisJCWlwNiA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfYWRkcjsKKwkJcmV0dXJuIChpcDYtPnM2X2FkZHIzMlswXSB8IGlwNi0+czZfYWRkcjMyWzFdIHwKKwkJCWlwNi0+czZfYWRkcjMyWzNdIHwgaXA2LT5zNl9hZGRyMzJbNF0pID09IDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBjbWFfbG9vcGJhY2tfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJcmV0dXJuIExPT1BCQUNLKCgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHIpLT5zaW5fYWRkci5zX2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjbWFfYW55X2FkZHIoc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXJldHVybiBjbWFfemVyb19hZGRyKGFkZHIpIHx8IGNtYV9sb29wYmFja19hZGRyKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjbWFfYW55X3BvcnQoc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXJldHVybiAhKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9wb3J0OworfQorCitzdGF0aWMgaW50IGNtYV9nZXRfbmV0X2luZm8odm9pZCAqaGRyLCBlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcywKKwkJCSAgICB1OCAqaXBfdmVyLCBfX3UxNiAqcG9ydCwKKwkJCSAgICB1bmlvbiBjbWFfaXBfYWRkciAqKnNyYywgdW5pb24gY21hX2lwX2FkZHIgKipkc3QpCit7CisJc3dpdGNoIChwcykgeworCWNhc2UgUkRNQV9QU19TRFA6CisJCWlmIChzZHBfZ2V0X21hanYoKChzdHJ1Y3Qgc2RwX2hoICopIGhkciktPnNkcF92ZXJzaW9uKSAhPQorCQkgICAgU0RQX01BSl9WRVJTSU9OKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJKmlwX3Zlcgk9IHNkcF9nZXRfaXBfdmVyKGhkcik7CisJCSpwb3J0CT0gKChzdHJ1Y3Qgc2RwX2hoICopIGhkciktPnBvcnQ7CisJCSpzcmMJPSAmKChzdHJ1Y3Qgc2RwX2hoICopIGhkciktPnNyY19hZGRyOworCQkqZHN0CT0gJigoc3RydWN0IHNkcF9oaCAqKSBoZHIpLT5kc3RfYWRkcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCgoc3RydWN0IGNtYV9oZHIgKikgaGRyKS0+Y21hX3ZlcnNpb24gIT0gQ01BX1ZFUlNJT04pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkqaXBfdmVyCT0gY21hX2dldF9pcF92ZXIoaGRyKTsKKwkJKnBvcnQJPSAoKHN0cnVjdCBjbWFfaGRyICopIGhkciktPnBvcnQ7CisJCSpzcmMJPSAmKChzdHJ1Y3QgY21hX2hkciAqKSBoZHIpLT5zcmNfYWRkcjsKKwkJKmRzdAk9ICYoKHN0cnVjdCBjbWFfaGRyICopIGhkciktPmRzdF9hZGRyOworCQlicmVhazsKKwl9CisKKwlpZiAoKmlwX3ZlciAhPSA0ICYmICppcF92ZXIgIT0gNikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9zYXZlX25ldF9pbmZvKHN0cnVjdCByZG1hX2FkZHIgKmFkZHIsCisJCQkgICAgICBzdHJ1Y3QgcmRtYV9hZGRyICpsaXN0ZW5fYWRkciwKKwkJCSAgICAgIHU4IGlwX3ZlciwgX191MTYgcG9ydCwKKwkJCSAgICAgIHVuaW9uIGNtYV9pcF9hZGRyICpzcmMsIHVuaW9uIGNtYV9pcF9hZGRyICpkc3QpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpsaXN0ZW40LCAqaXA0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmxpc3RlbjYsICppcDY7CisKKwlzd2l0Y2ggKGlwX3ZlcikgeworCWNhc2UgNDoKKwkJbGlzdGVuNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmxpc3Rlbl9hZGRyLT5zcmNfYWRkcjsKKwkJaXA0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmYWRkci0+c3JjX2FkZHI7CisJCWlwNC0+c2luX2ZhbWlseSA9IGxpc3RlbjQtPnNpbl9mYW1pbHk7CisJCWlwNC0+c2luX2FkZHIuc19hZGRyID0gZHN0LT5pcDQuYWRkcjsKKwkJaXA0LT5zaW5fcG9ydCA9IGxpc3RlbjQtPnNpbl9wb3J0OworCisJCWlwNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmFkZHItPmRzdF9hZGRyOworCQlpcDQtPnNpbl9mYW1pbHkgPSBsaXN0ZW40LT5zaW5fZmFtaWx5OworCQlpcDQtPnNpbl9hZGRyLnNfYWRkciA9IHNyYy0+aXA0LmFkZHI7CisJCWlwNC0+c2luX3BvcnQgPSBwb3J0OworCQlicmVhazsKKwljYXNlIDY6CisJCWxpc3RlbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmbGlzdGVuX2FkZHItPnNyY19hZGRyOworCQlpcDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmYWRkci0+c3JjX2FkZHI7CisJCWlwNi0+c2luNl9mYW1pbHkgPSBsaXN0ZW42LT5zaW42X2ZhbWlseTsKKwkJaXA2LT5zaW42X2FkZHIgPSBkc3QtPmlwNjsKKwkJaXA2LT5zaW42X3BvcnQgPSBsaXN0ZW42LT5zaW42X3BvcnQ7CisKKwkJaXA2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJmFkZHItPmRzdF9hZGRyOworCQlpcDYtPnNpbjZfZmFtaWx5ID0gbGlzdGVuNi0+c2luNl9mYW1pbHk7CisJCWlwNi0+c2luNl9hZGRyID0gc3JjLT5pcDY7CisJCWlwNi0+c2luNl9wb3J0ID0gcG9ydDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBjbWFfdXNlcl9kYXRhX29mZnNldChlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcykKK3sKKwlzd2l0Y2ggKHBzKSB7CisJY2FzZSBSRE1BX1BTX1NEUDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgY21hX2hkcik7CisJfQorfQorCitzdGF0aWMgaW50IGNtYV9ub3RpZnlfdXNlcihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LAorCQkJICAgZW51bSByZG1hX2NtX2V2ZW50X3R5cGUgdHlwZSwgaW50IHN0YXR1cywKKwkJCSAgIHZvaWQgKmRhdGEsIHU4IGRhdGFfbGVuKQoreworCXN0cnVjdCByZG1hX2NtX2V2ZW50IGV2ZW50OworCisJZXZlbnQuZXZlbnQgPSB0eXBlOworCWV2ZW50LnN0YXR1cyA9IHN0YXR1czsKKwlldmVudC5wcml2YXRlX2RhdGEgPSBkYXRhOworCWV2ZW50LnByaXZhdGVfZGF0YV9sZW4gPSBkYXRhX2xlbjsKKworCXJldHVybiBpZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyKCZpZF9wcml2LT5pZCwgJmV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgY21hX2NhbmNlbF9yb3V0ZShzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN3aXRjaCAoaWRfcHJpdi0+aWQuZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwljYXNlIElCX05PREVfQ0E6CisJCWlmIChpZF9wcml2LT5xdWVyeSkKKwkJCWliX3NhX2NhbmNlbF9xdWVyeShpZF9wcml2LT5xdWVyeV9pZCwgaWRfcHJpdi0+cXVlcnkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtYV9pbnRlcm5hbF9saXN0ZW4oc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlyZXR1cm4gKGlkX3ByaXYtPnN0YXRlID09IENNQV9MSVNURU4pICYmIGlkX3ByaXYtPmNtYV9kZXYgJiYKKwkgICAgICAgY21hX2FueV9hZGRyKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyKTsKK30KKworc3RhdGljIHZvaWQgY21hX2Rlc3Ryb3lfbGlzdGVuKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFU1RST1lJTkcpOworCisJaWYgKGlkX3ByaXYtPmNtYV9kZXYpIHsKKwkJc3dpdGNoIChpZF9wcml2LT5pZC5kZXZpY2UtPm5vZGVfdHlwZSkgeworCQljYXNlIElCX05PREVfQ0E6CisJIAkJaWYgKGlkX3ByaXYtPmNtX2lkLmliICYmICFJU19FUlIoaWRfcHJpdi0+Y21faWQuaWIpKQorCQkJCWliX2Rlc3Ryb3lfY21faWQoaWRfcHJpdi0+Y21faWQuaWIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQljbWFfZGV0YWNoX2Zyb21fZGV2KGlkX3ByaXYpOworCX0KKwlsaXN0X2RlbCgmaWRfcHJpdi0+bGlzdGVuX2xpc3QpOworCisJY21hX2RlcmVmX2lkKGlkX3ByaXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlkX3ByaXYtPmNvbXApOworCisJa2ZyZWUoaWRfcHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9jYW5jZWxfbGlzdGVucyhzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmRldl9pZF9wcml2OworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9kZWwoJmlkX3ByaXYtPmxpc3QpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpZF9wcml2LT5saXN0ZW5fbGlzdCkpIHsKKwkJZGV2X2lkX3ByaXYgPSBsaXN0X2VudHJ5KGlkX3ByaXYtPmxpc3Rlbl9saXN0Lm5leHQsCisJCQkJCSBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBsaXN0ZW5fbGlzdCk7CisJCWNtYV9kZXN0cm95X2xpc3RlbihkZXZfaWRfcHJpdik7CisJfQorCW11dGV4X3VubG9jaygmbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9jYW5jZWxfb3BlcmF0aW9uKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkJIGVudW0gY21hX3N0YXRlIHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIENNQV9BRERSX1FVRVJZOgorCQlyZG1hX2FkZHJfY2FuY2VsKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBDTUFfUk9VVEVfUVVFUlk6CisJCWNtYV9jYW5jZWxfcm91dGUoaWRfcHJpdik7CisJCWJyZWFrOworCWNhc2UgQ01BX0xJU1RFTjoKKwkJaWYgKGNtYV9hbnlfYWRkcigmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcikgJiYKKwkJICAgICFpZF9wcml2LT5jbWFfZGV2KQorCQkJY21hX2NhbmNlbF9saXN0ZW5zKGlkX3ByaXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9yZWxlYXNlX3BvcnQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QgKmJpbmRfbGlzdCA9IGlkX3ByaXYtPmJpbmRfbGlzdDsKKworCWlmICghYmluZF9saXN0KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlobGlzdF9kZWwoJmlkX3ByaXYtPm5vZGUpOworCWlmIChobGlzdF9lbXB0eSgmYmluZF9saXN0LT5vd25lcnMpKSB7CisJCWlkcl9yZW1vdmUoYmluZF9saXN0LT5wcywgYmluZF9saXN0LT5wb3J0KTsKKwkJa2ZyZWUoYmluZF9saXN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KKwordm9pZCByZG1hX2Rlc3Ryb3lfaWQoc3RydWN0IHJkbWFfY21faWQgKmlkKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJZW51bSBjbWFfc3RhdGUgc3RhdGU7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJc3RhdGUgPSBjbWFfZXhjaChpZF9wcml2LCBDTUFfREVTVFJPWUlORyk7CisJY21hX2NhbmNlbF9vcGVyYXRpb24oaWRfcHJpdiwgc3RhdGUpOworCisJaWYgKGlkX3ByaXYtPmNtYV9kZXYpIHsKKwkJc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwkJY2FzZSBJQl9OT0RFX0NBOgorCSAJCWlmIChpZF9wcml2LT5jbV9pZC5pYiAmJiAhSVNfRVJSKGlkX3ByaXYtPmNtX2lkLmliKSkKKwkJCQlpYl9kZXN0cm95X2NtX2lkKGlkX3ByaXYtPmNtX2lkLmliKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkgIAltdXRleF9sb2NrKCZsb2NrKTsKKwkJY21hX2RldGFjaF9mcm9tX2RldihpZF9wcml2KTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwl9CisKKwljbWFfcmVsZWFzZV9wb3J0KGlkX3ByaXYpOworCWNtYV9kZXJlZl9pZChpZF9wcml2KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZpZF9wcml2LT5jb21wKTsKKworCWtmcmVlKGlkX3ByaXYtPmlkLnJvdXRlLnBhdGhfcmVjKTsKKwlrZnJlZShpZF9wcml2KTsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9kZXN0cm95X2lkKTsKKworc3RhdGljIGludCBjbWFfcmVwX3JlY3Yoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY21hX21vZGlmeV9xcF9ydHIoJmlkX3ByaXYtPmlkKTsKKwlpZiAocmV0KQorCQlnb3RvIHJlamVjdDsKKworCXJldCA9IGNtYV9tb2RpZnlfcXBfcnRzKCZpZF9wcml2LT5pZCk7CisJaWYgKHJldCkKKwkJZ290byByZWplY3Q7CisKKwlyZXQgPSBpYl9zZW5kX2NtX3J0dShpZF9wcml2LT5jbV9pZC5pYiwgTlVMTCwgMCk7CisJaWYgKHJldCkKKwkJZ290byByZWplY3Q7CisKKwlyZXR1cm4gMDsKK3JlamVjdDoKKwljbWFfbW9kaWZ5X3FwX2VycigmaWRfcHJpdi0+aWQpOworCWliX3NlbmRfY21fcmVqKGlkX3ByaXYtPmNtX2lkLmliLCBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCwKKwkJICAgICAgIE5VTEwsIDAsIE5VTEwsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21hX3ZlcmlmeV9yZXAoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoaWRfcHJpdi0+aWQucHMgPT0gUkRNQV9QU19TRFAgJiYKKwkgICAgc2RwX2dldF9tYWp2KCgoc3RydWN0IHNkcF9oYWggKikgZGF0YSktPnNkcF92ZXJzaW9uKSAhPQorCSAgICBTRFBfTUFKX1ZFUlNJT04pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21hX3J0dV9yZWN2KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGNtYV9tb2RpZnlfcXBfcnRzKCZpZF9wcml2LT5pZCk7CisJaWYgKHJldCkKKwkJZ290byByZWplY3Q7CisKKwlyZXR1cm4gMDsKK3JlamVjdDoKKwljbWFfbW9kaWZ5X3FwX2VycigmaWRfcHJpdi0+aWQpOworCWliX3NlbmRfY21fcmVqKGlkX3ByaXYtPmNtX2lkLmliLCBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCwKKwkJICAgICAgIE5VTEwsIDAsIE5VTEwsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21hX2liX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwgc3RydWN0IGliX2NtX2V2ZW50ICppYl9ldmVudCkKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2ID0gY21faWQtPmNvbnRleHQ7CisJZW51bSByZG1hX2NtX2V2ZW50X3R5cGUgZXZlbnQ7CisJdTggcHJpdmF0ZV9kYXRhX2xlbiA9IDA7CisJaW50IHJldCA9IDAsIHN0YXR1cyA9IDA7CisKKwlhdG9taWNfaW5jKCZpZF9wcml2LT5kZXZfcmVtb3ZlKTsKKwlpZiAoIWNtYV9jb21wKGlkX3ByaXYsIENNQV9DT05ORUNUKSkKKwkJZ290byBvdXQ7CisKKwlzd2l0Y2ggKGliX2V2ZW50LT5ldmVudCkgeworCWNhc2UgSUJfQ01fUkVRX0VSUk9SOgorCWNhc2UgSUJfQ01fUkVQX0VSUk9SOgorCQlldmVudCA9IFJETUFfQ01fRVZFTlRfVU5SRUFDSEFCTEU7CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJCWJyZWFrOworCWNhc2UgSUJfQ01fUkVQX1JFQ0VJVkVEOgorCQlzdGF0dXMgPSBjbWFfdmVyaWZ5X3JlcChpZF9wcml2LCBpYl9ldmVudC0+cHJpdmF0ZV9kYXRhKTsKKwkJaWYgKHN0YXR1cykKKwkJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOworCQllbHNlIGlmIChpZF9wcml2LT5pZC5xcCAmJiBpZF9wcml2LT5pZC5wcyAhPSBSRE1BX1BTX1NEUCkgeworCQkJc3RhdHVzID0gY21hX3JlcF9yZWN2KGlkX3ByaXYpOworCQkJZXZlbnQgPSBzdGF0dXMgPyBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfRVJST1IgOgorCQkJCQkgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKwkJfSBlbHNlCisJCQlldmVudCA9IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVNQT05TRTsKKwkJcHJpdmF0ZV9kYXRhX2xlbiA9IElCX0NNX1JFUF9QUklWQVRFX0RBVEFfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBJQl9DTV9SVFVfUkVDRUlWRUQ6CisJCXN0YXR1cyA9IGNtYV9ydHVfcmVjdihpZF9wcml2KTsKKwkJZXZlbnQgPSBzdGF0dXMgPyBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfRVJST1IgOgorCQkJCSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOworCQlicmVhazsKKwljYXNlIElCX0NNX0RSRVFfRVJST1I6CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgSUJfQ01fRFJFUV9SRUNFSVZFRDoKKwljYXNlIElCX0NNX0RSRVBfUkVDRUlWRUQ6CisJCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQ09OTkVDVCwgQ01BX0RJU0NPTk5FQ1QpKQorCQkJZ290byBvdXQ7CisJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQ7CisJCWJyZWFrOworCWNhc2UgSUJfQ01fVElNRVdBSVRfRVhJVDoKKwljYXNlIElCX0NNX01SQV9SRUNFSVZFRDoKKwkJLyogaWdub3JlIGV2ZW50ICovCisJCWdvdG8gb3V0OworCWNhc2UgSUJfQ01fUkVKX1JFQ0VJVkVEOgorCQljbWFfbW9kaWZ5X3FwX2VycigmaWRfcHJpdi0+aWQpOworCQlzdGF0dXMgPSBpYl9ldmVudC0+cGFyYW0ucmVqX3JjdmQucmVhc29uOworCQlldmVudCA9IFJETUFfQ01fRVZFTlRfUkVKRUNURUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiUkRNQSBDTUE6IHVuZXhwZWN0ZWQgSUIgQ00gZXZlbnQ6ICVkIiwKKwkJICAgICAgIGliX2V2ZW50LT5ldmVudCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGNtYV9ub3RpZnlfdXNlcihpZF9wcml2LCBldmVudCwgc3RhdHVzLCBpYl9ldmVudC0+cHJpdmF0ZV9kYXRhLAorCQkJICAgICAgcHJpdmF0ZV9kYXRhX2xlbik7CisJaWYgKHJldCkgeworCQkvKiBEZXN0cm95IHRoZSBDTSBJRCBieSByZXR1cm5pbmcgYSBub24temVybyB2YWx1ZS4gKi8KKwkJaWRfcHJpdi0+Y21faWQuaWIgPSBOVUxMOworCQljbWFfZXhjaChpZF9wcml2LCBDTUFfREVTVFJPWUlORyk7CisJCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwkJcmRtYV9kZXN0cm95X2lkKCZpZF9wcml2LT5pZCk7CisJCXJldHVybiByZXQ7CisJfQorb3V0OgorCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqY21hX25ld19pZChzdHJ1Y3QgcmRtYV9jbV9pZCAqbGlzdGVuX2lkLAorCQkJCQkgIHN0cnVjdCBpYl9jbV9ldmVudCAqaWJfZXZlbnQpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQ7CisJc3RydWN0IHJkbWFfcm91dGUgKnJ0OworCXVuaW9uIGNtYV9pcF9hZGRyICpzcmMsICpkc3Q7CisJX191MTYgcG9ydDsKKwl1OCBpcF92ZXI7CisKKwlpZCA9IHJkbWFfY3JlYXRlX2lkKGxpc3Rlbl9pZC0+ZXZlbnRfaGFuZGxlciwgbGlzdGVuX2lkLT5jb250ZXh0LAorCQkJICAgIGxpc3Rlbl9pZC0+cHMpOworCWlmIChJU19FUlIoaWQpKQorCQlyZXR1cm4gTlVMTDsKKworCXJ0ID0gJmlkLT5yb3V0ZTsKKwlydC0+bnVtX3BhdGhzID0gaWJfZXZlbnQtPnBhcmFtLnJlcV9yY3ZkLmFsdGVybmF0ZV9wYXRoID8gMiA6IDE7CisJcnQtPnBhdGhfcmVjID0ga21hbGxvYyhzaXplb2YgKnJ0LT5wYXRoX3JlYyAqIHJ0LT5udW1fcGF0aHMsIEdGUF9LRVJORUwpOworCWlmICghcnQtPnBhdGhfcmVjKQorCQlnb3RvIGVycjsKKworCWlmIChjbWFfZ2V0X25ldF9pbmZvKGliX2V2ZW50LT5wcml2YXRlX2RhdGEsIGxpc3Rlbl9pZC0+cHMsCisJCQkgICAgICZpcF92ZXIsICZwb3J0LCAmc3JjLCAmZHN0KSkKKwkJZ290byBlcnI7CisKKwljbWFfc2F2ZV9uZXRfaW5mbygmaWQtPnJvdXRlLmFkZHIsICZsaXN0ZW5faWQtPnJvdXRlLmFkZHIsCisJCQkgIGlwX3ZlciwgcG9ydCwgc3JjLCBkc3QpOworCXJ0LT5wYXRoX3JlY1swXSA9ICppYl9ldmVudC0+cGFyYW0ucmVxX3JjdmQucHJpbWFyeV9wYXRoOworCWlmIChydC0+bnVtX3BhdGhzID09IDIpCisJCXJ0LT5wYXRoX3JlY1sxXSA9ICppYl9ldmVudC0+cGFyYW0ucmVxX3JjdmQuYWx0ZXJuYXRlX3BhdGg7CisKKwlpYl9hZGRyX3NldF9zZ2lkKCZydC0+YWRkci5kZXZfYWRkciwgJnJ0LT5wYXRoX3JlY1swXS5zZ2lkKTsKKwlpYl9hZGRyX3NldF9kZ2lkKCZydC0+YWRkci5kZXZfYWRkciwgJnJ0LT5wYXRoX3JlY1swXS5kZ2lkKTsKKwlpYl9hZGRyX3NldF9wa2V5KCZydC0+YWRkci5kZXZfYWRkciwgYmUxNl90b19jcHUocnQtPnBhdGhfcmVjWzBdLnBrZXkpKTsKKwlydC0+YWRkci5kZXZfYWRkci5kZXZfdHlwZSA9IElCX05PREVfQ0E7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWRfcHJpdi0+c3RhdGUgPSBDTUFfQ09OTkVDVDsKKwlyZXR1cm4gaWRfcHJpdjsKK2VycjoKKwlyZG1hX2Rlc3Ryb3lfaWQoaWQpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGNtYV9yZXFfaGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaWJfY21fZXZlbnQgKmliX2V2ZW50KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmxpc3Rlbl9pZCwgKmNvbm5faWQ7CisJaW50IG9mZnNldCwgcmV0OworCisJbGlzdGVuX2lkID0gY21faWQtPmNvbnRleHQ7CisJYXRvbWljX2luYygmbGlzdGVuX2lkLT5kZXZfcmVtb3ZlKTsKKwlpZiAoIWNtYV9jb21wKGxpc3Rlbl9pZCwgQ01BX0xJU1RFTikpIHsKKwkJcmV0ID0gLUVDT05OQUJPUlRFRDsKKwkJZ290byBvdXQ7CisJfQorCisJY29ubl9pZCA9IGNtYV9uZXdfaWQoJmxpc3Rlbl9pZC0+aWQsIGliX2V2ZW50KTsKKwlpZiAoIWNvbm5faWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXRvbWljX2luYygmY29ubl9pZC0+ZGV2X3JlbW92ZSk7CisJcmV0ID0gY21hX2FjcXVpcmVfaWJfZGV2KGNvbm5faWQpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJY21hX3JlbGVhc2VfcmVtb3ZlKGNvbm5faWQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoJmNvbm5faWQtPmlkKTsKKwkJZ290byBvdXQ7CisJfQorCisJY29ubl9pZC0+Y21faWQuaWIgPSBjbV9pZDsKKwljbV9pZC0+Y29udGV4dCA9IGNvbm5faWQ7CisJY21faWQtPmNtX2hhbmRsZXIgPSBjbWFfaWJfaGFuZGxlcjsKKworCW9mZnNldCA9IGNtYV91c2VyX2RhdGFfb2Zmc2V0KGxpc3Rlbl9pZC0+aWQucHMpOworCXJldCA9IGNtYV9ub3RpZnlfdXNlcihjb25uX2lkLCBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVCwgMCwKKwkJCSAgICAgIGliX2V2ZW50LT5wcml2YXRlX2RhdGEgKyBvZmZzZXQsCisJCQkgICAgICBJQl9DTV9SRVFfUFJJVkFURV9EQVRBX1NJWkUgLSBvZmZzZXQpOworCWlmIChyZXQpIHsKKwkJLyogRGVzdHJveSB0aGUgQ00gSUQgYnkgcmV0dXJuaW5nIGEgbm9uLXplcm8gdmFsdWUuICovCisJCWNvbm5faWQtPmNtX2lkLmliID0gTlVMTDsKKwkJY21hX2V4Y2goY29ubl9pZCwgQ01BX0RFU1RST1lJTkcpOworCQljbWFfcmVsZWFzZV9yZW1vdmUoY29ubl9pZCk7CisJCXJkbWFfZGVzdHJveV9pZCgmY29ubl9pZC0+aWQpOworCX0KK291dDoKKwljbWFfcmVsZWFzZV9yZW1vdmUobGlzdGVuX2lkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19iZTY0IGNtYV9nZXRfc2VydmljZV9pZChlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcywgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXJldHVybiBjcHVfdG9fYmU2NCgoKHU2NClwcyA8PCAxNikgKworCSAgICAgICBiZTE2X3RvX2NwdSgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRyKS0+c2luX3BvcnQpKTsKK30KKworc3RhdGljIHZvaWQgY21hX3NldF9jb21wYXJlX2RhdGEoZW51bSByZG1hX3BvcnRfc3BhY2UgcHMsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCQkgc3RydWN0IGliX2NtX2NvbXBhcmVfZGF0YSAqY29tcGFyZSkKK3sKKwlzdHJ1Y3QgY21hX2hkciAqY21hX2RhdGEsICpjbWFfbWFzazsKKwlzdHJ1Y3Qgc2RwX2hoICpzZHBfZGF0YSwgKnNkcF9tYXNrOworCV9fdTMyIGlwNF9hZGRyOworCXN0cnVjdCBpbjZfYWRkciBpcDZfYWRkcjsKKworCW1lbXNldChjb21wYXJlLCAwLCBzaXplb2YgKmNvbXBhcmUpOworCWNtYV9kYXRhID0gKHZvaWQgKikgY29tcGFyZS0+ZGF0YTsKKwljbWFfbWFzayA9ICh2b2lkICopIGNvbXBhcmUtPm1hc2s7CisJc2RwX2RhdGEgPSAodm9pZCAqKSBjb21wYXJlLT5kYXRhOworCXNkcF9tYXNrID0gKHZvaWQgKikgY29tcGFyZS0+bWFzazsKKworCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpcDRfYWRkciA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHIpLT5zaW5fYWRkci5zX2FkZHI7CisJCWlmIChwcyA9PSBSRE1BX1BTX1NEUCkgeworCQkJc2RwX3NldF9pcF92ZXIoc2RwX2RhdGEsIDQpOworCQkJc2RwX3NldF9pcF92ZXIoc2RwX21hc2ssIDB4Rik7CisJCQlzZHBfZGF0YS0+ZHN0X2FkZHIuaXA0LmFkZHIgPSBpcDRfYWRkcjsKKwkJCXNkcF9tYXNrLT5kc3RfYWRkci5pcDQuYWRkciA9IH4wOworCQl9IGVsc2UgeworCQkJY21hX3NldF9pcF92ZXIoY21hX2RhdGEsIDQpOworCQkJY21hX3NldF9pcF92ZXIoY21hX21hc2ssIDB4Rik7CisJCQljbWFfZGF0YS0+ZHN0X2FkZHIuaXA0LmFkZHIgPSBpcDRfYWRkcjsKKwkJCWNtYV9tYXNrLT5kc3RfYWRkci5pcDQuYWRkciA9IH4wOworCQl9CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWlwNl9hZGRyID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHIpLT5zaW42X2FkZHI7CisJCWlmIChwcyA9PSBSRE1BX1BTX1NEUCkgeworCQkJc2RwX3NldF9pcF92ZXIoc2RwX2RhdGEsIDYpOworCQkJc2RwX3NldF9pcF92ZXIoc2RwX21hc2ssIDB4Rik7CisJCQlzZHBfZGF0YS0+ZHN0X2FkZHIuaXA2ID0gaXA2X2FkZHI7CisJCQltZW1zZXQoJnNkcF9tYXNrLT5kc3RfYWRkci5pcDYsIDB4RkYsCisJCQkgICAgICAgc2l6ZW9mIHNkcF9tYXNrLT5kc3RfYWRkci5pcDYpOworCQl9IGVsc2UgeworCQkJY21hX3NldF9pcF92ZXIoY21hX2RhdGEsIDYpOworCQkJY21hX3NldF9pcF92ZXIoY21hX21hc2ssIDB4Rik7CisJCQljbWFfZGF0YS0+ZHN0X2FkZHIuaXA2ID0gaXA2X2FkZHI7CisJCQltZW1zZXQoJmNtYV9tYXNrLT5kc3RfYWRkci5pcDYsIDB4RkYsCisJCQkgICAgICAgc2l6ZW9mIGNtYV9tYXNrLT5kc3RfYWRkci5pcDYpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBjbWFfaWJfbGlzdGVuKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IGliX2NtX2NvbXBhcmVfZGF0YSBjb21wYXJlX2RhdGE7CisJc3RydWN0IHNvY2thZGRyICphZGRyOworCV9fYmU2NCBzdmNfaWQ7CisJaW50IHJldDsKKworCWlkX3ByaXYtPmNtX2lkLmliID0gaWJfY3JlYXRlX2NtX2lkKGlkX3ByaXYtPmlkLmRldmljZSwgY21hX3JlcV9oYW5kbGVyLAorCQkJCQkgICAgaWRfcHJpdik7CisJaWYgKElTX0VSUihpZF9wcml2LT5jbV9pZC5pYikpCisJCXJldHVybiBQVFJfRVJSKGlkX3ByaXYtPmNtX2lkLmliKTsKKworCWFkZHIgPSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwlzdmNfaWQgPSBjbWFfZ2V0X3NlcnZpY2VfaWQoaWRfcHJpdi0+aWQucHMsIGFkZHIpOworCWlmIChjbWFfYW55X2FkZHIoYWRkcikpCisJCXJldCA9IGliX2NtX2xpc3RlbihpZF9wcml2LT5jbV9pZC5pYiwgc3ZjX2lkLCAwLCBOVUxMKTsKKwllbHNlIHsKKwkJY21hX3NldF9jb21wYXJlX2RhdGEoaWRfcHJpdi0+aWQucHMsIGFkZHIsICZjb21wYXJlX2RhdGEpOworCQlyZXQgPSBpYl9jbV9saXN0ZW4oaWRfcHJpdi0+Y21faWQuaWIsIHN2Y19pZCwgMCwgJmNvbXBhcmVfZGF0YSk7CisJfQorCisJaWYgKHJldCkgeworCQlpYl9kZXN0cm95X2NtX2lkKGlkX3ByaXYtPmNtX2lkLmliKTsKKwkJaWRfcHJpdi0+Y21faWQuaWIgPSBOVUxMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21hX2xpc3Rlbl9oYW5kbGVyKHN0cnVjdCByZG1hX2NtX2lkICppZCwKKwkJCSAgICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2ID0gaWQtPmNvbnRleHQ7CisKKwlpZC0+Y29udGV4dCA9IGlkX3ByaXYtPmlkLmNvbnRleHQ7CisJaWQtPmV2ZW50X2hhbmRsZXIgPSBpZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyOworCXJldHVybiBpZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyKGlkLCBldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9saXN0ZW5fb25fZGV2KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgICAgICBzdHJ1Y3QgY21hX2RldmljZSAqY21hX2RldikKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICpkZXZfaWRfcHJpdjsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQ7CisJaW50IHJldDsKKworCWlkID0gcmRtYV9jcmVhdGVfaWQoY21hX2xpc3Rlbl9oYW5kbGVyLCBpZF9wcml2LCBpZF9wcml2LT5pZC5wcyk7CisJaWYgKElTX0VSUihpZCkpCisJCXJldHVybjsKKworCWRldl9pZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisKKwlkZXZfaWRfcHJpdi0+c3RhdGUgPSBDTUFfQUREUl9CT1VORDsKKwltZW1jcHkoJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyLCAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkciwKKwkgICAgICAgaXBfYWRkcl9zaXplKCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyKSk7CisKKwljbWFfYXR0YWNoX3RvX2RldihkZXZfaWRfcHJpdiwgY21hX2Rldik7CisJbGlzdF9hZGRfdGFpbCgmZGV2X2lkX3ByaXYtPmxpc3Rlbl9saXN0LCAmaWRfcHJpdi0+bGlzdGVuX2xpc3QpOworCisJcmV0ID0gcmRtYV9saXN0ZW4oaWQsIGlkX3ByaXYtPmJhY2tsb2cpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuOworZXJyOgorCWNtYV9kZXN0cm95X2xpc3RlbihkZXZfaWRfcHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9saXN0ZW5fb25fYWxsKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXY7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpZF9wcml2LT5saXN0LCAmbGlzdGVuX2FueV9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtYV9kZXYsICZkZXZfbGlzdCwgbGlzdCkKKwkJY21hX2xpc3Rlbl9vbl9kZXYoaWRfcHJpdiwgY21hX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KKworc3RhdGljIGludCBjbWFfYmluZF9hbnkoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzYV9mYW1pbHlfdCBhZikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcl9pbjsKKworCW1lbXNldCgmYWRkcl9pbiwgMCwgc2l6ZW9mIGFkZHJfaW4pOworCWFkZHJfaW4uc2luX2ZhbWlseSA9IGFmOworCXJldHVybiByZG1hX2JpbmRfYWRkcihpZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcl9pbik7Cit9CisKK2ludCByZG1hX2xpc3RlbihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCBiYWNrbG9nKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoaWRfcHJpdi0+c3RhdGUgPT0gQ01BX0lETEUpIHsKKwkJcmV0ID0gY21hX2JpbmRfYW55KGlkLCBBRl9JTkVUKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX0JPVU5ELCBDTUFfTElTVEVOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZF9wcml2LT5iYWNrbG9nID0gYmFja2xvZzsKKwlpZiAoaWQtPmRldmljZSkgeworCQlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgeworCQljYXNlIElCX05PREVfQ0E6CisJCQlyZXQgPSBjbWFfaWJfbGlzdGVuKGlkX3ByaXYpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT1NZUzsKKwkJCWdvdG8gZXJyOworCQl9CisJfSBlbHNlCisJCWNtYV9saXN0ZW5fb25fYWxsKGlkX3ByaXYpOworCisJcmV0dXJuIDA7CitlcnI6CisJaWRfcHJpdi0+YmFja2xvZyA9IDA7CisJY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfTElTVEVOLCBDTUFfQUREUl9CT1VORCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9saXN0ZW4pOworCitzdGF0aWMgdm9pZCBjbWFfcXVlcnlfaGFuZGxlcihpbnQgc3RhdHVzLCBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnBhdGhfcmVjLAorCQkJICAgICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgY21hX3dvcmsgKndvcmsgPSBjb250ZXh0OworCXN0cnVjdCByZG1hX3JvdXRlICpyb3V0ZTsKKworCXJvdXRlID0gJndvcmstPmlkLT5pZC5yb3V0ZTsKKworCWlmICghc3RhdHVzKSB7CisJCXJvdXRlLT5udW1fcGF0aHMgPSAxOworCQkqcm91dGUtPnBhdGhfcmVjID0gKnBhdGhfcmVjOworCX0gZWxzZSB7CisJCXdvcmstPm9sZF9zdGF0ZSA9IENNQV9ST1VURV9RVUVSWTsKKwkJd29yay0+bmV3X3N0YXRlID0gQ01BX0FERFJfUkVTT0xWRUQ7CisJCXdvcmstPmV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9ST1VURV9FUlJPUjsKKwl9CisKKwlxdWV1ZV93b3JrKGNtYV93cSwgJndvcmstPndvcmspOworfQorCitzdGF0aWMgaW50IGNtYV9xdWVyeV9pYl9yb3V0ZShzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCBpbnQgdGltZW91dF9tcywKKwkJCSAgICAgIHN0cnVjdCBjbWFfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkciA9ICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRldl9hZGRyOworCXN0cnVjdCBpYl9zYV9wYXRoX3JlYyBwYXRoX3JlYzsKKworCW1lbXNldCgmcGF0aF9yZWMsIDAsIHNpemVvZiBwYXRoX3JlYyk7CisJcGF0aF9yZWMuc2dpZCA9ICppYl9hZGRyX2dldF9zZ2lkKGFkZHIpOworCXBhdGhfcmVjLmRnaWQgPSAqaWJfYWRkcl9nZXRfZGdpZChhZGRyKTsKKwlwYXRoX3JlYy5wa2V5ID0gY3B1X3RvX2JlMTYoaWJfYWRkcl9nZXRfcGtleShhZGRyKSk7CisJcGF0aF9yZWMubnVtYl9wYXRoID0gMTsKKworCWlkX3ByaXYtPnF1ZXJ5X2lkID0gaWJfc2FfcGF0aF9yZWNfZ2V0KGlkX3ByaXYtPmlkLmRldmljZSwKKwkJCQlpZF9wcml2LT5pZC5wb3J0X251bSwgJnBhdGhfcmVjLAorCQkJCUlCX1NBX1BBVEhfUkVDX0RHSUQgfCBJQl9TQV9QQVRIX1JFQ19TR0lEIHwKKwkJCQlJQl9TQV9QQVRIX1JFQ19QS0VZIHwgSUJfU0FfUEFUSF9SRUNfTlVNQl9QQVRILAorCQkJCXRpbWVvdXRfbXMsIEdGUF9LRVJORUwsCisJCQkJY21hX3F1ZXJ5X2hhbmRsZXIsIHdvcmssICZpZF9wcml2LT5xdWVyeSk7CisKKwlyZXR1cm4gKGlkX3ByaXYtPnF1ZXJ5X2lkIDwgMCkgPyBpZF9wcml2LT5xdWVyeV9pZCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV93b3JrX2hhbmRsZXIodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY21hX3dvcmsgKndvcmsgPSBkYXRhOworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSB3b3JrLT5pZDsKKwlpbnQgZGVzdHJveSA9IDA7CisKKwlhdG9taWNfaW5jKCZpZF9wcml2LT5kZXZfcmVtb3ZlKTsKKwlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgd29yay0+b2xkX3N0YXRlLCB3b3JrLT5uZXdfc3RhdGUpKQorCQlnb3RvIG91dDsKKworCWlmIChpZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyKCZpZF9wcml2LT5pZCwgJndvcmstPmV2ZW50KSkgeworCQljbWFfZXhjaChpZF9wcml2LCBDTUFfREVTVFJPWUlORyk7CisJCWRlc3Ryb3kgPSAxOworCX0KK291dDoKKwljbWFfcmVsZWFzZV9yZW1vdmUoaWRfcHJpdik7CisJY21hX2RlcmVmX2lkKGlkX3ByaXYpOworCWlmIChkZXN0cm95KQorCQlyZG1hX2Rlc3Ryb3lfaWQoJmlkX3ByaXYtPmlkKTsKKwlrZnJlZSh3b3JrKTsKK30KKworc3RhdGljIGludCBjbWFfcmVzb2x2ZV9pYl9yb3V0ZShzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCBpbnQgdGltZW91dF9tcykKK3sKKwlzdHJ1Y3QgcmRtYV9yb3V0ZSAqcm91dGUgPSAmaWRfcHJpdi0+aWQucm91dGU7CisJc3RydWN0IGNtYV93b3JrICp3b3JrOworCWludCByZXQ7CisKKwl3b3JrID0ga3phbGxvYyhzaXplb2YgKndvcmssIEdGUF9LRVJORUwpOworCWlmICghd29yaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrLT5pZCA9IGlkX3ByaXY7CisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBjbWFfd29ya19oYW5kbGVyLCB3b3JrKTsKKwl3b3JrLT5vbGRfc3RhdGUgPSBDTUFfUk9VVEVfUVVFUlk7CisJd29yay0+bmV3X3N0YXRlID0gQ01BX1JPVVRFX1JFU09MVkVEOworCXdvcmstPmV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9ST1VURV9SRVNPTFZFRDsKKworCXJvdXRlLT5wYXRoX3JlYyA9IGttYWxsb2Moc2l6ZW9mICpyb3V0ZS0+cGF0aF9yZWMsIEdGUF9LRVJORUwpOworCWlmICghcm91dGUtPnBhdGhfcmVjKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXQgPSBjbWFfcXVlcnlfaWJfcm91dGUoaWRfcHJpdiwgdGltZW91dF9tcywgd29yayk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJcmV0dXJuIDA7CitlcnIyOgorCWtmcmVlKHJvdXRlLT5wYXRoX3JlYyk7CisJcm91dGUtPnBhdGhfcmVjID0gTlVMTDsKK2VycjE6CisJa2ZyZWUod29yayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkbWFfc2V0X2liX3BhdGhzKHN0cnVjdCByZG1hX2NtX2lkICppZCwKKwkJICAgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpwYXRoX3JlYywgaW50IG51bV9wYXRocykKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX1JFU09MVkVELCBDTUFfUk9VVEVfUkVTT0xWRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlkLT5yb3V0ZS5wYXRoX3JlYyA9IGttYWxsb2Moc2l6ZW9mICpwYXRoX3JlYyAqIG51bV9wYXRocywgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZC0+cm91dGUucGF0aF9yZWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJbWVtY3B5KGlkLT5yb3V0ZS5wYXRoX3JlYywgcGF0aF9yZWMsIHNpemVvZiAqcGF0aF9yZWMgKiBudW1fcGF0aHMpOworCXJldHVybiAwOworZXJyOgorCWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX1JPVVRFX1JFU09MVkVELCBDTUFfQUREUl9SRVNPTFZFRCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9zZXRfaWJfcGF0aHMpOworCitpbnQgcmRtYV9yZXNvbHZlX3JvdXRlKHN0cnVjdCByZG1hX2NtX2lkICppZCwgaW50IHRpbWVvdXRfbXMpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9SRVNPTFZFRCwgQ01BX1JPVVRFX1FVRVJZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhdG9taWNfaW5jKCZpZF9wcml2LT5yZWZjb3VudCk7CisJc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwljYXNlIElCX05PREVfQ0E6CisJCXJldCA9IGNtYV9yZXNvbHZlX2liX3JvdXRlKGlkX3ByaXYsIHRpbWVvdXRfbXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PU1lTOworCQlicmVhazsKKwl9CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwljbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9ST1VURV9RVUVSWSwgQ01BX0FERFJfUkVTT0xWRUQpOworCWNtYV9kZXJlZl9pZChpZF9wcml2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX3Jlc29sdmVfcm91dGUpOworCitzdGF0aWMgaW50IGNtYV9iaW5kX2xvb3BiYWNrKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXY7CisJc3RydWN0IGliX3BvcnRfYXR0ciBwb3J0X2F0dHI7CisJdW5pb24gaWJfZ2lkICpnaWQ7CisJdTE2IHBrZXk7CisJaW50IHJldDsKKwl1OCBwOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbWFfZGV2LCAmZGV2X2xpc3QsIGxpc3QpCisJCWZvciAocCA9IDE7IHAgPD0gY21hX2Rldi0+ZGV2aWNlLT5waHlzX3BvcnRfY250OyArK3ApCisJCQlpZiAoIWliX3F1ZXJ5X3BvcnQgKGNtYV9kZXYtPmRldmljZSwgcCwgJnBvcnRfYXR0cikgJiYKKwkJCSAgICBwb3J0X2F0dHIuc3RhdGUgPT0gSUJfUE9SVF9BQ1RJVkUpCisJCQkJZ290byBwb3J0X2ZvdW5kOworCisJaWYgKCFsaXN0X2VtcHR5KCZkZXZfbGlzdCkpIHsKKwkJcCA9IDE7CisJCWNtYV9kZXYgPSBsaXN0X2VudHJ5KGRldl9saXN0Lm5leHQsIHN0cnVjdCBjbWFfZGV2aWNlLCBsaXN0KTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKK3BvcnRfZm91bmQ6CisJZ2lkID0gaWJfYWRkcl9nZXRfc2dpZCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkcik7CisJcmV0ID0gaWJfZ2V0X2NhY2hlZF9naWQoY21hX2Rldi0+ZGV2aWNlLCBwLCAwLCBnaWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaWJfZ2V0X2NhY2hlZF9wa2V5KGNtYV9kZXYtPmRldmljZSwgcCwgMCwgJnBrZXkpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWJfYWRkcl9zZXRfcGtleSgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkciwgcGtleSk7CisJaWRfcHJpdi0+aWQucG9ydF9udW0gPSBwOworCWNtYV9hdHRhY2hfdG9fZGV2KGlkX3ByaXYsIGNtYV9kZXYpOworb3V0OgorCW11dGV4X3VubG9jaygmbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkcl9oYW5kbGVyKGludCBzdGF0dXMsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsCisJCQkgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBjb250ZXh0OworCWVudW0gcmRtYV9jbV9ldmVudF90eXBlIGV2ZW50OworCisJYXRvbWljX2luYygmaWRfcHJpdi0+ZGV2X3JlbW92ZSk7CisJaWYgKCFpZF9wcml2LT5jbWFfZGV2ICYmICFzdGF0dXMpCisJCXN0YXR1cyA9IGNtYV9hY3F1aXJlX2RldihpZF9wcml2KTsKKworCWlmIChzdGF0dXMpIHsKKwkJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX1FVRVJZLCBDTUFfQUREUl9CT1VORCkpCisJCQlnb3RvIG91dDsKKwkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0FERFJfRVJST1I7CisJfSBlbHNlIHsKKwkJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX1FVRVJZLCBDTUFfQUREUl9SRVNPTFZFRCkpCisJCQlnb3RvIG91dDsKKwkJbWVtY3B5KCZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyLCBzcmNfYWRkciwKKwkJICAgICAgIGlwX2FkZHJfc2l6ZShzcmNfYWRkcikpOworCQlldmVudCA9IFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDsKKwl9CisKKwlpZiAoY21hX25vdGlmeV91c2VyKGlkX3ByaXYsIGV2ZW50LCBzdGF0dXMsIE5VTEwsIDApKSB7CisJCWNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVNUUk9ZSU5HKTsKKwkJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCQljbWFfZGVyZWZfaWQoaWRfcHJpdik7CisJCXJkbWFfZGVzdHJveV9pZCgmaWRfcHJpdi0+aWQpOworCQlyZXR1cm47CisJfQorb3V0OgorCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwljbWFfZGVyZWZfaWQoaWRfcHJpdik7Cit9CisKK3N0YXRpYyBpbnQgY21hX3Jlc29sdmVfbG9vcGJhY2soc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgY21hX3dvcmsgKndvcms7CisJc3RydWN0IHNvY2thZGRyX2luICpzcmNfaW4sICpkc3RfaW47CisJaW50IHJldDsKKworCXdvcmsgPSBremFsbG9jKHNpemVvZiAqd29yaywgR0ZQX0tFUk5FTCk7CisJaWYgKCF3b3JrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghaWRfcHJpdi0+Y21hX2RldikgeworCQlyZXQgPSBjbWFfYmluZF9sb29wYmFjayhpZF9wcml2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCWliX2FkZHJfc2V0X2RnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsCisJCQkgaWJfYWRkcl9nZXRfc2dpZCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkcikpOworCisJaWYgKGNtYV96ZXJvX2FkZHIoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKSB7CisJCXNyY19pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwkJZHN0X2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRzdF9hZGRyOworCQlzcmNfaW4tPnNpbl9mYW1pbHkgPSBkc3RfaW4tPnNpbl9mYW1pbHk7CisJCXNyY19pbi0+c2luX2FkZHIuc19hZGRyID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CisJfQorCisJd29yay0+aWQgPSBpZF9wcml2OworCUlOSVRfV09SSygmd29yay0+d29yaywgY21hX3dvcmtfaGFuZGxlciwgd29yayk7CisJd29yay0+b2xkX3N0YXRlID0gQ01BX0FERFJfUVVFUlk7CisJd29yay0+bmV3X3N0YXRlID0gQ01BX0FERFJfUkVTT0xWRUQ7CisJd29yay0+ZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0FERFJfUkVTT0xWRUQ7CisJcXVldWVfd29yayhjbWFfd3EsICZ3b3JrLT53b3JrKTsKKwlyZXR1cm4gMDsKK2VycjoKKwlrZnJlZSh3b3JrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtYV9iaW5kX2FkZHIoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIpCit7CisJaWYgKHNyY19hZGRyICYmIHNyY19hZGRyLT5zYV9mYW1pbHkpCisJCXJldHVybiByZG1hX2JpbmRfYWRkcihpZCwgc3JjX2FkZHIpOworCWVsc2UKKwkJcmV0dXJuIGNtYV9iaW5kX2FueShpZCwgZHN0X2FkZHItPnNhX2ZhbWlseSk7Cit9CisKK2ludCByZG1hX3Jlc29sdmVfYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIsCisJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqZHN0X2FkZHIsIGludCB0aW1lb3V0X21zKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoaWRfcHJpdi0+c3RhdGUgPT0gQ01BX0lETEUpIHsKKwkJcmV0ID0gY21hX2JpbmRfYWRkcihpZCwgc3JjX2FkZHIsIGRzdF9hZGRyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX0JPVU5ELCBDTUFfQUREUl9RVUVSWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJYXRvbWljX2luYygmaWRfcHJpdi0+cmVmY291bnQpOworCW1lbWNweSgmaWQtPnJvdXRlLmFkZHIuZHN0X2FkZHIsIGRzdF9hZGRyLCBpcF9hZGRyX3NpemUoZHN0X2FkZHIpKTsKKwlpZiAoY21hX2FueV9hZGRyKGRzdF9hZGRyKSkKKwkJcmV0ID0gY21hX3Jlc29sdmVfbG9vcGJhY2soaWRfcHJpdik7CisJZWxzZQorCQlyZXQgPSByZG1hX3Jlc29sdmVfaXAoJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyLCBkc3RfYWRkciwKKwkJCQkgICAgICAmaWQtPnJvdXRlLmFkZHIuZGV2X2FkZHIsCisJCQkJICAgICAgdGltZW91dF9tcywgYWRkcl9oYW5kbGVyLCBpZF9wcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfUVVFUlksIENNQV9BRERSX0JPVU5EKTsKKwljbWFfZGVyZWZfaWQoaWRfcHJpdik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9yZXNvbHZlX2FkZHIpOworCitzdGF0aWMgdm9pZCBjbWFfYmluZF9wb3J0KHN0cnVjdCByZG1hX2JpbmRfbGlzdCAqYmluZF9saXN0LAorCQkJICBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwlzaW4tPnNpbl9wb3J0ID0gaHRvbnMoYmluZF9saXN0LT5wb3J0KTsKKwlpZF9wcml2LT5iaW5kX2xpc3QgPSBiaW5kX2xpc3Q7CisJaGxpc3RfYWRkX2hlYWQoJmlkX3ByaXYtPm5vZGUsICZiaW5kX2xpc3QtPm93bmVycyk7Cit9CisKK3N0YXRpYyBpbnQgY21hX2FsbG9jX3BvcnQoc3RydWN0IGlkciAqcHMsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgIHVuc2lnbmVkIHNob3J0IHNudW0pCit7CisJc3RydWN0IHJkbWFfYmluZF9saXN0ICpiaW5kX2xpc3Q7CisJaW50IHBvcnQsIHN0YXJ0LCByZXQ7CisKKwliaW5kX2xpc3QgPSBremFsbG9jKHNpemVvZiAqYmluZF9saXN0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpbmRfbGlzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGFydCA9IHNudW0gPyBzbnVtIDogc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMF07CisKKwlkbyB7CisJCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKHBzLCBiaW5kX2xpc3QsIHN0YXJ0LCAmcG9ydCk7CisJfSB3aGlsZSAoKHJldCA9PSAtRUFHQUlOKSAmJiBpZHJfcHJlX2dldChwcywgR0ZQX0tFUk5FTCkpOworCisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlpZiAoKHNudW0gJiYgcG9ydCAhPSBzbnVtKSB8fAorCSAgICAoIXNudW0gJiYgcG9ydCA+IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzFdKSkgeworCQlpZHJfcmVtb3ZlKHBzLCBwb3J0KTsKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisJCWdvdG8gZXJyOworCX0KKworCWJpbmRfbGlzdC0+cHMgPSBwczsKKwliaW5kX2xpc3QtPnBvcnQgPSAodW5zaWduZWQgc2hvcnQpIHBvcnQ7CisJY21hX2JpbmRfcG9ydChiaW5kX2xpc3QsIGlkX3ByaXYpOworCXJldHVybiAwOworZXJyOgorCWtmcmVlKGJpbmRfbGlzdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWFfdXNlX3BvcnQoc3RydWN0IGlkciAqcHMsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqY3VyX2lkOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqY3VyX3NpbjsKKwlzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QgKmJpbmRfbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwl1bnNpZ25lZCBzaG9ydCBzbnVtOworCisJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwlzbnVtID0gbnRvaHMoc2luLT5zaW5fcG9ydCk7CisJaWYgKHNudW0gPCBQUk9UX1NPQ0sgJiYgIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWJpbmRfbGlzdCA9IGlkcl9maW5kKHBzLCBzbnVtKTsKKwlpZiAoIWJpbmRfbGlzdCkKKwkJcmV0dXJuIGNtYV9hbGxvY19wb3J0KHBzLCBpZF9wcml2LCBzbnVtKTsKKworCS8qCisJICogV2UgZG9uJ3Qgc3VwcG9ydCBiaW5kaW5nIHRvIGFueSBhZGRyZXNzIGlmIGFueW9uZSBpcyBib3VuZCB0bworCSAqIGEgc3BlY2lmaWMgYWRkcmVzcyBvbiB0aGUgc2FtZSBwb3J0LgorCSAqLworCWlmIChjbWFfYW55X2FkZHIoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjdXJfaWQsIG5vZGUsICZiaW5kX2xpc3QtPm93bmVycywgbm9kZSkgeworCQlpZiAoY21hX2FueV9hZGRyKCZjdXJfaWQtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKQorCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCQkKKwkJY3VyX3NpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmN1cl9pZC0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IGN1cl9zaW4tPnNpbl9hZGRyLnNfYWRkcikKKwkJCXJldHVybiAtRUFERFJJTlVTRTsKKwl9CisKKwljbWFfYmluZF9wb3J0KGJpbmRfbGlzdCwgaWRfcHJpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21hX2dldF9wb3J0KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IGlkciAqcHM7CisJaW50IHJldDsKKworCXN3aXRjaCAoaWRfcHJpdi0+aWQucHMpIHsKKwljYXNlIFJETUFfUFNfU0RQOgorCQlwcyA9ICZzZHBfcHM7CisJCWJyZWFrOworCWNhc2UgUkRNQV9QU19UQ1A6CisJCXBzID0gJnRjcF9wczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CisJfQorCisJbXV0ZXhfbG9jaygmbG9jayk7CisJaWYgKGNtYV9hbnlfcG9ydCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcikpCisJCXJldCA9IGNtYV9hbGxvY19wb3J0KHBzLCBpZF9wcml2LCAwKTsKKwllbHNlCisJCXJldCA9IGNtYV91c2VfcG9ydChwcywgaWRfcHJpdik7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCByZG1hX2JpbmRfYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQpCisJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfSURMRSwgQ01BX0FERFJfQk9VTkQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY21hX2FueV9hZGRyKGFkZHIpKSB7CisJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKGFkZHIsICZpZC0+cm91dGUuYWRkci5kZXZfYWRkcik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gY21hX2FjcXVpcmVfZGV2KGlkX3ByaXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJbWVtY3B5KCZpZC0+cm91dGUuYWRkci5zcmNfYWRkciwgYWRkciwgaXBfYWRkcl9zaXplKGFkZHIpKTsKKwlyZXQgPSBjbWFfZ2V0X3BvcnQoaWRfcHJpdik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwljbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX0JPVU5ELCBDTUFfSURMRSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9iaW5kX2FkZHIpOworCitzdGF0aWMgaW50IGNtYV9mb3JtYXRfaGRyKHZvaWQgKmhkciwgZW51bSByZG1hX3BvcnRfc3BhY2UgcHMsCisJCQkgIHN0cnVjdCByZG1hX3JvdXRlICpyb3V0ZSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyYzQsICpkc3Q0OworCXN0cnVjdCBjbWFfaGRyICpjbWFfaGRyOworCXN0cnVjdCBzZHBfaGggKnNkcF9oZHI7CisKKwlzcmM0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmcm91dGUtPmFkZHIuc3JjX2FkZHI7CisJZHN0NCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnJvdXRlLT5hZGRyLmRzdF9hZGRyOworCisJc3dpdGNoIChwcykgeworCWNhc2UgUkRNQV9QU19TRFA6CisJCXNkcF9oZHIgPSBoZHI7CisJCWlmIChzZHBfZ2V0X21hanYoc2RwX2hkci0+c2RwX3ZlcnNpb24pICE9IFNEUF9NQUpfVkVSU0lPTikKKwkJCXJldHVybiAtRUlOVkFMOworCQlzZHBfc2V0X2lwX3ZlcihzZHBfaGRyLCA0KTsKKwkJc2RwX2hkci0+c3JjX2FkZHIuaXA0LmFkZHIgPSBzcmM0LT5zaW5fYWRkci5zX2FkZHI7CisJCXNkcF9oZHItPmRzdF9hZGRyLmlwNC5hZGRyID0gZHN0NC0+c2luX2FkZHIuc19hZGRyOworCQlzZHBfaGRyLT5wb3J0ID0gc3JjNC0+c2luX3BvcnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNtYV9oZHIgPSBoZHI7CisJCWNtYV9oZHItPmNtYV92ZXJzaW9uID0gQ01BX1ZFUlNJT047CisJCWNtYV9zZXRfaXBfdmVyKGNtYV9oZHIsIDQpOworCQljbWFfaGRyLT5zcmNfYWRkci5pcDQuYWRkciA9IHNyYzQtPnNpbl9hZGRyLnNfYWRkcjsKKwkJY21hX2hkci0+ZHN0X2FkZHIuaXA0LmFkZHIgPSBkc3Q0LT5zaW5fYWRkci5zX2FkZHI7CisJCWNtYV9oZHItPnBvcnQgPSBzcmM0LT5zaW5fcG9ydDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtYV9jb25uZWN0X2liKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCit7CisJc3RydWN0IGliX2NtX3JlcV9wYXJhbSByZXE7CisJc3RydWN0IHJkbWFfcm91dGUgKnJvdXRlOworCXZvaWQgKnByaXZhdGVfZGF0YTsKKwlpbnQgb2Zmc2V0LCByZXQ7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mIHJlcSk7CisJb2Zmc2V0ID0gY21hX3VzZXJfZGF0YV9vZmZzZXQoaWRfcHJpdi0+aWQucHMpOworCXJlcS5wcml2YXRlX2RhdGFfbGVuID0gb2Zmc2V0ICsgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbjsKKwlwcml2YXRlX2RhdGEgPSBremFsbG9jKHJlcS5wcml2YXRlX2RhdGFfbGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXByaXZhdGVfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhICYmIGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4pCisJCW1lbWNweShwcml2YXRlX2RhdGEgKyBvZmZzZXQsIGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YSwKKwkJICAgICAgIGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4pOworCisJaWRfcHJpdi0+Y21faWQuaWIgPSBpYl9jcmVhdGVfY21faWQoaWRfcHJpdi0+aWQuZGV2aWNlLCBjbWFfaWJfaGFuZGxlciwKKwkJCQkJICAgIGlkX3ByaXYpOworCWlmIChJU19FUlIoaWRfcHJpdi0+Y21faWQuaWIpKSB7CisJCXJldCA9IFBUUl9FUlIoaWRfcHJpdi0+Y21faWQuaWIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyb3V0ZSA9ICZpZF9wcml2LT5pZC5yb3V0ZTsKKwlyZXQgPSBjbWFfZm9ybWF0X2hkcihwcml2YXRlX2RhdGEsIGlkX3ByaXYtPmlkLnBzLCByb3V0ZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmVxLnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKKworCXJlcS5wcmltYXJ5X3BhdGggPSAmcm91dGUtPnBhdGhfcmVjWzBdOworCWlmIChyb3V0ZS0+bnVtX3BhdGhzID09IDIpCisJCXJlcS5hbHRlcm5hdGVfcGF0aCA9ICZyb3V0ZS0+cGF0aF9yZWNbMV07CisKKwlyZXEuc2VydmljZV9pZCA9IGNtYV9nZXRfc2VydmljZV9pZChpZF9wcml2LT5pZC5wcywKKwkJCQkJICAgICZyb3V0ZS0+YWRkci5kc3RfYWRkcik7CisJcmVxLnFwX251bSA9IGlkX3ByaXYtPnFwX251bTsKKwlyZXEucXBfdHlwZSA9IGlkX3ByaXYtPnFwX3R5cGU7CisJcmVxLnN0YXJ0aW5nX3BzbiA9IGlkX3ByaXYtPnNlcV9udW07CisJcmVxLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSBjb25uX3BhcmFtLT5yZXNwb25kZXJfcmVzb3VyY2VzOworCXJlcS5pbml0aWF0b3JfZGVwdGggPSBjb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGg7CisJcmVxLmZsb3dfY29udHJvbCA9IGNvbm5fcGFyYW0tPmZsb3dfY29udHJvbDsKKwlyZXEucmV0cnlfY291bnQgPSBjb25uX3BhcmFtLT5yZXRyeV9jb3VudDsKKwlyZXEucm5yX3JldHJ5X2NvdW50ID0gY29ubl9wYXJhbS0+cm5yX3JldHJ5X2NvdW50OworCXJlcS5yZW1vdGVfY21fcmVzcG9uc2VfdGltZW91dCA9IENNQV9DTV9SRVNQT05TRV9USU1FT1VUOworCXJlcS5sb2NhbF9jbV9yZXNwb25zZV90aW1lb3V0ID0gQ01BX0NNX1JFU1BPTlNFX1RJTUVPVVQ7CisJcmVxLm1heF9jbV9yZXRyaWVzID0gQ01BX01BWF9DTV9SRVRSSUVTOworCXJlcS5zcnEgPSBpZF9wcml2LT5zcnEgPyAxIDogMDsKKworCXJldCA9IGliX3NlbmRfY21fcmVxKGlkX3ByaXYtPmNtX2lkLmliLCAmcmVxKTsKK291dDoKKwlrZnJlZShwcml2YXRlX2RhdGEpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZG1hX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX1JPVVRFX1JFU09MVkVELCBDTUFfQ09OTkVDVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFpZC0+cXApIHsKKwkJaWRfcHJpdi0+cXBfbnVtID0gY29ubl9wYXJhbS0+cXBfbnVtOworCQlpZF9wcml2LT5xcF90eXBlID0gY29ubl9wYXJhbS0+cXBfdHlwZTsKKwkJaWRfcHJpdi0+c3JxID0gY29ubl9wYXJhbS0+c3JxOworCX0KKworCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7CisJY2FzZSBJQl9OT0RFX0NBOgorCQlyZXQgPSBjbWFfY29ubmVjdF9pYihpZF9wcml2LCBjb25uX3BhcmFtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJfQorCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQ09OTkVDVCwgQ01BX1JPVVRFX1JFU09MVkVEKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX2Nvbm5lY3QpOworCitzdGF0aWMgaW50IGNtYV9hY2NlcHRfaWIoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtKQoreworCXN0cnVjdCBpYl9jbV9yZXBfcGFyYW0gcmVwOworCWludCByZXQ7CisKKwlyZXQgPSBjbWFfbW9kaWZ5X3FwX3J0cigmaWRfcHJpdi0+aWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZW1zZXQoJnJlcCwgMCwgc2l6ZW9mIHJlcCk7CisJcmVwLnFwX251bSA9IGlkX3ByaXYtPnFwX251bTsKKwlyZXAuc3RhcnRpbmdfcHNuID0gaWRfcHJpdi0+c2VxX251bTsKKwlyZXAucHJpdmF0ZV9kYXRhID0gY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhOworCXJlcC5wcml2YXRlX2RhdGFfbGVuID0gY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbjsKKwlyZXAucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXM7CisJcmVwLmluaXRpYXRvcl9kZXB0aCA9IGNvbm5fcGFyYW0tPmluaXRpYXRvcl9kZXB0aDsKKwlyZXAudGFyZ2V0X2Fja19kZWxheSA9IENNQV9DTV9SRVNQT05TRV9USU1FT1VUOworCXJlcC5mYWlsb3Zlcl9hY2NlcHRlZCA9IDA7CisJcmVwLmZsb3dfY29udHJvbCA9IGNvbm5fcGFyYW0tPmZsb3dfY29udHJvbDsKKwlyZXAucm5yX3JldHJ5X2NvdW50ID0gY29ubl9wYXJhbS0+cm5yX3JldHJ5X2NvdW50OworCXJlcC5zcnEgPSBpZF9wcml2LT5zcnEgPyAxIDogMDsKKworCXJldHVybiBpYl9zZW5kX2NtX3JlcChpZF9wcml2LT5jbV9pZC5pYiwgJnJlcCk7Cit9CisKK2ludCByZG1hX2FjY2VwdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaWQtPnFwICYmIGNvbm5fcGFyYW0pIHsKKwkJaWRfcHJpdi0+cXBfbnVtID0gY29ubl9wYXJhbS0+cXBfbnVtOworCQlpZF9wcml2LT5xcF90eXBlID0gY29ubl9wYXJhbS0+cXBfdHlwZTsKKwkJaWRfcHJpdi0+c3JxID0gY29ubl9wYXJhbS0+c3JxOworCX0KKworCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7CisJY2FzZSBJQl9OT0RFX0NBOgorCQlpZiAoY29ubl9wYXJhbSkKKwkJCXJldCA9IGNtYV9hY2NlcHRfaWIoaWRfcHJpdiwgY29ubl9wYXJhbSk7CisJCWVsc2UKKwkJCXJldCA9IGNtYV9yZXBfcmVjdihpZF9wcml2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJZ290byByZWplY3Q7CisKKwlyZXR1cm4gMDsKK3JlamVjdDoKKwljbWFfbW9kaWZ5X3FwX2VycihpZCk7CisJcmRtYV9yZWplY3QoaWQsIE5VTEwsIDApOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfYWNjZXB0KTsKKworaW50IHJkbWFfcmVqZWN0KHN0cnVjdCByZG1hX2NtX2lkICppZCwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQl1OCBwcml2YXRlX2RhdGFfbGVuKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoIWNtYV9jb21wKGlkX3ByaXYsIENNQV9DT05ORUNUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgeworCWNhc2UgSUJfTk9ERV9DQToKKwkJcmV0ID0gaWJfc2VuZF9jbV9yZWooaWRfcHJpdi0+Y21faWQuaWIsCisJCQkJICAgICBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCwgTlVMTCwgMCwKKwkJCQkgICAgIHByaXZhdGVfZGF0YSwgcHJpdmF0ZV9kYXRhX2xlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX3JlamVjdCk7CisKK2ludCByZG1hX2Rpc2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoIWNtYV9jb21wKGlkX3ByaXYsIENNQV9DT05ORUNUKSAmJgorCSAgICAhY21hX2NvbXAoaWRfcHJpdiwgQ01BX0RJU0NPTk5FQ1QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGNtYV9tb2RpZnlfcXBfZXJyKGlkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7CisJY2FzZSBJQl9OT0RFX0NBOgorCQkvKiBJbml0aWF0ZSBvciByZXNwb25kIHRvIGEgZGlzY29ubmVjdC4gKi8KKwkJaWYgKGliX3NlbmRfY21fZHJlcShpZF9wcml2LT5jbV9pZC5pYiwgTlVMTCwgMCkpCisJCQlpYl9zZW5kX2NtX2RyZXAoaWRfcHJpdi0+Y21faWQuaWIsIE5VTEwsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9kaXNjb25uZWN0KTsKKworc3RhdGljIHZvaWQgY21hX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2OworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisKKwljbWFfZGV2ID0ga21hbGxvYyhzaXplb2YgKmNtYV9kZXYsIEdGUF9LRVJORUwpOworCWlmICghY21hX2RldikKKwkJcmV0dXJuOworCisJY21hX2Rldi0+ZGV2aWNlID0gZGV2aWNlOworCWNtYV9kZXYtPm5vZGVfZ3VpZCA9IGRldmljZS0+bm9kZV9ndWlkOworCWlmICghY21hX2Rldi0+bm9kZV9ndWlkKQorCQlnb3RvIGVycjsKKworCWluaXRfY29tcGxldGlvbigmY21hX2Rldi0+Y29tcCk7CisJYXRvbWljX3NldCgmY21hX2Rldi0+cmVmY291bnQsIDEpOworCUlOSVRfTElTVF9IRUFEKCZjbWFfZGV2LT5pZF9saXN0KTsKKwlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmY21hX2NsaWVudCwgY21hX2Rldik7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZjbWFfZGV2LT5saXN0LCAmZGV2X2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWRfcHJpdiwgJmxpc3Rlbl9hbnlfbGlzdCwgbGlzdCkKKwkJY21hX2xpc3Rlbl9vbl9kZXYoaWRfcHJpdiwgY21hX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlyZXR1cm47CitlcnI6CisJa2ZyZWUoY21hX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgY21hX3JlbW92ZV9pZF9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwllbnVtIGNtYV9zdGF0ZSBzdGF0ZTsKKworCS8qIFJlY29yZCB0aGF0IHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBkZXZpY2UgKi8KKwlzdGF0ZSA9IGNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVZJQ0VfUkVNT1ZBTCk7CisJaWYgKHN0YXRlID09IENNQV9ERVNUUk9ZSU5HKQorCQlyZXR1cm4gMDsKKworCWNtYV9jYW5jZWxfb3BlcmF0aW9uKGlkX3ByaXYsIHN0YXRlKTsKKwl3YWl0X2V2ZW50KGlkX3ByaXYtPndhaXRfcmVtb3ZlLCAhYXRvbWljX3JlYWQoJmlkX3ByaXYtPmRldl9yZW1vdmUpKTsKKworCS8qIENoZWNrIGZvciBkZXN0cnVjdGlvbiBmcm9tIGFub3RoZXIgY2FsbGJhY2suICovCisJaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfREVWSUNFX1JFTU9WQUwpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBjbWFfbm90aWZ5X3VzZXIoaWRfcHJpdiwgUkRNQV9DTV9FVkVOVF9ERVZJQ0VfUkVNT1ZBTCwKKwkJCSAgICAgICAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQgY21hX3Byb2Nlc3NfcmVtb3ZlKHN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2KQoreworCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlX2xpc3Q7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJnJlbW92ZV9saXN0KTsKKworCW11dGV4X2xvY2soJmxvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmY21hX2Rldi0+aWRfbGlzdCkpIHsKKwkJaWRfcHJpdiA9IGxpc3RfZW50cnkoY21hX2Rldi0+aWRfbGlzdC5uZXh0LAorCQkJCSAgICAgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgbGlzdCk7CisKKwkJaWYgKGNtYV9pbnRlcm5hbF9saXN0ZW4oaWRfcHJpdikpIHsKKwkJCWNtYV9kZXN0cm95X2xpc3RlbihpZF9wcml2KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbGlzdF9kZWwoJmlkX3ByaXYtPmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZpZF9wcml2LT5saXN0LCAmcmVtb3ZlX2xpc3QpOworCQlhdG9taWNfaW5jKCZpZF9wcml2LT5yZWZjb3VudCk7CisJCW11dGV4X3VubG9jaygmbG9jayk7CisKKwkJcmV0ID0gY21hX3JlbW92ZV9pZF9kZXYoaWRfcHJpdik7CisJCWNtYV9kZXJlZl9pZChpZF9wcml2KTsKKwkJaWYgKHJldCkKKwkJCXJkbWFfZGVzdHJveV9pZCgmaWRfcHJpdi0+aWQpOworCisJCW11dGV4X2xvY2soJmxvY2spOworCX0KKwltdXRleF91bmxvY2soJmxvY2spOworCisJY21hX2RlcmVmX2RldihjbWFfZGV2KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjbWFfZGV2LT5jb21wKTsKK30KKworc3RhdGljIHZvaWQgY21hX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBjbWFfZGV2aWNlICpjbWFfZGV2OworCisJY21hX2RldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXZpY2UsICZjbWFfY2xpZW50KTsKKwlpZiAoIWNtYV9kZXYpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmxvY2spOworCWxpc3RfZGVsKCZjbWFfZGV2LT5saXN0KTsKKwltdXRleF91bmxvY2soJmxvY2spOworCisJY21hX3Byb2Nlc3NfcmVtb3ZlKGNtYV9kZXYpOworCWtmcmVlKGNtYV9kZXYpOworfQorCitzdGF0aWMgaW50IGNtYV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWNtYV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJyZG1hX2NtX3dxIik7CisJaWYgKCFjbWFfd3EpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZjbWFfY2xpZW50KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwlyZXR1cm4gMDsKKworZXJyOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGNtYV93cSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY21hX2NsZWFudXAodm9pZCkKK3sKKwlpYl91bnJlZ2lzdGVyX2NsaWVudCgmY21hX2NsaWVudCk7CisJZGVzdHJveV93b3JrcXVldWUoY21hX3dxKTsKKwlpZHJfZGVzdHJveSgmc2RwX3BzKTsKKwlpZHJfZGVzdHJveSgmdGNwX3BzKTsKK30KKworbW9kdWxlX2luaXQoY21hX2luaXQpOworbW9kdWxlX2V4aXQoY21hX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Ztcl9wb29sLmMKaW5kZXggODM4YmY1NC4uNjE1ZmU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jCkBAIC01NCw3ICs1NCw3IEBACiAvKgogICogSWYgYW4gRk1SIGlzIG5vdCBpbiB1c2UsIHRoZW4gdGhlIGxpc3QgbWVtYmVyIHdpbGwgcG9pbnQgdG8gZWl0aGVyCiAgKiBpdHMgcG9vbCdzIGZyZWVfbGlzdCAoaWYgdGhlIEZNUiBjYW4gYmUgbWFwcGVkIGFnYWluOyB0aGF0IGlzLAotICogcmVtYXBfY291bnQgPCBJQl9GTVJfTUFYX1JFTUFQUykgb3IgaXRzIHBvb2wncyBkaXJ0eV9saXN0IChpZiB0aGUKKyAqIHJlbWFwX2NvdW50IDwgcG9vbC0+bWF4X3JlbWFwcykgb3IgaXRzIHBvb2wncyBkaXJ0eV9saXN0IChpZiB0aGUKICAqIEZNUiBuZWVkcyB0byBiZSB1bm1hcHBlZCBiZWZvcmUgYmVpbmcgcmVtYXBwZWQpLiAgSW4gZWl0aGVyIG9mCiAgKiB0aGVzZSBjYXNlcyBpdCBpcyBhIGJ1ZyBpZiB0aGUgcmVmX2NvdW50IGlzIG5vdCAwLiAgSW4gb3RoZXIgd29yZHMsCiAgKiBpZiByZWZfY291bnQgaXMgPiAwLCB0aGVuIHRoZSBsaXN0IG1lbWJlciBtdXN0IG5vdCBiZSBsaW5rZWQgaW50bwpAQCAtODQsNiArODQsNyBAQAogCiAJaW50ICAgICAgICAgICAgICAgICAgICAgICBwb29sX3NpemU7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGFnZXM7CisJaW50CQkJICBtYXhfcmVtYXBzOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgZGlydHlfd2F0ZXJtYXJrOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgZGlydHlfbGVuOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgZnJlZV9saXN0OwpAQCAtMjE0LDggKzIxNSwxMCBAQAogewogCXN0cnVjdCBpYl9kZXZpY2UgICAqZGV2aWNlOwogCXN0cnVjdCBpYl9mbXJfcG9vbCAqcG9vbDsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmF0dHI7CiAJaW50IGk7CiAJaW50IHJldDsKKwlpbnQgbWF4X3JlbWFwczsKIAogCWlmICghcGFyYW1zKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTIyOCw2ICsyMzEsMjYgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiAJfQogCisJYXR0ciA9IGttYWxsb2Moc2l6ZW9mICphdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF0dHIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY291bGRuJ3QgYWxsb2NhdGUgZGV2aWNlIGF0dHIgc3RydWN0Iik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXJldCA9IGliX3F1ZXJ5X2RldmljZShkZXZpY2UsIGF0dHIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY291bGRuJ3QgcXVlcnkgZGV2aWNlIik7CisJCWtmcmVlKGF0dHIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCWlmICghYXR0ci0+bWF4X21hcF9wZXJfZm1yKQorCQltYXhfcmVtYXBzID0gSUJfRk1SX01BWF9SRU1BUFM7CisJZWxzZQorCQltYXhfcmVtYXBzID0gYXR0ci0+bWF4X21hcF9wZXJfZm1yOworCisJa2ZyZWUoYXR0cik7CisKIAlwb29sID0ga21hbGxvYyhzaXplb2YgKnBvb2wsIEdGUF9LRVJORUwpOwogCWlmICghcG9vbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb3VsZG4ndCBhbGxvY2F0ZSBwb29sIHN0cnVjdCIpOwpAQCAtMjU4LDYgKzI4MSw3IEBACiAKIAlwb29sLT5wb29sX3NpemUgICAgICAgPSAwOwogCXBvb2wtPm1heF9wYWdlcyAgICAgICA9IHBhcmFtcy0+bWF4X3BhZ2VzX3Blcl9mbXI7CisJcG9vbC0+bWF4X3JlbWFwcyAgICAgID0gbWF4X3JlbWFwczsKIAlwb29sLT5kaXJ0eV93YXRlcm1hcmsgPSBwYXJhbXMtPmRpcnR5X3dhdGVybWFyazsKIAlwb29sLT5kaXJ0eV9sZW4gICAgICAgPSAwOwogCXNwaW5fbG9ja19pbml0KCZwb29sLT5wb29sX2xvY2spOwpAQCAtMjc5LDcgKzMwMyw3IEBACiAJCXN0cnVjdCBpYl9wb29sX2ZtciAqZm1yOwogCQlzdHJ1Y3QgaWJfZm1yX2F0dHIgYXR0ciA9IHsKIAkJCS5tYXhfcGFnZXMgID0gcGFyYW1zLT5tYXhfcGFnZXNfcGVyX2ZtciwKLQkJCS5tYXhfbWFwcyAgID0gSUJfRk1SX01BWF9SRU1BUFMsCisJCQkubWF4X21hcHMgICA9IHBvb2wtPm1heF9yZW1hcHMsCiAJCQkucGFnZV9zaGlmdCA9IHBhcmFtcy0+cGFnZV9zaGlmdAogCQl9OwogCkBAIC00ODksNyArNTEzLDcgQEAKIAogCS0tZm1yLT5yZWZfY291bnQ7CiAJaWYgKCFmbXItPnJlZl9jb3VudCkgewotCQlpZiAoZm1yLT5yZW1hcF9jb3VudCA8IElCX0ZNUl9NQVhfUkVNQVBTKSB7CisJCWlmIChmbXItPnJlbWFwX2NvdW50IDwgcG9vbC0+bWF4X3JlbWFwcykgewogCQkJbGlzdF9hZGRfdGFpbCgmZm1yLT5saXN0LCAmcG9vbC0+ZnJlZV9saXN0KTsKIAkJfSBlbHNlIHsKIAkJCWxpc3RfYWRkX3RhaWwoJmZtci0+bGlzdCwgJnBvb2wtPmRpcnR5X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCA1YWQ0MWE2Li5iMzhlMDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtMzQsNiArMzQsNyBAQAogICogJElkOiBtYWQuYyA1NTk2IDIwMDYtMDMtMDMgMDE6MDA6MDdaIHNlYW4uaGVmdHkgJAogICovCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CiAKICNpbmNsdWRlICJtYWRfcHJpdi5oIgogI2luY2x1ZGUgIm1hZF9ybXBwLmgiCkBAIC00NSw4ICs0Niw3IEBACiBNT0RVTEVfQVVUSE9SKCJIYWwgUm9zZW5zdG9jayIpOwogTU9EVUxFX0FVVEhPUigiU2VhbiBIZWZ0eSIpOwogCi0KLWttZW1fY2FjaGVfdCAqaWJfbWFkX2NhY2hlOworc3RhdGljIGttZW1fY2FjaGVfdCAqaWJfbWFkX2NhY2hlOwogCiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBpYl9tYWRfcG9ydF9saXN0Owogc3RhdGljIHUzMiBpYl9tYWRfY2xpZW50X2lkID0gMDsKQEAgLTE2NzMsMjAgKzE2NzMsMjEgQEAKIAkJcndjLT5yZWN2X2J1Zi5tYWQtPm1hZF9oZHIubWdtdF9jbGFzczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcmN2X2hhc19zYW1lX2dpZChzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqd3IsCitzdGF0aWMgaW5saW5lIGludCByY3ZfaGFzX3NhbWVfZ2lkKHN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqbWFkX2FnZW50X3ByaXYsCisJCQkJICAgc3RydWN0IGliX21hZF9zZW5kX3dyX3ByaXZhdGUgKndyLAogCQkJCSAgIHN0cnVjdCBpYl9tYWRfcmVjdl93YyAqcndjICkKIHsKIAlzdHJ1Y3QgaWJfYWhfYXR0ciBhdHRyOwogCXU4IHNlbmRfcmVzcCwgcmN2X3Jlc3A7CisJdW5pb24gaWJfZ2lkIHNnaWQ7CisJc3RydWN0IGliX2RldmljZSAqZGV2aWNlID0gbWFkX2FnZW50X3ByaXYtPmFnZW50LmRldmljZTsKKwl1OCBwb3J0X251bSA9IG1hZF9hZ2VudF9wcml2LT5hZ2VudC5wb3J0X251bTsKKwl1OCBsbWM7CiAKIAlzZW5kX3Jlc3AgPSAoKHN0cnVjdCBpYl9tYWQgKikod3ItPnNlbmRfYnVmLm1hZCkpLT4KIAkJICAgICBtYWRfaGRyLm1ldGhvZCAmIElCX01HTVRfTUVUSE9EX1JFU1A7CiAJcmN2X3Jlc3AgPSByd2MtPnJlY3ZfYnVmLm1hZC0+bWFkX2hkci5tZXRob2QgJiBJQl9NR01UX01FVEhPRF9SRVNQOwogCi0JaWYgKCFzZW5kX3Jlc3AgJiYgcmN2X3Jlc3ApCi0JCS8qIGlzIHJlcXVlc3QvcmVzcG9uc2UuIEdJRC9MSURzIGFyZSBib3RoIGxvY2FsIChzYW1lKS4gKi8KLQkJcmV0dXJuIDE7Ci0KIAlpZiAoc2VuZF9yZXNwID09IHJjdl9yZXNwKQogCQkvKiBib3RoIHJlcXVlc3RzLCBvciBib3RoIHJlc3BvbnNlcy4gR0lEcyBkaWZmZXJlbnQgKi8KIAkJcmV0dXJuIDA7CkBAIC0xNjk1LDQ4ICsxNjk2LDc4IEBACiAJCS8qIEFzc3VtZSBub3QgZXF1YWwsIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcy4gKi8KIAkJcmV0dXJuIDA7CiAKLQlpZiAoIShhdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKSAmJiAhKHJ3Yy0+d2MtPndjX2ZsYWdzICYgSUJfV0NfR1JIKSkKLQkJcmV0dXJuIGF0dHIuZGxpZCA9PSByd2MtPndjLT5zbGlkOwotCWVsc2UgaWYgKChhdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKSAmJgotCQkgKHJ3Yy0+d2MtPndjX2ZsYWdzICYgSUJfV0NfR1JIKSkKLQkJcmV0dXJuIG1lbWNtcChhdHRyLmdyaC5kZ2lkLnJhdywKLQkJCSAgICAgIHJ3Yy0+cmVjdl9idWYuZ3JoLT5zZ2lkLnJhdywgMTYpID09IDA7Ci0JZWxzZQorCWlmICghIShhdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKSAhPQorCSAgICAhIShyd2MtPndjLT53Y19mbGFncyAmIElCX1dDX0dSSCkpCiAJCS8qIG9uZSBoYXMgR0lELCBvdGhlciBkb2VzIG5vdC4gIEFzc3VtZSBkaWZmZXJlbnQgKi8KIAkJcmV0dXJuIDA7CisKKwlpZiAoIXNlbmRfcmVzcCAmJiByY3ZfcmVzcCkgeworCQkvKiBpcyByZXF1ZXN0L3Jlc3BvbnNlLiAqLworCQlpZiAoIShhdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKSkgeworCQkJaWYgKGliX2dldF9jYWNoZWRfbG1jKGRldmljZSwgcG9ydF9udW0sICZsbWMpKQorCQkJCXJldHVybiAwOworCQkJcmV0dXJuICghbG1jIHx8ICEoKGF0dHIuc3JjX3BhdGhfYml0cyBeCisJCQkJCSAgIHJ3Yy0+d2MtPmRsaWRfcGF0aF9iaXRzKSAmCisJCQkJCSAgKCgxIDw8IGxtYykgLSAxKSkpOworCQl9IGVsc2UgeworCQkJaWYgKGliX2dldF9jYWNoZWRfZ2lkKGRldmljZSwgcG9ydF9udW0sCisJCQkJCSAgICAgIGF0dHIuZ3JoLnNnaWRfaW5kZXgsICZzZ2lkKSkKKwkJCQlyZXR1cm4gMDsKKwkJCXJldHVybiAhbWVtY21wKHNnaWQucmF3LCByd2MtPnJlY3ZfYnVmLmdyaC0+ZGdpZC5yYXcsCisJCQkJICAgICAgIDE2KTsKKwkJfQorCX0KKworCWlmICghKGF0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpKQorCQlyZXR1cm4gYXR0ci5kbGlkID09IHJ3Yy0+d2MtPnNsaWQ7CisJZWxzZQorCQlyZXR1cm4gIW1lbWNtcChhdHRyLmdyaC5kZ2lkLnJhdywgcndjLT5yZWN2X2J1Zi5ncmgtPnNnaWQucmF3LAorCQkJICAgICAgIDE2KTsKIH0KKworc3RhdGljIGlubGluZSBpbnQgaXNfZGlyZWN0KHU4IGNsYXNzKQoreworCXJldHVybiAoY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKTsKK30KKwogc3RydWN0IGliX21hZF9zZW5kX3dyX3ByaXZhdGUqCiBpYl9maW5kX3NlbmRfbWFkKHN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqbWFkX2FnZW50X3ByaXYsCi0JCSBzdHJ1Y3QgaWJfbWFkX3JlY3Zfd2MgKm1hZF9yZWN2X3djKQorCQkgc3RydWN0IGliX21hZF9yZWN2X3djICp3YykKIHsKLQlzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqbWFkX3NlbmRfd3I7CisJc3RydWN0IGliX21hZF9zZW5kX3dyX3ByaXZhdGUgKndyOwogCXN0cnVjdCBpYl9tYWQgKm1hZDsKIAotCW1hZCA9IChzdHJ1Y3QgaWJfbWFkICopbWFkX3JlY3Zfd2MtPnJlY3ZfYnVmLm1hZDsKKwltYWQgPSAoc3RydWN0IGliX21hZCAqKXdjLT5yZWN2X2J1Zi5tYWQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hZF9zZW5kX3dyLCAmbWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdCwKLQkJCSAgICBhZ2VudF9saXN0KSB7Ci0JCWlmICgobWFkX3NlbmRfd3ItPnRpZCA9PSBtYWQtPm1hZF9oZHIudGlkKSAmJgotCQkgICAgcmN2X2hhc19zYW1lX2NsYXNzKG1hZF9zZW5kX3dyLCBtYWRfcmVjdl93YykgJiYKLQkJICAgIHJjdl9oYXNfc2FtZV9naWQobWFkX3NlbmRfd3IsIG1hZF9yZWN2X3djKSkKLQkJCXJldHVybiBtYWRfc2VuZF93cjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdyLCAmbWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdCwgYWdlbnRfbGlzdCkgeworCQlpZiAoKHdyLT50aWQgPT0gbWFkLT5tYWRfaGRyLnRpZCkgJiYKKwkJICAgIHJjdl9oYXNfc2FtZV9jbGFzcyh3ciwgd2MpICYmCisJCSAgICAvKgorCQkgICAgICogRG9uJ3QgY2hlY2sgR0lEIGZvciBkaXJlY3Qgcm91dGVkIE1BRHMuCisJCSAgICAgKiBUaGVzZSBtaWdodCBoYXZlIHBlcm1pc3NpdmUgTElEcy4KKwkJICAgICAqLworCQkgICAgKGlzX2RpcmVjdCh3Yy0+cmVjdl9idWYubWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MpIHx8CisJCSAgICAgcmN2X2hhc19zYW1lX2dpZChtYWRfYWdlbnRfcHJpdiwgd3IsIHdjKSkpCisJCQlyZXR1cm4gd3I7CiAJfQogCiAJLyoKIAkgKiBJdCdzIHBvc3NpYmxlIHRvIHJlY2VpdmUgdGhlIHJlc3BvbnNlIGJlZm9yZSB3ZSd2ZQogCSAqIGJlZW4gbm90aWZpZWQgdGhhdCB0aGUgc2VuZCBoYXMgY29tcGxldGVkCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtYWRfc2VuZF93ciwgJm1hZF9hZ2VudF9wcml2LT5zZW5kX2xpc3QsCi0JCQkgICAgYWdlbnRfbGlzdCkgewotCQlpZiAoaXNfZGF0YV9tYWQobWFkX2FnZW50X3ByaXYsIG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5tYWQpICYmCi0JCSAgICBtYWRfc2VuZF93ci0+dGlkID09IG1hZC0+bWFkX2hkci50aWQgJiYKLQkJICAgIG1hZF9zZW5kX3dyLT50aW1lb3V0ICYmCi0JCSAgICByY3ZfaGFzX3NhbWVfY2xhc3MobWFkX3NlbmRfd3IsIG1hZF9yZWN2X3djKSAmJgotCQkgICAgcmN2X2hhc19zYW1lX2dpZChtYWRfc2VuZF93ciwgbWFkX3JlY3Zfd2MpKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ciwgJm1hZF9hZ2VudF9wcml2LT5zZW5kX2xpc3QsIGFnZW50X2xpc3QpIHsKKwkJaWYgKGlzX2RhdGFfbWFkKG1hZF9hZ2VudF9wcml2LCB3ci0+c2VuZF9idWYubWFkKSAmJgorCQkgICAgd3ItPnRpZCA9PSBtYWQtPm1hZF9oZHIudGlkICYmCisJCSAgICB3ci0+dGltZW91dCAmJgorCQkgICAgcmN2X2hhc19zYW1lX2NsYXNzKHdyLCB3YykgJiYKKwkJICAgIC8qCisJCSAgICAgKiBEb24ndCBjaGVjayBHSUQgZm9yIGRpcmVjdCByb3V0ZWQgTUFEcy4KKwkJICAgICAqIFRoZXNlIG1pZ2h0IGhhdmUgcGVybWlzc2l2ZSBMSURzLgorCQkgICAgICovCisJCSAgICAoaXNfZGlyZWN0KHdjLT5yZWN2X2J1Zi5tYWQtPm1hZF9oZHIubWdtdF9jbGFzcykgfHwKKwkJICAgICByY3ZfaGFzX3NhbWVfZ2lkKG1hZF9hZ2VudF9wcml2LCB3ciwgd2MpKSkKIAkJCS8qIFZlcmlmeSByZXF1ZXN0IGhhcyBub3QgYmVlbiBjYW5jZWxlZCAqLwotCQkJcmV0dXJuIChtYWRfc2VuZF93ci0+c3RhdHVzID09IElCX1dDX1NVQ0NFU1MpID8KLQkJCQltYWRfc2VuZF93ciA6IE5VTEw7Ci0JCX0KKwkJCXJldHVybiAod3ItPnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSA/IHdyIDogTlVMTDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaAppbmRleCBiNGZhMjhkLi5kMTQ3ZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKQEAgLTIxMiw4ICsyMTIsNiBAQAogCXN0cnVjdCBpYl9tYWRfcXBfaW5mbyBxcF9pbmZvW0lCX01BRF9RUFNfQ09SRV07CiB9OwogCi1leHRlcm4ga21lbV9jYWNoZV90ICppYl9tYWRfY2FjaGU7Ci0KIGludCBpYl9zZW5kX21hZChzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqbWFkX3NlbmRfd3IpOwogCiBzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCA1MDFjYzA1Li5lOTExYzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogI2luY2x1ZGUgPHJkbWEvaWJfcGFjay5oPgogI2luY2x1ZGUgPHJkbWEvaWJfc2EuaD4KKyNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CiAKIE1PRFVMRV9BVVRIT1IoIlJvbGFuZCBEcmVpZXIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSW5maW5pQmFuZCBzdWJuZXQgYWRtaW5pc3RyYXRpb24gcXVlcnkgc3VwcG9ydCIpOwpAQCAtNDQxLDYgKzQ0MiwzNiBAQAogfQogRVhQT1JUX1NZTUJPTChpYl9zYV9jYW5jZWxfcXVlcnkpOwogCitpbnQgaWJfaW5pdF9haF9mcm9tX3BhdGgoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKKwkJCSBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnJlYywgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpCit7CisJaW50IHJldDsKKwl1MTYgZ2lkX2luZGV4OworCisJbWVtc2V0KGFoX2F0dHIsIDAsIHNpemVvZiAqYWhfYXR0cik7CisJYWhfYXR0ci0+ZGxpZCA9IGJlMTZfdG9fY3B1KHJlYy0+ZGxpZCk7CisJYWhfYXR0ci0+c2wgPSByZWMtPnNsOworCWFoX2F0dHItPnNyY19wYXRoX2JpdHMgPSBiZTE2X3RvX2NwdShyZWMtPnNsaWQpICYgMHg3ZjsKKwlhaF9hdHRyLT5wb3J0X251bSA9IHBvcnRfbnVtOworCisJaWYgKHJlYy0+aG9wX2xpbWl0ID4gMSkgeworCQlhaF9hdHRyLT5haF9mbGFncyA9IElCX0FIX0dSSDsKKwkJYWhfYXR0ci0+Z3JoLmRnaWQgPSByZWMtPmRnaWQ7CisKKwkJcmV0ID0gaWJfZmluZF9jYWNoZWRfZ2lkKGRldmljZSwgJnJlYy0+c2dpZCwgJnBvcnRfbnVtLAorCQkJCQkgJmdpZF9pbmRleCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWFoX2F0dHItPmdyaC5zZ2lkX2luZGV4ICAgID0gZ2lkX2luZGV4OworCQlhaF9hdHRyLT5ncmguZmxvd19sYWJlbCAgICA9IGJlMzJfdG9fY3B1KHJlYy0+Zmxvd19sYWJlbCk7CisJCWFoX2F0dHItPmdyaC5ob3BfbGltaXQgICAgID0gcmVjLT5ob3BfbGltaXQ7CisJCWFoX2F0dHItPmdyaC50cmFmZmljX2NsYXNzID0gcmVjLT50cmFmZmljX2NsYXNzOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaWJfaW5pdF9haF9mcm9tX3BhdGgpOworCiBzdGF0aWMgdm9pZCBpbml0X21hZChzdHJ1Y3QgaWJfc2FfbWFkICptYWQsIHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCmluZGV4IDkxNjRhMDkuLmMxYzZmZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCkBAIC0zMCw3ICszMCw3IEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgKiBTT0ZUV0FSRS4KICAqCi0gKiAkSWQ6IHVjbS5jIDI1OTQgMjAwNS0wNi0xMyAxOTo0NjowMlogbGlib3IgJAorICogJElkOiB1Y20uYyA0MzExIDIwMDUtMTItMDUgMTg6NDI6MDFaIHNlYW4uaGVmdHkgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC01MCw2ICs1MCw3IEBACiAKICNpbmNsdWRlIDxyZG1hL2liX2NtLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl91c2VyX2NtLmg+CisjaW5jbHVkZSA8cmRtYS9pYl9tYXJzaGFsbC5oPgogCiBNT0RVTEVfQVVUSE9SKCJMaWJvciBNaWNoYWxlayIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBDb25uZWN0aW9uIE1hbmFnZXIgYWNjZXNzIik7CkBAIC02Myw3ICs2NCw3IEBACiB9OwogCiBzdHJ1Y3QgaWJfdWNtX2ZpbGUgewotCXN0cnVjdCBzZW1hcGhvcmUgbXV0ZXg7CisJc3RydWN0IG11dGV4IGZpbGVfbXV0ZXg7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJc3RydWN0IGliX3VjbV9kZXZpY2UgKmRldmljZTsKIApAQCAtMTUyLDcgKzE1Myw3IEBACiB7CiAJc3RydWN0IGliX3VjbV9ldmVudCAqdWV2ZW50OwogCi0JZG93bigmY3R4LT5maWxlLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmY3R4LT5maWxlLT5maWxlX211dGV4KTsKIAlsaXN0X2RlbCgmY3R4LT5maWxlX2xpc3QpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmY3R4LT5ldmVudHMpKSB7CiAKQEAgLTE2Nyw3ICsxNjgsNyBAQAogCiAJCWtmcmVlKHVldmVudCk7CiAJfQotCXVwKCZjdHgtPmZpbGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmN0eC0+ZmlsZS0+ZmlsZV9tdXRleCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaWJfdWNtX2NvbnRleHQgKmliX3VjbV9jdHhfYWxsb2Moc3RydWN0IGliX3VjbV9maWxlICpmaWxlKQpAQCAtMjA1LDM2ICsyMDYsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBpYl91Y21fZXZlbnRfcGF0aF9nZXQoc3RydWN0IGliX3VjbV9wYXRoX3JlYyAqdXBhdGgsCi0JCQkJICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMJICprcGF0aCkKLXsKLQlpZiAoIWtwYXRoIHx8ICF1cGF0aCkKLQkJcmV0dXJuOwotCi0JbWVtY3B5KHVwYXRoLT5kZ2lkLCBrcGF0aC0+ZGdpZC5yYXcsIHNpemVvZiAqdXBhdGgtPmRnaWQpOwotCW1lbWNweSh1cGF0aC0+c2dpZCwga3BhdGgtPnNnaWQucmF3LCBzaXplb2YgKnVwYXRoLT5zZ2lkKTsKLQotCXVwYXRoLT5kbGlkICAgICAgICAgICAgID0ga3BhdGgtPmRsaWQ7Ci0JdXBhdGgtPnNsaWQgICAgICAgICAgICAgPSBrcGF0aC0+c2xpZDsKLQl1cGF0aC0+cmF3X3RyYWZmaWMgICAgICA9IGtwYXRoLT5yYXdfdHJhZmZpYzsKLQl1cGF0aC0+Zmxvd19sYWJlbCAgICAgICA9IGtwYXRoLT5mbG93X2xhYmVsOwotCXVwYXRoLT5ob3BfbGltaXQgICAgICAgID0ga3BhdGgtPmhvcF9saW1pdDsKLQl1cGF0aC0+dHJhZmZpY19jbGFzcyAgICA9IGtwYXRoLT50cmFmZmljX2NsYXNzOwotCXVwYXRoLT5yZXZlcnNpYmxlICAgICAgID0ga3BhdGgtPnJldmVyc2libGU7Ci0JdXBhdGgtPm51bWJfcGF0aCAgICAgICAgPSBrcGF0aC0+bnVtYl9wYXRoOwotCXVwYXRoLT5wa2V5ICAgICAgICAgICAgID0ga3BhdGgtPnBrZXk7Ci0JdXBhdGgtPnNsCSAgICAgICAgPSBrcGF0aC0+c2w7Ci0JdXBhdGgtPm10dV9zZWxlY3RvciAgICAgPSBrcGF0aC0+bXR1X3NlbGVjdG9yOwotCXVwYXRoLT5tdHUgICAgICAgICAgICAgID0ga3BhdGgtPm10dTsKLQl1cGF0aC0+cmF0ZV9zZWxlY3RvciAgICA9IGtwYXRoLT5yYXRlX3NlbGVjdG9yOwotCXVwYXRoLT5yYXRlICAgICAgICAgICAgID0ga3BhdGgtPnJhdGU7Ci0JdXBhdGgtPnBhY2tldF9saWZlX3RpbWUgPSBrcGF0aC0+cGFja2V0X2xpZmVfdGltZTsKLQl1cGF0aC0+cHJlZmVyZW5jZSAgICAgICA9IGtwYXRoLT5wcmVmZXJlbmNlOwotCi0JdXBhdGgtPnBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3IgPQotCQlrcGF0aC0+cGFja2V0X2xpZmVfdGltZV9zZWxlY3RvcjsKLX0KLQogc3RhdGljIHZvaWQgaWJfdWNtX2V2ZW50X3JlcV9nZXQoc3RydWN0IGliX3VjbV9yZXFfZXZlbnRfcmVzcCAqdXJlcSwKIAkJCQkgc3RydWN0IGliX2NtX3JlcV9ldmVudF9wYXJhbSAqa3JlcSkKIHsKQEAgLTI1Myw4ICsyMjQsMTAgQEAKIAl1cmVxLT5zcnEgICAgICAgICAgICAgICAgICAgICAgICA9IGtyZXEtPnNycTsKIAl1cmVxLT5wb3J0CQkJID0ga3JlcS0+cG9ydDsKIAotCWliX3VjbV9ldmVudF9wYXRoX2dldCgmdXJlcS0+cHJpbWFyeV9wYXRoLCBrcmVxLT5wcmltYXJ5X3BhdGgpOwotCWliX3VjbV9ldmVudF9wYXRoX2dldCgmdXJlcS0+YWx0ZXJuYXRlX3BhdGgsIGtyZXEtPmFsdGVybmF0ZV9wYXRoKTsKKwlpYl9jb3B5X3BhdGhfcmVjX3RvX3VzZXIoJnVyZXEtPnByaW1hcnlfcGF0aCwga3JlcS0+cHJpbWFyeV9wYXRoKTsKKwlpZiAoa3JlcS0+YWx0ZXJuYXRlX3BhdGgpCisJCWliX2NvcHlfcGF0aF9yZWNfdG9fdXNlcigmdXJlcS0+YWx0ZXJuYXRlX3BhdGgsCisJCQkJCSBrcmVxLT5hbHRlcm5hdGVfcGF0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIGliX3VjbV9ldmVudF9yZXBfZ2V0KHN0cnVjdCBpYl91Y21fcmVwX2V2ZW50X3Jlc3AgKnVyZXAsCkBAIC0zMjQsOCArMjk3LDggQEAKIAkJaW5mbwkgICAgICA9IGV2dC0+cGFyYW0ucmVqX3JjdmQuYXJpOwogCQlicmVhazsKIAljYXNlIElCX0NNX0xBUF9SRUNFSVZFRDoKLQkJaWJfdWNtX2V2ZW50X3BhdGhfZ2V0KCZ1dnQtPnJlc3AudS5sYXBfcmVzcC5wYXRoLAotCQkJCSAgICAgIGV2dC0+cGFyYW0ubGFwX3JjdmQuYWx0ZXJuYXRlX3BhdGgpOworCQlpYl9jb3B5X3BhdGhfcmVjX3RvX3VzZXIoJnV2dC0+cmVzcC51LmxhcF9yZXNwLnBhdGgsCisJCQkJCSBldnQtPnBhcmFtLmxhcF9yY3ZkLmFsdGVybmF0ZV9wYXRoKTsKIAkJdXZ0LT5kYXRhX2xlbiA9IElCX0NNX0xBUF9QUklWQVRFX0RBVEFfU0laRTsKIAkJdXZ0LT5yZXNwLnByZXNlbnQgPSBJQl9VQ01fUFJFU19BTFRFUk5BVEU7CiAJCWJyZWFrOwpAQCAtNDAyLDExICszNzUsMTEgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIGVycjI7CiAKLQlkb3duKCZjdHgtPmZpbGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZjdHgtPmZpbGUtPmZpbGVfbXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJnVldmVudC0+ZmlsZV9saXN0LCAmY3R4LT5maWxlLT5ldmVudHMpOwogCWxpc3RfYWRkX3RhaWwoJnVldmVudC0+Y3R4X2xpc3QsICZjdHgtPmV2ZW50cyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjdHgtPmZpbGUtPnBvbGxfd2FpdCk7Ci0JdXAoJmN0eC0+ZmlsZS0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmY3R4LT5maWxlLT5maWxlX211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyMjoKQEAgLTQzMiw3ICs0MDUsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBpbmJ1Ziwgc2l6ZW9mKGNtZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWRvd24oJmZpbGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAl3aGlsZSAobGlzdF9lbXB0eSgmZmlsZS0+ZXZlbnRzKSkgewogCiAJCWlmIChmaWxlLT5maWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewpAQCAtNDQ3LDkgKzQyMCw5IEBACiAKIAkJcHJlcGFyZV90b193YWl0KCZmaWxlLT5wb2xsX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCXVwKCZmaWxlLT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZmlsZS0+ZmlsZV9tdXRleCk7CiAJCXNjaGVkdWxlKCk7Ci0JCWRvd24oJmZpbGUtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmZmlsZS0+ZmlsZV9tdXRleCk7CiAKIAkJZmluaXNoX3dhaXQoJmZpbGUtPnBvbGxfd2FpdCwgJndhaXQpOwogCX0KQEAgLTUwOSw3ICs0ODIsNyBAQAogCWtmcmVlKHVldmVudC0+aW5mbyk7CiAJa2ZyZWUodWV2ZW50KTsKIGRvbmU6Ci0JdXAoJmZpbGUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmZpbGUtPmZpbGVfbXV0ZXgpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUyOCw5ICs1MDEsOSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBpbmJ1Ziwgc2l6ZW9mKGNtZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWRvd24oJmZpbGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAljdHggPSBpYl91Y21fY3R4X2FsbG9jKGZpbGUpOwotCXVwKCZmaWxlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAlpZiAoIWN0eCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTYzNyw2NSArNjEwLDExIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgaWJfdWNtX2NvcHlfYWhfYXR0cihzdHJ1Y3QgaWJfdWNtX2FoX2F0dHIgKmRlc3RfYXR0ciwKLQkJCQlzdHJ1Y3QgaWJfYWhfYXR0ciAqc3JjX2F0dHIpCi17Ci0JbWVtY3B5KGRlc3RfYXR0ci0+Z3JoX2RnaWQsIHNyY19hdHRyLT5ncmguZGdpZC5yYXcsCi0JICAgICAgIHNpemVvZiBzcmNfYXR0ci0+Z3JoLmRnaWQpOwotCWRlc3RfYXR0ci0+Z3JoX2Zsb3dfbGFiZWwgPSBzcmNfYXR0ci0+Z3JoLmZsb3dfbGFiZWw7Ci0JZGVzdF9hdHRyLT5ncmhfc2dpZF9pbmRleCA9IHNyY19hdHRyLT5ncmguc2dpZF9pbmRleDsKLQlkZXN0X2F0dHItPmdyaF9ob3BfbGltaXQgPSBzcmNfYXR0ci0+Z3JoLmhvcF9saW1pdDsKLQlkZXN0X2F0dHItPmdyaF90cmFmZmljX2NsYXNzID0gc3JjX2F0dHItPmdyaC50cmFmZmljX2NsYXNzOwotCi0JZGVzdF9hdHRyLT5kbGlkID0gc3JjX2F0dHItPmRsaWQ7Ci0JZGVzdF9hdHRyLT5zbCA9IHNyY19hdHRyLT5zbDsKLQlkZXN0X2F0dHItPnNyY19wYXRoX2JpdHMgPSBzcmNfYXR0ci0+c3JjX3BhdGhfYml0czsKLQlkZXN0X2F0dHItPnN0YXRpY19yYXRlID0gc3JjX2F0dHItPnN0YXRpY19yYXRlOwotCWRlc3RfYXR0ci0+aXNfZ2xvYmFsID0gKHNyY19hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCk7Ci0JZGVzdF9hdHRyLT5wb3J0X251bSA9IHNyY19hdHRyLT5wb3J0X251bTsKLX0KLQotc3RhdGljIHZvaWQgaWJfdWNtX2NvcHlfcXBfYXR0cihzdHJ1Y3QgaWJfdWNtX2luaXRfcXBfYXR0cl9yZXNwICpkZXN0X2F0dHIsCi0JCQkJc3RydWN0IGliX3FwX2F0dHIgKnNyY19hdHRyKQotewotCWRlc3RfYXR0ci0+Y3VyX3FwX3N0YXRlID0gc3JjX2F0dHItPmN1cl9xcF9zdGF0ZTsKLQlkZXN0X2F0dHItPnBhdGhfbXR1ID0gc3JjX2F0dHItPnBhdGhfbXR1OwotCWRlc3RfYXR0ci0+cGF0aF9taWdfc3RhdGUgPSBzcmNfYXR0ci0+cGF0aF9taWdfc3RhdGU7Ci0JZGVzdF9hdHRyLT5xa2V5ID0gc3JjX2F0dHItPnFrZXk7Ci0JZGVzdF9hdHRyLT5ycV9wc24gPSBzcmNfYXR0ci0+cnFfcHNuOwotCWRlc3RfYXR0ci0+c3FfcHNuID0gc3JjX2F0dHItPnNxX3BzbjsKLQlkZXN0X2F0dHItPmRlc3RfcXBfbnVtID0gc3JjX2F0dHItPmRlc3RfcXBfbnVtOwotCWRlc3RfYXR0ci0+cXBfYWNjZXNzX2ZsYWdzID0gc3JjX2F0dHItPnFwX2FjY2Vzc19mbGFnczsKLQotCWRlc3RfYXR0ci0+bWF4X3NlbmRfd3IgPSBzcmNfYXR0ci0+Y2FwLm1heF9zZW5kX3dyOwotCWRlc3RfYXR0ci0+bWF4X3JlY3Zfd3IgPSBzcmNfYXR0ci0+Y2FwLm1heF9yZWN2X3dyOwotCWRlc3RfYXR0ci0+bWF4X3NlbmRfc2dlID0gc3JjX2F0dHItPmNhcC5tYXhfc2VuZF9zZ2U7Ci0JZGVzdF9hdHRyLT5tYXhfcmVjdl9zZ2UgPSBzcmNfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZTsKLQlkZXN0X2F0dHItPm1heF9pbmxpbmVfZGF0YSA9IHNyY19hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhOwotCi0JaWJfdWNtX2NvcHlfYWhfYXR0cigmZGVzdF9hdHRyLT5haF9hdHRyLCAmc3JjX2F0dHItPmFoX2F0dHIpOwotCWliX3VjbV9jb3B5X2FoX2F0dHIoJmRlc3RfYXR0ci0+YWx0X2FoX2F0dHIsICZzcmNfYXR0ci0+YWx0X2FoX2F0dHIpOwotCi0JZGVzdF9hdHRyLT5wa2V5X2luZGV4ID0gc3JjX2F0dHItPnBrZXlfaW5kZXg7Ci0JZGVzdF9hdHRyLT5hbHRfcGtleV9pbmRleCA9IHNyY19hdHRyLT5hbHRfcGtleV9pbmRleDsKLQlkZXN0X2F0dHItPmVuX3NxZF9hc3luY19ub3RpZnkgPSBzcmNfYXR0ci0+ZW5fc3FkX2FzeW5jX25vdGlmeTsKLQlkZXN0X2F0dHItPnNxX2RyYWluaW5nID0gc3JjX2F0dHItPnNxX2RyYWluaW5nOwotCWRlc3RfYXR0ci0+bWF4X3JkX2F0b21pYyA9IHNyY19hdHRyLT5tYXhfcmRfYXRvbWljOwotCWRlc3RfYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljID0gc3JjX2F0dHItPm1heF9kZXN0X3JkX2F0b21pYzsKLQlkZXN0X2F0dHItPm1pbl9ybnJfdGltZXIgPSBzcmNfYXR0ci0+bWluX3Jucl90aW1lcjsKLQlkZXN0X2F0dHItPnBvcnRfbnVtID0gc3JjX2F0dHItPnBvcnRfbnVtOwotCWRlc3RfYXR0ci0+dGltZW91dCA9IHNyY19hdHRyLT50aW1lb3V0OwotCWRlc3RfYXR0ci0+cmV0cnlfY250ID0gc3JjX2F0dHItPnJldHJ5X2NudDsKLQlkZXN0X2F0dHItPnJucl9yZXRyeSA9IHNyY19hdHRyLT5ybnJfcmV0cnk7Ci0JZGVzdF9hdHRyLT5hbHRfcG9ydF9udW0gPSBzcmNfYXR0ci0+YWx0X3BvcnRfbnVtOwotCWRlc3RfYXR0ci0+YWx0X3RpbWVvdXQgPSBzcmNfYXR0ci0+YWx0X3RpbWVvdXQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGliX3VjbV9pbml0X3FwX2F0dHIoc3RydWN0IGliX3VjbV9maWxlICpmaWxlLAogCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKIAkJCQkgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKIHsKLQlzdHJ1Y3QgaWJfdWNtX2luaXRfcXBfYXR0cl9yZXNwIHJlc3A7CisJc3RydWN0IGliX3V2ZXJic19xcF9hdHRyIHJlc3A7CiAJc3RydWN0IGliX3VjbV9pbml0X3FwX2F0dHIgY21kOwogCXN0cnVjdCBpYl91Y21fY29udGV4dCAqY3R4OwogCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CkBAIC03MTgsNyArNjM3LDcgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIG91dDsKIAotCWliX3VjbV9jb3B5X3FwX2F0dHIoJnJlc3AsICZxcF9hdHRyKTsKKwlpYl9jb3B5X3FwX2F0dHJfdG9fdXNlcigmcmVzcCwgJnFwX2F0dHIpOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZihyZXNwKSkpCkBAIC03MjksNiArNjQ4LDE3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludCB1Y21fdmFsaWRhdGVfbGlzdGVuKF9fYmU2NCBzZXJ2aWNlX2lkLCBfX2JlNjQgc2VydmljZV9tYXNrKQoreworCXNlcnZpY2VfaWQgJj0gc2VydmljZV9tYXNrOworCisJaWYgKCgoc2VydmljZV9pZCAmIElCX0NNQV9TRVJWSUNFX0lEX01BU0spID09IElCX0NNQV9TRVJWSUNFX0lEKSB8fAorCSAgICAoKHNlcnZpY2VfaWQgJiBJQl9TRFBfU0VSVklDRV9JRF9NQVNLKSA9PSBJQl9TRFBfU0VSVklDRV9JRCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGliX3VjbV9saXN0ZW4oc3RydWN0IGliX3VjbV9maWxlICpmaWxlLAogCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqaW5idWYsCiAJCQkgICAgIGludCBpbl9sZW4sIGludCBvdXRfbGVuKQpAQCAtNzQ0LDcgKzY3NCwxMyBAQAogCWlmIChJU19FUlIoY3R4KSkKIAkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKIAotCXJlc3VsdCA9IGliX2NtX2xpc3RlbihjdHgtPmNtX2lkLCBjbWQuc2VydmljZV9pZCwgY21kLnNlcnZpY2VfbWFzayk7CisJcmVzdWx0ID0gdWNtX3ZhbGlkYXRlX2xpc3RlbihjbWQuc2VydmljZV9pZCwgY21kLnNlcnZpY2VfbWFzayk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBvdXQ7CisKKwlyZXN1bHQgPSBpYl9jbV9saXN0ZW4oY3R4LT5jbV9pZCwgY21kLnNlcnZpY2VfaWQsIGNtZC5zZXJ2aWNlX21hc2ssCisJCQkgICAgICBOVUxMKTsKK291dDoKIAlpYl91Y21fY3R4X3B1dChjdHgpOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC03OTMsNyArNzI5LDcgQEAKIAogc3RhdGljIGludCBpYl91Y21fcGF0aF9nZXQoc3RydWN0IGliX3NhX3BhdGhfcmVjICoqcGF0aCwgdTY0IHNyYykKIHsKLQlzdHJ1Y3QgaWJfdWNtX3BhdGhfcmVjIHVjbV9wYXRoOworCXN0cnVjdCBpYl91c2VyX3BhdGhfcmVjIHVwYXRoOwogCXN0cnVjdCBpYl9zYV9wYXRoX3JlYyAgKnNhX3BhdGg7CiAKIAkqcGF0aCA9IE5VTEw7CkBAIC04MDUsMzYgKzc0MSwxNCBAQAogCWlmICghc2FfcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnVjbV9wYXRoLCAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylzcmMsCi0JCQkgICBzaXplb2YodWNtX3BhdGgpKSkgeworCWlmIChjb3B5X2Zyb21fdXNlcigmdXBhdGgsICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKXNyYywKKwkJCSAgIHNpemVvZih1cGF0aCkpKSB7CiAKIAkJa2ZyZWUoc2FfcGF0aCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCW1lbWNweShzYV9wYXRoLT5kZ2lkLnJhdywgdWNtX3BhdGguZGdpZCwgc2l6ZW9mIHNhX3BhdGgtPmRnaWQpOwotCW1lbWNweShzYV9wYXRoLT5zZ2lkLnJhdywgdWNtX3BhdGguc2dpZCwgc2l6ZW9mIHNhX3BhdGgtPnNnaWQpOwotCi0Jc2FfcGF0aC0+ZGxpZAkgICAgICAgICAgPSB1Y21fcGF0aC5kbGlkOwotCXNhX3BhdGgtPnNsaWQJICAgICAgICAgID0gdWNtX3BhdGguc2xpZDsKLQlzYV9wYXRoLT5yYXdfdHJhZmZpYyAgICAgID0gdWNtX3BhdGgucmF3X3RyYWZmaWM7Ci0Jc2FfcGF0aC0+Zmxvd19sYWJlbCAgICAgICA9IHVjbV9wYXRoLmZsb3dfbGFiZWw7Ci0Jc2FfcGF0aC0+aG9wX2xpbWl0ICAgICAgICA9IHVjbV9wYXRoLmhvcF9saW1pdDsKLQlzYV9wYXRoLT50cmFmZmljX2NsYXNzICAgID0gdWNtX3BhdGgudHJhZmZpY19jbGFzczsKLQlzYV9wYXRoLT5yZXZlcnNpYmxlICAgICAgID0gdWNtX3BhdGgucmV2ZXJzaWJsZTsKLQlzYV9wYXRoLT5udW1iX3BhdGggICAgICAgID0gdWNtX3BhdGgubnVtYl9wYXRoOwotCXNhX3BhdGgtPnBrZXkgICAgICAgICAgICAgPSB1Y21fcGF0aC5wa2V5OwotCXNhX3BhdGgtPnNsICAgICAgICAgICAgICAgPSB1Y21fcGF0aC5zbDsKLQlzYV9wYXRoLT5tdHVfc2VsZWN0b3IgICAgID0gdWNtX3BhdGgubXR1X3NlbGVjdG9yOwotCXNhX3BhdGgtPm10dSAgICAgICAgICAgICAgPSB1Y21fcGF0aC5tdHU7Ci0Jc2FfcGF0aC0+cmF0ZV9zZWxlY3RvciAgICA9IHVjbV9wYXRoLnJhdGVfc2VsZWN0b3I7Ci0Jc2FfcGF0aC0+cmF0ZSAgICAgICAgICAgICA9IHVjbV9wYXRoLnJhdGU7Ci0Jc2FfcGF0aC0+cGFja2V0X2xpZmVfdGltZSA9IHVjbV9wYXRoLnBhY2tldF9saWZlX3RpbWU7Ci0Jc2FfcGF0aC0+cHJlZmVyZW5jZSAgICAgICA9IHVjbV9wYXRoLnByZWZlcmVuY2U7Ci0KLQlzYV9wYXRoLT5wYWNrZXRfbGlmZV90aW1lX3NlbGVjdG9yID0KLQkJdWNtX3BhdGgucGFja2V0X2xpZmVfdGltZV9zZWxlY3RvcjsKLQorCWliX2NvcHlfcGF0aF9yZWNfZnJvbV91c2VyKHNhX3BhdGgsICZ1cGF0aCk7CiAJKnBhdGggPSBzYV9wYXRoOwogCXJldHVybiAwOwogfQpAQCAtMTEzMCw3ICsxMDQ0LDYgQEAKIAlwYXJhbS5zZXJ2aWNlX2lkICAgICAgID0gY21kLnNpZDsKIAlwYXJhbS50aW1lb3V0X21zICAgICAgID0gY21kLnRpbWVvdXQ7CiAJcGFyYW0ubWF4X2NtX3JldHJpZXMgICA9IGNtZC5tYXhfY21fcmV0cmllczsKLQlwYXJhbS5wa2V5ICAgICAgICAgICAgID0gY21kLnBrZXk7CiAKIAljdHggPSBpYl91Y21fY3R4X2dldChmaWxlLCBjbWQuaWQpOwogCWlmICghSVNfRVJSKGN0eCkpIHsKQEAgLTEyNjMsNyArMTE3Niw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmZpbGUtPmN0eHMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZpbGUtPnBvbGxfd2FpdCk7CiAKLQlpbml0X01VVEVYKCZmaWxlLT5tdXRleCk7CisJbXV0ZXhfaW5pdCgmZmlsZS0+ZmlsZV9tdXRleCk7CiAKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBmaWxlOwogCWZpbGUtPmZpbHAgPSBmaWxwOwpAQCAtMTI3NywxMSArMTE5MCwxMSBAQAogCXN0cnVjdCBpYl91Y21fZmlsZSAqZmlsZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaWJfdWNtX2NvbnRleHQgKmN0eDsKIAotCWRvd24oJmZpbGUtPm11dGV4KTsKKwltdXRleF9sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmZpbGUtPmN0eHMpKSB7CiAJCWN0eCA9IGxpc3RfZW50cnkoZmlsZS0+Y3R4cy5uZXh0LAogCQkJCSBzdHJ1Y3QgaWJfdWNtX2NvbnRleHQsIGZpbGVfbGlzdCk7Ci0JCXVwKCZmaWxlLT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZmlsZS0+ZmlsZV9tdXRleCk7CiAKIAkJbXV0ZXhfbG9jaygmY3R4X2lkX211dGV4KTsKIAkJaWRyX3JlbW92ZSgmY3R4X2lkX3RhYmxlLCBjdHgtPmlkKTsKQEAgLTEyOTEsOSArMTIwNCw5IEBACiAJCWliX3VjbV9jbGVhbnVwX2V2ZW50cyhjdHgpOwogCQlrZnJlZShjdHgpOwogCi0JCWRvd24oJmZpbGUtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmZmlsZS0+ZmlsZV9tdXRleCk7CiAJfQotCXVwKCZmaWxlLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZmaWxlLT5maWxlX211dGV4KTsKIAlrZnJlZShmaWxlKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmgKaW5kZXggMzM3MmQ2Ny4uYmI5YmVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXUzMgkJCWFzeW5jX2V2ZW50c19yZXBvcnRlZDsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgbXV0ZXggaWJfdXZlcmJzX2lkcl9tdXRleDsKK2V4dGVybiBzcGlubG9ja190IGliX3V2ZXJic19pZHJfbG9jazsKIGV4dGVybiBzdHJ1Y3QgaWRyIGliX3V2ZXJic19wZF9pZHI7CiBleHRlcm4gc3RydWN0IGlkciBpYl91dmVyYnNfbXJfaWRyOwogZXh0ZXJuIHN0cnVjdCBpZHIgaWJfdXZlcmJzX213X2lkcjsKQEAgLTE0MSw2ICsxNDEsOCBAQAogZXh0ZXJuIHN0cnVjdCBpZHIgaWJfdXZlcmJzX3FwX2lkcjsKIGV4dGVybiBzdHJ1Y3QgaWRyIGliX3V2ZXJic19zcnFfaWRyOwogCit2b2lkIGlkcl9yZW1vdmVfdW9iaihzdHJ1Y3QgaWRyICppZHAsIHN0cnVjdCBpYl91b2JqZWN0ICp1b2JqKTsKKwogc3RydWN0IGZpbGUgKmliX3V2ZXJic19hbGxvY19ldmVudF9maWxlKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqdXZlcmJzX2ZpbGUsCiAJCQkJCWludCBpc19hc3luYywgaW50ICpmZCk7CiB2b2lkIGliX3V2ZXJic19yZWxlYXNlX2V2ZW50X2ZpbGUoc3RydWN0IGtyZWYgKnJlZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKaW5kZXggOWY2OWJkNDguLjc2YmY2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKQEAgLTUwLDYgKzUwLDE5NiBAQAogCQkodWRhdGEpLT5vdXRsZW4gPSAob2xlbik7CQkJCVwKIAl9IHdoaWxlICgwKQogCisvKgorICogVGhlIGliX3VvYmplY3QgbG9ja2luZyBzY2hlbWUgaXMgYXMgZm9sbG93czoKKyAqCisgKiAtIGliX3V2ZXJic19pZHJfbG9jayBwcm90ZWN0cyB0aGUgdXZlcmJzIGlkcnMgdGhlbXNlbHZlcywgc28gaXQKKyAqICAgbmVlZHMgdG8gYmUgaGVsZCBkdXJpbmcgYWxsIGlkciBvcGVyYXRpb25zLiAgV2hlbiBhbiBvYmplY3QgaXMKKyAqICAgbG9va2VkIHVwLCBhIHJlZmVyZW5jZSBtdXN0IGJlIHRha2VuIG9uIHRoZSBvYmplY3QncyBrcmVmIGJlZm9yZQorICogICBkcm9wcGluZyB0aGlzIGxvY2suCisgKgorICogLSBFYWNoIG9iamVjdCBhbHNvIGhhcyBhbiByd3NlbS4gIFRoaXMgcndzZW0gbXVzdCBiZSBoZWxkIGZvcgorICogICByZWFkaW5nIHdoaWxlIGFuIG9wZXJhdGlvbiB0aGF0IHVzZXMgdGhlIG9iamVjdCBpcyBwZXJmb3JtZWQuCisgKiAgIEZvciBleGFtcGxlLCB3aGlsZSByZWdpc3RlcmluZyBhbiBNUiwgdGhlIGFzc29jaWF0ZWQgUEQncworICogICB1b2JqZWN0Lm11dGV4IG11c3QgYmUgaGVsZCBmb3IgcmVhZGluZy4gIFRoZSByd3NlbSBtdXN0IGJlIGhlbGQKKyAqICAgZm9yIHdyaXRpbmcgd2hpbGUgaW5pdGlhbGl6aW5nIG9yIGRlc3Ryb3lpbmcgYW4gb2JqZWN0LgorICoKKyAqIC0gSW4gYWRkaXRpb24sIGVhY2ggb2JqZWN0IGhhcyBhICJsaXZlIiBmbGFnLiAgSWYgdGhpcyBmbGFnIGlzIG5vdAorICogICBzZXQsIHRoZW4gbG9va3VwcyBvZiB0aGUgb2JqZWN0IHdpbGwgZmFpbCBldmVuIGlmIGl0IGlzIGZvdW5kIGluCisgKiAgIHRoZSBpZHIuICBUaGlzIGhhbmRsZXMgYSByZWFkZXIgdGhhdCBibG9ja3MgYW5kIGRvZXMgbm90IGFjcXVpcmUKKyAqICAgdGhlIHJ3c2VtIHVudGlsIGFmdGVyIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLiAgVGhlIGRlc3Ryb3kKKyAqICAgb3BlcmF0aW9uIHdpbGwgc2V0IHRoZSBsaXZlIGZsYWcgdG8gMCBhbmQgdGhlbiBkcm9wIHRoZSByd3NlbTsKKyAqICAgdGhpcyB3aWxsIGFsbG93IHRoZSByZWFkZXIgdG8gYWNxdWlyZSB0aGUgcndzZW0sIHNlZSB0aGF0IHRoZQorICogICBsaXZlIGZsYWcgaXMgMCwgYW5kIHRoZW4gZHJvcCB0aGUgcndzZW0gYW5kIGl0cyByZWZlcmVuY2UgdG8KKyAqICAgb2JqZWN0LiAgVGhlIHVuZGVybHlpbmcgc3RvcmFnZSB3aWxsIG5vdCBiZSBmcmVlZCB1bnRpbCB0aGUgbGFzdAorICogICByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBpcyBkcm9wcGVkLgorICovCisKK3N0YXRpYyB2b2lkIGluaXRfdW9iaihzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iaiwgdTY0IHVzZXJfaGFuZGxlLAorCQkgICAgICBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJdW9iai0+dXNlcl9oYW5kbGUgPSB1c2VyX2hhbmRsZTsKKwl1b2JqLT5jb250ZXh0ICAgICA9IGNvbnRleHQ7CisJa3JlZl9pbml0KCZ1b2JqLT5yZWYpOworCWluaXRfcndzZW0oJnVvYmotPm11dGV4KTsKKwl1b2JqLT5saXZlICAgICAgICA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfdW9iaihzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlrZnJlZShjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGliX3VvYmplY3QsIHJlZikpOworfQorCitzdGF0aWMgdm9pZCBwdXRfdW9iaihzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iaikKK3sKKwlrcmVmX3B1dCgmdW9iai0+cmVmLCByZWxlYXNlX3VvYmopOworfQorCitzdGF0aWMgdm9pZCBwdXRfdW9ial9yZWFkKHN0cnVjdCBpYl91b2JqZWN0ICp1b2JqKQoreworCXVwX3JlYWQoJnVvYmotPm11dGV4KTsKKwlwdXRfdW9iaih1b2JqKTsKK30KKworc3RhdGljIHZvaWQgcHV0X3VvYmpfd3JpdGUoc3RydWN0IGliX3VvYmplY3QgKnVvYmopCit7CisJdXBfd3JpdGUoJnVvYmotPm11dGV4KTsKKwlwdXRfdW9iaih1b2JqKTsKK30KKworc3RhdGljIGludCBpZHJfYWRkX3VvYmooc3RydWN0IGlkciAqaWRyLCBzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iaikKK3sKKwlpbnQgcmV0OworCityZXRyeToKKwlpZiAoIWlkcl9wcmVfZ2V0KGlkciwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrKCZpYl91dmVyYnNfaWRyX2xvY2spOworCXJldCA9IGlkcl9nZXRfbmV3KGlkciwgdW9iaiwgJnVvYmotPmlkKTsKKwlzcGluX3VubG9jaygmaWJfdXZlcmJzX2lkcl9sb2NrKTsKKworCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJZ290byByZXRyeTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaWRyX3JlbW92ZV91b2JqKHN0cnVjdCBpZHIgKmlkciwgc3RydWN0IGliX3VvYmplY3QgKnVvYmopCit7CisJc3Bpbl9sb2NrKCZpYl91dmVyYnNfaWRyX2xvY2spOworCWlkcl9yZW1vdmUoaWRyLCB1b2JqLT5pZCk7CisJc3Bpbl91bmxvY2soJmliX3V2ZXJic19pZHJfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfdW9iamVjdCAqX19pZHJfZ2V0X3VvYmooc3RydWN0IGlkciAqaWRyLCBpbnQgaWQsCisJCQkJCSBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGliX3VvYmplY3QgKnVvYmo7CisKKwlzcGluX2xvY2soJmliX3V2ZXJic19pZHJfbG9jayk7CisJdW9iaiA9IGlkcl9maW5kKGlkciwgaWQpOworCWlmICh1b2JqKQorCQlrcmVmX2dldCgmdW9iai0+cmVmKTsKKwlzcGluX3VubG9jaygmaWJfdXZlcmJzX2lkcl9sb2NrKTsKKworCXJldHVybiB1b2JqOworfQorCitzdGF0aWMgc3RydWN0IGliX3VvYmplY3QgKmlkcl9yZWFkX3VvYmooc3RydWN0IGlkciAqaWRyLCBpbnQgaWQsCisJCQkJCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iajsKKworCXVvYmogPSBfX2lkcl9nZXRfdW9iaihpZHIsIGlkLCBjb250ZXh0KTsKKwlpZiAoIXVvYmopCisJCXJldHVybiBOVUxMOworCisJZG93bl9yZWFkKCZ1b2JqLT5tdXRleCk7CisJaWYgKCF1b2JqLT5saXZlKSB7CisJCXB1dF91b2JqX3JlYWQodW9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiB1b2JqOworfQorCitzdGF0aWMgc3RydWN0IGliX3VvYmplY3QgKmlkcl93cml0ZV91b2JqKHN0cnVjdCBpZHIgKmlkciwgaW50IGlkLAorCQkJCQkgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBpYl91b2JqZWN0ICp1b2JqOworCisJdW9iaiA9IF9faWRyX2dldF91b2JqKGlkciwgaWQsIGNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIE5VTEw7CisKKwlkb3duX3dyaXRlKCZ1b2JqLT5tdXRleCk7CisJaWYgKCF1b2JqLT5saXZlKSB7CisJCXB1dF91b2JqX3dyaXRlKHVvYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gdW9iajsKK30KKworc3RhdGljIHZvaWQgKmlkcl9yZWFkX29iaihzdHJ1Y3QgaWRyICppZHIsIGludCBpZCwgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBpYl91b2JqZWN0ICp1b2JqOworCisJdW9iaiA9IGlkcl9yZWFkX3VvYmooaWRyLCBpZCwgY29udGV4dCk7CisJcmV0dXJuIHVvYmogPyB1b2JqLT5vYmplY3QgOiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGliX3BkICppZHJfcmVhZF9wZChpbnQgcGRfaGFuZGxlLCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIGlkcl9yZWFkX29iaigmaWJfdXZlcmJzX3BkX2lkciwgcGRfaGFuZGxlLCBjb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgcHV0X3BkX3JlYWQoc3RydWN0IGliX3BkICpwZCkKK3sKKwlwdXRfdW9ial9yZWFkKHBkLT51b2JqZWN0KTsKK30KKworc3RhdGljIHN0cnVjdCBpYl9jcSAqaWRyX3JlYWRfY3EoaW50IGNxX2hhbmRsZSwgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCXJldHVybiBpZHJfcmVhZF9vYmooJmliX3V2ZXJic19jcV9pZHIsIGNxX2hhbmRsZSwgY29udGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9jcV9yZWFkKHN0cnVjdCBpYl9jcSAqY3EpCit7CisJcHV0X3VvYmpfcmVhZChjcS0+dW9iamVjdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfYWggKmlkcl9yZWFkX2FoKGludCBhaF9oYW5kbGUsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfYWhfaWRyLCBhaF9oYW5kbGUsIGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBwdXRfYWhfcmVhZChzdHJ1Y3QgaWJfYWggKmFoKQoreworCXB1dF91b2JqX3JlYWQoYWgtPnVvYmplY3QpOworfQorCitzdGF0aWMgc3RydWN0IGliX3FwICppZHJfcmVhZF9xcChpbnQgcXBfaGFuZGxlLCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIGlkcl9yZWFkX29iaigmaWJfdXZlcmJzX3FwX2lkciwgcXBfaGFuZGxlLCBjb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgcHV0X3FwX3JlYWQoc3RydWN0IGliX3FwICpxcCkKK3sKKwlwdXRfdW9ial9yZWFkKHFwLT51b2JqZWN0KTsKK30KKworc3RhdGljIHN0cnVjdCBpYl9zcnEgKmlkcl9yZWFkX3NycShpbnQgc3JxX2hhbmRsZSwgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQoreworCXJldHVybiBpZHJfcmVhZF9vYmooJmliX3V2ZXJic19zcnFfaWRyLCBzcnFfaGFuZGxlLCBjb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgcHV0X3NycV9yZWFkKHN0cnVjdCBpYl9zcnEgKnNycSkKK3sKKwlwdXRfdW9ial9yZWFkKHNycS0+dW9iamVjdCk7Cit9CisKIHNzaXplX3QgaWJfdXZlcmJzX2dldF9jb250ZXh0KHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKQEAgLTgwLDggKzI3MCwxMCBAQAogCQkgICBpbl9sZW4gLSBzaXplb2YgY21kLCBvdXRfbGVuIC0gc2l6ZW9mIHJlc3ApOwogCiAJdWNvbnRleHQgPSBpYmRldi0+YWxsb2NfdWNvbnRleHQoaWJkZXYsICZ1ZGF0YSk7Ci0JaWYgKElTX0VSUih1Y29udGV4dCkpCi0JCXJldHVybiBQVFJfRVJSKGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoSVNfRVJSKHVjb250ZXh0KSkgeworCQlyZXQgPSBQVFJfRVJSKGZpbGUtPnVjb250ZXh0KTsKKwkJZ290byBlcnI7CisJfQogCiAJdWNvbnRleHQtPmRldmljZSA9IGliZGV2OwogCUlOSVRfTElTVF9IRUFEKCZ1Y29udGV4dC0+cGRfbGlzdCk7CkBAIC0yNzgsNyArNDcwLDggQEAKIAlpZiAoIXVvYmopCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdW9iai0+Y29udGV4dCA9IGZpbGUtPnVjb250ZXh0OworCWluaXRfdW9iaih1b2JqLCAwLCBmaWxlLT51Y29udGV4dCk7CisJZG93bl93cml0ZSgmdW9iai0+bXV0ZXgpOwogCiAJcGQgPSBmaWxlLT5kZXZpY2UtPmliX2Rldi0+YWxsb2NfcGQoZmlsZS0+ZGV2aWNlLT5pYl9kZXYsCiAJCQkJCSAgICBmaWxlLT51Y29udGV4dCwgJnVkYXRhKTsKQEAgLTI5MSwyMCArNDg0LDEwIEBACiAJcGQtPnVvYmplY3QgPSB1b2JqOwogCWF0b21pY19zZXQoJnBkLT51c2VjbnQsIDApOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLXJldHJ5OgotCWlmICghaWRyX3ByZV9nZXQoJmliX3V2ZXJic19wZF9pZHIsIEdGUF9LRVJORUwpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VwOwotCX0KLQotCXJldCA9IGlkcl9nZXRfbmV3KCZpYl91dmVyYnNfcGRfaWRyLCBwZCwgJnVvYmotPmlkKTsKLQotCWlmIChyZXQgPT0gLUVBR0FJTikKLQkJZ290byByZXRyeTsKKwl1b2JqLT5vYmplY3QgPSBwZDsKKwlyZXQgPSBpZHJfYWRkX3VvYmooJmliX3V2ZXJic19wZF9pZHIsIHVvYmopOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX3VwOworCQlnb3RvIGVycl9pZHI7CiAKIAltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKIAlyZXNwLnBkX2hhbmRsZSA9IHVvYmotPmlkOwpAQCAtMzEyLDI2ICs0OTUsMjcgQEAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBlcnJfaWRyOworCQlnb3RvIGVycl9jb3B5OwogCX0KIAogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZ1b2JqLT5saXN0LCAmZmlsZS0+dWNvbnRleHQtPnBkX2xpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwl1b2JqLT5saXZlID0gMTsKKworCXVwX3dyaXRlKCZ1b2JqLT5tdXRleCk7CiAKIAlyZXR1cm4gaW5fbGVuOwogCi1lcnJfaWRyOgotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19wZF9pZHIsIHVvYmotPmlkKTsKK2Vycl9jb3B5OgorCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX3BkX2lkciwgdW9iaik7CiAKLWVycl91cDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworZXJyX2lkcjoKIAlpYl9kZWFsbG9jX3BkKHBkKTsKIAogZXJyOgotCWtmcmVlKHVvYmopOworCXB1dF91b2JqX3dyaXRlKHVvYmopOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0MCwzNyArNTI0LDM0IEBACiAJCQkgICAgIGludCBpbl9sZW4sIGludCBvdXRfbGVuKQogewogCXN0cnVjdCBpYl91dmVyYnNfZGVhbGxvY19wZCBjbWQ7Ci0Jc3RydWN0IGliX3BkICAgICAgICAgICAgICAgKnBkOwogCXN0cnVjdCBpYl91b2JqZWN0ICAgICAgICAgICp1b2JqOwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwl1b2JqID0gaWRyX3dyaXRlX3VvYmooJmliX3V2ZXJic19wZF9pZHIsIGNtZC5wZF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXVvYmopCisJCXJldHVybiAtRUlOVkFMOwogCi0JcGQgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7Ci0JaWYgKCFwZCB8fCBwZC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKLQkJZ290byBvdXQ7CisJcmV0ID0gaWJfZGVhbGxvY19wZCh1b2JqLT5vYmplY3QpOworCWlmICghcmV0KQorCQl1b2JqLT5saXZlID0gMDsKIAotCXVvYmogPSBwZC0+dW9iamVjdDsKKwlwdXRfdW9ial93cml0ZSh1b2JqKTsKIAotCXJldCA9IGliX2RlYWxsb2NfcGQocGQpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gcmV0OwogCi0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7CisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfcGRfaWRyLCB1b2JqKTsKIAogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKIAlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQlrZnJlZSh1b2JqKTsKKwlwdXRfdW9iaih1b2JqKTsKIAotb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOworCXJldHVybiBpbl9sZW47CiB9CiAKIHNzaXplX3QgaWJfdXZlcmJzX3JlZ19tcihzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCkBAIC00MTAsNyArNTkxLDggQEAKIAlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlvYmotPnVvYmplY3QuY29udGV4dCA9IGZpbGUtPnVjb250ZXh0OworCWluaXRfdW9iaigmb2JqLT51b2JqZWN0LCAwLCBmaWxlLT51Y29udGV4dCk7CisJZG93bl93cml0ZSgmb2JqLT51b2JqZWN0Lm11dGV4KTsKIAogCS8qCiAJICogV2UgYXNrIGZvciB3cml0YWJsZSBtZW1vcnkgaWYgYW55IGFjY2VzcyBmbGFncyBvdGhlciB0aGFuCkBAIC00MjcsMjMgKzYwOSwxNCBAQAogCiAJb2JqLT51bWVtLnZpcnRfYmFzZSA9IGNtZC5oY2FfdmE7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXBkID0gaWRyX2ZpbmQoJmliX3V2ZXJic19wZF9pZHIsIGNtZC5wZF9oYW5kbGUpOwotCWlmICghcGQgfHwgcGQtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfdXA7Ci0JfQotCi0JaWYgKCFwZC0+ZGV2aWNlLT5yZWdfdXNlcl9tcikgewotCQlyZXQgPSAtRU5PU1lTOwotCQlnb3RvIGVycl91cDsKLQl9CisJcGQgPSBpZHJfcmVhZF9wZChjbWQucGRfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCFwZCkKKwkJZ290byBlcnJfcmVsZWFzZTsKIAogCW1yID0gcGQtPmRldmljZS0+cmVnX3VzZXJfbXIocGQsICZvYmotPnVtZW0sIGNtZC5hY2Nlc3NfZmxhZ3MsICZ1ZGF0YSk7CiAJaWYgKElTX0VSUihtcikpIHsKIAkJcmV0ID0gUFRSX0VSUihtcik7Ci0JCWdvdG8gZXJyX3VwOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJbXItPmRldmljZSAgPSBwZC0+ZGV2aWNlOwpAQCAtNDUyLDUzICs2MjUsNDggQEAKIAlhdG9taWNfaW5jKCZwZC0+dXNlY250KTsKIAlhdG9taWNfc2V0KCZtci0+dXNlY250LCAwKTsKIAotCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOwotCXJlc3AubGtleSA9IG1yLT5sa2V5OwotCXJlc3AucmtleSA9IG1yLT5ya2V5OwotCi1yZXRyeToKLQlpZiAoIWlkcl9wcmVfZ2V0KCZpYl91dmVyYnNfbXJfaWRyLCBHRlBfS0VSTkVMKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bnJlZzsKLQl9Ci0KLQlyZXQgPSBpZHJfZ2V0X25ldygmaWJfdXZlcmJzX21yX2lkciwgbXIsICZvYmotPnVvYmplY3QuaWQpOwotCi0JaWYgKHJldCA9PSAtRUFHQUlOKQotCQlnb3RvIHJldHJ5OworCW9iai0+dW9iamVjdC5vYmplY3QgPSBtcjsKKwlyZXQgPSBpZHJfYWRkX3VvYmooJmliX3V2ZXJic19tcl9pZHIsICZvYmotPnVvYmplY3QpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3VucmVnOwogCisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisJcmVzcC5sa2V5ICAgICAgPSBtci0+bGtleTsKKwlyZXNwLnJrZXkgICAgICA9IG1yLT5ya2V5OwogCXJlc3AubXJfaGFuZGxlID0gb2JqLT51b2JqZWN0LmlkOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CiAJCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX2lkcjsKKwkJZ290byBlcnJfY29weTsKIAl9CiAKKwlwdXRfcGRfcmVhZChwZCk7CisKIAltdXRleF9sb2NrKCZmaWxlLT5tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmb2JqLT51b2JqZWN0Lmxpc3QsICZmaWxlLT51Y29udGV4dC0+bXJfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCW9iai0+dW9iamVjdC5saXZlID0gMTsKKworCXVwX3dyaXRlKCZvYmotPnVvYmplY3QubXV0ZXgpOwogCiAJcmV0dXJuIGluX2xlbjsKIAotZXJyX2lkcjoKLQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfbXJfaWRyLCBvYmotPnVvYmplY3QuaWQpOworZXJyX2NvcHk6CisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfbXJfaWRyLCAmb2JqLT51b2JqZWN0KTsKIAogZXJyX3VucmVnOgogCWliX2RlcmVnX21yKG1yKTsKLQlhdG9taWNfZGVjKCZwZC0+dXNlY250KTsKIAotZXJyX3VwOgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CitlcnJfcHV0OgorCXB1dF9wZF9yZWFkKHBkKTsKIAorZXJyX3JlbGVhc2U6CiAJaWJfdW1lbV9yZWxlYXNlKGZpbGUtPmRldmljZS0+aWJfZGV2LCAmb2JqLT51bWVtKTsKIAogZXJyX2ZyZWU6Ci0Ja2ZyZWUob2JqKTsKKwlwdXRfdW9ial93cml0ZSgmb2JqLT51b2JqZWN0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MDgsMzcgKzY3Niw0MCBAQAogewogCXN0cnVjdCBpYl91dmVyYnNfZGVyZWdfbXIgY21kOwogCXN0cnVjdCBpYl9tciAgICAgICAgICAgICAqbXI7CisJc3RydWN0IGliX3VvYmplY3QJICp1b2JqOwogCXN0cnVjdCBpYl91bWVtX29iamVjdCAgICAqbWVtb2JqOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXVvYmogPSBpZHJfd3JpdGVfdW9iaigmaWJfdXZlcmJzX21yX2lkciwgY21kLm1yX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQltciA9IGlkcl9maW5kKCZpYl91dmVyYnNfbXJfaWRyLCBjbWQubXJfaGFuZGxlKTsKLQlpZiAoIW1yIHx8IG1yLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KQotCQlnb3RvIG91dDsKLQotCW1lbW9iaiA9IGNvbnRhaW5lcl9vZihtci0+dW9iamVjdCwgc3RydWN0IGliX3VtZW1fb2JqZWN0LCB1b2JqZWN0KTsKKwltZW1vYmogPSBjb250YWluZXJfb2YodW9iaiwgc3RydWN0IGliX3VtZW1fb2JqZWN0LCB1b2JqZWN0KTsKKwltciAgICAgPSB1b2JqLT5vYmplY3Q7CiAKIAlyZXQgPSBpYl9kZXJlZ19tcihtcik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7CisJaWYgKCFyZXQpCisJCXVvYmotPmxpdmUgPSAwOwogCi0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX21yX2lkciwgY21kLm1yX2hhbmRsZSk7CisJcHV0X3VvYmpfd3JpdGUodW9iaik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfbXJfaWRyLCB1b2JqKTsKIAogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKLQlsaXN0X2RlbCgmbWVtb2JqLT51b2JqZWN0Lmxpc3QpOworCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKIAltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIAogCWliX3VtZW1fcmVsZWFzZShmaWxlLT5kZXZpY2UtPmliX2RldiwgJm1lbW9iai0+dW1lbSk7Ci0Ja2ZyZWUobWVtb2JqKTsKIAotb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJcHV0X3VvYmoodW9iaik7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOworCXJldHVybiBpbl9sZW47CiB9CiAKIHNzaXplX3QgaWJfdXZlcmJzX2NyZWF0ZV9jb21wX2NoYW5uZWwoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLApAQCAtNTc3LDcgKzc0OCw3IEBACiAJc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY3EgICAgICBjbWQ7CiAJc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY3FfcmVzcCByZXNwOwogCXN0cnVjdCBpYl91ZGF0YSAgICAgICAgICAgICAgICAgdWRhdGE7Ci0Jc3RydWN0IGliX3VjcV9vYmplY3QgICAgICAgICAgICp1b2JqOworCXN0cnVjdCBpYl91Y3Ffb2JqZWN0ICAgICAgICAgICAqb2JqOwogCXN0cnVjdCBpYl91dmVyYnNfZXZlbnRfZmlsZSAgICAqZXZfZmlsZSA9IE5VTEw7CiAJc3RydWN0IGliX2NxICAgICAgICAgICAgICAgICAgICpjcTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKQEAgLTU5NSwxMCArNzY2LDEzIEBACiAJaWYgKGNtZC5jb21wX3ZlY3RvciA+PSBmaWxlLT5kZXZpY2UtPm51bV9jb21wX3ZlY3RvcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdW9iaiA9IGttYWxsb2Moc2l6ZW9mICp1b2JqLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVvYmopCisJb2JqID0ga21hbGxvYyhzaXplb2YgKm9iaiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmopCiAJCXJldHVybiAtRU5PTUVNOwogCisJaW5pdF91b2JqKCZvYmotPnVvYmplY3QsIGNtZC51c2VyX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWRvd25fd3JpdGUoJm9iai0+dW9iamVjdC5tdXRleCk7CisKIAlpZiAoY21kLmNvbXBfY2hhbm5lbCA+PSAwKSB7CiAJCWV2X2ZpbGUgPSBpYl91dmVyYnNfbG9va3VwX2NvbXBfZmlsZShjbWQuY29tcF9jaGFubmVsKTsKIAkJaWYgKCFldl9maWxlKSB7CkBAIC02MDcsNzIgKzc4MSw2NCBAQAogCQl9CiAJfQogCi0JdW9iai0+dW9iamVjdC51c2VyX2hhbmRsZSAgID0gY21kLnVzZXJfaGFuZGxlOwotCXVvYmotPnVvYmplY3QuY29udGV4dCAgICAgICA9IGZpbGUtPnVjb250ZXh0OwotCXVvYmotPnV2ZXJic19maWxlCSAgICA9IGZpbGU7Ci0JdW9iai0+Y29tcF9ldmVudHNfcmVwb3J0ZWQgID0gMDsKLQl1b2JqLT5hc3luY19ldmVudHNfcmVwb3J0ZWQgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZ1b2JqLT5jb21wX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZ1b2JqLT5hc3luY19saXN0KTsKKwlvYmotPnV2ZXJic19maWxlCSAgID0gZmlsZTsKKwlvYmotPmNvbXBfZXZlbnRzX3JlcG9ydGVkICA9IDA7CisJb2JqLT5hc3luY19ldmVudHNfcmVwb3J0ZWQgPSAwOworCUlOSVRfTElTVF9IRUFEKCZvYmotPmNvbXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+YXN5bmNfbGlzdCk7CiAKIAljcSA9IGZpbGUtPmRldmljZS0+aWJfZGV2LT5jcmVhdGVfY3EoZmlsZS0+ZGV2aWNlLT5pYl9kZXYsIGNtZC5jcWUsCiAJCQkJCSAgICAgZmlsZS0+dWNvbnRleHQsICZ1ZGF0YSk7CiAJaWYgKElTX0VSUihjcSkpIHsKIAkJcmV0ID0gUFRSX0VSUihjcSk7Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9maWxlOwogCX0KIAogCWNxLT5kZXZpY2UgICAgICAgID0gZmlsZS0+ZGV2aWNlLT5pYl9kZXY7Ci0JY3EtPnVvYmplY3QgICAgICAgPSAmdW9iai0+dW9iamVjdDsKKwljcS0+dW9iamVjdCAgICAgICA9ICZvYmotPnVvYmplY3Q7CiAJY3EtPmNvbXBfaGFuZGxlciAgPSBpYl91dmVyYnNfY29tcF9oYW5kbGVyOwogCWNxLT5ldmVudF9oYW5kbGVyID0gaWJfdXZlcmJzX2NxX2V2ZW50X2hhbmRsZXI7CiAJY3EtPmNxX2NvbnRleHQgICAgPSBldl9maWxlOwogCWF0b21pY19zZXQoJmNxLT51c2VjbnQsIDApOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLXJldHJ5OgotCWlmICghaWRyX3ByZV9nZXQoJmliX3V2ZXJic19jcV9pZHIsIEdGUF9LRVJORUwpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VwOwotCX0KLQotCXJldCA9IGlkcl9nZXRfbmV3KCZpYl91dmVyYnNfY3FfaWRyLCBjcSwgJnVvYmotPnVvYmplY3QuaWQpOwotCi0JaWYgKHJldCA9PSAtRUFHQUlOKQotCQlnb3RvIHJldHJ5OworCW9iai0+dW9iamVjdC5vYmplY3QgPSBjcTsKKwlyZXQgPSBpZHJfYWRkX3VvYmooJmliX3V2ZXJic19jcV9pZHIsICZvYmotPnVvYmplY3QpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX3VwOworCQlnb3RvIGVycl9mcmVlOwogCiAJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7Ci0JcmVzcC5jcV9oYW5kbGUgPSB1b2JqLT51b2JqZWN0LmlkOworCXJlc3AuY3FfaGFuZGxlID0gb2JqLT51b2JqZWN0LmlkOwogCXJlc3AuY3FlICAgICAgID0gY3EtPmNxZTsKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkgewogCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9pZHI7CisJCWdvdG8gZXJyX2NvcHk7CiAJfQogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwotCWxpc3RfYWRkX3RhaWwoJnVvYmotPnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5jcV9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZvYmotPnVvYmplY3QubGlzdCwgJmZpbGUtPnVjb250ZXh0LT5jcV9saXN0KTsKIAltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIAotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJb2JqLT51b2JqZWN0LmxpdmUgPSAxOworCisJdXBfd3JpdGUoJm9iai0+dW9iamVjdC5tdXRleCk7CiAKIAlyZXR1cm4gaW5fbGVuOwogCi1lcnJfaWRyOgotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19jcV9pZHIsIHVvYmotPnVvYmplY3QuaWQpOworZXJyX2NvcHk6CisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfY3FfaWRyLCAmb2JqLT51b2JqZWN0KTsKIAotZXJyX3VwOgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKK2Vycl9mcmVlOgogCWliX2Rlc3Ryb3lfY3EoY3EpOwogCi1lcnI6CitlcnJfZmlsZToKIAlpZiAoZXZfZmlsZSkKLQkJaWJfdXZlcmJzX3JlbGVhc2VfdWNxKGZpbGUsIGV2X2ZpbGUsIHVvYmopOwotCWtmcmVlKHVvYmopOworCQlpYl91dmVyYnNfcmVsZWFzZV91Y3EoZmlsZSwgZXZfZmlsZSwgb2JqKTsKKworZXJyOgorCXB1dF91b2JqX3dyaXRlKCZvYmotPnVvYmplY3QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY5MywxMSArODU5LDkgQEAKIAkJICAgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSArIHNpemVvZiByZXNwLAogCQkgICBpbl9sZW4gLSBzaXplb2YgY21kLCBvdXRfbGVuIC0gc2l6ZW9mIHJlc3ApOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLQljcSA9IGlkcl9maW5kKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlKTsKLQlpZiAoIWNxIHx8IGNxLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0IHx8ICFjcS0+ZGV2aWNlLT5yZXNpemVfY3EpCi0JCWdvdG8gb3V0OworCWNxID0gaWRyX3JlYWRfY3EoY21kLmNxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghY3EpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gY3EtPmRldmljZS0+cmVzaXplX2NxKGNxLCBjbWQuY3FlLCAmdWRhdGEpOwogCWlmIChyZXQpCkBAIC03MTEsNyArODc1LDcgQEAKIAkJcmV0ID0gLUVGQVVMVDsKIAogb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJcHV0X2NxX3JlYWQoY3EpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKIH0KQEAgLTcyMiw2ICs4ODYsNyBAQAogewogCXN0cnVjdCBpYl91dmVyYnNfcG9sbF9jcSAgICAgICBjbWQ7CiAJc3RydWN0IGliX3V2ZXJic19wb2xsX2NxX3Jlc3AgKnJlc3A7CisJc3RydWN0IGliX3VvYmplY3QJICAgICAgKnVvYmo7CiAJc3RydWN0IGliX2NxICAgICAgICAgICAgICAgICAgKmNxOwogCXN0cnVjdCBpYl93YyAgICAgICAgICAgICAgICAgICp3YzsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKQEAgLTc0MiwxNSArOTA3LDE3IEBACiAJCWdvdG8gb3V0X3djOwogCX0KIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCWNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5jcV9oYW5kbGUpOwotCWlmICghY3EgfHwgY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpIHsKKwl1b2JqID0gaWRyX3JlYWRfdW9iaigmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CisJY3EgPSB1b2JqLT5vYmplY3Q7CiAKIAlyZXNwLT5jb3VudCA9IGliX3BvbGxfY3EoY3EsIGNtZC5uZSwgd2MpOwogCisJcHV0X3VvYmpfcmVhZCh1b2JqKTsKKwogCWZvciAoaSA9IDA7IGkgPCByZXNwLT5jb3VudDsgaSsrKSB7CiAJCXJlc3AtPndjW2ldLndyX2lkIAkgICA9IHdjW2ldLndyX2lkOwogCQlyZXNwLT53Y1tpXS5zdGF0dXMgCSAgID0gd2NbaV0uc3RhdHVzOwpAQCAtNzcyLDcgKzkzOSw2IEBACiAJCXJldCA9IC1FRkFVTFQ7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwogCWtmcmVlKHJlc3ApOwogCiBvdXRfd2M6CkBAIC03ODUsMjIgKzk1MSwyMyBAQAogCQkJCWludCBvdXRfbGVuKQogewogCXN0cnVjdCBpYl91dmVyYnNfcmVxX25vdGlmeV9jcSBjbWQ7CisJc3RydWN0IGliX3VvYmplY3QJICAgICAgKnVvYmo7CiAJc3RydWN0IGliX2NxICAgICAgICAgICAgICAgICAgKmNxOwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0JY3EgPSBpZHJfZmluZCgmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSk7Ci0JaWYgKGNxICYmIGNxLT51b2JqZWN0LT5jb250ZXh0ID09IGZpbGUtPnVjb250ZXh0KSB7Ci0JCWliX3JlcV9ub3RpZnlfY3EoY3EsIGNtZC5zb2xpY2l0ZWRfb25seSA/Ci0JCQkJCUlCX0NRX1NPTElDSVRFRCA6IElCX0NRX05FWFRfQ09NUCk7Ci0JCXJldCA9IGluX2xlbjsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwl1b2JqID0gaWRyX3JlYWRfdW9iaigmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3EgPSB1b2JqLT5vYmplY3Q7CiAKLQlyZXR1cm4gcmV0OworCWliX3JlcV9ub3RpZnlfY3EoY3EsIGNtZC5zb2xpY2l0ZWRfb25seSA/CisJCQkgSUJfQ1FfU09MSUNJVEVEIDogSUJfQ1FfTkVYVF9DT01QKTsKKworCXB1dF91b2JqX3JlYWQodW9iaik7CisKKwlyZXR1cm4gaW5fbGVuOwogfQogCiBzc2l6ZV90IGliX3V2ZXJic19kZXN0cm95X2NxKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKQEAgLTgwOSw1MiArOTc2LDUwIEBACiB7CiAJc3RydWN0IGliX3V2ZXJic19kZXN0cm95X2NxICAgICAgY21kOwogCXN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9jcV9yZXNwIHJlc3A7CisJc3RydWN0IGliX3VvYmplY3QJCSp1b2JqOwogCXN0cnVjdCBpYl9jcSAgICAgICAgICAgICAgIAkqY3E7Ci0Jc3RydWN0IGliX3VjcV9vYmplY3QgICAgICAgIAkqdW9iajsKKwlzdHJ1Y3QgaWJfdWNxX29iamVjdCAgICAgICAgCSpvYmo7CiAJc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlCSpldl9maWxlOwotCXU2NAkJCQkgdXNlcl9oYW5kbGU7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgCSByZXQgPSAtRUlOVkFMOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7Ci0KLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCWNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIGNtZC5jcV9oYW5kbGUpOwotCWlmICghY3EgfHwgY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCi0JCWdvdG8gb3V0OwotCi0JdXNlcl9oYW5kbGUgPSBjcS0+dW9iamVjdC0+dXNlcl9oYW5kbGU7Ci0JdW9iaiAgICAgICAgPSBjb250YWluZXJfb2YoY3EtPnVvYmplY3QsIHN0cnVjdCBpYl91Y3Ffb2JqZWN0LCB1b2JqZWN0KTsKLQlldl9maWxlICAgICA9IGNxLT5jcV9jb250ZXh0OworCXVvYmogPSBpZHJfd3JpdGVfdW9iaigmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3EgICAgICA9IHVvYmotPm9iamVjdDsKKwlldl9maWxlID0gY3EtPmNxX2NvbnRleHQ7CisJb2JqICAgICA9IGNvbnRhaW5lcl9vZihjcS0+dW9iamVjdCwgc3RydWN0IGliX3VjcV9vYmplY3QsIHVvYmplY3QpOwogCiAJcmV0ID0gaWJfZGVzdHJveV9jcShjcSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7CisJaWYgKCFyZXQpCisJCXVvYmotPmxpdmUgPSAwOwogCi0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX2NxX2lkciwgY21kLmNxX2hhbmRsZSk7CisJcHV0X3VvYmpfd3JpdGUodW9iaik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfY3FfaWRyLCB1b2JqKTsKIAogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKLQlsaXN0X2RlbCgmdW9iai0+dW9iamVjdC5saXN0KTsKKwlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXRleCk7CiAKLQlpYl91dmVyYnNfcmVsZWFzZV91Y3EoZmlsZSwgZXZfZmlsZSwgdW9iaik7CisJaWJfdXZlcmJzX3JlbGVhc2VfdWNxKGZpbGUsIGV2X2ZpbGUsIG9iaik7CiAKLQlyZXNwLmNvbXBfZXZlbnRzX3JlcG9ydGVkICA9IHVvYmotPmNvbXBfZXZlbnRzX3JlcG9ydGVkOwotCXJlc3AuYXN5bmNfZXZlbnRzX3JlcG9ydGVkID0gdW9iai0+YXN5bmNfZXZlbnRzX3JlcG9ydGVkOworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCXJlc3AuY29tcF9ldmVudHNfcmVwb3J0ZWQgID0gb2JqLT5jb21wX2V2ZW50c19yZXBvcnRlZDsKKwlyZXNwLmFzeW5jX2V2ZW50c19yZXBvcnRlZCA9IG9iai0+YXN5bmNfZXZlbnRzX3JlcG9ydGVkOwogCi0Ja2ZyZWUodW9iaik7CisJcHV0X3VvYmoodW9iaik7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpCi0JCXJldCA9IC1FRkFVTFQ7CisJCXJldHVybiAtRUZBVUxUOwogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47CisJcmV0dXJuIGluX2xlbjsKIH0KIAogc3NpemVfdCBpYl91dmVyYnNfY3JlYXRlX3FwKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKQEAgLTg2NCw3ICsxMDI5LDcgQEAKIAlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcCAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcF9yZXNwIHJlc3A7CiAJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgICAgICB1ZGF0YTsKLQlzdHJ1Y3QgaWJfdXFwX29iamVjdCAgICAgICAgICAgKnVvYmo7CisJc3RydWN0IGliX3VxcF9vYmplY3QgICAgICAgICAgICpvYmo7CiAJc3RydWN0IGliX3BkICAgICAgICAgICAgICAgICAgICpwZDsKIAlzdHJ1Y3QgaWJfY3EgICAgICAgICAgICAgICAgICAgKnNjcSwgKnJjcTsKIAlzdHJ1Y3QgaWJfc3JxICAgICAgICAgICAgICAgICAgKnNycTsKQEAgLTg4MiwyMyArMTA0NywyMSBAQAogCQkgICAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlICsgc2l6ZW9mIHJlc3AsCiAJCSAgIGluX2xlbiAtIHNpemVvZiBjbWQsIG91dF9sZW4gLSBzaXplb2YgcmVzcCk7CiAKLQl1b2JqID0ga21hbGxvYyhzaXplb2YgKnVvYmosIEdGUF9LRVJORUwpOwotCWlmICghdW9iaikKKwlvYmogPSBrbWFsbG9jKHNpemVvZiAqb2JqLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlpbml0X3VvYmooJm9iai0+dWV2ZW50LnVvYmplY3QsIGNtZC51c2VyX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWRvd25fd3JpdGUoJm9iai0+dWV2ZW50LnVvYmplY3QubXV0ZXgpOwogCi0JcGQgID0gaWRyX2ZpbmQoJmliX3V2ZXJic19wZF9pZHIsIGNtZC5wZF9oYW5kbGUpOwotCXNjcSA9IGlkcl9maW5kKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuc2VuZF9jcV9oYW5kbGUpOwotCXJjcSA9IGlkcl9maW5kKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQucmVjdl9jcV9oYW5kbGUpOwotCXNycSA9IGNtZC5pc19zcnEgPyBpZHJfZmluZCgmaWJfdXZlcmJzX3NycV9pZHIsIGNtZC5zcnFfaGFuZGxlKSA6IE5VTEw7CisJcGQgID0gaWRyX3JlYWRfcGQoY21kLnBkX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCXNjcSA9IGlkcl9yZWFkX2NxKGNtZC5zZW5kX2NxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCXJjcSA9IGlkcl9yZWFkX2NxKGNtZC5yZWN2X2NxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCXNycSA9IGNtZC5pc19zcnEgPyBpZHJfcmVhZF9zcnEoY21kLnNycV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KSA6IE5VTEw7CiAKLQlpZiAoIXBkICB8fCBwZC0+dW9iamVjdC0+Y29udGV4dCAgIT0gZmlsZS0+dWNvbnRleHQgfHwKLQkgICAgIXNjcSB8fCBzY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQgfHwKLQkgICAgIXJjcSB8fCByY3EtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQgfHwKLQkgICAgKGNtZC5pc19zcnEgJiYgKCFzcnEgfHwgc3JxLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KSkpIHsKKwlpZiAoIXBkIHx8ICFzY3EgfHwgIXJjcSB8fCAoY21kLmlzX3NycSAmJiAhc3JxKSkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl91cDsKKwkJZ290byBlcnJfcHV0OwogCX0KIAogCWF0dHIuZXZlbnRfaGFuZGxlciA9IGliX3V2ZXJic19xcF9ldmVudF9oYW5kbGVyOwpAQCAtOTE1LDE2ICsxMDc4LDE0IEBACiAJYXR0ci5jYXAubWF4X3JlY3Zfc2dlICAgID0gY21kLm1heF9yZWN2X3NnZTsKIAlhdHRyLmNhcC5tYXhfaW5saW5lX2RhdGEgPSBjbWQubWF4X2lubGluZV9kYXRhOwogCi0JdW9iai0+dWV2ZW50LnVvYmplY3QudXNlcl9oYW5kbGUgPSBjbWQudXNlcl9oYW5kbGU7Ci0JdW9iai0+dWV2ZW50LnVvYmplY3QuY29udGV4dCAgICAgPSBmaWxlLT51Y29udGV4dDsKLQl1b2JqLT51ZXZlbnQuZXZlbnRzX3JlcG9ydGVkICAgICA9IDA7Ci0JSU5JVF9MSVNUX0hFQUQoJnVvYmotPnVldmVudC5ldmVudF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmdW9iai0+bWNhc3RfbGlzdCk7CisJb2JqLT51ZXZlbnQuZXZlbnRzX3JlcG9ydGVkICAgICA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+dWV2ZW50LmV2ZW50X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZvYmotPm1jYXN0X2xpc3QpOwogCiAJcXAgPSBwZC0+ZGV2aWNlLT5jcmVhdGVfcXAocGQsICZhdHRyLCAmdWRhdGEpOwogCWlmIChJU19FUlIocXApKSB7CiAJCXJldCA9IFBUUl9FUlIocXApOwotCQlnb3RvIGVycl91cDsKKwkJZ290byBlcnJfcHV0OwogCX0KIAogCXFwLT5kZXZpY2UgICAgIAkgID0gcGQtPmRldmljZTsKQEAgLTkzMiw3ICsxMDkzLDcgQEAKIAlxcC0+c2VuZF9jcSAgICAJICA9IGF0dHIuc2VuZF9jcTsKIAlxcC0+cmVjdl9jcSAgICAJICA9IGF0dHIucmVjdl9jcTsKIAlxcC0+c3JxCSAgICAgICAJICA9IGF0dHIuc3JxOwotCXFwLT51b2JqZWN0ICAgICAgID0gJnVvYmotPnVldmVudC51b2JqZWN0OworCXFwLT51b2JqZWN0ICAgICAgID0gJm9iai0+dWV2ZW50LnVvYmplY3Q7CiAJcXAtPmV2ZW50X2hhbmRsZXIgPSBhdHRyLmV2ZW50X2hhbmRsZXI7CiAJcXAtPnFwX2NvbnRleHQgICAgPSBhdHRyLnFwX2NvbnRleHQ7CiAJcXAtPnFwX3R5cGUJICA9IGF0dHIucXBfdHlwZTsKQEAgLTk0MiwyMyArMTEwMywxNCBAQAogCWlmIChhdHRyLnNycSkKIAkJYXRvbWljX2luYygmYXR0ci5zcnEtPnVzZWNudCk7CiAKLQltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKLQlyZXNwLnFwbiA9IHFwLT5xcF9udW07Ci0KLXJldHJ5OgotCWlmICghaWRyX3ByZV9nZXQoJmliX3V2ZXJic19xcF9pZHIsIEdGUF9LRVJORUwpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2Rlc3Ryb3k7Ci0JfQotCi0JcmV0ID0gaWRyX2dldF9uZXcoJmliX3V2ZXJic19xcF9pZHIsIHFwLCAmdW9iai0+dWV2ZW50LnVvYmplY3QuaWQpOwotCi0JaWYgKHJldCA9PSAtRUFHQUlOKQotCQlnb3RvIHJldHJ5OworCW9iai0+dWV2ZW50LnVvYmplY3Qub2JqZWN0ID0gcXA7CisJcmV0ID0gaWRyX2FkZF91b2JqKCZpYl91dmVyYnNfcXBfaWRyLCAmb2JqLT51ZXZlbnQudW9iamVjdCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGVzdHJveTsKIAotCXJlc3AucXBfaGFuZGxlICAgICAgID0gdW9iai0+dWV2ZW50LnVvYmplY3QuaWQ7CisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisJcmVzcC5xcG4gICAgICAgICAgICAgPSBxcC0+cXBfbnVtOworCXJlc3AucXBfaGFuZGxlICAgICAgID0gb2JqLT51ZXZlbnQudW9iamVjdC5pZDsKIAlyZXNwLm1heF9yZWN2X3NnZSAgICA9IGF0dHIuY2FwLm1heF9yZWN2X3NnZTsKIAlyZXNwLm1heF9zZW5kX3NnZSAgICA9IGF0dHIuY2FwLm1heF9zZW5kX3NnZTsKIAlyZXNwLm1heF9yZWN2X3dyICAgICA9IGF0dHIuY2FwLm1heF9yZWN2X3dyOwpAQCAtOTY4LDMyICsxMTIwLDQyIEBACiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CiAJCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX2lkcjsKKwkJZ290byBlcnJfY29weTsKIAl9CiAKKwlwdXRfcGRfcmVhZChwZCk7CisJcHV0X2NxX3JlYWQoc2NxKTsKKwlwdXRfY3FfcmVhZChyY3EpOworCWlmIChzcnEpCisJCXB1dF9zcnFfcmVhZChzcnEpOworCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwotCWxpc3RfYWRkX3RhaWwoJnVvYmotPnVldmVudC51b2JqZWN0Lmxpc3QsICZmaWxlLT51Y29udGV4dC0+cXBfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmb2JqLT51ZXZlbnQudW9iamVjdC5saXN0LCAmZmlsZS0+dWNvbnRleHQtPnFwX2xpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlvYmotPnVldmVudC51b2JqZWN0LmxpdmUgPSAxOworCisJdXBfd3JpdGUoJm9iai0+dWV2ZW50LnVvYmplY3QubXV0ZXgpOwogCiAJcmV0dXJuIGluX2xlbjsKIAotZXJyX2lkcjoKLQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfcXBfaWRyLCB1b2JqLT51ZXZlbnQudW9iamVjdC5pZCk7CitlcnJfY29weToKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19xcF9pZHIsICZvYmotPnVldmVudC51b2JqZWN0KTsKIAogZXJyX2Rlc3Ryb3k6CiAJaWJfZGVzdHJveV9xcChxcCk7Ci0JYXRvbWljX2RlYygmcGQtPnVzZWNudCk7Ci0JYXRvbWljX2RlYygmYXR0ci5zZW5kX2NxLT51c2VjbnQpOwotCWF0b21pY19kZWMoJmF0dHIucmVjdl9jcS0+dXNlY250KTsKLQlpZiAoYXR0ci5zcnEpCi0JCWF0b21pY19kZWMoJmF0dHIuc3JxLT51c2VjbnQpOwogCi1lcnJfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKK2Vycl9wdXQ6CisJaWYgKHBkKQorCQlwdXRfcGRfcmVhZChwZCk7CisJaWYgKHNjcSkKKwkJcHV0X2NxX3JlYWQoc2NxKTsKKwlpZiAocmNxKQorCQlwdXRfY3FfcmVhZChyY3EpOworCWlmIChzcnEpCisJCXB1dF9zcnFfcmVhZChzcnEpOwogCi0Ja2ZyZWUodW9iaik7CisJcHV0X3VvYmpfd3JpdGUoJm9iai0+dWV2ZW50LnVvYmplY3QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMTgsMTUgKzExODAsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLQlxcCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcXBfaWRyLCBjbWQucXBfaGFuZGxlKTsKLQlpZiAocXAgJiYgcXAtPnVvYmplY3QtPmNvbnRleHQgPT0gZmlsZS0+dWNvbnRleHQpCi0JCXJldCA9IGliX3F1ZXJ5X3FwKHFwLCBhdHRyLCBjbWQuYXR0cl9tYXNrLCBpbml0X2F0dHIpOwotCWVsc2UKKwlxcCA9IGlkcl9yZWFkX3FwKGNtZC5xcF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXFwKSB7CiAJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJcmV0ID0gaWJfcXVlcnlfcXAocXAsIGF0dHIsIGNtZC5hdHRyX21hc2ssIGluaXRfYXR0cik7CisKKwlwdXRfcXBfcmVhZChxcCk7CiAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTExMTMsMTAgKzEyNzUsOCBAQAogCWlmICghYXR0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOwotCWlmICghcXAgfHwgcXAtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpIHsKKwlxcCA9IGlkcl9yZWFkX3FwKGNtZC5xcF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXFwKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExNjgsMTMgKzEzMjgsMTUgQEAKIAlhdHRyLT5hbHRfYWhfYXR0ci5wb3J0X251bSAJICAgID0gY21kLmFsdF9kZXN0LnBvcnRfbnVtOwogCiAJcmV0ID0gaWJfbW9kaWZ5X3FwKHFwLCBhdHRyLCBjbWQuYXR0cl9tYXNrKTsKKworCXB1dF9xcF9yZWFkKHFwKTsKKwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gaW5fbGVuOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKIAlrZnJlZShhdHRyKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMTg2LDggKzEzNDgsOSBAQAogewogCXN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9xcCAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfcXBfcmVzcCByZXNwOworCXN0cnVjdCBpYl91b2JqZWN0CQkqdW9iajsKIAlzdHJ1Y3QgaWJfcXAgICAgICAgICAgICAgICAJKnFwOwotCXN0cnVjdCBpYl91cXBfb2JqZWN0ICAgICAgICAJKnVvYmo7CisJc3RydWN0IGliX3VxcF9vYmplY3QgICAgICAgIAkqb2JqOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIAkgcmV0ID0gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQpAQCAtMTE5NSw0MyArMTM1OCw0MyBAQAogCiAJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwl1b2JqID0gaWRyX3dyaXRlX3VvYmooJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXVvYmopCisJCXJldHVybiAtRUlOVkFMOworCXFwICA9IHVvYmotPm9iamVjdDsKKwlvYmogPSBjb250YWluZXJfb2YodW9iaiwgc3RydWN0IGliX3VxcF9vYmplY3QsIHVldmVudC51b2JqZWN0KTsKIAotCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOwotCWlmICghcXAgfHwgcXAtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCi0JCWdvdG8gb3V0OwotCi0JdW9iaiA9IGNvbnRhaW5lcl9vZihxcC0+dW9iamVjdCwgc3RydWN0IGliX3VxcF9vYmplY3QsIHVldmVudC51b2JqZWN0KTsKLQotCWlmICghbGlzdF9lbXB0eSgmdW9iai0+bWNhc3RfbGlzdCkpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKKwlpZiAoIWxpc3RfZW1wdHkoJm9iai0+bWNhc3RfbGlzdCkpIHsKKwkJcHV0X3VvYmpfd3JpdGUodW9iaik7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcmV0ID0gaWJfZGVzdHJveV9xcChxcCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7CisJaWYgKCFyZXQpCisJCXVvYmotPmxpdmUgPSAwOwogCi0JaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7CisJcHV0X3VvYmpfd3JpdGUodW9iaik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfcXBfaWRyLCB1b2JqKTsKIAogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKLQlsaXN0X2RlbCgmdW9iai0+dWV2ZW50LnVvYmplY3QubGlzdCk7CisJbGlzdF9kZWwoJnVvYmotPmxpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0JaWJfdXZlcmJzX3JlbGVhc2VfdWV2ZW50KGZpbGUsICZ1b2JqLT51ZXZlbnQpOworCWliX3V2ZXJic19yZWxlYXNlX3VldmVudChmaWxlLCAmb2JqLT51ZXZlbnQpOwogCi0JcmVzcC5ldmVudHNfcmVwb3J0ZWQgPSB1b2JqLT51ZXZlbnQuZXZlbnRzX3JlcG9ydGVkOworCXJlc3AuZXZlbnRzX3JlcG9ydGVkID0gb2JqLT51ZXZlbnQuZXZlbnRzX3JlcG9ydGVkOwogCi0Ja2ZyZWUodW9iaik7CisJcHV0X3VvYmoodW9iaik7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpCi0JCXJldCA9IC1FRkFVTFQ7CisJCXJldHVybiAtRUZBVUxUOwogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47CisJcmV0dXJuIGluX2xlbjsKIH0KIAogc3NpemVfdCBpYl91dmVyYnNfcG9zdF9zZW5kKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKQEAgLTEyNDQsNiArMTQwNyw3IEBACiAJc3RydWN0IGliX3NlbmRfd3IgICAgICAgICAgICAgICp3ciA9IE5VTEwsICpsYXN0LCAqbmV4dCwgKmJhZF93cjsKIAlzdHJ1Y3QgaWJfcXAgICAgICAgICAgICAgICAgICAgKnFwOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgc2dfaW5kOworCWludAkJCQlpc191ZDsKIAlzc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKQEAgLTEyNjAsMTIgKzE0MjQsMTEgQEAKIAlpZiAoIXVzZXJfd3IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLQlxcCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcXBfaWRyLCBjbWQucXBfaGFuZGxlKTsKLQlpZiAoIXFwIHx8IHFwLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KQorCXFwID0gaWRyX3JlYWRfcXAoY21kLnFwX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcXApCiAJCWdvdG8gb3V0OwogCisJaXNfdWQgPSBxcC0+cXBfdHlwZSA9PSBJQl9RUFRfVUQ7CiAJc2dfaW5kID0gMDsKIAlsYXN0ID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgY21kLndyX2NvdW50OyArK2kpIHsKQEAgLTEyNzMsMTIgKzE0MzYsMTIgQEAKIAkJCQkgICBidWYgKyBzaXplb2YgY21kICsgaSAqIGNtZC53cWVfc2l6ZSwKIAkJCQkgICBjbWQud3FlX3NpemUpKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9wdXQ7CiAJCX0KIAogCQlpZiAodXNlcl93ci0+bnVtX3NnZSArIHNnX2luZCA+IGNtZC5zZ2VfY291bnQpIHsKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3B1dDsKIAkJfQogCiAJCW5leHQgPSBrbWFsbG9jKEFMSUdOKHNpemVvZiAqbmV4dCwgc2l6ZW9mIChzdHJ1Y3QgaWJfc2dlKSkgKwpAQCAtMTI4Niw3ICsxNDQ5LDcgQEAKIAkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFuZXh0KSB7CiAJCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9wdXQ7CiAJCX0KIAogCQlpZiAoIWxhc3QpCkBAIC0xMzAyLDEyICsxNDY1LDEyIEBACiAJCW5leHQtPnNlbmRfZmxhZ3MgPSB1c2VyX3dyLT5zZW5kX2ZsYWdzOwogCQluZXh0LT5pbW1fZGF0YSAgID0gKF9fYmUzMiBfX2ZvcmNlKSB1c2VyX3dyLT5pbW1fZGF0YTsKIAotCQlpZiAocXAtPnFwX3R5cGUgPT0gSUJfUVBUX1VEKSB7Ci0JCQluZXh0LT53ci51ZC5haCA9IGlkcl9maW5kKCZpYl91dmVyYnNfYWhfaWRyLAotCQkJCQkJICB1c2VyX3dyLT53ci51ZC5haCk7CisJCWlmIChpc191ZCkgeworCQkJbmV4dC0+d3IudWQuYWggPSBpZHJfcmVhZF9haCh1c2VyX3dyLT53ci51ZC5haCwKKwkJCQkJCSAgICAgZmlsZS0+dWNvbnRleHQpOwogCQkJaWYgKCFuZXh0LT53ci51ZC5haCkgewogCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7CisJCQkJZ290byBvdXRfcHV0OwogCQkJfQogCQkJbmV4dC0+d3IudWQucmVtb3RlX3FwbiAgPSB1c2VyX3dyLT53ci51ZC5yZW1vdGVfcXBuOwogCQkJbmV4dC0+d3IudWQucmVtb3RlX3FrZXkgPSB1c2VyX3dyLT53ci51ZC5yZW1vdGVfcWtleTsKQEAgLTEzNDQsNyArMTUwNyw3IEBACiAJCQkJCSAgIHNnX2luZCAqIHNpemVvZiAoc3RydWN0IGliX3NnZSksCiAJCQkJCSAgIG5leHQtPm51bV9zZ2UgKiBzaXplb2YgKHN0cnVjdCBpYl9zZ2UpKSkgewogCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJZ290byBvdXQ7CisJCQkJZ290byBvdXRfcHV0OwogCQkJfQogCQkJc2dfaW5kICs9IG5leHQtPm51bV9zZ2U7CiAJCX0gZWxzZQpAQCAtMTM2NCwxMCArMTUyNywxMyBAQAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpCiAJCXJldCA9IC1FRkFVTFQ7CiAKLW91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworb3V0X3B1dDoKKwlwdXRfcXBfcmVhZChxcCk7CiAKK291dDoKIAl3aGlsZSAod3IpIHsKKwkJaWYgKGlzX3VkICYmIHdyLT53ci51ZC5haCkKKwkJCXB1dF9haF9yZWFkKHdyLT53ci51ZC5haCk7CiAJCW5leHQgPSB3ci0+bmV4dDsKIAkJa2ZyZWUod3IpOwogCQl3ciA9IG5leHQ7CkBAIC0xNDgyLDE0ICsxNjQ4LDE1IEBACiAJaWYgKElTX0VSUih3cikpCiAJCXJldHVybiBQVFJfRVJSKHdyKTsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JcXAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3FwX2lkciwgY21kLnFwX2hhbmRsZSk7Ci0JaWYgKCFxcCB8fCBxcC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKKwlxcCA9IGlkcl9yZWFkX3FwKGNtZC5xcF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXFwKQogCQlnb3RvIG91dDsKIAogCXJlc3AuYmFkX3dyID0gMDsKIAlyZXQgPSBxcC0+ZGV2aWNlLT5wb3N0X3JlY3YocXAsIHdyLCAmYmFkX3dyKTsKKworCXB1dF9xcF9yZWFkKHFwKTsKKwogCWlmIChyZXQpCiAJCWZvciAobmV4dCA9IHdyOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkgewogCQkJKytyZXNwLmJhZF93cjsKQEAgLTE1MDMsOCArMTY3MCw2IEBACiAJCXJldCA9IC1FRkFVTFQ7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCiAJd2hpbGUgKHdyKSB7CiAJCW5leHQgPSB3ci0+bmV4dDsKIAkJa2ZyZWUod3IpOwpAQCAtMTUzMywxNCArMTY5OCwxNSBAQAogCWlmIChJU19FUlIod3IpKQogCQlyZXR1cm4gUFRSX0VSUih3cik7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXNycSA9IGlkcl9maW5kKCZpYl91dmVyYnNfc3JxX2lkciwgY21kLnNycV9oYW5kbGUpOwotCWlmICghc3JxIHx8IHNycS0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkKKwlzcnEgPSBpZHJfcmVhZF9zcnEoY21kLnNycV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXNycSkKIAkJZ290byBvdXQ7CiAKIAlyZXNwLmJhZF93ciA9IDA7CiAJcmV0ID0gc3JxLT5kZXZpY2UtPnBvc3Rfc3JxX3JlY3Yoc3JxLCB3ciwgJmJhZF93cik7CisKKwlwdXRfc3JxX3JlYWQoc3JxKTsKKwogCWlmIChyZXQpCiAJCWZvciAobmV4dCA9IHdyOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkgewogCQkJKytyZXNwLmJhZF93cjsKQEAgLTE1NTQsOCArMTcyMCw2IEBACiAJCXJldCA9IC1FRkFVTFQ7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCiAJd2hpbGUgKHdyKSB7CiAJCW5leHQgPSB3ci0+bmV4dDsKIAkJa2ZyZWUod3IpOwpAQCAtMTU4NywxNyArMTc1MSwxNSBAQAogCWlmICghdW9iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlpbml0X3VvYmoodW9iaiwgY21kLnVzZXJfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJZG93bl93cml0ZSgmdW9iai0+bXV0ZXgpOwogCi0JcGQgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7Ci0JaWYgKCFwZCB8fCBwZC0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkgeworCXBkID0gaWRyX3JlYWRfcGQoY21kLnBkX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcGQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfdXA7CisJCWdvdG8gZXJyOwogCX0KIAotCXVvYmotPnVzZXJfaGFuZGxlID0gY21kLnVzZXJfaGFuZGxlOwotCXVvYmotPmNvbnRleHQgICAgID0gZmlsZS0+dWNvbnRleHQ7Ci0KIAlhdHRyLmRsaWQgCSAgICAgICA9IGNtZC5hdHRyLmRsaWQ7CiAJYXR0ci5zbCAJICAgICAgID0gY21kLmF0dHIuc2w7CiAJYXR0ci5zcmNfcGF0aF9iaXRzICAgICA9IGNtZC5hdHRyLnNyY19wYXRoX2JpdHM7CkBAIC0xNjEzLDIxICsxNzc1LDEzIEBACiAJYWggPSBpYl9jcmVhdGVfYWgocGQsICZhdHRyKTsKIAlpZiAoSVNfRVJSKGFoKSkgewogCQlyZXQgPSBQVFJfRVJSKGFoKTsKLQkJZ290byBlcnJfdXA7CisJCWdvdG8gZXJyOwogCX0KIAotCWFoLT51b2JqZWN0ID0gdW9iajsKKwlhaC0+dW9iamVjdCAgPSB1b2JqOworCXVvYmotPm9iamVjdCA9IGFoOwogCi1yZXRyeToKLQlpZiAoIWlkcl9wcmVfZ2V0KCZpYl91dmVyYnNfYWhfaWRyLCBHRlBfS0VSTkVMKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9kZXN0cm95OwotCX0KLQotCXJldCA9IGlkcl9nZXRfbmV3KCZpYl91dmVyYnNfYWhfaWRyLCBhaCwgJnVvYmotPmlkKTsKLQotCWlmIChyZXQgPT0gLUVBR0FJTikKLQkJZ290byByZXRyeTsKKwlyZXQgPSBpZHJfYWRkX3VvYmooJmliX3V2ZXJic19haF9pZHIsIHVvYmopOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Rlc3Ryb3k7CiAKQEAgLTE2MzYsMjcgKzE3OTAsMjkgQEAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBlcnJfaWRyOworCQlnb3RvIGVycl9jb3B5OwogCX0KIAorCXB1dF9wZF9yZWFkKHBkKTsKKwogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZ1b2JqLT5saXN0LCAmZmlsZS0+dWNvbnRleHQtPmFoX2xpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwl1b2JqLT5saXZlID0gMTsKKworCXVwX3dyaXRlKCZ1b2JqLT5tdXRleCk7CiAKIAlyZXR1cm4gaW5fbGVuOwogCi1lcnJfaWRyOgotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19haF9pZHIsIHVvYmotPmlkKTsKK2Vycl9jb3B5OgorCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX2FoX2lkciwgdW9iaik7CiAKIGVycl9kZXN0cm95OgogCWliX2Rlc3Ryb3lfYWgoYWgpOwogCi1lcnJfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCWtmcmVlKHVvYmopOworZXJyOgorCXB1dF91b2JqX3dyaXRlKHVvYmopOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE2NjYsMzUgKzE4MjIsMzQgQEAKIAlzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfYWggY21kOwogCXN0cnVjdCBpYl9haAkJICAgKmFoOwogCXN0cnVjdCBpYl91b2JqZWN0CSAgICp1b2JqOwotCWludAkJCSAgICByZXQgPSAtRUlOVkFMOworCWludAkJCSAgICByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCWFoID0gaWRyX2ZpbmQoJmliX3V2ZXJic19haF9pZHIsIGNtZC5haF9oYW5kbGUpOwotCWlmICghYWggfHwgYWgtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCi0JCWdvdG8gb3V0OwotCi0JdW9iaiA9IGFoLT51b2JqZWN0OworCXVvYmogPSBpZHJfd3JpdGVfdW9iaigmaWJfdXZlcmJzX2FoX2lkciwgY21kLmFoX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FSU5WQUw7CisJYWggPSB1b2JqLT5vYmplY3Q7CiAKIAlyZXQgPSBpYl9kZXN0cm95X2FoKGFoKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKKwlpZiAoIXJldCkKKwkJdW9iai0+bGl2ZSA9IDA7CiAKLQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfYWhfaWRyLCBjbWQuYWhfaGFuZGxlKTsKKwlwdXRfdW9ial93cml0ZSh1b2JqKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19haF9pZHIsIHVvYmopOwogCiAJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwogCWxpc3RfZGVsKCZ1b2JqLT5saXN0KTsKIAltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIAotCWtmcmVlKHVvYmopOworCXB1dF91b2JqKHVvYmopOwogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47CisJcmV0dXJuIGluX2xlbjsKIH0KIAogc3NpemVfdCBpYl91dmVyYnNfYXR0YWNoX21jYXN0KHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKQEAgLTE3MDMsNDcgKzE4NTgsNDMgQEAKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2F0dGFjaF9tY2FzdCBjbWQ7CiAJc3RydWN0IGliX3FwICAgICAgICAgICAgICAgICAqcXA7Ci0Jc3RydWN0IGliX3VxcF9vYmplY3QgICAgICAgICAqdW9iajsKKwlzdHJ1Y3QgaWJfdXFwX29iamVjdCAgICAgICAgICpvYmo7CiAJc3RydWN0IGliX3V2ZXJic19tY2FzdF9lbnRyeSAqbWNhc3Q7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlxcCA9IGlkcl9yZWFkX3FwKGNtZC5xcF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXFwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOwotCWlmICghcXAgfHwgcXAtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCi0JCWdvdG8gb3V0OworCW9iaiA9IGNvbnRhaW5lcl9vZihxcC0+dW9iamVjdCwgc3RydWN0IGliX3VxcF9vYmplY3QsIHVldmVudC51b2JqZWN0KTsKIAotCXVvYmogPSBjb250YWluZXJfb2YocXAtPnVvYmplY3QsIHN0cnVjdCBpYl91cXBfb2JqZWN0LCB1ZXZlbnQudW9iamVjdCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmdW9iai0+bWNhc3RfbGlzdCwgbGlzdCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmb2JqLT5tY2FzdF9saXN0LCBsaXN0KQogCQlpZiAoY21kLm1saWQgPT0gbWNhc3QtPmxpZCAmJgogCQkgICAgIW1lbWNtcChjbWQuZ2lkLCBtY2FzdC0+Z2lkLnJhdywgc2l6ZW9mIG1jYXN0LT5naWQucmF3KSkgewogCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfcHV0OwogCQl9CiAKIAltY2FzdCA9IGttYWxsb2Moc2l6ZW9mICptY2FzdCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtY2FzdCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcHV0OwogCX0KIAogCW1jYXN0LT5saWQgPSBjbWQubWxpZDsKIAltZW1jcHkobWNhc3QtPmdpZC5yYXcsIGNtZC5naWQsIHNpemVvZiBtY2FzdC0+Z2lkLnJhdyk7CiAKIAlyZXQgPSBpYl9hdHRhY2hfbWNhc3QocXAsICZtY2FzdC0+Z2lkLCBjbWQubWxpZCk7Ci0JaWYgKCFyZXQpIHsKLQkJdW9iaiA9IGNvbnRhaW5lcl9vZihxcC0+dW9iamVjdCwgc3RydWN0IGliX3VxcF9vYmplY3QsCi0JCQkJICAgIHVldmVudC51b2JqZWN0KTsKLQkJbGlzdF9hZGRfdGFpbCgmbWNhc3QtPmxpc3QsICZ1b2JqLT5tY2FzdF9saXN0KTsKLQl9IGVsc2UKKwlpZiAoIXJldCkKKwkJbGlzdF9hZGRfdGFpbCgmbWNhc3QtPmxpc3QsICZvYmotPm1jYXN0X2xpc3QpOworCWVsc2UKIAkJa2ZyZWUobWNhc3QpOwogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKK291dF9wdXQ6CisJcHV0X3FwX3JlYWQocXApOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKIH0KQEAgLTE3NTMsNyArMTkwNCw3IEBACiAJCQkgICAgICAgaW50IG91dF9sZW4pCiB7CiAJc3RydWN0IGliX3V2ZXJic19kZXRhY2hfbWNhc3QgY21kOwotCXN0cnVjdCBpYl91cXBfb2JqZWN0ICAgICAgICAgKnVvYmo7CisJc3RydWN0IGliX3VxcF9vYmplY3QgICAgICAgICAqb2JqOwogCXN0cnVjdCBpYl9xcCAgICAgICAgICAgICAgICAgKnFwOwogCXN0cnVjdCBpYl91dmVyYnNfbWNhc3RfZW50cnkgKm1jYXN0OwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CkBAIC0xNzYxLDE5ICsxOTEyLDE3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KLQlxcCA9IGlkcl9maW5kKCZpYl91dmVyYnNfcXBfaWRyLCBjbWQucXBfaGFuZGxlKTsKLQlpZiAoIXFwIHx8IHFwLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KQotCQlnb3RvIG91dDsKKwlxcCA9IGlkcl9yZWFkX3FwKGNtZC5xcF9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXFwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IGliX2RldGFjaF9tY2FzdChxcCwgKHVuaW9uIGliX2dpZCAqKSBjbWQuZ2lkLCBjbWQubWxpZCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3B1dDsKIAotCXVvYmogPSBjb250YWluZXJfb2YocXAtPnVvYmplY3QsIHN0cnVjdCBpYl91cXBfb2JqZWN0LCB1ZXZlbnQudW9iamVjdCk7CisJb2JqID0gY29udGFpbmVyX29mKHFwLT51b2JqZWN0LCBzdHJ1Y3QgaWJfdXFwX29iamVjdCwgdWV2ZW50LnVvYmplY3QpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtY2FzdCwgJnVvYmotPm1jYXN0X2xpc3QsIGxpc3QpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtY2FzdCwgJm9iai0+bWNhc3RfbGlzdCwgbGlzdCkKIAkJaWYgKGNtZC5tbGlkID09IG1jYXN0LT5saWQgJiYKIAkJICAgICFtZW1jbXAoY21kLmdpZCwgbWNhc3QtPmdpZC5yYXcsIHNpemVvZiBtY2FzdC0+Z2lkLnJhdykpIHsKIAkJCWxpc3RfZGVsKCZtY2FzdC0+bGlzdCk7CkBAIC0xNzgxLDggKzE5MzAsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAotb3V0OgotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CitvdXRfcHV0OgorCXB1dF9xcF9yZWFkKHFwKTsKIAogCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47CiB9CkBAIC0xNzk0LDcgKzE5NDMsNyBAQAogCXN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3NycSAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9zcnFfcmVzcCByZXNwOwogCXN0cnVjdCBpYl91ZGF0YSAgICAgICAgICAgICAgICAgIHVkYXRhOwotCXN0cnVjdCBpYl91ZXZlbnRfb2JqZWN0ICAgICAgICAgKnVvYmo7CisJc3RydWN0IGliX3VldmVudF9vYmplY3QgICAgICAgICAqb2JqOwogCXN0cnVjdCBpYl9wZCAgICAgICAgICAgICAgICAgICAgKnBkOwogCXN0cnVjdCBpYl9zcnEgICAgICAgICAgICAgICAgICAgKnNycTsKIAlzdHJ1Y3QgaWJfc3JxX2luaXRfYXR0ciAgICAgICAgICBhdHRyOwpAQCAtMTgxMCwxNyArMTk1OSwxNyBAQAogCQkgICAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlICsgc2l6ZW9mIHJlc3AsCiAJCSAgIGluX2xlbiAtIHNpemVvZiBjbWQsIG91dF9sZW4gLSBzaXplb2YgcmVzcCk7CiAKLQl1b2JqID0ga21hbGxvYyhzaXplb2YgKnVvYmosIEdGUF9LRVJORUwpOwotCWlmICghdW9iaikKKwlvYmogPSBrbWFsbG9jKHNpemVvZiAqb2JqLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlpbml0X3VvYmooJm9iai0+dW9iamVjdCwgMCwgZmlsZS0+dWNvbnRleHQpOworCWRvd25fd3JpdGUoJm9iai0+dW9iamVjdC5tdXRleCk7CiAKLQlwZCAgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3BkX2lkciwgY21kLnBkX2hhbmRsZSk7Ci0KLQlpZiAoIXBkIHx8IHBkLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0KSB7CisJcGQgID0gaWRyX3JlYWRfcGQoY21kLnBkX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghcGQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfdXA7CisJCWdvdG8gZXJyOwogCX0KIAogCWF0dHIuZXZlbnRfaGFuZGxlciAgPSBpYl91dmVyYnNfc3JxX2V2ZW50X2hhbmRsZXI7CkBAIC0xODI5LDY5ICsxOTc4LDU5IEBACiAJYXR0ci5hdHRyLm1heF9zZ2UgICA9IGNtZC5tYXhfc2dlOwogCWF0dHIuYXR0ci5zcnFfbGltaXQgPSBjbWQuc3JxX2xpbWl0OwogCi0JdW9iai0+dW9iamVjdC51c2VyX2hhbmRsZSA9IGNtZC51c2VyX2hhbmRsZTsKLQl1b2JqLT51b2JqZWN0LmNvbnRleHQgICAgID0gZmlsZS0+dWNvbnRleHQ7Ci0JdW9iai0+ZXZlbnRzX3JlcG9ydGVkICAgICA9IDA7Ci0JSU5JVF9MSVNUX0hFQUQoJnVvYmotPmV2ZW50X2xpc3QpOworCW9iai0+ZXZlbnRzX3JlcG9ydGVkICAgICA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+ZXZlbnRfbGlzdCk7CiAKIAlzcnEgPSBwZC0+ZGV2aWNlLT5jcmVhdGVfc3JxKHBkLCAmYXR0ciwgJnVkYXRhKTsKIAlpZiAoSVNfRVJSKHNycSkpIHsKIAkJcmV0ID0gUFRSX0VSUihzcnEpOwotCQlnb3RvIGVycl91cDsKKwkJZ290byBlcnI7CiAJfQogCiAJc3JxLT5kZXZpY2UgICAgCSAgID0gcGQtPmRldmljZTsKIAlzcnEtPnBkICAgICAgICAJICAgPSBwZDsKLQlzcnEtPnVvYmplY3QgICAgICAgPSAmdW9iai0+dW9iamVjdDsKKwlzcnEtPnVvYmplY3QgICAgICAgPSAmb2JqLT51b2JqZWN0OwogCXNycS0+ZXZlbnRfaGFuZGxlciA9IGF0dHIuZXZlbnRfaGFuZGxlcjsKIAlzcnEtPnNycV9jb250ZXh0ICAgPSBhdHRyLnNycV9jb250ZXh0OwogCWF0b21pY19pbmMoJnBkLT51c2VjbnQpOwogCWF0b21pY19zZXQoJnNycS0+dXNlY250LCAwKTsKIAotCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOwotCi1yZXRyeToKLQlpZiAoIWlkcl9wcmVfZ2V0KCZpYl91dmVyYnNfc3JxX2lkciwgR0ZQX0tFUk5FTCkpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfZGVzdHJveTsKLQl9Ci0KLQlyZXQgPSBpZHJfZ2V0X25ldygmaWJfdXZlcmJzX3NycV9pZHIsIHNycSwgJnVvYmotPnVvYmplY3QuaWQpOwotCi0JaWYgKHJldCA9PSAtRUFHQUlOKQotCQlnb3RvIHJldHJ5OworCW9iai0+dW9iamVjdC5vYmplY3QgPSBzcnE7CisJcmV0ID0gaWRyX2FkZF91b2JqKCZpYl91dmVyYnNfc3JxX2lkciwgJm9iai0+dW9iamVjdCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGVzdHJveTsKIAotCXJlc3Auc3JxX2hhbmRsZSA9IHVvYmotPnVvYmplY3QuaWQ7CisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisJcmVzcC5zcnFfaGFuZGxlID0gb2JqLT51b2JqZWN0LmlkOwogCXJlc3AubWF4X3dyICAgICA9IGF0dHIuYXR0ci5tYXhfd3I7CiAJcmVzcC5tYXhfc2dlICAgID0gYXR0ci5hdHRyLm1heF9zZ2U7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBlcnJfaWRyOworCQlnb3RvIGVycl9jb3B5OwogCX0KIAorCXB1dF9wZF9yZWFkKHBkKTsKKwogCW11dGV4X2xvY2soJmZpbGUtPm11dGV4KTsKLQlsaXN0X2FkZF90YWlsKCZ1b2JqLT51b2JqZWN0Lmxpc3QsICZmaWxlLT51Y29udGV4dC0+c3JxX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJm9iai0+dW9iamVjdC5saXN0LCAmZmlsZS0+dWNvbnRleHQtPnNycV9saXN0KTsKIAltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIAotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisJb2JqLT51b2JqZWN0LmxpdmUgPSAxOworCisJdXBfd3JpdGUoJm9iai0+dW9iamVjdC5tdXRleCk7CiAKIAlyZXR1cm4gaW5fbGVuOwogCi1lcnJfaWRyOgotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19zcnFfaWRyLCB1b2JqLT51b2JqZWN0LmlkKTsKK2Vycl9jb3B5OgorCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX3NycV9pZHIsICZvYmotPnVvYmplY3QpOwogCiBlcnJfZGVzdHJveToKIAlpYl9kZXN0cm95X3NycShzcnEpOwotCWF0b21pY19kZWMoJnBkLT51c2VjbnQpOwogCi1lcnJfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCWtmcmVlKHVvYmopOworZXJyOgorCXB1dF91b2JqX3dyaXRlKCZvYmotPnVvYmplY3QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5MDcsMjEgKzIwNDYsMTYgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQotCXNycSA9IGlkcl9maW5kKCZpYl91dmVyYnNfc3JxX2lkciwgY21kLnNycV9oYW5kbGUpOwotCWlmICghc3JxIHx8IHNycS0+dW9iamVjdC0+Y29udGV4dCAhPSBmaWxlLT51Y29udGV4dCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9CisJc3JxID0gaWRyX3JlYWRfc3JxKGNtZC5zcnFfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CisJaWYgKCFzcnEpCisJCXJldHVybiAtRUlOVkFMOwogCiAJYXR0ci5tYXhfd3IgICAgPSBjbWQubWF4X3dyOwogCWF0dHIuc3JxX2xpbWl0ID0gY21kLnNycV9saW1pdDsKIAogCXJldCA9IGliX21vZGlmeV9zcnEoc3JxLCAmYXR0ciwgY21kLmF0dHJfbWFzayk7CiAKLW91dDoKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXB1dF9zcnFfcmVhZChzcnEpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKIH0KQEAgLTE5NDIsMTggKzIwNzYsMTYgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKwlzcnEgPSBpZHJfcmVhZF9zcnEoY21kLnNycV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwlpZiAoIXNycSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcnEgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3NycV9pZHIsIGNtZC5zcnFfaGFuZGxlKTsKLQlpZiAoc3JxICYmIHNycS0+dW9iamVjdC0+Y29udGV4dCA9PSBmaWxlLT51Y29udGV4dCkKLQkJcmV0ID0gaWJfcXVlcnlfc3JxKHNycSwgJmF0dHIpOwotCWVsc2UKLQkJcmV0ID0gLUVJTlZBTDsKKwlyZXQgPSBpYl9xdWVyeV9zcnEoc3JxLCAmYXR0cik7CiAKLQltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCXB1dF9zcnFfcmVhZChzcnEpOwogCiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCXJldHVybiByZXQ7CiAKIAltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKIApAQCAtMTk2MywxMCArMjA5NSw5IEBACiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpCi0JCXJldCA9IC1FRkFVTFQ7CisJCXJldHVybiAtRUZBVUxUOwogCi1vdXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGluX2xlbjsKKwlyZXR1cm4gaW5fbGVuOwogfQogCiBzc2l6ZV90IGliX3V2ZXJic19kZXN0cm95X3NycShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCkBAIC0xOTc1LDQ1ICsyMTA2LDQ1IEBACiB7CiAJc3RydWN0IGliX3V2ZXJic19kZXN0cm95X3NycSAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxX3Jlc3AgcmVzcDsKKwlzdHJ1Y3QgaWJfdW9iamVjdAkJICp1b2JqOwogCXN0cnVjdCBpYl9zcnEgICAgICAgICAgICAgICAJICpzcnE7Ci0Jc3RydWN0IGliX3VldmVudF9vYmplY3QgICAgICAgIAkgKnVvYmo7CisJc3RydWN0IGliX3VldmVudF9vYmplY3QgICAgICAgIAkgKm9iajsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgCSAgcmV0ID0gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCi0JbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7Ci0KLQlzcnEgPSBpZHJfZmluZCgmaWJfdXZlcmJzX3NycV9pZHIsIGNtZC5zcnFfaGFuZGxlKTsKLQlpZiAoIXNycSB8fCBzcnEtPnVvYmplY3QtPmNvbnRleHQgIT0gZmlsZS0+dWNvbnRleHQpCi0JCWdvdG8gb3V0OwotCi0JdW9iaiA9IGNvbnRhaW5lcl9vZihzcnEtPnVvYmplY3QsIHN0cnVjdCBpYl91ZXZlbnRfb2JqZWN0LCB1b2JqZWN0KTsKKwl1b2JqID0gaWRyX3dyaXRlX3VvYmooJmliX3V2ZXJic19zcnFfaWRyLCBjbWQuc3JxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCWlmICghdW9iaikKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3JxID0gdW9iai0+b2JqZWN0OworCW9iaiA9IGNvbnRhaW5lcl9vZih1b2JqLCBzdHJ1Y3QgaWJfdWV2ZW50X29iamVjdCwgdW9iamVjdCk7CiAKIAlyZXQgPSBpYl9kZXN0cm95X3NycShzcnEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCWlmICghcmV0KQorCQl1b2JqLT5saXZlID0gMDsKIAotCWlkcl9yZW1vdmUoJmliX3V2ZXJic19zcnFfaWRyLCBjbWQuc3JxX2hhbmRsZSk7CisJcHV0X3VvYmpfd3JpdGUodW9iaik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfc3JxX2lkciwgdW9iaik7CiAKIAltdXRleF9sb2NrKCZmaWxlLT5tdXRleCk7Ci0JbGlzdF9kZWwoJnVvYmotPnVvYmplY3QubGlzdCk7CisJbGlzdF9kZWwoJnVvYmotPmxpc3QpOwogCW11dGV4X3VubG9jaygmZmlsZS0+bXV0ZXgpOwogCi0JaWJfdXZlcmJzX3JlbGVhc2VfdWV2ZW50KGZpbGUsIHVvYmopOworCWliX3V2ZXJic19yZWxlYXNlX3VldmVudChmaWxlLCBvYmopOwogCi0JcmVzcC5ldmVudHNfcmVwb3J0ZWQgPSB1b2JqLT5ldmVudHNfcmVwb3J0ZWQ7CisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisJcmVzcC5ldmVudHNfcmVwb3J0ZWQgPSBvYmotPmV2ZW50c19yZXBvcnRlZDsKIAotCWtmcmVlKHVvYmopOworCXB1dF91b2JqKHVvYmopOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQogCQlyZXQgPSAtRUZBVUxUOwogCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKLQogCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCBmZjA5MmEwLi41ZWMyZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqdXZlcmJzX2NsYXNzOwogCi1ERUZJTkVfTVVURVgoaWJfdXZlcmJzX2lkcl9tdXRleCk7CitERUZJTkVfU1BJTkxPQ0soaWJfdXZlcmJzX2lkcl9sb2NrKTsKIERFRklORV9JRFIoaWJfdXZlcmJzX3BkX2lkcik7CiBERUZJTkVfSURSKGliX3V2ZXJic19tcl9pZHIpOwogREVGSU5FX0lEUihpYl91dmVyYnNfbXdfaWRyKTsKQEAgLTE4MywyMSArMTgzLDIxIEBACiAJaWYgKCFjb250ZXh0KQogCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVvYmosIHRtcCwgJmNvbnRleHQtPmFoX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IGliX2FoICphaCA9IGlkcl9maW5kKCZpYl91dmVyYnNfYWhfaWRyLCB1b2JqLT5pZCk7Ci0JCWlkcl9yZW1vdmUoJmliX3V2ZXJic19haF9pZHIsIHVvYmotPmlkKTsKKwkJc3RydWN0IGliX2FoICphaCA9IHVvYmotPm9iamVjdDsKKworCQlpZHJfcmVtb3ZlX3VvYmooJmliX3V2ZXJic19haF9pZHIsIHVvYmopOwogCQlpYl9kZXN0cm95X2FoKGFoKTsKIAkJbGlzdF9kZWwoJnVvYmotPmxpc3QpOwogCQlrZnJlZSh1b2JqKTsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+cXBfbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgaWJfcXAgKnFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIHVvYmotPmlkKTsKKwkJc3RydWN0IGliX3FwICpxcCA9IHVvYmotPm9iamVjdDsKIAkJc3RydWN0IGliX3VxcF9vYmplY3QgKnVxcCA9CiAJCQljb250YWluZXJfb2YodW9iaiwgc3RydWN0IGliX3VxcF9vYmplY3QsIHVldmVudC51b2JqZWN0KTsKLQkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3FwX2lkciwgdW9iai0+aWQpOworCisJCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX3FwX2lkciwgdW9iaik7CiAJCWliX3V2ZXJic19kZXRhY2hfdW1jYXN0KHFwLCB1cXApOwogCQlpYl9kZXN0cm95X3FwKHFwKTsKIAkJbGlzdF9kZWwoJnVvYmotPmxpc3QpOwpAQCAtMjA2LDExICsyMDYsMTIgQEAKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+Y3FfbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgaWJfY3EgKmNxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19jcV9pZHIsIHVvYmotPmlkKTsKKwkJc3RydWN0IGliX2NxICpjcSA9IHVvYmotPm9iamVjdDsKIAkJc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlICpldl9maWxlID0gY3EtPmNxX2NvbnRleHQ7CiAJCXN0cnVjdCBpYl91Y3Ffb2JqZWN0ICp1Y3EgPQogCQkJY29udGFpbmVyX29mKHVvYmosIHN0cnVjdCBpYl91Y3Ffb2JqZWN0LCB1b2JqZWN0KTsKLQkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX2NxX2lkciwgdW9iai0+aWQpOworCisJCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX2NxX2lkciwgdW9iaik7CiAJCWliX2Rlc3Ryb3lfY3EoY3EpOwogCQlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJCWliX3V2ZXJic19yZWxlYXNlX3VjcShmaWxlLCBldl9maWxlLCB1Y3EpOwpAQCAtMjE4LDEwICsyMTksMTEgQEAKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+c3JxX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IGliX3NycSAqc3JxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19zcnFfaWRyLCB1b2JqLT5pZCk7CisJCXN0cnVjdCBpYl9zcnEgKnNycSA9IHVvYmotPm9iamVjdDsKIAkJc3RydWN0IGliX3VldmVudF9vYmplY3QgKnVldmVudCA9CiAJCQljb250YWluZXJfb2YodW9iaiwgc3RydWN0IGliX3VldmVudF9vYmplY3QsIHVvYmplY3QpOwotCQlpZHJfcmVtb3ZlKCZpYl91dmVyYnNfc3JxX2lkciwgdW9iai0+aWQpOworCisJCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX3NycV9pZHIsIHVvYmopOwogCQlpYl9kZXN0cm95X3NycShzcnEpOwogCQlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJCWliX3V2ZXJic19yZWxlYXNlX3VldmVudChmaWxlLCB1ZXZlbnQpOwpAQCAtMjMxLDExICsyMzMsMTEgQEAKIAkvKiBYWFggRnJlZSBNV3MgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1b2JqLCB0bXAsICZjb250ZXh0LT5tcl9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCBpYl9tciAqbXIgPSBpZHJfZmluZCgmaWJfdXZlcmJzX21yX2lkciwgdW9iai0+aWQpOworCQlzdHJ1Y3QgaWJfbXIgKm1yID0gdW9iai0+b2JqZWN0OwogCQlzdHJ1Y3QgaWJfZGV2aWNlICptcmRldiA9IG1yLT5kZXZpY2U7CiAJCXN0cnVjdCBpYl91bWVtX29iamVjdCAqbWVtb2JqOwogCi0JCWlkcl9yZW1vdmUoJmliX3V2ZXJic19tcl9pZHIsIHVvYmotPmlkKTsKKwkJaWRyX3JlbW92ZV91b2JqKCZpYl91dmVyYnNfbXJfaWRyLCB1b2JqKTsKIAkJaWJfZGVyZWdfbXIobXIpOwogCiAJCW1lbW9iaiA9IGNvbnRhaW5lcl9vZih1b2JqLCBzdHJ1Y3QgaWJfdW1lbV9vYmplY3QsIHVvYmplY3QpOwpAQCAtMjQ2LDE1ICsyNDgsMTQgQEAKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW9iaiwgdG1wLCAmY29udGV4dC0+cGRfbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgaWJfcGQgKnBkID0gaWRyX2ZpbmQoJmliX3V2ZXJic19wZF9pZHIsIHVvYmotPmlkKTsKLQkJaWRyX3JlbW92ZSgmaWJfdXZlcmJzX3BkX2lkciwgdW9iai0+aWQpOworCQlzdHJ1Y3QgaWJfcGQgKnBkID0gdW9iai0+b2JqZWN0OworCisJCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX3BkX2lkciwgdW9iaik7CiAJCWliX2RlYWxsb2NfcGQocGQpOwogCQlsaXN0X2RlbCgmdW9iai0+bGlzdCk7CiAJCWtmcmVlKHVvYmopOwogCX0KIAotCW11dGV4X3VubG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7Ci0KIAlyZXR1cm4gY29udGV4dC0+ZGV2aWNlLT5kZWFsbG9jX3Vjb250ZXh0KGNvbnRleHQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFyc2hhbGwuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYXJzaGFsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDZiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFyc2hhbGwuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8cmRtYS9pYl9tYXJzaGFsbC5oPgorCitzdGF0aWMgdm9pZCBpYl9jb3B5X2FoX2F0dHJfdG9fdXNlcihzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgKmRzdCwKKwkJCQkgICAgc3RydWN0IGliX2FoX2F0dHIgKnNyYykKK3sKKwltZW1jcHkoZHN0LT5ncmguZGdpZCwgc3JjLT5ncmguZGdpZC5yYXcsIHNpemVvZiBzcmMtPmdyaC5kZ2lkKTsKKwlkc3QtPmdyaC5mbG93X2xhYmVsICAgICAgICA9IHNyYy0+Z3JoLmZsb3dfbGFiZWw7CisJZHN0LT5ncmguc2dpZF9pbmRleCAgICAgICAgPSBzcmMtPmdyaC5zZ2lkX2luZGV4OworCWRzdC0+Z3JoLmhvcF9saW1pdCAgICAgICAgID0gc3JjLT5ncmguaG9wX2xpbWl0OworCWRzdC0+Z3JoLnRyYWZmaWNfY2xhc3MgICAgID0gc3JjLT5ncmgudHJhZmZpY19jbGFzczsKKwlkc3QtPmRsaWQgCSAgICAJICAgPSBzcmMtPmRsaWQ7CisJZHN0LT5zbCAgIAkgICAgCSAgID0gc3JjLT5zbDsKKwlkc3QtPnNyY19wYXRoX2JpdHMgCSAgID0gc3JjLT5zcmNfcGF0aF9iaXRzOworCWRzdC0+c3RhdGljX3JhdGUgICAJICAgPSBzcmMtPnN0YXRpY19yYXRlOworCWRzdC0+aXNfZ2xvYmFsICAgICAgICAgICAgID0gc3JjLT5haF9mbGFncyAmIElCX0FIX0dSSCA/IDEgOiAwOworCWRzdC0+cG9ydF9udW0gCSAgICAJICAgPSBzcmMtPnBvcnRfbnVtOworfQorCit2b2lkIGliX2NvcHlfcXBfYXR0cl90b191c2VyKHN0cnVjdCBpYl91dmVyYnNfcXBfYXR0ciAqZHN0LAorCQkJICAgICBzdHJ1Y3QgaWJfcXBfYXR0ciAqc3JjKQoreworCWRzdC0+Y3VyX3FwX3N0YXRlCT0gc3JjLT5jdXJfcXBfc3RhdGU7CisJZHN0LT5wYXRoX210dQkJPSBzcmMtPnBhdGhfbXR1OworCWRzdC0+cGF0aF9taWdfc3RhdGUJPSBzcmMtPnBhdGhfbWlnX3N0YXRlOworCWRzdC0+cWtleQkJPSBzcmMtPnFrZXk7CisJZHN0LT5ycV9wc24JCT0gc3JjLT5ycV9wc247CisJZHN0LT5zcV9wc24JCT0gc3JjLT5zcV9wc247CisJZHN0LT5kZXN0X3FwX251bQk9IHNyYy0+ZGVzdF9xcF9udW07CisJZHN0LT5xcF9hY2Nlc3NfZmxhZ3MJPSBzcmMtPnFwX2FjY2Vzc19mbGFnczsKKworCWRzdC0+bWF4X3NlbmRfd3IJPSBzcmMtPmNhcC5tYXhfc2VuZF93cjsKKwlkc3QtPm1heF9yZWN2X3dyCT0gc3JjLT5jYXAubWF4X3JlY3Zfd3I7CisJZHN0LT5tYXhfc2VuZF9zZ2UJPSBzcmMtPmNhcC5tYXhfc2VuZF9zZ2U7CisJZHN0LT5tYXhfcmVjdl9zZ2UJPSBzcmMtPmNhcC5tYXhfcmVjdl9zZ2U7CisJZHN0LT5tYXhfaW5saW5lX2RhdGEJPSBzcmMtPmNhcC5tYXhfaW5saW5lX2RhdGE7CisKKwlpYl9jb3B5X2FoX2F0dHJfdG9fdXNlcigmZHN0LT5haF9hdHRyLCAmc3JjLT5haF9hdHRyKTsKKwlpYl9jb3B5X2FoX2F0dHJfdG9fdXNlcigmZHN0LT5hbHRfYWhfYXR0ciwgJnNyYy0+YWx0X2FoX2F0dHIpOworCisJZHN0LT5wa2V5X2luZGV4CQk9IHNyYy0+cGtleV9pbmRleDsKKwlkc3QtPmFsdF9wa2V5X2luZGV4CT0gc3JjLT5hbHRfcGtleV9pbmRleDsKKwlkc3QtPmVuX3NxZF9hc3luY19ub3RpZnkgPSBzcmMtPmVuX3NxZF9hc3luY19ub3RpZnk7CisJZHN0LT5zcV9kcmFpbmluZwk9IHNyYy0+c3FfZHJhaW5pbmc7CisJZHN0LT5tYXhfcmRfYXRvbWljCT0gc3JjLT5tYXhfcmRfYXRvbWljOworCWRzdC0+bWF4X2Rlc3RfcmRfYXRvbWljCT0gc3JjLT5tYXhfZGVzdF9yZF9hdG9taWM7CisJZHN0LT5taW5fcm5yX3RpbWVyCT0gc3JjLT5taW5fcm5yX3RpbWVyOworCWRzdC0+cG9ydF9udW0JCT0gc3JjLT5wb3J0X251bTsKKwlkc3QtPnRpbWVvdXQJCT0gc3JjLT50aW1lb3V0OworCWRzdC0+cmV0cnlfY250CQk9IHNyYy0+cmV0cnlfY250OworCWRzdC0+cm5yX3JldHJ5CQk9IHNyYy0+cm5yX3JldHJ5OworCWRzdC0+YWx0X3BvcnRfbnVtCT0gc3JjLT5hbHRfcG9ydF9udW07CisJZHN0LT5hbHRfdGltZW91dAk9IHNyYy0+YWx0X3RpbWVvdXQ7Cit9CitFWFBPUlRfU1lNQk9MKGliX2NvcHlfcXBfYXR0cl90b191c2VyKTsKKwordm9pZCBpYl9jb3B5X3BhdGhfcmVjX3RvX3VzZXIoc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgKmRzdCwKKwkJCSAgICAgIHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqc3JjKQoreworCW1lbWNweShkc3QtPmRnaWQsIHNyYy0+ZGdpZC5yYXcsIHNpemVvZiBzcmMtPmRnaWQpOworCW1lbWNweShkc3QtPnNnaWQsIHNyYy0+c2dpZC5yYXcsIHNpemVvZiBzcmMtPnNnaWQpOworCisJZHN0LT5kbGlkCQk9IHNyYy0+ZGxpZDsKKwlkc3QtPnNsaWQJCT0gc3JjLT5zbGlkOworCWRzdC0+cmF3X3RyYWZmaWMJPSBzcmMtPnJhd190cmFmZmljOworCWRzdC0+Zmxvd19sYWJlbAkJPSBzcmMtPmZsb3dfbGFiZWw7CisJZHN0LT5ob3BfbGltaXQJCT0gc3JjLT5ob3BfbGltaXQ7CisJZHN0LT50cmFmZmljX2NsYXNzCT0gc3JjLT50cmFmZmljX2NsYXNzOworCWRzdC0+cmV2ZXJzaWJsZQkJPSBzcmMtPnJldmVyc2libGU7CisJZHN0LT5udW1iX3BhdGgJCT0gc3JjLT5udW1iX3BhdGg7CisJZHN0LT5wa2V5CQk9IHNyYy0+cGtleTsKKwlkc3QtPnNsCQkJPSBzcmMtPnNsOworCWRzdC0+bXR1X3NlbGVjdG9yCT0gc3JjLT5tdHVfc2VsZWN0b3I7CisJZHN0LT5tdHUJCT0gc3JjLT5tdHU7CisJZHN0LT5yYXRlX3NlbGVjdG9yCT0gc3JjLT5yYXRlX3NlbGVjdG9yOworCWRzdC0+cmF0ZQkJPSBzcmMtPnJhdGU7CisJZHN0LT5wYWNrZXRfbGlmZV90aW1lCT0gc3JjLT5wYWNrZXRfbGlmZV90aW1lOworCWRzdC0+cHJlZmVyZW5jZQkJPSBzcmMtPnByZWZlcmVuY2U7CisJZHN0LT5wYWNrZXRfbGlmZV90aW1lX3NlbGVjdG9yID0gc3JjLT5wYWNrZXRfbGlmZV90aW1lX3NlbGVjdG9yOworfQorRVhQT1JUX1NZTUJPTChpYl9jb3B5X3BhdGhfcmVjX3RvX3VzZXIpOworCit2b2lkIGliX2NvcHlfcGF0aF9yZWNfZnJvbV91c2VyKHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqZHN0LAorCQkJCXN0cnVjdCBpYl91c2VyX3BhdGhfcmVjICpzcmMpCit7CisJbWVtY3B5KGRzdC0+ZGdpZC5yYXcsIHNyYy0+ZGdpZCwgc2l6ZW9mIGRzdC0+ZGdpZCk7CisJbWVtY3B5KGRzdC0+c2dpZC5yYXcsIHNyYy0+c2dpZCwgc2l6ZW9mIGRzdC0+c2dpZCk7CisKKwlkc3QtPmRsaWQJCT0gc3JjLT5kbGlkOworCWRzdC0+c2xpZAkJPSBzcmMtPnNsaWQ7CisJZHN0LT5yYXdfdHJhZmZpYwk9IHNyYy0+cmF3X3RyYWZmaWM7CisJZHN0LT5mbG93X2xhYmVsCQk9IHNyYy0+Zmxvd19sYWJlbDsKKwlkc3QtPmhvcF9saW1pdAkJPSBzcmMtPmhvcF9saW1pdDsKKwlkc3QtPnRyYWZmaWNfY2xhc3MJPSBzcmMtPnRyYWZmaWNfY2xhc3M7CisJZHN0LT5yZXZlcnNpYmxlCQk9IHNyYy0+cmV2ZXJzaWJsZTsKKwlkc3QtPm51bWJfcGF0aAkJPSBzcmMtPm51bWJfcGF0aDsKKwlkc3QtPnBrZXkJCT0gc3JjLT5wa2V5OworCWRzdC0+c2wJCQk9IHNyYy0+c2w7CisJZHN0LT5tdHVfc2VsZWN0b3IJPSBzcmMtPm10dV9zZWxlY3RvcjsKKwlkc3QtPm10dQkJPSBzcmMtPm10dTsKKwlkc3QtPnJhdGVfc2VsZWN0b3IJPSBzcmMtPnJhdGVfc2VsZWN0b3I7CisJZHN0LT5yYXRlCQk9IHNyYy0+cmF0ZTsKKwlkc3QtPnBhY2tldF9saWZlX3RpbWUJPSBzcmMtPnBhY2tldF9saWZlX3RpbWU7CisJZHN0LT5wcmVmZXJlbmNlCQk9IHNyYy0+cHJlZmVyZW5jZTsKKwlkc3QtPnBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3IgPSBzcmMtPnBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3I7Cit9CitFWFBPUlRfU1lNQk9MKGliX2NvcHlfcGF0aF9yZWNfZnJvbV91c2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IGI3OGU3ZGMuLjQ2ODk5OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtMTI1LDM1ICsxMjUsNDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWJfY3JlYXRlX2FoKTsKIAotc3RydWN0IGliX2FoICppYl9jcmVhdGVfYWhfZnJvbV93YyhzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfd2MgKndjLAotCQkJCSAgIHN0cnVjdCBpYl9ncmggKmdyaCwgdTggcG9ydF9udW0pCitpbnQgaWJfaW5pdF9haF9mcm9tX3djKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sIHN0cnVjdCBpYl93YyAqd2MsCisJCSAgICAgICBzdHJ1Y3QgaWJfZ3JoICpncmgsIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKQogewotCXN0cnVjdCBpYl9haF9hdHRyIGFoX2F0dHI7CiAJdTMyIGZsb3dfY2xhc3M7CiAJdTE2IGdpZF9pbmRleDsKIAlpbnQgcmV0OwogCi0JbWVtc2V0KCZhaF9hdHRyLCAwLCBzaXplb2YgYWhfYXR0cik7Ci0JYWhfYXR0ci5kbGlkID0gd2MtPnNsaWQ7Ci0JYWhfYXR0ci5zbCA9IHdjLT5zbDsKLQlhaF9hdHRyLnNyY19wYXRoX2JpdHMgPSB3Yy0+ZGxpZF9wYXRoX2JpdHM7Ci0JYWhfYXR0ci5wb3J0X251bSA9IHBvcnRfbnVtOworCW1lbXNldChhaF9hdHRyLCAwLCBzaXplb2YgKmFoX2F0dHIpOworCWFoX2F0dHItPmRsaWQgPSB3Yy0+c2xpZDsKKwlhaF9hdHRyLT5zbCA9IHdjLT5zbDsKKwlhaF9hdHRyLT5zcmNfcGF0aF9iaXRzID0gd2MtPmRsaWRfcGF0aF9iaXRzOworCWFoX2F0dHItPnBvcnRfbnVtID0gcG9ydF9udW07CiAKIAlpZiAod2MtPndjX2ZsYWdzICYgSUJfV0NfR1JIKSB7Ci0JCWFoX2F0dHIuYWhfZmxhZ3MgPSBJQl9BSF9HUkg7Ci0JCWFoX2F0dHIuZ3JoLmRnaWQgPSBncmgtPnNnaWQ7CisJCWFoX2F0dHItPmFoX2ZsYWdzID0gSUJfQUhfR1JIOworCQlhaF9hdHRyLT5ncmguZGdpZCA9IGdyaC0+c2dpZDsKIAotCQlyZXQgPSBpYl9maW5kX2NhY2hlZF9naWQocGQtPmRldmljZSwgJmdyaC0+ZGdpZCwgJnBvcnRfbnVtLAorCQlyZXQgPSBpYl9maW5kX2NhY2hlZF9naWQoZGV2aWNlLCAmZ3JoLT5kZ2lkLCAmcG9ydF9udW0sCiAJCQkJCSAmZ2lkX2luZGV4KTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCQlyZXR1cm4gcmV0OwogCi0JCWFoX2F0dHIuZ3JoLnNnaWRfaW5kZXggPSAodTgpIGdpZF9pbmRleDsKKwkJYWhfYXR0ci0+Z3JoLnNnaWRfaW5kZXggPSAodTgpIGdpZF9pbmRleDsKIAkJZmxvd19jbGFzcyA9IGJlMzJfdG9fY3B1KGdyaC0+dmVyc2lvbl90Y2xhc3NfZmxvdyk7Ci0JCWFoX2F0dHIuZ3JoLmZsb3dfbGFiZWwgPSBmbG93X2NsYXNzICYgMHhGRkZGRjsKLQkJYWhfYXR0ci5ncmgudHJhZmZpY19jbGFzcyA9IChmbG93X2NsYXNzID4+IDIwKSAmIDB4RkY7Ci0JCWFoX2F0dHIuZ3JoLmhvcF9saW1pdCA9IGdyaC0+aG9wX2xpbWl0OworCQlhaF9hdHRyLT5ncmguZmxvd19sYWJlbCA9IGZsb3dfY2xhc3MgJiAweEZGRkZGOworCQlhaF9hdHRyLT5ncmguaG9wX2xpbWl0ID0gZ3JoLT5ob3BfbGltaXQ7CisJCWFoX2F0dHItPmdyaC50cmFmZmljX2NsYXNzID0gKGZsb3dfY2xhc3MgPj4gMjApICYgMHhGRjsKIAl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGliX2luaXRfYWhfZnJvbV93Yyk7CisKK3N0cnVjdCBpYl9haCAqaWJfY3JlYXRlX2FoX2Zyb21fd2Moc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3djICp3YywKKwkJCQkgICBzdHJ1Y3QgaWJfZ3JoICpncmgsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBpYl9haF9hdHRyIGFoX2F0dHI7CisJaW50IHJldDsKKworCXJldCA9IGliX2luaXRfYWhfZnJvbV93YyhwZC0+ZGV2aWNlLCBwb3J0X251bSwgd2MsIGdyaCwgJmFoX2F0dHIpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKIAlyZXR1cm4gaWJfY3JlYXRlX2FoKHBkLCAmYWhfYXR0cik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKaW5kZXggZjdmODM5MS4uMWE5ZDBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwpAQCAtMTM3LDQ3ICsxMzcsMTEgQEAKIAlyZXR1cm4gcmVwbHkoc21wKTsKIH0KIAotc3RydWN0IHBvcnRfaW5mbyB7Ci0JX19iZTY0IG1rZXk7Ci0JX19iZTY0IGdpZF9wcmVmaXg7Ci0JX19iZTE2IGxpZDsKLQlfX2JlMTYgc21fbGlkOwotCV9fYmUzMiBjYXBfbWFzazsKLQlfX2JlMTYgZGlhZ19jb2RlOwotCV9fYmUxNiBta2V5X2xlYXNlX3BlcmlvZDsKLQl1OCBsb2NhbF9wb3J0X251bTsKLQl1OCBsaW5rX3dpZHRoX2VuYWJsZWQ7Ci0JdTggbGlua193aWR0aF9zdXBwb3J0ZWQ7Ci0JdTggbGlua193aWR0aF9hY3RpdmU7Ci0JdTggbGlua3NwZWVkX3BvcnRzdGF0ZTsJCQkvKiA0IGJpdHMsIDQgYml0cyAqLwotCXU4IHBvcnRwaHlzc3RhdGVfbGlua2Rvd247CQkvKiA0IGJpdHMsIDQgYml0cyAqLwotCXU4IG1rZXlwcm90X3Jlc3ZfbG1jOwkJCS8qIDIgYml0cywgMywgMyAqLwotCXU4IGxpbmtzcGVlZGFjdGl2ZV9lbmFibGVkOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KLQl1OCBuZWlnaGJvcm10dV9tYXN0ZXJzbXNsOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KLQl1OCB2bGNhcF9pbml0dHlwZTsJCQkvKiA0IGJpdHMsIDQgYml0cyAqLwotCXU4IHZsX2hpZ2hfbGltaXQ7Ci0JdTggdmxfYXJiX2hpZ2hfY2FwOwotCXU4IHZsX2FyYl9sb3dfY2FwOwotCXU4IGluaXR0eXBlcmVwbHlfbXR1Y2FwOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KLQl1OCB2bHN0YWxsY250X2hvcWxpZmU7CQkJLyogMyBiaXRzLCA1IGJpdHMgKi8KLQl1OCBvcGVyYXRpb25hbHZsX3BlaV9wZW9fZnBpX2ZwbzsJLyogNCBiaXRzLCAxLCAxLCAxLCAxICovCi0JX19iZTE2IG1rZXlfdmlvbGF0aW9uczsKLQlfX2JlMTYgcGtleV92aW9sYXRpb25zOwotCV9fYmUxNiBxa2V5X3Zpb2xhdGlvbnM7Ci0JdTggZ3VpZF9jYXA7Ci0JdTggY2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0bzsJCS8qIDEgYml0LCAyIGJpdHMsIDUgKi8KLQl1OCByZXN2X3Jlc3B0aW1ldmFsdWU7CQkJLyogMyBiaXRzLCA1IGJpdHMgKi8KLQl1OCBsb2NhbHBoeWVycm9yc19vdmVycnVuZXJyb3JzOwkvKiA0IGJpdHMsIDQgYml0cyAqLwotCV9fYmUxNiBtYXhfY3JlZGl0X2hpbnQ7Ci0JdTggcmVzdjsKLQl1OCBsaW5rX3JvdW5kdHJpcF9sYXRlbmN5WzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0YXRpYyBpbnQgcmVjdl9zdWJuX2dldF9wb3J0aW5mbyhzdHJ1Y3QgaWJfc21wICpzbXAsCiAJCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCkKIHsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldjsKLQlzdHJ1Y3QgcG9ydF9pbmZvICpwaXAgPSAoc3RydWN0IHBvcnRfaW5mbyAqKXNtcC0+ZGF0YTsKKwlzdHJ1Y3QgaWJfcG9ydF9pbmZvICpwaXAgPSAoc3RydWN0IGliX3BvcnRfaW5mbyAqKXNtcC0+ZGF0YTsKIAl1MTYgbGlkOwogCXU4IGliY3N0YXQ7CiAJdTggbXR1OwpAQCAtMzEyLDcgKzI3Niw3IEBACiBzdGF0aWMgaW50IHJlY3Zfc3Vibl9zZXRfcG9ydGluZm8oc3RydWN0IGliX3NtcCAqc21wLAogCQkJCSAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCiB7Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcGlwID0gKHN0cnVjdCBwb3J0X2luZm8gKilzbXAtPmRhdGE7CisJc3RydWN0IGliX3BvcnRfaW5mbyAqcGlwID0gKHN0cnVjdCBpYl9wb3J0X2luZm8gKilzbXAtPmRhdGE7CiAJc3RydWN0IGliX2V2ZW50IGV2ZW50OwogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2OwogCXUzMiBmbGFnczsKQEAgLTQ0NSw3ICs0MDksNyBAQAogCiAJaWYgKHBpcC0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKIAkJY2xpZW50cmVyZWcgPSAxOwotCQlldmVudC5ldmVudCA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVI7CiAJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKaW5kZXggNzk4ZTEzZS4uZDBmNzczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwpAQCAtMTc0LDcgKzE3NCw2IEBACiAKIHN0cnVjdCBtdGhjYV9jbWRfY29udGV4dCB7CiAJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlpbnQgICAgICAgICAgICAgICByZXN1bHQ7CiAJaW50ICAgICAgICAgICAgICAgbmV4dDsKIAl1NjQgICAgICAgICAgICAgICBvdXRfcGFyYW07CkBAIC0zNjIsMTUgKzM2MSw2IEBACiAJY29tcGxldGUoJmNvbnRleHQtPmRvbmUpOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgY29udGV4dF9wdHIpCi17Ci0Jc3RydWN0IG10aGNhX2NtZF9jb250ZXh0ICpjb250ZXh0ID0KLQkJKHN0cnVjdCBtdGhjYV9jbWRfY29udGV4dCAqKSBjb250ZXh0X3B0cjsKLQotCWNvbnRleHQtPnJlc3VsdCA9IC1FQlVTWTsKLQljb21wbGV0ZSgmY29udGV4dC0+ZG9uZSk7Ci19Ci0KIHN0YXRpYyBpbnQgbXRoY2FfY21kX3dhaXQoc3RydWN0IG10aGNhX2RldiAqZGV2LAogCQkJICB1NjQgaW5fcGFyYW0sCiAJCQkgIHU2NCAqb3V0X3BhcmFtLApAQCAtNDAxLDExICszOTEsMTAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWNvbnRleHQtPnRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIHRpbWVvdXQ7Ci0JYWRkX3RpbWVyKCZjb250ZXh0LT50aW1lcik7Ci0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb250ZXh0LT5kb25lKTsKLQlkZWxfdGltZXJfc3luYygmY29udGV4dC0+dGltZXIpOworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjb250ZXh0LT5kb25lLCB0aW1lb3V0KSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KIAogCWVyciA9IGNvbnRleHQtPnJlc3VsdDsKIAlpZiAoZXJyKQpAQCAtNTM1LDEwICs1MjQsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNtZC5tYXhfY21kczsgKytpKSB7CiAJCWRldi0+Y21kLmNvbnRleHRbaV0udG9rZW4gPSBpOwogCQlkZXYtPmNtZC5jb250ZXh0W2ldLm5leHQgPSBpICsgMTsKLQkJaW5pdF90aW1lcigmZGV2LT5jbWQuY29udGV4dFtpXS50aW1lcik7Ci0JCWRldi0+Y21kLmNvbnRleHRbaV0udGltZXIuZGF0YSAgICAgPQotCQkJKHVuc2lnbmVkIGxvbmcpICZkZXYtPmNtZC5jb250ZXh0W2ldOwotCQlkZXYtPmNtZC5jb250ZXh0W2ldLnRpbWVyLmZ1bmN0aW9uID0gZXZlbnRfdGltZW91dDsKIAl9CiAKIAlkZXYtPmNtZC5jb250ZXh0W2Rldi0+Y21kLm1heF9jbWRzIC0gMV0ubmV4dCA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwppbmRleCAyMDU4NTRlLi4zZTI3YTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwpAQCAtNTQwLDggKzU0MCwxNyBAQAogCQllbnRyeS0+d3JfaWQgPSBzcnEtPndyaWRbd3FlX2luZGV4XTsKIAkJbXRoY2FfZnJlZV9zcnFfd3FlKHNycSwgd3FlKTsKIAl9IGVsc2UgeworCQlzMzIgd3FlOwogCQl3cSA9ICYoKmN1cl9xcCktPnJxOwotCQl3cWVfaW5kZXggPSBiZTMyX3RvX2NwdShjcWUtPndxZSkgPj4gd3EtPndxZV9zaGlmdDsKKwkJd3FlID0gYmUzMl90b19jcHUoY3FlLT53cWUpOworCQl3cWVfaW5kZXggPSB3cWUgPj4gd3EtPndxZV9zaGlmdDsKKyAgICAgICAgICAgICAgIC8qCisJCSogV1FFIGFkZHIgPT0gYmFzZSAtIDEgbWlnaHQgYmUgcmVwb3J0ZWQgaW4gcmVjZWl2ZSBjb21wbGV0aW9uCisJCSogd2l0aCBlcnJvciBpbnN0ZWFkIG9mIChycSBzaXplIC0gMSkgYnkgU2luYWkgRlcgMS4wLjgwMCBhbmQKKwkJKiBBcmJlbCBGVyA1LjEuNDAwLiAgVGhpcyBidWcgc2hvdWxkIGJlIGZpeGVkIGluIGxhdGVyIEZXIHJldnMuCisJCSovCisJCWlmICh1bmxpa2VseSh3cWVfaW5kZXggPCAwKSkKKwkJCXdxZV9pbmRleCA9IHdxLT5tYXggLSAxOwogCQllbnRyeS0+d3JfaWQgPSAoKmN1cl9xcCktPndyaWRbd3FlX2luZGV4XTsKIAl9CiAKQEAgLTgxMyw2ICs4MjIsNyBAQAogCXNwaW5fbG9ja19pbml0KCZjcS0+bG9jayk7CiAJY3EtPnJlZmNvdW50ID0gMTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjcS0+d2FpdCk7CisJbXV0ZXhfaW5pdCgmY3EtPm11dGV4KTsKIAogCW1lbXNldChjcV9jb250ZXh0LCAwLCBzaXplb2YgKmNxX2NvbnRleHQpOwogCWNxX2NvbnRleHQtPmZsYWdzICAgICAgICAgICA9IGNwdV90b19iZTMyKE1USENBX0NRX1NUQVRVU19PSyAgICAgIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9lcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMKaW5kZXggOTlmMTA5Yy4uZDUzNjIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMKQEAgLTY5NSwxMCArNjk1LDYgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgbXRoY2FfbWFwX2VxX3JlZ3Moc3RydWN0IG10aGNhX2RldiAqZGV2KQogewotCXVuc2lnbmVkIGxvbmcgbXRoY2FfYmFzZTsKLQotCW10aGNhX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKTsKLQogCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpIHsKIAkJLyoKIAkJICogV2UgYXNzdW1lIHRoYXQgdGhlIEVRIGFybSBhbmQgRVEgc2V0IENJIHJlZ2lzdGVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCmluZGV4IDQ3MzA4NjMuLmQ5YmMwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKQEAgLTExNCwxNCArMTE0LDIyIEBACiAJICAgICBtYWQtPm1hZF9oZHIubWdtdF9jbGFzcyAgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKSAmJgogCSAgICBtYWQtPm1hZF9oZHIubWV0aG9kICAgICA9PSBJQl9NR01UX01FVEhPRF9TRVQpIHsKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTykgeworCQkJc3RydWN0IGliX3BvcnRfaW5mbyAqcGluZm8gPQorCQkJCShzdHJ1Y3QgaWJfcG9ydF9pbmZvICopICgoc3RydWN0IGliX3NtcCAqKSBtYWQpLT5kYXRhOworCiAJCQltdGhjYV91cGRhdGVfcmF0ZSh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0pOwogCQkJdXBkYXRlX3NtX2FoKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSwKLQkJCQkgICAgIGJlMTZfdG9fY3B1cCgoX19iZTE2ICopIChtYWQtPmRhdGEgKyA1OCkpLAotCQkJCSAgICAgKCoodTggKikgKG1hZC0+ZGF0YSArIDc2KSkgJiAweGYpOworCQkJCSAgICAgYmUxNl90b19jcHUocGluZm8tPmxpZCksCisJCQkJICAgICBwaW5mby0+bmVpZ2hib3JtdHVfbWFzdGVyc21zbCAmIDB4Zik7CiAKIAkJCWV2ZW50LmRldmljZSAgICAgICAgICAgPSBpYmRldjsKLQkJCWV2ZW50LmV2ZW50ICAgICAgICAgICAgPSBJQl9FVkVOVF9MSURfQ0hBTkdFOwogCQkJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IHBvcnRfbnVtOworCisJCQlpZihwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApCisJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUjsKKwkJCWVsc2UKKwkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisKIAkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwppbmRleCBhMmVhZThhLi4yMzBhZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwpAQCAtMTE1LDYgKzExNSwxNiBAQAogCXByb3BzLT5tYXhfbWNhc3RfcXBfYXR0YWNoID0gTVRIQ0FfUVBfUEVSX01HTTsKIAlwcm9wcy0+bWF4X3RvdGFsX21jYXN0X3FwX2F0dGFjaCA9IHByb3BzLT5tYXhfbWNhc3RfcXBfYXR0YWNoICoKIAkJCQkJICAgcHJvcHMtPm1heF9tY2FzdF9ncnA7CisJLyoKKwkgKiBJZiBTaW5haSBtZW1vcnkga2V5IG9wdGltaXphdGlvbiBpcyBiZWluZyB1c2VkLCB0aGVuIG9ubHkKKwkgKiB0aGUgOC1iaXQga2V5IHBvcnRpb24gd2lsbCBjaGFuZ2UuICBGb3Igb3RoZXIgSENBcywgdGhlCisJICogdW51c2VkIGluZGV4IGJpdHMgd2lsbCBhbHNvIGJlIHVzZWQgZm9yIEZNUiByZW1hcHBpbmcuCisJICovCisJaWYgKG1kZXYtPm10aGNhX2ZsYWdzICYgTVRIQ0FfRkxBR19TSU5BSV9PUFQpCisJCXByb3BzLT5tYXhfbWFwX3Blcl9mbXIgPSAyNTU7CisJZWxzZQorCQlwcm9wcy0+bWF4X21hcF9wZXJfZm1yID0KKwkJCSgxIDw8ICgzMiAtIGxvbmdfbG9nMihtZGV2LT5saW1pdHMubnVtX21wdHMpKSkgLSAxOwogCiAJZXJyID0gMDsKICBvdXQ6CkBAIC03ODMsMTggKzc5MywyNCBAQAogCWlmIChlbnRyaWVzIDwgMSB8fCBlbnRyaWVzID4gZGV2LT5saW1pdHMubWF4X2NxZXMpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmY3EtPm11dGV4KTsKKwogCWVudHJpZXMgPSByb3VuZHVwX3Bvd19vZl90d28oZW50cmllcyArIDEpOwotCWlmIChlbnRyaWVzID09IGliY3EtPmNxZSArIDEpCi0JCXJldHVybiAwOworCWlmIChlbnRyaWVzID09IGliY3EtPmNxZSArIDEpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKGNxLT5pc19rZXJuZWwpIHsKIAkJcmV0ID0gbXRoY2FfYWxsb2NfcmVzaXplX2J1ZihkZXYsIGNxLCBlbnRyaWVzKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dDsKIAkJbGtleSA9IGNxLT5yZXNpemVfYnVmLT5idWYubXIuaWJtci5sa2V5OwogCX0gZWxzZSB7Ci0JCWlmIChpYl9jb3B5X2Zyb21fdWRhdGEoJnVjbWQsIHVkYXRhLCBzaXplb2YgdWNtZCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGliX2NvcHlfZnJvbV91ZGF0YSgmdWNtZCwgdWRhdGEsIHNpemVvZiB1Y21kKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWxrZXkgPSB1Y21kLmxrZXk7CiAJfQogCkBAIC04MTEsNyArODI3LDcgQEAKIAkJCWNxLT5yZXNpemVfYnVmID0gTlVMTDsKIAkJCXNwaW5fdW5sb2NrX2lycSgmY3EtPmxvY2spOwogCQl9Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChjcS0+aXNfa2VybmVsKSB7CkBAIC04MzgsNyArODU0LDEwIEBACiAJfSBlbHNlCiAJCWliY3EtPmNxZSA9IGVudHJpZXMgLSAxOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjcS0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdGhjYV9kZXN0cm95X2NxKHN0cnVjdCBpYl9jcSAqY3EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCmluZGV4IDE3OWE4ZjYuLjhkZTI4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCkBAIC0yMTQsNiArMjE0LDcgQEAKIAlpbnQJCQlhcm1fc247CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiB9OwogCiBzdHJ1Y3QgbXRoY2Ffc3JxIHsKQEAgLTIzNyw2ICsyMzgsNyBAQAogCXN0cnVjdCBtdGhjYV9tcgkJbXI7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiB9OwogCiBzdHJ1Y3QgbXRoY2Ffd3EgewpAQCAtMjc4LDYgKzI4MCw3IEBACiAJdW5pb24gbXRoY2FfYnVmCSAgICAgICBxdWV1ZTsKIAogCXdhaXRfcXVldWVfaGVhZF90ICAgICAgd2FpdDsKKwlzdHJ1Y3QgbXV0ZXgJICAgICAgIG11dGV4OwogfTsKIAogc3RydWN0IG10aGNhX3NxcCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCmluZGV4IDA3YzEzYmUuLjE2YzM4N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC01MzQsNyArNTM0LDkgQEAKIAlzdHJ1Y3QgbXRoY2FfcXBfY29udGV4dCAqcXBfY29udGV4dDsKIAl1MzIgc3FkX2V2ZW50ID0gMDsKIAl1OCBzdGF0dXM7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnFwLT5tdXRleCk7CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQ1VSX1NUQVRFKSB7CiAJCWN1cl9zdGF0ZSA9IGF0dHItPmN1cl9xcF9zdGF0ZTsKQEAgLTU1MywzOSArNTU1LDQxIEBACiAJCQkgICIlZC0+JWQgd2l0aCBhdHRyIDB4JTA4eFxuIiwKIAkJCSAgcXAtPnRyYW5zcG9ydCwgY3VyX3N0YXRlLCBuZXdfc3RhdGUsCiAJCQkgIGF0dHJfbWFzayk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoKGF0dHJfbWFzayAmIElCX1FQX1BLRVlfSU5ERVgpICYmCiAJICAgICBhdHRyLT5wa2V5X2luZGV4ID49IGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuKSB7CiAJCW10aGNhX2RiZyhkZXYsICJQX0tleSBpbmRleCAoJXUpIHRvbyBsYXJnZS4gbWF4IGlzICVkXG4iLAogCQkJICBhdHRyLT5wa2V5X2luZGV4LCBkZXYtPmxpbWl0cy5wa2V5X3RhYmxlX2xlbi0xKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmICgoYXR0cl9tYXNrICYgSUJfUVBfUE9SVCkgJiYKIAkgICAgKGF0dHItPnBvcnRfbnVtID09IDAgfHwgYXR0ci0+cG9ydF9udW0gPiBkZXYtPmxpbWl0cy5udW1fcG9ydHMpKSB7CiAJCW10aGNhX2RiZyhkZXYsICJQb3J0IG51bWJlciAoJXUpIGlzIGludmFsaWRcbiIsIGF0dHItPnBvcnRfbnVtKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9NQVhfUVBfUkRfQVRPTUlDICYmCiAJICAgIGF0dHItPm1heF9yZF9hdG9taWMgPiBkZXYtPmxpbWl0cy5tYXhfcXBfaW5pdF9yZG1hKSB7CiAJCW10aGNhX2RiZyhkZXYsICJNYXggcmRtYV9hdG9taWMgYXMgaW5pdGlhdG9yICV1IHRvbyBsYXJnZSAobWF4IGlzICVkKVxuIiwKIAkJCSAgYXR0ci0+bWF4X3JkX2F0b21pYywgZGV2LT5saW1pdHMubWF4X3FwX2luaXRfcmRtYSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDICYmCiAJICAgIGF0dHItPm1heF9kZXN0X3JkX2F0b21pYyA+IDEgPDwgZGV2LT5xcF90YWJsZS5yZGJfc2hpZnQpIHsKIAkJbXRoY2FfZGJnKGRldiwgIk1heCByZG1hX2F0b21pYyBhcyByZXNwb25kZXIgJXUgdG9vIGxhcmdlIChtYXggJWQpXG4iLAogCQkJICBhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWMsIDEgPDwgZGV2LT5xcF90YWJsZS5yZGJfc2hpZnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbWFpbGJveCA9IG10aGNhX2FsbG9jX21haWxib3goZGV2LCBHRlBfS0VSTkVMKTsKLQlpZiAoSVNfRVJSKG1haWxib3gpKQotCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKSB7CisJCWVyciA9IFBUUl9FUlIobWFpbGJveCk7CisJCWdvdG8gb3V0OworCX0KIAlxcF9wYXJhbSA9IG1haWxib3gtPmJ1ZjsKIAlxcF9jb250ZXh0ID0gJnFwX3BhcmFtLT5jb250ZXh0OwogCW1lbXNldChxcF9wYXJhbSwgMCwgc2l6ZW9mICpxcF9wYXJhbSk7CkBAIC02MTgsNyArNjIyLDcgQEAKIAkJaWYgKGF0dHItPnBhdGhfbXR1IDwgSUJfTVRVXzI1NiB8fCBhdHRyLT5wYXRoX210dSA+IElCX01UVV8yMDQ4KSB7CiAJCQltdGhjYV9kYmcoZGV2LCAicGF0aCBNVFUgKCV1KSBpcyBpbnZhbGlkXG4iLAogCQkJCSAgYXR0ci0+cGF0aF9tdHUpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIG91dF9tYWlsYm94OwogCQl9CiAJCXFwX2NvbnRleHQtPm10dV9tc2dtYXggPSAoYXR0ci0+cGF0aF9tdHUgPDwgNSkgfCAzMTsKIAl9CkBAIC02NzIsNyArNjc2LDcgQEAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQVYpIHsKIAkJaWYgKG10aGNhX3BhdGhfc2V0KGRldiwgJmF0dHItPmFoX2F0dHIsICZxcF9jb250ZXh0LT5wcmlfcGF0aCwKIAkJCQkgICBhdHRyX21hc2sgJiBJQl9RUF9QT1JUID8gYXR0ci0+cG9ydF9udW0gOiBxcC0+cG9ydCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X21haWxib3g7CiAKIAkJcXBfcGFyYW0tPm9wdF9wYXJhbV9tYXNrIHw9IGNwdV90b19iZTMyKE1USENBX1FQX09QVFBBUl9QUklNQVJZX0FERFJfUEFUSCk7CiAJfQpAQCAtNjg2LDE4ICs2OTAsMTggQEAKIAkJaWYgKGF0dHItPmFsdF9wa2V5X2luZGV4ID49IGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuKSB7CiAJCQltdGhjYV9kYmcoZGV2LCAiQWx0ZXJuYXRlIFBfS2V5IGluZGV4ICgldSkgdG9vIGxhcmdlLiBtYXggaXMgJWRcbiIsCiAJCQkJICBhdHRyLT5hbHRfcGtleV9pbmRleCwgZGV2LT5saW1pdHMucGtleV90YWJsZV9sZW4tMSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X21haWxib3g7CiAJCX0KIAogCQlpZiAoYXR0ci0+YWx0X3BvcnRfbnVtID09IDAgfHwgYXR0ci0+YWx0X3BvcnRfbnVtID4gZGV2LT5saW1pdHMubnVtX3BvcnRzKSB7CiAJCQltdGhjYV9kYmcoZGV2LCAiQWx0ZXJuYXRlIHBvcnQgbnVtYmVyICgldSkgaXMgaW52YWxpZFxuIiwKIAkJCQlhdHRyLT5hbHRfcG9ydF9udW0pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIG91dF9tYWlsYm94OwogCQl9CiAKIAkJaWYgKG10aGNhX3BhdGhfc2V0KGRldiwgJmF0dHItPmFsdF9haF9hdHRyLCAmcXBfY29udGV4dC0+YWx0X3BhdGgsCiAJCQkJICAgYXR0ci0+YWx0X2FoX2F0dHIucG9ydF9udW0pKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIG91dF9tYWlsYm94OwogCiAJCXFwX2NvbnRleHQtPmFsdF9wYXRoLnBvcnRfcGtleSB8PSBjcHVfdG9fYmUzMihhdHRyLT5hbHRfcGtleV9pbmRleCB8CiAJCQkJCQkJICAgICAgYXR0ci0+YWx0X3BvcnRfbnVtIDw8IDI0KTsKQEAgLTc5MywxMiArNzk3LDEyIEBACiAJZXJyID0gbXRoY2FfTU9ESUZZX1FQKGRldiwgY3VyX3N0YXRlLCBuZXdfc3RhdGUsIHFwLT5xcG4sIDAsCiAJCQkgICAgICBtYWlsYm94LCBzcWRfZXZlbnQsICZzdGF0dXMpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9tYWlsYm94OwogCWlmIChzdGF0dXMpIHsKIAkJbXRoY2Ffd2FybihkZXYsICJtb2RpZnkgUVAgJWQtPiVkIHJldHVybmVkIHN0YXR1cyAlMDJ4LlxuIiwKIAkJCSAgIGN1cl9zdGF0ZSwgbmV3X3N0YXRlLCBzdGF0dXMpOwogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbWFpbGJveDsKIAl9CiAKIAlxcC0+c3RhdGUgPSBuZXdfc3RhdGU7CkBAIC04NTMsOCArODU3LDExIEBACiAJCX0KIAl9CiAKLW91dDoKK291dF9tYWlsYm94OgogCW10aGNhX2ZyZWVfbWFpbGJveChkZXYsIG1haWxib3gpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZxcC0+bXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExMDAsNiArMTEwNyw3IEBACiAKIAlxcC0+cmVmY291bnQgPSAxOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnFwLT53YWl0KTsKKwltdXRleF9pbml0KCZxcC0+bXV0ZXgpOwogCXFwLT5zdGF0ZSAgICAJID0gSUJfUVBTX1JFU0VUOwogCXFwLT5hdG9taWNfcmRfZW4gPSAwOwogCXFwLT5yZXNwX2RlcHRoICAgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Jlc2V0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYwppbmRleCBkZjVlNDk0Li5mNGZkZGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYwpAQCAtNDksNiArNDksMTIgQEAKIAl1MzIgKmhjYV9oZWFkZXIgICAgPSBOVUxMOwogCXUzMiAqYnJpZGdlX2hlYWRlciA9IE5VTEw7CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IE5VTEw7CisJaW50IGJyaWRnZV9wY2l4X2NhcCA9IDA7CisJaW50IGhjYV9wY2llX2NhcCA9IDA7CisJaW50IGhjYV9wY2l4X2NhcCA9IDA7CisKKwl1MTYgZGV2Y3RsOworCXUxNiBsaW5rY3RsOwogCiAjZGVmaW5lIE1USENBX1JFU0VUX09GRlNFVCAweGYwMDEwCiAjZGVmaW5lIE1USENBX1JFU0VUX1ZBTFVFICBzd2FiMzIoMSkKQEAgLTExMCw2ICsxMTYsOSBAQAogCQl9CiAJfQogCisJaGNhX3BjaXhfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShtZGV2LT5wZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOworCWhjYV9wY2llX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkobWRldi0+cGRldiwgUENJX0NBUF9JRF9FWFApOworCiAJaWYgKGJyaWRnZSkgewogCQlicmlkZ2VfaGVhZGVyID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJyaWRnZV9oZWFkZXIpIHsKQEAgLTEyOSw2ICsxMzgsMTMgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQorCQlicmlkZ2VfcGNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGJyaWRnZSwgUENJX0NBUF9JRF9QQ0lYKTsKKwkJaWYgKCFicmlkZ2VfcGNpeF9jYXApIHsKKwkJCQllcnIgPSAtRU5PREVWOworCQkJCW10aGNhX2VycihtZGV2LCAiQ291bGRuJ3QgbG9jYXRlIEhDQSBicmlkZ2UgIgorCQkJCQkgICJQQ0ktWCBjYXBhYmlsaXR5LCBhYm9ydGluZy5cbiIpOworCQkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJLyogYWN0dWFsbHkgaGl0IHJlc2V0ICovCkBAIC0xNzgsNiArMTk0LDIwIEBACiBnb29kOgogCS8qIE5vdyByZXN0b3JlIHRoZSBQQ0kgaGVhZGVycyAqLwogCWlmIChicmlkZ2UpIHsKKwkJaWYgKHBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBicmlkZ2VfcGNpeF9jYXAgKyAweDgsCisJCQkJIGJyaWRnZV9oZWFkZXJbKGJyaWRnZV9wY2l4X2NhcCArIDB4OCkgLyA0XSkpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQltdGhjYV9lcnIobWRldiwgIkNvdWxkbid0IHJlc3RvcmUgSENBIGJyaWRnZSBVcHN0cmVhbSAiCisJCQkJICAic3BsaXQgdHJhbnNhY3Rpb24gY29udHJvbCwgYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgYnJpZGdlX3BjaXhfY2FwICsgMHhjLAorCQkJCSBicmlkZ2VfaGVhZGVyWyhicmlkZ2VfcGNpeF9jYXAgKyAweGMpIC8gNF0pKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJbXRoY2FfZXJyKG1kZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBicmlkZ2UgRG93bnN0cmVhbSAiCisJCQkJICAic3BsaXQgdHJhbnNhY3Rpb24gY29udHJvbCwgYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCS8qCiAJCSAqIEJyaWRnZSBjb250cm9sIHJlZ2lzdGVyIGlzIGF0IDB4M2UsIHNvIHdlJ2xsCiAJCSAqIG5hdHVyYWxseSByZXN0b3JlIGl0IGxhc3QgaW4gdGhpcyBsb29wLgpAQCAtMjAzLDYgKzIzMywzNSBAQAogCQl9CiAJfQogCisJaWYgKGhjYV9wY2l4X2NhcCkgeworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19kd29yZChtZGV2LT5wZGV2LCBoY2FfcGNpeF9jYXAsCisJCQkJIGhjYV9oZWFkZXJbaGNhX3BjaXhfY2FwIC8gNF0pKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJbXRoY2FfZXJyKG1kZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBQQ0ktWCAiCisJCQkJICAiY29tbWFuZCByZWdpc3RlciwgYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGhjYV9wY2llX2NhcCkgeworCQlkZXZjdGwgPSBoY2FfaGVhZGVyWyhoY2FfcGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCkgLyA0XTsKKwkJaWYgKHBjaV93cml0ZV9jb25maWdfd29yZChtZGV2LT5wZGV2LCBoY2FfcGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwKKwkJCQkJICAgZGV2Y3RsKSkgeworCQkJZXJyID0gLUVOT0RFVjsKKwkJCW10aGNhX2VycihtZGV2LCAiQ291bGRuJ3QgcmVzdG9yZSBIQ0EgUENJIEV4cHJlc3MgIgorCQkJCSAgIkRldmljZSBDb250cm9sIHJlZ2lzdGVyLCBhYm9ydGluZy5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJbGlua2N0bCA9IGhjYV9oZWFkZXJbKGhjYV9wY2llX2NhcCArIFBDSV9FWFBfTE5LQ1RMKSAvIDRdOworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ193b3JkKG1kZXYtPnBkZXYsIGhjYV9wY2llX2NhcCArIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkgICBsaW5rY3RsKSkgeworCQkJZXJyID0gLUVOT0RFVjsKKwkJCW10aGNhX2VycihtZGV2LCAiQ291bGRuJ3QgcmVzdG9yZSBIQ0EgUENJIEV4cHJlc3MgIgorCQkJCSAgIkxpbmsgY29udHJvbCByZWdpc3RlciwgYWJvcnRpbmcuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCiAJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKIAkJaWYgKGkgKiA0ID09IFBDSV9DT01NQU5EKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKaW5kZXggMWVhNDMzMi4uZmFiNDE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwpAQCAtMjQzLDYgKzI0Myw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNycS0+bG9jayk7CiAJc3JxLT5yZWZjb3VudCA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc3JxLT53YWl0KTsKKwltdXRleF9pbml0KCZzcnEtPm11dGV4KTsKIAogCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCiAJCW10aGNhX2FyYmVsX2luaXRfc3JxX2NvbnRleHQoZGV2LCBwZCwgc3JxLCBtYWlsYm94LT5idWYpOwpAQCAtMzcxLDcgKzM3MiwxMSBAQAogCWlmIChhdHRyX21hc2sgJiBJQl9TUlFfTElNSVQpIHsKIAkJaWYgKGF0dHItPnNycV9saW1pdCA+IHNycS0+bWF4KQogCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbXV0ZXhfbG9jaygmc3JxLT5tdXRleCk7CiAJCXJldCA9IG10aGNhX0FSTV9TUlEoZGV2LCBzcnEtPnNycW4sIGF0dHItPnNycV9saW1pdCwgJnN0YXR1cyk7CisJCW11dGV4X3VubG9jaygmc3JxLT5tdXRleCk7CisKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCWlmIChzdGF0dXMpCkBAIC00OTAsMjYgKzQ5NSw3IEBACiAKIAlmaXJzdF9pbmQgPSBzcnEtPmZpcnN0X2ZyZWU7CiAKLQlmb3IgKG5yZXEgPSAwOyB3cjsgKytucmVxLCB3ciA9IHdyLT5uZXh0KSB7Ci0JCWlmICh1bmxpa2VseShucmVxID09IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCKSkgewotCQkJbnJlcSA9IDA7Ci0KLQkJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoZmlyc3RfaW5kIDw8IHNycS0+d3FlX3NoaWZ0KTsKLQkJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIoc3JxLT5zcnFuIDw8IDgpOwotCi0JCQkvKgotCQkJICogTWFrZSBzdXJlIHRoYXQgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4KLQkJCSAqIGJlZm9yZSBkb29yYmVsbCBpcyBydW5nLgotCQkJICovCi0JCQl3bWIoKTsKLQotCQkJbXRoY2Ffd3JpdGU2NChkb29yYmVsbCwKLQkJCQkgICAgICBkZXYtPmthciArIE1USENBX1JFQ0VJVkVfRE9PUkJFTEwsCi0JCQkJICAgICAgTVRIQ0FfR0VUX0RPT1JCRUxMX0xPQ0soJmRldi0+ZG9vcmJlbGxfbG9jaykpOwotCi0JCQlmaXJzdF9pbmQgPSBzcnEtPmZpcnN0X2ZyZWU7Ci0JCX0KLQorCWZvciAobnJlcSA9IDA7IHdyOyB3ciA9IHdyLT5uZXh0KSB7CiAJCWluZCA9IHNycS0+Zmlyc3RfZnJlZTsKIAogCQlpZiAoaW5kIDwgMCkgewpAQCAtNTY5LDYgKzU1NSwyNiBAQAogCiAJCXNycS0+d3JpZFtpbmRdICA9IHdyLT53cl9pZDsKIAkJc3JxLT5maXJzdF9mcmVlID0gbmV4dF9pbmQ7CisKKwkJKytucmVxOworCQlpZiAodW5saWtlbHkobnJlcSA9PSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQikpIHsKKwkJCW5yZXEgPSAwOworCisJCQlkb29yYmVsbFswXSA9IGNwdV90b19iZTMyKGZpcnN0X2luZCA8PCBzcnEtPndxZV9zaGlmdCk7CisJCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKHNycS0+c3JxbiA8PCA4KTsKKworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB0aGF0IGRlc2NyaXB0b3JzIGFyZSB3cml0dGVuCisJCQkgKiBiZWZvcmUgZG9vcmJlbGwgaXMgcnVuZy4KKwkJCSAqLworCQkJd21iKCk7CisKKwkJCW10aGNhX3dyaXRlNjQoZG9vcmJlbGwsCisJCQkJICAgICAgZGV2LT5rYXIgKyBNVEhDQV9SRUNFSVZFX0RPT1JCRUxMLAorCQkJCSAgICAgIE1USENBX0dFVF9ET09SQkVMTF9MT0NLKCZkZXYtPmRvb3JiZWxsX2xvY2spKTsKKworCQkJZmlyc3RfaW5kID0gc3JxLT5maXJzdF9mcmVlOworCQl9CiAJfQogCiAJaWYgKGxpa2VseShucmVxKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDEyYTFlMDUuLjQ5MWQyYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTI3Miw4ICsyNzIsNyBAQAogdm9pZCBpcG9pYl9kZXZfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogdm9pZCBpcG9pYl9tY2FzdF9qb2luX3Rhc2sodm9pZCAqZGV2X3B0cik7Ci12b2lkIGlwb2liX21jYXN0X3NlbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5pb24gaWJfZ2lkICptZ2lkLAotCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXBvaWJfbWNhc3Rfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICptZ2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogdm9pZCBpcG9pYl9tY2FzdF9yZXN0YXJ0X3Rhc2sodm9pZCAqZGV2X3B0cik7CiBpbnQgaXBvaWJfbWNhc3Rfc3RhcnRfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMzY5LDE1ICszNjgsMjYgQEAKICNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBICovCiAKIAotI2RlZmluZSBJUE9JQl9HSURfRk1UCQkiJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXgiCisjZGVmaW5lIElQT0lCX0dJRF9GTVQJCSIlMi4yeCUyLjJ4OiUyLjJ4JTIuMng6JTIuMnglMi4yeDolMi4yeCUyLjJ4OiIgXAorCQkJCSIlMi4yeCUyLjJ4OiUyLjJ4JTIuMng6JTIuMnglMi4yeDolMi4yeCUyLjJ4IgogCi0jZGVmaW5lIElQT0lCX0dJRF9BUkcoZ2lkKQliZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAoKGdpZCkucmF3ICsgIDApKSwgXAotCQkJCWJlMTZfdG9fY3B1cCgoX19iZTE2ICopICgoZ2lkKS5yYXcgKyAgMikpLCBcCi0JCQkJYmUxNl90b19jcHVwKChfX2JlMTYgKikgKChnaWQpLnJhdyArICA0KSksIFwKLQkJCQliZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAoKGdpZCkucmF3ICsgIDYpKSwgXAotCQkJCWJlMTZfdG9fY3B1cCgoX19iZTE2ICopICgoZ2lkKS5yYXcgKyAgOCkpLCBcCi0JCQkJYmUxNl90b19jcHVwKChfX2JlMTYgKikgKChnaWQpLnJhdyArIDEwKSksIFwKLQkJCQliZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSAoKGdpZCkucmF3ICsgMTIpKSwgXAotCQkJCWJlMTZfdG9fY3B1cCgoX19iZTE2ICopICgoZ2lkKS5yYXcgKyAxNCkpCisjZGVmaW5lIElQT0lCX0dJRF9SQVdfQVJHKGdpZCkJKCh1OCAqKShnaWQpKVswXSwgXAorCQkJCSgodTggKikoZ2lkKSlbMV0sIFwKKwkJCQkoKHU4ICopKGdpZCkpWzJdLCBcCisJCQkJKCh1OCAqKShnaWQpKVszXSwgXAorCQkJCSgodTggKikoZ2lkKSlbNF0sIFwKKwkJCQkoKHU4ICopKGdpZCkpWzVdLCBcCisJCQkJKCh1OCAqKShnaWQpKVs2XSwgXAorCQkJCSgodTggKikoZ2lkKSlbN10sIFwKKwkJCQkoKHU4ICopKGdpZCkpWzhdLCBcCisJCQkJKCh1OCAqKShnaWQpKVs5XSwgXAorCQkJCSgodTggKikoZ2lkKSlbMTBdLFwKKwkJCQkoKHU4ICopKGdpZCkpWzExXSxcCisJCQkJKCh1OCAqKShnaWQpKVsxMl0sXAorCQkJCSgodTggKikoZ2lkKSlbMTNdLFwKKwkJCQkoKHU4ICopKGdpZCkpWzE0XSxcCisJCQkJKCh1OCAqKShnaWQpKVsxNV0KKworI2RlZmluZSBJUE9JQl9HSURfQVJHKGdpZCkJSVBPSUJfR0lEX1JBV19BUkcoKGdpZCkucmF3KQogCiAjZW5kaWYgLyogX0lQT0lCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwppbmRleCBhNTRkYTQyLi41MDMzNjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCkBAIC04NCwxNSArODQsOSBAQAogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICgoaW50KSBwcml2LT50eF90YWlsIC0gKGludCkgYWgtPmxhc3Rfc2VuZCA+PSAwKSB7Ci0JCWlwb2liX2RiZyhwcml2LCAiRnJlZWluZyBhaCAlcFxuIiwgYWgtPmFoKTsKLQkJaWJfZGVzdHJveV9haChhaC0+YWgpOwotCQlrZnJlZShhaCk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJbGlzdF9hZGRfdGFpbCgmYWgtPmxpc3QsICZwcml2LT5kZWFkX2Focyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZhaC0+bGlzdCwgJnByaXYtPmRlYWRfYWhzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgaXBvaWJfaWJfcG9zdF9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZCkKQEAgLTI3NSw2ICsyNjksNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCQkrK3ByaXYtPnR4X3RhaWw7CiAJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYKKwkJICAgIHRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fVVAsICZwcml2LT5mbGFncykgJiYKIAkJICAgIHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsIDw9IGlwb2liX3NlbmRxX3NpemUgPj4gMSkKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwpAQCAtMzc2LDE5ICszNzEsMTYgQEAKIAlzdHJ1Y3QgaXBvaWJfYWggKmFoLCAqdGFoOwogCUxJU1RfSEVBRChyZW1vdmVfbGlzdCk7CiAKLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhaCwgdGFoLCAmcHJpdi0+ZGVhZF9haHMsIGxpc3QpCiAJCWlmICgoaW50KSBwcml2LT50eF90YWlsIC0gKGludCkgYWgtPmxhc3Rfc2VuZCA+PSAwKSB7CiAJCQlsaXN0X2RlbCgmYWgtPmxpc3QpOwotCQkJbGlzdF9hZGRfdGFpbCgmYWgtPmxpc3QsICZyZW1vdmVfbGlzdCk7CisJCQlpYl9kZXN0cm95X2FoKGFoLT5haCk7CisJCQlrZnJlZShhaCk7CiAJCX0KLQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFoLCB0YWgsICZyZW1vdmVfbGlzdCwgbGlzdCkgewotCQlpcG9pYl9kYmcocHJpdiwgIlJlYXBpbmcgYWggJXBcbiIsIGFoLT5haCk7Ci0JCWliX2Rlc3Ryb3lfYWgoYWgtPmFoKTsKLQkJa2ZyZWUoYWgpOwotCX0KKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKIH0KIAogdm9pZCBpcG9pYl9yZWFwX2FoKHZvaWQgKmRldl9wdHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IGNiMDc4YTcuLjFjNmVhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC0xODUsOCArMTg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcG9pYl9wYXRoICpfX3BhdGhfZmluZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgIHVuaW9uIGliX2dpZCAqZ2lkKQorc3RhdGljIHN0cnVjdCBpcG9pYl9wYXRoICpfX3BhdGhfZmluZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpnaWQpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHByaXYtPnBhdGhfdHJlZS5yYl9ub2RlOwpAQCAtMTk2LDcgKzE5NSw3IEBACiAJd2hpbGUgKG4pIHsKIAkJcGF0aCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBpcG9pYl9wYXRoLCByYl9ub2RlKTsKIAotCQlyZXQgPSBtZW1jbXAoZ2lkLT5yYXcsIHBhdGgtPnBhdGhyZWMuZGdpZC5yYXcsCisJCXJldCA9IG1lbWNtcChnaWQsIHBhdGgtPnBhdGhyZWMuZGdpZC5yYXcsCiAJCQkgICAgIHNpemVvZiAodW5pb24gaWJfZ2lkKSk7CiAKIAkJaWYgKHJldCA8IDApCkBAIC00MjQsOCArNDIzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aF9yZWNfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgdW5pb24gaWJfZ2lkICpnaWQpCitzdGF0aWMgc3RydWN0IGlwb2liX3BhdGggKnBhdGhfcmVjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpnaWQpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aDsKQEAgLTQ0MCw3ICs0MzgsNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnBhdGgtPm5laWdoX2xpc3QpOwogCi0JbWVtY3B5KHBhdGgtPnBhdGhyZWMuZGdpZC5yYXcsIGdpZC0+cmF3LCBzaXplb2YgKHVuaW9uIGliX2dpZCkpOworCW1lbWNweShwYXRoLT5wYXRocmVjLmRnaWQucmF3LCBnaWQsIHNpemVvZiAodW5pb24gaWJfZ2lkKSk7CiAJcGF0aC0+cGF0aHJlYy5zZ2lkICAgICAgPSBwcml2LT5sb2NhbF9naWQ7CiAJcGF0aC0+cGF0aHJlYy5wa2V5ICAgICAgPSBjcHVfdG9fYmUxNihwcml2LT5wa2V5KTsKIAlwYXRoLT5wYXRocmVjLm51bWJfcGF0aCA9IDE7CkBAIC00OTgsMTAgKzQ5Niw5IEBACiAJICovCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAotCXBhdGggPSBfX3BhdGhfZmluZChkZXYsICh1bmlvbiBpYl9naWQgKikgKHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhICsgNCkpOworCXBhdGggPSBfX3BhdGhfZmluZChkZXYsIHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhICsgNCk7CiAJaWYgKCFwYXRoKSB7Ci0JCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LAotCQkJCSAgICAgICAodW5pb24gaWJfZ2lkICopIChza2ItPmRzdC0+bmVpZ2hib3VyLT5oYSArIDQpKTsKKwkJcGF0aCA9IHBhdGhfcmVjX2NyZWF0ZShkZXYsIHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhICsgNCk7CiAJCWlmICghcGF0aCkKIAkJCWdvdG8gZXJyX3BhdGg7CiAKQEAgLTU1MSw3ICs1NDgsNyBAQAogCS8qIEFkZCBpbiB0aGUgUF9LZXkgZm9yIG11bHRpY2FzdHMgKi8KIAlza2ItPmRzdC0+bmVpZ2hib3VyLT5oYVs4XSA9IChwcml2LT5wa2V5ID4+IDgpICYgMHhmZjsKIAlza2ItPmRzdC0+bmVpZ2hib3VyLT5oYVs5XSA9IHByaXYtPnBrZXkgJiAweGZmOwotCWlwb2liX21jYXN0X3NlbmQoZGV2LCAodW5pb24gaWJfZ2lkICopIChza2ItPmRzdC0+bmVpZ2hib3VyLT5oYSArIDQpLCBza2IpOworCWlwb2liX21jYXN0X3NlbmQoZGV2LCBza2ItPmRzdC0+bmVpZ2hib3VyLT5oYSArIDQsIHNrYik7CiB9CiAKIHN0YXRpYyB2b2lkIHVuaWNhc3RfYXJwX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU2NiwxMCArNTYzLDkgQEAKIAkgKi8KIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCi0JcGF0aCA9IF9fcGF0aF9maW5kKGRldiwgKHVuaW9uIGliX2dpZCAqKSAocGhkci0+aHdhZGRyICsgNCkpOworCXBhdGggPSBfX3BhdGhfZmluZChkZXYsIHBoZHItPmh3YWRkciArIDQpOwogCWlmICghcGF0aCkgewotCQlwYXRoID0gcGF0aF9yZWNfY3JlYXRlKGRldiwKLQkJCQkgICAgICAgKHVuaW9uIGliX2dpZCAqKSAocGhkci0+aHdhZGRyICsgNCkpOworCQlwYXRoID0gcGF0aF9yZWNfY3JlYXRlKGRldiwgcGhkci0+aHdhZGRyICsgNCk7CiAJCWlmIChwYXRoKSB7CiAJCQkvKiBwdXQgcHNldWRvaGVhZGVyIGJhY2sgb24gZm9yIG5leHQgdGltZSAqLwogCQkJc2tiX3B1c2goc2tiLCBzaXplb2YgKnBoZHIpOwpAQCAtNjYwLDcgKzY1Niw3IEBACiAJCQlwaGRyLT5od2FkZHJbOF0gPSAocHJpdi0+cGtleSA+PiA4KSAmIDB4ZmY7CiAJCQlwaGRyLT5od2FkZHJbOV0gPSBwcml2LT5wa2V5ICYgMHhmZjsKIAotCQkJaXBvaWJfbWNhc3Rfc2VuZChkZXYsICh1bmlvbiBpYl9naWQgKikgKHBoZHItPmh3YWRkciArIDQpLCBza2IpOworCQkJaXBvaWJfbWNhc3Rfc2VuZChkZXYsIHBoZHItPmh3YWRkciArIDQsIHNrYik7CiAJCX0gZWxzZSB7CiAJCQkvKiB1bmljYXN0IEdJRCAtLSBzaG91bGQgYmUgQVJQIG9yIFJBUlAgcmVwbHkgKi8KIApAQCAtNjcxLDcgKzY2Nyw3IEBACiAJCQkJCSAgIHNrYi0+ZHN0ID8gIm5laWdoIiA6ICJkc3QiLAogCQkJCQkgICBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSBza2ItPmRhdGEpLAogCQkJCQkgICBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSBwaGRyLT5od2FkZHIpLAotCQkJCQkgICBJUE9JQl9HSURfQVJHKCoodW5pb24gaWJfZ2lkICopIChwaGRyLT5od2FkZHIgKyA0KSkpOworCQkJCQkgICBJUE9JQl9HSURfUkFXX0FSRyhwaGRyLT5od2FkZHIgKyA0KSk7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCQkrK3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCQkJZ290byBvdXQ7CkBAIC03NTQsNyArNzUwLDcgQEAKIAlpcG9pYl9kYmcocHJpdiwKIAkJICAibmVpZ2hfZGVzdHJ1Y3RvciBmb3IgJTA2eCAiIElQT0lCX0dJRF9GTVQgIlxuIiwKIAkJICBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSBuLT5oYSksCi0JCSAgSVBPSUJfR0lEX0FSRygqKCh1bmlvbiBpYl9naWQgKikgKG4tPmhhICsgNCkpKSk7CisJCSAgSVBPSUJfR0lEX1JBV19BUkcobi0+aGEgKyA0KSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCAxZGFlNGIyLi4yMTY0NzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXJldHVybiBtY2FzdDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcG9pYl9tY2FzdCAqX19pcG9pYl9tY2FzdF9maW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuaW9uIGliX2dpZCAqbWdpZCkKK3N0YXRpYyBzdHJ1Y3QgaXBvaWJfbWNhc3QgKl9faXBvaWJfbWNhc3RfZmluZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICptZ2lkKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHJiX25vZGUgKm4gPSBwcml2LT5tdWx0aWNhc3RfdHJlZS5yYl9ub2RlOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKIAkJbWNhc3QgPSByYl9lbnRyeShuLCBzdHJ1Y3QgaXBvaWJfbWNhc3QsIHJiX25vZGUpOwogCi0JCXJldCA9IG1lbWNtcChtZ2lkLT5yYXcsIG1jYXN0LT5tY21lbWJlci5tZ2lkLnJhdywKKwkJcmV0ID0gbWVtY21wKG1naWQsIG1jYXN0LT5tY21lbWJlci5tZ2lkLnJhdywKIAkJCSAgICAgc2l6ZW9mICh1bmlvbiBpYl9naWQpKTsKIAkJaWYgKHJldCA8IDApCiAJCQluID0gbi0+cmJfbGVmdDsKQEAgLTY5NCw4ICs2OTQsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGlwb2liX21jYXN0X3NlbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5pb24gaWJfZ2lkICptZ2lkLAotCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBpcG9pYl9tY2FzdF9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKm1naWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBvaWJfbWNhc3QgKm1jYXN0OwpAQCAtNzE4LDcgKzcxNyw3IEBACiAJaWYgKCFtY2FzdCkgewogCQkvKiBMZXQncyBjcmVhdGUgYSBuZXcgc2VuZCBvbmx5IGdyb3VwIG5vdyAqLwogCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgInNldHRpbmcgdXAgc2VuZCBvbmx5IG11bHRpY2FzdCBncm91cCBmb3IgIgotCQkJCUlQT0lCX0dJRF9GTVQgIlxuIiwgSVBPSUJfR0lEX0FSRygqbWdpZCkpOworCQkJCUlQT0lCX0dJRF9GTVQgIlxuIiwgSVBPSUJfR0lEX1JBV19BUkcobWdpZCkpOwogCiAJCW1jYXN0ID0gaXBvaWJfbWNhc3RfYWxsb2MoZGV2LCAwKTsKIAkJaWYgKCFtY2FzdCkgewpAQCAtNzMwLDcgKzcyOSw3IEBACiAJCX0KIAogCQlzZXRfYml0KElQT0lCX01DQVNUX0ZMQUdfU0VORE9OTFksICZtY2FzdC0+ZmxhZ3MpOwotCQltY2FzdC0+bWNtZW1iZXIubWdpZCA9ICptZ2lkOworCQltZW1jcHkobWNhc3QtPm1jbWVtYmVyLm1naWQucmF3LCBtZ2lkLCBzaXplb2YgKHVuaW9uIGliX2dpZCkpOwogCQlfX2lwb2liX21jYXN0X2FkZChkZXYsIG1jYXN0KTsKIAkJbGlzdF9hZGRfdGFpbCgmbWNhc3QtPmxpc3QsICZwcml2LT5tdWx0aWNhc3RfbGlzdCk7CiAJfQpAQCAtODIxLDcgKzgyMCw4IEBACiAKIAlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYsIDApOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+eG1pdF9sb2NrLCBmbGFncyk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW5ldGlmX3R4X2xvY2soZGV2KTsKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCiAJLyoKQEAgLTg5Niw3ICs4OTYsOCBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnhtaXRfbG9jaywgZmxhZ3MpOworCW5ldGlmX3R4X3VubG9jayhkZXYpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCS8qIFdlIGhhdmUgdG8gY2FuY2VsIG91dHNpZGUgb2YgdGhlIHNwaW5sb2NrICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1jYXN0LCB0bWNhc3QsICZyZW1vdmVfbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCmluZGV4IDFkNDlkMTYuLjdiNzE3YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKQEAgLTI1NSw3ICsyNTUsOCBAQAogCSAgICByZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1BLRVlfQ0hBTkdFIHx8CiAJICAgIHJlY29yZC0+ZXZlbnQgPT0gSUJfRVZFTlRfUE9SVF9BQ1RJVkUgfHwKIAkgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9MSURfQ0hBTkdFICB8fAotCSAgICByZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1NNX0NIQU5HRSkgeworCSAgICByZWNvcmQtPmV2ZW50ID09IElCX0VWRU5UX1NNX0NIQU5HRSAgIHx8CisJICAgIHJlY29yZC0+ZXZlbnQgPT0gSUJfRVZFTlRfQ0xJRU5UX1JFUkVHSVNURVIpIHsKIAkJaXBvaWJfZGJnKHByaXYsICJQb3J0IHN0YXRlIGNoYW5nZSBldmVudFxuIik7CiAJCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Zmx1c2hfdGFzayk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCA5Y2JkZmZhLi40ZTIyYWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtNjIsNiArNjIsMTMgQEAKIAkJICAgInYiIERSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIikiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAorc3RhdGljIGludCBzcnBfc2dfdGFibGVzaXplID0gU1JQX0RFRl9TR19UQUJMRVNJWkU7CitzdGF0aWMgaW50IHNycF9tYXhfaXVfbGVuOworCittb2R1bGVfcGFyYW0oc3JwX3NnX3RhYmxlc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3JwX3NnX3RhYmxlc2l6ZSwKKwkJICJNYXggbnVtYmVyIG9mIGdhdGhlci9zY2F0dGVyIGVudHJpZXMgcGVyIEkvTyAoZGVmYXVsdCBpcyAxMikiKTsKKwogc3RhdGljIGludCB0b3BzcGluX3dvcmthcm91bmRzID0gMTsKIAogbW9kdWxlX3BhcmFtKHRvcHNwaW5fd29ya2Fyb3VuZHMsIGludCwgMDQ0NCk7CkBAIC0xMDUsNyArMTEyLDggQEAKIAlpZiAoIWl1LT5idWYpCiAJCWdvdG8gb3V0X2ZyZWVfaXU7CiAKLQlpdS0+ZG1hID0gZG1hX21hcF9zaW5nbGUoaG9zdC0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+YnVmLCBzaXplLCBkaXJlY3Rpb24pOworCWl1LT5kbWEgPSBkbWFfbWFwX3NpbmdsZShob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwKKwkJCQkgaXUtPmJ1Ziwgc2l6ZSwgZGlyZWN0aW9uKTsKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3IoaXUtPmRtYSkpCiAJCWdvdG8gb3V0X2ZyZWVfYnVmOwogCkBAIC0xMjcsNyArMTM1LDggQEAKIAlpZiAoIWl1KQogCQlyZXR1cm47CiAKLQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldi0+ZG1hX2RldmljZSwgaXUtPmRtYSwgaXUtPnNpemUsIGl1LT5kaXJlY3Rpb24pOworCWRtYV91bm1hcF9zaW5nbGUoaG9zdC0+ZGV2LT5kZXYtPmRtYV9kZXZpY2UsCisJCQkgaXUtPmRtYSwgaXUtPnNpemUsIGl1LT5kaXJlY3Rpb24pOwogCWtmcmVlKGl1LT5idWYpOwogCWtmcmVlKGl1KTsKIH0KQEAgLTE0Nyw3ICsxNTYsNyBAQAogCWlmICghYXR0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBpYl9maW5kX2NhY2hlZF9wa2V5KHRhcmdldC0+c3JwX2hvc3QtPmRldiwKKwlyZXQgPSBpYl9maW5kX2NhY2hlZF9wa2V5KHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LAogCQkJCSAgdGFyZ2V0LT5zcnBfaG9zdC0+cG9ydCwKIAkJCQkgIGJlMTZfdG9fY3B1KHRhcmdldC0+cGF0aC5wa2V5KSwKIAkJCQkgICZhdHRyLT5wa2V5X2luZGV4KTsKQEAgLTE3OSw3ICsxODgsNyBAQAogCWlmICghaW5pdF9hdHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXRhcmdldC0+Y3EgPSBpYl9jcmVhdGVfY3EodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LCBzcnBfY29tcGxldGlvbiwKKwl0YXJnZXQtPmNxID0gaWJfY3JlYXRlX2NxKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LCBzcnBfY29tcGxldGlvbiwKIAkJCQkgIE5VTEwsIHRhcmdldCwgU1JQX0NRX1NJWkUpOwogCWlmIChJU19FUlIodGFyZ2V0LT5jcSkpIHsKIAkJcmV0ID0gUFRSX0VSUih0YXJnZXQtPmNxKTsKQEAgLTE5OCw3ICsyMDcsNyBAQAogCWluaXRfYXR0ci0+c2VuZF9jcSAgICAgICAgICAgICA9IHRhcmdldC0+Y3E7CiAJaW5pdF9hdHRyLT5yZWN2X2NxICAgICAgICAgICAgID0gdGFyZ2V0LT5jcTsKIAotCXRhcmdldC0+cXAgPSBpYl9jcmVhdGVfcXAodGFyZ2V0LT5zcnBfaG9zdC0+cGQsIGluaXRfYXR0cik7CisJdGFyZ2V0LT5xcCA9IGliX2NyZWF0ZV9xcCh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPnBkLCBpbml0X2F0dHIpOwogCWlmIChJU19FUlIodGFyZ2V0LT5xcCkpIHsKIAkJcmV0ID0gUFRSX0VSUih0YXJnZXQtPnFwKTsKIAkJaWJfZGVzdHJveV9jcSh0YXJnZXQtPmNxKTsKQEAgLTI1MCw3ICsyNTksNyBAQAogCiAJaW5pdF9jb21wbGV0aW9uKCZ0YXJnZXQtPmRvbmUpOwogCi0JdGFyZ2V0LT5wYXRoX3F1ZXJ5X2lkID0gaWJfc2FfcGF0aF9yZWNfZ2V0KHRhcmdldC0+c3JwX2hvc3QtPmRldiwKKwl0YXJnZXQtPnBhdGhfcXVlcnlfaWQgPSBpYl9zYV9wYXRoX3JlY19nZXQodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYsCiAJCQkJCQkgICB0YXJnZXQtPnNycF9ob3N0LT5wb3J0LAogCQkJCQkJICAgJnRhcmdldC0+cGF0aCwKIAkJCQkJCSAgIElCX1NBX1BBVEhfUkVDX0RHSUQJCXwKQEAgLTMwOSwxMCArMzE4LDMyIEBACiAKIAlyZXEtPnByaXYub3Bjb2RlICAgICAJPSBTUlBfTE9HSU5fUkVROwogCXJlcS0+cHJpdi50YWcgICAgICAgIAk9IDA7Ci0JcmVxLT5wcml2LnJlcV9pdF9pdV9sZW4gPSBjcHVfdG9fYmUzMihTUlBfTUFYX0lVX0xFTik7CisJcmVxLT5wcml2LnJlcV9pdF9pdV9sZW4gPSBjcHVfdG9fYmUzMihzcnBfbWF4X2l1X2xlbik7CiAJcmVxLT5wcml2LnJlcV9idWZfZm10IAk9IGNwdV90b19iZTE2KFNSUF9CVUZfRk9STUFUX0RJUkVDVCB8CiAJCQkJCSAgICAgIFNSUF9CVUZfRk9STUFUX0lORElSRUNUKTsKLQltZW1jcHkocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkLCB0YXJnZXQtPnNycF9ob3N0LT5pbml0aWF0b3JfcG9ydF9pZCwgMTYpOworCS8qCisJICogSW4gdGhlIHB1Ymxpc2hlZCBTUlAgc3BlY2lmaWNhdGlvbiAoZHJhZnQgcmV2LiAxNmEpLCB0aGUgCisJICogcG9ydCBpZGVudGlmaWVyIGZvcm1hdCBpcyA4IGJ5dGVzIG9mIElEIGV4dGVuc2lvbiBmb2xsb3dlZAorCSAqIGJ5IDggYnl0ZXMgb2YgR1VJRC4gIE9sZGVyIGRyYWZ0cyBwdXQgdGhlIHR3byBoYWx2ZXMgaW4gdGhlCisJICogb3Bwb3NpdGUgb3JkZXIsIHNvIHRoYXQgdGhlIEdVSUQgY29tZXMgZmlyc3QuCisJICoKKwkgKiBUYXJnZXRzIGNvbmZvcm1pbmcgdG8gdGhlc2Ugb2Jzb2xldGUgZHJhZnRzIGNhbiBiZQorCSAqIHJlY29nbml6ZWQgYnkgdGhlIEkvTyBDbGFzcyB0aGV5IHJlcG9ydC4KKwkgKi8KKwlpZiAodGFyZ2V0LT5pb19jbGFzcyA9PSBTUlBfUkVWMTBfSUJfSU9fQ0xBU1MpIHsKKwkJbWVtY3B5KHJlcS0+cHJpdi5pbml0aWF0b3JfcG9ydF9pZCwKKwkJICAgICAgIHRhcmdldC0+c3JwX2hvc3QtPmluaXRpYXRvcl9wb3J0X2lkICsgOCwgOCk7CisJCW1lbWNweShyZXEtPnByaXYuaW5pdGlhdG9yX3BvcnRfaWQgKyA4LAorCQkgICAgICAgdGFyZ2V0LT5zcnBfaG9zdC0+aW5pdGlhdG9yX3BvcnRfaWQsIDgpOworCQltZW1jcHkocmVxLT5wcml2LnRhcmdldF9wb3J0X2lkLCAgICAgJnRhcmdldC0+aW9jX2d1aWQsIDgpOworCQltZW1jcHkocmVxLT5wcml2LnRhcmdldF9wb3J0X2lkICsgOCwgJnRhcmdldC0+aWRfZXh0LCA4KTsKKwl9IGVsc2UgeworCQltZW1jcHkocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkLAorCQkgICAgICAgdGFyZ2V0LT5zcnBfaG9zdC0+aW5pdGlhdG9yX3BvcnRfaWQsIDE2KTsKKwkJbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCwgICAgICZ0YXJnZXQtPmlkX2V4dCwgOCk7CisJCW1lbWNweShyZXEtPnByaXYudGFyZ2V0X3BvcnRfaWQgKyA4LCAmdGFyZ2V0LT5pb2NfZ3VpZCwgOCk7CisJfQorCiAJLyoKIAkgKiBUb3BzcGluL0Npc2NvIFNSUCB0YXJnZXRzIHdpbGwgcmVqZWN0IG91ciBsb2dpbiB1bmxlc3Mgd2UKIAkgKiB6ZXJvIG91dCB0aGUgZmlyc3QgOCBieXRlcyBvZiBvdXIgaW5pdGlhdG9yIHBvcnQgSUQuICBUaGUKQEAgLTMyNSw4ICszNTYsNiBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUodGFyZ2V0LT5pb2NfZ3VpZCkpOwogCQltZW1zZXQocmVxLT5wcml2LmluaXRpYXRvcl9wb3J0X2lkLCAwLCA4KTsKIAl9Ci0JbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCwgICAgICZ0YXJnZXQtPmlkX2V4dCwgOCk7Ci0JbWVtY3B5KHJlcS0+cHJpdi50YXJnZXRfcG9ydF9pZCArIDgsICZ0YXJnZXQtPmlvY19ndWlkLCA4KTsKIAogCXN0YXR1cyA9IGliX3NlbmRfY21fcmVxKHRhcmdldC0+Y21faWQsICZyZXEtPnBhcmFtKTsKIApAQCAtMzU5LDkgKzM4OCw5IEBACiAJdGFyZ2V0LT5zdGF0ZSA9IFNSUF9UQVJHRVRfUkVNT1ZFRDsKIAlzcGluX3VubG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAKLQltdXRleF9sb2NrKCZ0YXJnZXQtPnNycF9ob3N0LT50YXJnZXRfbXV0ZXgpOworCXNwaW5fbG9jaygmdGFyZ2V0LT5zcnBfaG9zdC0+dGFyZ2V0X2xvY2spOwogCWxpc3RfZGVsKCZ0YXJnZXQtPmxpc3QpOwotCW11dGV4X3VubG9jaygmdGFyZ2V0LT5zcnBfaG9zdC0+dGFyZ2V0X211dGV4KTsKKwlzcGluX3VubG9jaygmdGFyZ2V0LT5zcnBfaG9zdC0+dGFyZ2V0X2xvY2spOwogCiAJc2NzaV9yZW1vdmVfaG9zdCh0YXJnZXQtPnNjc2lfaG9zdCk7CiAJaWJfZGVzdHJveV9jbV9pZCh0YXJnZXQtPmNtX2lkKTsKQEAgLTQyMSw2ICs0NTAsMTEgQEAKIAkgICAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBETUFfRlJPTV9ERVZJQ0UpKQogCQlyZXR1cm47CiAKKwlpZiAocmVxLT5mbXIpIHsKKwkJaWJfZm1yX3Bvb2xfdW5tYXAocmVxLT5mbXIpOworCQlyZXEtPmZtciA9IE5VTEw7CisJfQorCiAJLyoKIAkgKiBUaGlzIGhhbmRsaW5nIG9mIG5vbi1TRyBjb21tYW5kcyBjYW4gYmUga2lsbGVkIHdoZW4gdGhlCiAJICogU0NTSSBtaWRsYXllciBubyBsb25nZXIgZ2VuZXJhdGVzIG5vbi1TRyBjb21tYW5kcy4KQEAgLTQzMywxOCArNDY3LDMwIEBACiAJCXNjYXQgID0gJnJlcS0+ZmFrZV9zZzsKIAl9CiAKLQlkbWFfdW5tYXBfc2codGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kbWFfZGV2aWNlLCBzY2F0LCBuZW50cywKKwlkbWFfdW5tYXBfc2codGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYtPmRtYV9kZXZpY2UsIHNjYXQsIG5lbnRzLAogCQkgICAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7CiB9CiAKK3N0YXRpYyB2b2lkIHNycF9yZW1vdmVfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCit7CisJc3JwX3VubWFwX2RhdGEocmVxLT5zY21uZCwgdGFyZ2V0LCByZXEpOworCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZ0YXJnZXQtPmZyZWVfcmVxcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNycF9yZXNldF9yZXEoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXEtPnNjbW5kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CisJcmVxLT5zY21uZC0+c2NzaV9kb25lKHJlcS0+c2NtbmQpOworCXNycF9yZW1vdmVfcmVxKHRhcmdldCwgcmVxKTsKK30KKwogc3RhdGljIGludCBzcnBfcmVjb25uZWN0X3RhcmdldChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCiB7CiAJc3RydWN0IGliX2NtX2lkICpuZXdfY21faWQ7CiAJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKLQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwgKnRtcDsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CiAJaW50IHJldDsKLQlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CiAJaWYgKHRhcmdldC0+c3RhdGUgIT0gU1JQX1RBUkdFVF9MSVZFKSB7CkBAIC00NTksNyArNTA1LDcgQEAKIAkgKiBOb3cgZ2V0IGEgbmV3IGxvY2FsIENNIElEIHNvIHRoYXQgd2UgYXZvaWQgY29uZnVzaW5nIHRoZQogCSAqIHRhcmdldCBpbiBjYXNlIHRoaW5ncyBhcmUgcmVhbGx5IGZvdWxlZCB1cC4KIAkgKi8KLQluZXdfY21faWQgPSBpYl9jcmVhdGVfY21faWQodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LAorCW5ld19jbV9pZCA9IGliX2NyZWF0ZV9jbV9pZCh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldiwKIAkJCQkgICAgc3JwX2NtX2hhbmRsZXIsIHRhcmdldCk7CiAJaWYgKElTX0VSUihuZXdfY21faWQpKSB7CiAJCXJldCA9IFBUUl9FUlIobmV3X2NtX2lkKTsKQEAgLTQ4MCwxOSArNTI2LDEyIEBACiAJd2hpbGUgKGliX3BvbGxfY3EodGFyZ2V0LT5jcSwgMSwgJndjKSA+IDApCiAJCTsgLyogbm90aGluZyAqLwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZ0YXJnZXQtPnJlcV9xdWV1ZSwgbGlzdCkgewotCQlyZXEtPnNjbW5kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7Ci0JCXJlcS0+c2NtbmQtPnNjc2lfZG9uZShyZXEtPnNjbW5kKTsKLQkJc3JwX3VubWFwX2RhdGEocmVxLT5zY21uZCwgdGFyZ2V0LCByZXEpOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZ0YXJnZXQtPnJlcV9xdWV1ZSwgbGlzdCkKKwkJc3JwX3Jlc2V0X3JlcSh0YXJnZXQsIHJlcSk7CiAKIAl0YXJnZXQtPnJ4X2hlYWQJID0gMDsKIAl0YXJnZXQtPnR4X2hlYWQJID0gMDsKIAl0YXJnZXQtPnR4X3RhaWwgID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmdGFyZ2V0LT5mcmVlX3JlcXMpOwotCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPnJlcV9xdWV1ZSk7Ci0JZm9yIChpID0gMDsgaSA8IFNSUF9TUV9TSVpFOyArK2kpCi0JCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+cmVxX3JpbmdbaV0ubGlzdCwgJnRhcmdldC0+ZnJlZV9yZXFzKTsKIAogCXJldCA9IHNycF9jb25uZWN0X3RhcmdldCh0YXJnZXQpOwogCWlmIChyZXQpCkBAIC01MjgsMTQgKzU2Nyw3OSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc3JwX21hcF9mbXIoc3RydWN0IHNycF9kZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0LAorCQkgICAgICAgaW50IHNnX2NudCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEsCisJCSAgICAgICBzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKmJ1ZikKK3sKKwl1NjQgaW9fYWRkciA9IDA7CisJdTY0ICpkbWFfcGFnZXM7CisJdTMyIGxlbjsKKwlpbnQgcGFnZV9jbnQ7CisJaW50IGksIGo7CisJaW50IHJldDsKKworCWlmICghZGV2LT5mbXJfcG9vbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlsZW4gPSBwYWdlX2NudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNnX2NudDsgKytpKSB7CisJCWlmIChzZ19kbWFfYWRkcmVzcygmc2NhdFtpXSkgJiB+ZGV2LT5mbXJfcGFnZV9tYXNrKSB7CisJCQlpZiAoaSA+IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJKytwYWdlX2NudDsKKwkJfQorCQlpZiAoKHNnX2RtYV9hZGRyZXNzKCZzY2F0W2ldKSArIHNnX2RtYV9sZW4oJnNjYXRbaV0pKSAmCisJCSAgICB+ZGV2LT5mbXJfcGFnZV9tYXNrKSB7CisJCQlpZiAoaSA8IHNnX2NudCAtIDEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJKytwYWdlX2NudDsKKwkJfQorCisJCWxlbiArPSBzZ19kbWFfbGVuKCZzY2F0W2ldKTsKKwl9CisKKwlwYWdlX2NudCArPSBsZW4gPj4gZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlpZiAocGFnZV9jbnQgPiBTUlBfRk1SX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCisJZG1hX3BhZ2VzID0ga21hbGxvYyhzaXplb2YgKHU2NCkgKiBwYWdlX2NudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFkbWFfcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFnZV9jbnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzZ19jbnQ7ICsraSkKKwkJZm9yIChqID0gMDsgaiA8IHNnX2RtYV9sZW4oJnNjYXRbaV0pOyBqICs9IGRldi0+Zm1yX3BhZ2Vfc2l6ZSkKKwkJCWRtYV9wYWdlc1twYWdlX2NudCsrXSA9CisJCQkJKHNnX2RtYV9hZGRyZXNzKCZzY2F0W2ldKSAmIGRldi0+Zm1yX3BhZ2VfbWFzaykgKyBqOworCisJcmVxLT5mbXIgPSBpYl9mbXJfcG9vbF9tYXBfcGh5cyhkZXYtPmZtcl9wb29sLAorCQkJCQlkbWFfcGFnZXMsIHBhZ2VfY250LCAmaW9fYWRkcik7CisJaWYgKElTX0VSUihyZXEtPmZtcikpIHsKKwkJcmV0ID0gUFRSX0VSUihyZXEtPmZtcik7CisJCWdvdG8gb3V0OworCX0KKworCWJ1Zi0+dmEgID0gY3B1X3RvX2JlNjQoc2dfZG1hX2FkZHJlc3MoJnNjYXRbMF0pICYgfmRldi0+Zm1yX3BhZ2VfbWFzayk7CisJYnVmLT5rZXkgPSBjcHVfdG9fYmUzMihyZXEtPmZtci0+Zm1yLT5ya2V5KTsKKwlidWYtPmxlbiA9IGNwdV90b19iZTMyKGxlbik7CisKKwlyZXQgPSAwOworCitvdXQ6CisJa2ZyZWUoZG1hX3BhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgc3JwX21hcF9kYXRhKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kLCBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsCiAJCQlzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CiAJc3RydWN0IHNycF9jbWQgKmNtZCA9IHJlcS0+Y21kLT5idWY7CiAJaW50IGxlbiwgbmVudHMsIGNvdW50OwotCWludCBpOwotCXU4IGZtdDsKKwl1OCBmbXQgPSBTUlBfREFUQV9ERVNDX0RJUkVDVDsKIAogCWlmICghc2NtbmQtPnJlcXVlc3RfYnVmZmVyIHx8IHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfTk9ORSkKIAkJcmV0dXJuIHNpemVvZiAoc3RydWN0IHNycF9jbWQpOwpAQCAtNTYwLDUzICs2NjQsNjMgQEAKIAkJc2dfaW5pdF9vbmUoc2NhdCwgc2NtbmQtPnJlcXVlc3RfYnVmZmVyLCBzY21uZC0+cmVxdWVzdF9idWZmbGVuKTsKIAl9CiAKLQljb3VudCA9IGRtYV9tYXBfc2codGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kbWFfZGV2aWNlLCBzY2F0LCBuZW50cywKLQkJCSAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJY291bnQgPSBkbWFfbWFwX3NnKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLAorCQkJICAgc2NhdCwgbmVudHMsIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7CisKKwlmbXQgPSBTUlBfREFUQV9ERVNDX0RJUkVDVDsKKwlsZW4gPSBzaXplb2YgKHN0cnVjdCBzcnBfY21kKSArCXNpemVvZiAoc3RydWN0IHNycF9kaXJlY3RfYnVmKTsKIAogCWlmIChjb3VudCA9PSAxKSB7CisJCS8qCisJCSAqIFRoZSBtaWRsYXllciBvbmx5IGdlbmVyYXRlZCBhIHNpbmdsZSBnYXRoZXIvc2NhdHRlcgorCQkgKiBlbnRyeSwgb3IgRE1BIG1hcHBpbmcgY29hbGVzY2VkIGV2ZXJ5dGhpbmcgdG8gYQorCQkgKiBzaW5nbGUgZW50cnkuICBTbyBhIGRpcmVjdCBkZXNjcmlwdG9yIGFsb25nIHdpdGgKKwkJICogdGhlIERNQSBNUiBzdWZmaWNlcy4KKwkJICovCiAJCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqYnVmID0gKHZvaWQgKikgY21kLT5hZGRfZGF0YTsKIAotCQlmbXQgPSBTUlBfREFUQV9ERVNDX0RJUkVDVDsKLQogCQlidWYtPnZhICA9IGNwdV90b19iZTY0KHNnX2RtYV9hZGRyZXNzKHNjYXQpKTsKLQkJYnVmLT5rZXkgPSBjcHVfdG9fYmUzMih0YXJnZXQtPnNycF9ob3N0LT5tci0+cmtleSk7CisJCWJ1Zi0+a2V5ID0gY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+cmtleSk7CiAJCWJ1Zi0+bGVuID0gY3B1X3RvX2JlMzIoc2dfZG1hX2xlbihzY2F0KSk7Ci0KLQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc3JwX2NtZCkgKwotCQkJc2l6ZW9mIChzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChzcnBfbWFwX2Ztcih0YXJnZXQtPnNycF9ob3N0LT5kZXYsIHNjYXQsIGNvdW50LCByZXEsCisJCQkgICAgICAgKHZvaWQgKikgY21kLT5hZGRfZGF0YSkpIHsKKwkJLyoKKwkJICogRk1SIG1hcHBpbmcgZmFpbGVkLCBhbmQgdGhlIHNjYXR0ZXJsaXN0IGhhcyBtb3JlCisJCSAqIHRoYW4gb25lIGVudHJ5LiAgR2VuZXJhdGUgYW4gaW5kaXJlY3QgbWVtb3J5CisJCSAqIGRlc2NyaXB0b3IuCisJCSAqLwogCQlzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqYnVmID0gKHZvaWQgKikgY21kLT5hZGRfZGF0YTsKIAkJdTMyIGRhdGFsZW4gPSAwOworCQlpbnQgaTsKIAogCQlmbXQgPSBTUlBfREFUQV9ERVNDX0lORElSRUNUOworCQlsZW4gPSBzaXplb2YgKHN0cnVjdCBzcnBfY21kKSArCisJCQlzaXplb2YgKHN0cnVjdCBzcnBfaW5kaXJlY3RfYnVmKSArCisJCQljb3VudCAqIHNpemVvZiAoc3RydWN0IHNycF9kaXJlY3RfYnVmKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkJYnVmLT5kZXNjX2xpc3RbaV0udmEgID0KKwkJCQljcHVfdG9fYmU2NChzZ19kbWFfYWRkcmVzcygmc2NhdFtpXSkpOworCQkJYnVmLT5kZXNjX2xpc3RbaV0ua2V5ID0KKwkJCQljcHVfdG9fYmUzMih0YXJnZXQtPnNycF9ob3N0LT5kZXYtPm1yLT5ya2V5KTsKKwkJCWJ1Zi0+ZGVzY19saXN0W2ldLmxlbiA9CisJCQkJY3B1X3RvX2JlMzIoc2dfZG1hX2xlbigmc2NhdFtpXSkpOworCQkJZGF0YWxlbiArPSBzZ19kbWFfbGVuKCZzY2F0W2ldKTsKKwkJfQogCiAJCWlmIChzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKIAkJCWNtZC0+ZGF0YV9vdXRfZGVzY19jbnQgPSBjb3VudDsKIAkJZWxzZQogCQkJY21kLT5kYXRhX2luX2Rlc2NfY250ID0gY291bnQ7CiAKLQkJYnVmLT50YWJsZV9kZXNjLnZhICA9IGNwdV90b19iZTY0KHJlcS0+Y21kLT5kbWEgKwotCQkJCQkJICBzaXplb2YgKmNtZCArCi0JCQkJCQkgIHNpemVvZiAqYnVmKTsKKwkJYnVmLT50YWJsZV9kZXNjLnZhICA9CisJCQljcHVfdG9fYmU2NChyZXEtPmNtZC0+ZG1hICsgc2l6ZW9mICpjbWQgKyBzaXplb2YgKmJ1Zik7CiAJCWJ1Zi0+dGFibGVfZGVzYy5rZXkgPQotCQkJY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+bXItPnJrZXkpOworCQkJY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+cmtleSk7CiAJCWJ1Zi0+dGFibGVfZGVzYy5sZW4gPQogCQkJY3B1X3RvX2JlMzIoY291bnQgKiBzaXplb2YgKHN0cnVjdCBzcnBfZGlyZWN0X2J1ZikpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0JCQlidWYtPmRlc2NfbGlzdFtpXS52YSAgPSBjcHVfdG9fYmU2NChzZ19kbWFfYWRkcmVzcygmc2NhdFtpXSkpOwotCQkJYnVmLT5kZXNjX2xpc3RbaV0ua2V5ID0KLQkJCQljcHVfdG9fYmUzMih0YXJnZXQtPnNycF9ob3N0LT5tci0+cmtleSk7Ci0JCQlidWYtPmRlc2NfbGlzdFtpXS5sZW4gPSBjcHVfdG9fYmUzMihzZ19kbWFfbGVuKCZzY2F0W2ldKSk7Ci0KLQkJCWRhdGFsZW4gKz0gc2dfZG1hX2xlbigmc2NhdFtpXSk7Ci0JCX0KLQogCQlidWYtPmxlbiA9IGNwdV90b19iZTMyKGRhdGFsZW4pOwotCi0JCWxlbiA9IHNpemVvZiAoc3RydWN0IHNycF9jbWQpICsKLQkJCXNpemVvZiAoc3RydWN0IHNycF9pbmRpcmVjdF9idWYpICsKLQkJCWNvdW50ICogc2l6ZW9mIChzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpOwogCX0KIAogCWlmIChzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKQEAgLTYxNywxMiArNzMxLDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfcmVtb3ZlX3JlcShzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxKQotewotCXNycF91bm1hcF9kYXRhKHJlcS0+c2NtbmQsIHRhcmdldCwgcmVxKTsKLQlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmdGFyZ2V0LT5mcmVlX3JlcXMpOwotfQotCiBzdGF0aWMgdm9pZCBzcnBfcHJvY2Vzc19yc3Aoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc3JwX3JzcCAqcnNwKQogewogCXN0cnVjdCBzcnBfcmVxdWVzdCAqcmVxOwpAQCAtNjg5LDcgKzc5Nyw3IEBACiAKIAlpdSA9IHRhcmdldC0+cnhfcmluZ1t3Yy0+d3JfaWQgJiB+U1JQX09QX1JFQ1ZdOwogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAogCQkJCXRhcmdldC0+bWF4X3RpX2l1X2xlbiwgRE1BX0ZST01fREVWSUNFKTsKIAogCW9wY29kZSA9ICoodTggKikgaXUtPmJ1ZjsKQEAgLTcyNiw3ICs4MzQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsCiAJCQkJICAgdGFyZ2V0LT5tYXhfdGlfaXVfbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogfQogCkBAIC03NzAsNyArODc4LDcgQEAKIAogCWxpc3QuYWRkciAgID0gaXUtPmRtYTsKIAlsaXN0Lmxlbmd0aCA9IGl1LT5zaXplOwotCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+bXItPmxrZXk7CisJbGlzdC5sa2V5ICAgPSB0YXJnZXQtPnNycF9ob3N0LT5kZXYtPm1yLT5sa2V5OwogCiAJd3IubmV4dCAgICAgPSBOVUxMOwogCXdyLnNnX2xpc3QgID0gJmxpc3Q7CkBAIC04MDUsMTIgKzkxMyw4IEBACiAJaWYgKHRhcmdldC0+dHhfaGVhZCAtIHRhcmdldC0+dHhfdGFpbCA+PSBTUlBfU1FfU0laRSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAodW5saWtlbHkodGFyZ2V0LT5yZXFfbGltIDwgMSkpIHsKLQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiVGFyZ2V0IGhhcyByZXFfbGltICVkXG4iLAotCQkJICAgICAgIHRhcmdldC0+cmVxX2xpbSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAodW5saWtlbHkodGFyZ2V0LT5yZXFfbGltIDwgMSkpCisJCSsrdGFyZ2V0LT56ZXJvX3JlcV9saW07CiAKIAlyZXR1cm4gdGFyZ2V0LT50eF9yaW5nW3RhcmdldC0+dHhfaGVhZCAmIFNSUF9TUV9TSVpFXTsKIH0KQEAgLTgyOCw3ICs5MzIsNyBAQAogCiAJbGlzdC5hZGRyICAgPSBpdS0+ZG1hOwogCWxpc3QubGVuZ3RoID0gbGVuOwotCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+bXItPmxrZXk7CisJbGlzdC5sa2V5ICAgPSB0YXJnZXQtPnNycF9ob3N0LT5kZXYtPm1yLT5sa2V5OwogCiAJd3IubmV4dCAgICAgICA9IE5VTEw7CiAJd3Iud3JfaWQgICAgICA9IHRhcmdldC0+dHhfaGVhZCAmIFNSUF9TUV9TSVpFOwpAQCAtODcwLDggKzk3NCw4IEBACiAJaWYgKCFpdSkKIAkJZ290byBlcnI7CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsCi0JCQkJU1JQX01BWF9JVV9MRU4sIERNQV9UT19ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAorCQkJCXNycF9tYXhfaXVfbGVuLCBETUFfVE9fREVWSUNFKTsKIAogCXJlcSA9IGxpc3RfZW50cnkodGFyZ2V0LT5mcmVlX3JlcXMubmV4dCwgc3RydWN0IHNycF9yZXF1ZXN0LCBsaXN0KTsKIApAQCAtOTAzLDggKzEwMDcsOCBAQAogCQlnb3RvIGVycl91bm1hcDsKIAl9CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsCi0JCQkJICAgU1JQX01BWF9JVV9MRU4sIERNQV9UT19ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAorCQkJCSAgIHNycF9tYXhfaXVfbGVuLCBETUFfVE9fREVWSUNFKTsKIAogCWlmIChfX3NycF9wb3N0X3NlbmQodGFyZ2V0LCBpdSwgbGVuKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJTZW5kIGZhaWxlZFxuIik7CkBAIC05MzYsNyArMTA0MCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgU1JQX1NRX1NJWkUgKyAxOyArK2kpIHsKIAkJdGFyZ2V0LT50eF9yaW5nW2ldID0gc3JwX2FsbG9jX2l1KHRhcmdldC0+c3JwX2hvc3QsCi0JCQkJCQkgIFNSUF9NQVhfSVVfTEVOLAorCQkJCQkJICBzcnBfbWF4X2l1X2xlbiwKIAkJCQkJCSAgR0ZQX0tFUk5FTCwgRE1BX1RPX0RFVklDRSk7CiAJCWlmICghdGFyZ2V0LT50eF9yaW5nW2ldKQogCQkJZ290byBlcnI7CkBAIC0xMTA3LDExICsxMjExLDEwIEBACiAJCXNycF9jbV9yZWpfaGFuZGxlcihjbV9pZCwgZXZlbnQsIHRhcmdldCk7CiAJCWJyZWFrOwogCi0JY2FzZSBJQl9DTV9NUkFfUkVDRUlWRUQ6Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIk1SQSByZWNlaXZlZFxuIik7Ci0JCWJyZWFrOwotCi0JY2FzZSBJQl9DTV9EUkVQX1JFQ0VJVkVEOgorCWNhc2UgSUJfQ01fRFJFUV9SRUNFSVZFRDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkRSRVEgcmVjZWl2ZWQgLSBjb25uZWN0aW9uIGNsb3NlZFxuIik7CisJCWlmIChpYl9zZW5kX2NtX2RyZXAoY21faWQsIE5VTEwsIDApKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU2VuZGluZyBDTSBEUkVQIGZhaWxlZFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBJQl9DTV9USU1FV0FJVF9FWElUOgpAQCAtMTEyMSw2ICsxMjI0LDExIEBACiAJCXRhcmdldC0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CiAKKwljYXNlIElCX0NNX01SQV9SRUNFSVZFRDoKKwljYXNlIElCX0NNX0RSRVFfRVJST1I6CisJY2FzZSBJQl9DTV9EUkVQX1JFQ0VJVkVEOgorCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbmhhbmRsZWQgQ00gZXZlbnQgJWRcbiIsIGV2ZW50LT5ldmVudCk7CiAJCWJyZWFrOwpAQCAtMTIzOSwxMSArMTM0Nyw4IEBACiAJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJnRhcmdldC0+cmVxX3F1ZXVlLCBsaXN0KQotCQlpZiAocmVxLT5zY21uZC0+ZGV2aWNlID09IHNjbW5kLT5kZXZpY2UpIHsKLQkJCXJlcS0+c2NtbmQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKLQkJCXJlcS0+c2NtbmQtPnNjc2lfZG9uZShyZXEtPnNjbW5kKTsKLQkJCXNycF9yZW1vdmVfcmVxKHRhcmdldCwgcmVxKTsKLQkJfQorCQlpZiAocmVxLT5zY21uZC0+ZGV2aWNlID09IHNjbW5kLT5kZXZpY2UpCisJCQlzcnBfcmVzZXRfcmVxKHRhcmdldCwgcmVxKTsKIAogCXNwaW5fdW5sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIApAQCAtMTMyOSwxMSArMTQzNCwyMyBAQAogCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgdGFyZ2V0LT5wYXRoLmRnaWQucmF3KVs3XSkpOwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X3plcm9fcmVxX2xpbShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCisJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9ERUFEIHx8CisJICAgIHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9SRU1PVkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0YXJnZXQtPnplcm9fcmVxX2xpbSk7Cit9CisKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpZF9leHQsCVNfSVJVR08sIHNob3dfaWRfZXh0LAkJTlVMTCk7CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaW9jX2d1aWQsCVNfSVJVR08sIHNob3dfaW9jX2d1aWQsCQlOVUxMKTsKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzZXJ2aWNlX2lkLAlTX0lSVUdPLCBzaG93X3NlcnZpY2VfaWQsCU5VTEwpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHBrZXksCQlTX0lSVUdPLCBzaG93X3BrZXksCQlOVUxMKTsKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihkZ2lkLAkJU19JUlVHTywgc2hvd19kZ2lkLAkJTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoemVyb19yZXFfbGltLAlTX0lSVUdPLCBzaG93X3plcm9fcmVxX2xpbSwJTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqc3JwX2hvc3RfYXR0cnNbXSA9IHsKIAkmY2xhc3NfZGV2aWNlX2F0dHJfaWRfZXh0LApAQCAtMTM0MSw2ICsxNDU4LDcgQEAKIAkmY2xhc3NfZGV2aWNlX2F0dHJfc2VydmljZV9pZCwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfcGtleSwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfZGdpZCwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfemVyb19yZXFfbGltLAogCU5VTEwKIH07CiAKQEAgLTEzNTQsNyArMTQ3Miw2IEBACiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgkJPSBzcnBfcmVzZXRfaG9zdCwKIAkuY2FuX3F1ZXVlCQkJPSBTUlBfU1FfU0laRSwKIAkudGhpc19pZAkJCT0gLTEsCi0JLnNnX3RhYmxlc2l6ZQkJCT0gU1JQX01BWF9JTkRJUkVDVCwKIAkuY21kX3Blcl9sdW4JCQk9IFNSUF9TUV9TSVpFLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQkJPSBzcnBfaG9zdF9hdHRycwpAQCAtMTM2NSwxOCArMTQ4MiwxNyBAQAogCXNwcmludGYodGFyZ2V0LT50YXJnZXRfbmFtZSwgIlNSUC5UMTA6JTAxNmxsWCIsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKSBiZTY0X3RvX2NwdSh0YXJnZXQtPmlkX2V4dCkpOwogCi0JaWYgKHNjc2lfYWRkX2hvc3QodGFyZ2V0LT5zY3NpX2hvc3QsIGhvc3QtPmRldi0+ZG1hX2RldmljZSkpCisJaWYgKHNjc2lfYWRkX2hvc3QodGFyZ2V0LT5zY3NpX2hvc3QsIGhvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltdXRleF9sb2NrKCZob3N0LT50YXJnZXRfbXV0ZXgpOworCXNwaW5fbG9jaygmaG9zdC0+dGFyZ2V0X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+bGlzdCwgJmhvc3QtPnRhcmdldF9saXN0KTsKLQltdXRleF91bmxvY2soJmhvc3QtPnRhcmdldF9tdXRleCk7CisJc3Bpbl91bmxvY2soJmhvc3QtPnRhcmdldF9sb2NrKTsKIAogCXRhcmdldC0+c3RhdGUgPSBTUlBfVEFSR0VUX0xJVkU7CiAKLQkvKiBYWFg6IGFyZSB3ZSBzdXBwb3NlZCB0byBoYXZlIGEgZGVmaW5pdGlvbiBvZiBTQ0FOX1dJTERfQ0FSRCA/PyAqLwogCXNjc2lfc2Nhbl90YXJnZXQoJnRhcmdldC0+c2NzaV9ob3N0LT5zaG9zdF9nZW5kZXYsCi0JCQkgMCwgdGFyZ2V0LT5zY3NpX2lkLCB+MCwgMCk7CisJCQkgMCwgdGFyZ2V0LT5zY3NpX2lkLCBTQ0FOX1dJTERfQ0FSRCwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTAsNiArMTUyNiw4IEBACiAJU1JQX09QVF9QS0VZCQk9IDEgPDwgMywKIAlTUlBfT1BUX1NFUlZJQ0VfSUQJPSAxIDw8IDQsCiAJU1JQX09QVF9NQVhfU0VDVAk9IDEgPDwgNSwKKwlTUlBfT1BUX01BWF9DTURfUEVSX0xVTgk9IDEgPDwgNiwKKwlTUlBfT1BUX0lPX0NMQVNTCT0gMSA8PCA3LAogCVNSUF9PUFRfQUxMCQk9IChTUlBfT1BUX0lEX0VYVAl8CiAJCQkJICAgU1JQX09QVF9JT0NfR1VJRAl8CiAJCQkJICAgU1JQX09QVF9ER0lECQl8CkBAIC0xNDE4LDEzICsxNTM2LDE1IEBACiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCBzcnBfb3B0X3Rva2VucyA9IHsKLQl7IFNSUF9PUFRfSURfRVhULAkiaWRfZXh0PSVzIiAJfSwKLQl7IFNSUF9PUFRfSU9DX0dVSUQsCSJpb2NfZ3VpZD0lcyIgCX0sCi0JeyBTUlBfT1BUX0RHSUQsCQkiZGdpZD0lcyIgCX0sCi0JeyBTUlBfT1BUX1BLRVksCQkicGtleT0leCIgCX0sCi0JeyBTUlBfT1BUX1NFUlZJQ0VfSUQsCSJzZXJ2aWNlX2lkPSVzIiB9LAotCXsgU1JQX09QVF9NQVhfU0VDVCwgICAgICJtYXhfc2VjdD0lZCIgCX0sCi0JeyBTUlBfT1BUX0VSUiwJCU5VTEwgCQl9CisJeyBTUlBfT1BUX0lEX0VYVCwJCSJpZF9leHQ9JXMiIAkJfSwKKwl7IFNSUF9PUFRfSU9DX0dVSUQsCQkiaW9jX2d1aWQ9JXMiIAkJfSwKKwl7IFNSUF9PUFRfREdJRCwJCQkiZGdpZD0lcyIgCQl9LAorCXsgU1JQX09QVF9QS0VZLAkJCSJwa2V5PSV4IiAJCX0sCisJeyBTUlBfT1BUX1NFUlZJQ0VfSUQsCQkic2VydmljZV9pZD0lcyIJCX0sCisJeyBTUlBfT1BUX01BWF9TRUNULAkJIm1heF9zZWN0PSVkIiAJCX0sCisJeyBTUlBfT1BUX01BWF9DTURfUEVSX0xVTiwJIm1heF9jbWRfcGVyX2x1bj0lZCIgCX0sCisJeyBTUlBfT1BUX0lPX0NMQVNTLAkJImlvX2NsYXNzPSV4IgkJfSwKKwl7IFNSUF9PUFRfRVJSLAkJCU5VTEwgCQkJfQogfTsKIAogc3RhdGljIGludCBzcnBfcGFyc2Vfb3B0aW9ucyhjb25zdCBjaGFyICpidWYsIHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCkKQEAgLTE1MDAsNiArMTYyMCwyOSBAQAogCQkJdGFyZ2V0LT5zY3NpX2hvc3QtPm1heF9zZWN0b3JzID0gdG9rZW47CiAJCQlicmVhazsKIAorCQljYXNlIFNSUF9PUFRfTUFYX0NNRF9QRVJfTFVOOgorCQkJaWYgKG1hdGNoX2ludChhcmdzLCAmdG9rZW4pKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggImJhZCBtYXggY21kX3Blcl9sdW4gcGFyYW1ldGVyICclcydcbiIsIHApOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJdGFyZ2V0LT5zY3NpX2hvc3QtPmNtZF9wZXJfbHVuID0gbWluKHRva2VuLCBTUlBfU1FfU0laRSk7CisJCQlicmVhazsKKworCQljYXNlIFNSUF9PUFRfSU9fQ0xBU1M6CisJCQlpZiAobWF0Y2hfaGV4KGFyZ3MsICZ0b2tlbikpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiYmFkICBJTyBjbGFzcyBwYXJhbWV0ZXIgJyVzJyBcbiIsIHApOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaWYgKHRva2VuICE9IFNSUF9SRVYxMF9JQl9JT19DTEFTUyAmJgorCQkJICAgIHRva2VuICE9IFNSUF9SRVYxNkFfSUJfSU9fQ0xBU1MpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAidW5rbm93biBJTyBjbGFzcyBwYXJhbWV0ZXIgdmFsdWUiCisJCQkJICAgICAgICIgJXggc3BlY2lmaWVkICh1c2UgJXggb3IgJXgpLlxuIiwKKwkJCQkgICAgICAgdG9rZW4sIFNSUF9SRVYxMF9JQl9JT19DTEFTUywgU1JQX1JFVjE2QV9JQl9JT19DTEFTUyk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQl0YXJnZXQtPmlvX2NsYXNzID0gdG9rZW47CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggInVua25vd24gcGFyYW1ldGVyIG9yIG1pc3NpbmcgdmFsdWUgIgogCQkJICAgICAgICInJXMnIGluIHRhcmdldCBjcmVhdGlvbiByZXF1ZXN0XG4iLCBwKTsKQEAgLTE1NDIsNiArMTY4NSw3IEBACiAJdGFyZ2V0ID0gaG9zdF90b190YXJnZXQodGFyZ2V0X2hvc3QpOwogCW1lbXNldCh0YXJnZXQsIDAsIHNpemVvZiAqdGFyZ2V0KTsKIAorCXRhcmdldC0+aW9fY2xhc3MgICA9IFNSUF9SRVYxNkFfSUJfSU9fQ0xBU1M7CiAJdGFyZ2V0LT5zY3NpX2hvc3QgID0gdGFyZ2V0X2hvc3Q7CiAJdGFyZ2V0LT5zcnBfaG9zdCAgID0gaG9zdDsKIApAQCAtMTU1OCw3ICsxNzAyLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCWliX2dldF9jYWNoZWRfZ2lkKGhvc3QtPmRldiwgaG9zdC0+cG9ydCwgMCwgJnRhcmdldC0+cGF0aC5zZ2lkKTsKKwlpYl9nZXRfY2FjaGVkX2dpZChob3N0LT5kZXYtPmRldiwgaG9zdC0+cG9ydCwgMCwgJnRhcmdldC0+cGF0aC5zZ2lkKTsKIAogCXByaW50ayhLRVJOX0RFQlVHIFBGWCAibmV3IHRhcmdldDogaWRfZXh0ICUwMTZsbHggaW9jX2d1aWQgJTAxNmxseCBwa2V5ICUwNHggIgogCSAgICAgICAic2VydmljZV9pZCAlMDE2bGx4IGRnaWQgJTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4XG4iLApAQCAtMTU3OSw3ICsxNzIzLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXRhcmdldC0+Y21faWQgPSBpYl9jcmVhdGVfY21faWQoaG9zdC0+ZGV2LCBzcnBfY21faGFuZGxlciwgdGFyZ2V0KTsKKwl0YXJnZXQtPmNtX2lkID0gaWJfY3JlYXRlX2NtX2lkKGhvc3QtPmRldi0+ZGV2LCBzcnBfY21faGFuZGxlciwgdGFyZ2V0KTsKIAlpZiAoSVNfRVJSKHRhcmdldC0+Y21faWQpKSB7CiAJCXJldCA9IFBUUl9FUlIodGFyZ2V0LT5jbV9pZCk7CiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC0xNjE5LDcgKzE3NjMsNyBAQAogCXN0cnVjdCBzcnBfaG9zdCAqaG9zdCA9CiAJCWNvbnRhaW5lcl9vZihjbGFzc19kZXYsIHN0cnVjdCBzcnBfaG9zdCwgY2xhc3NfZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBob3N0LT5kZXYtPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBob3N0LT5kZXYtPmRldi0+bmFtZSk7CiB9CiAKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpYmRldiwgU19JUlVHTywgc2hvd19pYmRldiwgTlVMTCk7CkBAIC0xNjM0LDcgKzE3NzgsNyBAQAogCiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIocG9ydCwgU19JUlVHTywgc2hvd19wb3J0LCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBzcnBfaG9zdCAqc3JwX2FkZF9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydCkKK3N0YXRpYyBzdHJ1Y3Qgc3JwX2hvc3QgKnNycF9hZGRfcG9ydChzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0KQogewogCXN0cnVjdCBzcnBfaG9zdCAqaG9zdDsKIApAQCAtMTY0MywzMiArMTc4NywyMSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCUlOSVRfTElTVF9IRUFEKCZob3N0LT50YXJnZXRfbGlzdCk7Ci0JbXV0ZXhfaW5pdCgmaG9zdC0+dGFyZ2V0X211dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+dGFyZ2V0X2xvY2spOwogCWluaXRfY29tcGxldGlvbigmaG9zdC0+cmVsZWFzZWQpOwogCWhvc3QtPmRldiAgPSBkZXZpY2U7CiAJaG9zdC0+cG9ydCA9IHBvcnQ7CiAKIAlob3N0LT5pbml0aWF0b3JfcG9ydF9pZFs3XSA9IHBvcnQ7Ci0JbWVtY3B5KGhvc3QtPmluaXRpYXRvcl9wb3J0X2lkICsgOCwgJmRldmljZS0+bm9kZV9ndWlkLCA4KTsKLQotCWhvc3QtPnBkICAgPSBpYl9hbGxvY19wZChkZXZpY2UpOwotCWlmIChJU19FUlIoaG9zdC0+cGQpKQotCQlnb3RvIGVycl9mcmVlOwotCi0JaG9zdC0+bXIgICA9IGliX2dldF9kbWFfbXIoaG9zdC0+cGQsCi0JCQkJICAgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKLQkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAotCQkJCSAgIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpOwotCWlmIChJU19FUlIoaG9zdC0+bXIpKQotCQlnb3RvIGVycl9wZDsKKwltZW1jcHkoaG9zdC0+aW5pdGlhdG9yX3BvcnRfaWQgKyA4LCAmZGV2aWNlLT5kZXYtPm5vZGVfZ3VpZCwgOCk7CiAKIAlob3N0LT5jbGFzc19kZXYuY2xhc3MgPSAmc3JwX2NsYXNzOwotCWhvc3QtPmNsYXNzX2Rldi5kZXYgICA9IGRldmljZS0+ZG1hX2RldmljZTsKKwlob3N0LT5jbGFzc19kZXYuZGV2ICAgPSBkZXZpY2UtPmRldi0+ZG1hX2RldmljZTsKIAlzbnByaW50Zihob3N0LT5jbGFzc19kZXYuY2xhc3NfaWQsIEJVU19JRF9TSVpFLCAic3JwLSVzLSVkIiwKLQkJIGRldmljZS0+bmFtZSwgcG9ydCk7CisJCSBkZXZpY2UtPmRldi0+bmFtZSwgcG9ydCk7CiAKIAlpZiAoY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZob3N0LT5jbGFzc19kZXYpKQotCQlnb3RvIGVycl9tcjsKKwkJZ290byBmcmVlX2hvc3Q7CiAJaWYgKGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmaG9zdC0+Y2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYWRkX3RhcmdldCkpCiAJCWdvdG8gZXJyX2NsYXNzOwogCWlmIChjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJmhvc3QtPmNsYXNzX2RldiwgJmNsYXNzX2RldmljZV9hdHRyX2liZGV2KSkKQEAgLTE2ODEsMTMgKzE4MTQsNyBAQAogZXJyX2NsYXNzOgogCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZob3N0LT5jbGFzc19kZXYpOwogCi1lcnJfbXI6Ci0JaWJfZGVyZWdfbXIoaG9zdC0+bXIpOwotCi1lcnJfcGQ6Ci0JaWJfZGVhbGxvY19wZChob3N0LT5wZCk7Ci0KLWVycl9mcmVlOgorZnJlZV9ob3N0OgogCWtmcmVlKGhvc3QpOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0xNjk1LDE1ICsxODIyLDYyIEBACiAKIHN0YXRpYyB2b2lkIHNycF9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfbGlzdDsKKwlzdHJ1Y3Qgc3JwX2RldmljZSAqc3JwX2RldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldl9hdHRyOworCXN0cnVjdCBpYl9mbXJfcG9vbF9wYXJhbSBmbXJfcGFyYW07CiAJc3RydWN0IHNycF9ob3N0ICpob3N0OwogCWludCBzLCBlLCBwOwogCi0JZGV2X2xpc3QgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2xpc3QsIEdGUF9LRVJORUwpOwotCWlmICghZGV2X2xpc3QpCisJZGV2X2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2F0dHIsIEdGUF9LRVJORUwpOworCWlmICghZGV2X2F0dHIpCiAJCXJldHVybjsKIAotCUlOSVRfTElTVF9IRUFEKGRldl9saXN0KTsKKwlpZiAoaWJfcXVlcnlfZGV2aWNlKGRldmljZSwgZGV2X2F0dHIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJRdWVyeSBkZXZpY2UgZmFpbGVkIGZvciAlc1xuIiwKKwkJICAgICAgIGRldmljZS0+bmFtZSk7CisJCWdvdG8gZnJlZV9hdHRyOworCX0KKworCXNycF9kZXYgPSBrbWFsbG9jKHNpemVvZiAqc3JwX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcnBfZGV2KQorCQlnb3RvIGZyZWVfYXR0cjsKKworCS8qCisJICogVXNlIHRoZSBzbWFsbGVzdCBwYWdlIHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBIQ0EsIGRvd24gdG8gYQorCSAqIG1pbmltdW0gb2YgNTEyIGJ5dGVzICh3aGljaCBpcyB0aGUgc21hbGxlc3Qgc2VjdG9yIHRoYXQgYQorCSAqIFNDU0kgY29tbWFuZCB3aWxsIGV2ZXIgY2FycnkpLgorCSAqLworCXNycF9kZXYtPmZtcl9wYWdlX3NoaWZ0ID0gbWF4KDksIGZmcyhkZXZfYXR0ci0+cGFnZV9zaXplX2NhcCkgLSAxKTsKKwlzcnBfZGV2LT5mbXJfcGFnZV9zaXplICA9IDEgPDwgc3JwX2Rldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJc3JwX2Rldi0+Zm1yX3BhZ2VfbWFzayAgPSB+KCh1bnNpZ25lZCBsb25nKSBzcnBfZGV2LT5mbXJfcGFnZV9zaXplIC0gMSk7CisKKwlJTklUX0xJU1RfSEVBRCgmc3JwX2Rldi0+ZGV2X2xpc3QpOworCisJc3JwX2Rldi0+ZGV2ID0gZGV2aWNlOworCXNycF9kZXYtPnBkICA9IGliX2FsbG9jX3BkKGRldmljZSk7CisJaWYgKElTX0VSUihzcnBfZGV2LT5wZCkpCisJCWdvdG8gZnJlZV9kZXY7CisKKwlzcnBfZGV2LT5tciA9IGliX2dldF9kbWFfbXIoc3JwX2Rldi0+cGQsCisJCQkJICAgIElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJICAgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkJICAgIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpOworCWlmIChJU19FUlIoc3JwX2Rldi0+bXIpKQorCQlnb3RvIGVycl9wZDsKKworCW1lbXNldCgmZm1yX3BhcmFtLCAwLCBzaXplb2YgZm1yX3BhcmFtKTsKKwlmbXJfcGFyYW0ucG9vbF9zaXplCSAgICA9IFNSUF9GTVJfUE9PTF9TSVpFOworCWZtcl9wYXJhbS5kaXJ0eV93YXRlcm1hcmsgICA9IFNSUF9GTVJfRElSVFlfU0laRTsKKwlmbXJfcGFyYW0uY2FjaGUJCSAgICA9IDE7CisJZm1yX3BhcmFtLm1heF9wYWdlc19wZXJfZm1yID0gU1JQX0ZNUl9TSVpFOworCWZtcl9wYXJhbS5wYWdlX3NoaWZ0CSAgICA9IHNycF9kZXYtPmZtcl9wYWdlX3NoaWZ0OworCWZtcl9wYXJhbS5hY2Nlc3MJICAgID0gKElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJICAgICAgIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUgfAorCQkJCSAgICAgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCisJc3JwX2Rldi0+Zm1yX3Bvb2wgPSBpYl9jcmVhdGVfZm1yX3Bvb2woc3JwX2Rldi0+cGQsICZmbXJfcGFyYW0pOworCWlmIChJU19FUlIoc3JwX2Rldi0+Zm1yX3Bvb2wpKQorCQlzcnBfZGV2LT5mbXJfcG9vbCA9IE5VTEw7CiAKIAlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gSUJfTk9ERV9TV0lUQ0gpIHsKIAkJcyA9IDA7CkBAIC0xNzE0LDI1ICsxODg4LDM1IEBACiAJfQogCiAJZm9yIChwID0gczsgcCA8PSBlOyArK3ApIHsKLQkJaG9zdCA9IHNycF9hZGRfcG9ydChkZXZpY2UsIHApOworCQlob3N0ID0gc3JwX2FkZF9wb3J0KHNycF9kZXYsIHApOwogCQlpZiAoaG9zdCkKLQkJCWxpc3RfYWRkX3RhaWwoJmhvc3QtPmxpc3QsIGRldl9saXN0KTsKKwkJCWxpc3RfYWRkX3RhaWwoJmhvc3QtPmxpc3QsICZzcnBfZGV2LT5kZXZfbGlzdCk7CiAJfQogCi0JaWJfc2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnNycF9jbGllbnQsIGRldl9saXN0KTsKKwlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmc3JwX2NsaWVudCwgc3JwX2Rldik7CisKKwlnb3RvIGZyZWVfYXR0cjsKKworZXJyX3BkOgorCWliX2RlYWxsb2NfcGQoc3JwX2Rldi0+cGQpOworCitmcmVlX2RldjoKKwlrZnJlZShzcnBfZGV2KTsKKworZnJlZV9hdHRyOgorCWtmcmVlKGRldl9hdHRyKTsKIH0KIAogc3RhdGljIHZvaWQgc3JwX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmRldl9saXN0OworCXN0cnVjdCBzcnBfZGV2aWNlICpzcnBfZGV2OwogCXN0cnVjdCBzcnBfaG9zdCAqaG9zdCwgKnRtcF9ob3N0OwogCUxJU1RfSEVBRCh0YXJnZXRfbGlzdCk7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCAqdG1wX3RhcmdldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGV2X2xpc3QgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmc3JwX2NsaWVudCk7CisJc3JwX2RldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXZpY2UsICZzcnBfY2xpZW50KTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob3N0LCB0bXBfaG9zdCwgZGV2X2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zdCwgdG1wX2hvc3QsICZzcnBfZGV2LT5kZXZfbGlzdCwgbGlzdCkgewogCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmaG9zdC0+Y2xhc3NfZGV2KTsKIAkJLyoKIAkJICogV2FpdCBmb3IgdGhlIHN5c2ZzIGVudHJ5IHRvIGdvIGF3YXksIHNvIHRoYXQgbm8gbmV3CkBAIC0xNzQ0LDE1ICsxOTI4LDEzIEBACiAJCSAqIE1hcmsgYWxsIHRhcmdldCBwb3J0cyBhcyByZW1vdmVkLCBzbyB3ZSBzdG9wIHF1ZXVlaW5nCiAJCSAqIGNvbW1hbmRzIGFuZCBkb24ndCB0cnkgdG8gcmVjb25uZWN0LgogCQkgKi8KLQkJbXV0ZXhfbG9jaygmaG9zdC0+dGFyZ2V0X211dGV4KTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRhcmdldCwgdG1wX3RhcmdldCwKLQkJCQkJICZob3N0LT50YXJnZXRfbGlzdCwgbGlzdCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQkJaWYgKHRhcmdldC0+c3RhdGUgIT0gU1JQX1RBUkdFVF9SRU1PVkVEKQotCQkJCXRhcmdldC0+c3RhdGUgPSBTUlBfVEFSR0VUX1JFTU9WRUQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrKCZob3N0LT50YXJnZXRfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodGFyZ2V0LCAmaG9zdC0+dGFyZ2V0X2xpc3QsIGxpc3QpIHsKKwkJCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CisJCQl0YXJnZXQtPnN0YXRlID0gU1JQX1RBUkdFVF9SRU1PVkVEOworCQkJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwogCQl9Ci0JCW11dGV4X3VubG9jaygmaG9zdC0+dGFyZ2V0X211dGV4KTsKKwkJc3Bpbl91bmxvY2soJmhvc3QtPnRhcmdldF9sb2NrKTsKIAogCQkvKgogCQkgKiBXYWl0IGZvciBhbnkgcmVjb25uZWN0aW9uIHRhc2tzIHRoYXQgbWF5IGhhdmUKQEAgLTE3NzAsMTggKzE5NTIsMjYgQEAKIAkJCXNjc2lfaG9zdF9wdXQodGFyZ2V0LT5zY3NpX2hvc3QpOwogCQl9CiAKLQkJaWJfZGVyZWdfbXIoaG9zdC0+bXIpOwotCQlpYl9kZWFsbG9jX3BkKGhvc3QtPnBkKTsKIAkJa2ZyZWUoaG9zdCk7CiAJfQogCi0Ja2ZyZWUoZGV2X2xpc3QpOworCWlmIChzcnBfZGV2LT5mbXJfcG9vbCkKKwkJaWJfZGVzdHJveV9mbXJfcG9vbChzcnBfZGV2LT5mbXJfcG9vbCk7CisJaWJfZGVyZWdfbXIoc3JwX2Rldi0+bXIpOworCWliX2RlYWxsb2NfcGQoc3JwX2Rldi0+cGQpOworCisJa2ZyZWUoc3JwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNycF9pbml0X21vZHVsZSh2b2lkKQogewogCWludCByZXQ7CiAKKwlzcnBfdGVtcGxhdGUuc2dfdGFibGVzaXplID0gc3JwX3NnX3RhYmxlc2l6ZTsKKwlzcnBfbWF4X2l1X2xlbiA9IChzaXplb2YgKHN0cnVjdCBzcnBfY21kKSArCisJCQkgIHNpemVvZiAoc3RydWN0IHNycF9pbmRpcmVjdF9idWYpICsKKwkJCSAgc3JwX3NnX3RhYmxlc2l6ZSAqIDE2KTsKKwogCXJldCA9IGNsYXNzX3JlZ2lzdGVyKCZzcnBfY2xhc3MpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY291bGRuJ3QgcmVnaXN0ZXIgY2xhc3MgaW5maW5pYmFuZF9zcnBcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAppbmRleCBjNWNkNDNhLi41YjU4MWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KICNpbmNsdWRlIDxyZG1hL2liX3NhLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9jbS5oPgorI2luY2x1ZGUgPHJkbWEvaWJfZm1yX3Bvb2wuaD4KIAogZW51bSB7CiAJU1JQX1BBVEhfUkVDX1RJTUVPVVRfTVMJPSAxMDAwLApAQCAtNTUsMjAgKzU2LDIxIEBACiAJU1JQX0RMSURfUkVESVJFQ1QJPSAyLAogCiAJU1JQX01BWF9MVU4JCT0gNTEyLAotCVNSUF9NQVhfSVVfTEVOCQk9IDI1NiwKKwlTUlBfREVGX1NHX1RBQkxFU0laRQk9IDEyLAogCiAJU1JQX1JRX1NISUZUICAgIAk9IDYsCiAJU1JQX1JRX1NJWkUJCT0gMSA8PCBTUlBfUlFfU0hJRlQsCiAJU1JQX1NRX1NJWkUJCT0gU1JQX1JRX1NJWkUgLSAxLAogCVNSUF9DUV9TSVpFCQk9IFNSUF9TUV9TSVpFICsgU1JQX1JRX1NJWkUsCiAKLQlTUlBfVEFHX1RTS19NR01UCT0gMSA8PCAoU1JQX1JRX1NISUZUICsgMSkKKwlTUlBfVEFHX1RTS19NR01UCT0gMSA8PCAoU1JQX1JRX1NISUZUICsgMSksCisKKwlTUlBfRk1SX1NJWkUJCT0gMjU2LAorCVNSUF9GTVJfUE9PTF9TSVpFCT0gMTAyNCwKKwlTUlBfRk1SX0RJUlRZX1NJWkUJPSBTUlBfRk1SX1BPT0xfU0laRSAvIDQKIH07CiAKICNkZWZpbmUgU1JQX09QX1JFQ1YJCSgxIDw8IDMxKQotI2RlZmluZSBTUlBfTUFYX0lORElSRUNUCSgoU1JQX01BWF9JVV9MRU4gLQkJCVwKLQkJCQkgIHNpemVvZiAoc3RydWN0IHNycF9jbWQpIC0JCVwKLQkJCQkgIHNpemVvZiAoc3RydWN0IHNycF9pbmRpcmVjdF9idWYpKSAvIDE2KQogCiBlbnVtIHNycF90YXJnZXRfc3RhdGUgewogCVNSUF9UQVJHRVRfTElWRSwKQEAgLTc3LDE1ICs3OSwyNCBAQAogCVNSUF9UQVJHRVRfUkVNT1ZFRAogfTsKIAotc3RydWN0IHNycF9ob3N0IHsKLQl1OAkJCWluaXRpYXRvcl9wb3J0X2lkWzE2XTsKK3N0cnVjdCBzcnBfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRldl9saXN0OwogCXN0cnVjdCBpYl9kZXZpY2UgICAgICAgKmRldjsKLQl1OCAgICAgICAgICAgICAgICAgICAgICBwb3J0OwogCXN0cnVjdCBpYl9wZAkgICAgICAgKnBkOwogCXN0cnVjdCBpYl9tcgkgICAgICAgKm1yOworCXN0cnVjdCBpYl9mbXJfcG9vbCAgICAgKmZtcl9wb29sOworCWludAkJCWZtcl9wYWdlX3NoaWZ0OworCWludAkJCWZtcl9wYWdlX3NpemU7CisJdW5zaWduZWQgbG9uZwkJZm1yX3BhZ2VfbWFzazsKK307CisKK3N0cnVjdCBzcnBfaG9zdCB7CisJdTgJCQlpbml0aWF0b3JfcG9ydF9pZFsxNl07CisJc3RydWN0IHNycF9kZXZpY2UgICAgICAqZGV2OworCXU4CQkJcG9ydDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlCWNsYXNzX2RldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXRhcmdldF9saXN0OwotCXN0cnVjdCBtdXRleCAgICAgICAgICAgIHRhcmdldF9tdXRleDsKKwlzcGlubG9ja190CQl0YXJnZXRfbG9jazsKIAlzdHJ1Y3QgY29tcGxldGlvbglyZWxlYXNlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwpAQCAtOTUsNiArMTA2LDcgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICAgICAgICpzY21uZDsKIAlzdHJ1Y3Qgc3JwX2l1CSAgICAgICAqY21kOwogCXN0cnVjdCBzcnBfaXUJICAgICAgICp0c2tfbWdtdDsKKwlzdHJ1Y3QgaWJfcG9vbF9mbXIgICAgICpmbXI7CiAJLyoKIAkgKiBGYWtlIHNjYXR0ZXJsaXN0IHVzZWQgd2hlbiBzY21uZC0+dXNlX3NnPT0wLiAgQ2FuIGJlIGtpbGxlZAogCSAqIHdoZW4gdGhlIFNDU0kgbWlkbGF5ZXIgbm8gbG9uZ2VyIGdlbmVyYXRlcyBub24tU0cgY29tbWFuZHMuCkBAIC0xMTAsNiArMTIyLDcgQEAKIAlfX2JlNjQJCQlpZF9leHQ7CiAJX19iZTY0CQkJaW9jX2d1aWQ7CiAJX19iZTY0CQkJc2VydmljZV9pZDsKKwl1MTYJCQlpb19jbGFzczsKIAlzdHJ1Y3Qgc3JwX2hvc3QJICAgICAgICpzcnBfaG9zdDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAgICAgICpzY3NpX2hvc3Q7CiAJY2hhcgkJCXRhcmdldF9uYW1lWzMyXTsKQEAgLTEyNiw2ICsxMzksOCBAQAogCWludAkJCW1heF90aV9pdV9sZW47CiAJczMyCQkJcmVxX2xpbTsKIAorCWludAkJCXplcm9fcmVxX2xpbTsKKwogCXVuc2lnbmVkCQlyeF9oZWFkOwogCXN0cnVjdCBzcnBfaXUJICAgICAgICpyeF9yaW5nW1NSUF9SUV9TSVpFXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwppbmRleCAyYjJlYzEwLi45NWMwZGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJc3RydWN0IHN3ICpzdzsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGksIGosIGssIGw7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwkvKiBbU1dfTEVOR1RIXSAqLwogCXVuc2lnbmVkIGNoYXIgKmlkYnVmID0gTlVMTDsJLyogW1NXX0xFTkdUSF0gKi8KIAl1bnNpZ25lZCBjaGFyIG0gPSAxOwpAQCAtNzc2LDcgKzc3NiwxMCBAQAogCQkJZ290byBmYWlsNDsKIAl9CiAKLQlyZXR1cm4gMDsKKyBvdXQ6CWtmcmVlKGJ1Zik7CisJa2ZyZWUoaWRidWYpOworCisJcmV0dXJuIGVycjsKIAogIGZhaWw0OglpbnB1dF9mcmVlX2RldmljZShzdy0+ZGV2W2ldKTsKICBmYWlsMzoJd2hpbGUgKC0taSA+PSAwKQpAQCAtNzg0LDkgKzc4Nyw3IEBACiAgZmFpbDI6CWdhbWVwb3J0X2Nsb3NlKGdhbWVwb3J0KTsKICBmYWlsMToJZ2FtZXBvcnRfc2V0X2RydmRhdGEoZ2FtZXBvcnQsIE5VTEwpOwogCWtmcmVlKHN3KTsKLQlrZnJlZShidWYpOwotCWtmcmVlKGlkYnVmKTsKLQlyZXR1cm4gZXJyOworCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgdm9pZCBzd19kaXNjb25uZWN0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKaW5kZXggOTZjNmJmNy4uMWYwZTcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwpAQCAtMjQ1LDkgKzI0NSw5IEBACiAJCWlmIChoaW5nZV9jb3VudCA+PSBISU5HRV9TVEFCTEVfQ09VTlQpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JnaWtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CiAKLQkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXXzAsICgoc2hhcnBzbF9oaW5nZV9zdGF0ZSAmIENPUkdJX1NDUF9TV0EpICE9IDApKTsKLQkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXXzEsICgoc2hhcnBzbF9oaW5nZV9zdGF0ZSAmIENPUkdJX1NDUF9TV0IpICE9IDApKTsKLQkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXXzIsIChSRUFEX0dQSU9fQklUKENPUkdJX0dQSU9fQUtfSU5UKSAhPSAwKSk7CisJCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGNvcmdpa2JkX2RhdGEtPmlucHV0LCBTV19MSUQsICgoc2hhcnBzbF9oaW5nZV9zdGF0ZSAmIENPUkdJX1NDUF9TV0EpICE9IDApKTsKKwkJCWlucHV0X3JlcG9ydF9zd2l0Y2goY29yZ2lrYmRfZGF0YS0+aW5wdXQsIFNXX1RBQkxFVF9NT0RFLCAoKHNoYXJwc2xfaGluZ2Vfc3RhdGUgJiBDT1JHSV9TQ1BfU1dCKSAhPSAwKSk7CisJCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGNvcmdpa2JkX2RhdGEtPmlucHV0LCBTV19IRUFEUEhPTkVfSU5TRVJULCAoUkVBRF9HUElPX0JJVChDT1JHSV9HUElPX0FLX0lOVCkgIT0gMCkpOwogCQkJaW5wdXRfc3luYyhjb3JnaWtiZF9kYXRhLT5pbnB1dCk7CiAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmdpa2JkX2RhdGEtPmxvY2ssIGZsYWdzKTsKQEAgLTM0MCw5ICszNDAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvcmdpa2JkX2tleWNvZGUpOyBpKyspCiAJCXNldF9iaXQoY29yZ2lrYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKIAljbGVhcl9iaXQoMCwgaW5wdXRfZGV2LT5rZXliaXQpOwotCXNldF9iaXQoU1dfMCwgaW5wdXRfZGV2LT5zd2JpdCk7Ci0Jc2V0X2JpdChTV18xLCBpbnB1dF9kZXYtPnN3Yml0KTsKLQlzZXRfYml0KFNXXzIsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfTElELCBpbnB1dF9kZXYtPnN3Yml0KTsKKwlzZXRfYml0KFNXX1RBQkxFVF9NT0RFLCBpbnB1dF9kZXYtPnN3Yml0KTsKKwlzZXRfYml0KFNXX0hFQURQSE9ORV9JTlNFUlQsIGlucHV0X2Rldi0+c3diaXQpOwogCiAJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNvcmdpa2JkLT5pbnB1dCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwppbmRleCAxZDIzOGE5Li5jNWQwM2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCkBAIC0yOTksOSArMjk5LDkgQEAKIAlpZiAoaGluZ2VfY291bnQgPj0gSElOR0VfU1RBQkxFX0NPVU5UKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzcGl0emtiZF9kYXRhLT5sb2NrLCBmbGFncyk7CiAKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChzcGl0emtiZF9kYXRhLT5pbnB1dCwgU1dfMCwgKChHUExSKFNQSVRaX0dQSU9fU1dBKSAmIEdQSU9fYml0KFNQSVRaX0dQSU9fU1dBKSkgIT0gMCkpOwotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKHNwaXR6a2JkX2RhdGEtPmlucHV0LCBTV18xLCAoKEdQTFIoU1BJVFpfR1BJT19TV0IpICYgR1BJT19iaXQoU1BJVFpfR1BJT19TV0IpKSAhPSAwKSk7Ci0JCWlucHV0X3JlcG9ydF9zd2l0Y2goc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXXzIsICgoR1BMUihTUElUWl9HUElPX0FLX0lOVCkgJiBHUElPX2JpdChTUElUWl9HUElPX0FLX0lOVCkpICE9IDApKTsKKwkJaW5wdXRfcmVwb3J0X3N3aXRjaChzcGl0emtiZF9kYXRhLT5pbnB1dCwgU1dfTElELCAoKEdQTFIoU1BJVFpfR1BJT19TV0EpICYgR1BJT19iaXQoU1BJVFpfR1BJT19TV0EpKSAhPSAwKSk7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2goc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXX1RBQkxFVF9NT0RFLCAoKEdQTFIoU1BJVFpfR1BJT19TV0IpICYgR1BJT19iaXQoU1BJVFpfR1BJT19TV0IpKSAhPSAwKSk7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2goc3BpdHprYmRfZGF0YS0+aW5wdXQsIFNXX0hFQURQSE9ORV9JTlNFUlQsICgoR1BMUihTUElUWl9HUElPX0FLX0lOVCkgJiBHUElPX2JpdChTUElUWl9HUElPX0FLX0lOVCkpICE9IDApKTsKIAkJaW5wdXRfc3luYyhzcGl0emtiZF9kYXRhLT5pbnB1dCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BpdHprYmRfZGF0YS0+bG9jaywgZmxhZ3MpOwpAQCAtMzk4LDkgKzM5OCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BpdHprYmRfa2V5Y29kZSk7IGkrKykKIAkJc2V0X2JpdChzcGl0emtiZC0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCWNsZWFyX2JpdCgwLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0Jc2V0X2JpdChTV18wLCBpbnB1dF9kZXYtPnN3Yml0KTsKLQlzZXRfYml0KFNXXzEsIGlucHV0X2Rldi0+c3diaXQpOwotCXNldF9iaXQoU1dfMiwgaW5wdXRfZGV2LT5zd2JpdCk7CisJc2V0X2JpdChTV19MSUQsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfVEFCTEVUX01PREUsIGlucHV0X2Rldi0+c3diaXQpOworCXNldF9iaXQoU1dfSEVBRFBIT05FX0lOU0VSVCwgaW5wdXRfZGV2LT5zd2JpdCk7CiAKIAlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCmluZGV4IDM2Y2QyZTAuLmU0ZTViZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKQEAgLTMxOCw2ICszMTgsMTYgQEAKIAl7IEtFX0VORCwgMCB9CiB9OwogCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBrZXltYXBfYW9wZW5fMTU1OWFzW10gPSB7CisJeyBLRV9LRVksICAweDAxLCBLRVlfSEVMUCB9LAorCXsgS0VfS0VZLCAgMHgwNiwgS0VZX1BST0czIH0sCisJeyBLRV9LRVksICAweDExLCBLRVlfUFJPRzEgfSwKKwl7IEtFX0tFWSwgIDB4MTIsIEtFWV9QUk9HMiB9LAorCXsgS0VfV0lGSSwgMHgzMCwgMCB9LAorCXsgS0VfS0VZLCAgMHgzMSwgS0VZX01BSUwgfSwKKwl7IEtFX0tFWSwgIDB4MzYsIEtFWV9XV1cgfSwKK307CisKIC8qCiAgKiBJZiB5b3VyIG1hY2hpbmUgaXMgbm90IGhlcmUgKHdoaWNoIGlzIGN1cnJlbnRseSByYXRoZXIgbGlrZWx5KSwgcGxlYXNlIHNlbmQKICAqIGEgbGlzdCBvZiBidXR0b25zIGFuZCB0aGVpciBrZXkgY29kZXMgKHJlcG9ydGVkIHdoZW4gbG9hZGluZyB0aGlzIG1vZHVsZQpAQCAtMzY5LDYgKzM3OSwxNSBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEgPSBrZXltYXBfYWNlcl90cmF2ZWxtYXRlXzI0MAogCX0sCisgICAgICAgIHsKKwkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCisJCS5pZGVudCA9ICJBT3BlbiAxNTU5QVMiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRTJVIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJFMlUiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2FvcGVuXzE1NTlhcworCX0sCiAJeyBOVUxMLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCmluZGV4IDIxNDE1MDEuLmEwZTJlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAl9CiAKIAlpZiAocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX09MRFBST1RPKSB7Ci0JCWxlZnQgPSBwYWNrZXRbMl0gJiAweDA4OwotCQlyaWdodCA9IHBhY2tldFsyXSAmIDB4MTA7CisJCWxlZnQgPSBwYWNrZXRbMl0gJiAweDEwOworCQlyaWdodCA9IHBhY2tldFsyXSAmIDB4MDg7CiAJCW1pZGRsZSA9IDA7CiAJCXggPSBwYWNrZXRbMV0gfCAoKHBhY2tldFswXSAmIDB4MDcpIDw8IDcpOwogCQl5ID0gcGFja2V0WzRdIHwgKChwYWNrZXRbM10gJiAweDA3KSA8PCA3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwppbmRleCA1Y2NjM2VmLi5jMTQzOTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0yMiwxMiArMjIsMzYgQEAKIAogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGxpZmVib29rX2RtaV90YWJsZVtdID0gewogICAgICAgIHsKKyAgICAgICAgICAgICAgIC5pZGVudCA9ICJMaWZlQm9vayBCIiwKKyAgICAgICAgICAgICAgIC5tYXRjaGVzID0geworICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxpZmVCb29rIEIgU2VyaWVzIiksCisgICAgICAgICAgICAgICB9LAorICAgICAgIH0sCisgICAgICAgewogICAgICAgICAgICAgICAgLmlkZW50ID0gIkxpZmVib29rIEIiLAogICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTElGRUJPT0sgQiBTZXJpZXMiKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CisgICAgICAgICAgICAgICAuaWRlbnQgPSAiTGlmZWJvb2sgQjIxM3gvQjIxNTAiLAorICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGlmZUJvb2sgQjIxMzEvQjIxMzMvQjIxNTAiKSwKKyAgICAgICAgICAgICAgIH0sCisgICAgICAgfSwKKyAgICAgICB7CisgICAgICAgICAgICAgICAuaWRlbnQgPSAiWmVwaHlyIiwKKyAgICAgICAgICAgICAgIC5tYXRjaGVzID0geworICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlpFUEhZUiIpLAorICAgICAgICAgICAgICAgfSwKKyAgICAgICB9LAorICAgICAgIHsKKyAgICAgICAgICAgICAgIC5pZGVudCA9ICJDRi0xOCIsCisgICAgICAgICAgICAgICAubWF0Y2hlcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRi0xOCIpLAorICAgICAgICAgICAgICAgfSwKKyAgICAgICB9LAorICAgICAgIHsKICAgICAgICAgICAgICAgIC5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKICAgICAgICAgICAgICAgIC5tYXRjaGVzID0gewogICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxpZmVCb29rIEIxNDIiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IDQwMzMzZDYuLjJmMGQyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBQUzJQUF9LSU5EX1dIRUVMCTEKICNkZWZpbmUgUFMyUFBfS0lORF9NWAkJMgogI2RlZmluZSBQUzJQUF9LSU5EX1RQMwkJMworI2RlZmluZSBQUzJQUF9LSU5EX1RSQUNLTUFOCTQKIAogLyogTG9naXRlY2ggbW91c2UgZmVhdHVyZXMgKi8KICNkZWZpbmUgUFMyUFBfV0hFRUwJCTB4MDEKQEAgLTIyMyw2ICsyMjQsNyBAQAogCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCisJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCiAJCXsgODAsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1NJREVfQlROIHwgUFMyUFBfV0hFRUwgfSwKIAkJeyA4MSwJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKIAkJeyA4MywJUFMyUFBfS0lORF9XSEVFTCwJUFMyUFBfV0hFRUwgfSwKQEAgLTI5OCw2ICszMDAsMTAgQEAKIAkJCXBzbW91c2UtPm5hbWUgPSAiVG91Y2hQYWQgMyI7CiAJCQlicmVhazsKIAorCQljYXNlIFBTMlBQX0tJTkRfVFJBQ0tNQU46CisJCQlwc21vdXNlLT5uYW1lID0gIlRyYWNrTWFuIjsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQkvKgogCQkJICogU2V0IG5hbWUgdG8gIk1vdXNlIiBvbmx5IHdoZW4gdXNpbmcgUFMyKyssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IDE0OTQxNzUuLjE2MWFmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC0zNiwxMyArMzYsMTAgQEAKIAogCiAvKgotICogVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBvbiBhbiBhZHM3ODQ2IC8gTjc3MCBkZXZpY2UuCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gaGVhdmlseSB0ZXN0ZWQgb24gYSBOb2tpYSA3NzAsIGFuZCBsaWdodGx5CisgKiB0ZXN0ZWQgb24gb3RoZXIgYWRzNzg0NiBkZXZpY2VzIChPU0svTWlzdHJhbCwgTHViYm9jaykuCiAgKiBTdXBwb3J0IGZvciBhZHM3ODQzIGFuZCBhZHM3ODQ1IGhhcyBvbmx5IGJlZW4gc3R1YmJlZCBpbi4KICAqCi0gKiBOb3QgeWV0IGRvbmU6ICBIb3cgYWNjdXJhdGUgYXJlIHRoZSB0ZW1wZXJhdHVyZSBhbmQgdm9sdGFnZQotICogcmVhZGluZ3M/IChTeXN0ZW0tc3BlY2lmaWMgY2FsaWJyYXRpb24gc2hvdWxkIHN1cHBvcnQKLSAqIGFjY3VyYWN5IG9mIDAuMyBkZWdyZWVzIEM7IG90aGVyd2lzZSBpdCdzIDIuMCBkZWdyZWVzLikKLSAqCiAgKiBJUlEgaGFuZGxpbmcgbmVlZHMgYSB3b3JrYXJvdW5kIGJlY2F1c2Ugb2YgYSBzaG9ydGNvbWluZyBpbiBoYW5kbGluZwogICogZWRnZSB0cmlnZ2VyZWQgSVJRcyBvbiBzb21lIHBsYXRmb3JtcyBsaWtlIHRoZSBPTUFQMS8yLiBUaGVzZQogICogcGxhdGZvcm1zIGRvbid0IGhhbmRsZSB0aGUgQVJNIGxhenkgSVJRIGRpc2FibGluZyBwcm9wZXJseSwgdGh1cyB3ZQpAQCAtMjQ4LDEwICsyNDUsMTMgQEAKIAogCWlmIChyZXEtPm1zZy5zdGF0dXMpCiAJCXN0YXR1cyA9IHJlcS0+bXNnLnN0YXR1czsKLQlzYW1wbGUgPSBiZTE2X3RvX2NwdShyZXEtPnNhbXBsZSk7Ci0Jc2FtcGxlID0gc2FtcGxlID4+IDQ7Ci0Ja2ZyZWUocmVxKTsKIAorCS8qIG9uLXdpcmUgaXMgYSBtdXN0LWlnbm9yZSBiaXQsIGEgQkUxMiB2YWx1ZSwgdGhlbiBwYWRkaW5nICovCisJc2FtcGxlID0gYmUxNl90b19jcHUocmVxLT5zYW1wbGUpOworCXNhbXBsZSA9IHNhbXBsZSA+PiAzOworCXNhbXBsZSAmPSAweDBmZmY7CisKKwlrZnJlZShyZXEpOwogCXJldHVybiBzdGF0dXMgPyBzdGF0dXMgOiBzYW1wbGU7CiB9CiAKQEAgLTMzNiwxMyArMzM2LDEzIEBACiAJdTE2CQkJeCwgeSwgejEsIHoyOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCi0JLyogYWRqdXN0OiAgMTIgYml0IHNhbXBsZXMgKGxlZnQgYWxpZ25lZCksIGJ1aWx0IGZyb20KLQkgKiB0d28gOCBiaXQgdmFsdWVzIHdyaXRlbiBtc2ItZmlyc3QuCisJLyogYWRqdXN0OiAgb24td2lyZSBpcyBhIG11c3QtaWdub3JlIGJpdCwgYSBCRTEyIHZhbHVlLCB0aGVuIHBhZGRpbmc7CisJICogYnVpbHQgZnJvbSB0d28gOCBiaXQgdmFsdWVzIHdyaXR0ZW4gbXNiLWZpcnN0LgogCSAqLwotCXggPSBiZTE2X3RvX2NwdSh0cy0+dGMueCkgPj4gNDsKLQl5ID0gYmUxNl90b19jcHUodHMtPnRjLnkpID4+IDQ7Ci0JejEgPSBiZTE2X3RvX2NwdSh0cy0+dGMuejEpID4+IDQ7Ci0JejIgPSBiZTE2X3RvX2NwdSh0cy0+dGMuejIpID4+IDQ7CisJeCA9IChiZTE2X3RvX2NwdSh0cy0+dGMueCkgPj4gMykgJiAweDBmZmY7CisJeSA9IChiZTE2X3RvX2NwdSh0cy0+dGMueSkgPj4gMykgJiAweDBmZmY7CisJejEgPSAoYmUxNl90b19jcHUodHMtPnRjLnoxKSA+PiAzKSAmIDB4MGZmZjsKKwl6MiA9IChiZTE2X3RvX2NwdSh0cy0+dGMuejIpID4+IDMpICYgMHgwZmZmOwogCiAJLyogcmFuZ2UgZmlsdGVyaW5nICovCiAJaWYgKHggPT0gTUFYXzEyQklUKQpAQCAtNDIwLDcgKzQyMCw3IEBACiAKIAltID0gJnRzLT5tc2dbdHMtPm1zZ19pZHhdOwogCXQgPSBsaXN0X2VudHJ5KG0tPnRyYW5zZmVycy5wcmV2LCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyLCB0cmFuc2Zlcl9saXN0KTsKLQl2YWwgPSAoKih1MTYgKil0LT5yeF9idWYpID4+IDM7CisJdmFsID0gKGJlMTZfdG9fY3B1KCooX19iZTE2ICopdC0+cnhfYnVmKSA+PiAzKSAmIDB4MGZmZjsKIAlpZiAoIXRzLT5yZWFkX2NudCB8fCAoYWJzKHRzLT5sYXN0X3JlYWQgLSB2YWwpID4gdHMtPmRlYm91bmNlX3RvbCkpIHsKIAkJLyogUmVwZWF0IGl0LCBpZiB0aGlzIHdhcyB0aGUgZmlyc3QgcmVhZCBvciB0aGUgcmVhZAogCQkgKiB3YXNuJ3QgY29uc2lzdGVudCBlbm91Z2guICovCkBAIC00NjksNyArNDY5LDcgQEAKIAlzcGluX2xvY2tfaXJxKCZ0cy0+bG9jayk7CiAKIAlpZiAodW5saWtlbHkodHMtPm1zZ19pZHggJiYgIXRzLT5wZW5kb3duKSkgewotCQkvKiBtZWFzdXJtZW50IGN5Y2xlIGVuZGVkICovCisJCS8qIG1lYXN1cmVtZW50IGN5Y2xlIGVuZGVkICovCiAJCWlmICghZGV2aWNlX3N1c3BlbmRlZCgmdHMtPnNwaS0+ZGV2KSkgewogCQkJdHMtPmlycV9kaXNhYmxlZCA9IDA7CiAJCQllbmFibGVfaXJxKHRzLT5zcGktPmlycSk7CkBAIC00OTUsMTEgKzQ5NSwxMCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cy0+bG9jaywgZmxhZ3MpOwogCWlmIChsaWtlbHkodHMtPmdldF9wZW5kb3duX3N0YXRlKCkpKSB7CiAJCWlmICghdHMtPmlycV9kaXNhYmxlZCkgewotCQkJLyogUkVWSVNJVCBpcnEgbG9naWMgZm9yIG1hbnkgQVJNIGNoaXBzIGhhcyBjbG9uZWQgYQotCQkJICogYnVnIHdoZXJlaW4gZGlzYWJsaW5nIGFuIGlycSBpbiBpdHMgaGFuZGxlciB3b24ndAotCQkJICogd29yazsoaXQncyBkaXNhYmxlZCBsYXppbHksIGFuZCB0b28gbGF0ZSB0byB3b3JrLgotCQkJICogdW50aWwgYWxsIHRoZWlyIGlycSBsb2dpYyBpcyBmaXhlZCwgd2UgbXVzdCBzaGFkb3cKLQkJCSAqIHRoYXQgc3RhdGUgaGVyZS4KKwkJCS8qIFRoZSBBUk0gZG9fc2ltcGxlX0lSUSgpIGRpc3BhdGNoZXIgZG9lc24ndCBhY3QKKwkJCSAqIGxpa2UgdGhlIG90aGVyIGRpc3BhdGNoZXJzOiAgaXQgd2lsbCByZXBvcnQgSVJRcworCQkJICogZXZlbiBhZnRlciB0aGV5J3ZlIGJlZW4gZGlzYWJsZWQuICBXZSB3b3JrIGFyb3VuZAorCQkJICogdGhhdCBoZXJlLiAgKFRoZSAiZ2VuZXJpYyBpcnEiIGZyYW1ld29yayBtYXkgaGVscC4uLikKIAkJCSAqLwogCQkJdHMtPmlycV9kaXNhYmxlZCA9IDE7CiAJCQlkaXNhYmxlX2lycSh0cy0+c3BpLT5pcnEpOwpAQCAtNjA5LDE2ICs2MDgsMjAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogUkVWSVNJVCB3aGVuIHRoZSBpcnEgY2FuIGJlIHRyaWdnZXJlZCBhY3RpdmUtbG93LCBvciBpZiBmb3Igc29tZQorCSAqIHJlYXNvbiB0aGUgdG91Y2hzY3JlZW4gaXNuJ3QgaG9va2VkIHVwLCB3ZSBkb24ndCBuZWVkIHRvIGFjY2VzcworCSAqIHRoZSBwZW5kb3duIHN0YXRlLgorCSAqLwogCWlmIChwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGUgPT0gTlVMTCkgewogCQlkZXZfZGJnKCZzcGktPmRldiwgIm5vIGdldF9wZW5kb3duX3N0YXRlIGZ1bmN0aW9uP1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFdlJ2Qgc2V0IHRoZSB3b3Jkc2l6ZSB0byAxMiBiaXRzIC4uLiBleGNlcHQgdGhhdCBzb21lIGNvbnRyb2xsZXJzCi0JICogd2lsbCB0aGVuIHRyZWF0IHRoZSA4IGJpdCBjb21tYW5kIHdvcmRzIGFzIDEyIGJpdHMgKGFuZCBkcm9wIHRoZQotCSAqIGZvdXIgTVNCcyBvZiB0aGUgMTIgYml0IHJlc3VsdCkuICBSZXN1bHQ6IGlucHV0cyBtdXN0IGJlIHNoaWZ0ZWQKLQkgKiB0byBkaXNjYXJkIHRoZSBmb3VyIGdhcmJhZ2UgTFNCcy4KKwkvKiBXZSdkIHNldCBUWCB3b3Jkc2l6ZSA4IGJpdHMgYW5kIFJYIHdvcmRzaXplIHRvIDEzIGJpdHMgLi4uIGV4Y2VwdAorCSAqIHRoYXQgZXZlbiBpZiB0aGUgaGFyZHdhcmUgY2FuIGRvIHRoYXQsIHRoZSBTUEkgY29udHJvbGxlciBkcml2ZXIKKwkgKiBtYXkgbm90LiAgU28gd2Ugc3RpY2sgdG8gdmVyeS1wb3J0YWJsZSA4IGJpdCB3b3JkcywgYm90aCBSWCBhbmQgVFguCiAJICovCisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKIAogCXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkczc4NDYpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKQEAgLTc3Miw3ICs3NzUsNyBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKHNwaS0+aXJxLCBhZHM3ODQ2X2lycSwKIAkJCVNBX1NBTVBMRV9SQU5ET00gfCBTQV9UUklHR0VSX0ZBTExJTkcsCi0JCQlzcGktPmRldi5idXNfaWQsIHRzKSkgeworCQkJc3BpLT5kZXYuZHJpdmVyLT5uYW1lLCB0cykpIHsKIAkJZGV2X2RiZygmc3BpLT5kZXYsICJpcnEgJWQgYnVzeT9cbiIsIHNwaS0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9mcmVlX21lbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCAzY2EzY2ZiLi5mMTliODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0xNjcsNiArMTY3LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9uZXdfZXZlbnQpOwogCisvKiBBbHRlcm5hdGUgdmVyc2lvbiB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHRzCisgKiB3aGVuIGNhbGxpbmcgc3lzZnNfbm90aWZ5IGlzbid0IG5lZWRlZC4KKyAqLwordm9pZCBtZF9uZXdfZXZlbnRfaW5pbnRyKG1kZGV2X3QgKm1kZGV2KQoreworCWF0b21pY19pbmMoJm1kX2V2ZW50X2NvdW50KTsKKwl3YWtlX3VwKCZtZF9ldmVudF93YWl0ZXJzKTsKK30KKwogLyoKICAqIEVuYWJsZXMgdG8gaXRlcmF0ZSBvdmVyIGFsbCBleGlzdGluZyBtZCBhcnJheXMKICAqIGFsbF9tZGRldnNfbG9jayBwcm90ZWN0cyB0aGlzIGxpc3QuCkBAIC00MTQ5LDcgKzQxNTgsNyBAQAogCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7Ci0JbWRfbmV3X2V2ZW50KG1kZGV2KTsKKwltZF9uZXdfZXZlbnRfaW5pbnRyKG1kZGV2KTsKIH0KIAogLyogc2VxX2ZpbGUgaW1wbGVtZW50YXRpb24gL3Byb2MvbWRzdGF0ICovCkBAIC01MDI4LDggKzUwMzcsMTAgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IHN0b3BwaW5nIGFsbCBtZCBkZXZpY2VzLlxuIik7CiAKIAkJSVRFUkFURV9NRERFVihtZGRldix0bXApCi0JCQlpZiAobWRkZXZfdHJ5bG9jayhtZGRldikpCisJCQlpZiAobWRkZXZfdHJ5bG9jayhtZGRldikpIHsKIAkJCQlkb19tZF9zdG9wIChtZGRldiwgMSk7CisJCQkJbWRkZXZfdW5sb2NrKG1kZGV2KTsKKwkJCX0KIAkJLyoKIAkJICogY2VydGFpbiBtb3JlIGV4b3RpYyBTQ1NJIGRldmljZXMgYXJlIGtub3duIHRvIGJlCiAJCSAqIHZvbGF0aWxlIHdydCB0b28gZWFybHkgc3lzdGVtIHJlYm9vdHMuIFdoaWxlIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IDJmMGYzNTguLjlmZDg3NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAKIAlkdmJfbmV0X2ZlZWRfc3RvcChkZXYpOwogCXByaXYtPnJ4X21vZGUgPSBSWF9NT0RFX1VOSTsKLQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWRwcmludGsoIiVzOiBwcm9taXNjdW91cyBtb2RlXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJZHZiX25ldF9mZWVkX3N0YXJ0KGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggOTA4MDg1My4uYTMwMDg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTE2MDUsNiArMTYwNSwyMSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQKK21wdF9zaWduYWxfcmVzZXQoaW50IGluZGV4LCBNUFRfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpCit7CisJaWYgKChNcHREcml2ZXJDbGFzc1tpbmRleF0gPT0gTVBUU1BJX0RSSVZFUiAmJgorCSAgICAgaW9jLT5idXNfdHlwZSAhPSBTUEkpIHx8CisJICAgIChNcHREcml2ZXJDbGFzc1tpbmRleF0gPT0gTVBURkNfRFJJVkVSICYmCisJICAgICBpb2MtPmJ1c190eXBlICE9IEZDKSB8fAorCSAgICAoTXB0RHJpdmVyQ2xhc3NbaW5kZXhdID09IE1QVFNBU19EUklWRVIgJiYKKwkgICAgIGlvYy0+YnVzX3R5cGUgIT0gU0FTKSkKKwkJLyogbWFrZSBzdXJlIHdlIG9ubHkgY2FsbCB0aGUgcmVsZXZhbnQgcmVzZXQgaGFuZGxlcgorCQkgKiBmb3IgdGhlIGJ1cyAqLworCQlyZXR1cm4gMDsKKwlyZXR1cm4gKE1wdFJlc2V0SGFuZGxlcnNbaW5kZXhdKShpb2MsIHJlc2V0X3BoYXNlKTsKK30KKwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKICAqCW1wdF9kb19pb2NfcmVjb3ZlcnkgLSBJbml0aWFsaXplIG9yIHJlY292ZXIgTVBUIGFkYXB0ZXIuCkBAIC0xODg1LDE0ICsxOTAwLDE0IEBACiAJCQlpZiAoKHJldCA9PSAwKSAmJiBNcHRSZXNldEhhbmRsZXJzW2lpXSkgewogCQkJCWRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkNhbGxpbmcgSU9DIHBvc3RfcmVzZXQgaGFuZGxlciAjJWRcbiIsCiAJCQkJCQlpb2MtPm5hbWUsIGlpKSk7Ci0JCQkJcmMgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MsIE1QVF9JT0NfUE9TVF9SRVNFVCk7CisJCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOwogCQkJCWhhbmRsZXJzKys7CiAJCQl9CiAKIAkJCWlmIChhbHRfaW9jX3JlYWR5ICYmIE1wdFJlc2V0SGFuZGxlcnNbaWldKSB7CiAJCQkJZHJzcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJDYWxsaW5nIGFsdC0lcyBwb3N0X3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAogCQkJCQkJaW9jLT5uYW1lLCBpb2MtPmFsdF9pb2MtPm5hbWUsIGlpKSk7Ci0JCQkJcmMgKz0gKCooTXB0UmVzZXRIYW5kbGVyc1tpaV0pKShpb2MtPmFsdF9pb2MsIE1QVF9JT0NfUE9TVF9SRVNFVCk7CisJCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOwogCQkJCWhhbmRsZXJzKys7CiAJCQl9CiAJCX0KQEAgLTMyNjcsMTEgKzMyODIsMTEgQEAKIAkJCQlpZiAoTXB0UmVzZXRIYW5kbGVyc1tpaV0pIHsKIAkJCQkJZHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiQ2FsbGluZyBJT0MgcHJlX3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAogCQkJCQkJCWlvYy0+bmFtZSwgaWkpKTsKLQkJCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYywgTVBUX0lPQ19QUkVfUkVTRVQpOworCQkJCQlyICs9IG1wdF9zaWduYWxfcmVzZXQoaWksIGlvYywgTVBUX0lPQ19QUkVfUkVTRVQpOwogCQkJCQlpZiAoaW9jLT5hbHRfaW9jKSB7CiAJCQkJCQlkcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJDYWxsaW5nIGFsdC0lcyBwcmVfcmVzZXQgaGFuZGxlciAjJWRcbiIsCiAJCQkJCQkJCWlvYy0+bmFtZSwgaW9jLT5hbHRfaW9jLT5uYW1lLCBpaSkpOwotCQkJCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYy0+YWx0X2lvYywgTVBUX0lPQ19QUkVfUkVTRVQpOworCQkJCQkJciArPSBtcHRfc2lnbmFsX3Jlc2V0KGlpLCBpb2MtPmFsdF9pb2MsIE1QVF9JT0NfUFJFX1JFU0VUKTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTU3MDYsMTEgKzU3MjEsMTEgQEAKIAkJCWlmIChNcHRSZXNldEhhbmRsZXJzW2lpXSkgewogCQkJCWR0bXByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiQ2FsbGluZyBJT0MgcmVzZXRfc2V0dXAgaGFuZGxlciAjJWRcbiIsCiAJCQkJCQlpb2MtPm5hbWUsIGlpKSk7Ci0JCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYywgTVBUX0lPQ19TRVRVUF9SRVNFVCk7CisJCQkJciArPSBtcHRfc2lnbmFsX3Jlc2V0KGlpLCBpb2MsIE1QVF9JT0NfU0VUVVBfUkVTRVQpOwogCQkJCWlmIChpb2MtPmFsdF9pb2MpIHsKIAkJCQkJZHRtcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJDYWxsaW5nIGFsdC0lcyBzZXR1cCByZXNldCBoYW5kbGVyICMlZFxuIiwKIAkJCQkJCQlpb2MtPm5hbWUsIGlvYy0+YWx0X2lvYy0+bmFtZSwgaWkpKTsKLQkJCQkJciArPSAoKihNcHRSZXNldEhhbmRsZXJzW2lpXSkpKGlvYy0+YWx0X2lvYywgTVBUX0lPQ19TRVRVUF9SRVNFVCk7CisJCQkJCXIgKz0gbXB0X3NpZ25hbF9yZXNldChpaSwgaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1NFVFVQX1JFU0VUKTsKIAkJCQl9CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCmluZGV4IGYyYTRkMzguLjMyMDFkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYwpAQCAtODMxLDYgKzgzMSw3IEBACiAJcmV0dXJuIHJjOwogfQogCisjaWZkZWYgQ09ORklHX1BNCiAvKgogICogc3BpIG1vZHVsZSByZXN1bWUgaGFuZGxlcgogICovCkBAIC04NDYsNiArODQ3LDcgQEAKIAogCXJldHVybiByYzsKIH0KKyNlbmRpZgogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKaW5kZXggNWVhMTMzYy4uN2JkNGQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYwpAQCAtNTUsNiArNTUsNyBAQAogCXUzMiBtOwkJCS8qIG1lc3NhZ2UgaWQgKi8KIAlzdHJ1Y3QgaTJvX21lc3NhZ2UgKm1zZzsJLyogcG9pbnRlciB0byB0aGUgcmVwbHkgbWVzc2FnZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbm9kZSBpbiBnbG9iYWwgd2FpdCBsaXN0ICovCisJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIGJlZm9yZSBtb2RpZnlpbmcgKi8KIH07CiAKIC8qIFdvcmsgc3RydWN0IG5lZWRlZCB0byBoYW5kbGUgTENUIE5PVElGWSByZXBsaWVzICovCkBAIC04Nyw2ICs4OCw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJSU5JVF9MSVNUX0hFQUQoJndhaXQtPmxpc3QpOworCXNwaW5fbG9ja19pbml0KCZ3YWl0LT5sb2NrKTsKIAogCXJldHVybiB3YWl0OwogfTsKQEAgLTEyNSw2ICsxMjcsNyBAQAogCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKIAlzdHJ1Y3QgaTJvX2V4ZWNfd2FpdCAqd2FpdDsKIAlzdGF0aWMgdTMyIHRjbnR4dCA9IDB4ODAwMDAwMDA7CisJbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCiAJd2FpdCA9IGkyb19leGVjX3dhaXRfYWxsb2MoKTsKQEAgLTE0NiwzMyArMTQ5LDI4IEBACiAJd2FpdC0+dGNudHh0ID0gdGNudHh0Kys7CiAJbXNnLT51LnMudGNudHh0ID0gY3B1X3RvX2xlMzIod2FpdC0+dGNudHh0KTsKIAorCXdhaXQtPndxID0gJndxOworCS8qCisJICogd2UgYWRkIGVsZW1lbnRzIHRvIHRoZSBoZWFkLCBiZWNhdXNlIGlmIGEgZW50cnkgaW4gdGhlIGxpc3Qgd2lsbAorCSAqIG5ldmVyIGJlIHJlbW92ZWQsIHdlIGhhdmUgdG8gaXRlcmF0ZSBvdmVyIGl0IGV2ZXJ5IHRpbWUKKwkgKi8KKwlsaXN0X2FkZCgmd2FpdC0+bGlzdCwgJmkyb19leGVjX3dhaXRfbGlzdCk7CisKIAkvKgogCSAqIFBvc3QgdGhlIG1lc3NhZ2UgdG8gdGhlIGNvbnRyb2xsZXIuIEF0IHNvbWUgcG9pbnQgbGF0ZXIgaXQgd2lsbAogCSAqIHJldHVybi4gSWYgd2UgdGltZSBvdXQgYmVmb3JlIGl0IHJldHVybnMgdGhlbiBjb21wbGV0ZSB3aWxsIGJlIHplcm8uCiAJICovCiAJaTJvX21zZ19wb3N0KGMsIG1zZyk7CiAKLQlpZiAoIXdhaXQtPmNvbXBsZXRlKSB7Ci0JCXdhaXQtPndxID0gJndxOwotCQkvKgotCQkgKiB3ZSBhZGQgZWxlbWVudHMgYWRkIHRoZSBoZWFkLCBiZWNhdXNlIGlmIGEgZW50cnkgaW4gdGhlIGxpc3QKLQkJICogd2lsbCBuZXZlciBiZSByZW1vdmVkLCB3ZSBoYXZlIHRvIGl0ZXJhdGUgb3ZlciBpdCBldmVyeSB0aW1lCi0JCSAqLwotCQlsaXN0X2FkZCgmd2FpdC0+bGlzdCwgJmkyb19leGVjX3dhaXRfbGlzdCk7CisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIHdhaXQtPmNvbXBsZXRlLCB0aW1lb3V0ICogSFopOwogCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCB3YWl0LT5jb21wbGV0ZSwKLQkJCQkJCSB0aW1lb3V0ICogSFopOworCXNwaW5fbG9ja19pcnFzYXZlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CiAKLQkJd2FpdC0+d3EgPSBOVUxMOwotCX0KKwl3YWl0LT53cSA9IE5VTEw7CiAKLQliYXJyaWVyKCk7Ci0KLQlpZiAod2FpdC0+Y29tcGxldGUpIHsKKwlpZiAod2FpdC0+Y29tcGxldGUpCiAJCXJjID0gbGUzMl90b19jcHUod2FpdC0+bXNnLT5ib2R5WzBdKSA+PiAyNDsKLQkJaTJvX2ZsdXNoX3JlcGx5KGMsIHdhaXQtPm0pOwotCQlpMm9fZXhlY193YWl0X2ZyZWUod2FpdCk7Ci0JfSBlbHNlIHsKKwllbHNlIHsKIAkJLyoKIAkJICogV2UgY2Fubm90IHJlbW92ZSBpdCBub3cuIFRoaXMgaXMgaW1wb3J0YW50LiBXaGVuIGl0IGRvZXMKIAkJICogdGVybWluYXRlICh3aGljaCBpdCBtdXN0IGRvIGlmIHRoZSBjb250cm9sbGVyIGhhcyBub3QKQEAgLTE4Niw2ICsxODQsMTMgQEAKIAkJcmMgPSAtRVRJTUVET1VUOwogCX0KIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndhaXQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChyYyAhPSAtRVRJTUVET1VUKSB7CisJCWkyb19mbHVzaF9yZXBseShjLCB3YWl0LT5tKTsKKwkJaTJvX2V4ZWNfd2FpdF9mcmVlKHdhaXQpOworCX0KKwogCXJldHVybiByYzsKIH07CiAKQEAgLTIxMyw3ICsyMTgsNiBAQAogewogCXN0cnVjdCBpMm9fZXhlY193YWl0ICp3YWl0LCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RhdGljIHNwaW5sb2NrX3QgbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKIAlpbnQgcmMgPSAxOwogCiAJLyoKQEAgLTIyMywyMyArMjI3LDI0IEBACiAJICogYWxyZWFkeSBleHBpcmVkLiBOb3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhhdCBleGNlcHQgbG9nIGl0IGZvcgogCSAqIGRlYnVnIHB1cnBvc2VzLCBpbmNyZWFzZSB0aW1lb3V0LCBhbmQgcmVjb21waWxlLgogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhaXQsIHRtcCwgJmkyb19leGVjX3dhaXRfbGlzdCwgbGlzdCkgewogCQlpZiAod2FpdC0+dGNudHh0ID09IGNvbnRleHQpIHsKLQkJCWxpc3RfZGVsKCZ3YWl0LT5saXN0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ3YWl0LT5sb2NrLCBmbGFncyk7CiAKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfZGVsKCZ3YWl0LT5saXN0KTsKIAogCQkJd2FpdC0+bSA9IG07CiAJCQl3YWl0LT5tc2cgPSBtc2c7CiAJCQl3YWl0LT5jb21wbGV0ZSA9IDE7CiAKLQkJCWJhcnJpZXIoKTsKLQotCQkJaWYgKHdhaXQtPndxKSB7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHdhaXQtPndxKTsKKwkJCWlmICh3YWl0LT53cSkKIAkJCQlyYyA9IDA7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQorCQkJCXJjID0gLTE7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndhaXQtPmxvY2ssIGZsYWdzKTsKKworCQkJaWYgKHJjKSB7CiAJCQkJc3RydWN0IGRldmljZSAqZGV2OwogCiAJCQkJZGV2ID0gJmMtPnBkZXYtPmRldjsKQEAgLTI0OCwxNSArMjUzLDEzIEBACiAJCQkJCSBjLT5uYW1lKTsKIAkJCQlpMm9fZG1hX2ZyZWUoZGV2LCAmd2FpdC0+ZG1hKTsKIAkJCQlpMm9fZXhlY193YWl0X2ZyZWUod2FpdCk7Ci0JCQkJcmMgPSAtMTsKLQkJCX0KKwkJCX0gZWxzZQorCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSh3YWl0LT53cSk7CiAKIAkJCXJldHVybiByYzsKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKLQogCW9zbV93YXJuKCIlczogQm9ndXMgcmVwbHkgaW4gUE9TVCBXQUlUICh0ci1jb250ZXh0OiAlMDh4KSFcbiIsIGMtPm5hbWUsCiAJCSBjb250ZXh0KTsKIApAQCAtMzIyLDE0ICszMjUsOSBAQAogc3RhdGljIGludCBpMm9fZXhlY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyb19kZXZpY2UgKmkyb19kZXYgPSB0b19pMm9fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGkyb19jb250cm9sbGVyICpjID0gaTJvX2Rldi0+aW9wOwogCiAJaTJvX2V2ZW50X3JlZ2lzdGVyKGkyb19kZXYsICZpMm9fZXhlY19kcml2ZXIsIDAsIDB4ZmZmZmZmZmYpOwogCi0JYy0+ZXhlYyA9IGkyb19kZXY7Ci0KLQlpMm9fZXhlY19sY3Rfbm90aWZ5KGMsIGMtPmxjdC0+Y2hhbmdlX2luZCArIDEpOwotCiAJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZlbmRvcl9pZCk7CiAJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3RfaWQpOwogCkBAIC01MjMsNiArNTIxLDggQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGkyb19tZXNzYWdlICptc2c7CiAKKwlkb3duKCZjLT5sY3RfbG9jayk7CisKIAlkZXYgPSAmYy0+cGRldi0+ZGV2OwogCiAJaWYgKGkyb19kbWFfcmVhbGxvYwpAQCAtNTQ1LDYgKzU0NSw4IEBACiAKIAlpMm9fbXNnX3Bvc3QoYywgbXNnKTsKIAorCXVwKCZjLT5sY3RfbG9jayk7CisKIAlyZXR1cm4gMDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCmluZGV4IDQ5MjE2NzQuLmZlYmJkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwpAQCAtODA0LDggKzgwNCw2IEBACiAKIAkvKiBBc2sgdGhlIElPUCB0byBzd2l0Y2ggdG8gUkVTRVQgc3RhdGUgKi8KIAlpMm9faW9wX3Jlc2V0KGMpOwotCi0JcHV0X2RldmljZSgmYy0+ZGV2aWNlKTsKIH0KIAogLyoqCkBAIC0xMDU5LDcgKzEwNTcsNyBAQAogCiAJc25wcmludGYocG9vbG5hbWUsIHNpemVvZihwb29sbmFtZSksICJpMm9fJXNfbXNnX2lucG9vbCIsIGMtPm5hbWUpOwogCWlmIChpMm9fcG9vbF9hbGxvYwotCSAgICAoJmMtPmluX21zZywgcG9vbG5hbWUsIEkyT19JTkJPVU5EX01TR19GUkFNRV9TSVpFICogNCwKKwkgICAgKCZjLT5pbl9tc2csIHBvb2xuYW1lLCBJMk9fSU5CT1VORF9NU0dfRlJBTUVfU0laRSAqIDQgKyBzaXplb2YodTMyKSwKIAkgICAgIEkyT19NU0dfSU5QT09MX01JTikpIHsKIAkJa2ZyZWUoYyk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL0tjb25maWcKaW5kZXggMDAzYjA3Ny4uNDViY2YwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9LY29uZmlnCkBAIC04NCw3ICs4NCw3IEBACiAKIGNvbmZpZyBNTUNfQVUxWAogCXRyaXN0YXRlICJBbGNoZW15IEFVMVhYMCBNTUMgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgTU1DCisJZGVwZW5kcyBvbiBNTUMgJiYgU09DX0FVMTIwMAogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgQU1EIEFsY2hlbXkoUikgTXVsdGltZWRpYSBjYXJkIGludGVyZmFjZS4KIAkgIElmIHlvdSBoYXZlIGEgQWxjaGVteSBwbGF0Zm9ybSB3aXRoIGEgTU1DIHNsb3QsIHNheSBZIG9yIE0gaGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3NkaGNpLmMgYi9kcml2ZXJzL21tYy9zZGhjaS5jCmluZGV4IGIwMDUzMjguLjZiZmNkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvc2RoY2kuYwpAQCAtMTA3Myw3ICsxMDczLDcgQEAKIAl0YXNrbGV0X2luaXQoJmhvc3QtPmZpbmlzaF90YXNrbGV0LAogCQlzZGhjaV90YXNrbGV0X2ZpbmlzaCwgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CiAKLQlzZXR1cF90aW1lcigmaG9zdC0+dGltZXIsIHNkaGNpX3RpbWVvdXRfdGltZXIsIChpbnQpaG9zdCk7CisJc2V0dXBfdGltZXIoJmhvc3QtPnRpbWVyLCBzZGhjaV90aW1lb3V0X3RpbWVyLCAobG9uZylob3N0KTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgc2RoY2lfaXJxLCBTQV9TSElSUSwKIAkJaG9zdC0+c2xvdF9kZXNjciwgaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvS2NvbmZpZwppbmRleCBmNmI3NzVlLi41YWMyNjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL0tjb25maWcKQEAgLTc4LDcgKzc4LDcgQEAKIAkgIG9wdGlvbi4KIAogCSAgVGhlIG9wdGlvbiBzcGVjaWZpZXMgd2hpY2ggRmxhc2ggc2VjdG9ycyBob2xkcyB0aGUgUmVkQm9vdAotCSAgcGFydGl0aW9uIHRhYmxlLiAgQSB6ZXJvIG9yIHBvc2l0aXZlIHZhbHVlIGdpdmVzIGFuIGFic29sZXRlCisJICBwYXJ0aXRpb24gdGFibGUuICBBIHplcm8gb3IgcG9zaXRpdmUgdmFsdWUgZ2l2ZXMgYW4gYWJzb2x1dGUKIAkgIGVyYXNlIGJsb2NrIG51bWJlci4gQSBuZWdhdGl2ZSB2YWx1ZSBzcGVjaWZpZXMgYSBudW1iZXIgb2YKIAkgIHNlY3RvcnMgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGRldmljZS4KIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJYm9vbCAiQ29tbWFuZCBsaW5lIHBhcnRpdGlvbiB0YWJsZSBwYXJzaW5nIgogCWRlcGVuZHMgb24gTVREX1BBUlRJVElPTlMgPSAieSIKIAktLS1oZWxwLS0tCi0JICBBbGxvdyBnZW5lcmljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1URCBwYXJpdGl0aW9uIHRhYmxlcyB2aWEgdGhlIGtlcm5lbAorCSAgQWxsb3cgZ2VuZXJpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBNVEQgcGFydGl0aW9uIHRhYmxlcyB2aWEgdGhlIGtlcm5lbAogCSAgY29tbWFuZCBsaW5lLiBNdWx0aXBsZSBmbGFzaCByZXNvdXJjZXMgYXJlIHN1cHBvcnRlZCBmb3IgaGFyZHdhcmUgd2hlcmUKIAkgIGRpZmZlcmVudCBraW5kcyBvZiBmbGFzaCBtZW1vcnkgYXJlIGF2YWlsYWJsZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKaW5kZXggYTdlYzU5NS4uNmQ4ZjMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCkBAIC0zMCw3ICszMCw2IEBACiAKIGNvbmZpZyBNVERfR0VOX1BST0JFCiAJdHJpc3RhdGUKLQlzZWxlY3QgT0JTT0xFVEVfSU5URVJNT0RVTEUKIAogY29uZmlnIE1URF9DRklfQURWX09QVElPTlMKIAlib29sICJGbGFzaCBjaGlwIGRyaXZlciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL2NoaXBzL01ha2VmaWxlCmluZGV4IDhhZmUzMDkuLjc1YmMxYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL01ha2VmaWxlCkBAIC0zLDEzICszLDYgQEAKICMKICMgJElkOiBNYWtlZmlsZS5jb21tb24sdiAxLjUgMjAwNS8xMS8wNyAxMToxNDoyMiBnbGVpeG5lciBFeHAgJAogCi0jICAgICAgICAgICAgICAgICAgICAgICAqKiogQklHIFVHTFkgTk9URSAqKioKLSMKLSMgVGhlIHJlbW92YWwgb2YgZ2V0X21vZHVsZV9zeW1ib2woKSBhbmQgcmVwbGFjZW1lbnQgd2l0aAotIyBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoKSBldCBhbCBoYXMgaW50cm9kdWNlZCBhIGxpbmsgb3JkZXIgZGVwZW5kZW5jeQotIyBoZXJlIHdoZXJlIHByZXZpb3VzbHkgdGhlcmUgd2FzIG5vbmUuICBXZSBub3cgaGF2ZSB0byBlbnN1cmUgdGhhdAotIyB0aGUgQ0ZJIGNvbW1hbmQgc2V0IGRyaXZlcnMgYXJlIGxpbmtlZCBiZWZvcmUgZ2VuX3Byb2JlLm8KLQogb2JqLSQoQ09ORklHX01URCkJCSs9IGNoaXByZWcubwogb2JqLSQoQ09ORklHX01URF9BTURTVEQpCSs9IGFtZF9mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0NGSSkJCSs9IGNmaV9wcm9iZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2FtZF9mbGFzaC5jCmluZGV4IDU3MTE1NjEuLjE2ZWFjYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2FtZF9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2FtZF9mbGFzaC5jCkBAIC05Nyw3ICs5Nyw2IEBACiAJaW50IGludGVybGVhdmU7CiAJaW50IG51bWNoaXBzOwogCXVuc2lnbmVkIGxvbmcgY2hpcHNoaWZ0OwotLy8JY29uc3QgY2hhciAqaW1fbmFtZTsKIAlzdHJ1Y3QgZmxjaGlwIGNoaXBzWzBdOwogfTsKIApAQCAtMTMxLDEyICsxMzAsNiBAQAogCS5tb2R1bGUgPSBUSElTX01PRFVMRQogfTsKIAotCi0KLXN0YXRpYyBjb25zdCBjaGFyIGltX25hbWVbXSA9ICJhbWRfZmxhc2giOwotCi0KLQogc3RhdGljIGlubGluZSBfX3UzMiB3aWRlX3JlYWQoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGFkZHIpCiB7CiAJaWYgKG1hcC0+YnVzd2lkdGggPT0gMSkgewpAQCAtNzM3LDYgKzczMCw3IEBACiAJCW9mZnNldCArPSBkZXZfc2l6ZTsKIAl9CiAJbXRkLT50eXBlID0gTVREX05PUkZMQVNIOworCW10ZC0+d3JpdGVzaXplID0gMTsKIAltdGQtPmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CiAJbXRkLT5lcmFzZSA9IGFtZF9mbGFzaF9lcmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKaW5kZXggMWMwNzRkNi4uMGQ0MzU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKQEAgLTMzMSwxMyArMzMxLDYgQEAKIAlyZXR1cm4gZXh0cDsKIH0KIAotLyogVGhpcyByb3V0aW5lIGlzIG1hZGUgYXZhaWxhYmxlIHRvIG90aGVyIG10ZCBjb2RlIHZpYQotICogaW50ZXJfbW9kdWxlX3JlZ2lzdGVyLiAgSXQgbXVzdCBvbmx5IGJlIGFjY2Vzc2VkIHRocm91Z2gKLSAqIGludGVyX21vZHVsZV9nZXQgd2hpY2ggd2lsbCBidW1wIHRoZSB1c2UgY291bnQgb2YgdGhpcyBtb2R1bGUuICBUaGUKLSAqIGFkZHJlc3NlcyBwYXNzZWQgYmFjayBpbiBjZmkgYXJlIHZhbGlkIGFzIGxvbmcgYXMgdGhlIHVzZSBjb3VudCBvZgotICogdGhpcyBtb2R1bGUgaXMgbm9uLXplcm8sIGkuZS4gYmV0d2VlbiBpbnRlcl9tb2R1bGVfZ2V0IGFuZAotICogaW50ZXJfbW9kdWxlX3B1dC4gIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IDI5IE9jdCAyMDAwLgotICovCiBzdHJ1Y3QgbXRkX2luZm8gKmNmaV9jbWRzZXRfMDAwMShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHByaW1hcnkpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CkBAIC00MDYsNyArMzk5LDcgQEAKIAlmb3IgKGk9MDsgaTwgY2ZpLT5udW1jaGlwczsgaSsrKSB7CiAJCWNmaS0+Y2hpcHNbaV0ud29yZF93cml0ZV90aW1lID0gMTw8Y2ZpLT5jZmlxLT5Xb3JkV3JpdGVUaW1lb3V0VHlwOwogCQljZmktPmNoaXBzW2ldLmJ1ZmZlcl93cml0ZV90aW1lID0gMTw8Y2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXA7Ci0JCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+QmxvY2tFcmFzZVRpbWVvdXRUeXA7CisJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZSA9IDEwMDA8PGNmaS0+Y2ZpcS0+QmxvY2tFcmFzZVRpbWVvdXRUeXA7CiAJCWNmaS0+Y2hpcHNbaV0ucmVmX3BvaW50X2NvdW50ZXIgPSAwOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCYoY2ZpLT5jaGlwc1tpXS53cSkpOwogCX0KQEAgLTQxNSw2ICs0MDgsMTEgQEAKIAogCXJldHVybiBjZmlfaW50ZWxleHRfc2V0dXAobXRkKTsKIH0KK3N0cnVjdCBtdGRfaW5mbyAqY2ZpX2NtZHNldF8wMDAzKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgcHJpbWFyeSkgX19hdHRyaWJ1dGVfXygoYWxpYXMoImNmaV9jbWRzZXRfMDAwMSIpKSk7CitzdHJ1Y3QgbXRkX2luZm8gKmNmaV9jbWRzZXRfMDIwMChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHByaW1hcnkpIF9fYXR0cmlidXRlX18oKGFsaWFzKCJjZmlfY21kc2V0XzAwMDEiKSkpOworRVhQT1JUX1NZTUJPTF9HUEwoY2ZpX2NtZHNldF8wMDAxKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9jbWRzZXRfMDAwMyk7CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfY21kc2V0XzAyMDApOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjZmlfaW50ZWxleHRfc2V0dXAoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CkBAIC01NDcsMTIgKzU0NSwxMiBAQAogCQlpZiAoZXh0cC0+TWlub3JWZXJzaW9uID49ICc0JykgewogCQkJc3RydWN0IGNmaV9pbnRlbGV4dF9wcm9ncmFtbWluZ19yZWdpb25pbmZvICpwcmluZm87CiAJCQlwcmluZm8gPSAoc3RydWN0IGNmaV9pbnRlbGV4dF9wcm9ncmFtbWluZ19yZWdpb25pbmZvICopJmV4dHAtPmV4dHJhW29mZnNdOwotCQkJTVREX1BST0dSRUdJT05fU0laRShtdGQpID0gY2ZpLT5pbnRlcmxlYXZlIDw8IHByaW5mby0+UHJvZ1JlZ1NoaWZ0OworCQkJbXRkLT53cml0ZXNpemUgPSBjZmktPmludGVybGVhdmUgPDwgcHJpbmZvLT5Qcm9nUmVnU2hpZnQ7CiAJCQlNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9WQUxJRChtdGQpID0gY2ZpLT5pbnRlcmxlYXZlICogcHJpbmZvLT5Db250cm9sVmFsaWQ7CiAJCQlNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9JTlZBTElEKG10ZCkgPSBjZmktPmludGVybGVhdmUgKiBwcmluZm8tPkNvbnRyb2xJbnZhbGlkOwotCQkJbXRkLT5mbGFncyB8PSBNVERfUFJPR1JBTV9SRUdJT05TOworCQkJbXRkLT5mbGFncyAmPSB+TVREX0JJVF9XUklURUFCTEU7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHByb2dyYW0gcmVnaW9uIHNpemUvY3RybF92YWxpZC9jdHJsX2ludmFsID0gJWQvJWQvJWRcbiIsCi0JCQkgICAgICAgbWFwLT5uYW1lLCBNVERfUFJPR1JFR0lPTl9TSVpFKG10ZCksCisJCQkgICAgICAgbWFwLT5uYW1lLCBtdGQtPndyaXRlc2l6ZSwKIAkJCSAgICAgICBNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9WQUxJRChtdGQpLAogCQkJICAgICAgIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX0lOVkFMSUQobXRkKSk7CiAJCX0KQEAgLTg5NiwyNiArODk0LDMzIEBACiAKIC8qCiAgKiBXaGVuIGEgZGVsYXkgaXMgcmVxdWlyZWQgZm9yIHRoZSBmbGFzaCBvcGVyYXRpb24gdG8gY29tcGxldGUsIHRoZQotICogeGlwX3VkZWxheSgpIGZ1bmN0aW9uIGlzIHBvbGxpbmcgZm9yIGJvdGggdGhlIGdpdmVuIHRpbWVvdXQgYW5kIHBlbmRpbmcKLSAqIChidXQgc3RpbGwgbWFza2VkKSBoYXJkd2FyZSBpbnRlcnJ1cHRzLiAgV2hlbmV2ZXIgdGhlcmUgaXMgYW4gaW50ZXJydXB0Ci0gKiBwZW5kaW5nIHRoZW4gdGhlIGZsYXNoIGVyYXNlIG9yIHdyaXRlIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQsIGFycmF5IG1vZGUKLSAqIHJlc3RvcmVkIGFuZCBpbnRlcnJ1cHRzIHVubWFza2VkLiAgVGFzayBzY2hlZHVsaW5nIG1pZ2h0IGFsc28gaGFwcGVuIGF0IHRoYXQKLSAqIHBvaW50LiAgVGhlIENQVSBldmVudHVhbGx5IHJldHVybnMgZnJvbSB0aGUgaW50ZXJydXB0IG9yIHRoZSBjYWxsIHRvCi0gKiBzY2hlZHVsZSgpIGFuZCB0aGUgc3VzcGVuZGVkIGZsYXNoIG9wZXJhdGlvbiBpcyByZXN1bWVkIGZvciB0aGUgcmVtYWluaW5nCi0gKiBvZiB0aGUgZGVsYXkgcGVyaW9kLgorICogeGlwX3dhaXRfZm9yX29wZXJhdGlvbigpIGZ1bmN0aW9uIGlzIHBvbGxpbmcgZm9yIGJvdGggdGhlIGdpdmVuIHRpbWVvdXQKKyAqIGFuZCBwZW5kaW5nIChidXQgc3RpbGwgbWFza2VkKSBoYXJkd2FyZSBpbnRlcnJ1cHRzLiAgV2hlbmV2ZXIgdGhlcmUgaXMgYW4KKyAqIGludGVycnVwdCBwZW5kaW5nIHRoZW4gdGhlIGZsYXNoIGVyYXNlIG9yIHdyaXRlIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQsCisgKiBhcnJheSBtb2RlIHJlc3RvcmVkIGFuZCBpbnRlcnJ1cHRzIHVubWFza2VkLiAgVGFzayBzY2hlZHVsaW5nIG1pZ2h0IGFsc28KKyAqIGhhcHBlbiBhdCB0aGF0IHBvaW50LiAgVGhlIENQVSBldmVudHVhbGx5IHJldHVybnMgZnJvbSB0aGUgaW50ZXJydXB0IG9yCisgKiB0aGUgY2FsbCB0byBzY2hlZHVsZSgpIGFuZCB0aGUgc3VzcGVuZGVkIGZsYXNoIG9wZXJhdGlvbiBpcyByZXN1bWVkIGZvcgorICogdGhlIHJlbWFpbmluZyBvZiB0aGUgZGVsYXkgcGVyaW9kLgogICoKICAqIFdhcm5pbmc6IHRoaXMgZnVuY3Rpb24gX3dpbGxfIGZvb2wgaW50ZXJydXB0IGxhdGVuY3kgdHJhY2luZyB0b29scy4KICAqLwogCi1zdGF0aWMgdm9pZCBfX3hpcHJhbSB4aXBfdWRlbGF5KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAotCQkJCXVuc2lnbmVkIGxvbmcgYWRyLCBpbnQgdXNlYykKK3N0YXRpYyBpbnQgX194aXByYW0geGlwX3dhaXRfZm9yX29wZXJhdGlvbigKKwkJc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCisJCXVuc2lnbmVkIGxvbmcgYWRyLCBpbnQgKmNoaXBfb3BfdGltZSApCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwogCW1hcF93b3JkIHN0YXR1cywgT0sgPSBDTUQoMHg4MCk7Ci0JdW5zaWduZWQgbG9uZyBzdXNwZW5kZWQsIHN0YXJ0ID0geGlwX2N1cnJ0aW1lKCk7CisJdW5zaWduZWQgbG9uZyB1c2VjLCBzdXNwZW5kZWQsIHN0YXJ0LCBkb25lOwogCWZsc3RhdGVfdCBvbGRzdGF0ZSwgbmV3c3RhdGU7CiAKKyAgICAgICAJc3RhcnQgPSB4aXBfY3VycnRpbWUoKTsKKwl1c2VjID0gKmNoaXBfb3BfdGltZSAqIDg7CisJaWYgKHVzZWMgPT0gMCkKKwkJdXNlYyA9IDUwMDAwMDsKKwlkb25lID0gMDsKKwogCWRvIHsKIAkJY3B1X3JlbGF4KCk7CiAJCWlmICh4aXBfaXJxcGVuZGluZygpICYmIGNmaXAgJiYKQEAgLTkzMiw5ICs5MzcsOSBAQAogCQkJICogd2UgcmVzdW1lIHRoZSB3aG9sZSB0aGluZyBhdCBvbmNlKS4gIFllcywgaXQKIAkJCSAqIGNhbiBoYXBwZW4hCiAJCQkgKi8KKwkJCXVzZWMgLT0gZG9uZTsKIAkJCW1hcF93cml0ZShtYXAsIENNRCgweGIwKSwgYWRyKTsKIAkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKLQkJCXVzZWMgLT0geGlwX2VsYXBzZWRfc2luY2Uoc3RhcnQpOwogCQkJc3VzcGVuZGVkID0geGlwX2N1cnJ0aW1lKCk7CiAJCQlkbyB7CiAJCQkJaWYgKHhpcF9lbGFwc2VkX3NpbmNlKHN1c3BlbmRlZCkgPiAxMDAwMDApIHsKQEAgLTk0NCw3ICs5NDksNyBAQAogCQkJCQkgKiBUaGlzIGlzIGEgY3JpdGljYWwgZXJyb3IgYnV0IHRoZXJlCiAJCQkJCSAqIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBoZXJlLgogCQkJCQkgKi8KLQkJCQkJcmV0dXJuOworCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQl9CiAJCQkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOwogCQkJfSB3aGlsZSAoIW1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBPSywgT0spKTsKQEAgLTEwMDQsNjUgKzEwMDksMTA3IEBACiAJCQl4aXBfY3B1X2lkbGUoKTsKIAkJfQogCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7CisJCWRvbmUgPSB4aXBfZWxhcHNlZF9zaW5jZShzdGFydCk7CiAJfSB3aGlsZSAoIW1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBPSywgT0spCi0JCSAmJiB4aXBfZWxhcHNlZF9zaW5jZShzdGFydCkgPCB1c2VjKTsKLX0KKwkJICYmIGRvbmUgPCB1c2VjKTsKIAotI2RlZmluZSBVREVMQVkobWFwLCBjaGlwLCBhZHIsIHVzZWMpICB4aXBfdWRlbGF5KG1hcCwgY2hpcCwgYWRyLCB1c2VjKQorCXJldHVybiAoZG9uZSA+PSB1c2VjKSA/IC1FVElNRSA6IDA7Cit9CiAKIC8qCiAgKiBUaGUgSU5WQUxJREFURV9DQUNIRURfUkFOR0UoKSBtYWNybyBpcyBub3JtYWxseSB1c2VkIGluIHBhcmFsbGVsIHdoaWxlCiAgKiB0aGUgZmxhc2ggaXMgYWN0aXZlbHkgcHJvZ3JhbW1pbmcgb3IgZXJhc2luZyBzaW5jZSB3ZSBoYXZlIHRvIHBvbGwgZm9yCiAgKiB0aGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlIGFueXdheS4gIFdlIGNhbid0IGRvIHRoYXQgaW4gYSBnZW5lcmljIHdheSB3aXRoCiAgKiBhIFhJUCBzZXR1cCBzbyBkbyBpdCBiZWZvcmUgdGhlIGFjdHVhbCBmbGFzaCBvcGVyYXRpb24gaW4gdGhpcyBjYXNlCi0gKiBhbmQgc3R1YiBpdCBvdXQgZnJvbSBJTlZBTElEQVRFX0NBQ0hFX1VERUxBWS4KKyAqIGFuZCBzdHViIGl0IG91dCBmcm9tIElOVkFMX0NBQ0hFX0FORF9XQUlULgogICovCiAjZGVmaW5lIFhJUF9JTlZBTF9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKSAgXAogCUlOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKG1hcCwgZnJvbSwgc2l6ZSkKIAotI2RlZmluZSBJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIGFkciwgbGVuLCB1c2VjKSAgXAotCVVERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWMpCi0KLS8qCi0gKiBFeHRyYSBub3RlczoKLSAqCi0gKiBBY3RpdmF0aW5nIHRoaXMgWElQIHN1cHBvcnQgY2hhbmdlcyB0aGUgd2F5IHRoZSBjb2RlIHdvcmtzIGEgYml0LiAgRm9yCi0gKiBleGFtcGxlIHRoZSBjb2RlIHRvIHN1c3BlbmQgdGhlIGN1cnJlbnQgcHJvY2VzcyB3aGVuIGNvbmN1cnJlbnQgYWNjZXNzCi0gKiBoYXBwZW5zIGlzIG5ldmVyIGV4ZWN1dGVkIGJlY2F1c2UgeGlwX3VkZWxheSgpIHdpbGwgYWx3YXlzIHJldHVybiB3aXRoIHRoZQotICogc2FtZSBjaGlwIHN0YXRlIGFzIGl0IHdhcyBlbnRlcmVkIHdpdGguICBUaGlzIGlzIHdoeSB0aGVyZSBpcyBubyBjYXJlIGZvcgotICogdGhlIHByZXNlbmNlIG9mIGFkZF93YWl0X3F1ZXVlKCkgb3Igc2NoZWR1bGUoKSBjYWxscyBmcm9tIHdpdGhpbiBhIGNvdXBsZQotICogeGlwX2Rpc2FibGUoKSdkICBhcmVhcyBvZiBjb2RlLCBsaWtlIGluIGRvX2VyYXNlX29uZWJsb2NrIGZvciBleGFtcGxlLgotICogVGhlIHF1ZXVlaW5nIGFuZCBzY2hlZHVsaW5nIGFyZSBhbHdheXMgaGFwcGVuaW5nIHdpdGhpbiB4aXBfdWRlbGF5KCkuCi0gKgotICogU2ltaWxhcmx5LCBnZXRfY2hpcCgpIGFuZCBwdXRfY2hpcCgpIGp1c3QgaGFwcGVuIHRvIGFsd2F5cyBiZSBleGVjdXRlZAotICogd2l0aCBjaGlwLT5zdGF0ZSBzZXQgdG8gRkxfUkVBRFkgKG9yIEZMX1hJUF9XSElMRV8qKSB3aGVyZSBmbGFzaCBzdGF0ZQotICogaXMgaW4gYXJyYXkgbW9kZSwgdGhlcmVmb3JlIG5ldmVyIGV4ZWN1dGluZyBtYW55IGNhc2VzIHRoZXJlaW4gYW5kIG5vdAotICogY2F1c2luZyBhbnkgcHJvYmxlbSB3aXRoIFhJUC4KLSAqLworI2RlZmluZSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsIGludmFsX2FkciwgaW52YWxfbGVuLCBwX3VzZWMpIFwKKwl4aXBfd2FpdF9mb3Jfb3BlcmF0aW9uKG1hcCwgY2hpcCwgY21kX2FkciwgcF91c2VjKQogCiAjZWxzZQogCiAjZGVmaW5lIHhpcF9kaXNhYmxlKG1hcCwgY2hpcCwgYWRyKQogI2RlZmluZSB4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKQogI2RlZmluZSBYSVBfSU5WQUxfQ0FDSEVEX1JBTkdFKHguLi4pCisjZGVmaW5lIElOVkFMX0NBQ0hFX0FORF9XQUlUIGludmFsX2NhY2hlX2FuZF93YWl0X2Zvcl9vcGVyYXRpb24KIAotI2RlZmluZSBVREVMQVkobWFwLCBjaGlwLCBhZHIsIHVzZWMpICBcCi1kbyB7ICBcCi0Jc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOyAgXAotCWNmaV91ZGVsYXkodXNlYyk7ICBcCi0Jc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsgIFwKLX0gd2hpbGUgKDApCitzdGF0aWMgaW50IGludmFsX2NhY2hlX2FuZF93YWl0X2Zvcl9vcGVyYXRpb24oCisJCXN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAorCQl1bnNpZ25lZCBsb25nIGNtZF9hZHIsIHVuc2lnbmVkIGxvbmcgaW52YWxfYWRyLCBpbnQgaW52YWxfbGVuLAorCQlpbnQgKmNoaXBfb3BfdGltZSApCit7CisJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CisJbWFwX3dvcmQgc3RhdHVzLCBzdGF0dXNfT0sgPSBDTUQoMHg4MCk7CisJaW50IHosIGNoaXBfc3RhdGUgPSBjaGlwLT5zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvOwogCi0jZGVmaW5lIElOVkFMSURBVEVfQ0FDSEVfVURFTEFZKG1hcCwgY2hpcCwgY21kX2FkciwgYWRyLCBsZW4sIHVzZWMpICBcCi1kbyB7ICBcCi0Jc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOyAgXAotCUlOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKG1hcCwgYWRyLCBsZW4pOyAgXAotCWNmaV91ZGVsYXkodXNlYyk7ICBcCi0Jc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsgIFwKLX0gd2hpbGUgKDApCisJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOworCWlmIChpbnZhbF9sZW4pCisJCUlOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKG1hcCwgaW52YWxfYWRyLCBpbnZhbF9sZW4pOworCWlmICgqY2hpcF9vcF90aW1lKQorCQljZmlfdWRlbGF5KCpjaGlwX29wX3RpbWUpOworCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7CisKKwl0aW1lbyA9ICpjaGlwX29wX3RpbWUgKiA4ICogSFogLyAxMDAwMDAwOworCWlmICh0aW1lbyA8IEhaLzIpCisJCXRpbWVvID0gSFovMjsKKwl0aW1lbyArPSBqaWZmaWVzOworCisJeiA9IDA7CisJZm9yICg7OykgeworCQlpZiAoY2hpcC0+c3RhdGUgIT0gY2hpcF9zdGF0ZSkgeworCQkJLyogU29tZW9uZSdzIHN1c3BlbmRlZCB0aGUgb3BlcmF0aW9uOiBzbGVlcCAqLworCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOworCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOworCQkJc2NoZWR1bGUoKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOworCQkJdGltZW8gPSBqaWZmaWVzICsgKEhaIC8gMik7IC8qIEZJWE1FICovCisJCQlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOworCQkJY29udGludWU7CisJCX0KKworCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGNtZF9hZHIpOworCQlpZiAobWFwX3dvcmRfYW5kZXF1YWwobWFwLCBzdGF0dXMsIHN0YXR1c19PSywgc3RhdHVzX09LKSkKKwkJCWJyZWFrOworCisJCS8qIE9LIFN0aWxsIHdhaXRpbmcgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW8pKSB7CisJCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOworCQkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisKKwkJLyogTGF0ZW5jeSBpc3N1ZXMuIERyb3AgdGhlIGxvY2ssIHdhaXQgYSB3aGlsZSBhbmQgcmV0cnkgKi8KKwkJeisrOworCQlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7CisJCWNmaV91ZGVsYXkoMSk7CisJCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7CisJfQorCisJaWYgKCF6KSB7CisJCWlmICghLS0oKmNoaXBfb3BfdGltZSkpCisJCQkqY2hpcF9vcF90aW1lID0gMTsKKwl9IGVsc2UgaWYgKHogPiAxKQorCQkrKygqY2hpcF9vcF90aW1lKTsKKworCS8qIERvbmUgYW5kIGhhcHB5LiAqLworIAljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKKwlyZXR1cm4gMDsKK30KIAogI2VuZGlmCiAKKyNkZWZpbmUgV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXkpIFwKKwkoeyBpbnQgX191ZGVsYXkgPSAodWRlbGF5KTsgXAorCSAgIElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLCAwLCAwLCAmX191ZGVsYXkpOyB9KQorCisKIHN0YXRpYyBpbnQgZG9fcG9pbnRfb25lY2hpcCAoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsIGxvZmZfdCBhZHIsIHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBjbWRfYWRkcjsKQEAgLTEyNTIsMTQgKzEyOTksMTEgQEAKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRyLCBtYXBfd29yZCBkYXR1bSwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7Ci0JbWFwX3dvcmQgc3RhdHVzLCBzdGF0dXNfT0ssIHdyaXRlX2NtZDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvOwotCWludCB6LCByZXQ9MDsKKwltYXBfd29yZCBzdGF0dXMsIHdyaXRlX2NtZDsKKwlpbnQgcmV0PTA7CiAKIAlhZHIgKz0gY2hpcC0+c3RhcnQ7CiAKLQkvKiBMZXQncyBkZXRlcm1pbmUgdGhvc2UgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcmxlYXZlIG9ubHkgb25jZSAqLwotCXN0YXR1c19PSyA9IENNRCgweDgwKTsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEZMX1dSSVRJTkc6CiAJCXdyaXRlX2NtZCA9IChjZmktPmNmaXEtPlBfSUQgIT0gMHgwMjAwKSA/IENNRCgweDQwKSA6IENNRCgweDQxKTsKQEAgLTEyODUsNTcgKzEzMjksMTcgQEAKIAltYXBfd3JpdGUobWFwLCBkYXR1bSwgYWRyKTsKIAljaGlwLT5zdGF0ZSA9IG1vZGU7CiAKLQlJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGFkciwKLQkJCQlhZHIsIG1hcF9iYW5rd2lkdGgobWFwKSwKLQkJCQljaGlwLT53b3JkX3dyaXRlX3RpbWUpOwotCi0JdGltZW8gPSBqaWZmaWVzICsgKEhaLzIpOwotCXogPSAwOwotCWZvciAoOzspIHsKLQkJaWYgKGNoaXAtPnN0YXRlICE9IG1vZGUpIHsKLQkJCS8qIFNvbWVvbmUncyBzdXNwZW5kZWQgdGhlIHdyaXRlLiBTbGVlcCAqLwotCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwotCQkJc2NoZWR1bGUoKTsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJdGltZW8gPSBqaWZmaWVzICsgKEhaIC8gMik7IC8qIEZJWE1FICovCi0JCQlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0JCWlmIChtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgc3RhdHVzX09LLCBzdGF0dXNfT0spKQotCQkJYnJlYWs7Ci0KLQkJLyogT0sgU3RpbGwgd2FpdGluZyAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKLQkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3b3JkIHdyaXRlIGVycm9yIChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBMYXRlbmN5IGlzc3Vlcy4gRHJvcCB0aGUgbG9jaywgd2FpdCBhIHdoaWxlIGFuZCByZXRyeSAqLwotCQl6Kys7Ci0JCVVERUxBWShtYXAsIGNoaXAsIGFkciwgMSk7CisJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsCisJCQkJICAgYWRyLCBtYXBfYmFua3dpZHRoKG1hcCksCisJCQkJICAgJmNoaXAtPndvcmRfd3JpdGVfdGltZSk7CisJaWYgKHJldCkgeworCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogd29yZCB3cml0ZSBlcnJvciAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9Ci0JaWYgKCF6KSB7Ci0JCWNoaXAtPndvcmRfd3JpdGVfdGltZS0tOwotCQlpZiAoIWNoaXAtPndvcmRfd3JpdGVfdGltZSkKLQkJCWNoaXAtPndvcmRfd3JpdGVfdGltZSA9IDE7Ci0JfQotCWlmICh6ID4gMSkKLQkJY2hpcC0+d29yZF93cml0ZV90aW1lKys7Ci0KLQkvKiBEb25lIGFuZCBoYXBweS4gKi8KLQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKIAogCS8qIGNoZWNrIGZvciBlcnJvcnMgKi8KKwlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7CiAJaWYgKG1hcF93b3JkX2JpdHNzZXQobWFwLCBzdGF0dXMsIENNRCgweDFhKSkpIHsKIAkJdW5zaWduZWQgbG9uZyBjaGlwc3RhdHVzID0gTUVSR0VTVEFUVVMoc3RhdHVzKTsKIApAQCAtMTQ1Miw5ICsxNDU2LDkgQEAKIAkJCQkgICAgdW5zaWduZWQgbG9uZyAqcHZlY19zZWVrLCBpbnQgbGVuKQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwotCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LLCB3cml0ZV9jbWQsIGRhdHVtOwotCXVuc2lnbmVkIGxvbmcgY21kX2FkciwgdGltZW87Ci0JaW50IHdidWZzaXplLCB6LCByZXQ9MCwgd29yZF9nYXAsIHdvcmRzOworCW1hcF93b3JkIHN0YXR1cywgd3JpdGVfY21kLCBkYXR1bTsKKwl1bnNpZ25lZCBsb25nIGNtZF9hZHI7CisJaW50IHJldCwgd2J1ZnNpemUsIHdvcmRfZ2FwLCB3b3JkczsKIAljb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjOwogCXVuc2lnbmVkIGxvbmcgdmVjX3NlZWs7CiAKQEAgLTE0NjMsNyArMTQ2Nyw2IEBACiAJY21kX2FkciA9IGFkciAmIH4od2J1ZnNpemUtMSk7CiAKIAkvKiBMZXQncyBkZXRlcm1pbmUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIGludGVybGVhdmUgb25seSBvbmNlICovCi0Jc3RhdHVzX09LID0gQ01EKDB4ODApOwogCXdyaXRlX2NtZCA9IChjZmktPmNmaXEtPlBfSUQgIT0gMHgwMjAwKSA/IENNRCgweGU4KSA6IENNRCgweGU5KTsKIAogCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7CkBAIC0xNDc3LDEyICsxNDgwLDE0IEBACiAJRU5BQkxFX1ZQUChtYXApOwogCXhpcF9kaXNhYmxlKG1hcCwgY2hpcCwgY21kX2Fkcik7CiAKLQkvKiCnNC44IG9mIHRoZSAyOEZ4eHhKM0EgZGF0YXNoZWV0IHNheXMgIkFueSB0aW1lIFNSLjQgYW5kL29yIFNSLjUgaXMgc2V0CisJLyogwqc0Ljggb2YgdGhlIDI4Rnh4eEozQSBkYXRhc2hlZXQgc2F5cyAiQW55IHRpbWUgU1IuNCBhbmQvb3IgU1IuNSBpcyBzZXQKIAkgICBbLi4uXSwgdGhlIGRldmljZSB3aWxsIG5vdCBhY2NlcHQgYW55IG1vcmUgV3JpdGUgdG8gQnVmZmVyIGNvbW1hbmRzIi4KIAkgICBTbyB3ZSBtdXN0IGNoZWNrIGhlcmUgYW5kIHJlc2V0IHRob3NlIGJpdHMgaWYgdGhleSdyZSBzZXQuIE90aGVyd2lzZQogCSAgIHdlJ3JlIGp1c3QgcGlzc2luZyBpbiB0aGUgd2luZCAqLwotCWlmIChjaGlwLT5zdGF0ZSAhPSBGTF9TVEFUVVMpCisJaWYgKGNoaXAtPnN0YXRlICE9IEZMX1NUQVRVUykgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOworCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKKwl9CiAJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKIAlpZiAobWFwX3dvcmRfYml0c3NldChtYXAsIHN0YXR1cywgQ01EKDB4MzApKSkgewogCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgY21kX2Fkcik7CkBAIC0xNDkzLDMyICsxNDk4LDIwIEBACiAJfQogCiAJY2hpcC0+c3RhdGUgPSBGTF9XUklUSU5HX1RPX0JVRkZFUjsKLQotCXogPSAwOwotCWZvciAoOzspIHsKLQkJbWFwX3dyaXRlKG1hcCwgd3JpdGVfY21kLCBjbWRfYWRyKTsKLQorCW1hcF93cml0ZShtYXAsIHdyaXRlX2NtZCwgY21kX2Fkcik7CisJcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgY21kX2FkciwgMCk7CisJaWYgKHJldCkgeworCQkvKiBBcmdoLiBOb3QgcmVhZHkgZm9yIHdyaXRlIHRvIGJ1ZmZlciAqLworCQltYXBfd29yZCBYc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CiAJCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7Ci0JCWlmIChtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgc3RhdHVzX09LLCBzdGF0dXNfT0spKQotCQkJYnJlYWs7Ci0KLQkJVURFTEFZKG1hcCwgY2hpcCwgY21kX2FkciwgMSk7Ci0KLQkJaWYgKCsreiA+IDIwKSB7Ci0JCQkvKiBBcmdoLiBOb3QgcmVhZHkgZm9yIHdyaXRlIHRvIGJ1ZmZlciAqLwotCQkJbWFwX3dvcmQgWHN0YXR1czsKLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgY21kX2Fkcik7Ci0JCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKLQkJCVhzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGNtZF9hZHIpOwotCQkJLyogT2RkLiBDbGVhciBzdGF0dXMgYml0cyAqLwotCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NTApLCBjbWRfYWRyKTsKLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgY21kX2Fkcik7Ci0JCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgY21kX2Fkcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDaGlwIG5vdCByZWFkeSBmb3IgYnVmZmVyIHdyaXRlLiBzdGF0dXMgPSAlbHgsIFhzdGF0dXMgPSAlbHhcbiIsCi0JCQkgICAgICAgbWFwLT5uYW1lLCBzdGF0dXMueFswXSwgWHN0YXR1cy54WzBdKTsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQorCQltYXBfd3JpdGUobWFwLCBDTUQoMHg1MCksIGNtZF9hZHIpOworCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOworCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgY21kX2Fkcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENoaXAgbm90IHJlYWR5IGZvciBidWZmZXIgd3JpdGUuIFhzdGF0dXMgPSAlbHgsIHN0YXR1cyA9ICVseFxuIiwKKwkJCQltYXAtPm5hbWUsIFhzdGF0dXMueFswXSwgc3RhdHVzLnhbMF0pOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBGaWd1cmUgb3V0IHRoZSBudW1iZXIgb2Ygd29yZHMgdG8gd3JpdGUgKi8KQEAgLTE1NzMsNTYgKzE1NjYsMTkgQEAKIAltYXBfd3JpdGUobWFwLCBDTUQoMHhkMCksIGNtZF9hZHIpOwogCWNoaXAtPnN0YXRlID0gRkxfV1JJVElORzsKIAotCUlOVkFMSURBVEVfQ0FDSEVfVURFTEFZKG1hcCwgY2hpcCwgY21kX2FkciwKLQkJCQlhZHIsIGxlbiwKLQkJCQljaGlwLT5idWZmZXJfd3JpdGVfdGltZSk7Ci0KLQl0aW1lbyA9IGppZmZpZXMgKyAoSFovMik7Ci0JeiA9IDA7Ci0JZm9yICg7OykgewotCQlpZiAoY2hpcC0+c3RhdGUgIT0gRkxfV1JJVElORykgewotCQkJLyogU29tZW9uZSdzIHN1c3BlbmRlZCB0aGUgd3JpdGUuIFNsZWVwICovCi0JCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwotCQkJc2NoZWR1bGUoKTsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJdGltZW8gPSBqaWZmaWVzICsgKEhaIC8gMik7IC8qIEZJWE1FICovCi0JCQlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGNtZF9hZHIpOwotCQlpZiAobWFwX3dvcmRfYW5kZXF1YWwobWFwLCBzdGF0dXMsIHN0YXR1c19PSywgc3RhdHVzX09LKSkKLQkJCWJyZWFrOwotCi0JCS8qIE9LIFN0aWxsIHdhaXRpbmcgKi8KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW8pKSB7Ci0JCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOwotCQkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7Ci0JCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgY21kX2Fkcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBidWZmZXIgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCi0JCXorKzsKLQkJVURFTEFZKG1hcCwgY2hpcCwgY21kX2FkciwgMSk7CisJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBjbWRfYWRyLAorCQkJCSAgIGFkciwgbGVuLAorCQkJCSAgICZjaGlwLT5idWZmZXJfd3JpdGVfdGltZSk7CisJaWYgKHJldCkgeworCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOworCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBidWZmZXIgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQotCWlmICgheikgewotCQljaGlwLT5idWZmZXJfd3JpdGVfdGltZS0tOwotCQlpZiAoIWNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lKQotCQkJY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUgPSAxOwotCX0KLQlpZiAoeiA+IDEpCi0JCWNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lKys7Ci0KLQkvKiBEb25lIGFuZCBoYXBweS4gKi8KLSAJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzICovCisJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKIAlpZiAobWFwX3dvcmRfYml0c3NldChtYXAsIHN0YXR1cywgQ01EKDB4MWEpKSkgewogCQl1bnNpZ25lZCBsb25nIGNoaXBzdGF0dXMgPSBNRVJHRVNUQVRVUyhzdGF0dXMpOwogCkBAIC0xNjkzLDYgKzE2NDksMTEgQEAKIAkJCWlmIChjaGlwbnVtID09IGNmaS0+bnVtY2hpcHMpCiAJCQkJcmV0dXJuIDA7CiAJCX0KKworCQkvKiBCZSBuaWNlIGFuZCByZXNjaGVkdWxlIHdpdGggdGhlIGNoaXAgaW4gYSB1c2FibGUgc3RhdGUgZm9yIG90aGVyCisJCSAgIHByb2Nlc3Nlcy4gKi8KKwkJY29uZF9yZXNjaGVkKCk7CisKIAl9IHdoaWxlIChsZW4pOwogCiAJcmV0dXJuIDA7CkBAIC0xNzEzLDE3ICsxNjc0LDEyIEBACiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZHIsIGludCBsZW4sIHZvaWQgKnRodW5rKQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwotCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LOwotCXVuc2lnbmVkIGxvbmcgdGltZW87CisJbWFwX3dvcmQgc3RhdHVzOwogCWludCByZXRyaWVzID0gMzsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJYWRyICs9IGNoaXAtPnN0YXJ0OwogCi0JLyogTGV0J3MgZGV0ZXJtaW5lIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcmxlYXZlIG9ubHkgb25jZSAqLwotCXN0YXR1c19PSyA9IENNRCgweDgwKTsKLQogIHJldHJ5OgogCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7CiAJcmV0ID0gZ2V0X2NoaXAobWFwLCBjaGlwLCBhZHIsIEZMX0VSQVNJTkcpOwpAQCAtMTc0NSw0OCArMTcwMSwxNSBAQAogCWNoaXAtPnN0YXRlID0gRkxfRVJBU0lORzsKIAljaGlwLT5lcmFzZV9zdXNwZW5kZWQgPSAwOwogCi0JSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLCBhZHIsCi0JCQkJYWRyLCBsZW4sCi0JCQkJY2hpcC0+ZXJhc2VfdGltZSoxMDAwLzIpOwotCi0JLyogRklYTUUuIFVzZSBhIHRpbWVyIHRvIGNoZWNrIHRoaXMsIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuICovCi0JLyogT25jZSB0aGUgc3RhdGUgbWFjaGluZSdzIGtub3duIHRvIGJlIHdvcmtpbmcgSSdsbCBkbyB0aGF0ICovCi0KLQl0aW1lbyA9IGppZmZpZXMgKyAoSFoqMjApOwotCWZvciAoOzspIHsKLQkJaWYgKGNoaXAtPnN0YXRlICE9IEZMX0VSQVNJTkcpIHsKLQkJCS8qIFNvbWVvbmUncyBzdXNwZW5kZWQgdGhlIGVyYXNlLiBTbGVlcCAqLwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJYWRkX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0JCQlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0JCQlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNoaXAtPmVyYXNlX3N1c3BlbmRlZCkgewotCQkJLyogVGhpcyBlcmFzZSB3YXMgc3VzcGVuZGVkIGFuZCByZXN1bWVkLgotCQkJICAgQWRqdXN0IHRoZSB0aW1lb3V0ICovCi0JCQl0aW1lbyA9IGppZmZpZXMgKyAoSFoqMjApOyAvKiBGSVhNRSAqLwotCQkJY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkID0gMDsKLQkJfQotCi0JCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgYWRyKTsKLQkJaWYgKG1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBzdGF0dXNfT0ssIHN0YXR1c19PSykpCi0JCQlicmVhazsKLQotCQkvKiBPSyBTdGlsbCB3YWl0aW5nICovCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgewotCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOwotCQkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7Ci0JCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJsb2NrIGVyYXNlIGVycm9yOiAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogTGF0ZW5jeSBpc3N1ZXMuIERyb3AgdGhlIGxvY2ssIHdhaXQgYSB3aGlsZSBhbmQgcmV0cnkgKi8KLQkJVURFTEFZKG1hcCwgY2hpcCwgYWRyLCAxMDAwMDAwL0haKTsKKwlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwKKwkJCQkgICBhZHIsIGxlbiwKKwkJCQkgICAmY2hpcC0+ZXJhc2VfdGltZSk7CisJaWYgKHJldCkgeworCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7CisJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOworCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYmxvY2sgZXJhc2UgZXJyb3I6IChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFdlJ3ZlIGJyb2tlbiB0aGlzIGJlZm9yZS4gSXQgZG9lc24ndCBodXJ0IHRvIGJlIHNhZmUgKi8KQEAgLTE4MTUsNyArMTczOCw2IEBACiAJCQlyZXQgPSAtRUlPOwogCQl9IGVsc2UgaWYgKGNoaXBzdGF0dXMgJiAweDIwICYmIHJldHJpZXMtLSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImJsb2NrIGVyYXNlIGZhaWxlZCBhdCAweCUwOGx4OiBzdGF0dXMgMHglbHguIFJldHJ5aW5nLi4uXG4iLCBhZHIsIGNoaXBzdGF0dXMpOwotCQkJdGltZW8gPSBqaWZmaWVzICsgSFo7CiAJCQlwdXRfY2hpcChtYXAsIGNoaXAsIGFkcik7CiAJCQlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7CiAJCQlnb3RvIHJldHJ5OwpAQCAtMTkyMSwxNSArMTg0MywxMSBAQAogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCXN0cnVjdCBjZmlfcHJpX2ludGVsZXh0ICpleHRwID0gY2ZpLT5jbWRzZXRfcHJpdjsKLQltYXBfd29yZCBzdGF0dXMsIHN0YXR1c19PSzsKLQl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllcyArIEhaOworCWludCB1ZGVsYXk7CiAJaW50IHJldDsKIAogCWFkciArPSBjaGlwLT5zdGFydDsKIAotCS8qIExldCdzIGRldGVybWluZSB0aGlzIGFjY29yZGluZyB0byB0aGUgaW50ZXJsZWF2ZSBvbmx5IG9uY2UgKi8KLQlzdGF0dXNfT0sgPSBDTUQoMHg4MCk7Ci0KIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwogCXJldCA9IGdldF9jaGlwKG1hcCwgY2hpcCwgYWRyLCBGTF9MT0NLSU5HKTsKIAlpZiAocmV0KSB7CkBAIC0xOTU0LDQxICsxODcyLDIxIEBACiAJICogSWYgSW5zdGFudCBJbmRpdmlkdWFsIEJsb2NrIExvY2tpbmcgc3VwcG9ydGVkIHRoZW4gbm8gbmVlZAogCSAqIHRvIGRlbGF5LgogCSAqLworCXVkZWxheSA9ICghZXh0cCB8fCAhKGV4dHAtPkZlYXR1cmVTdXBwb3J0ICYgKDEgPDwgNSkpKSA/IDEwMDAwMDAvSFogOiAwOwogCi0JaWYgKCFleHRwIHx8ICEoZXh0cC0+RmVhdHVyZVN1cHBvcnQgJiAoMSA8PCA1KSkpCi0JCVVERUxBWShtYXAsIGNoaXAsIGFkciwgMTAwMDAwMC9IWik7Ci0KLQkvKiBGSVhNRS4gVXNlIGEgdGltZXIgdG8gY2hlY2sgdGhpcywgYW5kIHJldHVybiBpbW1lZGlhdGVseS4gKi8KLQkvKiBPbmNlIHRoZSBzdGF0ZSBtYWNoaW5lJ3Mga25vd24gdG8gYmUgd29ya2luZyBJJ2xsIGRvIHRoYXQgKi8KLQotCXRpbWVvID0gamlmZmllcyArIChIWioyMCk7Ci0JZm9yICg7OykgewotCi0JCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgYWRyKTsKLQkJaWYgKG1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBzdGF0dXNfT0ssIHN0YXR1c19PSykpCi0JCQlicmVhazsKLQotCQkvKiBPSyBTdGlsbCB3YWl0aW5nICovCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgewotCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOwotCQkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7Ci0JCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJsb2NrIHVubG9jayBlcnJvcjogKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKLQkJCXB1dF9jaGlwKG1hcCwgY2hpcCwgYWRyKTsKLQkJCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJLyogTGF0ZW5jeSBpc3N1ZXMuIERyb3AgdGhlIGxvY2ssIHdhaXQgYSB3aGlsZSBhbmQgcmV0cnkgKi8KLQkJVURFTEFZKG1hcCwgY2hpcCwgYWRyLCAxKTsKKwlyZXQgPSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSk7CisJaWYgKHJldCkgeworCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7CisJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOworCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYmxvY2sgdW5sb2NrIGVycm9yOiAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBEb25lIGFuZCBoYXBweS4gKi8KLQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKIAl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKTsKLQlwdXRfY2hpcChtYXAsIGNoaXAsIGFkcik7CitvdXQ6CXB1dF9jaGlwKG1hcCwgY2hpcCwgYWRyKTsKIAlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjZmlfaW50ZWxleHRfbG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbikKQEAgLTI0NDUsMjggKzIzNDMsOCBAQAogCWtmcmVlKG10ZC0+ZXJhc2VyZWdpb25zKTsKIH0KIAotc3RhdGljIGNoYXIgaW1fbmFtZV8wMDAxW10gPSAiY2ZpX2NtZHNldF8wMDAxIjsKLXN0YXRpYyBjaGFyIGltX25hbWVfMDAwM1tdID0gImNmaV9jbWRzZXRfMDAwMyI7Ci1zdGF0aWMgY2hhciBpbV9uYW1lXzAyMDBbXSA9ICJjZmlfY21kc2V0XzAyMDAiOwotCi1zdGF0aWMgaW50IF9faW5pdCBjZmlfaW50ZWxleHRfaW5pdCh2b2lkKQotewotCWludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lXzAwMDEsIFRISVNfTU9EVUxFLCAmY2ZpX2NtZHNldF8wMDAxKTsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZV8wMDAzLCBUSElTX01PRFVMRSwgJmNmaV9jbWRzZXRfMDAwMSk7Ci0JaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGltX25hbWVfMDIwMCwgVEhJU19NT0RVTEUsICZjZmlfY21kc2V0XzAwMDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2ZpX2ludGVsZXh0X2V4aXQodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lXzAwMDEpOwotCWludGVyX21vZHVsZV91bnJlZ2lzdGVyKGltX25hbWVfMDAwMyk7Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZV8wMjAwKTsKLX0KLQotbW9kdWxlX2luaXQoY2ZpX2ludGVsZXh0X2luaXQpOwotbW9kdWxlX2V4aXQoY2ZpX2ludGVsZXh0X2V4aXQpOwotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+IGV0IGFsLiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgY2hpcCBkcml2ZXIgZm9yIEludGVsL1NoYXJwIGZsYXNoIGNoaXBzIik7CitNT0RVTEVfQUxJQVMoImNmaV9jbWRzZXRfMDAwMyIpOworTU9EVUxFX0FMSUFTKCJjZmlfY21kc2V0XzAyMDAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKaW5kZXggYWVkMTBiZC4uMWUwMWFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKQEAgLTIzNiw2ICsyMzYsNyBAQAogCW10ZC0+cmVzdW1lICA9IGNmaV9hbWRzdGRfcmVzdW1lOwogCW10ZC0+ZmxhZ3MgICA9IE1URF9DQVBfTk9SRkxBU0g7CiAJbXRkLT5uYW1lICAgID0gbWFwLT5uYW1lOworCW10ZC0+d3JpdGVzaXplID0gMTsKIAogCWlmIChjZmktPmNmaV9tb2RlPT1DRklfTU9ERV9DRkkpewogCQl1bnNpZ25lZCBjaGFyIGJvb3Rsb2M7CkBAIC0zMjYsNyArMzI3LDcgQEAKIAogCXJldHVybiBjZmlfYW1kc3RkX3NldHVwKG10ZCk7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9jbWRzZXRfMDAwMik7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmNmaV9hbWRzdGRfc2V0dXAoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CkBAIC0xNzU4LDI1ICsxNzU5LDYgQEAKIAlrZnJlZShtdGQtPmVyYXNlcmVnaW9ucyk7CiB9CiAKLXN0YXRpYyBjaGFyIGltX25hbWVbXT0iY2ZpX2NtZHNldF8wMDAyIjsKLQotCi1zdGF0aWMgaW50IF9faW5pdCBjZmlfYW1kc3RkX2luaXQodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZSwgVEhJU19NT0RVTEUsICZjZmlfY21kc2V0XzAwMDIpOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjZmlfYW1kc3RkX2V4aXQodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lKTsKLX0KLQotCi1tb2R1bGVfaW5pdChjZmlfYW1kc3RkX2luaXQpOwotbW9kdWxlX2V4aXQoY2ZpX2FtZHN0ZF9leGl0KTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ3Jvc3NuZXQgQ28uIDxpbmZvQGNyb3NzbmV0LmNvLmpwPiBldCBhbC4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIGNoaXAgZHJpdmVyIGZvciBBTUQvRnVqaXRzdSBmbGFzaCBjaGlwcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwppbmRleCAwODA3YzFjLi5mYWU3MGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAKIAlyZXR1cm4gY2ZpX3N0YWFfc2V0dXAobWFwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9jbWRzZXRfMDAyMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmNmaV9zdGFhX3NldHVwKHN0cnVjdCBtYXBfaW5mbyAqbWFwKQogewpAQCAtMjM3LDkgKzIzOCw4IEBACiAJbXRkLT51bmxvY2sgPSBjZmlfc3RhYV91bmxvY2s7CiAJbXRkLT5zdXNwZW5kID0gY2ZpX3N0YWFfc3VzcGVuZDsKIAltdGQtPnJlc3VtZSA9IGNmaV9zdGFhX3Jlc3VtZTsKLQltdGQtPmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKLQltdGQtPmZsYWdzIHw9IE1URF9FQ0M7IC8qIEZJWE1FOiBOb3QgYWxsIFNUTWljcm8gZmxhc2hlcyBoYXZlIHRoaXMgKi8KLQltdGQtPmVjY3NpemUgPSA4OyAvKiBGSVhNRTogU2hvdWxkIGJlIDAgZm9yIFNUTWljcm8gZmxhc2hlcyB3L291dCBFQ0MgKi8KKwltdGQtPmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSCAmIH5NVERfQklUX1dSSVRFQUJMRTsKKwltdGQtPndyaXRlc2l6ZSA9IDg7IC8qIEZJWE1FOiBTaG91bGQgYmUgMCBmb3IgU1RNaWNybyBmbGFzaGVzIHcvb3V0IEVDQyAqLwogCW1hcC0+ZmxkcnYgPSAmY2ZpX3N0YWFfY2hpcGRydjsKIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCW10ZC0+bmFtZSA9IG1hcC0+bmFtZTsKQEAgLTE0MTAsMjAgKzE0MTAsNCBAQAogCWtmcmVlKGNmaSk7CiB9CiAKLXN0YXRpYyBjaGFyIGltX25hbWVbXT0iY2ZpX2NtZHNldF8wMDIwIjsKLQotc3RhdGljIGludCBfX2luaXQgY2ZpX3N0YWFfaW5pdCh2b2lkKQotewotCWludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lLCBUSElTX01PRFVMRSwgJmNmaV9jbWRzZXRfMDAyMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjZmlfc3RhYV9leGl0KHZvaWQpCi17Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZSk7Ci19Ci0KLW1vZHVsZV9pbml0KGNmaV9zdGFhX2luaXQpOwotbW9kdWxlX2V4aXQoY2ZpX3N0YWFfZXhpdCk7Ci0KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKaW5kZXggZTYzNmFhOC4uNGJmOWY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMKQEAgLTM0OSwxMiArMzQ5LDEyIEBACiAJZWxzZQogCQlwcmludGsoIk5vIFZwcCBsaW5lXG4iKTsKIAotCXByaW50aygiVHlwaWNhbCBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogJWQgtXNcbiIsIDE8PGNmaXAtPldvcmRXcml0ZVRpbWVvdXRUeXApOwotCXByaW50aygiTWF4aW11bSBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogJWQgtXNcbiIsICgxPDxjZmlwLT5Xb3JkV3JpdGVUaW1lb3V0TWF4KSAqICgxPDxjZmlwLT5Xb3JkV3JpdGVUaW1lb3V0VHlwKSk7CisJcHJpbnRrKCJUeXBpY2FsIGJ5dGUvd29yZCB3cml0ZSB0aW1lb3V0OiAlZCDCtXNcbiIsIDE8PGNmaXAtPldvcmRXcml0ZVRpbWVvdXRUeXApOworCXByaW50aygiTWF4aW11bSBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogJWQgwrVzXG4iLCAoMTw8Y2ZpcC0+V29yZFdyaXRlVGltZW91dE1heCkgKiAoMTw8Y2ZpcC0+V29yZFdyaXRlVGltZW91dFR5cCkpOwogCiAJaWYgKGNmaXAtPkJ1ZldyaXRlVGltZW91dFR5cCB8fCBjZmlwLT5CdWZXcml0ZVRpbWVvdXRNYXgpIHsKLQkJcHJpbnRrKCJUeXBpY2FsIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVkILVzXG4iLCAxPDxjZmlwLT5CdWZXcml0ZVRpbWVvdXRUeXApOwotCQlwcmludGsoIk1heGltdW0gZnVsbCBidWZmZXIgd3JpdGUgdGltZW91dDogJWQgtXNcbiIsICgxPDxjZmlwLT5CdWZXcml0ZVRpbWVvdXRNYXgpICogKDE8PGNmaXAtPkJ1ZldyaXRlVGltZW91dFR5cCkpOworCQlwcmludGsoIlR5cGljYWwgZnVsbCBidWZmZXIgd3JpdGUgdGltZW91dDogJWQgwrVzXG4iLCAxPDxjZmlwLT5CdWZXcml0ZVRpbWVvdXRUeXApOworCQlwcmludGsoIk1heGltdW0gZnVsbCBidWZmZXIgd3JpdGUgdGltZW91dDogJWQgwrVzXG4iLCAoMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0TWF4KSAqICgxPDxjZmlwLT5CdWZXcml0ZVRpbWVvdXRUeXApKTsKIAl9CiAJZWxzZQogCQlwcmludGsoIkZ1bGwgYnVmZmVyIHdyaXRlIG5vdCBzdXBwb3J0ZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYwppbmRleCA0MWJkNTlkLi5jZGIwZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYwpAQCAtMzcsOCArMzcsMTUgQEAKIAlpZiAoIW10ZCkKIAkJbXRkID0gY2hlY2tfY21kX3NldChtYXAsIDApOyAvKiBUaGVuIHRoZSBzZWNvbmRhcnkgKi8KIAotCWlmIChtdGQpCisJaWYgKG10ZCkgeworCQlpZiAobXRkLT5zaXplID4gbWFwLT5zaXplKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWR1Y2luZyB2aXNpYmlsaXR5IG9mICVsZEtpQiBjaGlwIHRvICVsZEtpQlxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyltdGQtPnNpemUgPj4gMTAsIAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nKW1hcC0+c2l6ZSA+PiAxMCk7CisJCQltdGQtPnNpemUgPSBtYXAtPnNpemU7CisJCX0KIAkJcmV0dXJuIG10ZDsKKwl9CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HImdlbl9wcm9iZTogTm8gc3VwcG9ydGVkIFZlbmRvciBDb21tYW5kIFNldCBmb3VuZFxuIik7CiAKQEAgLTEwMCw3ICsxMDcsMTIgQEAKIAkgKiBBbGlnbiBiaXRtYXAgc3RvcmFnZSBzaXplIHRvIGZ1bGwgYnl0ZS4KIAkgKi8KIAltYXhfY2hpcHMgPSBtYXAtPnNpemUgPj4gY2ZpLmNoaXBzaGlmdDsKLQltYXBzaXplID0gKG1heF9jaGlwcyAvIDgpICsgKChtYXhfY2hpcHMgJSA4KSA/IDEgOiAwKTsKKwlpZiAoIW1heF9jaGlwcykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJOT1IgY2hpcCB0b28gbGFyZ2UgdG8gZml0IGluIG1hcHBpbmcuIEF0dGVtcHRpbmcgdG8gY29wZS4uLlxuIik7CisJCW1heF9jaGlwcyA9IDE7CisJfQorCisJbWFwc2l6ZSA9IChtYXhfY2hpcHMgKyBCSVRTX1BFUl9MT05HLTEpIC8gQklUU19QRVJfTE9ORzsKIAljaGlwX21hcCA9IGttYWxsb2MobWFwc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlwX21hcCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczoga21hbGxvYyBmYWlsZWQgZm9yIENGSSBjaGlwIG1hcFxuIiwgbWFwLT5uYW1lKTsKQEAgLTE5NCwyNSArMjA2LDI4IEBACiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJX191MTYgdHlwZSA9IHByaW1hcnk/Y2ZpLT5jZmlxLT5QX0lEOmNmaS0+Y2ZpcS0+QV9JRDsKLSNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSAmJiBkZWZpbmVkKEhBVkVfSU5URVJfTU9EVUxFKQotCWNoYXIgcHJvYmVuYW1lWzMyXTsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCWNoYXIgcHJvYmVuYW1lWzE2K3NpemVvZihNT0RVTEVfU1lNQk9MX1BSRUZJWCldOwogCWNmaV9jbWRzZXRfZm5fdCAqcHJvYmVfZnVuY3Rpb247CiAKLQlzcHJpbnRmKHByb2JlbmFtZSwgImNmaV9jbWRzZXRfJTQuNFgiLCB0eXBlKTsKKwlzcHJpbnRmKHByb2JlbmFtZSwgTU9EVUxFX1NZTUJPTF9QUkVGSVggImNmaV9jbWRzZXRfJTQuNFgiLCB0eXBlKTsKIAotCXByb2JlX2Z1bmN0aW9uID0gaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0KHByb2JlbmFtZSwgcHJvYmVuYW1lKTsKKwlwcm9iZV9mdW5jdGlvbiA9IF9fc3ltYm9sX2dldChwcm9iZW5hbWUpOworCWlmICghcHJvYmVfZnVuY3Rpb24pIHsKKwkJcmVxdWVzdF9tb2R1bGUocHJvYmVuYW1lICsgc2l6ZW9mKE1PRFVMRV9TWU1CT0xfUFJFRklYKSAtIDEpOworCQlwcm9iZV9mdW5jdGlvbiA9IF9fc3ltYm9sX2dldChwcm9iZW5hbWUpOworCX0KIAogCWlmIChwcm9iZV9mdW5jdGlvbikgewogCQlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKIAogCQltdGQgPSAoKnByb2JlX2Z1bmN0aW9uKShtYXAsIHByaW1hcnkpOwogCQkvKiBJZiBpdCB3YXMgaGFwcHksIGl0J2xsIGhhdmUgaW5jcmVhc2VkIGl0cyBvd24gdXNlIGNvdW50ICovCi0JCWludGVyX21vZHVsZV9wdXQocHJvYmVuYW1lKTsKKwkJc3ltYm9sX3B1dF9hZGRyKHByb2JlX2Z1bmN0aW9uKTsKIAkJcmV0dXJuIG10ZDsKIAl9CiAjZW5kaWYKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlN1cHBvcnQgZm9yIGNvbW1hbmQgc2V0ICUwNFggbm90IHByZXNlbnRcbiIsCi0JICAgICAgIHR5cGUpOworCXByaW50ayhLRVJOX05PVElDRSAiU3VwcG9ydCBmb3IgY29tbWFuZCBzZXQgJTA0WCBub3QgcHJlc2VudFxuIiwgdHlwZSk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTIyNiwxMiArMjQxLDggQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlzd2l0Y2godHlwZSl7Ci0JCS8qIFVyZ2guIElmZGVmcy4gVGhlIHZlcnNpb24gd2l0aCB3ZWFrIHN5bWJvbHMgd2FzCi0JCSAqIF9tdWNoXyBuaWNlci4gU2hhbWUgaXQgZGlkbid0IHNlZW0gdG8gd29yayBvbgotCQkgKiBhbnl0aGluZyBidXQgeDg2LCByZWFsbHkuCi0JCSAqIEJ1dCB3ZSBjYW4ndCByZWx5IGluIGludGVyX21vZHVsZV9nZXQoKSBiZWNhdXNlCi0JCSAqIHRoYXQnZCBtZWFuIHdlIGRlcGVuZCBvbiBsaW5rIG9yZGVyLgotCQkgKi8KKwkJLyogV2UgbmVlZCB0aGVzZSBmb3IgdGhlICFDT05GSUdfTU9EVUxFUyBjYXNlLAorCQkgICBiZWNhdXNlIHN5bWJvbF9nZXQoKSBkb2Vzbid0IHdvcmsgdGhlcmUgKi8KICNpZmRlZiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVAogCWNhc2UgMHgwMDAxOgogCWNhc2UgMHgwMDAzOgpAQCAtMjQ2LDkgKzI1Nyw5IEBACiAgICAgICAgIGNhc2UgMHgwMDIwOgogCQlyZXR1cm4gY2ZpX2NtZHNldF8wMDIwKG1hcCwgcHJpbWFyeSk7CiAjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gY2ZpX2NtZHNldF91bmtub3duKG1hcCwgcHJpbWFyeSk7CiAJfQotCi0JcmV0dXJuIGNmaV9jbWRzZXRfdW5rbm93bihtYXAsIHByaW1hcnkpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcmFtLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcmFtLmMKaW5kZXggYmQyZTg3Ni4uNzYzOTI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yYW0uYwpAQCAtNzAsNyArNzAsNyBAQAogCW10ZC0+cmVhZCA9IG1hcHJhbV9yZWFkOwogCW10ZC0+d3JpdGUgPSBtYXByYW1fd3JpdGU7CiAJbXRkLT5zeW5jID0gbWFwcmFtX25vcDsKLQltdGQtPmZsYWdzID0gTVREX0NBUF9SQU0gfCBNVERfVk9MQVRJTEU7CisJbXRkLT5mbGFncyA9IE1URF9DQVBfUkFNOwogCiAJbXRkLT5lcmFzZXNpemUgPSBQQUdFX1NJWkU7CiAgCXdoaWxlKG10ZC0+c2l6ZSAmIChtdGQtPmVyYXNlc2l6ZSAtIDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JvbS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JvbS5jCmluZGV4IDYyNGMxMmMuLmJjNmVlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcm9tLmMKQEAgLTQ2LDkgKzQ2LDcgQEAKIAltdGQtPndyaXRlID0gbWFwcm9tX3dyaXRlOwogCW10ZC0+c3luYyA9IG1hcHJvbV9ub3A7CiAJbXRkLT5mbGFncyA9IE1URF9DQVBfUk9NOwotCW10ZC0+ZXJhc2VzaXplID0gMTMxMDcyOwotIAl3aGlsZShtdGQtPnNpemUgJiAobXRkLT5lcmFzZXNpemUgLSAxKSkKLQkJbXRkLT5lcmFzZXNpemUgPj49IDE7CisJbXRkLT5lcmFzZXNpemUgPSBtYXAtPnNpemU7CiAKIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCXJldHVybiBtdGQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYwppbmRleCAzY2MwYjIzLi45NjdhYmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL3NoYXJwLmMKQEAgLTE0MCw2ICsxNDAsNyBAQAogCW10ZC0+c3VzcGVuZCA9IHNoYXJwX3N1c3BlbmQ7CiAJbXRkLT5yZXN1bWUgPSBzaGFycF9yZXN1bWU7CiAJbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0g7CisJbXRkLT53cml0ZXNpemUgPSAxOwogCW10ZC0+bmFtZSA9IG1hcC0+bmFtZTsKIAogCW1lbXNldChzaGFycCwgMCwgc2l6ZW9mKCpzaGFycCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCmluZGV4IDdmYWM0MzguLjE2YzAyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKQEAgLTQ3LDYgKzQ3LDExIEBACiAJICBhY2NlbGVyYXRvci4gIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBERUNzdGF0aW9uIDUwMDAvMngwIG9yIGEKIAkgIERFQ3N5c3RlbSA1OTAwIGVxdWlwcGVkIHdpdGggc3VjaCBhIG1vZHVsZS4KIAorCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaCBjYW4gYmUKKwkgIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KSwKKwkgIHNheSBNIGhlcmUgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4uICBUaGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBtczAyLW52Lm8uCisKIGNvbmZpZyBNVERfREFUQUZMQVNICiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEFUNDV4eHggRGF0YUZsYXNoIgogCWRlcGVuZHMgb24gTVREICYmIFNQSV9NQVNURVIgJiYgRVhQRVJJTUVOVEFMCkBAIC0yMDksNyArMjE0LDYgQEAKIGNvbmZpZyBNVERfRE9DUFJPQkUKIAl0cmlzdGF0ZQogCXNlbGVjdCBNVERfRE9DRUNDCi0Jc2VsZWN0IE9CU09MRVRFX0lOVEVSTU9EVUxFCiAKIGNvbmZpZyBNVERfRE9DRUNDCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCmluZGV4IGI2NTczNjcuLjBmNzg4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQpAQCAtMywxMyArMyw2IEBACiAjCiAjICRJZDogTWFrZWZpbGUuY29tbW9uLHYgMS43IDIwMDQvMTIvMjIgMTc6NTE6MTUgam9lcm4gRXhwICQKIAotIyAgICAgICAgICAgICAgICAgICAgICAgKioqIEJJRyBVR0xZIE5PVEUgKioqCi0jCi0jIFRoZSByZW1vdmFsIG9mIGdldF9tb2R1bGVfc3ltYm9sKCkgYW5kIHJlcGxhY2VtZW50IHdpdGgKLSMgaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKCkgZXQgYWwgaGFzIGludHJvZHVjZWQgYSBsaW5rIG9yZGVyIGRlcGVuZGVuY3kKLSMgaGVyZSB3aGVyZSBwcmV2aW91c2x5IHRoZXJlIHdhcyBub25lLiAgV2Ugbm93IGhhdmUgdG8gZW5zdXJlIHRoYXQKLSMgZG9jMjAwWzAxXS5vIGFyZSBsaW5rZWQgYmVmb3JlIGRvY3Byb2JlLm8KLQogb2JqLSQoQ09ORklHX01URF9ET0MyMDAwKQkrPSBkb2MyMDAwLm8KIG9iai0kKENPTkZJR19NVERfRE9DMjAwMSkJKz0gZG9jMjAwMS5vCiBvYmotJChDT05GSUdfTVREX0RPQzIwMDFQTFVTKQkrPSBkb2MyMDAxcGx1cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwppbmRleCA0MTYwYjgzLi4wZDk4YzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKQEAgLTQsNyArNCw3IEBACiAgKiBibG9jazJtdGQuYyAtIGNyZWF0ZSBhbiBtdGQgZnJvbSBhIGJsb2NrIGRldmljZQogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyCVNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNQlK9nJuIEVuZ2VsIDxqb2VybkB3aC5maC13ZWRlbC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2CUrDtnJuIEVuZ2VsIDxqb2VybkB3aC5maC13ZWRlbC5kZT4KICAqCiAgKiBMaWNlbmNlOiBHUEwKICAqLwpAQCAtMzMxLDcgKzMzMSw2IEBACiAJZGV2LT5tdGQud3JpdGV2ID0gZGVmYXVsdF9tdGRfd3JpdGV2OwogCWRldi0+bXRkLnN5bmMgPSBibG9jazJtdGRfc3luYzsKIAlkZXYtPm10ZC5yZWFkID0gYmxvY2sybXRkX3JlYWQ7Ci0JZGV2LT5tdGQucmVhZHYgPSBkZWZhdWx0X210ZF9yZWFkdjsKIAlkZXYtPm10ZC5wcml2ID0gZGV2OwogCWRldi0+bXRkLm93bmVyID0gVEhJU19NT0RVTEU7CiAKQEAgLTM1MSw2ICszNTAsMTIgQEAKIH0KIAogCisvKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIHNpbWlsYXIgdG8gcmVndWxlciBzdHJ0b3VsLiAgSW4gYWRkaXRpb24sIGl0CisgKiBhbGxvd3Mgc29tZSBzdWZmaXhlcyBmb3IgYSBtb3JlIGh1bWFuLXJlYWRhYmxlIG51bWJlciBmb3JtYXQ6CisgKiBraSwgS2ksIGtpQiwgS2lCCS0gbXVsdGlwbHkgcmVzdWx0IHdpdGggMTAyNAorICogTWksIE1pQgkJLSBtdWx0aXBseSByZXN1bHQgd2l0aCAxMDI0XjIKKyAqIEdpLCBHaUIJCS0gbXVsdGlwbHkgcmVzdWx0IHdpdGggMTAyNF4zCisgKi8KIHN0YXRpYyBpbnQgdXN0cnRvdWwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IHNpbXBsZV9zdHJ0b3VsKGNwLCBlbmRwLCBiYXNlKTsKQEAgLTM1OSwxMSArMzY0LDE2IEBACiAJCXJlc3VsdCAqPSAxMDI0OwogCWNhc2UgJ00nOgogCQlyZXN1bHQgKj0gMTAyNDsKKwljYXNlICdLJzoKIAljYXNlICdrJzoKIAkJcmVzdWx0ICo9IDEwMjQ7CiAJLyogQnkgZHdtdzIgZWRpdG9yaWFsIGRlY3JlZSwgImtpIiwgIk1pIiBvciAiR2kiIGFyZSB0byBiZSB1c2VkLiAqLwotCQlpZiAoKCplbmRwKVsxXSA9PSAnaScpCi0JCQkoKmVuZHApICs9IDI7CisJCWlmICgoKmVuZHApWzFdID09ICdpJykgeworCQkJaWYgKCgqZW5kcClbMl0gPT0gJ0InKQorCQkJCSgqZW5kcCkgKz0gMzsKKwkJCWVsc2UKKwkJCQkoKmVuZHApICs9IDI7CisJCX0KIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxOCw3ICs0MjgsOCBAQAogCiBzdGF0aWMgaW50IGJsb2NrMm10ZF9zZXR1cChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewotCWNoYXIgYnVmWzgwKzEyXSwgKnN0cj1idWY7IC8qIDgwIGZvciBkZXZpY2UsIDEyIGZvciBlcmFzZSBzaXplICovCisJY2hhciBidWZbODArMTJdOyAvKiA4MCBmb3IgZGV2aWNlLCAxMiBmb3IgZXJhc2Ugc2l6ZSAqLworCWNoYXIgKnN0ciA9IGJ1ZjsKIAljaGFyICp0b2tlblsyXTsKIAljaGFyICpuYW1lOwogCXNpemVfdCBlcmFzZV9zaXplID0gUEFHRV9TSVpFOwpAQCAtNDMwLDcgKzQ0MSw3IEBACiAJc3RyY3B5KHN0ciwgdmFsKTsKIAlraWxsX2ZpbmFsX25ld2xpbmUoc3RyKTsKIAotCWZvciAoaT0wOyBpPDI7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogCQl0b2tlbltpXSA9IHN0cnNlcCgmc3RyLCAiLCIpOwogCiAJaWYgKHN0cikKQEAgLTQ0OSw4ICs0NjAsMTAgQEAKIAogCWlmICh0b2tlblsxXSkgewogCQlyZXQgPSBwYXJzZV9udW0oJmVyYXNlX3NpemUsIHRva2VuWzFdKTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCkgeworCQkJa2ZyZWUobmFtZSk7CiAJCQlwYXJzZV9lcnIoImlsbGVnYWwgZXJhc2Ugc2l6ZSIpOworCQl9CiAJfQogCiAJYWRkX2RldmljZShuYW1lLCBlcmFzZV9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAwLmMKaW5kZXggMjNlN2E1Yy4uYzU0ZTQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAwLmMKQEAgLTU5LDEzICs1OSwxMCBAQAogCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKIHN0YXRpYyBpbnQgZG9jX3dyaXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAogCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci1zdGF0aWMgaW50IGRvY193cml0ZXZfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbiwKLQkJCSAgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci1zdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7Ci1zdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQkgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKTsKK3N0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOworc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKIHN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYl9ub2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCiAJCQkgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKTsKIHN0YXRpYyBpbnQgZG9jX2VyYXNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKQEAgLTUxNywxNiArNTE0LDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBpbV9uYW1lW10gPSAiRG9DMmtfaW5pdCI7Ci0KLS8qIFRoaXMgcm91dGluZSBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBtdGQgY29kZSB2aWEKLSAqIGludGVyX21vZHVsZV9yZWdpc3Rlci4gIEl0IG11c3Qgb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoCi0gKiBpbnRlcl9tb2R1bGVfZ2V0IHdoaWNoIHdpbGwgYnVtcCB0aGUgdXNlIGNvdW50IG9mIHRoaXMgbW9kdWxlLiAgVGhlCi0gKiBhZGRyZXNzZXMgcGFzc2VkIGJhY2sgaW4gbXRkIGFyZSB2YWxpZCBhcyBsb25nIGFzIHRoZSB1c2UgY291bnQgb2YKLSAqIHRoaXMgbW9kdWxlIGlzIG5vbi16ZXJvLCBpLmUuIGJldHdlZW4gaW50ZXJfbW9kdWxlX2dldCBhbmQKLSAqIGludGVyX21vZHVsZV9wdXQuICBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiAyOSBPY3QgMjAwMC4KLSAqLwotc3RhdGljIHZvaWQgRG9DMmtfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKy8qIFRoaXMgcm91dGluZSBpcyBmb3VuZCBmcm9tIHRoZSBkb2Nwcm9iZSBjb2RlIGJ5IHN5bWJvbF9nZXQoKSwKKyAqIHdoaWNoIHdpbGwgYnVtcCB0aGUgdXNlIGNvdW50IG9mIHRoaXMgbW9kdWxlLiAqLwordm9pZCBEb0Mya19pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBEaXNrT25DaGlwICpvbGQgPSBOVUxMOwpAQCAtNTg2LDcgKzU3Niw3IEBACiAJbXRkLT5lY2N0eXBlID0gTVREX0VDQ19SU19EaXNrT25DaGlwOwogCW10ZC0+c2l6ZSA9IDA7CiAJbXRkLT5lcmFzZXNpemUgPSAwOwotCW10ZC0+b29iYmxvY2sgPSA1MTI7CisJbXRkLT53cml0ZXNpemUgPSA1MTI7CiAJbXRkLT5vb2JzaXplID0gMTY7CiAJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCW10ZC0+ZXJhc2UgPSBkb2NfZXJhc2U7CkBAIC01OTQsOSArNTg0LDYgQEAKIAltdGQtPnVucG9pbnQgPSBOVUxMOwogCW10ZC0+cmVhZCA9IGRvY19yZWFkOwogCW10ZC0+d3JpdGUgPSBkb2Nfd3JpdGU7Ci0JbXRkLT5yZWFkX2VjYyA9IGRvY19yZWFkX2VjYzsKLQltdGQtPndyaXRlX2VjYyA9IGRvY193cml0ZV9lY2M7Ci0JbXRkLT53cml0ZXZfZWNjID0gZG9jX3dyaXRldl9lY2M7CiAJbXRkLT5yZWFkX29vYiA9IGRvY19yZWFkX29vYjsKIAltdGQtPndyaXRlX29vYiA9IGRvY193cml0ZV9vb2I7CiAJbXRkLT5zeW5jID0gTlVMTDsKQEAgLTYyMyw2ICs2MTAsNyBAQAogCQlyZXR1cm47CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoRG9DMmtfaW5pdCk7CiAKIHN0YXRpYyBpbnQgZG9jX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAogCQkgICAgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpCkBAIC05NzEsNzIgKzk1OSwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvY193cml0ZXZfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbiwKLQkJCSAgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKLXsKLQlzdGF0aWMgY2hhciBzdGF0aWNfYnVmWzUxMl07Ci0Jc3RhdGljIERFRklORV9NVVRFWCh3cml0ZXZfYnVmX211dGV4KTsKLQotCXNpemVfdCB0b3RyZXRsZW4gPSAwOwotCXNpemVfdCB0aGlzdmVjb2ZzID0gMDsKLQlpbnQgcmV0PSAwOwotCi0JbXV0ZXhfbG9jaygmd3JpdGV2X2J1Zl9tdXRleCk7Ci0KLQl3aGlsZShjb3VudCkgewotCQlzaXplX3QgdGhpc2xlbiwgdGhpc3JldGxlbjsKLQkJdW5zaWduZWQgY2hhciAqYnVmOwotCi0JCWJ1ZiA9IHZlY3MtPmlvdl9iYXNlICsgdGhpc3ZlY29mczsKLQkJdGhpc2xlbiA9IHZlY3MtPmlvdl9sZW4gLSB0aGlzdmVjb2ZzOwotCi0KLQkJaWYgKHRoaXNsZW4gPj0gNTEyKSB7Ci0JCQl0aGlzbGVuID0gdGhpc2xlbiAmIH4oNTEyLTEpOwotCQkJdGhpc3ZlY29mcyArPSB0aGlzbGVuOwotCQl9IGVsc2UgewotCQkJLyogTm90IGVub3VnaCB0byBmaWxsIGEgcGFnZS4gQ29weSBpbnRvIGJ1ZiAqLwotCQkJbWVtY3B5KHN0YXRpY19idWYsIGJ1ZiwgdGhpc2xlbik7Ci0JCQlidWYgPSAmc3RhdGljX2J1Zlt0aGlzbGVuXTsKLQotCQkJd2hpbGUoY291bnQgJiYgdGhpc2xlbiA8IDUxMikgewotCQkJCXZlY3MrKzsKLQkJCQljb3VudC0tOwotCQkJCXRoaXN2ZWNvZnMgPSBtaW4oKDUxMi10aGlzbGVuKSwgdmVjcy0+aW92X2xlbik7Ci0JCQkJbWVtY3B5KGJ1ZiwgdmVjcy0+aW92X2Jhc2UsIHRoaXN2ZWNvZnMpOwotCQkJCXRoaXNsZW4gKz0gdGhpc3ZlY29mczsKLQkJCQlidWYgKz0gdGhpc3ZlY29mczsKLQkJCX0KLQkJCWJ1ZiA9IHN0YXRpY19idWY7Ci0JCX0KLQkJaWYgKGNvdW50ICYmIHRoaXN2ZWNvZnMgPT0gdmVjcy0+aW92X2xlbikgewotCQkJdGhpc3ZlY29mcyA9IDA7Ci0JCQl2ZWNzKys7Ci0JCQljb3VudC0tOwotCQl9Ci0JCXJldCA9IGRvY193cml0ZV9lY2MobXRkLCB0bywgdGhpc2xlbiwgJnRoaXNyZXRsZW4sIGJ1ZiwgZWNjYnVmLCBvb2JzZWwpOwotCi0JCXRvdHJldGxlbiArPSB0aGlzcmV0bGVuOwotCi0JCWlmIChyZXQgfHwgdGhpc3JldGxlbiAhPSB0aGlzbGVuKQotCQkJYnJlYWs7Ci0KLQkJdG8gKz0gdGhpc2xlbjsKLQl9Ci0KLQltdXRleF91bmxvY2soJndyaXRldl9idWZfbXV0ZXgpOwotCSpyZXRsZW4gPSB0b3RyZXRsZW47Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCXNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQorc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgbGVuMjU2ID0gMCwgcmV0OwogCXN0cnVjdCBOYW5kICpteWNoaXA7CisJdWludDhfdCAqYnVmID0gb3BzLT5vb2JidWY7CisJc2l6ZV90IGxlbiA9IG9wcy0+bGVuOworCisJQlVHX09OKG9wcy0+bW9kZSAhPSBNVERfT09CX1BMQUNFKTsKKworCW9mcyArPSBvcHMtPm9vYm9mZnM7CiAKIAltdXRleF9sb2NrKCZ0aGlzLT5sb2NrKTsKIApAQCAtMTA3Nyw3ICsxMDExLDcgQEAKIAogCURvQ19SZWFkQnVmKHRoaXMsICZidWZbbGVuMjU2XSwgbGVuIC0gbGVuMjU2KTsKIAotCSpyZXRsZW4gPSBsZW47CisJb3BzLT5yZXRsZW4gPSBsZW47CiAJLyogUmVhZGluZyB0aGUgZnVsbCBPT0IgZGF0YSBkcm9wcyB1cyBvZmYgb2YgdGhlIGVuZCBvZiB0aGUgcGFnZSwKICAgICAgICAgICogY2F1c2luZyB0aGUgZmxhc2ggZGV2aWNlIHRvIGdvIGludG8gYnVzeSBtb2RlLCBzbyB3ZSBuZWVkCiAgICAgICAgICAqIHRvIHdhaXQgdW50aWwgcmVhZHkgMTEuNC4xIGFuZCBUb3NoaWJhIFRDNTgyNTZGVCBkb2NzICovCkBAIC0xMTkyLDE3ICsxMTI2LDIwIEBACiAKIH0KIAotc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotIAkJCSBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZikKK3N0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLSAJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0gCWludCByZXQ7CisJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IHJldDsKIAotIAltdXRleF9sb2NrKCZ0aGlzLT5sb2NrKTsKLSAJcmV0ID0gZG9jX3dyaXRlX29vYl9ub2xvY2sobXRkLCBvZnMsIGxlbiwgcmV0bGVuLCBidWYpOworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CiAKLSAJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKLSAJcmV0dXJuIHJldDsKKwltdXRleF9sb2NrKCZ0aGlzLT5sb2NrKTsKKwlyZXQgPSBkb2Nfd3JpdGVfb29iX25vbG9jayhtdGQsIG9mcyArIG9wcy0+b29ib2Zmcywgb3BzLT5sZW4sCisJCQkJICAgJm9wcy0+cmV0bGVuLCBvcHMtPm9vYmJ1Zik7CisKKwltdXRleF91bmxvY2soJnRoaXMtPmxvY2spOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZG9jX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCkBAIC0xMjc3LDEyICsxMjE0LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9kb2MyMDAwKHZvaWQpCi17Ci0gICAgICAgaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGltX25hbWUsIFRISVNfTU9EVUxFLCAmRG9DMmtfaW5pdCk7Ci0gICAgICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2RvYzIwMDAodm9pZCkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKQEAgLTEyOTgsMTEgKzEyMjksOSBAQAogCQlrZnJlZSh0aGlzLT5jaGlwcyk7CiAJCWtmcmVlKG10ZCk7CiAJfQotCWludGVyX21vZHVsZV91bnJlZ2lzdGVyKGltX25hbWUpOwogfQogCiBtb2R1bGVfZXhpdChjbGVhbnVwX2RvYzIwMDApOwotbW9kdWxlX2luaXQoaW5pdF9kb2MyMDAwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxLmMKaW5kZXggNjgxYTljNy4uMGNmMDIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxLmMKQEAgLTQzLDEwICs0MywxMCBAQAogc3RhdGljIGludCBkb2Nfd3JpdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCiAJCQkgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1ZiwKIAkJCSBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CitzdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKK3N0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiBzdGF0aWMgaW50IGRvY19lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cik7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmRvY21pbGxpc3QgPSBOVUxMOwpAQCAtMzI0LDE2ICszMjQsOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyIGltX25hbWVbXSA9ICJEb0NNaWxfaW5pdCI7Ci0KLS8qIFRoaXMgcm91dGluZSBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBtdGQgY29kZSB2aWEKLSAqIGludGVyX21vZHVsZV9yZWdpc3Rlci4gIEl0IG11c3Qgb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoCi0gKiBpbnRlcl9tb2R1bGVfZ2V0IHdoaWNoIHdpbGwgYnVtcCB0aGUgdXNlIGNvdW50IG9mIHRoaXMgbW9kdWxlLiAgVGhlCi0gKiBhZGRyZXNzZXMgcGFzc2VkIGJhY2sgaW4gbXRkIGFyZSB2YWxpZCBhcyBsb25nIGFzIHRoZSB1c2UgY291bnQgb2YKLSAqIHRoaXMgbW9kdWxlIGlzIG5vbi16ZXJvLCBpLmUuIGJldHdlZW4gaW50ZXJfbW9kdWxlX2dldCBhbmQKLSAqIGludGVyX21vZHVsZV9wdXQuICBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiAyOSBPY3QgMjAwMC4KLSAqLwotc3RhdGljIHZvaWQgRG9DTWlsX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCisvKiBUaGlzIHJvdXRpbmUgaXMgZm91bmQgZnJvbSB0aGUgZG9jcHJvYmUgY29kZSBieSBzeW1ib2xfZ2V0KCksCisgKiB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gKi8KK3ZvaWQgRG9DTWlsX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IERpc2tPbkNoaXAgKm9sZCA9IE5VTEw7CkBAIC0zNjgsNyArMzYxLDcgQEAKIAkvKiBGSVhNRTogZXJhc2Ugc2l6ZSBpcyBub3QgYWx3YXlzIDhLaUIgKi8KIAltdGQtPmVyYXNlc2l6ZSA9IDB4MjAwMDsKIAotCW10ZC0+b29iYmxvY2sgPSA1MTI7CisJbXRkLT53cml0ZXNpemUgPSA1MTI7CiAJbXRkLT5vb2JzaXplID0gMTY7CiAJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCW10ZC0+ZXJhc2UgPSBkb2NfZXJhc2U7CkBAIC0zNzYsOCArMzY5LDYgQEAKIAltdGQtPnVucG9pbnQgPSBOVUxMOwogCW10ZC0+cmVhZCA9IGRvY19yZWFkOwogCW10ZC0+d3JpdGUgPSBkb2Nfd3JpdGU7Ci0JbXRkLT5yZWFkX2VjYyA9IGRvY19yZWFkX2VjYzsKLQltdGQtPndyaXRlX2VjYyA9IGRvY193cml0ZV9lY2M7CiAJbXRkLT5yZWFkX29vYiA9IGRvY19yZWFkX29vYjsKIAltdGQtPndyaXRlX29vYiA9IGRvY193cml0ZV9vb2I7CiAJbXRkLT5zeW5jID0gTlVMTDsKQEAgLTQwMSw2ICszOTIsNyBAQAogCQlyZXR1cm47CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoRG9DTWlsX2luaXQpOwogCiBzdGF0aWMgaW50IGRvY19yZWFkIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCiAJCSAgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQpAQCAtNjcwLDggKzY2Miw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCitzdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewogI2lmbmRlZiBVU0VfTUVNQ1BZCiAJaW50IGk7CkBAIC02ODAsNiArNjcyLDEyIEBACiAJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSB0aGlzLT52aXJ0YWRyOwogCXN0cnVjdCBOYW5kICpteWNoaXAgPSAmdGhpcy0+Y2hpcHNbb2ZzID4+IHRoaXMtPmNoaXBzaGlmdF07CisJdWludDhfdCAqYnVmID0gb3BzLT5vb2JidWY7CisJc2l6ZV90IGxlbiA9IG9wcy0+bGVuOworCisJQlVHX09OKG9wcy0+bW9kZSAhPSBNVERfT09CX1BMQUNFKTsKKworCW9mcyArPSBvcHMtPm9vYm9mZnM7CiAKIAkvKiBGaW5kIHRoZSBjaGlwIHdoaWNoIGlzIHRvIGJlIHVzZWQgYW5kIHNlbGVjdCBpdCAqLwogCWlmICh0aGlzLT5jdXJmbG9vciAhPSBteWNoaXAtPmZsb29yKSB7CkBAIC03MTYsMTMgKzcxNCwxMyBAQAogI2VuZGlmCiAJYnVmW2xlbiAtIDFdID0gUmVhZERPQyhkb2NwdHIsIExhc3REYXRhUmVhZCk7CiAKLQkqcmV0bGVuID0gbGVuOworCW9wcy0+cmV0bGVuID0gbGVuOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCSBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAjaWZuZGVmIFVTRV9NRU1DUFkKIAlpbnQgaTsKQEAgLTczMiw2ICs3MzAsMTIgQEAKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IHRoaXMtPnZpcnRhZHI7CiAJc3RydWN0IE5hbmQgKm15Y2hpcCA9ICZ0aGlzLT5jaGlwc1tvZnMgPj4gdGhpcy0+Y2hpcHNoaWZ0XTsKKwl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKKwlzaXplX3QgbGVuID0gb3BzLT5sZW47CisKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOworCisJb2ZzICs9IG9wcy0+b29ib2ZmczsKIAogCS8qIEZpbmQgdGhlIGNoaXAgd2hpY2ggaXMgdG8gYmUgdXNlZCBhbmQgc2VsZWN0IGl0ICovCiAJaWYgKHRoaXMtPmN1cmZsb29yICE9IG15Y2hpcC0+Zmxvb3IpIHsKQEAgLTc4MywxMiArNzg3LDEyIEBACiAJaWYgKFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTykgJiAxKSB7CiAJCXByaW50aygiRXJyb3IgcHJvZ3JhbW1pbmcgb29iIGRhdGFcbiIpOwogCQkvKiBGSVhNRTogaW1wbGVtZW50IEJhZCBCbG9jayBSZXBsYWNlbWVudCAoaW4gbmZ0bC5jID8/KSAqLwotCQkqcmV0bGVuID0gMDsKKwkJb3BzLT5yZXRsZW4gPSAwOwogCQlyZXQgPSAtRUlPOwogCX0KIAlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwogCi0JKnJldGxlbiA9IGxlbjsKKwlvcHMtPnJldGxlbiA9IGxlbjsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04NTYsMTIgKzg2MCw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZG9jMjAwMSh2b2lkKQotewotCWludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lLCBUSElTX01PRFVMRSwgJkRvQ01pbF9pbml0KTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfZG9jMjAwMSh2b2lkKQogewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwpAQCAtODc3LDExICs4NzUsOSBAQAogCQlrZnJlZSh0aGlzLT5jaGlwcyk7CiAJCWtmcmVlKG10ZCk7CiAJfQotCWludGVyX21vZHVsZV91bnJlZ2lzdGVyKGltX25hbWUpOwogfQogCiBtb2R1bGVfZXhpdChjbGVhbnVwX2RvYzIwMDEpOwotbW9kdWxlX2luaXQoaW5pdF9kb2MyMDAxKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYwppbmRleCA1ZjU3ZjI5Li42NmNiMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxcGx1cy5jCkBAIC00NywxMCArNDcsMTAgQEAKIHN0YXRpYyBpbnQgZG9jX3dyaXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAogCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYsIHVfY2hhciAqZWNjYnVmLAogCQlzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7Ci1zdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CitzdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKK3N0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiBzdGF0aWMgaW50IGRvY19lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cik7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmRvY21pbHBsdXNsaXN0ID0gTlVMTDsKQEAgLTQ0NywxNiArNDQ3LDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBpbV9uYW1lW10gPSAiRG9DTWlsUGx1c19pbml0IjsKLQotLyogVGhpcyByb3V0aW5lIGlzIG1hZGUgYXZhaWxhYmxlIHRvIG90aGVyIG10ZCBjb2RlIHZpYQotICogaW50ZXJfbW9kdWxlX3JlZ2lzdGVyLiAgSXQgbXVzdCBvbmx5IGJlIGFjY2Vzc2VkIHRocm91Z2gKLSAqIGludGVyX21vZHVsZV9nZXQgd2hpY2ggd2lsbCBidW1wIHRoZSB1c2UgY291bnQgb2YgdGhpcyBtb2R1bGUuICBUaGUKLSAqIGFkZHJlc3NlcyBwYXNzZWQgYmFjayBpbiBtdGQgYXJlIHZhbGlkIGFzIGxvbmcgYXMgdGhlIHVzZSBjb3VudCBvZgotICogdGhpcyBtb2R1bGUgaXMgbm9uLXplcm8sIGkuZS4gYmV0d2VlbiBpbnRlcl9tb2R1bGVfZ2V0IGFuZAotICogaW50ZXJfbW9kdWxlX3B1dC4gIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IDI5IE9jdCAyMDAwLgotICovCi1zdGF0aWMgdm9pZCBEb0NNaWxQbHVzX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCisvKiBUaGlzIHJvdXRpbmUgaXMgZm91bmQgZnJvbSB0aGUgZG9jcHJvYmUgY29kZSBieSBzeW1ib2xfZ2V0KCksCisgKiB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gKi8KK3ZvaWQgRG9DTWlsUGx1c19pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBEaXNrT25DaGlwICpvbGQgPSBOVUxMOwpAQCAtNDkwLDcgKzQ4Myw3IEBACiAJbXRkLT5zaXplID0gMDsKIAogCW10ZC0+ZXJhc2VzaXplID0gMDsKLQltdGQtPm9vYmJsb2NrID0gNTEyOworCW10ZC0+d3JpdGVzaXplID0gNTEyOwogCW10ZC0+b29ic2l6ZSA9IDE2OwogCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAltdGQtPmVyYXNlID0gZG9jX2VyYXNlOwpAQCAtNDk4LDggKzQ5MSw2IEBACiAJbXRkLT51bnBvaW50ID0gTlVMTDsKIAltdGQtPnJlYWQgPSBkb2NfcmVhZDsKIAltdGQtPndyaXRlID0gZG9jX3dyaXRlOwotCW10ZC0+cmVhZF9lY2MgPSBkb2NfcmVhZF9lY2M7Ci0JbXRkLT53cml0ZV9lY2MgPSBkb2Nfd3JpdGVfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBkb2NfcmVhZF9vb2I7CiAJbXRkLT53cml0ZV9vb2IgPSBkb2Nfd3JpdGVfb29iOwogCW10ZC0+c3luYyA9IE5VTEw7CkBAIC01MjQsNiArNTE1LDcgQEAKIAkJcmV0dXJuOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKERvQ01pbFBsdXNfaW5pdCk7CiAKICNpZiAwCiBzdGF0aWMgaW50IGRvY19kdW1wYmxrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSkKQEAgLTg3NiwxNCArODY4LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCitzdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewogCWxvZmZfdCBmb2ZzLCBiYXNlOwogCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXZvaWQgX19pb21lbSAqIGRvY3B0ciA9IHRoaXMtPnZpcnRhZHI7CiAJc3RydWN0IE5hbmQgKm15Y2hpcCA9ICZ0aGlzLT5jaGlwc1tvZnMgPj4gdGhpcy0+Y2hpcHNoaWZ0XTsKIAlzaXplX3QgaSwgc2l6ZSwgZ290LCB3YW50OworCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+b29iYnVmOworCXNpemVfdCBsZW4gPSBvcHMtPmxlbjsKKworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CisKKwlvZnMgKz0gb3BzLT5vb2JvZmZzOwogCiAJRG9DX0NoZWNrQVNJQyhkb2NwdHIpOwogCkBAIC05NDksMTIgKzk0NywxMiBAQAogCS8qIERpc2FibGUgZmxhc2ggaW50ZXJuYWxseSAqLwogCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfRmxhc2hTZWxlY3QpOwogCi0JKnJldGxlbiA9IGxlbjsKKwlvcHMtPnJldGxlbiA9IGxlbjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAl2b2xhdGlsZSBjaGFyIGR1bW15OwogCWxvZmZfdCBmb2ZzLCBiYXNlOwpAQCAtOTYzLDYgKzk2MSwxMiBAQAogCXN0cnVjdCBOYW5kICpteWNoaXAgPSAmdGhpcy0+Y2hpcHNbb2ZzID4+IHRoaXMtPmNoaXBzaGlmdF07CiAJc2l6ZV90IGksIHNpemUsIGdvdCwgd2FudDsKIAlpbnQgcmV0ID0gMDsKKwl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKKwlzaXplX3QgbGVuID0gb3BzLT5sZW47CisKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOworCisJb2ZzICs9IG9wcy0+b29ib2ZmczsKIAogCURvQ19DaGVja0FTSUMoZG9jcHRyKTsKIApAQCAtMTAzOCw3ICsxMDQyLDcgQEAKIAkJCXByaW50aygiTVREOiBFcnJvciAweCV4IHByb2dyYW1taW5nIG9vYiBhdCAweCV4XG4iLAogCQkJCWR1bW15LCAoaW50KW9mcyk7CiAJCQkvKiBGSVhNRTogaW1wbGVtZW50IEJhZCBCbG9jayBSZXBsYWNlbWVudCAqLwotCQkJKnJldGxlbiA9IDA7CisJCQlvcHMtPnJldGxlbiA9IDA7CiAJCQlyZXQgPSAtRUlPOwogCQl9CiAJCWR1bW15ID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CkBAIC0xMDUxLDcgKzEwNTUsNyBAQAogCS8qIERpc2FibGUgZmxhc2ggaW50ZXJuYWxseSAqLwogCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfRmxhc2hTZWxlY3QpOwogCi0JKnJldGxlbiA9IGxlbjsKKwlvcHMtPnJldGxlbiA9IGxlbjsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTIyLDEyICsxMTI2LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9kb2MyMDAxcGx1cyh2b2lkKQotewotCWludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lLCBUSElTX01PRFVMRSwgJkRvQ01pbFBsdXNfaW5pdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2RvYzIwMDFwbHVzKHZvaWQpCiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CkBAIC0xMTQzLDExICsxMTQxLDkgQEAKIAkJa2ZyZWUodGhpcy0+Y2hpcHMpOwogCQlrZnJlZShtdGQpOwogCX0KLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lKTsKIH0KIAogbW9kdWxlX2V4aXQoY2xlYW51cF9kb2MyMDAxcGx1cyk7Ci1tb2R1bGVfaW5pdChpbml0X2RvYzIwMDFwbHVzKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4gZXQgYWwuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY3Byb2JlLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY3Byb2JlLmMKaW5kZXggMTMxNzhiOS4uNTkzYmIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jcHJvYmUuYwpAQCAtMjMxLDYgKzIzMSwxMCBAQAogCiBzdGF0aWMgaW50IGRvY2ZvdW5kOwogCitleHRlcm4gdm9pZCBEb0Mya19pbml0KHN0cnVjdCBtdGRfaW5mbyAqKTsKK2V4dGVybiB2b2lkIERvQ01pbF9pbml0KHN0cnVjdCBtdGRfaW5mbyAqKTsKK2V4dGVybiB2b2lkIERvQ01pbFBsdXNfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBEb0NfUHJvYmUodW5zaWduZWQgbG9uZyBwaHlzYWRyKQogewogCXZvaWQgX19pb21lbSAqZG9jcHRyOwpAQCAtMjM5LDggKzI0Myw2IEBACiAJaW50IENoaXBJRDsKIAljaGFyIG5hbWVidWZbMTVdOwogCWNoYXIgKm5hbWUgPSBuYW1lYnVmOwotCWNoYXIgKmltX2Z1bmNuYW1lID0gTlVMTDsKLQljaGFyICppbV9tb2RuYW1lID0gTlVMTDsKIAl2b2lkICgqaW5pdHJvdXRpbmUpKHN0cnVjdCBtdGRfaW5mbyAqKSA9IE5VTEw7CiAKIAlkb2NwdHIgPSBpb3JlbWFwKHBoeXNhZHIsIERPQ19JT1JFTUFQX0xFTik7CkBAIC0yNzgsNDEgKzI4MCwzMyBAQAogCQlzd2l0Y2goQ2hpcElEKSB7CiAJCWNhc2UgRE9DX0NoaXBJRF9Eb2Mya1RTT1A6CiAJCQluYW1lPSIyMDAwIFRTT1AiOwotCQkJaW1fZnVuY25hbWUgPSAiRG9DMmtfaW5pdCI7Ci0JCQlpbV9tb2RuYW1lID0gImRvYzIwMDAiOworCQkJaW5pdHJvdXRpbmUgPSBzeW1ib2xfcmVxdWVzdChEb0Mya19pbml0KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRE9DX0NoaXBJRF9Eb2MyazoKIAkJCW5hbWU9IjIwMDAiOwotCQkJaW1fZnVuY25hbWUgPSAiRG9DMmtfaW5pdCI7Ci0JCQlpbV9tb2RuYW1lID0gImRvYzIwMDAiOworCQkJaW5pdHJvdXRpbmUgPSBzeW1ib2xfcmVxdWVzdChEb0Mya19pbml0KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRE9DX0NoaXBJRF9Eb2NNaWw6CiAJCQluYW1lPSJNaWxsZW5uaXVtIjsKICNpZmRlZiBET0NfU0lOR0xFX0RSSVZFUgotCQkJaW1fZnVuY25hbWUgPSAiRG9DMmtfaW5pdCI7Ci0JCQlpbV9tb2RuYW1lID0gImRvYzIwMDAiOworCQkJaW5pdHJvdXRpbmUgPSBzeW1ib2xfcmVxdWVzdChEb0Mya19pbml0KTsKICNlbHNlCi0JCQlpbV9mdW5jbmFtZSA9ICJEb0NNaWxfaW5pdCI7Ci0JCQlpbV9tb2RuYW1lID0gImRvYzIwMDEiOworCQkJaW5pdHJvdXRpbmUgPSBzeW1ib2xfcmVxdWVzdChEb0NNaWxfaW5pdCk7CiAjZW5kaWYgLyogRE9DX1NJTkdMRV9EUklWRVIgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMTY6CiAJCWNhc2UgRE9DX0NoaXBJRF9Eb2NNaWxQbHVzMzI6CiAJCQluYW1lPSJNaWxsZW5uaXVtUGx1cyI7Ci0JCQlpbV9mdW5jbmFtZSA9ICJEb0NNaWxQbHVzX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAxcGx1cyI7CisJCQlpbml0cm91dGluZSA9IHN5bWJvbF9yZXF1ZXN0KERvQ01pbFBsdXNfaW5pdCk7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChpbV9mdW5jbmFtZSkKLQkJCWluaXRyb3V0aW5lID0gaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0KGltX2Z1bmNuYW1lLCBpbV9tb2RuYW1lKTsKLQogCQlpZiAoaW5pdHJvdXRpbmUpIHsKIAkJCSgqaW5pdHJvdXRpbmUpKG10ZCk7Ci0JCQlpbnRlcl9tb2R1bGVfcHV0KGltX2Z1bmNuYW1lKTsKKwkJCXN5bWJvbF9wdXRfYWRkcihpbml0cm91dGluZSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJcHJpbnRrKEtFUk5fTk9USUNFICJDYW5ub3QgZmluZCBkcml2ZXIgZm9yIERpc2tPbkNoaXAgJXMgYXQgMHglbFhcbiIsIG5hbWUsIHBoeXNhZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2xhcnQuYwppbmRleCAyOWIwZGRhLi40ZWE1MGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2xhcnQuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2xhcnQuYwpAQCAtNjM1LDYgKzYzNSw3IEBACiAgICBwcmludGsgKCIlczogVGhpcyBsb29rcyBsaWtlIGEgTEFSVCBib2FyZCB0byBtZS5cbiIsbW9kdWxlX25hbWUpOwogICAgbXRkLm5hbWUgPSBtb2R1bGVfbmFtZTsKICAgIG10ZC50eXBlID0gTVREX05PUkZMQVNIOworICAgbXRkLndyaXRlc2l6ZSA9IDE7CiAgICBtdGQuZmxhZ3MgPSBNVERfQ0FQX05PUkZMQVNIOwogICAgbXRkLnNpemUgPSBGTEFTSF9CTE9DS1NJWkVfUEFSQU0gKiBGTEFTSF9OVU1CTE9DS1NfMTZtX1BBUkFNICsgRkxBU0hfQkxPQ0tTSVpFX01BSU4gKiBGTEFTSF9OVU1CTE9DS1NfMTZtX01BSU47CiAgICBtdGQuZXJhc2VzaXplID0gRkxBU0hfQkxPQ0tTSVpFX01BSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCAwNGU2NWQ1Li5hODQ2NjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTQ2NSw2ICs0NjUsNyBAQAogCQlmbGFzaC0+bXRkLm5hbWUgPSBzcGktPmRldi5idXNfaWQ7CiAKIAlmbGFzaC0+bXRkLnR5cGUgPSBNVERfTk9SRkxBU0g7CisJZmxhc2gtPm10ZC53cml0ZXNpemUgPSAxOwogCWZsYXNoLT5tdGQuZmxhZ3MgPSBNVERfQ0FQX05PUkZMQVNIOwogCWZsYXNoLT5tdGQuc2l6ZSA9IGluZm8tPnNlY3Rvcl9zaXplICogaW5mby0+bl9zZWN0b3JzOwogCWZsYXNoLT5tdGQuZXJhc2VzaXplID0gaW5mby0+c2VjdG9yX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCmluZGV4IDQ4NWY2NjMuLjRhYjc2NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAltcC0+dWFkZHIgPSBwaHlzX3RvX3ZpcnQoZml4YWRkcik7CiAKIAltdGQtPnR5cGUgPSBNVERfUkFNOwotCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JBTSB8IE1URF9YSVA7CisJbXRkLT5mbGFncyA9IE1URF9DQVBfUkFNOwogCW10ZC0+c2l6ZSA9IGZpeHNpemU7CiAJbXRkLT5uYW1lID0gKGNoYXIgKiltczAybnZfbmFtZTsKIAltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZHJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRyYW0uYwppbmRleCAxNDQzMTE3Li5iNDQzOGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZHJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkcmFtLmMKQEAgLTEwNiw2ICsxMDYsNyBAQAogCW10ZC0+dHlwZSA9IE1URF9SQU07CiAJbXRkLT5mbGFncyA9IE1URF9DQVBfUkFNOwogCW10ZC0+c2l6ZSA9IHNpemU7CisJbXRkLT53cml0ZXNpemUgPSAxOwogCW10ZC0+ZXJhc2VzaXplID0gTVREUkFNX0VSQVNFX1NJWkU7CiAJbXRkLT5wcml2ID0gbWFwcGVkX2FkZHJlc3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvcGhyYW0uYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcGhyYW0uYwppbmRleCBlODY4NWVlLi5lMDllNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9waHJhbS5jCkBAIC0xLDggKzEsOCBAQAogLyoqCiAgKiAkSWQ6IHBocmFtLmMsdiAxLjE2IDIwMDUvMTEvMDcgMTE6MTQ6MjUgZ2xlaXhuZXIgRXhwICQKICAqCi0gKiBDb3B5cmlnaHQgKGMpID8/Pz8JCUpvY2hlbiBTY2jkdWJsZSA8cHNpb25pY0Bwc2lvbmljLmRlPgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQJSvZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+CisgKiBDb3B5cmlnaHQgKGMpID8/Pz8JCUpvY2hlbiBTY2jDpHVibGUgPHBzaW9uaWNAcHNpb25pYy5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0CUrDtnJuIEVuZ2VsIDxqb2VybkB3aC5maC13ZWRlbC5kZT4KICAqCiAgKiBVc2FnZToKICAqCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogCW5ldy0+bXRkLm5hbWUgPSBuYW1lOwogCW5ldy0+bXRkLnNpemUgPSBsZW47Ci0JbmV3LT5tdGQuZmxhZ3MgPSBNVERfQ0FQX1JBTSB8IE1URF9FUkFTRUFCTEUgfCBNVERfVk9MQVRJTEU7CisJbmV3LT5tdGQuZmxhZ3MgPSBNVERfQ0FQX1JBTTsKICAgICAgICAgbmV3LT5tdGQuZXJhc2UgPSBwaHJhbV9lcmFzZTsKIAluZXctPm10ZC5wb2ludCA9IHBocmFtX3BvaW50OwogCW5ldy0+bXRkLnVucG9pbnQgPSBwaHJhbV91bnBvaW50OwpAQCAtMjY2LDEyICsyNjYsMTYgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBwYXJzZV9udW0zMigmc3RhcnQsIHRva2VuWzFdKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJa2ZyZWUobmFtZSk7CiAJCXBhcnNlX2VycigiaWxsZWdhbCBzdGFydCBhZGRyZXNzXG4iKTsKKwl9CiAKIAlyZXQgPSBwYXJzZV9udW0zMigmbGVuLCB0b2tlblsyXSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWtmcmVlKG5hbWUpOwogCQlwYXJzZV9lcnIoImlsbGVnYWwgZGV2aWNlIGxlbmd0aFxuIik7CisJfQogCiAJcmVnaXN0ZXJfZGV2aWNlKG5hbWUsIHN0YXJ0LCBsZW4pOwogCkBAIC0yOTYsNSArMzAwLDUgQEAKIG1vZHVsZV9leGl0KGNsZWFudXBfcGhyYW0pOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJK9nJuIEVuZ2VsIDxqb2VybkB3aC5maC13ZWRlbC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkrDtnJuIEVuZ2VsIDxqb2VybkB3aC5maC13ZWRlbC5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIGRyaXZlciBmb3IgcGh5c2ljYWwgUkFNIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMKaW5kZXggNmZhZWU2Yy4uYjNmNjY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYwpAQCAtMjAwLDggKzIwMCw3IEBACiAKIAkoKmN1cm10ZCktPm10ZGluZm8tPm5hbWUgPSBuYW1lOwogCSgqY3VybXRkKS0+bXRkaW5mby0+c2l6ZSA9IGxlbmd0aDsKLQkoKmN1cm10ZCktPm10ZGluZm8tPmZsYWdzID0gTVREX0NMRUFSX0JJVFMgfCBNVERfU0VUX0JJVFMgfAotCQkJCQlNVERfV1JJVEVCX1dSSVRFQUJMRSB8IE1URF9WT0xBVElMRSB8IE1URF9DQVBfUkFNOworCSgqY3VybXRkKS0+bXRkaW5mby0+ZmxhZ3MgPSBNVERfQ0FQX1JBTTsKICAgICAgICAgKCpjdXJtdGQpLT5tdGRpbmZvLT5lcmFzZSA9IHNscmFtX2VyYXNlOwogCSgqY3VybXRkKS0+bXRkaW5mby0+cG9pbnQgPSBzbHJhbV9wb2ludDsKIAkoKmN1cm10ZCktPm10ZGluZm8tPnVucG9pbnQgPSBzbHJhbV91bnBvaW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMgYi9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYwppbmRleCBhM2I5MjQ3Li4xZTIxYTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmZ0bC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9pbmZ0bC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTc5LDE0ICs4MCwxMiBAQAogCWluZnRsLT5tYmQuZGV2bnVtID0gLTE7CiAJaW5mdGwtPm1iZC5ibGtzaXplID0gNTEyOwogCWluZnRsLT5tYmQudHIgPSB0cjsKLQltZW1jcHkoJmluZnRsLT5vb2JpbmZvLCAmbXRkLT5vb2JpbmZvLCBzaXplb2Yoc3RydWN0IG5hbmRfb29iaW5mbykpOwotCWluZnRsLT5vb2JpbmZvLnVzZWVjYyA9IE1URF9OQU5ERUNDX1BMQUNFT05MWTsKIAotICAgICAgICBpZiAoSU5GVExfbW91bnQoaW5mdGwpIDwgMCkgeworCWlmIChJTkZUTF9tb3VudChpbmZ0bCkgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIklORlRMOiBjb3VsZCBub3QgbW91bnQgZGV2aWNlXG4iKTsKIAkJa2ZyZWUoaW5mdGwpOwogCQlyZXR1cm47Ci0gICAgICAgIH0KKwl9CiAKIAkvKiBPSywgaXQncyBhIG5ldyBvbmUuIFNldCB1cCBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcy4gKi8KIApAQCAtMTUyLDYgKzE1MSw2OSBAQAogICovCiAKIC8qCisgKiBSZWFkIG9vYiBkYXRhIGZyb20gZmxhc2gKKyAqLworaW50IGluZnRsX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1ZikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZXM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisJb3BzLm9vYm9mZnMgPSBvZmZzICYgKG10ZC0+d3JpdGVzaXplIC0gMSk7CisJb3BzLm9vYmxlbiA9IGxlbjsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5sZW4gPSBsZW47CisKKwlyZXMgPSBtdGQtPnJlYWRfb29iKG10ZCwgb2ZmcyAmIH4obXRkLT53cml0ZXNpemUgLSAxKSwgJm9wcyk7CisJKnJldGxlbiA9IG9wcy5yZXRsZW47CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFdyaXRlIG9vYiBkYXRhIHRvIGZsYXNoCisgKi8KK2ludCBpbmZ0bF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1ZikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZXM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisJb3BzLm9vYm9mZnMgPSBvZmZzICYgKG10ZC0+d3JpdGVzaXplIC0gMSk7CisJb3BzLm9vYmxlbiA9IGxlbjsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5sZW4gPSBsZW47CisKKwlyZXMgPSBtdGQtPndyaXRlX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOworCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBXcml0ZSBkYXRhIGFuZCBvb2IgdG8gZmxhc2gKKyAqLworc3RhdGljIGludCBpbmZ0bF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCSAgICAgICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmLCB1aW50OF90ICpvb2IpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmczsKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JidWYgPSBvb2I7CisJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzICYgfihtdGQtPndyaXRlc2l6ZSAtIDEpLCAmb3BzKTsKKwkqcmV0bGVuID0gb3BzLnJldGxlbjsKKwlyZXR1cm4gcmVzOworfQorCisvKgogICogSU5GVExfZmluZGZyZWVibG9jazogRmluZCBhIGZyZWUgRXJhc2UgVW5pdCBvbiB0aGUgSU5GVEwgcGFydGl0aW9uLgogICoJVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gdGhlIGdpdmUgVmlydHVhbCBVbml0IENoYWluLgogICovCkBAIC0xOTgsMTAgKzI2MCwxMSBAQAogCXUxNiBCbG9ja01hcFtNQVhfU0VDVE9SU19QRVJfVU5JVF07CiAJdW5zaWduZWQgY2hhciBCbG9ja0RlbGV0ZWRbTUFYX1NFQ1RPUlNfUEVSX1VOSVRdOwogCXVuc2lnbmVkIGludCB0aGlzRVVOLCBwcmV2RVVOLCBzdGF0dXM7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAlpbnQgYmxvY2ssIHNpbGx5OwogCXVuc2lnbmVkIGludCB0YXJnZXRFVU47CiAJc3RydWN0IGluZnRsX29vYiBvb2I7Ci0gICAgICAgIHNpemVfdCByZXRsZW47CisJc2l6ZV90IHJldGxlbjsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJJTkZUTDogSU5GVExfZm9sZGNoYWluKGluZnRsPSVwLHRoaXNWVUM9JWQsIgogCQkicGVuZGluZz0lZClcbiIsIGluZnRsLCB0aGlzVlVDLCBwZW5kaW5nYmxvY2spOwpAQCAtMjIxLDE4ICsyODQsMTggQEAKIAkgKiBTY2FuIHRvIGZpbmQgdGhlIEVyYXNlIFVuaXQgd2hpY2ggaG9sZHMgdGhlIGFjdHVhbCBkYXRhIGZvciBlYWNoCiAJICogNTEyLWJ5dGUgYmxvY2sgd2l0aGluIHRoZSBDaGFpbi4KIAkgKi8KLSAgICAgICAgc2lsbHkgPSBNQVhfTE9PUFM7CisJc2lsbHkgPSBNQVhfTE9PUFM7CiAJd2hpbGUgKHRoaXNFVU4gPCBpbmZ0bC0+bmJfYmxvY2tzKSB7CiAJCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IGluZnRsLT5FcmFzZVNpemUvU0VDVE9SU0laRTsgYmxvY2sgKyspIHsKIAkJCWlmICgoQmxvY2tNYXBbYmxvY2tdICE9IDB4ZmZmZikgfHwgQmxvY2tEZWxldGVkW2Jsb2NrXSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKE1URF9SRUFET09CKGluZnRsLT5tYmQubXRkLCAodGhpc0VVTiAqIGluZnRsLT5FcmFzZVNpemUpCi0JCQkgICAgICsgKGJsb2NrICogU0VDVE9SU0laRSksIDE2ICwgJnJldGxlbiwKLQkJCSAgICAgKGNoYXIgKikmb29iKSA8IDApCisJCQlpZiAoaW5mdGxfcmVhZF9vb2IobXRkLCAodGhpc0VVTiAqIGluZnRsLT5FcmFzZVNpemUpCisJCQkJCSAgICsgKGJsb2NrICogU0VDVE9SU0laRSksIDE2LCAmcmV0bGVuLAorCQkJCQkgICAoY2hhciAqKSZvb2IpIDwgMCkKIAkJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQkJZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgCXN0YXR1cyA9IG9vYi5iLlN0YXR1cyB8IG9vYi5iLlN0YXR1czE7CisJCQkJc3RhdHVzID0gb29iLmIuU3RhdHVzIHwgb29iLmIuU3RhdHVzMTsKIAogCQkJc3dpdGNoKHN0YXR1cykgewogCQkJY2FzZSBTRUNUT1JfRlJFRToKQEAgLTI4MiwyOSArMzQ1LDMxIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0gICAgICAgICAgICAgICAgLyoKKwkJLyoKIAkJICogQ29weSBvbmx5IGluIG5vbiBmcmVlIGJsb2NrIChmcmVlIGJsb2NrcyBjYW4gb25seQogICAgICAgICAgICAgICAgICAqIGhhcHBlbiBpbiBjYXNlIG9mIG1lZGlhIGVycm9ycyBvciBkZWxldGVkIGJsb2NrcykuCiAJCSAqLwotICAgICAgICAgICAgICAgIGlmIChCbG9ja01hcFtibG9ja10gPT0gQkxPQ0tfTklMKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisJCWlmIChCbG9ja01hcFtibG9ja10gPT0gQkxPQ0tfTklMKQorCQkJY29udGludWU7CiAKLSAgICAgICAgICAgICAgICByZXQgPSBNVERfUkVBRChpbmZ0bC0+bWJkLm10ZCwgKGluZnRsLT5FcmFzZVNpemUgKgotCQkJQmxvY2tNYXBbYmxvY2tdKSArIChibG9jayAqIFNFQ1RPUlNJWkUpLCBTRUNUT1JTSVpFLAotCQkJJnJldGxlbiwgbW92ZWJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKLQkJCXJldCA9IE1URF9SRUFEKGluZnRsLT5tYmQubXRkLCAoaW5mdGwtPkVyYXNlU2l6ZSAqCi0JCQkJQmxvY2tNYXBbYmxvY2tdKSArIChibG9jayAqIFNFQ1RPUlNJWkUpLAotCQkJCVNFQ1RPUlNJWkUsICZyZXRsZW4sIG1vdmVidWYpOworCQlyZXQgPSBtdGQtPnJlYWQobXRkLCAoaW5mdGwtPkVyYXNlU2l6ZSAqIEJsb2NrTWFwW2Jsb2NrXSkgKworCQkJCShibG9jayAqIFNFQ1RPUlNJWkUpLCBTRUNUT1JTSVpFLCAmcmV0bGVuLAorCQkJCW1vdmVidWYpOworCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVVQ0xFQU4pIHsKKwkJCXJldCA9IG10ZC0+cmVhZChtdGQsCisJCQkJCShpbmZ0bC0+RXJhc2VTaXplICogQmxvY2tNYXBbYmxvY2tdKSArCisJCQkJCShibG9jayAqIFNFQ1RPUlNJWkUpLCBTRUNUT1JTSVpFLAorCQkJCQkmcmV0bGVuLCBtb3ZlYnVmKTsKIAkJCWlmIChyZXQgIT0gLUVJTykKLSAgICAgICAgICAgICAgICAgICAgICAgIAlERUJVRyhNVERfREVCVUdfTEVWRUwxLCAiSU5GVEw6IGVycm9yIHdlbnQgIgotCQkJCQkiYXdheSBvbiByZXRyeT9cbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1zZXQoJm9vYiwgMHhmZiwgc2l6ZW9mKHN0cnVjdCBpbmZ0bF9vb2IpKTsKLSAgICAgICAgICAgICAgICBvb2IuYi5TdGF0dXMgPSBvb2IuYi5TdGF0dXMxID0gU0VDVE9SX1VTRUQ7Ci0gICAgICAgICAgICAgICAgTVREX1dSSVRFRUNDKGluZnRsLT5tYmQubXRkLCAoaW5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKwotCQkJKGJsb2NrICogU0VDVE9SU0laRSksIFNFQ1RPUlNJWkUsICZyZXRsZW4sCi0JCQltb3ZlYnVmLCAoY2hhciAqKSZvb2IsICZpbmZ0bC0+b29iaW5mbyk7CisJCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwgIklORlRMOiBlcnJvciB3ZW50ICIKKwkJCQkgICAgICAiYXdheSBvbiByZXRyeT9cbiIpOworCQl9CisJCW1lbXNldCgmb29iLCAweGZmLCBzaXplb2Yoc3RydWN0IGluZnRsX29vYikpOworCQlvb2IuYi5TdGF0dXMgPSBvb2IuYi5TdGF0dXMxID0gU0VDVE9SX1VTRUQ7CisKKwkJaW5mdGxfd3JpdGUoaW5mdGwtPm1iZC5tdGQsIChpbmZ0bC0+RXJhc2VTaXplICogdGFyZ2V0RVVOKSArCisJCQkgICAgKGJsb2NrICogU0VDVE9SU0laRSksIFNFQ1RPUlNJWkUsICZyZXRsZW4sCisJCQkgICAgbW92ZWJ1ZiwgKGNoYXIgKikmb29iKTsKIAl9CiAKIAkvKgpAQCAtMzI5LDE3ICszOTQsMTcgQEAKIAkJaWYgKHRoaXNFVU4gPT0gdGFyZ2V0RVVOKQogCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBpZiAoSU5GVExfZm9ybWF0YmxvY2soaW5mdGwsIHRoaXNFVU4pIDwgMCkgeworCQlpZiAoSU5GVExfZm9ybWF0YmxvY2soaW5mdGwsIHRoaXNFVU4pIDwgMCkgewogCQkJLyoKIAkJCSAqIENvdWxkIG5vdCBlcmFzZSA6IG1hcmsgYmxvY2sgYXMgcmVzZXJ2ZWQuCiAJCQkgKi8KIAkJCWluZnRsLT5QVXRhYmxlW3RoaXNFVU5dID0gQkxPQ0tfUkVTRVJWRUQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qIENvcnJlY3RseSBlcmFzZWQgOiBtYXJrIGl0IGFzIGZyZWUgKi8KIAkJCWluZnRsLT5QVXRhYmxlW3RoaXNFVU5dID0gQkxPQ0tfRlJFRTsKIAkJCWluZnRsLT5QVXRhYmxlW3ByZXZFVU5dID0gQkxPQ0tfTklMOwogCQkJaW5mdGwtPm51bWZyZWVFVU5zKys7Ci0gICAgICAgICAgICAgICAgfQorCQl9CiAJfQogCiAJcmV0dXJuIHRhcmdldEVVTjsKQEAgLTQxNSw2ICs0ODAsNyBAQAogCXVuc2lnbmVkIGludCB0aGlzVlVDID0gYmxvY2sgLyAoaW5mdGwtPkVyYXNlU2l6ZSAvIFNFQ1RPUlNJWkUpOwogCXVuc2lnbmVkIGludCB0aGlzRVVOLCB3cml0ZUVVTiwgcHJldl9ibG9jaywgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgYmxvY2tvZnMgPSAoYmxvY2sgKiBTRUNUT1JTSVpFKSAmIChpbmZ0bC0+RXJhc2VTaXplIC0xKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGluZnRsLT5tYmQubXRkOwogCXN0cnVjdCBpbmZ0bF9vb2Igb29iOwogCXN0cnVjdCBpbmZ0bF9iY2kgYmNpOwogCXVuc2lnbmVkIGNoYXIgYW5hYywgbmFjcywgcGFyaXR5OwpAQCAtNDM0LDEwICs1MDAsMTAgQEAKIAkJc2lsbHkgPSBNQVhfTE9PUFM7CiAKIAkJd2hpbGUgKHRoaXNFVU4gPD0gaW5mdGwtPmxhc3RFVU4pIHsKLQkJCU1URF9SRUFET09CKGluZnRsLT5tYmQubXRkLCAodGhpc0VVTiAqIGluZnRsLT5FcmFzZVNpemUpICsKLQkJCQlibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKKwkJCWluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCisJCQkJICAgICAgIGJsb2Nrb2ZzLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CisJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CiAJCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiSU5GVEw6IHN0YXR1cyBvZiBibG9jayAlZCBpbiAiCiAJCQkJIkVVTiAlZCBpcyAleFxuIiwgYmxvY2sgLCB3cml0ZUVVTiwgc3RhdHVzKTsKIApAQCAtNTIyLDggKzU4OCw4IEBACiAJCW5hY3MgPSAwOwogCQl0aGlzRVVOID0gaW5mdGwtPlZVdGFibGVbdGhpc1ZVQ107CiAJCWlmICh0aGlzRVVOICE9IEJMT0NLX05JTCkgewotCQkJTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsIHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplCi0JCQkJKyA4LCA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJCQlpbmZ0bF9yZWFkX29vYihtdGQsIHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplCisJCQkJICAgICAgICsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCQkJYW5hYyA9IG9vYi51LmEuQU5BQyArIDE7CiAJCQluYWNzID0gb29iLnUuYS5OQUNzICsgMTsKIAkJfQpAQCAtNTQ0LDggKzYxMCw4IEBACiAJCW9vYi51LmEucGFyaXR5UGVyRmllbGQgPSBwYXJpdHk7CiAJCW9vYi51LmEuZGlzY2FyZGVkID0gMHhhYTsKIAotCQlNVERfV1JJVEVPT0IoaW5mdGwtPm1iZC5tdGQsIHdyaXRlRVVOICogaW5mdGwtPkVyYXNlU2l6ZSArIDgsIDgsCi0JCQkmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJCWluZnRsX3dyaXRlX29vYihtdGQsIHdyaXRlRVVOICogaW5mdGwtPkVyYXNlU2l6ZSArIDgsIDgsCisJCQkJJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJCS8qIEFsc28gYmFjayB1cCBoZWFkZXIuLi4gKi8KIAkJb29iLnUuYi52aXJ0dWFsVW5pdE5vID0gY3B1X3RvX2xlMTYodGhpc1ZVQyk7CkBAIC01NTUsOCArNjIxLDggQEAKIAkJb29iLnUuYi5wYXJpdHlQZXJGaWVsZCA9IHBhcml0eTsKIAkJb29iLnUuYi5kaXNjYXJkZWQgPSAweGFhOwogCi0JCU1URF9XUklURU9PQihpbmZ0bC0+bWJkLm10ZCwgd3JpdGVFVU4gKiBpbmZ0bC0+RXJhc2VTaXplICsKLQkJCVNFQ1RPUlNJWkUgKiA0ICsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQlpbmZ0bF93cml0ZV9vb2IobXRkLCB3cml0ZUVVTiAqIGluZnRsLT5FcmFzZVNpemUgKworCQkJCVNFQ1RPUlNJWkUgKiA0ICsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJCWluZnRsLT5QVXRhYmxlW3dyaXRlRVVOXSA9IGluZnRsLT5WVXRhYmxlW3RoaXNWVUNdOwogCQlpbmZ0bC0+VlV0YWJsZVt0aGlzVlVDXSA9IHdyaXRlRVVOOwpAQCAtNTc2LDYgKzY0Miw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIElORlRMX3RyeWRlbGV0ZWNoYWluKHN0cnVjdCBJTkZUTHJlY29yZCAqaW5mdGwsIHVuc2lnbmVkIHRoaXNWVUMpCiB7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAl1bnNpZ25lZCBjaGFyIEJsb2NrVXNlZFtNQVhfU0VDVE9SU19QRVJfVU5JVF07CiAJdW5zaWduZWQgY2hhciBCbG9ja0RlbGV0ZWRbTUFYX1NFQ1RPUlNfUEVSX1VOSVRdOwogCXVuc2lnbmVkIGludCB0aGlzRVVOLCBzdGF0dXM7CkBAIC02MDYsOSArNjczLDkgQEAKIAkJCWlmIChCbG9ja1VzZWRbYmxvY2tdIHx8IEJsb2NrRGVsZXRlZFtibG9ja10pCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKQotCQkJICAgICsgKGJsb2NrICogU0VDVE9SU0laRSksIDggLCAmcmV0bGVuLAotCQkJICAgIChjaGFyICopJmJjaSkgPCAwKQorCQkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKQorCQkJCQkgICArIChibG9jayAqIFNFQ1RPUlNJWkUpLCA4ICwgJnJldGxlbiwKKwkJCQkJICAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQkJZWxzZQogCQkJCXN0YXR1cyA9IGJjaS5TdGF0dXMgfCBiY2kuU3RhdHVzMTsKQEAgLTY3MCwxMiArNzM3LDEyIEBACiAJCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJEZWxldGluZyBFVU4gJWQgZnJvbSBWVUMgJWRcbiIsCiAJCSAgICAgIHRoaXNFVU4sIHRoaXNWVUMpOwogCi0gICAgICAgICAgICAgICAgaWYgKElORlRMX2Zvcm1hdGJsb2NrKGluZnRsLCB0aGlzRVVOKSA8IDApIHsKKwkJaWYgKElORlRMX2Zvcm1hdGJsb2NrKGluZnRsLCB0aGlzRVVOKSA8IDApIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZXJhc2UgOiBtYXJrIGJsb2NrIGFzIHJlc2VydmVkLgogCQkJICovCiAJCQlpbmZ0bC0+UFV0YWJsZVt0aGlzRVVOXSA9IEJMT0NLX1JFU0VSVkVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBDb3JyZWN0bHkgZXJhc2VkIDogbWFyayBpdCBhcyBmcmVlICovCiAJCQlpbmZ0bC0+UFV0YWJsZVt0aGlzRVVOXSA9IEJMT0NLX0ZSRUU7CiAJCQlpbmZ0bC0+bnVtZnJlZUVVTnMrKzsKQEAgLTY5Nyw2ICs3NjQsNyBAQAogewogCXVuc2lnbmVkIGludCB0aGlzRVVOID0gaW5mdGwtPlZVdGFibGVbYmxvY2sgLyAoaW5mdGwtPkVyYXNlU2l6ZSAvIFNFQ1RPUlNJWkUpXTsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrb2ZzID0gKGJsb2NrICogU0VDVE9SU0laRSkgJiAoaW5mdGwtPkVyYXNlU2l6ZSAtIDEpOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAlpbnQgc2lsbHkgPSBNQVhfTE9PUFM7CiAJc2l6ZV90IHJldGxlbjsKQEAgLTcwNiw4ICs3NzQsOCBAQAogCQkiYmxvY2s9JWQpXG4iLCBpbmZ0bCwgYmxvY2spOwogCiAJd2hpbGUgKHRoaXNFVU4gPCBpbmZ0bC0+bmJfYmxvY2tzKSB7Ci0JCWlmIChNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCi0JCSAgICBibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCisJCWlmIChpbmZ0bF9yZWFkX29vYihtdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKworCQkJCSAgIGJsb2Nrb2ZzLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCXN0YXR1cyA9IFNFQ1RPUl9JR05PUkU7CiAJCWVsc2UKIAkJCXN0YXR1cyA9IGJjaS5TdGF0dXMgfCBiY2kuU3RhdHVzMTsKQEAgLTc0MSwxMCArODA5LDEwIEBACiAJaWYgKHRoaXNFVU4gIT0gQkxPQ0tfTklMKSB7CiAJCWxvZmZfdCBwdHIgPSAodGhpc0VVTiAqIGluZnRsLT5FcmFzZVNpemUpICsgYmxvY2tvZnM7CiAKLQkJaWYgKE1URF9SRUFET09CKGluZnRsLT5tYmQubXRkLCBwdHIsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQorCQlpZiAoaW5mdGxfcmVhZF9vb2IobXRkLCBwdHIsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQogCQkJcmV0dXJuIC1FSU87CiAJCWJjaS5TdGF0dXMgPSBiY2kuU3RhdHVzMSA9IFNFQ1RPUl9ERUxFVEVEOwotCQlpZiAoTVREX1dSSVRFT09CKGluZnRsLT5tYmQubXRkLCBwdHIsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQorCQlpZiAoaW5mdGxfd3JpdGVfb29iKG10ZCwgcHRyLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQlJTkZUTF90cnlkZWxldGVjaGFpbihpbmZ0bCwgYmxvY2sgLyAoaW5mdGwtPkVyYXNlU2l6ZSAvIFNFQ1RPUlNJWkUpKTsKIAl9CkBAIC03ODQsOSArODUyLDEwIEBACiAKIAkJbWVtc2V0KCZvb2IsIDB4ZmYsIHNpemVvZihzdHJ1Y3QgaW5mdGxfb29iKSk7CiAJCW9vYi5iLlN0YXR1cyA9IG9vYi5iLlN0YXR1czEgPSBTRUNUT1JfVVNFRDsKLQkJTVREX1dSSVRFRUNDKGluZnRsLT5tYmQubXRkLCAod3JpdGVFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCi0JCQlibG9ja29mcywgU0VDVE9SU0laRSwgJnJldGxlbiwgKGNoYXIgKilidWZmZXIsCi0JCQkoY2hhciAqKSZvb2IsICZpbmZ0bC0+b29iaW5mbyk7CisKKwkJaW5mdGxfd3JpdGUoaW5mdGwtPm1iZC5tdGQsICh3cml0ZUVVTiAqIGluZnRsLT5FcmFzZVNpemUpICsKKwkJCSAgICBibG9ja29mcywgU0VDVE9SU0laRSwgJnJldGxlbiwgKGNoYXIgKilidWZmZXIsCisJCQkgICAgKGNoYXIgKikmb29iKTsKIAkJLyoKIAkJICogbmVlZCB0byB3cml0ZSBTRUNUT1JfVVNFRCBmbGFncyBzaW5jZSB0aGV5IGFyZSBub3Qgd3JpdHRlbgogCQkgKiBpbiBtdGRfd3JpdGVlY2MKQEAgLTgwNCwxNyArODczLDE4IEBACiAJc3RydWN0IElORlRMcmVjb3JkICppbmZ0bCA9ICh2b2lkICopbWJkOwogCXVuc2lnbmVkIGludCB0aGlzRVVOID0gaW5mdGwtPlZVdGFibGVbYmxvY2sgLyAoaW5mdGwtPkVyYXNlU2l6ZSAvIFNFQ1RPUlNJWkUpXTsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrb2ZzID0gKGJsb2NrICogU0VDVE9SU0laRSkgJiAoaW5mdGwtPkVyYXNlU2l6ZSAtIDEpOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKIAlpbnQgc2lsbHkgPSBNQVhfTE9PUFM7Ci0gICAgICAgIHN0cnVjdCBpbmZ0bF9iY2kgYmNpOworCXN0cnVjdCBpbmZ0bF9iY2kgYmNpOwogCXNpemVfdCByZXRsZW47CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiSU5GVEw6IGluZnRsX3JlYWRibG9jayhpbmZ0bD0lcCxibG9jaz0lbGQsIgogCQkiYnVmZmVyPSVwKVxuIiwgaW5mdGwsIGJsb2NrLCBidWZmZXIpOwogCiAJd2hpbGUgKHRoaXNFVU4gPCBpbmZ0bC0+bmJfYmxvY2tzKSB7Ci0JCWlmIChNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCi0JCSAgICAgYmxvY2tvZnMsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQorCQlpZiAoaW5mdGxfcmVhZF9vb2IobXRkLCAodGhpc0VVTiAqIGluZnRsLT5FcmFzZVNpemUpICsKKwkJCQkgIGJsb2Nrb2ZzLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCXN0YXR1cyA9IFNFQ1RPUl9JR05PUkU7CiAJCWVsc2UKIAkJCXN0YXR1cyA9IGJjaS5TdGF0dXMgfCBiY2kuU3RhdHVzMTsKQEAgLTg1MCwxMCArOTIwLDEyIEBACiAJCS8qIFRoZSByZXF1ZXN0ZWQgYmxvY2sgaXMgbm90IG9uIHRoZSBtZWRpYSwgcmV0dXJuIGFsbCAweDAwICovCiAJCW1lbXNldChidWZmZXIsIDAsIFNFQ1RPUlNJWkUpOwogCX0gZWxzZSB7Ci0gICAgICAgIAlzaXplX3QgcmV0bGVuOworCQlzaXplX3QgcmV0bGVuOwogCQlsb2ZmX3QgcHRyID0gKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzOwotCQlpZiAoTVREX1JFQUQoaW5mdGwtPm1iZC5tdGQsIHB0ciwgU0VDVE9SU0laRSwgJnJldGxlbiwKLQkJICAgIGJ1ZmZlcikpCisJCWludCByZXQgPSBtdGQtPnJlYWQobXRkLCBwdHIsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIGJ1ZmZlcik7CisKKwkJLyogSGFuZGxlIGNvcnJlY3RlZCBiaXQgZmxpcHMgZ3JhY2VmdWxseSAqLworCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVVQ0xFQU4pCiAJCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9pbmZ0bG1vdW50LmMgYi9kcml2ZXJzL210ZC9pbmZ0bG1vdW50LmMKaW5kZXggNDNmZGM5NC4uOGY2MDA2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvaW5mdGxtb3VudC5jCisrKyBiL2RyaXZlcnMvbXRkL2luZnRsbW91bnQuYwpAQCAtNDMsNiArNDMsMTEgQEAKIAogY2hhciBpbmZ0bG1vdW50cmV2W109IiRSZXZpc2lvbjogMS4xOCAkIjsKIAorZXh0ZXJuIGludCBpbmZ0bF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCQkgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpOworZXh0ZXJuIGludCBpbmZ0bF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkJICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1Zik7CisKIC8qCiAgKiBmaW5kX2Jvb3RfcmVjb3JkOiBGaW5kIHRoZSBJTkZUTCBNZWRpYSBIZWFkZXIgYW5kIGl0cyBTcGFyZSBjb3B5IHdoaWNoCiAgKgljb250YWlucyB0aGUgdmFyaW91cyBkZXZpY2UgaW5mb3JtYXRpb24gb2YgdGhlIElORlRMIHBhcnRpdGlvbiBhbmQKQEAgLTU3LDYgKzYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaSwgYmxvY2s7CiAJdTggYnVmW1NFQ1RPUlNJWkVdOwogCXN0cnVjdCBJTkZUTE1lZGlhSGVhZGVyICptaCA9ICZpbmZ0bC0+TWVkaWFIZHI7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAlzdHJ1Y3QgSU5GVExQYXJ0aXRpb24gKmlwOwogCXNpemVfdCByZXRsZW47CiAKQEAgLTgwLDggKzg2LDggQEAKIAkJICogQ2hlY2sgZm9yIEJOQU5EIGhlYWRlciBmaXJzdC4gVGhlbiB3aGluZ2UgaWYgaXQncyBmb3VuZAogCQkgKiBidXQgbGF0ZXIgY2hlY2tzIGZhaWwuCiAJCSAqLwotCQlyZXQgPSBNVERfUkVBRChpbmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBpbmZ0bC0+RXJhc2VTaXplLAotCQkgICAgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKTsKKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgYmxvY2sgKiBpbmZ0bC0+RXJhc2VTaXplLAorCQkJCVNFQ1RPUlNJWkUsICZyZXRsZW4sIGJ1Zik7CiAJCS8qIFdlIGlnbm9yZSByZXQgaW4gY2FzZSB0aGUgRUNDIG9mIHRoZSBNZWRpYUhlYWRlciBpcyBpbnZhbGlkCiAJCSAgICh3aGljaCBpcyBhcHBhcmVudGx5IGFjY2VwdGFibGUpICovCiAJCWlmIChyZXRsZW4gIT0gU0VDVE9SU0laRSkgewpAQCAtMTA2LDggKzExMiw5IEBACiAJCX0KIAogCQkvKiBUbyBiZSBzYWZlciB3aXRoIEJJT1MsIGFsc28gdXNlIGVyYXNlIG1hcmsgYXMgZGlzY3JpbWluYW50ICovCi0JCWlmICgocmV0ID0gTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSArCi0JCSAgICBTRUNUT1JTSVpFICsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkpIHsKKwkJaWYgKChyZXQgPSBpbmZ0bF9yZWFkX29vYihtdGQsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSArCisJCQkJCSAgU0VDVE9SU0laRSArIDgsIDgsICZyZXRsZW4sCisJCQkJCSAgKGNoYXIgKikmaDEpIDwgMCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklORlRMOiBBTkFORCBoZWFkZXIgZm91bmQgYXQgIgogCQkJCSIweCV4IGluIG10ZCVkLCBidXQgT09CIGRhdGEgcmVhZCBmYWlsZWQgIgogCQkJCSIoZXJyICVkKVxuIiwgYmxvY2sgKiBpbmZ0bC0+RXJhc2VTaXplLApAQCAtMTIzLDggKzEzMCw4IEBACiAJCW1lbWNweShtaCwgYnVmLCBzaXplb2Yoc3RydWN0IElORlRMTWVkaWFIZWFkZXIpKTsKIAogCQkvKiBSZWFkIHRoZSBzcGFyZSBtZWRpYSBoZWFkZXIgYXQgb2Zmc2V0IDQwOTYgKi8KLQkJTVREX1JFQUQoaW5mdGwtPm1iZC5tdGQsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSArIDQwOTYsCi0JCSAgICBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYpOworCQltdGQtPnJlYWQobXRkLCBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKyA0MDk2LAorCQkJICBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYpOwogCQlpZiAocmV0bGVuICE9IFNFQ1RPUlNJWkUpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklORlRMOiBVbmFibGUgdG8gcmVhZCBzcGFyZSAiCiAJCQkgICAgICAgIk1lZGlhIEhlYWRlclxuIik7CkBAIC0yMzMsNyArMjQwLDcgQEAKIAkJCQkgKi8KIAkJCQlpbnN0ci0+YWRkciA9IGlwLT5SZXNlcnZlZDAgKiBpbmZ0bC0+RXJhc2VTaXplOwogCQkJCWluc3RyLT5sZW4gPSBpbmZ0bC0+RXJhc2VTaXplOwotCQkJCU1URF9FUkFTRShpbmZ0bC0+bWJkLm10ZCwgaW5zdHIpOworCQkJCW10ZC0+ZXJhc2UobXRkLCBpbnN0cik7CiAJCQl9CiAJCQlpZiAoKGlwLT5sYXN0VW5pdCAtIGlwLT5maXJzdFVuaXQgKyAxKSA8IGlwLT52aXJ0dWFsVW5pdHMpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogTWVkaWEgSGVhZGVyICIKQEAgLTM1MCwyMSArMzU3LDIxIEBACiAJaW50IGxlbiwgaW50IGNoZWNrX29vYikKIHsKIAl1OCBidWZbU0VDVE9SU0laRSArIGluZnRsLT5tYmQubXRkLT5vb2JzaXplXTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGluZnRsLT5tYmQubXRkOwogCXNpemVfdCByZXRsZW47CiAJaW50IGk7CiAKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiSU5GVEw6IGNoZWNrX2ZyZWVfc2VjdG9ycyhpbmZ0bD0lcCwiCi0JCSJhZGRyZXNzPTB4JXgsbGVuPSVkLGNoZWNrX29vYj0lZClcbiIsIGluZnRsLAotCQlhZGRyZXNzLCBsZW4sIGNoZWNrX29vYik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IFNFQ1RPUlNJWkUpIHsKLQkJaWYgKE1URF9SRUFERUNDKGluZnRsLT5tYmQubXRkLCBhZGRyZXNzLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYsICZidWZbU0VDVE9SU0laRV0sICZpbmZ0bC0+b29iaW5mbykgPCAwKQorCQlpZiAobXRkLT5yZWFkKG10ZCwgYWRkcmVzcywgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKSkKIAkJCXJldHVybiAtMTsKIAkJaWYgKG1lbWNtcGIoYnVmLCAweGZmLCBTRUNUT1JTSVpFKSAhPSAwKQogCQkJcmV0dXJuIC0xOwogCiAJCWlmIChjaGVja19vb2IpIHsKLQkJCWlmIChtZW1jbXBiKGJ1ZiArIFNFQ1RPUlNJWkUsIDB4ZmYsIGluZnRsLT5tYmQubXRkLT5vb2JzaXplKSAhPSAwKQorCQkJaWYoaW5mdGxfcmVhZF9vb2IobXRkLCBhZGRyZXNzLCBtdGQtPm9vYnNpemUsCisJCQkJCSAgJnJldGxlbiwgJmJ1ZltTRUNUT1JTSVpFXSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChtZW1jbXBiKGJ1ZiArIFNFQ1RPUlNJWkUsIDB4ZmYsIG10ZC0+b29ic2l6ZSkgIT0gMCkKIAkJCQlyZXR1cm4gLTE7CiAJCX0KIAkJYWRkcmVzcyArPSBTRUNUT1JTSVpFOwpAQCAtMzg3LDYgKzM5NCw3IEBACiAJc2l6ZV90IHJldGxlbjsKIAlzdHJ1Y3QgaW5mdGxfdW5pdHRhaWwgdWNpOwogCXN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciA9ICZpbmZ0bC0+aW5zdHI7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAlpbnQgcGh5c2Jsb2NrOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIklORlRMOiBJTkZUTF9mb3JtYXRibG9jayhpbmZ0bD0lcCwiCkBAIC00MDQsOCArNDEyLDkgQEAKIAkvKiBFcmFzZSBvbmUgcGh5c2ljYWwgZXJhc2VibG9jayBhdCBhIHRpbWUsIGV2ZW4gdGhvdWdoIHRoZSBOQU5EIGFwaQogCSAgIGFsbG93cyB1cyB0byBncm91cCB0aGVtLiAgVGhpcyB3YXkgd2UgaWYgd2UgaGF2ZSBhIGZhaWx1cmUsIHdlIGNhbgogCSAgIG1hcmsgb25seSB0aGUgZmFpbGVkIGJsb2NrIGluIHRoZSBiYnQuICovCi0JZm9yIChwaHlzYmxvY2sgPSAwOyBwaHlzYmxvY2sgPCBpbmZ0bC0+RXJhc2VTaXplOyBwaHlzYmxvY2sgKz0gaW5zdHItPmxlbiwgaW5zdHItPmFkZHIgKz0gaW5zdHItPmxlbikgewotCQlNVERfRVJBU0UoaW5mdGwtPm1iZC5tdGQsIGluc3RyKTsKKwlmb3IgKHBoeXNibG9jayA9IDA7IHBoeXNibG9jayA8IGluZnRsLT5FcmFzZVNpemU7CisJICAgICBwaHlzYmxvY2sgKz0gaW5zdHItPmxlbiwgaW5zdHItPmFkZHIgKz0gaW5zdHItPmxlbikgeworCQltdGQtPmVyYXNlKGluZnRsLT5tYmQubXRkLCBpbnN0cik7CiAKIAkJaWYgKGluc3RyLT5zdGF0ZSA9PSBNVERfRVJBU0VfRkFJTEVEKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogZXJyb3Igd2hpbGUgZm9ybWF0dGluZyBibG9jayAlZFxuIiwKQEAgLTQxNCwxMCArNDIzLDEwIEBACiAJCX0KIAogCQkvKgotCSAJKiBDaGVjayB0aGUgImZyZWVuZXNzIiBvZiBFcmFzZSBVbml0IGJlZm9yZSB1cGRhdGluZyBtZXRhZGF0YS4KLQkgCSogRml4TWU6IGlzIHRoaXMgY2hlY2sgcmVhbGx5IG5lY2Vzc2FyeT8gU2luY2Ugd2UgaGF2ZSBjaGVjayB0aGUKLQkgCSogICAgICAgIHJldHVybiBjb2RlIGFmdGVyIHRoZSBlcmFzZSBvcGVyYXRpb24uCi0JIAkqLworCQkgKiBDaGVjayB0aGUgImZyZWVuZXNzIiBvZiBFcmFzZSBVbml0IGJlZm9yZSB1cGRhdGluZyBtZXRhZGF0YS4KKwkJICogRml4TWU6IGlzIHRoaXMgY2hlY2sgcmVhbGx5IG5lY2Vzc2FyeT8gU2luY2Ugd2UgaGF2ZSBjaGVjaworCQkgKiB0aGUgcmV0dXJuIGNvZGUgYWZ0ZXIgdGhlIGVyYXNlIG9wZXJhdGlvbi4KKwkJICovCiAJCWlmIChjaGVja19mcmVlX3NlY3RvcnMoaW5mdGwsIGluc3RyLT5hZGRyLCBpbnN0ci0+bGVuLCAxKSAhPSAwKQogCQkJZ290byBmYWlsOwogCX0KQEAgLTQyOSw4ICs0MzgsNyBAQAogCXVjaS5SZXNlcnZlZFsyXSA9IDA7CiAJdWNpLlJlc2VydmVkWzNdID0gMDsKIAlpbnN0ci0+YWRkciA9IGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKiAyOwotCWlmIChNVERfV1JJVEVPT0IoaW5mdGwtPm1iZC5tdGQsIGluc3RyLT5hZGRyICsKLQkgICAgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmdWNpKSA8IDApCisJaWYgKGluZnRsX3dyaXRlX29vYihtdGQsIGluc3RyLT5hZGRyICsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmdWNpKSA8IDApCiAJCWdvdG8gZmFpbDsKIAlyZXR1cm4gMDsKIGZhaWw6CkBAIC01NDksNiArNTU3LDcgQEAKIAogaW50IElORlRMX21vdW50KHN0cnVjdCBJTkZUTHJlY29yZCAqcykKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IHMtPm1iZC5tdGQ7CiAJdW5zaWduZWQgaW50IGJsb2NrLCBmaXJzdF9ibG9jaywgcHJldl9ibG9jaywgbGFzdF9ibG9jazsKIAl1bnNpZ25lZCBpbnQgZmlyc3RfbG9naWNhbF9ibG9jaywgbG9naWNhbF9ibG9jaywgZXJhc2VfbWFyazsKIAlpbnQgY2hhaW5fbGVuZ3RoLCBkb19mb3JtYXRfY2hhaW47CkBAIC02MDcsMTAgKzYxNiwxMSBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoTVREX1JFQURPT0Iocy0+bWJkLm10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKyA4LAotCQkJICAgIDgsICZyZXRsZW4sIChjaGFyICopJmgwKSA8IDAgfHwKLQkJCSAgICBNVERfUkVBRE9PQihzLT5tYmQubXRkLCBibG9jayAqIHMtPkVyYXNlU2l6ZSArCi0JCQkgICAgMiAqIFNFQ1RPUlNJWkUgKyA4LCA4LCAmcmV0bGVuLCAoY2hhciAqKSZoMSkgPCAwKSB7CisJCQlpZiAoaW5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIHMtPkVyYXNlU2l6ZSArIDgsCisJCQkJCSAgIDgsICZyZXRsZW4sIChjaGFyICopJmgwKSA8IDAgfHwKKwkJCSAgICBpbmZ0bF9yZWFkX29vYihtdGQsIGJsb2NrICogcy0+RXJhc2VTaXplICsKKwkJCQkJICAgMiAqIFNFQ1RPUlNJWkUgKyA4LCA4LCAmcmV0bGVuLAorCQkJCQkgICAoY2hhciAqKSZoMSkgPCAwKSB7CiAJCQkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbj8gKi8KIAkJCQlkb19mb3JtYXRfY2hhaW4rKzsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCA3YWJkN2ZlLi42YmRhYWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0zNyw3ICszNyw3IEBACiBjb25maWcgTVREX1BIWVNNQVBfTEVOCiAJaGV4ICJQaHlzaWNhbCBsZW5ndGggb2YgZmxhc2ggbWFwcGluZyIKIAlkZXBlbmRzIG9uIE1URF9QSFlTTUFQCi0JZGVmYXVsdCAiMHg0MDAwMDAwIgorCWRlZmF1bHQgIjAiCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBtYXBwaW5nIG9mIHRoZSBmbGFzaCBjaGlwcyBvbgogCSAgeW91ciBwYXJ0aWN1bGFyIGJvYXJkLiBJZiB0aGVyZSBpcyBzcGFjZSwgb3IgYWxpYXNlcywgaW4gdGhlCkBAIC03OCw3ICs3OCw3IEBACiAKIGNvbmZpZyBNVERfU0M1MjBDRFAKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gQU1EIFNDNTIwIENEUCIKLQlkZXBlbmRzIG9uIFg4NiAmJiBNVERfQ0ZJCisJZGVwZW5kcyBvbiBYODYgJiYgTVREX0NGSSAmJiBNVERfQ09OQ0FUCiAJaGVscAogCSAgVGhlIFNDNTIwIENEUCBib2FyZCBoYXMgdHdvIGJhbmtzIG9mIENGSS1jb21wbGlhbnQgY2hpcHMgYW5kIG9uZQogCSAgRHVhbC1pbi1saW5lIEpFREVDIGNoaXAuIFRoaXMgJ21hcHBpbmcnIGRyaXZlciBzdXBwb3J0cyB0aGF0CkBAIC0xMDksNyArMTA5LDcgQEAKIAkgIG10ZDEgYWxsb3dzIHlvdSB0byByZXByb2dyYW0geW91ciBCSU9TLiBCRSBWRVJZIENBUkVGVUwuCiAKIAkgIE5vdGUgdGhhdCBqdW1wZXIgMyAoIldyaXRlIEVuYWJsZSBEcml2ZSBBIikgbXVzdCBiZSBzZXQKLQkgIG90aGVyd2lzZSBkZXRlY3Rpb24gd29uJ3Qgc3VjY2VlZWQuCisJICBvdGhlcndpc2UgZGV0ZWN0aW9uIHdvbid0IHN1Y2NlZWQuCiAKIGNvbmZpZyBNVERfU0JDX0dYWAogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBBcmNvbSBTQkMtR1h4IGJvYXJkcyIKQEAgLTIwMCw4ICsyMDAsOCBAQAogCSAgU3VwcG9ydCBmb3IgdGhlIGZsYXNoIGNoaXAgb24gVHN1bmFtaSBUSUcgYnVzLgogCiBjb25maWcgTVREX0xBU0FUCi0JdHJpc3RhdGUgIkZsYXNoIGNoaXBzIG9uIExBU0FUIGJvYXJkIgotCWRlcGVuZHMgb24gTEFTQVQKKwl0cmlzdGF0ZSAiTEFTQVQgZmxhc2ggZGV2aWNlIgorCWRlcGVuZHMgb24gTEFTQVQgJiYgTVREX0NGSQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgTGFzYXQgMTAwIGFuZCAyMDAgYm9hcmRzLgogCkBAIC01NjEsNyArNTYxLDYgQEAKIGNvbmZpZyBNVERfUENNQ0lBX0FOT05ZTU9VUwogCWJvb2wgIlVzZSBQQ01DSUEgTVREIGRyaXZlcnMgZm9yIGFub255bW91cyBQQ01DSUEgY2FyZHMiCiAJZGVwZW5kcyBvbiBNVERfUENNQ0lBCi0JZGVmYXVsdCBOCiAJaGVscAogCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgUENNQ0lBIGNhcmRzIHdoaWNoIGRvIG5vdCByZXBvcnQKIAkgIGFueXRoaW5nIGFib3V0IHRoZW1zZWx2ZXMgYXJlIGFzc3VtZWQgdG8gYmUgTVREIGNhcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jCmluZGV4IGZkMGYwZDMuLjkyYjVkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCCpIDIwMDEgRmxhZ2EgaGYuIE1lZGljYWwgRGV2aWNlcywgS+FyaSBEYXbt8HNzb24gPGtkQGZsYWdhLmlzPgorICogIENvcHlyaWdodCDCqSAyMDAxIEZsYWdhIGhmLiBNZWRpY2FsIERldmljZXMsIEvDoXJpIERhdsOtw7Bzc29uIDxrZEBmbGFnYS5pcz4KICAqCiAgKiAgJElkOiBjZmlfZmxhZ2FkbS5jLHYgMS4xNSAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCiAgKgpAQCAtMTM1LDUgKzEzNSw1IEBACiAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiS+FyaSBEYXbt8HNzb24gPGtkQGZsYWdhLmlzPiIpOworTU9EVUxFX0FVVEhPUigiS8OhcmkgRGF2w63DsHNzb24gPGtkQGZsYWdhLmlzPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgRmxhZ2EgZGlnaXRhbCBtb2R1bGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYwppbmRleCA2NTI4MTNjLi44NWMyYTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9kYm94Mi1mbGFzaC5jCkBAIC0xMjIsNSArMTIyLDUgQEAKIAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJL4XJpIERhdu3wc3NvbiA8a2RAZmxhZ2EuaXM+LCBCYXN0aWFuIEJsYW5rIDx3YWxkaUB0dXhib3gub3JnPiwgQWxleGFuZGVyIFdpbGQgPHdpbGRAdGUtZWxla3Ryb25pay5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJLw6FyaSBEYXbDrcOwc3NvbiA8a2RAZmxhZ2EuaXM+LCBCYXN0aWFuIEJsYW5rIDx3YWxkaUB0dXhib3gub3JnPiwgQWxleGFuZGVyIFdpbGQgPHdpbGRAdGUtZWxla3Ryb25pay5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgZHJpdmVyIGZvciBELUJveCAyIGJvYXJkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMKaW5kZXggZDFlNjZlMS4uNWMyNWQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9tdHgtMV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvbXR4LTFfZmxhc2guYwpAQCAtNCw3ICs0LDcgQEAKICAqICRJZDogbXR4LTFfZmxhc2guYyx2IDEuMiAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogKEMpIDIwMDUgQnJ1bm8gUmFuZG9sZiA8YnJ1bm8ucmFuZG9sZkA0Zy1zeXN0ZW1zLmJpej4KLSAqIChDKSAyMDA1IEr2cm4gRW5nZWwgPGpvZXJuQHdvaG5oZWltLmZoLXdlZGVsLmRlPgorICogKEMpIDIwMDUgSsO2cm4gRW5nZWwgPGpvZXJuQHdvaG5oZWltLmZoLXdlZGVsLmRlPgogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jIGIvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYwppbmRleCA1NGEzMTAyLi4wOTk0YjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9jZmkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4OCw3ICsxOTAsNyBAQAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlhZGRfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CiAKLQkJcmV0ID0gTVREX0VSQVNFKG10ZCwgJm5ldHRlbF9lcmFzZSk7CisJCXJldCA9IG10ZC0+ZXJhc2UobXRkLCAmbmV0dGVsX2VyYXNlKTsKIAkJaWYgKHJldCkgewogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJCXJlbW92ZV93YWl0X3F1ZXVlKCZ3YWl0X3EsICZ3YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCmluZGV4IGQyN2Y0MTIuLmM4NjExMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwpAQCAtNzEzLDYgKzcxMyw3IEBACiAKIAlpZihkZXYtPm10ZF9pbmZvKSB7CiAJCWRlbF9tdGRfZGV2aWNlKGRldi0+bXRkX2luZm8pOworCQltYXBfZGVzdHJveShkZXYtPm10ZF9pbmZvKTsKIAkJaW5mbygibXRkJWQ6IFJlbW92ZWQiLCBkZXYtPm10ZF9pbmZvLT5pbmRleCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCmluZGV4IGY0OWViYzMuLjQzM2MzY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCkBAIC0xNCwxMTMgKzE0LDIzMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm15bXRkOwotCi1zdHJ1Y3QgbWFwX2luZm8gcGh5c21hcF9tYXAgPSB7Ci0JLm5hbWUgPSAicGh5c19tYXBwZWRfZmxhc2giLAotCS5waHlzID0gQ09ORklHX01URF9QSFlTTUFQX1NUQVJULAotCS5zaXplID0gQ09ORklHX01URF9QSFlTTUFQX0xFTiwKLQkuYmFua3dpZHRoID0gQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSCwKK3N0cnVjdCBwaHlzbWFwX2ZsYXNoX2luZm8geworCXN0cnVjdCBtdGRfaW5mbwkJKm10ZDsKKwlzdHJ1Y3QgbWFwX2luZm8JCW1hcDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJaW50CQkJbnJfcGFydHM7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOworI2VuZGlmCiB9OwogCi0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKm10ZF9wYXJ0czsKLXN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgbXRkX3BhcnRzX25iOwogCi1zdGF0aWMgaW50IG51bV9waHlzbWFwX3BhcnRpdGlvbnM7Ci1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBoeXNtYXBfcGFydGl0aW9uczsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gX19pbml0ZGF0YSA9IHsiY21kbGluZXBhcnQiLCAiUmVkQm9vdCIsIE5VTEx9OwotCi12b2lkIHBoeXNtYXBfc2V0X3BhcnRpdGlvbnMoc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLCBpbnQgbnVtX3BhcnRzKQorc3RhdGljIGludCBwaHlzbWFwX2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcGh5c21hcF9wYXJ0aXRpb25zPXBhcnRzOwotCW51bV9waHlzbWFwX3BhcnRpdGlvbnM9bnVtX3BhcnRzOwotfQotI2VuZGlmIC8qIENPTkZJR19NVERfUEFSVElUSU9OUyAqLworCXN0cnVjdCBwaHlzbWFwX2ZsYXNoX2luZm8gKmluZm87CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSAqcGh5c21hcF9kYXRhOwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3BoeXNtYXAodm9pZCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqcm9tX3Byb2JlX3R5cGVzW10gPSB7ICJjZmlfcHJvYmUiLCAiamVkZWNfcHJvYmUiLCAibWFwX3JvbSIsIE5VTEwgfTsKLQljb25zdCBjaGFyICoqdHlwZTsKKwlpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCi0gICAgICAgCXByaW50ayhLRVJOX05PVElDRSAicGh5c21hcCBmbGFzaCBkZXZpY2U6ICVseCBhdCAlbHhcbiIsIHBoeXNtYXBfbWFwLnNpemUsIHBoeXNtYXBfbWFwLnBoeXMpOwotCXBoeXNtYXBfbWFwLnZpcnQgPSBpb3JlbWFwKHBoeXNtYXBfbWFwLnBoeXMsIHBoeXNtYXBfbWFwLnNpemUpOworCXBoeXNtYXBfZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAoIXBoeXNtYXBfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmcGh5c21hcF9tYXApOwotCi0JbXltdGQgPSBOVUxMOwotCXR5cGUgPSByb21fcHJvYmVfdHlwZXM7Ci0JZm9yKDsgIW15bXRkICYmICp0eXBlOyB0eXBlKyspIHsKLQkJbXltdGQgPSBkb19tYXBfcHJvYmUoKnR5cGUsICZwaHlzbWFwX21hcCk7Ci0JfQotCWlmIChteW10ZCkgewotCQlteW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQorCWlmIChpbmZvLT5tdGQgIT0gTlVMTCkgewogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotCQltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydF9wcm9iZXMsCi0JCQkJCQkgICAgJm10ZF9wYXJ0cywgMCk7Ci0KLQkJaWYgKG10ZF9wYXJ0c19uYiA+IDApCi0JCXsKLQkJCWFkZF9tdGRfcGFydGl0aW9ucyAobXltdGQsIG10ZF9wYXJ0cywgbXRkX3BhcnRzX25iKTsKLQkJCXJldHVybiAwOworCQlpZiAoaW5mby0+bnJfcGFydHMpIHsKKwkJCWRlbF9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQpOworCQkJa2ZyZWUoaW5mby0+cGFydHMpOworCQl9IGVsc2UgaWYgKHBoeXNtYXBfZGF0YS0+bnJfcGFydHMpIHsKKwkJCWRlbF9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQpOworCQl9IGVsc2UgeworCQkJZGVsX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKIAkJfQotCi0JCWlmIChudW1fcGh5c21hcF9wYXJ0aXRpb25zICE9IDApCi0JCXsKLQkJCXByaW50ayhLRVJOX05PVElDRQotCQkJICAgICAgICJVc2luZyBwaHlzbWFwIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iKTsKLQkJCWFkZF9tdGRfcGFydGl0aW9ucyAobXltdGQsIHBoeXNtYXBfcGFydGl0aW9ucywgbnVtX3BoeXNtYXBfcGFydGl0aW9ucyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCisjZWxzZQorCQlkZWxfbXRkX2RldmljZShpbmZvLT5tdGQpOwogI2VuZGlmCi0JCWFkZF9tdGRfZGV2aWNlKG15bXRkKTsKKwkJbWFwX2Rlc3Ryb3koaW5mby0+bXRkKTsKKwl9CiAKKwlpZiAoaW5mby0+bWFwLnZpcnQgIT0gTlVMTCkKKwkJaW91bm1hcCgodm9pZCAqKWluZm8tPm1hcC52aXJ0KTsKKworCWlmIChpbmZvLT5yZXMgIT0gTlVMTCkgeworCQlyZWxlYXNlX3Jlc291cmNlKGluZm8tPnJlcyk7CisJCWtmcmVlKGluZm8tPnJlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyb21fcHJvYmVfdHlwZXNbXSA9IHsgImNmaV9wcm9iZSIsICJqZWRlY19wcm9iZSIsICJtYXBfcm9tIiwgTlVMTCB9OworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVfdHlwZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgIlJlZEJvb3QiLCBOVUxMIH07CisjZW5kaWYKKworc3RhdGljIGludCBwaHlzbWFwX2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhICpwaHlzbWFwX2RhdGE7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfaW5mbyAqaW5mbzsKKwljb25zdCBjaGFyICoqcHJvYmVfdHlwZTsKKwlpbnQgZXJyOworCisJcGh5c21hcF9kYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGh5c21hcF9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisgICAgICAgCXByaW50ayhLRVJOX05PVElDRSAicGh5c21hcCBwbGF0Zm9ybSBmbGFzaCBkZXZpY2U6ICUuOGxseCBhdCAlLjhsbHhcbiIsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5yZXNvdXJjZS0+ZW5kIC0gZGV2LT5yZXNvdXJjZS0+c3RhcnQgKyAxLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzb3VyY2UtPnN0YXJ0KTsKKworCWluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8gPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlpbmZvLT5yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24oZGV2LT5yZXNvdXJjZS0+c3RhcnQsCisJCQlkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDEsCisJCQlkZXYtPmRldi5idXNfaWQpOworCWlmIChpbmZvLT5yZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNvdWxkIG5vdCByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaW5mby0+bWFwLm5hbWUgPSBkZXYtPmRldi5idXNfaWQ7CisJaW5mby0+bWFwLnBoeXMgPSBkZXYtPnJlc291cmNlLT5zdGFydDsKKwlpbmZvLT5tYXAuc2l6ZSA9IGRldi0+cmVzb3VyY2UtPmVuZCAtIGRldi0+cmVzb3VyY2UtPnN0YXJ0ICsgMTsKKwlpbmZvLT5tYXAuYmFua3dpZHRoID0gcGh5c21hcF9kYXRhLT53aWR0aDsKKwlpbmZvLT5tYXAuc2V0X3ZwcCA9IHBoeXNtYXBfZGF0YS0+c2V0X3ZwcDsKKworCWluZm8tPm1hcC52aXJ0ID0gaW9yZW1hcChpbmZvLT5tYXAucGh5cywgaW5mby0+bWFwLnNpemUpOworCWlmIChpbmZvLT5tYXAudmlydCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2ggcmVnaW9uXG4iKTsKKwkJZXJyID0gRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJc2ltcGxlX21hcF9pbml0KCZpbmZvLT5tYXApOworCisJcHJvYmVfdHlwZSA9IHJvbV9wcm9iZV90eXBlczsKKwlmb3IgKDsgaW5mby0+bXRkID09IE5VTEwgJiYgKnByb2JlX3R5cGUgIT0gTlVMTDsgcHJvYmVfdHlwZSsrKQorCQlpbmZvLT5tdGQgPSBkb19tYXBfcHJvYmUoKnByb2JlX3R5cGUsICZpbmZvLT5tYXApOworCWlmIChpbmZvLT5tdGQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1hcF9wcm9iZSBmYWlsZWRcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisJaW5mby0+bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJZXJyID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwYXJ0X3Byb2JlX3R5cGVzLCAmaW5mby0+cGFydHMsIDApOworCWlmIChlcnIgPiAwKSB7CisJCWFkZF9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQsIGluZm8tPnBhcnRzLCBlcnIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpb3VubWFwKHBoeXNtYXBfbWFwLnZpcnQpOwotCXJldHVybiAtRU5YSU87Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3BoeXNtYXAodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKLQlpZiAobXRkX3BhcnRzX25iKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhteW10ZCk7Ci0JCWtmcmVlKG10ZF9wYXJ0cyk7Ci0JfSBlbHNlIGlmIChudW1fcGh5c21hcF9wYXJ0aXRpb25zKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhteW10ZCk7Ci0JfSBlbHNlIHsKLQkJZGVsX210ZF9kZXZpY2UobXltdGQpOworCWlmIChwaHlzbWFwX2RhdGEtPm5yX3BhcnRzKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiVXNpbmcgcGh5c21hcCBwYXJ0aXRpb24gaW5mb3JtYXRpb25cbiIpOworCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwaHlzbWFwX2RhdGEtPnBhcnRzLAorCQkJCQkJcGh5c21hcF9kYXRhLT5ucl9wYXJ0cyk7CisJCXJldHVybiAwOwogCX0KLSNlbHNlCi0JZGVsX210ZF9kZXZpY2UobXltdGQpOwogI2VuZGlmCi0JbWFwX2Rlc3Ryb3kobXltdGQpOwogCi0JaW91bm1hcChwaHlzbWFwX21hcC52aXJ0KTsKLQlwaHlzbWFwX21hcC52aXJ0ID0gTlVMTDsKKwlhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpOworCXJldHVybiAwOworCitlcnJfb3V0OgorCXBoeXNtYXBfZmxhc2hfcmVtb3ZlKGRldik7CisJcmV0dXJuIGVycjsKIH0KIAotbW9kdWxlX2luaXQoaW5pdF9waHlzbWFwKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfcGh5c21hcCk7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwaHlzbWFwX2ZsYXNoX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gcGh5c21hcF9mbGFzaF9wcm9iZSwKKwkucmVtb3ZlCQk9IHBoeXNtYXBfZmxhc2hfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwl9LAorfTsKIAogCisjaWZkZWYgQ09ORklHX01URF9QSFlTTUFQX0xFTgorI2lmIENPTkZJR19NVERfUEhZU01BUF9MRU4gIT0gMAorI3dhcm5pbmcgdXNpbmcgUEhZU01BUCBjb21wYXQgY29kZQorI2RlZmluZSBQSFlTTUFQX0NPTVBBVAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFBIWVNNQVBfQ09NUEFUCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwaHlzbWFwX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IENPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEgsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBoeXNtYXBfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IENPTkZJR19NVERfUEhZU01BUF9TVEFSVCwKKwkuZW5kCQk9IENPTkZJR19NVERfUEhZU01BUF9TVEFSVCArIENPTkZJR19NVERfUEhZU01BUF9MRU4sCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGh5c21hcF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBoeXNtYXBfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmcGh5c21hcF9mbGFzaF9yZXNvdXJjZSwKK307CisKK3ZvaWQgcGh5c21hcF9jb25maWd1cmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCWludCBiYW5rd2lkdGgsIHZvaWQgKCpzZXRfdnBwKShzdHJ1Y3QgbWFwX2luZm8gKiwgaW50KSkKK3sKKwlwaHlzbWFwX2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gYWRkcjsKKwlwaHlzbWFwX2ZsYXNoX3Jlc291cmNlLmVuZCA9IGFkZHIgKyBzaXplIC0gMTsKKwlwaHlzbWFwX2ZsYXNoX2RhdGEud2lkdGggPSBiYW5rd2lkdGg7CisJcGh5c21hcF9mbGFzaF9kYXRhLnNldF92cHAgPSBzZXRfdnBwOworfQorCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCit2b2lkIHBoeXNtYXBfc2V0X3BhcnRpdGlvbnMoc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLCBpbnQgbnVtX3BhcnRzKQoreworCXBoeXNtYXBfZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IG51bV9wYXJ0czsKKwlwaHlzbWFwX2ZsYXNoX2RhdGEucGFydHMgPSBwYXJ0czsKK30KKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHBoeXNtYXBfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBoeXNtYXBfZmxhc2hfZHJpdmVyKTsKKyNpZmRlZiBQSFlTTUFQX0NPTVBBVAorCWlmIChlcnIgPT0gMCkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwaHlzbWFwX2ZsYXNoKTsKKyNlbmRpZgorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBoeXNtYXBfZXhpdCh2b2lkKQoreworI2lmZGVmIFBIWVNNQVBfQ09NUEFUCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBoeXNtYXBfZmxhc2gpOworI2VuZGlmCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBoeXNtYXBfZmxhc2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGh5c21hcF9pbml0KTsKK21vZHVsZV9leGl0KHBoeXNtYXBfZXhpdCk7CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBjb25maWd1cmFibGUgTVREIG1hcCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMgYi9kcml2ZXJzL210ZC9tdGRibG9jay5jCmluZGV4IDJjZWYyODAuLmU1Yzc4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkYmxvY2suYwpAQCAtNzEsNyArNzEsNyBAQAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJYWRkX3dhaXRfcXVldWUoJndhaXRfcSwgJndhaXQpOwogCi0JcmV0ID0gTVREX0VSQVNFKG10ZCwgJmVyYXNlKTsKKwlyZXQgPSBtdGQtPmVyYXNlKG10ZCwgJmVyYXNlKTsKIAlpZiAocmV0KSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZ3YWl0X3EsICZ3YWl0KTsKQEAgLTg4LDcgKzg4LDcgQEAKIAkgKiBOZXh0LCB3cml0aGUgZGF0YSB0byBmbGFzaC4KIAkgKi8KIAotCXJldCA9IE1URF9XUklURSAobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKKwlyZXQgPSBtdGQtPndyaXRlKG10ZCwgcG9zLCBsZW4sICZyZXRsZW4sIGJ1Zik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAlpZiAocmV0bGVuICE9IGxlbikKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQltdGQtPm5hbWUsIHBvcywgbGVuKTsKIAogCWlmICghc2VjdF9zaXplKQotCQlyZXR1cm4gTVREX1dSSVRFIChtdGQsIHBvcywgbGVuLCAmcmV0bGVuLCBidWYpOworCQlyZXR1cm4gbXRkLT53cml0ZShtdGQsIHBvcywgbGVuLCAmcmV0bGVuLCBidWYpOwogCiAJd2hpbGUgKGxlbiA+IDApIHsKIAkJdW5zaWduZWQgbG9uZyBzZWN0X3N0YXJ0ID0gKHBvcy9zZWN0X3NpemUpKnNlY3Rfc2l6ZTsKQEAgLTE3MCw3ICsxNzAsOCBAQAogCQkJICAgIG10ZGJsay0+Y2FjaGVfb2Zmc2V0ICE9IHNlY3Rfc3RhcnQpIHsKIAkJCQkvKiBmaWxsIHRoZSBjYWNoZSB3aXRoIHRoZSBjdXJyZW50IHNlY3RvciAqLwogCQkJCW10ZGJsay0+Y2FjaGVfc3RhdGUgPSBTVEFURV9FTVBUWTsKLQkJCQlyZXQgPSBNVERfUkVBRChtdGQsIHNlY3Rfc3RhcnQsIHNlY3Rfc2l6ZSwgJnJldGxlbiwgbXRkYmxrLT5jYWNoZV9kYXRhKTsKKwkJCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBzZWN0X3N0YXJ0LCBzZWN0X3NpemUsCisJCQkJCQkmcmV0bGVuLCBtdGRibGstPmNhY2hlX2RhdGEpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CiAJCQkJaWYgKHJldGxlbiAhPSBzZWN0X3NpemUpCkBAIC0yMDcsNyArMjA4LDcgQEAKIAkJCW10ZC0+bmFtZSwgcG9zLCBsZW4pOwogCiAJaWYgKCFzZWN0X3NpemUpCi0JCXJldHVybiBNVERfUkVBRCAobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKKwkJcmV0dXJuIG10ZC0+cmVhZChtdGQsIHBvcywgbGVuLCAmcmV0bGVuLCBidWYpOwogCiAJd2hpbGUgKGxlbiA+IDApIHsKIAkJdW5zaWduZWQgbG9uZyBzZWN0X3N0YXJ0ID0gKHBvcy9zZWN0X3NpemUpKnNlY3Rfc2l6ZTsKQEAgLTIyNiw3ICsyMjcsNyBAQAogCQkgICAgbXRkYmxrLT5jYWNoZV9vZmZzZXQgPT0gc2VjdF9zdGFydCkgewogCQkJbWVtY3B5IChidWYsIG10ZGJsay0+Y2FjaGVfZGF0YSArIG9mZnNldCwgc2l6ZSk7CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSBNVERfUkVBRCAobXRkLCBwb3MsIHNpemUsICZyZXRsZW4sIGJ1Zik7CisJCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBwb3MsIHNpemUsICZyZXRsZW4sIGJ1Zik7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCQlpZiAocmV0bGVuICE9IHNpemUpCkBAIC0yODgsOCArMjg5LDcgQEAKIAogCW11dGV4X2luaXQoJm10ZGJsay0+Y2FjaGVfbXV0ZXgpOwogCW10ZGJsay0+Y2FjaGVfc3RhdGUgPSBTVEFURV9FTVBUWTsKLQlpZiAoKG10ZGJsay0+bXRkLT5mbGFncyAmIE1URF9DQVBfUkFNKSAhPSBNVERfQ0FQX1JBTSAmJgotCSAgICBtdGRibGstPm10ZC0+ZXJhc2VzaXplKSB7CisJaWYgKCAhKG10ZGJsay0+bXRkLT5mbGFncyAmIE1URF9OT19FUkFTRSkgJiYgbXRkYmxrLT5tdGQtPmVyYXNlc2l6ZSkgewogCQltdGRibGstPmNhY2hlX3NpemUgPSBtdGRibGstPm10ZC0+ZXJhc2VzaXplOwogCQltdGRibGstPmNhY2hlX2RhdGEgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGJsb2NrX3JvLmMgYi9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jCmluZGV4IDBjODMwYmEuLjI5NTYzZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGJsb2NrX3JvLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkYmxvY2tfcm8uYwpAQCAtNDUsOSArNDUsNyBAQAogCWRldi0+Ymxrc2l6ZSA9IDUxMjsKIAlkZXYtPnNpemUgPSBtdGQtPnNpemUgPj4gOTsKIAlkZXYtPnRyID0gdHI7Ci0JaWYgKChtdGQtPmZsYWdzICYgKE1URF9DTEVBUl9CSVRTfE1URF9TRVRfQklUU3xNVERfV1JJVEVBQkxFKSkgIT0KLQkgICAgKE1URF9DTEVBUl9CSVRTfE1URF9TRVRfQklUU3xNVERfV1JJVEVBQkxFKSkKLQkJZGV2LT5yZWFkb25seSA9IDE7CisJZGV2LT5yZWFkb25seSA9IDE7CiAKIAlhZGRfbXRkX2Jsa3RyYW5zX2RldihkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IDZmMDQ0NTguLmFhMThkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTQ5LDI0ICs0OSwxOCBAQAogfTsKIAogLyoKLSAqIFdlIHVzZSBmaWxlLT5wcml2YXRlX2RhdGEgdG8gc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBNVERkZXZpY2UuCi0gKiBTaW5jZSBhbGlnaG1lbnQgaXMgYXQgbGVhc3QgMzIgYml0cywgd2UgaGF2ZSAyIGJpdHMgZnJlZSBmb3IgT1RQCi0gKiBtb2RlcyBhcyB3ZWxsLgorICogRGF0YSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcG9pbnRlciB0byB0aGUgbXRkIGRldmljZSBhcyB3ZWxsCisgKiBhcyBtb2RlIGluZm9ybWF0aW9uIG9mciB2YXJpb3VzIHVzZSBjYXNlcy4KICAqLwotCi0jZGVmaW5lIFRPX01URChmaWxlKSAoc3RydWN0IG10ZF9pbmZvICopKChsb25nKSgoZmlsZSktPnByaXZhdGVfZGF0YSkgJiB+M0wpCi0KLSNkZWZpbmUgTVREX01PREVfT1RQX0ZBQ1QJMQotI2RlZmluZSBNVERfTU9ERV9PVFBfVVNFUgkyCi0jZGVmaW5lIE1URF9NT0RFKGZpbGUpCQkoKGxvbmcpKChmaWxlKS0+cHJpdmF0ZV9kYXRhKSAmIDMpCi0KLSNkZWZpbmUgU0VUX01URF9NT0RFKGZpbGUsIG1vZGUpIFwKLQlkbyB7IGxvbmcgX19wID0gKGxvbmcpKChmaWxlKS0+cHJpdmF0ZV9kYXRhKTsgXAotCSAgICAgKGZpbGUpLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKSgoX19wICYgfjNMKSB8IG1vZGUpOyB9IHdoaWxlICgwKQorc3RydWN0IG10ZF9maWxlX2luZm8geworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCWVudW0gbXRkX2ZpbGVfbW9kZXMgbW9kZTsKK307CiAKIHN0YXRpYyBsb2ZmX3QgbXRkX2xzZWVrIChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCiB7Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSBUT19NVEQoZmlsZSk7CisJc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwogCiAJc3dpdGNoIChvcmlnKSB7CiAJY2FzZSAwOgpAQCAtOTcsNiArOTEsNyBAQAogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CiAJaW50IGRldm51bSA9IG1pbm9yID4+IDE7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IG10ZF9maWxlX2luZm8gKm1maTsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJNVERfb3BlblxuIik7CiAKQEAgLTExNywxNCArMTEyLDIwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWZpbGUtPnByaXZhdGVfZGF0YSA9IG10ZDsKLQogCS8qIFlvdSBjYW4ndCBvcGVuIGl0IFJXIGlmIGl0J3Mgbm90IGEgd3JpdGVhYmxlIGRldmljZSAqLwogCWlmICgoZmlsZS0+Zl9tb2RlICYgMikgJiYgIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpIHsKIAkJcHV0X210ZF9kZXZpY2UobXRkKTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCisJbWZpID0ga3phbGxvYyhzaXplb2YoKm1maSksIEdGUF9LRVJORUwpOworCWlmICghbWZpKSB7CisJCXB1dF9tdGRfZGV2aWNlKG10ZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZmktPm10ZCA9IG10ZDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBtZmk7CisKIAlyZXR1cm4gMDsKIH0gLyogbXRkX29wZW4gKi8KIApAQCAtMTMyLDE2ICsxMzMsMTcgQEAKIAogc3RhdGljIGludCBtdGRfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1URF9jbG9zZVxuIik7CiAKLQltdGQgPSBUT19NVEQoZmlsZSk7Ci0KIAlpZiAobXRkLT5zeW5jKQogCQltdGQtPnN5bmMobXRkKTsKIAogCXB1dF9tdGRfZGV2aWNlKG10ZCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShtZmkpOwogCiAJcmV0dXJuIDA7CiB9IC8qIG10ZF9jbG9zZSAqLwpAQCAtMTUzLDcgKzE1NSw4IEBACiAKIHN0YXRpYyBzc2l6ZV90IG10ZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gVE9fTVREKGZpbGUpOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAlzaXplX3QgcmV0bGVuPTA7CiAJc2l6ZV90IHRvdGFsX3JldGxlbj0wOwogCWludCByZXQ9MDsKQEAgLTE3MCwzNiArMTczLDU4IEBACiAKIAkvKiBGSVhNRTogVXNlIGtpb3ZlYyBpbiAyLjUgdG8gbG9jayBkb3duIHRoZSB1c2VyJ3MgYnVmZmVycwogCSAgIGFuZCBwYXNzIHRoZW0gZGlyZWN0bHkgdG8gdGhlIE1URCBmdW5jdGlvbnMgKi8KKworCWlmIChjb3VudCA+IE1BWF9LTUFMTE9DX1NJWkUpCisJCWtidWY9a21hbGxvYyhNQVhfS01BTExPQ19TSVpFLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWtidWY9a21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWtidWYpCisJCXJldHVybiAtRU5PTUVNOworCiAJd2hpbGUgKGNvdW50KSB7CisKIAkJaWYgKGNvdW50ID4gTUFYX0tNQUxMT0NfU0laRSkKIAkJCWxlbiA9IE1BWF9LTUFMTE9DX1NJWkU7CiAJCWVsc2UKIAkJCWxlbiA9IGNvdW50OwogCi0JCWtidWY9a21hbGxvYyhsZW4sR0ZQX0tFUk5FTCk7Ci0JCWlmICgha2J1ZikKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCXN3aXRjaCAoTVREX01PREUoZmlsZSkpIHsKLQkJY2FzZSBNVERfTU9ERV9PVFBfRkFDVDoKKwkJc3dpdGNoIChtZmktPm1vZGUpIHsKKwkJY2FzZSBNVERfTU9ERV9PVFBfRkFDVE9SWToKIAkJCXJldCA9IG10ZC0+cmVhZF9mYWN0X3Byb3RfcmVnKG10ZCwgKnBwb3MsIGxlbiwgJnJldGxlbiwga2J1Zik7CiAJCQlicmVhazsKIAkJY2FzZSBNVERfTU9ERV9PVFBfVVNFUjoKIAkJCXJldCA9IG10ZC0+cmVhZF91c2VyX3Byb3RfcmVnKG10ZCwgKnBwb3MsIGxlbiwgJnJldGxlbiwga2J1Zik7CiAJCQlicmVhazsKKwkJY2FzZSBNVERfTU9ERV9SQVc6CisJCXsKKwkJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwkJCW9wcy5tb2RlID0gTVREX09PQl9SQVc7CisJCQlvcHMuZGF0YnVmID0ga2J1ZjsKKwkJCW9wcy5vb2JidWYgPSBOVUxMOworCQkJb3BzLmxlbiA9IGxlbjsKKworCQkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsICpwcG9zLCAmb3BzKTsKKwkJCXJldGxlbiA9IG9wcy5yZXRsZW47CisJCQlicmVhazsKKwkJfQogCQlkZWZhdWx0OgotCQkJcmV0ID0gTVREX1JFQUQobXRkLCAqcHBvcywgbGVuLCAmcmV0bGVuLCBrYnVmKTsKKwkJCXJldCA9IG10ZC0+cmVhZChtdGQsICpwcG9zLCBsZW4sICZyZXRsZW4sIGtidWYpOwogCQl9CiAJCS8qIE5hbmQgcmV0dXJucyAtRUJBRE1TRyBvbiBlY2MgZXJyb3JzLCBidXQgaXQgcmV0dXJucwogCQkgKiB0aGUgZGF0YS4gRm9yIG91ciB1c2Vyc3BhY2UgdG9vbHMgaXQgaXMgaW1wb3J0YW50CiAJCSAqIHRvIGR1bXAgYXJlYXMgd2l0aCBlY2MgZXJyb3JzICEKKwkJICogRm9yIGtlcm5lbCBpbnRlcm5hbCB1c2FnZSBpdCBhbHNvIG1pZ2h0IHJldHVybiAtRVVDTEVBTgorCQkgKiB0byBzaWduYWwgdGhlIGNhbGxlciB0aGF0IGEgYml0ZmxpcCBoYXMgb2NjdXJlZCBhbmQgaGFzCisJCSAqIGJlZW4gY29ycmVjdGVkIGJ5IHRoZSBFQ0MgYWxnb3JpdGhtLgogCQkgKiBVc2Vyc3BhY2Ugc29mdHdhcmUgd2hpY2ggYWNjZXNzZXMgTkFORCB0aGlzIHdheQogCQkgKiBtdXN0IGJlIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgaXQgZGVhbHMgd2l0aCBOQU5ECiAJCSAqLwotCQlpZiAoIXJldCB8fCAocmV0ID09IC1FQkFETVNHKSkgeworCQlpZiAoIXJldCB8fCAocmV0ID09IC1FVUNMRUFOKSB8fCAocmV0ID09IC1FQkFETVNHKSkgewogCQkJKnBwb3MgKz0gcmV0bGVuOwogCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGtidWYsIHJldGxlbikpIHsKLQkJCSAgICAgICAga2ZyZWUoa2J1Zik7CisJCQkJa2ZyZWUoa2J1Zik7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCQllbHNlCkBAIC0yMTUsMTUgKzI0MCwxNiBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCWtmcmVlKGtidWYpOwogCX0KIAorCWtmcmVlKGtidWYpOwogCXJldHVybiB0b3RhbF9yZXRsZW47CiB9IC8qIG10ZF9yZWFkICovCiAKIHN0YXRpYyBzc2l6ZV90IG10ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IFRPX01URChmaWxlKTsKKwlzdHJ1Y3QgbXRkX2ZpbGVfaW5mbyAqbWZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbWZpLT5tdGQ7CiAJY2hhciAqa2J1ZjsKIAlzaXplX3QgcmV0bGVuOwogCXNpemVfdCB0b3RhbF9yZXRsZW49MDsKQEAgLTI0MSwyNSArMjY3LDI4IEBACiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoY291bnQgPiBNQVhfS01BTExPQ19TSVpFKQorCQlrYnVmPWttYWxsb2MoTUFYX0tNQUxMT0NfU0laRSwgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlrYnVmPWttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCisJaWYgKCFrYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXdoaWxlIChjb3VudCkgeworCiAJCWlmIChjb3VudCA+IE1BWF9LTUFMTE9DX1NJWkUpCiAJCQlsZW4gPSBNQVhfS01BTExPQ19TSVpFOwogCQllbHNlCiAJCQlsZW4gPSBjb3VudDsKIAotCQlrYnVmPWttYWxsb2MobGVuLEdGUF9LRVJORUwpOwotCQlpZiAoIWtidWYpIHsKLQkJCXByaW50aygia21hbGxvYyBpcyBudWxsXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KIAkJaWYgKGNvcHlfZnJvbV91c2VyKGtidWYsIGJ1ZiwgbGVuKSkgewogCQkJa2ZyZWUoa2J1Zik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCi0JCXN3aXRjaCAoTVREX01PREUoZmlsZSkpIHsKLQkJY2FzZSBNVERfTU9ERV9PVFBfRkFDVDoKKwkJc3dpdGNoIChtZmktPm1vZGUpIHsKKwkJY2FzZSBNVERfTU9ERV9PVFBfRkFDVE9SWToKIAkJCXJldCA9IC1FUk9GUzsKIAkJCWJyZWFrOwogCQljYXNlIE1URF9NT0RFX09UUF9VU0VSOgpAQCAtMjY5LDYgKzI5OCwyMSBAQAogCQkJfQogCQkJcmV0ID0gbXRkLT53cml0ZV91c2VyX3Byb3RfcmVnKG10ZCwgKnBwb3MsIGxlbiwgJnJldGxlbiwga2J1Zik7CiAJCQlicmVhazsKKworCQljYXNlIE1URF9NT0RFX1JBVzoKKwkJeworCQkJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKworCQkJb3BzLm1vZGUgPSBNVERfT09CX1JBVzsKKwkJCW9wcy5kYXRidWYgPSBrYnVmOworCQkJb3BzLm9vYmJ1ZiA9IE5VTEw7CisJCQlvcHMubGVuID0gbGVuOworCisJCQlyZXQgPSBtdGQtPndyaXRlX29vYihtdGQsICpwcG9zLCAmb3BzKTsKKwkJCXJldGxlbiA9IG9wcy5yZXRsZW47CisJCQlicmVhazsKKwkJfQorCiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAoKihtdGQtPndyaXRlKSkobXRkLCAqcHBvcywgbGVuLCAmcmV0bGVuLCBrYnVmKTsKIAkJfQpAQCAtMjgyLDEwICszMjYsOSBAQAogCQkJa2ZyZWUoa2J1Zik7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0KLQkJa2ZyZWUoa2J1Zik7CiAJfQogCisJa2ZyZWUoa2J1Zik7CiAJcmV0dXJuIHRvdGFsX3JldGxlbjsKIH0gLyogbXRkX3dyaXRlICovCiAKQEAgLTI5OSwxMyArMzQyLDQ1IEBACiAJd2FrZV91cCgod2FpdF9xdWV1ZV9oZWFkX3QgKilpbnN0ci0+cHJpdik7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfT1RQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfT05FTkFORF9PVFApCitzdGF0aWMgaW50IG90cF9zZWxlY3RfZmlsZW1vZGUoc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSwgaW50IG1vZGUpCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgTVREX09UUF9GQUNUT1JZOgorCQlpZiAoIW10ZC0+cmVhZF9mYWN0X3Byb3RfcmVnKQorCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWVsc2UKKwkJCW1maS0+bW9kZSA9IE1URF9NT0RFX09UUF9GQUNUT1JZOworCQlicmVhazsKKwljYXNlIE1URF9PVFBfVVNFUjoKKwkJaWYgKCFtdGQtPnJlYWRfZmFjdF9wcm90X3JlZykKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQllbHNlCisJCQltZmktPm1vZGUgPSBNVERfTU9ERV9PVFBfVVNFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwljYXNlIE1URF9PVFBfT0ZGOgorCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCisjIGRlZmluZSBvdHBfc2VsZWN0X2ZpbGVtb2RlKGYsbSkJLUVPUE5PVFNVUFAKKyNlbmRpZgorCiBzdGF0aWMgaW50IG10ZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSBUT19NVEQoZmlsZSk7CisJc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByZXQgPSAwOwogCXVfbG9uZyBzaXplOworCXN0cnVjdCBtdGRfaW5mb191c2VyIGluZm87CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiTVREX2lvY3RsXG4iKTsKIApAQCAtMzQxLDcgKzQxNiwxNSBAQAogCX0KIAogCWNhc2UgTUVNR0VUSU5GTzoKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBtdGQsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm9fdXNlcikpKQorCQlpbmZvLnR5cGUJPSBtdGQtPnR5cGU7CisJCWluZm8uZmxhZ3MJPSBtdGQtPmZsYWdzOworCQlpbmZvLnNpemUJPSBtdGQtPnNpemU7CisJCWluZm8uZXJhc2VzaXplCT0gbXRkLT5lcmFzZXNpemU7CisJCWluZm8ud3JpdGVzaXplCT0gbXRkLT53cml0ZXNpemU7CisJCWluZm8ub29ic2l6ZQk9IG10ZC0+b29ic2l6ZTsKKwkJaW5mby5lY2N0eXBlCT0gbXRkLT5lY2N0eXBlOworCQlpbmZvLmVjY3NpemUJPSBtdGQtPmVjY3NpemU7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8sIHNpemVvZihzdHJ1Y3QgbXRkX2luZm9fdXNlcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCkBAIC00MDAsOCArNDgzLDcgQEAKIAljYXNlIE1FTVdSSVRFT09COgogCXsKIAkJc3RydWN0IG10ZF9vb2JfYnVmIGJ1ZjsKLQkJdm9pZCAqZGF0YWJ1ZjsKLQkJc3NpemVfdCByZXRsZW47CisJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CiAKIAkJaWYoIShmaWxlLT5mX21vZGUgJiAyKSkKIAkJCXJldHVybiAtRVBFUk07CkBAIC00MDksNyArNDkxLDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgbXRkX29vYl9idWYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmIChidWYubGVuZ3RoID4gMHg0MDk2KQorCQlpZiAoYnVmLmxlbmd0aCA+IDQwOTYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoIW10ZC0+d3JpdGVfb29iKQpAQCAtNDIxLDIxICs1MDMsMzIgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJZGF0YWJ1ZiA9IGttYWxsb2MoYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZGF0YWJ1ZikKKwkJb3BzLmxlbiA9IGJ1Zi5sZW5ndGg7CisJCW9wcy5vb2JsZW4gPSBidWYubGVuZ3RoOworCQlvcHMub29ib2ZmcyA9IGJ1Zi5zdGFydCAmIChtdGQtPm9vYnNpemUgLSAxKTsKKwkJb3BzLmRhdGJ1ZiA9IE5VTEw7CisJCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKworCQlpZiAob3BzLm9vYm9mZnMgJiYgb3BzLmxlbiA+IChtdGQtPm9vYnNpemUgLSBvcHMub29ib2ZmcykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlvcHMub29iYnVmID0ga21hbGxvYyhidWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvcHMub29iYnVmKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGFidWYsIGJ1Zi5wdHIsIGJ1Zi5sZW5ndGgpKSB7Ci0JCQlrZnJlZShkYXRhYnVmKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKG9wcy5vb2JidWYsIGJ1Zi5wdHIsIGJ1Zi5sZW5ndGgpKSB7CisJCQlrZnJlZShvcHMub29iYnVmKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKLQkJcmV0ID0gKG10ZC0+d3JpdGVfb29iKShtdGQsIGJ1Zi5zdGFydCwgYnVmLmxlbmd0aCwgJnJldGxlbiwgZGF0YWJ1Zik7CisJCWJ1Zi5zdGFydCAmPSB+KG10ZC0+b29ic2l6ZSAtIDEpOworCQlyZXQgPSBtdGQtPndyaXRlX29vYihtdGQsIGJ1Zi5zdGFydCwgJm9wcyk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwICsgc2l6ZW9mKHVpbnQzMl90KSwgJnJldGxlbiwgc2l6ZW9mKHVpbnQzMl90KSkpCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCArIHNpemVvZih1aW50MzJfdCksICZvcHMucmV0bGVuLAorCQkJCSBzaXplb2YodWludDMyX3QpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAKLQkJa2ZyZWUoZGF0YWJ1Zik7CisJCWtmcmVlKG9wcy5vb2JidWYpOwogCQlicmVhazsKIAogCX0KQEAgLTQ0MywxMyArNTM2LDEyIEBACiAJY2FzZSBNRU1SRUFET09COgogCXsKIAkJc3RydWN0IG10ZF9vb2JfYnVmIGJ1ZjsKLQkJdm9pZCAqZGF0YWJ1ZjsKLQkJc3NpemVfdCByZXRsZW47CisJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgbXRkX29vYl9idWYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmIChidWYubGVuZ3RoID4gMHg0MDk2KQorCQlpZiAoYnVmLmxlbmd0aCA+IDQwOTYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoIW10ZC0+cmVhZF9vb2IpCkBAIC00NTcsMjIgKzU0OSwzMiBAQAogCQllbHNlCiAJCQlyZXQgPSBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYucHRyLAogCQkJCQlidWYubGVuZ3RoKSA/IDAgOiAtRUZBVUxUOwotCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCWRhdGFidWYgPSBrbWFsbG9jKGJ1Zi5sZW5ndGgsIEdGUF9LRVJORUwpOwotCQlpZiAoIWRhdGFidWYpCisJCW9wcy5sZW4gPSBidWYubGVuZ3RoOworCQlvcHMub29ibGVuID0gYnVmLmxlbmd0aDsKKwkJb3BzLm9vYm9mZnMgPSBidWYuc3RhcnQgJiAobXRkLT5vb2JzaXplIC0gMSk7CisJCW9wcy5kYXRidWYgPSBOVUxMOworCQlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwkJaWYgKG9wcy5vb2JvZmZzICYmIG9wcy5sZW4gPiAobXRkLT5vb2JzaXplIC0gb3BzLm9vYm9mZnMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJb3BzLm9vYmJ1ZiA9IGttYWxsb2MoYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWlmICghb3BzLm9vYmJ1ZikKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXJldCA9IChtdGQtPnJlYWRfb29iKShtdGQsIGJ1Zi5zdGFydCwgYnVmLmxlbmd0aCwgJnJldGxlbiwgZGF0YWJ1Zik7CisJCWJ1Zi5zdGFydCAmPSB+KG10ZC0+b29ic2l6ZSAtIDEpOworCQlyZXQgPSBtdGQtPnJlYWRfb29iKG10ZCwgYnVmLnN0YXJ0LCAmb3BzKTsKIAotCQlpZiAocHV0X3VzZXIocmV0bGVuLCAodWludDMyX3QgX191c2VyICopYXJncCkpCisJCWlmIChwdXRfdXNlcihvcHMucmV0bGVuLCAodWludDMyX3QgX191c2VyICopYXJncCkpCiAJCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlIGlmIChyZXRsZW4gJiYgY29weV90b191c2VyKGJ1Zi5wdHIsIGRhdGFidWYsIHJldGxlbikpCisJCWVsc2UgaWYgKG9wcy5yZXRsZW4gJiYgY29weV90b191c2VyKGJ1Zi5wdHIsIG9wcy5vb2JidWYsCisJCQkJCQkgICAgb3BzLnJldGxlbikpCiAJCQlyZXQgPSAtRUZBVUxUOwogCi0JCWtmcmVlKGRhdGFidWYpOworCQlrZnJlZShvcHMub29iYnVmKTsKIAkJYnJlYWs7CiAJfQogCkBAIC01MDQsMTYgKzYwNiwyMiBAQAogCQlicmVhazsKIAl9CiAKLQljYXNlIE1FTVNFVE9PQlNFTDoKLQl7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmbXRkLT5vb2JpbmZvLCBhcmdwLCBzaXplb2Yoc3RydWN0IG5hbmRfb29iaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwotCX0KLQorCS8qIExlZ2FjeSBpbnRlcmZhY2UgKi8KIAljYXNlIE1FTUdFVE9PQlNFTDoKIAl7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJihtdGQtPm9vYmluZm8pLCBzaXplb2Yoc3RydWN0IG5hbmRfb29iaW5mbykpKQorCQlzdHJ1Y3QgbmFuZF9vb2JpbmZvIG9pOworCisJCWlmICghbXRkLT5lY2NsYXlvdXQpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWlmIChtdGQtPmVjY2xheW91dC0+ZWNjYnl0ZXMgPiBBUlJBWV9TSVpFKG9pLmVjY3BvcykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlvaS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0U7CisJCW1lbWNweSgmb2kuZWNjcG9zLCBtdGQtPmVjY2xheW91dC0+ZWNjcG9zLCBzaXplb2Yob2kuZWNjcG9zKSk7CisJCW1lbWNweSgmb2kub29iZnJlZSwgbXRkLT5lY2NsYXlvdXQtPm9vYmZyZWUsCisJCSAgICAgICBzaXplb2Yob2kub29iZnJlZSkpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm9pLCBzaXplb2Yoc3RydWN0IG5hbmRfb29iaW5mbykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCX0KQEAgLTU0NCwzMSArNjUyLDE3IEBACiAJCWJyZWFrOwogCX0KIAotI2lmZGVmIENPTkZJR19NVERfT1RQCisjaWYgZGVmaW5lZChDT05GSUdfTVREX09UUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT1RQKQogCWNhc2UgT1RQU0VMRUNUOgogCXsKIAkJaW50IG1vZGU7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmbW9kZSwgYXJncCwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCVNFVF9NVERfTU9ERShmaWxlLCAwKTsKLQkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgTVREX09UUF9GQUNUT1JZOgotCQkJaWYgKCFtdGQtPnJlYWRfZmFjdF9wcm90X3JlZykKLQkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCWVsc2UKLQkJCQlTRVRfTVREX01PREUoZmlsZSwgTVREX01PREVfT1RQX0ZBQ1QpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTVREX09UUF9VU0VSOgotCQkJaWYgKCFtdGQtPnJlYWRfZmFjdF9wcm90X3JlZykKLQkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCWVsc2UKLQkJCQlTRVRfTVREX01PREUoZmlsZSwgTVREX01PREVfT1RQX1VTRVIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQljYXNlIE1URF9PVFBfT0ZGOgotCQkJYnJlYWs7Ci0JCX0KKworCQltZmktPm1vZGUgPSBNVERfTU9ERV9OT1JNQUw7CisKKwkJcmV0ID0gb3RwX3NlbGVjdF9maWxlbW9kZShtZmksIG1vZGUpOworCiAJCWZpbGUtPmZfcG9zID0gMDsKIAkJYnJlYWs7CiAJfQpAQCAtNTgwLDggKzY3NCw4IEBACiAJCWlmICghYnVmKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXJldCA9IC1FT1BOT1RTVVBQOwotCQlzd2l0Y2ggKE1URF9NT0RFKGZpbGUpKSB7Ci0JCWNhc2UgTVREX01PREVfT1RQX0ZBQ1Q6CisJCXN3aXRjaCAobWZpLT5tb2RlKSB7CisJCWNhc2UgTVREX01PREVfT1RQX0ZBQ1RPUlk6CiAJCQlpZiAobXRkLT5nZXRfZmFjdF9wcm90X2luZm8pCiAJCQkJcmV0ID0gbXRkLT5nZXRfZmFjdF9wcm90X2luZm8obXRkLCBidWYsIDQwOTYpOwogCQkJYnJlYWs7CkBAIC01ODksNiArNjgzLDggQEAKIAkJCWlmIChtdGQtPmdldF91c2VyX3Byb3RfaW5mbykKIAkJCQlyZXQgPSBtdGQtPmdldF91c2VyX3Byb3RfaW5mbyhtdGQsIGJ1ZiwgNDA5Nik7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXQgPj0gMCkgewogCQkJaWYgKGNtZCA9PSBPVFBHRVRSRUdJT05DT1VOVCkgewpAQCAtNjA3LDcgKzcwMyw3IEBACiAJewogCQlzdHJ1Y3Qgb3RwX2luZm8gaW5mbzsKIAotCQlpZiAoTVREX01PREUoZmlsZSkgIT0gTVREX01PREVfT1RQX1VTRVIpCisJCWlmIChtZmktPm1vZGUgIT0gTVREX01PREVfT1RQX1VTRVIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCBhcmdwLCBzaXplb2YoaW5mbykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC02MTgsNiArNzE0LDQ5IEBACiAJfQogI2VuZGlmCiAKKwljYXNlIEVDQ0dFVExBWU9VVDoKKwl7CisJCWlmICghbXRkLT5lY2NsYXlvdXQpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbXRkLT5lY2NsYXlvdXQsCisJCQkJIHNpemVvZihzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwl9CisKKwljYXNlIEVDQ0dFVFNUQVRTOgorCXsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbXRkLT5lY2Nfc3RhdHMsCisJCQkJIHNpemVvZihzdHJ1Y3QgbXRkX2VjY19zdGF0cykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKworCWNhc2UgTVRERklMRU1PREU6CisJeworCQltZmktPm1vZGUgPSAwOworCisJCXN3aXRjaChhcmcpIHsKKwkJY2FzZSBNVERfTU9ERV9PVFBfRkFDVE9SWToKKwkJY2FzZSBNVERfTU9ERV9PVFBfVVNFUjoKKwkJCXJldCA9IG90cF9zZWxlY3RfZmlsZW1vZGUobWZpLCBhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNVERfTU9ERV9SQVc6CisJCQlpZiAoIW10ZC0+cmVhZF9vb2IgfHwgIW10ZC0+d3JpdGVfb29iKQorCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJCW1maS0+bW9kZSA9IGFyZzsKKworCQljYXNlIE1URF9NT0RFX05PUk1BTDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQlmaWxlLT5mX3BvcyA9IDA7CisJCWJyZWFrOworCX0KKwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMgYi9kcml2ZXJzL210ZC9tdGRjb25jYXQuYwppbmRleCA5YWY4NDAzLi4xZmVhNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjb25jYXQuYworKysgYi9kcml2ZXJzL210ZC9tdGRjb25jYXQuYwpAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29uY2F0Lmg+CiAKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKwogLyoKICAqIE91ciBzdG9yYWdlIHN0cnVjdHVyZToKICAqIFN1YmRldiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RydWN0IG10ZF9pbmZvIG9iamVjdHMKQEAgLTU0LDcgKzU2LDcgQEAKIAkgICAgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpCiB7CiAJc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOwotCWludCBlcnIgPSAtRUlOVkFMOworCWludCByZXQgPSAwLCBlcnI7CiAJaW50IGk7CiAKIAkqcmV0bGVuID0gMDsKQEAgLTc4LDE5ICs4MCwyOSBAQAogCiAJCWVyciA9IHN1YmRldi0+cmVhZChzdWJkZXYsIGZyb20sIHNpemUsICZyZXRzaXplLCBidWYpOwogCi0JCWlmIChlcnIpCi0JCQlicmVhazsKKwkJLyogU2F2ZSBpbmZvcm1hdGlvbiBhYm91dCBiaXRmbGlwcyEgKi8KKwkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCWlmIChlcnIgPT0gLUVCQURNU0cpIHsKKwkJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJCQlyZXQgPSBlcnI7CisJCQl9IGVsc2UgaWYgKGVyciA9PSAtRVVDTEVBTikgeworCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQkJCS8qIERvIG5vdCBvdmVyd3JpdGUgLUVCQURNU0cgISEgKi8KKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gZXJyOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIGVycjsKKwkJfQogCiAJCSpyZXRsZW4gKz0gcmV0c2l6ZTsKIAkJbGVuIC09IHNpemU7CiAJCWlmIChsZW4gPT0gMCkKLQkJCWJyZWFrOworCQkJcmV0dXJuIHJldDsKIAotCQllcnIgPSAtRUlOVkFMOwogCQlidWYgKz0gc2l6ZTsKIAkJZnJvbSA9IDA7CiAJfQotCXJldHVybiBlcnI7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE0MSwyMTEgKzE1MywxODUgQEAKIH0KIAogc3RhdGljIGludAotY29uY2F0X3JlYWRfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYsIHVfY2hhciAqIGVjY2J1ZiwKLQkJc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorY29uY2F0X3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCisJCXVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICogcmV0bGVuKQogewogCXN0cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05DQVQobXRkKTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3Qga3ZlYyAqdmVjc19jb3B5OworCXVuc2lnbmVkIGxvbmcgZW50cnlfbG93LCBlbnRyeV9oaWdoOworCXNpemVfdCB0b3RhbF9sZW4gPSAwOwogCWludCBpOwotCi0JKnJldGxlbiA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKLQkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKLQkJc2l6ZV90IHNpemUsIHJldHNpemU7Ci0KLQkJaWYgKGZyb20gPj0gc3ViZGV2LT5zaXplKSB7Ci0JCQkvKiBOb3QgZGVzdGluZWQgZm9yIHRoaXMgc3ViZGV2ICovCi0JCQlzaXplID0gMDsKLQkJCWZyb20gLT0gc3ViZGV2LT5zaXplOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoZnJvbSArIGxlbiA+IHN1YmRldi0+c2l6ZSkKLQkJCS8qIEZpcnN0IHBhcnQgZ29lcyBpbnRvIHRoaXMgc3ViZGV2ICovCi0JCQlzaXplID0gc3ViZGV2LT5zaXplIC0gZnJvbTsKLQkJZWxzZQotCQkJLyogRW50aXJlIHRyYW5zYWN0aW9uIGdvZXMgaW50byB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IGxlbjsKLQotCQlpZiAoc3ViZGV2LT5yZWFkX2VjYykKLQkJCWVyciA9IHN1YmRldi0+cmVhZF9lY2Moc3ViZGV2LCBmcm9tLCBzaXplLAotCQkJCQkgICAgICAgJnJldHNpemUsIGJ1ZiwgZWNjYnVmLCBvb2JzZWwpOwotCQllbHNlCi0JCQllcnIgPSAtRUlOVkFMOwotCi0JCWlmIChlcnIpCi0JCQlicmVhazsKLQotCQkqcmV0bGVuICs9IHJldHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQlpZiAobGVuID09IDApCi0JCQlicmVhazsKLQotCQllcnIgPSAtRUlOVkFMOwotCQlidWYgKz0gc2l6ZTsKLQkJaWYgKGVjY2J1ZikgewotCQkJZWNjYnVmICs9IHN1YmRldi0+b29ic2l6ZTsKLQkJCS8qIGluIG5hbmQuYyBhdCBsZWFzdCwgZWNjYnVmcyBhcmUKLQkJCSAgIHRhZ2dlZCB3aXRoIDIgKGludCllY2NzdGF0dXMnOyB3ZQotCQkJICAgbXVzdCBhY2NvdW50IGZvciB0aGVzZSAqLwotCQkJZWNjYnVmICs9IDIgKiAoc2l6ZW9mIChpbnQpKTsKLQkJfQotCQlmcm9tID0gMDsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotY29uY2F0X3dyaXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYsIHVfY2hhciAqIGVjY2J1ZiwKLQkJIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKLXsKLQlzdHJ1Y3QgbXRkX2NvbmNhdCAqY29uY2F0ID0gQ09OQ0FUKG10ZCk7CiAJaW50IGVyciA9IC1FSU5WQUw7Ci0JaW50IGk7CiAKIAlpZiAoIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCiAJCXJldHVybiAtRVJPRlM7CiAKIAkqcmV0bGVuID0gMDsKIAorCS8qIENhbGN1bGF0ZSB0b3RhbCBsZW5ndGggb2YgZGF0YSAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQl0b3RhbF9sZW4gKz0gdmVjc1tpXS5pb3ZfbGVuOworCisJLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICgodG8gKyB0b3RhbF9sZW4pID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENoZWNrIGFsaWdubWVudCAqLworCWlmIChtdGQtPndyaXRlc2l6ZSA+IDEpIHsKKwkJbG9mZl90IF9fdG8gPSB0bzsKKwkJaWYgKGRvX2RpdihfX3RvLCBtdGQtPndyaXRlc2l6ZSkgfHwgKHRvdGFsX2xlbiAlIG10ZC0+d3JpdGVzaXplKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIG1ha2UgYSBjb3B5IG9mIHZlY3MgKi8KKwl2ZWNzX2NvcHkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZlYykgKiBjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZWNzX2NvcHkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweSh2ZWNzX2NvcHksIHZlY3MsIHNpemVvZihzdHJ1Y3Qga3ZlYykgKiBjb3VudCk7CisKKwllbnRyeV9sb3cgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJkZXY7IGkrKykgewogCQlzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOwotCQlzaXplX3Qgc2l6ZSwgcmV0c2l6ZTsKKwkJc2l6ZV90IHNpemUsIHdzaXplLCByZXRzaXplLCBvbGRfaW92X2xlbjsKIAogCQlpZiAodG8gPj0gc3ViZGV2LT5zaXplKSB7Ci0JCQlzaXplID0gMDsKIAkJCXRvIC09IHN1YmRldi0+c2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICh0byArIGxlbiA+IHN1YmRldi0+c2l6ZSkKLQkJCXNpemUgPSBzdWJkZXYtPnNpemUgLSB0bzsKLQkJZWxzZQotCQkJc2l6ZSA9IGxlbjsKKworCQlzaXplID0gbWluKHRvdGFsX2xlbiwgKHNpemVfdCkoc3ViZGV2LT5zaXplIC0gdG8pKTsKKwkJd3NpemUgPSBzaXplOyAvKiBzdG9yZSBmb3IgZnV0dXJlIHVzZSAqLworCisJCWVudHJ5X2hpZ2ggPSBlbnRyeV9sb3c7CisJCXdoaWxlIChlbnRyeV9oaWdoIDwgY291bnQpIHsKKwkJCWlmIChzaXplIDw9IHZlY3NfY29weVtlbnRyeV9oaWdoXS5pb3ZfbGVuKQorCQkJCWJyZWFrOworCQkJc2l6ZSAtPSB2ZWNzX2NvcHlbZW50cnlfaGlnaCsrXS5pb3ZfbGVuOworCQl9CisKKwkJb2xkX2lvdl9sZW4gPSB2ZWNzX2NvcHlbZW50cnlfaGlnaF0uaW92X2xlbjsKKwkJdmVjc19jb3B5W2VudHJ5X2hpZ2hdLmlvdl9sZW4gPSBzaXplOwogCiAJCWlmICghKHN1YmRldi0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKIAkJCWVyciA9IC1FUk9GUzsKLQkJZWxzZSBpZiAoc3ViZGV2LT53cml0ZV9lY2MpCi0JCQllcnIgPSBzdWJkZXYtPndyaXRlX2VjYyhzdWJkZXYsIHRvLCBzaXplLAotCQkJCQkJJnJldHNpemUsIGJ1ZiwgZWNjYnVmLCBvb2JzZWwpOwogCQllbHNlCi0JCQllcnIgPSAtRUlOVkFMOworCQkJZXJyID0gc3ViZGV2LT53cml0ZXYoc3ViZGV2LCAmdmVjc19jb3B5W2VudHJ5X2xvd10sCisJCQkJZW50cnlfaGlnaCAtIGVudHJ5X2xvdyArIDEsIHRvLCAmcmV0c2l6ZSk7CisKKwkJdmVjc19jb3B5W2VudHJ5X2hpZ2hdLmlvdl9sZW4gPSBvbGRfaW92X2xlbiAtIHNpemU7CisJCXZlY3NfY29weVtlbnRyeV9oaWdoXS5pb3ZfYmFzZSArPSBzaXplOworCisJCWVudHJ5X2xvdyA9IGVudHJ5X2hpZ2g7CiAKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCiAJCSpyZXRsZW4gKz0gcmV0c2l6ZTsKLQkJbGVuIC09IHNpemU7Ci0JCWlmIChsZW4gPT0gMCkKKwkJdG90YWxfbGVuIC09IHdzaXplOworCisJCWlmICh0b3RhbF9sZW4gPT0gMCkKIAkJCWJyZWFrOwogCiAJCWVyciA9IC1FSU5WQUw7Ci0JCWJ1ZiArPSBzaXplOwotCQlpZiAoZWNjYnVmKQotCQkJZWNjYnVmICs9IHN1YmRldi0+b29ic2l6ZTsKIAkJdG8gPSAwOwogCX0KKworCWtmcmVlKHZlY3NfY29weSk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludAotY29uY2F0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpCitjb25jYXRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgbXRkX2NvbmNhdCAqY29uY2F0ID0gQ09OQ0FUKG10ZCk7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0JaW50IGk7CisJc3RydWN0IG10ZF9vb2Jfb3BzIGRldm9wcyA9ICpvcHM7CisJaW50IGksIGVyciwgcmV0ID0gMDsKIAotCSpyZXRsZW4gPSAwOworCW9wcy0+cmV0bGVuID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJkZXY7IGkrKykgewogCQlzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOwotCQlzaXplX3Qgc2l6ZSwgcmV0c2l6ZTsKIAogCQlpZiAoZnJvbSA+PSBzdWJkZXYtPnNpemUpIHsKLQkJCS8qIE5vdCBkZXN0aW5lZCBmb3IgdGhpcyBzdWJkZXYgKi8KLQkJCXNpemUgPSAwOwogCQkJZnJvbSAtPSBzdWJkZXYtPnNpemU7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoZnJvbSArIGxlbiA+IHN1YmRldi0+c2l6ZSkKLQkJCS8qIEZpcnN0IHBhcnQgZ29lcyBpbnRvIHRoaXMgc3ViZGV2ICovCi0JCQlzaXplID0gc3ViZGV2LT5zaXplIC0gZnJvbTsKLQkJZWxzZQotCQkJLyogRW50aXJlIHRyYW5zYWN0aW9uIGdvZXMgaW50byB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IGxlbjsKIAotCQlpZiAoc3ViZGV2LT5yZWFkX29vYikKLQkJCWVyciA9IHN1YmRldi0+cmVhZF9vb2Ioc3ViZGV2LCBmcm9tLCBzaXplLAotCQkJCQkgICAgICAgJnJldHNpemUsIGJ1Zik7Ci0JCWVsc2UKLQkJCWVyciA9IC1FSU5WQUw7CisJCS8qIHBhcnRpYWwgcmVhZCA/ICovCisJCWlmIChmcm9tICsgZGV2b3BzLmxlbiA+IHN1YmRldi0+c2l6ZSkKKwkJCWRldm9wcy5sZW4gPSBzdWJkZXYtPnNpemUgLSBmcm9tOwogCi0JCWlmIChlcnIpCi0JCQlicmVhazsKKwkJZXJyID0gc3ViZGV2LT5yZWFkX29vYihzdWJkZXYsIGZyb20sICZkZXZvcHMpOworCQlvcHMtPnJldGxlbiArPSBkZXZvcHMucmV0bGVuOwogCi0JCSpyZXRsZW4gKz0gcmV0c2l6ZTsKLQkJbGVuIC09IHNpemU7Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWJyZWFrOworCQkvKiBTYXZlIGluZm9ybWF0aW9uIGFib3V0IGJpdGZsaXBzISAqLworCQlpZiAodW5saWtlbHkoZXJyKSkgeworCQkJaWYgKGVyciA9PSAtRUJBRE1TRykgeworCQkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQkJCXJldCA9IGVycjsKKwkJCX0gZWxzZSBpZiAoZXJyID09IC1FVUNMRUFOKSB7CisJCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkKys7CisJCQkJLyogRG8gbm90IG92ZXJ3cml0ZSAtRUJBRE1TRyAhISAqLworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSBlcnI7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gZXJyOworCQl9CiAKLQkJZXJyID0gLUVJTlZBTDsKLQkJYnVmICs9IHNpemU7CisJCWRldm9wcy5sZW4gPSBvcHMtPmxlbiAtIG9wcy0+cmV0bGVuOworCQlpZiAoIWRldm9wcy5sZW4pCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChkZXZvcHMuZGF0YnVmKQorCQkJZGV2b3BzLmRhdGJ1ZiArPSBkZXZvcHMucmV0bGVuOworCQlpZiAoZGV2b3BzLm9vYmJ1ZikKKwkJCWRldm9wcy5vb2JidWYgKz0gZGV2b3BzLm9vYmxlbjsKKwogCQlmcm9tID0gMDsKIAl9Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludAotY29uY2F0X3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpCitjb25jYXRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewogCXN0cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05DQVQobXRkKTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQlpbnQgaTsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgZGV2b3BzID0gKm9wczsKKwlpbnQgaSwgZXJyOwogCiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwogCi0JKnJldGxlbiA9IDA7CisJb3BzLT5yZXRsZW4gPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmNhdC0+bnVtX3N1YmRldjsgaSsrKSB7CiAJCXN0cnVjdCBtdGRfaW5mbyAqc3ViZGV2ID0gY29uY2F0LT5zdWJkZXZbaV07Ci0JCXNpemVfdCBzaXplLCByZXRzaXplOwogCiAJCWlmICh0byA+PSBzdWJkZXYtPnNpemUpIHsKLQkJCXNpemUgPSAwOwogCQkJdG8gLT0gc3ViZGV2LT5zaXplOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKHRvICsgbGVuID4gc3ViZGV2LT5zaXplKQotCQkJc2l6ZSA9IHN1YmRldi0+c2l6ZSAtIHRvOwotCQllbHNlCi0JCQlzaXplID0gbGVuOwogCi0JCWlmICghKHN1YmRldi0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKLQkJCWVyciA9IC1FUk9GUzsKLQkJZWxzZSBpZiAoc3ViZGV2LT53cml0ZV9vb2IpCi0JCQllcnIgPSBzdWJkZXYtPndyaXRlX29vYihzdWJkZXYsIHRvLCBzaXplLCAmcmV0c2l6ZSwKLQkJCQkJCWJ1Zik7Ci0JCWVsc2UKLQkJCWVyciA9IC1FSU5WQUw7CisJCS8qIHBhcnRpYWwgd3JpdGUgPyAqLworCQlpZiAodG8gKyBkZXZvcHMubGVuID4gc3ViZGV2LT5zaXplKQorCQkJZGV2b3BzLmxlbiA9IHN1YmRldi0+c2l6ZSAtIHRvOwogCisJCWVyciA9IHN1YmRldi0+d3JpdGVfb29iKHN1YmRldiwgdG8sICZkZXZvcHMpOworCQlvcHMtPnJldGxlbiArPSBkZXZvcHMucmV0bGVuOwogCQlpZiAoZXJyKQotCQkJYnJlYWs7CisJCQlyZXR1cm4gZXJyOwogCi0JCSpyZXRsZW4gKz0gcmV0c2l6ZTsKLQkJbGVuIC09IHNpemU7Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWJyZWFrOworCQlkZXZvcHMubGVuID0gb3BzLT5sZW4gLSBvcHMtPnJldGxlbjsKKwkJaWYgKCFkZXZvcHMubGVuKQorCQkJcmV0dXJuIDA7CiAKLQkJZXJyID0gLUVJTlZBTDsKLQkJYnVmICs9IHNpemU7CisJCWlmIChkZXZvcHMuZGF0YnVmKQorCQkJZGV2b3BzLmRhdGJ1ZiArPSBkZXZvcHMucmV0bGVuOworCQlpZiAoZGV2b3BzLm9vYmJ1ZikKKwkJCWRldm9wcy5vb2JidWYgKz0gZGV2b3BzLm9vYmxlbjsKIAkJdG8gPSAwOwogCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdm9pZCBjb25jYXRfZXJhc2VfY2FsbGJhY2soc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQpAQCAtNjM2LDYgKzYyMiw2MCBAQAogCX0KIH0KIAorc3RhdGljIGludCBjb25jYXRfYmxvY2tfaXNiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCit7CisJc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOworCWludCBpLCByZXMgPSAwOworCisJaWYgKCFjb25jYXQtPnN1YmRldlswXS0+YmxvY2tfaXNiYWQpCisJCXJldHVybiByZXM7CisKKwlpZiAob2ZzID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJkZXY7IGkrKykgeworCQlzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOworCisJCWlmIChvZnMgPj0gc3ViZGV2LT5zaXplKSB7CisJCQlvZnMgLT0gc3ViZGV2LT5zaXplOworCQkJY29udGludWU7CisJCX0KKworCQlyZXMgPSBzdWJkZXYtPmJsb2NrX2lzYmFkKHN1YmRldiwgb2ZzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBjb25jYXRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKK3sKKwlzdHJ1Y3QgbXRkX2NvbmNhdCAqY29uY2F0ID0gQ09OQ0FUKG10ZCk7CisJaW50IGksIGVyciA9IC1FSU5WQUw7CisKKwlpZiAoIWNvbmNhdC0+c3ViZGV2WzBdLT5ibG9ja19tYXJrYmFkKQorCQlyZXR1cm4gMDsKKworCWlmIChvZnMgPiBtdGQtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGNvbmNhdC0+bnVtX3N1YmRldjsgaSsrKSB7CisJCXN0cnVjdCBtdGRfaW5mbyAqc3ViZGV2ID0gY29uY2F0LT5zdWJkZXZbaV07CisKKwkJaWYgKG9mcyA+PSBzdWJkZXYtPnNpemUpIHsKKwkJCW9mcyAtPSBzdWJkZXYtPnNpemU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWVyciA9IHN1YmRldi0+YmxvY2tfbWFya2JhZChzdWJkZXYsIG9mcyk7CisJCWlmICghZXJyKQorCQkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgYSB2aXJ0dWFsIE1URCBkZXZpY2UgYnkgY29uY2F0ZW5hdGluZwogICogbnVtX2RldnMgTVREIGRldmljZXMuIEEgcG9pbnRlciB0byB0aGUgbmV3IGRldmljZSBvYmplY3QgaXMKQEAgLTY3NywxOCArNzE3LDIyIEBACiAJY29uY2F0LT5tdGQuZmxhZ3MgPSBzdWJkZXZbMF0tPmZsYWdzOwogCWNvbmNhdC0+bXRkLnNpemUgPSBzdWJkZXZbMF0tPnNpemU7CiAJY29uY2F0LT5tdGQuZXJhc2VzaXplID0gc3ViZGV2WzBdLT5lcmFzZXNpemU7Ci0JY29uY2F0LT5tdGQub29iYmxvY2sgPSBzdWJkZXZbMF0tPm9vYmJsb2NrOworCWNvbmNhdC0+bXRkLndyaXRlc2l6ZSA9IHN1YmRldlswXS0+d3JpdGVzaXplOwogCWNvbmNhdC0+bXRkLm9vYnNpemUgPSBzdWJkZXZbMF0tPm9vYnNpemU7CiAJY29uY2F0LT5tdGQuZWNjdHlwZSA9IHN1YmRldlswXS0+ZWNjdHlwZTsKIAljb25jYXQtPm10ZC5lY2NzaXplID0gc3ViZGV2WzBdLT5lY2NzaXplOwotCWlmIChzdWJkZXZbMF0tPnJlYWRfZWNjKQotCQljb25jYXQtPm10ZC5yZWFkX2VjYyA9IGNvbmNhdF9yZWFkX2VjYzsKLQlpZiAoc3ViZGV2WzBdLT53cml0ZV9lY2MpCi0JCWNvbmNhdC0+bXRkLndyaXRlX2VjYyA9IGNvbmNhdF93cml0ZV9lY2M7CisJaWYgKHN1YmRldlswXS0+d3JpdGV2KQorCQljb25jYXQtPm10ZC53cml0ZXYgPSBjb25jYXRfd3JpdGV2OwogCWlmIChzdWJkZXZbMF0tPnJlYWRfb29iKQogCQljb25jYXQtPm10ZC5yZWFkX29vYiA9IGNvbmNhdF9yZWFkX29vYjsKIAlpZiAoc3ViZGV2WzBdLT53cml0ZV9vb2IpCiAJCWNvbmNhdC0+bXRkLndyaXRlX29vYiA9IGNvbmNhdF93cml0ZV9vb2I7CisJaWYgKHN1YmRldlswXS0+YmxvY2tfaXNiYWQpCisJCWNvbmNhdC0+bXRkLmJsb2NrX2lzYmFkID0gY29uY2F0X2Jsb2NrX2lzYmFkOworCWlmIChzdWJkZXZbMF0tPmJsb2NrX21hcmtiYWQpCisJCWNvbmNhdC0+bXRkLmJsb2NrX21hcmtiYWQgPSBjb25jYXRfYmxvY2tfbWFya2JhZDsKKworCWNvbmNhdC0+bXRkLmVjY19zdGF0cy5iYWRibG9ja3MgPSBzdWJkZXZbMF0tPmVjY19zdGF0cy5iYWRibG9ja3M7CiAKIAljb25jYXQtPnN1YmRldlswXSA9IHN1YmRldlswXTsKIApAQCAtNzE3LDEyICs3NjEsMTIgQEAKIAkJCQkgICAgc3ViZGV2W2ldLT5mbGFncyAmIE1URF9XUklURUFCTEU7CiAJCX0KIAkJY29uY2F0LT5tdGQuc2l6ZSArPSBzdWJkZXZbaV0tPnNpemU7Ci0JCWlmIChjb25jYXQtPm10ZC5vb2JibG9jayAgICE9ICBzdWJkZXZbaV0tPm9vYmJsb2NrIHx8CisJCWNvbmNhdC0+bXRkLmVjY19zdGF0cy5iYWRibG9ja3MgKz0KKwkJCXN1YmRldltpXS0+ZWNjX3N0YXRzLmJhZGJsb2NrczsKKwkJaWYgKGNvbmNhdC0+bXRkLndyaXRlc2l6ZSAgICE9ICBzdWJkZXZbaV0tPndyaXRlc2l6ZSB8fAogCQkgICAgY29uY2F0LT5tdGQub29ic2l6ZSAgICAhPSAgc3ViZGV2W2ldLT5vb2JzaXplIHx8CiAJCSAgICBjb25jYXQtPm10ZC5lY2N0eXBlICAgICE9ICBzdWJkZXZbaV0tPmVjY3R5cGUgfHwKIAkJICAgIGNvbmNhdC0+bXRkLmVjY3NpemUgICAgIT0gIHN1YmRldltpXS0+ZWNjc2l6ZSB8fAotCQkgICAgIWNvbmNhdC0+bXRkLnJlYWRfZWNjICAhPSAhc3ViZGV2W2ldLT5yZWFkX2VjYyB8fAotCQkgICAgIWNvbmNhdC0+bXRkLndyaXRlX2VjYyAhPSAhc3ViZGV2W2ldLT53cml0ZV9lY2MgfHwKIAkJICAgICFjb25jYXQtPm10ZC5yZWFkX29vYiAgIT0gIXN1YmRldltpXS0+cmVhZF9vb2IgfHwKIAkJICAgICFjb25jYXQtPm10ZC53cml0ZV9vb2IgIT0gIXN1YmRldltpXS0+d3JpdGVfb29iKSB7CiAJCQlrZnJlZShjb25jYXQpOwpAQCAtNzM0LDE0ICs3NzgsMTEgQEAKIAogCX0KIAorCWNvbmNhdC0+bXRkLmVjY2xheW91dCA9IHN1YmRldlswXS0+ZWNjbGF5b3V0OworCiAJY29uY2F0LT5udW1fc3ViZGV2ID0gbnVtX2RldnM7CiAJY29uY2F0LT5tdGQubmFtZSA9IG5hbWU7CiAKLQkvKgotCSAqIE5PVEU6IGZvciBub3csIHdlIGRvIG5vdCBwcm92aWRlIGFueSByZWFkdigpL3dyaXRldigpIG1ldGhvZHMKLQkgKiAgICAgICBiZWNhdXNlIHRoZXkgYXJlIG1lc3N5IHRvIGltcGxlbWVudCBhbmQgdGhleSBhcmUgbm90Ci0JICogICAgICAgdXNlZCB0byBhIGdyZWF0IGV4dGVudCBhbnl3YXkuCi0JICovCiAJY29uY2F0LT5tdGQuZXJhc2UgPSBjb25jYXRfZXJhc2U7CiAJY29uY2F0LT5tdGQucmVhZCA9IGNvbmNhdF9yZWFkOwogCWNvbmNhdC0+bXRkLndyaXRlID0gY29uY2F0X3dyaXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY29yZS5jIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCmluZGV4IDk5MDU4NzAuLjE2YTk1MmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCkBAIC00Nyw2ICs0Nyw3IEBACiB7CiAJaW50IGk7CiAKKwlCVUdfT04obXRkLT53cml0ZXNpemUgPT0gMCk7CiAJbXV0ZXhfbG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAogCWZvciAoaT0wOyBpIDwgTUFYX01URF9ERVZJQ0VTOyBpKyspCkBAIC0yNTQsMzcgKzI1NSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi0vKiBkZWZhdWx0X210ZF9yZWFkdiAtIGRlZmF1bHQgbXRkIHJlYWR2IG1ldGhvZCBmb3IgTVREIGRldmljZXMgdGhhdCBkb250Ci0gKgkJICAgICAgIGltcGxlbWVudCB0aGVpciBvd24KLSAqLwotCi1pbnQgZGVmYXVsdF9tdGRfcmVhZHYoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBrdmVjICp2ZWNzLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgZnJvbSwgc2l6ZV90ICpyZXRsZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCXNpemVfdCB0b3RsZW4gPSAwLCB0aGlzbGVuOwotCWludCByZXQgPSAwOwotCi0JaWYoIW10ZC0+cmVhZCkgewotCQlyZXQgPSAtRUlPOwotCX0gZWxzZSB7Ci0JCWZvciAoaT0wOyBpPGNvdW50OyBpKyspIHsKLQkJCWlmICghdmVjc1tpXS5pb3ZfbGVuKQotCQkJCWNvbnRpbnVlOwotCQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgZnJvbSwgdmVjc1tpXS5pb3ZfbGVuLCAmdGhpc2xlbiwgdmVjc1tpXS5pb3ZfYmFzZSk7Ci0JCQl0b3RsZW4gKz0gdGhpc2xlbjsKLQkJCWlmIChyZXQgfHwgdGhpc2xlbiAhPSB2ZWNzW2ldLmlvdl9sZW4pCi0JCQkJYnJlYWs7Ci0JCQlmcm9tICs9IHZlY3NbaV0uaW92X2xlbjsKLQkJfQotCX0KLQlpZiAocmV0bGVuKQotCQkqcmV0bGVuID0gdG90bGVuOwotCXJldHVybiByZXQ7Ci19Ci0KLQogRVhQT1JUX1NZTUJPTChhZGRfbXRkX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKGRlbF9tdGRfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0woZ2V0X210ZF9kZXZpY2UpOwpAQCAtMjkyLDcgKzI2Miw2IEBACiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX210ZF91c2VyKTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9tdGRfdXNlcik7CiBFWFBPUlRfU1lNQk9MKGRlZmF1bHRfbXRkX3dyaXRldik7Ci1FWFBPUlRfU1lNQk9MKGRlZmF1bHRfbXRkX3JlYWR2KTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwppbmRleCA5OTM5NTkxLi43N2E3MTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCkBAIC01MSwxNiArNTEsMjEgQEAKIAkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CisJaW50IHJlczsKKwogCWlmIChmcm9tID49IG10ZC0+c2l6ZSkKIAkJbGVuID0gMDsKIAllbHNlIGlmIChmcm9tICsgbGVuID4gbXRkLT5zaXplKQogCQlsZW4gPSBtdGQtPnNpemUgLSBmcm9tOwotCWlmIChwYXJ0LT5tYXN0ZXItPnJlYWRfZWNjID09IE5VTEwpCi0JCXJldHVybiBwYXJ0LT5tYXN0ZXItPnJlYWQgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1Zik7Ci0JZWxzZQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT5yZWFkX2VjYyAocGFydC0+bWFzdGVyLCBmcm9tICsgcGFydC0+b2Zmc2V0LAotCQkJCQlsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCAmbXRkLT5vb2JpbmZvKTsKKwlyZXMgPSBwYXJ0LT5tYXN0ZXItPnJlYWQgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKKwkJCQkgICBsZW4sIHJldGxlbiwgYnVmKTsKKwlpZiAodW5saWtlbHkocmVzKSkgeworCQlpZiAocmVzID09IC1FVUNMRUFOKQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkKys7CisJCWlmIChyZXMgPT0gLUVCQURNU0cpCisJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwl9CisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludCBwYXJ0X3BvaW50IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCkBAIC03NCw2ICs3OSw3IEBACiAJcmV0dXJuIHBhcnQtPm1hc3Rlci0+cG9pbnQgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKIAkJCQkgICAgbGVuLCByZXRsZW4sIGJ1Zik7CiB9CisKIHN0YXRpYyB2b2lkIHBhcnRfdW5wb2ludCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYWRkciwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwpAQCAtODEsMzEgKzg3LDI1IEBACiAJcGFydC0+bWFzdGVyLT51bnBvaW50IChwYXJ0LT5tYXN0ZXIsIGFkZHIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsIGxlbik7CiB9CiAKLQotc3RhdGljIGludCBwYXJ0X3JlYWRfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYsIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCitzdGF0aWMgaW50IHBhcnRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewogCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKLQlpZiAob29ic2VsID09IE5VTEwpCi0JCW9vYnNlbCA9ICZtdGQtPm9vYmluZm87Ci0JaWYgKGZyb20gPj0gbXRkLT5zaXplKQotCQlsZW4gPSAwOwotCWVsc2UgaWYgKGZyb20gKyBsZW4gPiBtdGQtPnNpemUpCi0JCWxlbiA9IG10ZC0+c2l6ZSAtIGZyb207Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZF9lY2MgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1ZiwgZWNjYnVmLCBvb2JzZWwpOwotfQorCWludCByZXM7CiAKLXN0YXRpYyBpbnQgcGFydF9yZWFkX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKIAlpZiAoZnJvbSA+PSBtdGQtPnNpemUpCi0JCWxlbiA9IDA7Ci0JZWxzZSBpZiAoZnJvbSArIGxlbiA+IG10ZC0+c2l6ZSkKLQkJbGVuID0gbXRkLT5zaXplIC0gZnJvbTsKLQlyZXR1cm4gcGFydC0+bWFzdGVyLT5yZWFkX29vYiAocGFydC0+bWFzdGVyLCBmcm9tICsgcGFydC0+b2Zmc2V0LAotCQkJCQlsZW4sIHJldGxlbiwgYnVmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZyb20gKyBvcHMtPmxlbiA+IG10ZC0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmVzID0gcGFydC0+bWFzdGVyLT5yZWFkX29vYihwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsIG9wcyk7CisKKwlpZiAodW5saWtlbHkocmVzKSkgeworCQlpZiAocmVzID09IC1FVUNMRUFOKQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkKys7CisJCWlmIChyZXMgPT0gLUVCQURNU0cpCisJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwl9CisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludCBwYXJ0X3JlYWRfdXNlcl9wcm90X3JlZyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLApAQCAtMTQ4LDQ0ICsxNDgsMjMgQEAKIAkJbGVuID0gMDsKIAllbHNlIGlmICh0byArIGxlbiA+IG10ZC0+c2l6ZSkKIAkJbGVuID0gbXRkLT5zaXplIC0gdG87Ci0JaWYgKHBhcnQtPm1hc3Rlci0+d3JpdGVfZWNjID09IE5VTEwpCi0JCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRlIChwYXJ0LT5tYXN0ZXIsIHRvICsgcGFydC0+b2Zmc2V0LAotCQkJCQlsZW4sIHJldGxlbiwgYnVmKTsKLQllbHNlCi0JCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRlX2VjYyAocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1ZiwgTlVMTCwgJm10ZC0+b29iaW5mbyk7Ci0KKwlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZSAocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwKKwkJCQkgICAgbGVuLCByZXRsZW4sIGJ1Zik7CiB9CiAKLXN0YXRpYyBpbnQgcGFydF93cml0ZV9lY2MgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYsCi0JCQkgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKK3N0YXRpYyBpbnQgcGFydF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7Ci0JaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQotCQlyZXR1cm4gLUVST0ZTOwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQlpZiAodG8gPj0gbXRkLT5zaXplKQotCQlsZW4gPSAwOwotCWVsc2UgaWYgKHRvICsgbGVuID4gbXRkLT5zaXplKQotCQlsZW4gPSBtdGQtPnNpemUgLSB0bzsKLQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZV9lY2MgKHBhcnQtPm1hc3RlciwgdG8gKyBwYXJ0LT5vZmZzZXQsCi0JCQkJCWxlbiwgcmV0bGVuLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKLX0KIAotc3RhdGljIGludCBwYXJ0X3dyaXRlX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOworCiAJaWYgKHRvID49IG10ZC0+c2l6ZSkKLQkJbGVuID0gMDsKLQllbHNlIGlmICh0byArIGxlbiA+IG10ZC0+c2l6ZSkKLQkJbGVuID0gbXRkLT5zaXplIC0gdG87Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGVfb29iIChwYXJ0LT5tYXN0ZXIsIHRvICsgcGFydC0+b2Zmc2V0LAotCQkJCQlsZW4sIHJldGxlbiwgYnVmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHRvICsgb3BzLT5sZW4gPiBtdGQtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRlX29vYihwYXJ0LT5tYXN0ZXIsIHRvICsgcGFydC0+b2Zmc2V0LCBvcHMpOwogfQogCiBzdGF0aWMgaW50IHBhcnRfd3JpdGVfdXNlcl9wcm90X3JlZyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLApAQCAtMjA4LDUyICsxODcsOCBAQAogCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKIAlpZiAoIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCiAJCXJldHVybiAtRVJPRlM7Ci0JaWYgKHBhcnQtPm1hc3Rlci0+d3JpdGV2X2VjYyA9PSBOVUxMKQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZXYgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCisJcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGV2IChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAogCQkJCQl0byArIHBhcnQtPm9mZnNldCwgcmV0bGVuKTsKLQllbHNlCi0JCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRldl9lY2MgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCi0JCQkJCXRvICsgcGFydC0+b2Zmc2V0LCByZXRsZW4sCi0JCQkJCU5VTEwsICZtdGQtPm9vYmluZm8pOwotfQotCi1zdGF0aWMgaW50IHBhcnRfcmVhZHYgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCAgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQkgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IGZyb20sIHNpemVfdCAqcmV0bGVuKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKLQlpZiAocGFydC0+bWFzdGVyLT5yZWFkdl9lY2MgPT0gTlVMTCkKLQkJcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZHYgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCi0JCQkJCWZyb20gKyBwYXJ0LT5vZmZzZXQsIHJldGxlbik7Ci0JZWxzZQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT5yZWFkdl9lY2MgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCi0JCQkJCWZyb20gKyBwYXJ0LT5vZmZzZXQsIHJldGxlbiwKLQkJCQkJTlVMTCwgJm10ZC0+b29iaW5mbyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFydF93cml0ZXZfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4sCi0JCQkgdV9jaGFyICplY2NidWYsICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwotCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKLQkJcmV0dXJuIC1FUk9GUzsKLQlpZiAob29ic2VsID09IE5VTEwpCi0JCW9vYnNlbCA9ICZtdGQtPm9vYmluZm87Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGV2X2VjYyAocGFydC0+bWFzdGVyLCB2ZWNzLCBjb3VudCwKLQkJCQkJdG8gKyBwYXJ0LT5vZmZzZXQsIHJldGxlbiwKLQkJCQkJZWNjYnVmLCBvb2JzZWwpOwotfQotCi1zdGF0aWMgaW50IHBhcnRfcmVhZHZfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgIHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbiwKLQkJCSB1X2NoYXIgKmVjY2J1ZiwgIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7Ci0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPnJlYWR2X2VjYyAocGFydC0+bWFzdGVyLCB2ZWNzLCBjb3VudCwKLQkJCQkJZnJvbSArIHBhcnQtPm9mZnNldCwgcmV0bGVuLAotCQkJCQllY2NidWYsIG9vYnNlbCk7CiB9CiAKIHN0YXRpYyBpbnQgcGFydF9lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKQEAgLTMyOSwxMiArMjY0LDE3IEBACiBzdGF0aWMgaW50IHBhcnRfYmxvY2tfbWFya2JhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCiB7CiAJc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOworCWludCByZXM7CisKIAlpZiAoIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCiAJCXJldHVybiAtRVJPRlM7CiAJaWYgKG9mcyA+PSBtdGQtPnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCW9mcyArPSBwYXJ0LT5vZmZzZXQ7Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+YmxvY2tfbWFya2JhZChwYXJ0LT5tYXN0ZXIsIG9mcyk7CisJcmVzID0gcGFydC0+bWFzdGVyLT5ibG9ja19tYXJrYmFkKHBhcnQtPm1hc3Rlciwgb2ZzKTsKKwlpZiAoIXJlcykKKwkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CisJcmV0dXJuIHJlczsKIH0KIAogLyoKQEAgLTM5OCw3ICszMzgsNyBAQAogCQlzbGF2ZS0+bXRkLnR5cGUgPSBtYXN0ZXItPnR5cGU7CiAJCXNsYXZlLT5tdGQuZmxhZ3MgPSBtYXN0ZXItPmZsYWdzICYgfnBhcnRzW2ldLm1hc2tfZmxhZ3M7CiAJCXNsYXZlLT5tdGQuc2l6ZSA9IHBhcnRzW2ldLnNpemU7Ci0JCXNsYXZlLT5tdGQub29iYmxvY2sgPSBtYXN0ZXItPm9vYmJsb2NrOworCQlzbGF2ZS0+bXRkLndyaXRlc2l6ZSA9IG1hc3Rlci0+d3JpdGVzaXplOwogCQlzbGF2ZS0+bXRkLm9vYnNpemUgPSBtYXN0ZXItPm9vYnNpemU7CiAJCXNsYXZlLT5tdGQuZWNjdHlwZSA9IG1hc3Rlci0+ZWNjdHlwZTsKIAkJc2xhdmUtPm10ZC5lY2NzaXplID0gbWFzdGVyLT5lY2NzaXplOwpAQCAtNDE1LDEwICszNTUsNiBAQAogCQkJc2xhdmUtPm10ZC51bnBvaW50ID0gcGFydF91bnBvaW50OwogCQl9CiAKLQkJaWYgKG1hc3Rlci0+cmVhZF9lY2MpCi0JCQlzbGF2ZS0+bXRkLnJlYWRfZWNjID0gcGFydF9yZWFkX2VjYzsKLQkJaWYgKG1hc3Rlci0+d3JpdGVfZWNjKQotCQkJc2xhdmUtPm10ZC53cml0ZV9lY2MgPSBwYXJ0X3dyaXRlX2VjYzsKIAkJaWYgKG1hc3Rlci0+cmVhZF9vb2IpCiAJCQlzbGF2ZS0+bXRkLnJlYWRfb29iID0gcGFydF9yZWFkX29vYjsKIAkJaWYgKG1hc3Rlci0+d3JpdGVfb29iKQpAQCAtNDQzLDEyICszNzksNiBAQAogCQl9CiAJCWlmIChtYXN0ZXItPndyaXRldikKIAkJCXNsYXZlLT5tdGQud3JpdGV2ID0gcGFydF93cml0ZXY7Ci0JCWlmIChtYXN0ZXItPnJlYWR2KQotCQkJc2xhdmUtPm10ZC5yZWFkdiA9IHBhcnRfcmVhZHY7Ci0JCWlmIChtYXN0ZXItPndyaXRldl9lY2MpCi0JCQlzbGF2ZS0+bXRkLndyaXRldl9lY2MgPSBwYXJ0X3dyaXRldl9lY2M7Ci0JCWlmIChtYXN0ZXItPnJlYWR2X2VjYykKLQkJCXNsYXZlLT5tdGQucmVhZHZfZWNjID0gcGFydF9yZWFkdl9lY2M7CiAJCWlmIChtYXN0ZXItPmxvY2spCiAJCQlzbGF2ZS0+bXRkLmxvY2sgPSBwYXJ0X2xvY2s7CiAJCWlmIChtYXN0ZXItPnVubG9jaykKQEAgLTUyOCw4ICs0NTgsMTcgQEAKIAkJCQlwYXJ0c1tpXS5uYW1lKTsKIAkJfQogCi0JCS8qIGNvcHkgb29iaW5mbyBmcm9tIG1hc3RlciAqLwotCQltZW1jcHkoJnNsYXZlLT5tdGQub29iaW5mbywgJm1hc3Rlci0+b29iaW5mbywgc2l6ZW9mKHNsYXZlLT5tdGQub29iaW5mbykpOworCQlzbGF2ZS0+bXRkLmVjY2xheW91dCA9IG1hc3Rlci0+ZWNjbGF5b3V0OworCQlpZiAobWFzdGVyLT5ibG9ja19pc2JhZCkgeworCQkJdWludDMyX3Qgb2ZmcyA9IDA7CisKKwkJCXdoaWxlKG9mZnMgPCBzbGF2ZS0+bXRkLnNpemUpIHsKKwkJCQlpZiAobWFzdGVyLT5ibG9ja19pc2JhZChtYXN0ZXIsCisJCQkJCQkJb2ZmcyArIHNsYXZlLT5vZmZzZXQpKQorCQkJCQlzbGF2ZS0+bXRkLmVjY19zdGF0cy5iYWRibG9ja3MrKzsKKwkJCQlvZmZzICs9IHNsYXZlLT5tdGQuZXJhc2VzaXplOworCQkJfQorCQl9CiAKIAkJaWYocGFydHNbaV0ubXRkcCkKIAkJewkvKiBzdG9yZSB0aGUgb2JqZWN0IHBvaW50ZXIgKGNhbGxlciBtYXkgb3IgbWF5IG5vdCByZWdpc3RlciBpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IGNmZTI4OGEuLjNkYjc3ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTIzLDYgKzIzLDE0IEBACiAJICBkZXZpY2UgdGhpbmtzIHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bCwgYSBiaXQgY291bGQgaGF2ZSBiZWVuCiAJICBmbGlwcGVkIGFjY2lkZW50YWx5IGR1ZSB0byBkZXZpY2Ugd2VhciBvciBzb21ldGhpbmcgZWxzZS4KIAorY29uZmlnIE1URF9OQU5EX0VDQ19TTUMKKwlib29sICJOQU5EIEVDQyBTbWFydCBNZWRpYSBieXRlIG9yZGVyIgorCWRlcGVuZHMgb24gTVREX05BTkQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTb2Z0d2FyZSBFQ0MgYWNjb3JkaW5nIHRvIHRoZSBTbWFydCBNZWRpYSBTcGVjaWZpY2F0aW9uLgorCSAgVGhlIG9yaWdpbmFsIExpbnV4IGltcGxlbWVudGF0aW9uIGhhZCBieXRlIDAgYW5kIDEgc3dhcHBlZC4KKwogY29uZmlnIE1URF9OQU5EX0FVVENQVTEyCiAJdHJpc3RhdGUgIlNtYXJ0TWVkaWFDYXJkIG9uIGF1dHJvbml4IGF1dGNwdTEyIGJvYXJkIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgQVJDSF9BVVRDUFUxMgpAQCAtNDksMTIgKzU3LDI0IEBACiAJaGVscAogCSAgSWYgeW91IGhhZCB0byBhc2ssIHlvdSBkb24ndCBoYXZlIG9uZS4gU2F5ICdOJy4KIAorY29uZmlnIE1URF9OQU5EX0FNU19ERUxUQQorCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBBbXN0cmFkIEUzIgorCWRlcGVuZHMgb24gTUFDSF9BTVNfREVMVEEgJiYgTVREX05BTkQKKwloZWxwCisJICBTdXBwb3J0IGZvciBOQU5EIGZsYXNoIG9uIEFtc3RyYWQgRTMgKERlbHRhKS4KKwogY29uZmlnIE1URF9OQU5EX1RPVE8KIAl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gVE9UTyBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUCAmJiBNVERfTkFORAorCWRlcGVuZHMgb24gQVJDSF9PTUFQICYmIE1URF9OQU5EICYmIEJST0tFTgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gVGV4YXMgSW5zdHJ1bWVudHMgVG90byBwbGF0Zm9ybS4KIAorY29uZmlnIE1URF9OQU5EX1RTNzI1MAorCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBUUy03MjUwIGJvYXJkIgorCWRlcGVuZHMgb24gTUFDSF9UUzcyWFggJiYgTVREX05BTkQKKwloZWxwCisJICBTdXBwb3J0IGZvciBOQU5EIGZsYXNoIG9uIFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzI1MCBwbGF0Zm9ybS4KKwogY29uZmlnIE1URF9OQU5EX0lEUwogCXRyaXN0YXRlCiAKQEAgLTc2LDcgKzk2LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX1BQQ0hBTUVMRU9ORVZCCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFBQQ2hhbWVsZW9uRVZCIGJvYXJkIgotCWRlcGVuZHMgb24gUFBDSEFNRUxFT05FVkIgJiYgTVREX05BTkQKKwlkZXBlbmRzIG9uIFBQQ0hBTUVMRU9ORVZCICYmIE1URF9OQU5EICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgTkFORCBmbGFzaCBkcml2ZXIgb24gdGhlIFBQQ2hhbWVsZW9uIEVWQiBCb2FyZC4KIApAQCAtODcsNyArMTA3LDcgQEAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIHRoZSBTM0MyNDEwIGFuZCBTM0MyNDQwCiAJICBTb0NzCiAKLQkgIE5vIGJvYXJkIHNwZWNmaWMgc3VwcG9ydCBpcyBkb25lIGJ5IHRoaXMgZHJpdmVyLCBlYWNoIGJvYXJkCisJICBObyBib2FyZCBzcGVjaWZpYyBzdXBwb3J0IGlzIGRvbmUgYnkgdGhpcyBkcml2ZXIsIGVhY2ggYm9hcmQKIAkgIG11c3QgYWR2ZXJ0aXNlIGEgcGxhdGZvcm1fZGV2aWNlIGZvciB0aGUgZHJpdmVyIHRvIGF0dGFjaC4KIAogY29uZmlnIE1URF9OQU5EX1MzQzI0MTBfREVCVUcKQEAgLTEwOSw2ICsxMjksMjIgQEAKIAkgIGN1cnJlbnRseSBub3QgYmUgYWJsZSB0byBzd2l0Y2ggdG8gc29mdHdhcmUsIGFzIHRoZXJlIGlzIG5vCiAJICBpbXBsZW1lbnRhdGlvbiBmb3IgRUNDIG1ldGhvZCB1c2VkIGJ5IHRoZSBTM0MyNDEwCiAKK2NvbmZpZyBNVERfTkFORF9OREZDCisJdHJpc3RhdGUgIk5ERkMgTmFuRCBGbGFzaCBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgNDR4CisJaGVscAorCSBOREZDIE5hbmQgRmxhc2ggQ29udHJvbGxlcnMgYXJlIGludGVncmF0ZWQgaW4gRVA0NHggU29DcworCitjb25maWcgTVREX05BTkRfUzNDMjQxMF9DTEtTVE9QCisJYm9vbCAiUzNDMjQxMCBOQU5EIElETEUgY2xvY2sgc3RvcCIKKwlkZXBlbmRzIG9uIE1URF9OQU5EX1MzQzI0MTAKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTdG9wIHRoZSBjbG9jayB0byB0aGUgTkFORCBjb250cm9sbGVyIHdoZW4gdGhlcmUgaXMgbm8gY2hpcAorCSAgc2VsZWN0ZWQgdG8gc2F2ZSBwb3dlci4gVGhpcyB3aWxsIG1lYW4gdGhlcmUgaXMgYSBzbWFsbCBkZWxheQorCSAgd2hlbiB0aGUgaXMgTkFORCBjaGlwIHNlbGVjdGVkIG9yIHJlbGVhc2VkLCBidXQgd2lsbCBzYXZlCisJICBhcHByb3hpbWF0ZWx5IDVtQSBvZiBwb3dlciB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgaGFwcGVuaW5nLgorCiBjb25maWcgTVREX05BTkRfRElTS09OQ0hJUAogCXRyaXN0YXRlICJEaXNrT25DaGlwIDIwMDAsIE1pbGxlbm5pdW0gYW5kIE1pbGxlbm5pdW0gUGx1cyAoTkFORCByZWltcGxlbWVudGF0aW9uKSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIEVYUEVSSU1FTlRBTApAQCAtMTgzLDExICsyMTksMjQgQEAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBTaGFycCBTTCBTZXJpZXMgKEM3eHggKyBvdGhlcnMpIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgQVJDSF9QWEEKIAorY29uZmlnIE1URF9OQU5EX0NTNTUzWAorCXRyaXN0YXRlICJOQU5EIHN1cHBvcnQgZm9yIENTNTUzNS9DUzU1MzYgKEFNRCBHZW9kZSBjb21wYW5pb24gY2hpcCkiCisJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBYODZfMzIgJiYgKFg4Nl9QQyB8fCBYODZfR0VORVJJQ0FSQ0gpCisJaGVscAorCSAgVGhlIENTNTUzeCBjb21wYW5pb24gY2hpcHMgZm9yIHRoZSBBTUQgR2VvZGUgcHJvY2Vzc29yCisJICBpbmNsdWRlIE5BTkQgZmxhc2ggY29udHJvbGxlcnMgd2l0aCBidWlsdC1pbiBoYXJkd2FyZSBFQ0MKKwkgIGNhcGFiaWxpdGllczsgZW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBhbGxvdyB5b3UgdG8gdXNlCisJICB0aGVzZS4gVGhlIGRyaXZlciB3aWxsIGNoZWNrIHRoZSBNU1JzIHRvIHZlcmlmeSB0aGF0IHRoZQorCSAgY29udHJvbGxlciBpcyBlbmFibGVkIGZvciBOQU5ELCBhbmQgY3VycmVudGx5IHJlcXVpcmVzIHRoYXQKKwkgIHRoZSBjb250cm9sbGVyIGJlIGluIE1NSU8gbW9kZS4KKworCSAgSWYgeW91IHNheSAibSIsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgImNzNTUzeF9uYW5kLmtvIi4KKwogY29uZmlnIE1URF9OQU5EX05BTkRTSU0KIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBTaW11bGF0b3IiCiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBNVERfUEFSVElUSU9OUwogCWhlbHAKLQkgIFRoZSBzaW11bGF0b3IgbWF5IHNpbXVsYXRlIHZlcmlvdXMgTkFORCBmbGFzaCBjaGlwcyBmb3IgdGhlCisJICBUaGUgc2ltdWxhdG9yIG1heSBzaW11bGF0ZSB2YXJpb3VzIE5BTkQgZmxhc2ggY2hpcHMgZm9yIHRoZQogCSAgTVREIG5hbmQgbGF5ZXIuCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCmluZGV4IDQxNzQyMDIuLmY3NDc1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIG9iai0kKENPTkZJR19NVERfTkFORF9JRFMpCQkrPSBuYW5kX2lkcy5vCiAKIG9iai0kKENPTkZJR19NVERfTkFORF9TUElBKQkJKz0gc3BpYS5vCitvYmotJChDT05GSUdfTVREX05BTkRfQU1TX0RFTFRBKQkrPSBhbXMtZGVsdGEubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1RPVE8pCQkrPSB0b3RvLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9BVVRDUFUxMikJCSs9IGF1dGNwdTEyLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9FREI3MzEyKQkJKz0gZWRiNzMxMi5vCkBAIC0xNyw2ICsxOCw5IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfSDE5MDApCQkrPSBoMTkxMC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfUlRDX0ZST000KQkrPSBydGNfZnJvbTQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1NIQVJQU0wpCQkrPSBzaGFycHNsLm8KK29iai0kKENPTkZJR19NVERfTkFORF9UUzcyNTApCQkrPSB0czcyNTAubwogb2JqLSQoQ09ORklHX01URF9OQU5EX05BTkRTSU0pCQkrPSBuYW5kc2ltLm8KK29iai0kKENPTkZJR19NVERfTkFORF9DUzU1M1gpCQkrPSBjczU1M3hfbmFuZC5vCitvYmotJChDT05GSUdfTVREX05BTkRfTkRGQykJCSs9IG5kZmMubwogCiBuYW5kLW9ianMgPSBuYW5kX2Jhc2UubyBuYW5kX2JidC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jIGIvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzg5N2RjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqICBkcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBKb25hdGhhbiBNY0Rvd2VsbCA8bm9vZGxlc0BlYXJ0aC5saT4KKyAqCisgKiAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL3RvdG8uYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIE92ZXJ2aWV3OgorICogICBUaGlzIGlzIGEgZGV2aWNlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uIHRoZQorICogICBBbXN0cmFkIEUzIChEZWx0YSkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLWFtcy1kZWx0YS5oPgorCisvKgorICogTVREIHN0cnVjdHVyZSBmb3IgRTMgKERlbHRhKQorICovCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICphbXNfZGVsdGFfbXRkID0gTlVMTDsKKworI2RlZmluZSBOQU5EX01BU0sgKEFNU19ERUxUQV9MQVRDSDJfTkFORF9OUkUgfCBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFIHwgQU1TX0RFTFRBX0xBVENIMl9OQU5EX0NMRSB8IEFNU19ERUxUQV9MQVRDSDJfTkFORF9BTEUgfCBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTkNFIHwgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05XUCkKKworLyoKKyAqIERlZmluZSBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2VzCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7CisJeyAubmFtZQkJPSAiS2VybmVsIiwKKwkgIC5vZmZzZXQJPSAwLAorCSAgLnNpemUJCT0gMyAqIFNaXzFNICsgU1pfNTEySyB9LAorCXsgLm5hbWUJCT0gInUtYm9vdCIsCisJICAub2Zmc2V0CT0gMyAqIFNaXzFNICsgU1pfNTEySywKKwkgIC5zaXplCQk9IFNaXzI1NksgfSwKKwl7IC5uYW1lCQk9ICJ1LWJvb3QgcGFyYW1zIiwKKwkgIC5vZmZzZXQJPSAzICogU1pfMU0gKyBTWl81MTJLICsgU1pfMjU2SywKKwkgIC5zaXplCQk9IFNaXzI1NksgfSwKKwl7IC5uYW1lCQk9ICJBbXN0cmFkIExEUiIsCisJICAub2Zmc2V0CT0gNCAqIFNaXzFNLAorCSAgLnNpemUJCT0gU1pfMjU2SyB9LAorCXsgLm5hbWUJCT0gIkZpbGUgc3lzdGVtIiwKKwkgIC5vZmZzZXQJPSA0ICogU1pfMU0gKyAxICogU1pfMjU2SywKKwkgIC5zaXplCQk9IDI3ICogU1pfMU0gfSwKKwl7IC5uYW1lCQk9ICJQQkwgcmVzZXJ2ZWQiLAorCSAgLm9mZnNldAk9IDMyICogU1pfMU0gLSAzICogU1pfMjU2SywKKwkgIC5zaXplCQk9ICAzICogU1pfMjU2SyB9LAorfTsKKworc3RhdGljIHZvaWQgYW1zX2RlbHRhX3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlvbWFwX3dyaXRldygwLCAoT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19JT19DTlRMKSk7CisJb21hcF93cml0ZXcoYnl0ZSwgdGhpcy0+SU9fQUREUl9XKTsKKwlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV0UsIDApOworCW5kZWxheSg0MCk7CisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFLAorCQkJICAgICAgIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV0UpOworfQorCitzdGF0aWMgdV9jaGFyIGFtc19kZWx0YV9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJdV9jaGFyIHJlczsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShBTVNfREVMVEFfTEFUQ0gyX05BTkRfTlJFLCAwKTsKKwluZGVsYXkoNDApOworCW9tYXBfd3JpdGV3KH4wLCAoT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19JT19DTlRMKSk7CisJcmVzID0gb21hcF9yZWFkdyh0aGlzLT5JT19BRERSX1IpOworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9OQU5EX05SRSwKKwkJCSAgICAgICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTlJFKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGFtc19kZWx0YV93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCWludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxsZW47IGkrKykKKwkJYW1zX2RlbHRhX3dyaXRlX2J5dGUobXRkLCBidWZbaV0pOworfQorCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8bGVuOyBpKyspCisJCWJ1ZltpXSA9IGFtc19kZWx0YV9yZWFkX2J5dGUobXRkKTsKK30KKworc3RhdGljIGludCBhbXNfZGVsdGFfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsCisJCQkJaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IGFtc19kZWx0YV9yZWFkX2J5dGUobXRkKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb21tYW5kIGNvbnRyb2wgZnVuY3Rpb24KKyAqCisgKiBjdHJsOgorICogTkFORF9OQ0U6IGJpdCAwIC0+IGJpdCAyCisgKiBOQU5EX0NMRTogYml0IDEgLT4gYml0IDcKKyAqIE5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgNgorICovCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGludCBjdHJsKQoreworCisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGxvbmcgYml0czsKKworCQliaXRzID0gKH5jdHJsICYgTkFORF9OQ0UpIDw8IDI7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0NMRSkgPDwgNzsKKwkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA8PCA2OworCisJCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoMHhDMiwgYml0cyk7CisJfQorCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQlhbXNfZGVsdGFfd3JpdGVfYnl0ZShtdGQsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX25hbmRfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCKTsKK30KKworLyoKKyAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQorICovCitzdGF0aWMgaW50IF9faW5pdCBhbXNfZGVsdGFfaW5pdCh2b2lkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJaW50IGVyciA9IDA7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KKwlhbXNfZGVsdGFfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFtc19kZWx0YV9tdGQpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSBFMyBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFtc19kZWx0YV9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZhbXNfZGVsdGFfbXRkWzFdKTsKKworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCW1lbXNldChhbXNfZGVsdGFfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLworCWFtc19kZWx0YV9tdGQtPnByaXYgPSB0aGlzOworCisJLyogU2V0IGFkZHJlc3Mgb2YgTkFORCBJTyBsaW5lcyAqLworCXRoaXMtPklPX0FERFJfUiA9IChPTUFQX01QVUlPX0JBU0UgKyBPTUFQX01QVUlPX0lOUFVUX0xBVENIKTsKKwl0aGlzLT5JT19BRERSX1cgPSAoT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19PVVRQVVQpOworCXRoaXMtPnJlYWRfYnl0ZSA9IGFtc19kZWx0YV9yZWFkX2J5dGU7CisJdGhpcy0+d3JpdGVfYnVmID0gYW1zX2RlbHRhX3dyaXRlX2J1ZjsKKwl0aGlzLT5yZWFkX2J1ZiA9IGFtc19kZWx0YV9yZWFkX2J1ZjsKKwl0aGlzLT52ZXJpZnlfYnVmID0gYW1zX2RlbHRhX3ZlcmlmeV9idWY7CisJdGhpcy0+Y21kX2N0cmwgPSBhbXNfZGVsdGFfaHdjb250cm9sOworCWlmICghb21hcF9yZXF1ZXN0X2dwaW8oQU1TX0RFTFRBX0dQSU9fUElOX05BTkRfUkIpKSB7CisJCXRoaXMtPmRldl9yZWFkeSA9IGFtc19kZWx0YV9uYW5kX3JlYWR5OworCX0gZWxzZSB7CisJCXRoaXMtPmRldl9yZWFkeSA9IE5VTEw7CisJCXByaW50ayhLRVJOX05PVElDRSAiQ291bGRuJ3QgcmVxdWVzdCBncGlvIGZvciBEZWx0YSBOQU5EIHJlYWR5LlxuIik7CisJfQorCS8qIDI1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLworCXRoaXMtPmNoaXBfZGVsYXkgPSAzMDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwkvKiBTZXQgY2hpcCBlbmFibGVkLCBidXQgICovCisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShOQU5EX01BU0ssIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OUkUgfAorCQkJCQkgIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV0UgfAorCQkJCQkgIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OQ0UgfAorCQkJCQkgIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV1ApOworCisJLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2NhbihhbXNfZGVsdGFfbXRkLCAxKSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0X210ZDsKKwl9CisKKwkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLworCWFkZF9tdGRfcGFydGl0aW9ucyhhbXNfZGVsdGFfbXRkLCBwYXJ0aXRpb25faW5mbywKKwkJCSAgIEFSUkFZX1NJWkUocGFydGl0aW9uX2luZm8pKTsKKworCWdvdG8gb3V0OworCisgb3V0X210ZDoKKwlrZnJlZShhbXNfZGVsdGFfbXRkKTsKKyBvdXQ6CisJcmV0dXJuIGVycjsKK30KKworbW9kdWxlX2luaXQoYW1zX2RlbHRhX2luaXQpOworCisvKgorICogQ2xlYW4gdXAgcm91dGluZQorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgYW1zX2RlbHRhX2NsZWFudXAodm9pZCkKK3sKKwkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KKwluYW5kX3JlbGVhc2UoYW1zX2RlbHRhX210ZCk7CisKKwkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLworCWtmcmVlKGFtc19kZWx0YV9tdGQpOworfQorbW9kdWxlX2V4aXQoYW1zX2RlbHRhX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb25hdGhhbiBNY0Rvd2VsbCA8bm9vZGxlc0BlYXJ0aC5saT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2x1ZSBsYXllciBmb3IgTkFORCBmbGFzaCBvbiBBbXN0cmFkIEUzIChEZWx0YSkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYwppbmRleCBiZGUzNTUwLi4zMTIyODMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpAQCAtMzgsMjIgKzM5LDIxIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmF1MTU1MF9tdGQgPSBOVUxMOwogc3RhdGljIHZvaWQgX19pb21lbSAqcF9uYW5kOwotc3RhdGljIGludCBuYW5kX3dpZHRoID0gMTsgLyogZGVmYXVsdCB4OCovCitzdGF0aWMgaW50IG5hbmRfd2lkdGggPSAxOwkvKiBkZWZhdWx0IHg4ICovCitzdGF0aWMgdm9pZCAoKmF1MTU1MF93cml0ZV9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKiwgdV9jaGFyKTsKIAogLyoKICAqIERlZmluZSBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2UKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7CiAJewotCQkubmFtZSAJPSAiTkFORCBGUyAwIiwKLQkgIAkub2Zmc2V0ID0gMCwKLQkgIAkuc2l6ZSAJPSA4KjEwMjQqMTAyNAotCX0sCisJIC5uYW1lID0gIk5BTkQgRlMgMCIsCisJIC5vZmZzZXQgPSAwLAorCSAuc2l6ZSA9IDggKiAxMDI0ICogMTAyNH0sCiAJewotCQkubmFtZSAJPSAiTkFORCBGUyAxIiwKLQkJLm9mZnNldCA9ICBNVERQQVJUX09GU19BUFBFTkQsCi0gCQkuc2l6ZSAJPSAgICBNVERQQVJUX1NJWl9GVUxMCi0JfQorCSAubmFtZSA9ICJOQU5EIEZTIDEiLAorCSAub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEx9CiB9OwogCiAvKioKQEAgLTEzMCwyMSArMTMwLDYgQEAKIH0KIAogLyoqCi0gKiBhdV93cml0ZV93b3JkIC0gIHdyaXRlIG9uZSB3b3JkIHRvIHRoZSBjaGlwCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHdvcmQ6CWRhdGEgd29yZCB0byB3cml0ZQotICoKLSAqICB3cml0ZSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aCB3aXRob3V0Ci0gKiBlbmRpYW5lc3MgY29udmVyc2lvbgotICovCi1zdGF0aWMgdm9pZCBhdV93cml0ZV93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1MTYgd29yZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXdyaXRldyh3b3JkLCB0aGlzLT5JT19BRERSX1cpOwotCWF1X3N5bmMoKTsKLX0KLQotLyoqCiAgKiBhdV93cml0ZV9idWYgLSAgd3JpdGUgYnVmZmVyIHRvIGNoaXAKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAYnVmOglkYXRhIGJ1ZmZlcgpAQCAtMTU3LDcgKzE0Miw3IEBACiAJaW50IGk7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXdyaXRlYihidWZbaV0sIHRoaXMtPklPX0FERFJfVyk7CiAJCWF1X3N5bmMoKTsKIAl9CkBAIC0xNzYsNyArMTYxLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJYnVmW2ldID0gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKIAkJYXVfc3luYygpOwogCX0KQEAgLTE5NSw3ICsxODAsNyBAQAogCWludCBpOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlpZiAoYnVmW2ldICE9IHJlYWRiKHRoaXMtPklPX0FERFJfUikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYXVfc3luYygpOwpAQCAtMjE5LDcgKzIwNCw3IEBACiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJd3JpdGV3KHBbaV0sIHRoaXMtPklPX0FERFJfVyk7CiAJCWF1X3N5bmMoKTsKIAl9CkBAIC0yNDEsNyArMjI2LDcgQEAKIAl1MTYgKnAgPSAodTE2ICopIGJ1ZjsKIAlsZW4gPj49IDE7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlwW2ldID0gcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKIAkJYXVfc3luYygpOwogCX0KQEAgLTI2Miw3ICsyNDcsNyBAQAogCXUxNiAqcCA9ICh1MTYgKikgYnVmOwogCWxlbiA+Pj0gMTsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWlmIChwW2ldICE9IHJlYWR3KHRoaXMtPklPX0FERFJfUikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYXVfc3luYygpOwpAQCAtMjcwLDMyICsyNTUsNTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogU2VsZWN0IHRoZSBjaGlwIGJ5IHNldHRpbmcgbkNFIHRvIGxvdyAqLworI2RlZmluZSBOQU5EX0NUTF9TRVROQ0UJCTEKKy8qIERlc2VsZWN0IHRoZSBjaGlwIGJ5IHNldHRpbmcgbkNFIHRvIGhpZ2ggKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSTkNFCQkyCisvKiBTZWxlY3QgdGhlIGNvbW1hbmQgbGF0Y2ggYnkgc2V0dGluZyBDTEUgdG8gaGlnaCAqLworI2RlZmluZSBOQU5EX0NUTF9TRVRDTEUJCTMKKy8qIERlc2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGxvdyAqLworI2RlZmluZSBOQU5EX0NUTF9DTFJDTEUJCTQKKy8qIFNlbGVjdCB0aGUgYWRkcmVzcyBsYXRjaCBieSBzZXR0aW5nIEFMRSB0byBoaWdoICovCisjZGVmaW5lIE5BTkRfQ1RMX1NFVEFMRQkJNQorLyogRGVzZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gbG93ICovCisjZGVmaW5lIE5BTkRfQ1RMX0NMUkFMRQkJNgogCiBzdGF0aWMgdm9pZCBhdTE1NTBfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQogewogCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKLQlzd2l0Y2goY21kKXsKKwlzd2l0Y2ggKGNtZCkgewogCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6IHRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfQ01EOyBicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkNMRTogdGhpcy0+SU9fQUREUl9XID0gcF9uYW5kICsgTUVNX1NUTkFORF9EQVRBOyBicmVhazsKKwljYXNlIE5BTkRfQ1RMX1NFVENMRToKKwkJdGhpcy0+SU9fQUREUl9XID0gcF9uYW5kICsgTUVNX1NUTkFORF9DTUQ7CisJCWJyZWFrOwogCi0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6IHRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfQUREUjsgYnJlYWs7CisJY2FzZSBOQU5EX0NUTF9DTFJDTEU6CisJCXRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfREFUQTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ1RMX1NFVEFMRToKKwkJdGhpcy0+SU9fQUREUl9XID0gcF9uYW5kICsgTUVNX1NUTkFORF9BRERSOworCQlicmVhazsKKwogCWNhc2UgTkFORF9DVExfQ0xSQUxFOgogCQl0aGlzLT5JT19BRERSX1cgPSBwX25hbmQgKyBNRU1fU1ROQU5EX0RBVEE7Ci0JCS8qIEZJWE1FOiBOb2JvZHkga25vd3Mgd2h5IHRoaXMgaXMgbmVjY2VjYXJ5LAorCQkvKiBGSVhNRTogTm9ib2R5IGtub3dzIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeSwKIAkJICogYnV0IGl0IHdvcmtzIG9ubHkgdGhhdCB3YXkgKi8KIAkJdWRlbGF5KDEpOwogCQlicmVhazsKIAogCWNhc2UgTkFORF9DVExfU0VUTkNFOgogCQkvKiBhc3NlcnQgKGZvcmNlIGFzc2VydCkgY2hpcCBlbmFibGUgKi8KLQkJYXVfd3JpdGVsKCgxPDwoNCtOQU5EX0NTKSkgLCBNRU1fU1RORENUTCk7IGJyZWFrOworCQlhdV93cml0ZWwoKDEgPDwgKDQgKyBOQU5EX0NTKSksIE1FTV9TVE5EQ1RMKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLSAJCS8qIGRlYXNzZXJ0IGNoaXAgZW5hYmxlICovCi0JCWF1X3dyaXRlbCgwLCBNRU1fU1RORENUTCk7IGJyZWFrOworCQkvKiBkZWFzc2VydCBjaGlwIGVuYWJsZSAqLworCQlhdV93cml0ZWwoMCwgTUVNX1NUTkRDVEwpOwogCQlicmVhazsKIAl9CiAKQEAgLTMxMiw2OSArMzE3LDIwMCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogYXUxNTUwX3NlbGVjdF9jaGlwIC0gY29udHJvbCAtQ0UgbGluZQorICoJRm9yYmlkIGRyaXZpbmcgLUNFIG1hbnVhbGx5IHBlcm1pdHRpbmcgdGhlIE5BTkQgY29udHJvbGxlciB0byBkbyB0aGlzLgorICoJS2VlcGluZyAtQ0UgYXNzZXJ0ZWQgZHVyaW5nIHRoZSB3aG9sZSBzZWN0b3IgcmVhZHMgaW50ZXJmZXJlcyB3aXRoIHRoZQorICoJTk9SIGZsYXNoIGFuZCBQQ01DSUEgZHJpdmVycyBhcyBpdCBjYXVzZXMgY29udGVudGlvbiBvbiB0aGUgc3RhdGljIGJ1cy4KKyAqCVdlIG9ubHkgaGF2ZSB0byBob2xkIC1DRSBsb3cgZm9yIHRoZSBOQU5EIHJlYWQgY29tbWFuZHMgc2luY2UgdGhlIGZsYXNoCisgKgljaGlwIG5lZWRzIGl0IHRvIGJlIGFzc2VydGVkIGR1cmluZyBjaGlwIG5vdCByZWFkeSB0aW1lIGJ1dCB0aGUgTkFORAorICoJY29udHJvbGxlciBrZWVwcyBpdCByZWxlYXNlZC4KKyAqCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGNoaXA6CWNoaXBudW1iZXIgdG8gc2VsZWN0LCAtMSBmb3IgZGVzZWxlY3QKKyAqLworc3RhdGljIHZvaWQgYXUxNTUwX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKK30KKworLyoqCisgKiBhdTE1NTBfY29tbWFuZCAtIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZQorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBjb21tYW5kOgl0aGUgY29tbWFuZCB0byBiZSBzZW50CisgKiBAY29sdW1uOgl0aGUgY29sdW1uIGFkZHJlc3MgZm9yIHRoaXMgY29tbWFuZCwgLTEgaWYgbm9uZQorICogQHBhZ2VfYWRkcjoJdGhlIHBhZ2UgYWRkcmVzcyBmb3IgdGhpcyBjb21tYW5kLCAtMSBpZiBub25lCisgKi8KK3N0YXRpYyB2b2lkIGF1MTU1MF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQoreworCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IGNlX292ZXJyaWRlID0gMCwgaTsKKwl1bG9uZyBmbGFnczsKKworCS8qIEJlZ2luIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KKwlhdTE1NTBfaHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKKwkvKgorCSAqIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLgorCSAqLworCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1NFUUlOKSB7CisJCWludCByZWFkY21kOworCisJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKKwkJCS8qIE9PQiBhcmVhICovCisJCQljb2x1bW4gLT0gbXRkLT53cml0ZXNpemU7CisJCQlyZWFkY21kID0gTkFORF9DTURfUkVBRE9PQjsKKwkJfSBlbHNlIGlmIChjb2x1bW4gPCAyNTYpIHsKKwkJCS8qIEZpcnN0IDI1NiBieXRlcyAtLT4gUkVBRDAgKi8KKwkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFEMDsKKwkJfSBlbHNlIHsKKwkJCWNvbHVtbiAtPSAyNTY7CisJCQlyZWFkY21kID0gTkFORF9DTURfUkVBRDE7CisJCX0KKwkJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCByZWFkY21kKTsKKwl9CisJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCBjb21tYW5kKTsKKworCS8qIFNldCBBTEUgYW5kIGNsZWFyIENMRSB0byBzdGFydCBhZGRyZXNzIGN5Y2xlICovCisJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7CisKKwlpZiAoY29sdW1uICE9IC0xIHx8IHBhZ2VfYWRkciAhPSAtMSkgeworCQlhdTE1NTBfaHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQUxFKTsKKworCQkvKiBTZXJpYWxseSBpbnB1dCBhZGRyZXNzICovCisJCWlmIChjb2x1bW4gIT0gLTEpIHsKKwkJCS8qIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVzd2lkdGggKi8KKwkJCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCQljb2x1bW4gPj49IDE7CisJCQlhdTE1NTBfd3JpdGVfYnl0ZShtdGQsIGNvbHVtbik7CisJCX0KKwkJaWYgKHBhZ2VfYWRkciAhPSAtMSkgeworCQkJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCAodTgpKHBhZ2VfYWRkciAmIDB4ZmYpKTsKKworCQkJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDAgfHwKKwkJCSAgICBjb21tYW5kID09IE5BTkRfQ01EX1JFQUQxIHx8CisJCQkgICAgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFET09CKSB7CisJCQkJLyoKKwkJCQkgKiBOQU5EIGNvbnRyb2xsZXIgd2lsbCByZWxlYXNlIC1DRSBhZnRlcgorCQkJCSAqIHRoZSBsYXN0IGFkZHJlc3MgYnl0ZSBpcyB3cml0dGVuLCBzbyB3ZSdsbAorCQkJCSAqIGhhdmUgdG8gZm9yY2libHkgYXNzZXJ0IGl0LiBObyBpbnRlcnJ1cHRzCisJCQkJICogYXJlIGFsbG93ZWQgd2hpbGUgd2UgZG8gdGhpcyBhcyB3ZSBkb24ndAorCQkJCSAqIHdhbnQgdGhlIE5PUiBmbGFzaCBvciBQQ01DSUEgZHJpdmVycyB0bworCQkJCSAqIHN0ZWFsIG91ciBwcmVjaW91cyBieXRlcyBvZiBkYXRhLi4uCisJCQkJICovCisJCQkJY2Vfb3ZlcnJpZGUgPSAxOworCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQlhdTE1NTBfaHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUTkNFKTsKKwkJCX0KKworCQkJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCAodTgpKHBhZ2VfYWRkciA+PiA4KSk7CisKKwkJCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGRldmljZXMgPiAzMk1pQiAqLworCQkJaWYgKHRoaXMtPmNoaXBzaXplID4gKDMyIDw8IDIwKSkKKwkJCQlhdTE1NTBfd3JpdGVfYnl0ZShtdGQsICh1OCkoKHBhZ2VfYWRkciA+PiAxNikgJiAweDBmKSk7CisJCX0KKwkJLyogTGF0Y2ggaW4gYWRkcmVzcyAqLworCQlhdTE1NTBfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKKwl9CisKKwkvKgorCSAqIFByb2dyYW0gYW5kIGVyYXNlIGhhdmUgdGhlaXIgb3duIGJ1c3kgaGFuZGxlcnMuCisJICogU3RhdHVzIGFuZCBzZXF1ZW50aWFsIGluIG5lZWQgbm8gZGVsYXkuCisJICovCisJc3dpdGNoIChjb21tYW5kKSB7CisKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCWNhc2UgTkFORF9DTURfRVJBU0UxOgorCWNhc2UgTkFORF9DTURfRVJBU0UyOgorCWNhc2UgTkFORF9DTURfU0VRSU46CisJY2FzZSBOQU5EX0NNRF9TVEFUVVM6CisJCXJldHVybjsKKworCWNhc2UgTkFORF9DTURfUkVTRVQ6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwljYXNlIE5BTkRfQ01EX1JFQUQxOgorCWNhc2UgTkFORF9DTURfUkVBRE9PQjoKKwkJLyogQ2hlY2sgaWYgd2UncmUgcmVhbGx5IGRyaXZpbmcgLUNFIGxvdyAoanVzdCBpbiBjYXNlKSAqLworCQlpZiAodW5saWtlbHkoIWNlX292ZXJyaWRlKSkKKwkJCWJyZWFrOworCisJCS8qIEFwcGx5IGEgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCLiAqLworCQluZGVsYXkoMTAwKTsKKwkJLyogV2FpdCBmb3IgYSBjaGlwIHRvIGJlY29tZSByZWFkeS4uLiAqLworCQlmb3IgKGkgPSB0aGlzLT5jaGlwX2RlbGF5OyAhdGhpcy0+ZGV2X3JlYWR5KG10ZCkgJiYgaSA+IDA7IC0taSkKKwkJCXVkZWxheSgxKTsKKworCQkvKiBSZWxlYXNlIC1DRSBhbmQgcmUtZW5hYmxlIGludGVycnVwdHMuICovCisJCWF1MTU1MF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJOQ0UpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybjsKKwl9CisJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IuICovCisJbmRlbGF5KDEwMCk7CisKKwl3aGlsZSghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpOworfQorCisKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotaW50IF9faW5pdCBhdTF4eHhfbmFuZF9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXUxeHh4X25hbmRfaW5pdCh2b2lkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7Ci0JdTE2IGJvb3Rfc3dhcGJvb3QgPSAwOyAvKiBkZWZhdWx0IHZhbHVlICovCisJdTE2IGJvb3Rfc3dhcGJvb3QgPSAwOwkvKiBkZWZhdWx0IHZhbHVlICovCiAJaW50IHJldHZhbDsKIAl1MzIgbWVtX3N0YWRkcjsKIAl1MzIgbmFuZF9waHlzOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JYXUxNTUwX210ZCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsKLQkJCXNpemVvZiAoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOworCWF1MTU1MF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWF1MTU1MF9tdGQpIHsKLQkJcHJpbnRrICgiVW5hYmxlIHRvIGFsbG9jYXRlIE5BTkQgTVREIGRldiBzdHJ1Y3R1cmUuXG4iKTsKKwkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgTkFORCBNVEQgZGV2IHN0cnVjdHVyZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZhdTE1NTBfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJmF1MTU1MF9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIGF1MTU1MF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQoKGNoYXIgKikgdGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKwltZW1zZXQoYXUxNTUwX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlhdTE1NTBfbXRkLT5wcml2ID0gdGhpczsKKwlhdTE1NTBfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAKLQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoTUVNX1NUTkRDVEwpICYgfigxPDw4KSwgTUVNX1NUTkRDVEwpOwotCi0JLyogZGlzYWJsZSBOQU5EIGJvb3QgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoTUVNX1NUTkRDVEwpICYgfigxPDwwKSwgTUVNX1NUTkRDVEwpOworCS8qIE1FTV9TVE5EQ1RMOiBkaXNhYmxlIGludHMsIGRpc2FibGUgbmFuZCBib290ICovCisJYXVfd3JpdGVsKDAsIE1FTV9TVE5EQ1RMKTsKIAogI2lmZGVmIENPTkZJR19NSVBTX1BCMTU1MAogCS8qIHNldCBncGlvMjA2IGhpZ2ggKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfRElSKSAmIH4oMTw8NiksIEdQSU8yX0RJUik7CisJYXVfd3JpdGVsKGF1X3JlYWRsKEdQSU8yX0RJUikgJiB+KDEgPDwgNiksIEdQSU8yX0RJUik7CiAKLQlib290X3N3YXBib290ID0gKGF1X3JlYWRsKE1FTV9TVFNUQVQpICYgKDB4Nzw8MSkpIHwKLQkJKChiY3NyLT5zdGF0dXMgPj4gNikgICYgMHgxKTsKKwlib290X3N3YXBib290ID0gKGF1X3JlYWRsKE1FTV9TVFNUQVQpICYgKDB4NyA8PCAxKSkgfCAoKGJjc3ItPnN0YXR1cyA+PiA2KSAmIDB4MSk7CiAJc3dpdGNoIChib290X3N3YXBib290KSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSAyOgotCQljYXNlIDg6Ci0JCWNhc2UgMHhDOgotCQljYXNlIDB4RDoKLQkJCS8qIHgxNiBOQU5EIEZsYXNoICovCi0JCQluYW5kX3dpZHRoID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCWNhc2UgOToKLQkJY2FzZSAzOgotCQljYXNlIDB4RToKLQkJY2FzZSAweEY6Ci0JCQkvKiB4OCBOQU5EIEZsYXNoICovCi0JCQluYW5kX3dpZHRoID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKCJQYjE1NTAgTkFORDogYmFkIGJvb3Q6c3dhcFxuIik7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJZ290byBvdXRtZW07CisJY2FzZSAwOgorCWNhc2UgMjoKKwljYXNlIDg6CisJY2FzZSAweEM6CisJY2FzZSAweEQ6CisJCS8qIHgxNiBOQU5EIEZsYXNoICovCisJCW5hbmRfd2lkdGggPSAwOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSA5OgorCWNhc2UgMzoKKwljYXNlIDB4RToKKwljYXNlIDB4RjoKKwkJLyogeDggTkFORCBGbGFzaCAqLworCQluYW5kX3dpZHRoID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJQYjE1NTAgTkFORDogYmFkIGJvb3Q6c3dhcFxuIik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0bWVtOwogCX0KICNlbmRpZgogCkBAIC00MjQsMjEgKzU2MCwyMiBAQAogCiAJLyogbWFrZSBjb250cm9sbGVyIGFuZCBNVEQgYWdyZWUgKi8KIAlpZiAoTkFORF9DUyA9PSAwKQotCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMCkgJiAoMTw8MjIpOworCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMCkgJiAoMSA8PCAyMik7CiAJaWYgKE5BTkRfQ1MgPT0gMSkKLQkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzEpICYgKDE8PDIyKTsKKwkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzEpICYgKDEgPDwgMjIpOwogCWlmIChOQU5EX0NTID09IDIpCi0JCW5hbmRfd2lkdGggPSBhdV9yZWFkbChNRU1fU1RDRkcyKSAmICgxPDwyMik7CisJCW5hbmRfd2lkdGggPSBhdV9yZWFkbChNRU1fU1RDRkcyKSAmICgxIDw8IDIyKTsKIAlpZiAoTkFORF9DUyA9PSAzKQotCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMykgJiAoMTw8MjIpOwotCisJCW5hbmRfd2lkdGggPSBhdV9yZWFkbChNRU1fU1RDRkczKSAmICgxIDw8IDIyKTsKIAogCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQl0aGlzLT5od2NvbnRyb2wgPSBhdTE1NTBfaHdjb250cm9sOwogCXRoaXMtPmRldl9yZWFkeSA9IGF1MTU1MF9kZXZpY2VfcmVhZHk7CisJdGhpcy0+c2VsZWN0X2NoaXAgPSBhdTE1NTBfc2VsZWN0X2NoaXA7CisJdGhpcy0+Y21kZnVuYyA9IGF1MTU1MF9jb21tYW5kOworCiAJLyogMzAgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCiAJdGhpcy0+Y2hpcF9kZWxheSA9IDMwOwotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKIAogCXRoaXMtPm9wdGlvbnMgPSBOQU5EX05PX0FVVE9JTkNSOwogCkBAIC00NDYsMTUgKzU4MywxNCBAQAogCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CiAKIAl0aGlzLT5yZWFkX2J5dGUgPSAoIW5hbmRfd2lkdGgpID8gYXVfcmVhZF9ieXRlMTYgOiBhdV9yZWFkX2J5dGU7Ci0JdGhpcy0+d3JpdGVfYnl0ZSA9ICghbmFuZF93aWR0aCkgPyBhdV93cml0ZV9ieXRlMTYgOiBhdV93cml0ZV9ieXRlOwotCXRoaXMtPndyaXRlX3dvcmQgPSBhdV93cml0ZV93b3JkOworCWF1MTU1MF93cml0ZV9ieXRlID0gKCFuYW5kX3dpZHRoKSA/IGF1X3dyaXRlX2J5dGUxNiA6IGF1X3dyaXRlX2J5dGU7CiAJdGhpcy0+cmVhZF93b3JkID0gYXVfcmVhZF93b3JkOwogCXRoaXMtPndyaXRlX2J1ZiA9ICghbmFuZF93aWR0aCkgPyBhdV93cml0ZV9idWYxNiA6IGF1X3dyaXRlX2J1ZjsKIAl0aGlzLT5yZWFkX2J1ZiA9ICghbmFuZF93aWR0aCkgPyBhdV9yZWFkX2J1ZjE2IDogYXVfcmVhZF9idWY7CiAJdGhpcy0+dmVyaWZ5X2J1ZiA9ICghbmFuZF93aWR0aCkgPyBhdV92ZXJpZnlfYnVmMTYgOiBhdV92ZXJpZnlfYnVmOwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCi0JaWYgKG5hbmRfc2NhbiAoYXUxNTUwX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKGF1MTU1MF9tdGQsIDEpKSB7CiAJCXJldHZhbCA9IC1FTlhJTzsKIAkJZ290byBvdXRpbzsKIAl9CkBAIC00NjUsMTAgKzYwMSwxMCBAQAogCXJldHVybiAwOwogCiAgb3V0aW86Ci0JaW91bm1hcCAoKHZvaWQgKilwX25hbmQpOworCWlvdW5tYXAoKHZvaWQgKilwX25hbmQpOwogCiAgb3V0bWVtOgotCWtmcmVlIChhdTE1NTBfbXRkKTsKKwlrZnJlZShhdTE1NTBfbXRkKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00NzcsMjIgKzYxMywyMSBAQAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgX19leGl0IGF1MTU1MF9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGF1MTU1MF9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICZhdTE1NTBfbXRkWzFdOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSZhdTE1NTBfbXRkWzFdOwogCiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlIChhdTE1NTBfbXRkKTsKKwluYW5kX3JlbGVhc2UoYXUxNTUwX210ZCk7CiAKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwotCWtmcmVlIChhdTE1NTBfbXRkKTsKKwlrZnJlZShhdTE1NTBfbXRkKTsKIAogCS8qIFVubWFwICovCi0JaW91bm1hcCAoKHZvaWQgKilwX25hbmQpOworCWlvdW5tYXAoKHZvaWQgKilwX25hbmQpOwogfQorCiBtb2R1bGVfZXhpdChhdTE1NTBfY2xlYW51cCk7Ci0jZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRW1iZWRkZWQgRWRnZSwgTExDIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKaW5kZXggYTNjN2ZlYS4uZmU5NGFlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFRob21hcyBHbGVpeG5lciA8dGd4bEBsaW51dHJvbml4LmRlPgogICoKICAqICBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvc3BpYS5jCi0gKiAJIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqCSBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCiAgKgogICogJElkOiBhdXRjcHUxMi5jLHYgMS4yMyAyMDA1LzExLzA3IDExOjE0OjMwIGdsZWl4bmVyIEV4cCAkCiAgKgpAQCAtNDIsMTIgKzQyLDcgQEAKICAqIE1URCBzdHJ1Y3R1cmUgZm9yIEFVVENQVTEyIGJvYXJkCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmF1dGNwdTEyX210ZCA9IE5VTEw7Ci0KLXN0YXRpYyBpbnQgYXV0Y3B1MTJfaW9fYmFzZSA9IENTODk3MTJfVklSVF9CQVNFOwotc3RhdGljIGludCBhdXRjcHUxMl9maW9fcGJhc2UgPSBBVVRDUFUxMl9QSFlTX1NNQzsKLXN0YXRpYyBpbnQgYXV0Y3B1MTJfZmlvX2N0cmwgPSBBVVRDUFUxMl9TTUNfU0VMRUNUX09GRlNFVDsKLXN0YXRpYyBpbnQgYXV0Y3B1MTJfcGVkciA9IEFVVENQVTEyX1NNQ19QT1JUX09GRlNFVDsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKiBhdXRjcHUxMl9maW9fYmFzZTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmF1dGNwdTEyX2Zpb19iYXNlOwogCiAvKgogICogRGVmaW5lIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZXMKQEAgLTk0LDEwOCArODksMTMxIEBACiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TMTI4SyAyCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKLSovCi1zdGF0aWMgdm9pZCBhdXRjcHUxMl9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCisgKgorICoJQUxFIGJpdCA0IGF1dGNwdTEyX3BlZHIKKyAqCUNMRSBiaXQgNSBhdXRjcHUxMl9wZWRyCisgKglOQ0UgYml0IDAgZmlvX2N0cmwKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGF1dGNwdTEyX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0Jc3dpdGNoKGNtZCl7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXZvaWQgX19pb21lbSAqYWRkcgorCQl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKLQkJY2FzZSBOQU5EX0NUTF9TRVRDTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKGF1dGNwdTEyX2lvX2Jhc2UgKyBhdXRjcHUxMl9wZWRyKSkgfD0gIEFVVENQVTEyX1NNQ19DTEU7IGJyZWFrOwotCQljYXNlIE5BTkRfQ1RMX0NMUkNMRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYXV0Y3B1MTJfaW9fYmFzZSArIGF1dGNwdTEyX3BlZHIpKSAmPSB+QVVUQ1BVMTJfU01DX0NMRTsgYnJlYWs7CisJCWFkZHIgPSBDUzg5NzEyX1ZJUlRfQkFTRSArIEFVVENQVTEyX1NNQ19QT1JUX09GRlNFVDsKKwkJYml0cyA9IChjdHJsICYgTkFORF9DTEUpIDw8IDQ7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0FMRSkgPDwgMjsKKwkJd3JpdGViKChyZWFkYihhZGRyKSAmIH4weDMwKSB8IGJpdHMsIGFkZHIpOwogCi0JCWNhc2UgTkFORF9DVExfU0VUQUxFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9pb19iYXNlICsgYXV0Y3B1MTJfcGVkcikpIHw9ICBBVVRDUFUxMl9TTUNfQUxFOyBicmVhazsKLQkJY2FzZSBOQU5EX0NUTF9DTFJBTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKGF1dGNwdTEyX2lvX2Jhc2UgKyBhdXRjcHUxMl9wZWRyKSkgJj0gfkFVVENQVTEyX1NNQ19BTEU7IGJyZWFrOwotCi0JCWNhc2UgTkFORF9DVExfU0VUTkNFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9maW9fYmFzZSArIGF1dGNwdTEyX2Zpb19jdHJsKSkgPSAweDAxOyBicmVhazsKLQkJY2FzZSBOQU5EX0NUTF9DTFJOQ0U6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKGF1dGNwdTEyX2Zpb19iYXNlICsgYXV0Y3B1MTJfZmlvX2N0cmwpKSA9IDB4MDA7IGJyZWFrOworCQlhZGRyID0gYXV0Y3B1MTJfZmlvX2Jhc2UgKyBBVVRDUFUxMl9TTUNfU0VMRUNUX09GRlNFVDsKKwkJd3JpdGViKChyZWFkYihhZGRyKSAmIH4weDEpIHwgKGN0cmwgJiBOQU5EX05DRSksIGFkZHIpOwogCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAogLyoKLSoJcmVhZCBkZXZpY2UgcmVhZHkgcGluCi0qLworICoJcmVhZCBkZXZpY2UgcmVhZHkgcGluCisgKi8KIGludCBhdXRjcHUxMl9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CisJdm9pZCBfX2lvbWVtICphZGRyID0gQ1M4OTcxMl9WSVJUX0JBU0UgKyBBVVRDUFUxMl9TTUNfUE9SVF9PRkZTRVQ7CiAKLQlyZXR1cm4gKCAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9pb19iYXNlICsgYXV0Y3B1MTJfcGVkcikpICYgQVVUQ1BVMTJfU01DX1JEWSkgPyAxIDogMDsKLQorCXJldHVybiByZWFkYihhZGRyKSAmIEFVVENQVTEyX1NNQ19SRFk7CiB9CiAKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotaW50IF9faW5pdCBhdXRjcHUxMl9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXV0Y3B1MTJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CiAJaW50IGVyciA9IDA7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQlhdXRjcHUxMl9tdGQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZiAoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkJR0ZQX0tFUk5FTCk7CisJYXV0Y3B1MTJfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIWF1dGNwdTEyX210ZCkgewotCQlwcmludGsgKCJVbmFibGUgdG8gYWxsb2NhdGUgQVVUQ1BVMTIgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBBVVRDUFUxMiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIG1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KLQlhdXRjcHUxMl9maW9fYmFzZSA9IGlvcmVtYXAoYXV0Y3B1MTJfZmlvX3BiYXNlLFNaXzFLKTsKLQlpZighYXV0Y3B1MTJfZmlvX2Jhc2UpeworCWF1dGNwdTEyX2Zpb19iYXNlID0gaW9yZW1hcChBVVRDUFUxMl9QSFlTX1NNQywgU1pfMUspOworCWlmICghYXV0Y3B1MTJfZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJJb3JlbWFwIGF1dGNwdTEyIFNtYXJ0TWVkaWEgQ2FyZCBmYWlsZWRcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIG91dF9tdGQ7CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmYXV0Y3B1MTJfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJmF1dGNwdTEyX210ZFsxXSk7CiAKIAkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQoKGNoYXIgKikgYXV0Y3B1MTJfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KGF1dGNwdTEyX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlhdXRjcHUxMl9tdGQtPnByaXYgPSB0aGlzOworCWF1dGNwdTEyX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKi8KIAl0aGlzLT5JT19BRERSX1IgPSBhdXRjcHUxMl9maW9fYmFzZTsKIAl0aGlzLT5JT19BRERSX1cgPSBhdXRjcHUxMl9maW9fYmFzZTsKLQl0aGlzLT5od2NvbnRyb2wgPSBhdXRjcHUxMl9od2NvbnRyb2w7CisJdGhpcy0+Y21kX2N0cmwgPSBhdXRjcHUxMl9od2NvbnRyb2w7CiAJdGhpcy0+ZGV2X3JlYWR5ID0gYXV0Y3B1MTJfZGV2aWNlX3JlYWR5OwogCS8qIDIwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSAyMDsKLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAKIAkvKiBFbmFibGUgdGhlIGZvbGxvd2luZyBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgKi8KIAkvKgotCXRoaXMtPm9wdGlvbnMgPSBOQU5EX1VTRV9GTEFTSF9CQlQ7Ci0JKi8KKwkgICB0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOworCSAqLwogCXRoaXMtPm9wdGlvbnMgPSBOQU5EX1VTRV9GTEFTSF9CQlQ7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuIChhdXRjcHUxMl9tdGQsIDEpKSB7CisJaWYgKG5hbmRfc2NhbihhdXRjcHUxMl9tdGQsIDEpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXRfaW9yOwogCX0KIAogCS8qIFJlZ2lzdGVyIHRoZSBwYXJ0aXRpb25zICovCi0Jc3dpdGNoKGF1dGNwdTEyX210ZC0+c2l6ZSl7Ci0JCWNhc2UgU1pfMTZNOiBhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzE2aywgTlVNX1BBUlRJVElPTlMxNkspOyBicmVhazsKLQkJY2FzZSBTWl8zMk06IGFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvMzJrLCBOVU1fUEFSVElUSU9OUzMySyk7IGJyZWFrOwotCQljYXNlIFNaXzY0TTogYWRkX210ZF9wYXJ0aXRpb25zKGF1dGNwdTEyX210ZCwgcGFydGl0aW9uX2luZm82NGssIE5VTV9QQVJUSVRJT05TNjRLKTsgYnJlYWs7Ci0JCWNhc2UgU1pfMTI4TTogYWRkX210ZF9wYXJ0aXRpb25zKGF1dGNwdTEyX210ZCwgcGFydGl0aW9uX2luZm8xMjhrLCBOVU1fUEFSVElUSU9OUzEyOEspOyBicmVhazsKLQkJZGVmYXVsdDogewotCQkJcHJpbnRrICgiVW5zdXBwb3J0ZWQgU21hcnRNZWRpYSBkZXZpY2VcbiIpOworCXN3aXRjaCAoYXV0Y3B1MTJfbXRkLT5zaXplKSB7CisJCWNhc2UgU1pfMTZNOgorCQkJYWRkX210ZF9wYXJ0aXRpb25zKGF1dGNwdTEyX210ZCwgcGFydGl0aW9uX2luZm8xNmssCisJCQkJCSAgIE5VTV9QQVJUSVRJT05TMTZLKTsKKwkJCWJyZWFrOworCQljYXNlIFNaXzMyTToKKwkJCWFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvMzJrLAorCQkJCQkgICBOVU1fUEFSVElUSU9OUzMySyk7CisJCQlicmVhazsKKwkJY2FzZSBTWl82NE06CisJCQlhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzY0aywKKwkJCQkJICAgTlVNX1BBUlRJVElPTlM2NEspOworCQkJYnJlYWs7CisJCWNhc2UgU1pfMTI4TToKKwkJCWFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvMTI4aywKKwkJCQkJICAgTlVNX1BBUlRJVElPTlMxMjhLKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJVbnN1cHBvcnRlZCBTbWFydE1lZGlhIGRldmljZVxuIik7CiAJCQllcnIgPSAtRU5YSU87CiAJCQlnb3RvIG91dF9pb3I7Ci0JCX0KIAl9CiAJZ290byBvdXQ7CiAKLW91dF9pb3I6Ci0JaW91bm1hcCgodm9pZCAqKWF1dGNwdTEyX2Zpb19iYXNlKTsKLW91dF9tdGQ6Ci0Ja2ZyZWUgKGF1dGNwdTEyX210ZCk7Ci1vdXQ6Cisgb3V0X2lvcjoKKwlpb3VubWFwKGF1dGNwdTEyX2Zpb19iYXNlKTsKKyBvdXRfbXRkOgorCWtmcmVlKGF1dGNwdTEyX210ZCk7Cisgb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIwNCwyMCArMjIyLDE5IEBACiAvKgogICogQ2xlYW4gdXAgcm91dGluZQogICovCi0jaWZkZWYgTU9EVUxFCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXV0Y3B1MTJfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdXRjcHUxMl9jbGVhbnVwKHZvaWQpCiB7CiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlIChhdXRjcHUxMl9tdGQpOworCW5hbmRfcmVsZWFzZShhdXRjcHUxMl9tdGQpOwogCiAJLyogdW5tYXAgcGh5c2ljYWwgYWRyZXNzICovCi0JaW91bm1hcCgodm9pZCAqKWF1dGNwdTEyX2Zpb19iYXNlKTsKKwlpb3VubWFwKGF1dGNwdTEyX2Zpb19iYXNlKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUgKGF1dGNwdTEyX210ZCk7CisJa2ZyZWUoYXV0Y3B1MTJfbXRkKTsKIH0KKwogbW9kdWxlX2V4aXQoYXV0Y3B1MTJfY2xlYW51cCk7Ci0jZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhMWQzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwpAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqIGRyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYworICoKKyAqIChDKSAyMDA1LCAyMDA2IFJlZCBIYXQgSW5jLgorICoKKyAqIEF1dGhvcjogRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICoJICAgVG9tIFN5bGxhIDx0b20uc3lsbGFAYW1kLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBPdmVydmlldzoKKyAqICAgVGhpcyBpcyBhIGRldmljZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgZm91bmQgb24gCisgKiAgIHRoZSBBTUQgQ1M1NTM1L0NTNTUzNiBjb21wYW5pb24gY2hpcHNldHMgZm9yIHRoZSBHZW9kZSBwcm9jZXNzb3IuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBOUl9DUzU1M1hfQ09OVFJPTExFUlMJNAorCisjZGVmaW5lIE1TUl9ESVZJTF9HTERfQ0FQCTB4NTE0MDAwMDAJLyogRElWSUwgY2FwYWJpbGl0aWllcyAqLworI2RlZmluZSBDQVBfQ1M1NTM1CQkweDJkZjAwMFVMTAorI2RlZmluZSBDQVBfQ1M1NTM2CQkweDVkZjUwMFVMTAorCisvKiBOQU5EIFRpbWluZyBNU1JzICovCisjZGVmaW5lIE1TUl9OQU5ERl9EQVRBCQkweDUxNDAwMDFiCS8qIE5BTkQgRmxhc2ggRGF0YSBUaW1pbmcgTVNSICovCisjZGVmaW5lIE1TUl9OQU5ERl9DVEwJCTB4NTE0MDAwMWMJLyogTkFORCBGbGFzaCBDb250cm9sIFRpbWluZyAqLworI2RlZmluZSBNU1JfTkFOREZfUlNWRAkJMHg1MTQwMDAxZAkvKiBSZXNlcnZlZCAqLworCisvKiBOQU5EIEJBUiBNU1JzICovCisjZGVmaW5lIE1TUl9ESVZJTF9MQkFSX0ZMU0gwCTB4NTE0MDAwMTAJLyogRmxhc2ggQ2hpcCBTZWxlY3QgMCAqLworI2RlZmluZSBNU1JfRElWSUxfTEJBUl9GTFNIMQkweDUxNDAwMDExCS8qIEZsYXNoIENoaXAgU2VsZWN0IDEgKi8KKyNkZWZpbmUgTVNSX0RJVklMX0xCQVJfRkxTSDIJMHg1MTQwMDAxMgkvKiBGbGFzaCBDaGlwIFNlbGVjdCAyICovCisjZGVmaW5lIE1TUl9ESVZJTF9MQkFSX0ZMU0gzCTB4NTE0MDAwMTMJLyogRmxhc2ggQ2hpcCBTZWxlY3QgMyAqLworCS8qIEVhY2ggbWFkZSB1cCBvZi4uLiAqLworI2RlZmluZSBGTFNIX0xCQVJfRU4JCSgxVUxMPDwzMikKKyNkZWZpbmUgRkxTSF9OT1JfTkFORAkJKDFVTEw8PDMzKQkvKiAxIGZvciBOQU5EICovCisjZGVmaW5lIEZMU0hfTUVNX0lPCQkoMVVMTDw8MzQpCS8qIDEgZm9yIE1NSU8gKi8KKwkvKiBJL08gQkFScyBoYXZlIEJBU0VfQUREUiBpbiBiaXRzIDE1OjQsIElPX01BU0sgaW4gNDc6MzYgKi8KKwkvKiBNTUlPIEJBUnMgaGF2ZSBCQVNFX0FERFIgaW4gYml0cyAzMToxMiwgTUVNX01BU0sgaW4gNjM6NDQgKi8KKworLyogUGluIGZ1bmN0aW9uIHNlbGVjdGlvbiBNU1IgKElERSB2cy4gZmxhc2ggb24gdGhlIElERSBwaW5zKSAqLworI2RlZmluZSBNU1JfRElWSUxfQkFMTF9PUFRTCTB4NTE0MDAwMTUKKyNkZWZpbmUgUElOX09QVF9JREUJCSgxPDwwKQkvKiAwIGZvciBmbGFzaCwgMSBmb3IgSURFICovCisKKy8qIFJlZ2lzdGVycyB3aXRoaW4gdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBCQVIgLS0gbWVtb3J5IG1hcHBlZCAqLworI2RlZmluZSBNTV9OQU5EX0RBVEEJCTB4MDAJLyogMCB0byAweDdmZiwgaW4gZmFjdCAqLworI2RlZmluZSBNTV9OQU5EX0NUTAkJMHg4MDAJLyogQW55IGV2ZW4gYWRkcmVzcyAweDgwMC0weDgwZSAqLworI2RlZmluZSBNTV9OQU5EX0lPCQkweDgwMQkvKiBBbnkgb2RkIGFkZHJlc3MgMHg4MDEtMHg4MGYgKi8KKyNkZWZpbmUgTU1fTkFORF9TVFMJCTB4ODEwCisjZGVmaW5lIE1NX05BTkRfRUNDX0xTQgkJMHg4MTEKKyNkZWZpbmUgTU1fTkFORF9FQ0NfTVNCCQkweDgxMgorI2RlZmluZSBNTV9OQU5EX0VDQ19DT0wJCTB4ODEzCisjZGVmaW5lIE1NX05BTkRfTEFDCQkweDgxNAorI2RlZmluZSBNTV9OQU5EX0VDQ19DVEwJCTB4ODE1CisKKy8qIFJlZ2lzdGVycyB3aXRoaW4gdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBCQVIgLS0gSS9PIG1hcHBlZCAqLworI2RlZmluZSBJT19OQU5EX0RBVEEJCTB4MDAJLyogMCB0byAzLCBpbiBmYWN0ICovCisjZGVmaW5lIElPX05BTkRfQ1RMCQkweDA0CisjZGVmaW5lIElPX05BTkRfSU8JCTB4MDUKKyNkZWZpbmUgSU9fTkFORF9TVFMJCTB4MDYKKyNkZWZpbmUgSU9fTkFORF9FQ0NfQ1RMCQkweDA4CisjZGVmaW5lIElPX05BTkRfRUNDX0xTQgkJMHgwOQorI2RlZmluZSBJT19OQU5EX0VDQ19NU0IJCTB4MGEKKyNkZWZpbmUgSU9fTkFORF9FQ0NfQ09MCQkweDBiCisjZGVmaW5lIElPX05BTkRfTEFDCQkweDBjCisKKyNkZWZpbmUgQ1NfTkFORF9DVExfRElTVF9FTgkoMTw8NCkJLyogRW5hYmxlIE5BTkQgRGlzdHJhY3QgaW50ZXJydXB0ICovCisjZGVmaW5lIENTX05BTkRfQ1RMX1JEWV9JTlRfTUFTSwkoMTw8MykJLyogRW5hYmxlIFJEWS9CVVNZIyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQ1NfTkFORF9DVExfQUxFCQkoMTw8MikKKyNkZWZpbmUgQ1NfTkFORF9DVExfQ0xFCQkoMTw8MSkKKyNkZWZpbmUgQ1NfTkFORF9DVExfQ0UJCSgxPDwwKQkvKiBLZWVwIGxvdzsgMSB0byByZXNldCAqLworCisjZGVmaW5lIENTX05BTkRfU1RTX0ZMQVNIX1JEWQkoMTw8MykKKyNkZWZpbmUgQ1NfTkFORF9DVExSX0JVU1kJKDE8PDIpCisjZGVmaW5lIENTX05BTkRfQ01EX0NPTVAJKDE8PDEpCisjZGVmaW5lIENTX05BTkRfRElTVF9TVAkJKDE8PDApCisKKyNkZWZpbmUgQ1NfTkFORF9FQ0NfUEFSSVRZCSgxPDwyKQorI2RlZmluZSBDU19OQU5EX0VDQ19DTFJFQ0MJKDE8PDEpCisjZGVmaW5lIENTX05BTkRfRUNDX0VORUNDCSgxPDwwKQorCitzdGF0aWMgdm9pZCBjczU1M3hfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwl3aGlsZSAodW5saWtlbHkobGVuID4gMHg4MDApKSB7CisJCW1lbWNweV9mcm9taW8oYnVmLCB0aGlzLT5JT19BRERSX1IsIDB4ODAwKTsKKwkJYnVmICs9IDB4ODAwOworCQlsZW4gLT0gMHg4MDA7CisJfQorCW1lbWNweV9mcm9taW8oYnVmLCB0aGlzLT5JT19BRERSX1IsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGNzNTUzeF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwl3aGlsZSAodW5saWtlbHkobGVuID4gMHg4MDApKSB7CisJCW1lbWNweV90b2lvKHRoaXMtPklPX0FERFJfUiwgYnVmLCAweDgwMCk7CisJCWJ1ZiArPSAweDgwMDsKKwkJbGVuIC09IDB4ODAwOworCX0KKwltZW1jcHlfdG9pbyh0aGlzLT5JT19BRERSX1IsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY3M1NTN4X3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXJldHVybiByZWFkYih0aGlzLT5JT19BRERSX1IpOworfQorCitzdGF0aWMgdm9pZCBjczU1M3hfd3JpdGVfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgaSA9IDEwMDAwMDsKKworCXdoaWxlIChpICYmIHJlYWRiKHRoaXMtPklPX0FERFJfUiArIE1NX05BTkRfU1RTKSAmIENTX05BTkRfQ1RMUl9CVVNZKSB7CisJCXVkZWxheSgxKTsKKwkJaS0tOworCX0KKwl3cml0ZWIoYnl0ZSwgdGhpcy0+SU9fQUREUl9XICsgMHg4MDEpOworfQorCitzdGF0aWMgdm9pZCBjczU1M3hfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gdGhpcy0+SU9fQUREUl9SOworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBjaGFyIGN0bCA9IChjdHJsICYgfk5BTkRfQ1RSTF9DSEFOR0UgKSBeIDB4MDE7CisJCXdyaXRlYihjdGwsIG1taW9fYmFzZSArIE1NX05BTkRfQ1RMKTsKKwl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQljczU1M3hfd3JpdGVfYnl0ZShtdGQsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgY3M1NTN4X2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gdGhpcy0+SU9fQUREUl9SOworCXVuc2lnbmVkIGNoYXIgZm9vID0gcmVhZGIobW1pb19iYXNlICsgTU1fTkFORF9TVFMpOworCisJcmV0dXJuIChmb28gJiBDU19OQU5EX1NUU19GTEFTSF9SRFkpICYmICEoZm9vICYgQ1NfTkFORF9DVExSX0JVU1kpOworfQorCitzdGF0aWMgdm9pZCBjc19lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2UgPSB0aGlzLT5JT19BRERSX1I7CisKKwl3cml0ZWIoMHgwNywgbW1pb19iYXNlICsgTU1fTkFORF9FQ0NfQ1RMKTsKK30KKworc3RhdGljIGludCBjc19jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKK3sKKwl1aW50MzJfdCBlY2M7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZSA9IHRoaXMtPklPX0FERFJfUjsKKworCWVjYyA9IHJlYWRsKG1taW9fYmFzZSArIE1NX05BTkRfU1RTKTsKKworCWVjY19jb2RlWzFdID0gZWNjID4+IDg7CisJZWNjX2NvZGVbMF0gPSBlY2MgPj4gMTY7CisJZWNjX2NvZGVbMl0gPSBlY2MgPj4gMjQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmNzNTUzeF9tdGRbNF07CisKK3N0YXRpYyBpbnQgX19pbml0IGNzNTUzeF9pbml0X29uZShpbnQgY3MsIGludCBtbWlvLCB1bnNpZ25lZCBsb25nIGFkcikKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOworCXN0cnVjdCBtdGRfaW5mbyAqbmV3X210ZDsKKworCXByaW50ayhLRVJOX05PVElDRSAiUHJvYmluZyBDUzU1M3ggTkFORCBjb250cm9sbGVyIENTIyVkIGF0ICVzSU8gMHglMDhseFxuIiwgY3MsIG1taW8/Ik1NIjoiUCIsIGFkcik7CisKKwlpZiAoIW1taW8pIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJQSU8gbW9kZSBub3QgeWV0IGltcGxlbWVudGVkIGZvciBDUzU1M1ggTkFORCBjb250cm9sbGVyXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KKwluZXdfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfbXRkKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSBDUzU1M1ggTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJm5ld19tdGRbMV0pOworCisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJbWVtc2V0KG5ld19tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKworCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCisJbmV3X210ZC0+cHJpdiA9IHRoaXM7CisJbmV3X210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCisJdGhpcy0+SU9fQUREUl9SID0gdGhpcy0+SU9fQUREUl9XID0gaW9yZW1hcChhZHIsIDQwOTYpOworCWlmICghdGhpcy0+SU9fQUREUl9SKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlvcmVtYXAgY3M1NTN4IE5BTkQgQDB4JTA4bHggZmFpbGVkXG4iLCBhZHIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIG91dF9tdGQ7CisJfQorCisJdGhpcy0+Y21kX2N0cmwgPSBjczU1M3hfaHdjb250cm9sOworCXRoaXMtPmRldl9yZWFkeSA9IGNzNTUzeF9kZXZpY2VfcmVhZHk7CisJdGhpcy0+cmVhZF9ieXRlID0gY3M1NTN4X3JlYWRfYnl0ZTsKKwl0aGlzLT5yZWFkX2J1ZiA9IGNzNTUzeF9yZWFkX2J1ZjsKKwl0aGlzLT53cml0ZV9idWYgPSBjczU1M3hfd3JpdGVfYnVmOworCisJdGhpcy0+Y2hpcF9kZWxheSA9IDA7CisKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCXRoaXMtPmVjYy5zaXplID0gMjU2OworCXRoaXMtPmVjYy5ieXRlcyA9IDM7CisJdGhpcy0+ZWNjLmh3Y3RsICA9IGNzX2VuYWJsZV9od2VjYzsKKwl0aGlzLT5lY2MuY2FsY3VsYXRlID0gY3NfY2FsY3VsYXRlX2VjYzsKKwl0aGlzLT5lY2MuY29ycmVjdCAgPSBuYW5kX2NvcnJlY3RfZGF0YTsKKworCS8qIEVuYWJsZSB0aGUgZm9sbG93aW5nIGZvciBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZSAqLworCXRoaXMtPm9wdGlvbnMgPSBOQU5EX1VTRV9GTEFTSF9CQlQgfCBOQU5EX05PX0FVVE9JTkNSOworCisJLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2NhbihuZXdfbXRkLCAxKSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0X2lvcjsKKwl9CisKKwljczU1M3hfbXRkW2NzXSA9IG5ld19tdGQ7CisJZ290byBvdXQ7CisKK291dF9pb3I6CisJaW91bm1hcCgodm9pZCAqKXRoaXMtPklPX0FERFJfUik7CitvdXRfbXRkOgorCWtmcmVlKG5ld19tdGQpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXNfZ2VvZGUodm9pZCkKK3sKKwkvKiBUaGVzZSBhcmUgdGhlIENQVXMgd2hpY2ggd2lsbCBoYXZlIGEgQ1M1NTNbNTZdIGNvbXBhbmlvbiBjaGlwICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgorCSAgICBib290X2NwdV9kYXRhLng4NiA9PSA1ICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDEwKQorCQlyZXR1cm4gMTsgLyogR2VvZGUgTFggKi8KKworCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfTlNDIHx8CisJICAgICBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9DWVJJWCkgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODYgPT0gNSAmJgorCSAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSA1KQorCQlyZXR1cm4gMTsgLyogR2VvZGUgR1ggKG7DqWUgR1gyKSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNzNTUzeF9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IC1FTlhJTzsKKwlpbnQgaTsKKwl1aW50NjRfdCB2YWw7CisKKwkvKiBJZiB0aGUgQ1BVIGlzbid0IGEgR2VvZGUgR1ggb3IgTFgsIGFib3J0ICovCisJaWYgKCFpc19nZW9kZSgpKQorCQlyZXR1cm4gLUVOWElPOworCisJLyogSWYgaXQgZG9lc24ndCBoYXZlIHRoZSBDUzU1M1s1Nl0sIGFib3J0ICovCisJcmRtc3JsKE1TUl9ESVZJTF9HTERfQ0FQLCB2YWwpOworCXZhbCAmPSB+MHhGRlVMTDsKKwlpZiAodmFsICE9IENBUF9DUzU1MzUgJiYgdmFsICE9IENBUF9DUzU1MzYpCisJCXJldHVybiAtRU5YSU87CisKKwkvKiBJZiBpdCBkb2Vzbid0IGhhdmUgdGhlIE5BTkQgY29udHJvbGxlciBlbmFibGVkLCBhYm9ydCAqLworCXJkbXNybChNU1JfRElWSUxfQkFMTF9PUFRTLCB2YWwpOworCWlmICh2YWwgJiAxKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNTNTUzeCBOQU5EIGNvbnRyb2xsZXI6IEZsYXNoIEkvTyBub3QgZW5hYmxlZCBpbiBNU1JfRElWSUxfQkFMTF9PUFRTLlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5SX0NTNTUzWF9DT05UUk9MTEVSUzsgaSsrKSB7CisJCXJkbXNybChNU1JfRElWSUxfTEJBUl9GTFNIMCArIGksIHZhbCk7CisKKwkJaWYgKCh2YWwgJiAoRkxTSF9MQkFSX0VOfEZMU0hfTk9SX05BTkQpKSA9PSAoRkxTSF9MQkFSX0VOfEZMU0hfTk9SX05BTkQpKQorCQkJZXJyID0gY3M1NTN4X2luaXRfb25lKGksICEhKHZhbCAmIEZMU0hfTUVNX0lPKSwgdmFsICYgMHhGRkZGRkZGRik7CisJfQorCisJLyogUmVnaXN0ZXIgYWxsIGRldmljZXMgdG9nZXRoZXIgaGVyZS4gVGhpcyBtZWFucyB3ZSBjYW4gZWFzaWx5IGhhY2sgaXQgdG8gCisJICAgZG8gbXRkY29uY2F0IGV0Yy4gaWYgd2Ugd2FudCB0by4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1M1NTNYX0NPTlRST0xMRVJTOyBpKyspIHsKKwkJaWYgKGNzNTUzeF9tdGRbaV0pIHsKKwkJCWFkZF9tdGRfZGV2aWNlKGNzNTUzeF9tdGRbaV0pOworCisJCQkvKiBJZiBhbnkgZGV2aWNlcyByZWdpc3RlcmVkLCByZXR1cm4gc3VjY2Vzcy4gRWxzZSB0aGUgbGFzdCBlcnJvci4gKi8KKwkJCWVyciA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCittb2R1bGVfaW5pdChjczU1M3hfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjczU1M3hfY2xlYW51cCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NTNTUzWF9DT05UUk9MTEVSUzsgaSsrKSB7CisJCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gY3M1NTN4X210ZFtpXTsKKwkJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwkJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2U7CisKKwkJaWYgKCFtdGQpCisJCQlicmVhazsKKworCQl0aGlzID0gY3M1NTN4X210ZFtpXS0+cHJpdjsKKwkJbW1pb19iYXNlID0gdGhpcy0+SU9fQUREUl9SOworCisJCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLworCQluYW5kX3JlbGVhc2UoY3M1NTN4X210ZFtpXSk7CisJCWNzNTUzeF9tdGRbaV0gPSBOVUxMOworCisJCS8qIHVubWFwIHBoeXNpY2FsIGFkcmVzcyAqLworCQlpb3VubWFwKG1taW9fYmFzZSk7CisKKwkJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwkJa2ZyZWUobXRkKTsKKwl9Cit9CisKK21vZHVsZV9leGl0KGNzNTUzeF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOQU5EIGNvbnRyb2xsZXIgZHJpdmVyIGZvciBBTUQgQ1M1NTM1L0NTNTUzNiBjb21wYW5pb24gY2hpcCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwppbmRleCBlYzVlNDVlLi42MTA3ZjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwpAQCAtNTgsMTAgKzU4LDEwIEBACiAJMHhlNDAwMDAwMCwKICNlbGlmIGRlZmluZWQoQ09ORklHX01PTUVOQ09fT0NFTE9UKQogCTB4MmYwMDAwMDAsCi0gICAgICAgIDB4ZmYwMDAwMDAsCisJMHhmZjAwMDAwMCwKICNlbGlmIGRlZmluZWQoQ09ORklHX01PTUVOQ09fT0NFTE9UX0cpIHx8IGRlZmluZWQgKENPTkZJR19NT01FTkNPX09DRUxPVF9DKQotICAgICAgICAweGZmMDAwMDAwLAotIyNlbHNlCisJMHhmZjAwMDAwMCwKKyNlbHNlCiAjd2FybmluZyBVbmtub3duIGFyY2hpdGVjdHVyZSBmb3IgRGlza09uQ2hpcC4gTm8gZGVmYXVsdCBwcm9iZSBsb2NhdGlvbnMgZGVmaW5lZAogI2VuZGlmCiAJMHhmZmZmZmZmZiB9OwpAQCAtNzMsNyArNzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGh5c2FkcjsKIAl1X2NoYXIgQ2hpcElEOwogCXVfY2hhciBDRFNOQ29udHJvbDsKLQlpbnQgY2hpcHNfcGVyX2Zsb29yOyAvKiBUaGUgbnVtYmVyIG9mIGNoaXBzIGRldGVjdGVkIG9uIGVhY2ggZmxvb3IgKi8KKwlpbnQgY2hpcHNfcGVyX2Zsb29yOwkvKiBUaGUgbnVtYmVyIG9mIGNoaXBzIGRldGVjdGVkIG9uIGVhY2ggZmxvb3IgKi8KIAlpbnQgY3VyZmxvb3I7CiAJaW50IGN1cmNoaXA7CiAJaW50IG1oMF9wYWdlOwpAQCAtODQsNiArODQsNyBAQAogLyogVGhpcyBpcyB0aGUgc3luZHJvbWUgY29tcHV0ZWQgYnkgdGhlIEhXIGVjYyBnZW5lcmF0b3IgdXBvbiByZWFkaW5nIGFuIGVtcHR5CiAgICBwYWdlLCBvbmUgd2l0aCBhbGwgMHhmZiBmb3IgZGF0YSBhbmQgc3RvcmVkIGVjYyBjb2RlLiAqLwogc3RhdGljIHVfY2hhciBlbXB0eV9yZWFkX3N5bmRyb21lWzZdID0geyAweDI2LCAweGZmLCAweDZkLCAweDQ3LCAweDczLCAweDdhIH07CisKIC8qIFRoaXMgaXMgdGhlIGVjYyB2YWx1ZSBjb21wdXRlZCBieSB0aGUgSFcgZWNjIGdlbmVyYXRvciB1cG9uIHdyaXRpbmcgYW4gZW1wdHkKICAgIHBhZ2UsIG9uZSB3aXRoIGFsbCAweGZmIGZvciBkYXRhLiAqLwogc3RhdGljIHVfY2hhciBlbXB0eV93cml0ZV9lY2NbNl0gPSB7IDB4NGIsIDB4MDAsIDB4ZTIsIDB4MGUsIDB4OTMsIDB4ZjcgfTsKQEAgLTk0LDI4ICs5NSwyOSBAQAogI2RlZmluZSBEb0NfaXNfTWlsbGVubml1bShkb2MpICgoZG9jKS0+Q2hpcElEID09IERPQ19DaGlwSURfRG9jTWlsKQogI2RlZmluZSBEb0NfaXNfMjAwMChkb2MpICgoZG9jKS0+Q2hpcElEID09IERPQ19DaGlwSURfRG9jMmspCiAKLXN0YXRpYyB2b2lkIGRvYzIwMHhfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKTsKK3N0YXRpYyB2b2lkIGRvYzIwMHhfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJpdG1hc2spOwogc3RhdGljIHZvaWQgZG9jMjAweF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApOwogCi1zdGF0aWMgaW50IGRlYnVnPTA7CitzdGF0aWMgaW50IGRlYnVnID0gMDsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIAotc3RhdGljIGludCB0cnlfZHdvcmQ9MTsKK3N0YXRpYyBpbnQgdHJ5X2R3b3JkID0gMTsKIG1vZHVsZV9wYXJhbSh0cnlfZHdvcmQsIGludCwgMCk7CiAKLXN0YXRpYyBpbnQgbm9fZWNjX2ZhaWx1cmVzPTA7CitzdGF0aWMgaW50IG5vX2VjY19mYWlsdXJlcyA9IDA7CiBtb2R1bGVfcGFyYW0obm9fZWNjX2ZhaWx1cmVzLCBpbnQsIDApOwogCi1zdGF0aWMgaW50IG5vX2F1dG9wYXJ0PTA7CitzdGF0aWMgaW50IG5vX2F1dG9wYXJ0ID0gMDsKIG1vZHVsZV9wYXJhbShub19hdXRvcGFydCwgaW50LCAwKTsKIAotc3RhdGljIGludCBzaG93X2Zpcm13YXJlX3BhcnRpdGlvbj0wOworc3RhdGljIGludCBzaG93X2Zpcm13YXJlX3BhcnRpdGlvbiA9IDA7CiBtb2R1bGVfcGFyYW0oc2hvd19maXJtd2FyZV9wYXJ0aXRpb24sIGludCwgMCk7CiAKICNpZmRlZiBNVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFCi1zdGF0aWMgaW50IGluZnRsX2JidF93cml0ZT0xOworc3RhdGljIGludCBpbmZ0bF9iYnRfd3JpdGUgPSAxOwogI2Vsc2UKLXN0YXRpYyBpbnQgaW5mdGxfYmJ0X3dyaXRlPTA7CitzdGF0aWMgaW50IGluZnRsX2JidF93cml0ZSA9IDA7CiAjZW5kaWYKIG1vZHVsZV9wYXJhbShpbmZ0bF9iYnRfd3JpdGUsIGludCwgMCk7CiAKQEAgLTEyMyw3ICsxMjUsNiBAQAogbW9kdWxlX3BhcmFtKGRvY19jb25maWdfbG9jYXRpb24sIHVsb25nLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZG9jX2NvbmZpZ19sb2NhdGlvbiwgIlBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIGF0IHdoaWNoIHRvIHByb2JlIGZvciBEaXNrT25DaGlwIik7CiAKLQogLyogU2VjdG9yIHNpemUgZm9yIEhXIEVDQyAqLwogI2RlZmluZSBTRUNUT1JfU0laRSA1MTIKIC8qIFRoZSBzZWN0b3IgYnl0ZXMgYXJlIHBhY2tlZCBpbnRvIE5CX0RBVEEgMTAgYml0IHdvcmRzICovCkBAIC0xNDcsNyArMTQ4LDcgQEAKICAqIHNvbWUgY29tbWVudHMsIGltcHJvdmVkIGEgbWlub3IgYml0IGFuZCBjb252ZXJ0ZWQgaXQgdG8gbWFrZSB1c2UKICAqIG9mIHRoZSBnZW5lcmljIFJlZWQtU29sb21vbiBsaWJhcnkuIHRnbHgKICAqLwotc3RhdGljIGludCBkb2NfZWNjX2RlY29kZSAoc3RydWN0IHJzX2NvbnRyb2wgKnJzLCB1aW50OF90ICpkYXRhLCB1aW50OF90ICplY2MpCitzdGF0aWMgaW50IGRvY19lY2NfZGVjb2RlKHN0cnVjdCByc19jb250cm9sICpycywgdWludDhfdCAqZGF0YSwgdWludDhfdCAqZWNjKQogewogCWludCBpLCBqLCBuZXJyLCBlcnJwb3NbOF07CiAJdWludDhfdCBwYXJpdHk7CkBAIC0xNjgsMTggKzE2OSwxOCBAQAogCSAqICBzW2ldID0gZHNbM114XjMgKyBkc1syXXheMiArIGRzWzFdeF4xICsgZHNbMF0KIAkgKiAgd2hlcmUgeCA9IGFscGhhXihGQ1IgKyBpKQogCSAqLwotCWZvcihqID0gMTsgaiA8IE5ST09UUzsgaisrKSB7Ci0JCWlmKGRzW2pdID09IDApCisJZm9yIChqID0gMTsgaiA8IE5ST09UUzsgaisrKSB7CisJCWlmIChkc1tqXSA9PSAwKQogCQkJY29udGludWU7CiAJCXRtcCA9IHJzLT5pbmRleF9vZltkc1tqXV07Ci0JCWZvcihpID0gMDsgaSA8IE5ST09UUzsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgTlJPT1RTOyBpKyspCiAJCQlzW2ldIF49IHJzLT5hbHBoYV90b1tyc19tb2RubihycywgdG1wICsgKEZDUiArIGkpICogaildOwogCX0KIAogCS8qIENhbGMgc1tpXSA9IHNbaV0gLyBhbHBoYV4odiArIGkpICovCiAJZm9yIChpID0gMDsgaSA8IE5ST09UUzsgaSsrKSB7CiAJCWlmIChzeW5baV0pCi0gCQkJc3luW2ldID0gcnNfbW9kbm4ocnMsIHJzLT5pbmRleF9vZltzW2ldXSArIChOTiAtIEZDUiAtIGkpKTsKKwkJCXN5bltpXSA9IHJzX21vZG5uKHJzLCBycy0+aW5kZXhfb2Zbc1tpXV0gKyAoTk4gLSBGQ1IgLSBpKSk7CiAJfQogCS8qIENhbGwgdGhlIGRlY29kZXIgbGlicmFyeSAqLwogCW5lcnIgPSBkZWNvZGVfcnMxNihycywgTlVMTCwgTlVMTCwgMTAxOSwgc3luLCAwLCBlcnJwb3MsIDAsIGVycnZhbCk7CkBAIC0xOTMsNyArMTk0LDcgQEAKIAkgKiBidXQgdGhleSBhcmUgZ2l2ZW4gYnkgdGhlIGRlc2lnbiBvZiB0aGUgZGUvZW5jb2RlciBjaXJjdWl0CiAJICogaW4gdGhlIERvQyBBU0lDJ3MuCiAJICovCi0JZm9yKGkgPSAwO2kgPCBuZXJyOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbmVycjsgaSsrKSB7CiAJCWludCBpbmRleCwgYml0cG9zLCBwb3MgPSAxMDE1IC0gZXJycG9zW2ldOwogCQl1aW50OF90IHZhbDsKIAkJaWYgKHBvcyA+PSBOQl9EQVRBICYmIHBvcyA8IDEwMTkpCkBAIC0yMDUsOCArMjA2LDcgQEAKIAkJCSAgIGNhbiBiZSBtb2RpZmllZCBzaW5jZSBwb3MgaXMgZXZlbiAqLwogCQkJaW5kZXggPSAocG9zID4+IDMpIF4gMTsKIAkJCWJpdHBvcyA9IHBvcyAmIDc7Ci0JCQlpZiAoKGluZGV4ID49IDAgJiYgaW5kZXggPCBTRUNUT1JfU0laRSkgfHwKLQkJCSAgICBpbmRleCA9PSAoU0VDVE9SX1NJWkUgKyAxKSkgeworCQkJaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8IGluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7CiAJCQkJdmFsID0gKHVpbnQ4X3QpIChlcnJ2YWxbaV0gPj4gKDIgKyBiaXRwb3MpKTsKIAkJCQlwYXJpdHkgXj0gdmFsOwogCQkJCWlmIChpbmRleCA8IFNFQ1RPUl9TSVpFKQpAQCAtMjE2LDkgKzIxNiw4IEBACiAJCQliaXRwb3MgPSAoYml0cG9zICsgMTApICYgNzsKIAkJCWlmIChiaXRwb3MgPT0gMCkKIAkJCQliaXRwb3MgPSA4OwotCQkJaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8Ci0JCQkgICAgaW5kZXggPT0gKFNFQ1RPUl9TSVpFICsgMSkpIHsKLQkJCQl2YWwgPSAodWludDhfdCkoZXJydmFsW2ldIDw8ICg4IC0gYml0cG9zKSk7CisJCQlpZiAoKGluZGV4ID49IDAgJiYgaW5kZXggPCBTRUNUT1JfU0laRSkgfHwgaW5kZXggPT0gKFNFQ1RPUl9TSVpFICsgMSkpIHsKKwkJCQl2YWwgPSAodWludDhfdCkgKGVycnZhbFtpXSA8PCAoOCAtIGJpdHBvcykpOwogCQkJCXBhcml0eSBePSB2YWw7CiAJCQkJaWYgKGluZGV4IDwgU0VDVE9SX1NJWkUpCiAJCQkJCWRhdGFbaW5kZXhdIF49IHZhbDsKQEAgLTI1MCwxMCArMjQ5LDExIEBACiAvKiBET0NfV2FpdFJlYWR5OiBXYWl0IGZvciBSRFkgbGluZSB0byBiZSBhc3NlcnRlZCBieSB0aGUgZmxhc2ggY2hpcCAqLwogc3RhdGljIGludCBfRG9DX1dhaXRSZWFkeShzdHJ1Y3QgZG9jX3ByaXYgKmRvYykKIHsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJdW5zaWduZWQgbG9uZyB0aW1lbyA9IGppZmZpZXMgKyAoSFogKiAxMCk7CiAKLQlpZihkZWJ1ZykgcHJpbnRrKCJfRG9DX1dhaXRSZWFkeS4uLlxuIik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIl9Eb0NfV2FpdFJlYWR5Li4uXG4iKTsKIAkvKiBPdXQtb2YtbGluZSByb3V0aW5lIHRvIHdhaXQgZm9yIGNoaXAgcmVzcG9uc2UgKi8KIAlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpIHsKIAkJd2hpbGUgKChSZWFkRE9DKGRvY3B0ciwgTXBsdXNfRmxhc2hDb250cm9sKSAmIENEU05fQ1RSTF9GUl9CX01BU0spICE9IENEU05fQ1RSTF9GUl9CX01BU0spIHsKQEAgLTI4MCw3ICsyODAsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBEb0NfV2FpdFJlYWR5KHN0cnVjdCBkb2NfcHJpdiAqZG9jKQogewotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChEb0NfaXNfTWlsbGVubml1bVBsdXMoZG9jKSkgewpAQCAtMjk4LDcgKzI5OCw4IEBACiAJCURvQ19EZWxheShkb2MsIDIpOwogCX0KIAotCWlmKGRlYnVnKSBwcmludGsoIkRvQ19XYWl0UmVhZHkgT0tcbiIpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJEb0NfV2FpdFJlYWR5IE9LXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMDYsOSArMzA3LDEwIEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCi0JaWYoZGVidWcpcHJpbnRrKCJ3cml0ZV9ieXRlICUwMnhcbiIsIGRhdHVtKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygid3JpdGVfYnl0ZSAlMDJ4XG4iLCBkYXR1bSk7CiAJV3JpdGVET0MoZGF0dW0sIGRvY3B0ciwgQ0RTTlNsb3dJTyk7CiAJV3JpdGVET0MoZGF0dW0sIGRvY3B0ciwgMmtfQ0RTTl9JTyk7CiB9CkBAIC0zMTcsNzcgKzMxOSw3OCBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAl1X2NoYXIgcmV0OwogCiAJUmVhZERPQyhkb2NwdHIsIENEU05TbG93SU8pOwogCURvQ19EZWxheShkb2MsIDIpOwogCXJldCA9IFJlYWRET0MoZG9jcHRyLCAya19DRFNOX0lPKTsKLQlpZiAoZGVidWcpIHByaW50aygicmVhZF9ieXRlIHJldHVybnMgJTAyeFxuIiwgcmV0KTsKKwlpZiAoZGVidWcpCisJCXByaW50aygicmVhZF9ieXRlIHJldHVybnMgJTAyeFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAwX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDBfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgaTsKLQlpZiAoZGVidWcpcHJpbnRrKCJ3cml0ZWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKLQlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIndyaXRlYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlXcml0ZURPQ18oYnVmW2ldLCBkb2NwdHIsIERvQ18ya19DRFNOX0lPICsgaSk7CiAJCWlmIChkZWJ1ZyAmJiBpIDwgMTYpCiAJCQlwcmludGsoIiUwMnggIiwgYnVmW2ldKTsKIAl9Ci0JaWYgKGRlYnVnKSBwcmludGsoIlxuIik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDBfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDBfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwotIAlpbnQgaTsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwlpbnQgaTsKIAotCWlmIChkZWJ1ZylwcmludGsoInJlYWRidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInJlYWRidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CiAKLQlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWJ1ZltpXSA9IFJlYWRET0MoZG9jcHRyLCAya19DRFNOX0lPICsgaSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAwX3JlYWRidWZfZHdvcmQoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkb2MyMDAwX3JlYWRidWZfZHdvcmQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLSAJaW50IGk7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJaW50IGk7CiAKLQlpZiAoZGVidWcpIHByaW50aygicmVhZGJ1Zl9kd29yZCBvZiAlZCBieXRlczogIiwgbGVuKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygicmVhZGJ1Zl9kd29yZCBvZiAlZCBieXRlczogIiwgbGVuKTsKIAotCWlmICh1bmxpa2VseSgoKCh1bnNpZ25lZCBsb25nKWJ1Zil8bGVuKSAmIDMpKSB7Ci0JCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKLQkJCSoodWludDhfdCAqKSgmYnVmW2ldKSA9IFJlYWRET0MoZG9jcHRyLCAya19DRFNOX0lPICsgaSk7CisJaWYgKHVubGlrZWx5KCgoKHVuc2lnbmVkIGxvbmcpYnVmKSB8IGxlbikgJiAzKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCSoodWludDhfdCAqKSAoJmJ1ZltpXSkgPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTyArIGkpOwogCQl9CiAJfSBlbHNlIHsKLQkJZm9yIChpPTA7IGkgPCBsZW47IGkrPTQpIHsKLQkJCSoodWludDMyX3QqKSgmYnVmW2ldKSA9IHJlYWRsKGRvY3B0ciArIERvQ18ya19DRFNOX0lPICsgaSk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkgeworCQkJKih1aW50MzJfdCAqKSAoJmJ1ZltpXSkgPSByZWFkbChkb2NwdHIgKyBEb0NfMmtfQ0RTTl9JTyArIGkpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgaW50IGRvYzIwMDBfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICAgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IGRvYzIwMDBfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKLQlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKIAkJaWYgKGJ1ZltpXSAhPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKQEAgLTQwMCwxMiArNDAzLDEwIEBACiAJdWludDE2X3QgcmV0OwogCiAJZG9jMjAweF9zZWxlY3RfY2hpcChtdGQsIG5yKTsKLQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7Ci0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIE5BTkRfQ01EX1JFQURJRCk7Ci0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQUxFKTsKLQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgMCk7Ci0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJBTEUpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfUkVBRElELAorCQkJICBOQU5EX0NUUkxfQ0xFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJZG9jMjAweF9od2NvbnRyb2wobXRkLCAwLCBOQU5EX0NUUkxfQUxFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJLyogV2UgY2FudCcgdXNlIGRldl9yZWFkeSBoZXJlLCBidXQgYXQgbGVhc3Qgd2Ugd2FpdCBmb3IgdGhlCiAJICogY29tbWFuZCB0byBjb21wbGV0ZQpAQCAtNDIzLDEyICs0MjQsMTEgQEAKIAkJfSBpZGVudDsKIAkJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKLQkJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCQlkb2MyMDAwX3dyaXRlX2J5dGUobXRkLCBOQU5EX0NNRF9SRUFESUQpOwotCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7Ci0JCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQUxFKTsKLQkJZG9jMjAwMF93cml0ZV9ieXRlKG10ZCwgMCk7Ci0JCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKKwkJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9SRUFESUQsCisJCQkJICBOQU5EX0NUUkxfQ0xFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgMCwgTkFORF9DVFJMX0FMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX05PTkUsCisJCQkJICBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJCXVkZWxheSg1MCk7CiAKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCXByaW50ayhLRVJOX0RFQlVHICJEZXRlY3RlZCAlZCBjaGlwcyBwZXIgZmxvb3IuXG4iLCBpKTsKIH0KIAotc3RhdGljIGludCBkb2MyMDB4X3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgZG9jMjAweF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzKQogewogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKIApAQCAtNDgyLDcgKzQ4Miw3IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCiAJV3JpdGVET0MoZGF0dW0sIGRvY3B0ciwgQ0RTTlNsb3dJTyk7CiAJV3JpdGVET0MoZGF0dW0sIGRvY3B0ciwgTWlsX0NEU05fSU8pOwpAQCAtNDkzLDcgKzQ5Myw3IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCiAJLy9SZWFkRE9DKGRvY3B0ciwgQ0RTTlNsb3dJTyk7CiAJLyogMTEuNC41IC0tIGRlbGF5IHR3aWNlIHRvIGFsbG93IGV4dGVuZGVkIGxlbmd0aCBjeWNsZSAqLwpAQCAtNTAzLDUwICs1MDMsNDcgQEAKIAlyZXR1cm4gUmVhZERPQyhkb2NwdHIsIExhc3REYXRhUmVhZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG9jMjAwMV93cml0ZWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCi0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAJCVdyaXRlRE9DXyhidWZbaV0sIGRvY3B0ciwgRG9DX01pbF9DRFNOX0lPICsgaSk7CiAJLyogVGVybWluYXRlIHdyaXRlIHBpcGVsaW5lICovCiAJV3JpdGVET0MoMHgwMCwgZG9jcHRyLCBXcml0ZVBpcGVUZXJtKTsKIH0KIAotc3RhdGljIHZvaWQgZG9jMjAwMV9yZWFkYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgIHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG9jMjAwMV9yZWFkYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKIAkvKiBTdGFydCByZWFkIHBpcGVsaW5lICovCiAJUmVhZERPQyhkb2NwdHIsIFJlYWRQaXBlSW5pdCk7CiAKLQlmb3IgKGk9MDsgaSA8IGxlbi0xOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykKIAkJYnVmW2ldID0gUmVhZERPQyhkb2NwdHIsIE1pbF9DRFNOX0lPICsgKGkgJiAweGZmKSk7CiAKIAkvKiBUZXJtaW5hdGUgcmVhZCBwaXBlbGluZSAqLwogCWJ1ZltpXSA9IFJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwogfQogCi1zdGF0aWMgaW50IGRvYzIwMDFfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgZG9jMjAwMV92ZXJpZnlidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgaTsKIAogCS8qIFN0YXJ0IHJlYWQgcGlwZWxpbmUgKi8KIAlSZWFkRE9DKGRvY3B0ciwgUmVhZFBpcGVJbml0KTsKIAotCWZvciAoaT0wOyBpIDwgbGVuLTE7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKQogCQlpZiAoYnVmW2ldICE9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTykpIHsKIAkJCVJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwogCQkJcmV0dXJuIGk7CkBAIC01NjAsODcgKzU1Nyw5MCBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAl1X2NoYXIgcmV0OwogCi0gICAgICAgIFJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOwotICAgICAgICBSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKLSAgICAgICAgcmV0ID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7Ci0JaWYgKGRlYnVnKSBwcmludGsoInJlYWRfYnl0ZSByZXR1cm5zICUwMnhcbiIsIHJldCk7CisJUmVhZERPQyhkb2NwdHIsIE1wbHVzX1JlYWRQaXBlSW5pdCk7CisJUmVhZERPQyhkb2NwdHIsIE1wbHVzX1JlYWRQaXBlSW5pdCk7CisJcmV0ID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInJlYWRfYnl0ZSByZXR1cm5zICUwMnhcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgaTsKIAotCWlmIChkZWJ1ZylwcmludGsoIndyaXRlYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOwotCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKKwlpZiAoZGVidWcpCisJCXByaW50aygid3JpdGVidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCVdyaXRlRE9DXyhidWZbaV0sIGRvY3B0ciwgRG9DX01pbF9DRFNOX0lPICsgaSk7CiAJCWlmIChkZWJ1ZyAmJiBpIDwgMTYpCiAJCQlwcmludGsoIiUwMnggIiwgYnVmW2ldKTsKIAl9Ci0JaWYgKGRlYnVnKSBwcmludGsoIlxuIik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkb2MyMDAxcGx1c19yZWFkYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKLQlpZiAoZGVidWcpcHJpbnRrKCJyZWFkYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJyZWFkYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOwogCiAJLyogU3RhcnQgcmVhZCBwaXBlbGluZSAqLwogCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOwogCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOwogCi0JZm9yIChpPTA7IGkgPCBsZW4tMjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbiAtIDI7IGkrKykgewogCQlidWZbaV0gPSBSZWFkRE9DKGRvY3B0ciwgTWlsX0NEU05fSU8pOwogCQlpZiAoZGVidWcgJiYgaSA8IDE2KQogCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7CiAJfQogCiAJLyogVGVybWluYXRlIHJlYWQgcGlwZWxpbmUgKi8KLQlidWZbbGVuLTJdID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CisJYnVmW2xlbiAtIDJdID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CiAJaWYgKGRlYnVnICYmIGkgPCAxNikKLQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltsZW4tMl0pOwotCWJ1ZltsZW4tMV0gPSBSZWFkRE9DKGRvY3B0ciwgTXBsdXNfTGFzdERhdGFSZWFkKTsKKwkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltsZW4gLSAyXSk7CisJYnVmW2xlbiAtIDFdID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CiAJaWYgKGRlYnVnICYmIGkgPCAxNikKLQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltsZW4tMV0pOwotCWlmIChkZWJ1ZykgcHJpbnRrKCJcbiIpOworCQlwcmludGsoIiUwMnggIiwgYnVmW2xlbiAtIDFdKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygiXG4iKTsKIH0KIAotc3RhdGljIGludCBkb2MyMDAxcGx1c192ZXJpZnlidWYoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIGludCBkb2MyMDAxcGx1c192ZXJpZnlidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgaTsKIAotCWlmIChkZWJ1ZylwcmludGsoInZlcmlmeWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygidmVyaWZ5YnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOwogCiAJLyogU3RhcnQgcmVhZCBwaXBlbGluZSAqLwogCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOwogCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOwogCi0JZm9yIChpPTA7IGkgPCBsZW4tMjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAyOyBpKyspCiAJCWlmIChidWZbaV0gIT0gUmVhZERPQyhkb2NwdHIsIE1pbF9DRFNOX0lPKSkgewogCQkJUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CiAJCQlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfTGFzdERhdGFSZWFkKTsKIAkJCXJldHVybiBpOwogCQl9Ci0JaWYgKGJ1ZltsZW4tMl0gIT0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCkpCi0JCXJldHVybiBsZW4tMjsKLQlpZiAoYnVmW2xlbi0xXSAhPSBSZWFkRE9DKGRvY3B0ciwgTXBsdXNfTGFzdERhdGFSZWFkKSkKLQkJcmV0dXJuIGxlbi0xOworCWlmIChidWZbbGVuIC0gMl0gIT0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCkpCisJCXJldHVybiBsZW4gLSAyOworCWlmIChidWZbbGVuIC0gMV0gIT0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCkpCisJCXJldHVybiBsZW4gLSAxOwogCXJldHVybiAwOwogfQogCkBAIC02NDgsMTAgKzY0OCwxMSBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgZmxvb3IgPSAwOwogCi0JaWYoZGVidWcpcHJpbnRrKCJzZWxlY3QgY2hpcCAoJWQpXG4iLCBjaGlwKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygic2VsZWN0IGNoaXAgKCVkKVxuIiwgY2hpcCk7CiAKIAlpZiAoY2hpcCA9PSAtMSkgewogCQkvKiBEaXNhYmxlIGZsYXNoIGludGVybmFsbHkgKi8KQEAgLTY2MCw3ICs2NjEsNyBAQAogCX0KIAogCWZsb29yID0gY2hpcCAvIGRvYy0+Y2hpcHNfcGVyX2Zsb29yOwotCWNoaXAgLT0gKGZsb29yICogIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKKwljaGlwIC09IChmbG9vciAqIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKIAogCS8qIEFzc2VydCBDaGlwRW5hYmxlIGFuZCBkZWFzc2VydCBXcml0ZVByb3RlY3QgKi8KIAlXcml0ZURPQygoRE9DX0ZMQVNIX0NFKSwgZG9jcHRyLCBNcGx1c19GbGFzaFNlbGVjdCk7CkBAIC02NzQsNzIgKzY3NSw2MSBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgZmxvb3IgPSAwOwogCi0JaWYoZGVidWcpcHJpbnRrKCJzZWxlY3QgY2hpcCAoJWQpXG4iLCBjaGlwKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygic2VsZWN0IGNoaXAgKCVkKVxuIiwgY2hpcCk7CiAKIAlpZiAoY2hpcCA9PSAtMSkKIAkJcmV0dXJuOwogCiAJZmxvb3IgPSBjaGlwIC8gZG9jLT5jaGlwc19wZXJfZmxvb3I7Ci0JY2hpcCAtPSAoZmxvb3IgKiAgZG9jLT5jaGlwc19wZXJfZmxvb3IpOworCWNoaXAgLT0gKGZsb29yICogZG9jLT5jaGlwc19wZXJfZmxvb3IpOwogCiAJLyogMTEuNC40IC0tIGRlYXNzZXJ0IENFIGJlZm9yZSBjaGFuZ2luZyBjaGlwICovCi0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJOQ0UpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfTk9ORSwgMCB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJV3JpdGVET0MoZmxvb3IsIGRvY3B0ciwgRmxvb3JTZWxlY3QpOwogCVdyaXRlRE9DKGNoaXAsIGRvY3B0ciwgQ0RTTkRldmljZVNlbGVjdCk7CiAKLQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVE5DRSk7CisJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJZG9jLT5jdXJjaGlwID0gY2hpcDsKIAlkb2MtPmN1cmZsb29yID0gZmxvb3I7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMHhfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorI2RlZmluZSBDRFNOX0NUUkxfTVNLIChDRFNOX0NUUkxfQ0UgfCBDRFNOX0NUUkxfQ0xFIHwgQ0RTTl9DVFJMX0FMRSkKKworc3RhdGljIHZvaWQgZG9jMjAweF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKLQlzd2l0Y2goY21kKSB7Ci0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgfD0gQ0RTTl9DVFJMX0NFOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJZG9jLT5DRFNOQ29udHJvbCAmPSB+Q0RTTl9DVFJMX0NFOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJZG9jLT5DRFNOQ29udHJvbCB8PSBDRFNOX0NUUkxfQ0xFOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkNMRToKLQkJZG9jLT5DRFNOQ29udHJvbCAmPSB+Q0RTTl9DVFJMX0NMRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgfD0gQ0RTTl9DVFJMX0FMRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgJj0gfkNEU05fQ1RSTF9BTEU7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUV1A6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgfD0gQ0RTTl9DVFJMX1dQOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUldQOgotCQlkb2MtPkNEU05Db250cm9sICY9IH5DRFNOX0NUUkxfV1A7Ci0JCWJyZWFrOworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQlkb2MtPkNEU05Db250cm9sICY9IH5DRFNOX0NUUkxfTVNLOworCQlkb2MtPkNEU05Db250cm9sIHw9IGN0cmwgJiBDRFNOX0NUUkxfTVNLOworCQlpZiAoZGVidWcpCisJCQlwcmludGsoImh3Y29udHJvbCglZCk6ICUwMnhcbiIsIGNtZCwgZG9jLT5DRFNOQ29udHJvbCk7CisJCVdyaXRlRE9DKGRvYy0+Q0RTTkNvbnRyb2wsIGRvY3B0ciwgQ0RTTkNvbnRyb2wpOworCQkvKiAxMS40LjMgLS0gNCBOT1BzIGFmdGVyIENTRE5Db250cm9sIHdyaXRlICovCisJCURvQ19EZWxheShkb2MsIDQpOwogCX0KLQlpZiAoZGVidWcpcHJpbnRrKCJod2NvbnRyb2woJWQpOiAlMDJ4XG4iLCBjbWQsIGRvYy0+Q0RTTkNvbnRyb2wpOwotCVdyaXRlRE9DKGRvYy0+Q0RTTkNvbnRyb2wsIGRvY3B0ciwgQ0RTTkNvbnRyb2wpOwotCS8qIDExLjQuMyAtLSA0IE5PUHMgYWZ0ZXIgQ1NETkNvbnRyb2wgd3JpdGUgKi8KLQlEb0NfRGVsYXkoZG9jLCA0KTsKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpIHsKKwkJaWYgKERvQ19pc18yMDAwKGRvYykpCisJCQlkb2MyMDAwX3dyaXRlX2J5dGUobXRkLCBjbWQpOworCQllbHNlCisJCQlkb2MyMDAxX3dyaXRlX2J5dGUobXRkLCBjbWQpOworCX0KIH0KIAotc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfY29tbWFuZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCitzdGF0aWMgdm9pZCBkb2MyMDAxcGx1c19jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAogCS8qCiAJICogTXVzdCB0ZXJtaW5hdGUgd3JpdGUgcGlwZWxpbmUgYmVmb3JlIHNlbmRpbmcgYW55IGNvbW1hbmRzCkBAIC03NTYsOSArNzQ2LDkgQEAKIAlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9TRVFJTikgewogCQlpbnQgcmVhZGNtZDsKIAotCQlpZiAoY29sdW1uID49IG10ZC0+b29iYmxvY2spIHsKKwkJaWYgKGNvbHVtbiA+PSBtdGQtPndyaXRlc2l6ZSkgewogCQkJLyogT09CIGFyZWEgKi8KLQkJCWNvbHVtbiAtPSBtdGQtPm9vYmJsb2NrOworCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOwogCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQURPT0I7CiAJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CiAJCQkvKiBGaXJzdCAyNTYgYnl0ZXMgLS0+IFJFQUQwICovCkBAIC03ODIsMjUgKzc3MiwyNiBAQAogCQkJV3JpdGVET0MoY29sdW1uLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQWRkcmVzcyk7CiAJCX0KIAkJaWYgKHBhZ2VfYWRkciAhPSAtMSkgewotCQkJV3JpdGVET0MoKHVuc2lnbmVkIGNoYXIpIChwYWdlX2FkZHIgJiAweGZmKSwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOwotCQkJV3JpdGVET0MoKHVuc2lnbmVkIGNoYXIpICgocGFnZV9hZGRyID4+IDgpICYgMHhmZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKKwkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKShwYWdlX2FkZHIgJiAweGZmKSwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOworCQkJV3JpdGVET0MoKHVuc2lnbmVkIGNoYXIpKChwYWdlX2FkZHIgPj4gOCkgJiAweGZmKSwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOwogCQkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgaGlnaGVyIGRlbnNpdHkgZGV2aWNlcyAqLwogCQkJaWYgKHRoaXMtPmNoaXBzaXplICYgMHgwYzAwMDAwMCkgewotCQkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweDBmKSwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOworCQkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSgocGFnZV9hZGRyID4+IDE2KSAmIDB4MGYpLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQWRkcmVzcyk7CiAJCQkJcHJpbnRrKCJoaWdoIGRlbnNpdHlcbiIpOwogCQkJfQogCQl9CiAJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7CiAJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7CiAJCS8qIGRlYXNzZXJ0IEFMRSAqLwotCQlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFEMCB8fCBjb21tYW5kID09IE5BTkRfQ01EX1JFQUQxIHx8IGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQiB8fCBjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkKKwkJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDAgfHwgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFEMSB8fAorCQkgICAgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFET09CIHx8IGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRElEKQogCQkJV3JpdGVET0MoMCwgZG9jcHRyLCBNcGx1c19GbGFzaENvbnRyb2wpOwogCX0KIAogCS8qCiAJICogcHJvZ3JhbSBhbmQgZXJhc2UgaGF2ZSB0aGVpciBvd24gYnVzeSBoYW5kbGVycwogCSAqIHN0YXR1cyBhbmQgc2VxdWVudGlhbCBpbiBuZWVkcyBubyBkZWxheQotCSovCisJICovCiAJc3dpdGNoIChjb21tYW5kKSB7CiAKIAljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgpAQCAtODE3LDU1ICs4MDgsNTcgQEAKIAkJV3JpdGVET0MoTkFORF9DTURfU1RBVFVTLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQ21kKTsKIAkJV3JpdGVET0MoMCwgZG9jcHRyLCBNcGx1c19Xcml0ZVBpcGVUZXJtKTsKIAkJV3JpdGVET0MoMCwgZG9jcHRyLCBNcGx1c19Xcml0ZVBpcGVUZXJtKTsKLQkJd2hpbGUgKCAhKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgMHg0MCkpOworCQl3aGlsZSAoISh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIDB4NDApKSA7CiAJCXJldHVybjsKIAotCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCisJCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCiAJZGVmYXVsdDoKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1c3kgcGluLCB3ZSBhcHBseSB0aGUgZ2l2ZW4KIAkJICogY29tbWFuZCBkZWxheQotCQkqLworCQkgKi8KIAkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpIHsKLQkJCXVkZWxheSAodGhpcy0+Y2hpcF9kZWxheSk7CisJCQl1ZGVsYXkodGhpcy0+Y2hpcF9kZWxheSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAkvKiBBcHBseSB0aGlzIHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0IHRXQiBpbgogCSAqIGFueSBjYXNlIG9uIGFueSBtYWNoaW5lLiAqLwotCW5kZWxheSAoMTAwKTsKKwluZGVsYXkoMTAwKTsKIAkvKiB3YWl0IHVudGlsIGNvbW1hbmQgaXMgcHJvY2Vzc2VkICovCi0Jd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSk7CisJd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSkgOwogfQogCiBzdGF0aWMgaW50IGRvYzIwMHhfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAogCWlmIChEb0NfaXNfTWlsbGVubml1bVBsdXMoZG9jKSkgewogCQkvKiAxMS40LjIgLS0gbXVzdCBOT1AgZm91ciB0aW1lcyBiZWZvcmUgY2hlY2tpbmcgRlIvQiMgKi8KIAkJRG9DX0RlbGF5KGRvYywgNCk7CiAJCWlmICgoUmVhZERPQyhkb2NwdHIsIE1wbHVzX0ZsYXNoQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQl9NQVNLKSAhPSBDRFNOX0NUUkxfRlJfQl9NQVNLKSB7Ci0JCQlpZihkZWJ1ZykKKwkJCWlmIChkZWJ1ZykKIAkJCQlwcmludGsoIm5vdCByZWFkeVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlpZiAoZGVidWcpcHJpbnRrKCJ3YXMgcmVhZHlcbiIpOworCQlpZiAoZGVidWcpCisJCQlwcmludGsoIndhcyByZWFkeVxuIik7CiAJCXJldHVybiAxOwogCX0gZWxzZSB7CiAJCS8qIDExLjQuMiAtLSBtdXN0IE5PUCBmb3VyIHRpbWVzIGJlZm9yZSBjaGVja2luZyBGUi9CIyAqLwogCQlEb0NfRGVsYXkoZG9jLCA0KTsKIAkJaWYgKCEoUmVhZERPQyhkb2NwdHIsIENEU05Db250cm9sKSAmIENEU05fQ1RSTF9GUl9CKSkgewotCQkJaWYoZGVidWcpCisJCQlpZiAoZGVidWcpCiAJCQkJcHJpbnRrKCJub3QgcmVhZHlcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogMTEuNC4yIC0tIE11c3QgTk9QIHR3aWNlIGlmIGl0J3MgcmVhZHkgKi8KIAkJRG9DX0RlbGF5KGRvYywgMik7Ci0JCWlmIChkZWJ1ZylwcmludGsoIndhcyByZWFkeVxuIik7CisJCWlmIChkZWJ1ZykKKwkJCXByaW50aygid2FzIHJlYWR5XG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogfQpAQCAtODgxLDEwICs4NzQsMTAgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKIAkvKiBQcmltZSB0aGUgRUNDIGVuZ2luZSAqLwotCXN3aXRjaChtb2RlKSB7CisJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBOQU5EX0VDQ19SRUFEOgogCQlXcml0ZURPQyhET0NfRUNDX1JFU0VULCBkb2NwdHIsIEVDQ0NvbmYpOwogCQlXcml0ZURPQyhET0NfRUNDX0VOLCBkb2NwdHIsIEVDQ0NvbmYpOwpAQCAtOTAwLDEwICs4OTMsMTAgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKIAkvKiBQcmltZSB0aGUgRUNDIGVuZ2luZSAqLwotCXN3aXRjaChtb2RlKSB7CisJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBOQU5EX0VDQ19SRUFEOgogCQlXcml0ZURPQyhET0NfRUNDX1JFU0VULCBkb2NwdHIsIE1wbHVzX0VDQ0NvbmYpOwogCQlXcml0ZURPQyhET0NfRUNDX0VOLCBkb2NwdHIsIE1wbHVzX0VDQ0NvbmYpOwpAQCAtOTE2LDEyICs5MDksMTEgQEAKIH0KIAogLyogVGhpcyBjb2RlIGlzIG9ubHkgY2FsbGVkIG9uIHdyaXRlICovCi1zdGF0aWMgaW50IGRvYzIwMHhfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCi0JCQkJIHVuc2lnbmVkIGNoYXIgKmVjY19jb2RlKQorc3RhdGljIGludCBkb2MyMDB4X2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1bnNpZ25lZCBjaGFyICplY2NfY29kZSkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAJaW50IGVtcHR5bWF0Y2ggPSAxOwogCkBAIC05NjEsNyArOTUzLDggQEAKIAkJICAgb2Z0ZW4uICBJdCBjb3VsZCBiZSBvcHRpbWl6ZWQgYXdheSBieSBleGFtaW5pbmcgdGhlIGRhdGEgaW4KIAkJICAgdGhlIHdyaXRlYnVmIHJvdXRpbmUsIGFuZCByZW1lbWJlcmluZyB0aGUgcmVzdWx0LiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLQkJCWlmIChkYXRbaV0gPT0gMHhmZikgY29udGludWU7CisJCQlpZiAoZGF0W2ldID09IDB4ZmYpCisJCQkJY29udGludWU7CiAJCQllbXB0eW1hdGNoID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC05NjksMTcgKzk2MiwyMCBAQAogCS8qIElmIGVtcHR5bWF0Y2ggc3RpbGwgPTEsIHdlIGRvIGhhdmUgYW4gYWxsLTB4ZmYgZGF0YSBidWZmZXIuCiAJICAgUmV0dXJuIGFsbC0weGZmIGVjYyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSBjb21wdXRlZCBvbmUsIHNvCiAJICAgaXQnbGwgbG9vayBqdXN0IGxpa2UgYSBmcmVzaGx5LWVyYXNlZCBwYWdlLiAqLwotCWlmIChlbXB0eW1hdGNoKSBtZW1zZXQoZWNjX2NvZGUsIDB4ZmYsIDYpOworCWlmIChlbXB0eW1hdGNoKQorCQltZW1zZXQoZWNjX2NvZGUsIDB4ZmYsIDYpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG9jMjAweF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LCB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQorc3RhdGljIGludCBkb2MyMDB4X2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsCisJCQkJdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICppc251bGwpCiB7CiAJaW50IGksIHJldCA9IDA7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXVpbnQ4X3QgY2FsY19lY2NbNl07CiAJdm9sYXRpbGUgdV9jaGFyIGR1bW15OwogCWludCBlbXB0eW1hdGNoID0gMTsKIApAQCAtMTAxMiwxOCArMTAwOCwyMCBAQAogCQkgICBhbGwtMHhmZiBkYXRhIGFuZCBzdG9yZWQgZWNjIGJsb2NrLiAgQ2hlY2sgdGhlIHN0b3JlZCBlY2MuICovCiAJCWlmIChlbXB0eW1hdGNoKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCQkJaWYgKHJlYWRfZWNjW2ldID09IDB4ZmYpIGNvbnRpbnVlOworCQkJCWlmIChyZWFkX2VjY1tpXSA9PSAweGZmKQorCQkJCQljb250aW51ZTsKIAkJCQllbXB0eW1hdGNoID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCQkvKiBJZiBlbXB0eW1hdGNoIHN0aWxsID0xLCBjaGVjayB0aGUgZGF0YSBibG9jay4gKi8KIAkJaWYgKGVtcHR5bWF0Y2gpIHsKLQkJLyogTm90ZTogdGhpcyBzb21ld2hhdCBleHBlbnNpdmUgdGVzdCBzaG91bGQgbm90IGJlIHRyaWdnZXJlZAotCQkgICBvZnRlbi4gIEl0IGNvdWxkIGJlIG9wdGltaXplZCBhd2F5IGJ5IGV4YW1pbmluZyB0aGUgZGF0YSBpbgotCQkgICB0aGUgcmVhZGJ1ZiByb3V0aW5lLCBhbmQgcmVtZW1iZXJpbmcgdGhlIHJlc3VsdC4gKi8KKwkJCS8qIE5vdGU6IHRoaXMgc29tZXdoYXQgZXhwZW5zaXZlIHRlc3Qgc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQKKwkJCSAgIG9mdGVuLiAgSXQgY291bGQgYmUgb3B0aW1pemVkIGF3YXkgYnkgZXhhbWluaW5nIHRoZSBkYXRhIGluCisJCQkgICB0aGUgcmVhZGJ1ZiByb3V0aW5lLCBhbmQgcmVtZW1iZXJpbmcgdGhlIHJlc3VsdC4gKi8KIAkJCWZvciAoaSA9IDA7IGkgPCA1MTI7IGkrKykgewotCQkJCWlmIChkYXRbaV0gPT0gMHhmZikgY29udGludWU7CisJCQkJaWYgKGRhdFtpXSA9PSAweGZmKQorCQkJCQljb250aW51ZTsKIAkJCQllbXB0eW1hdGNoID0gMDsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTEwMzIsNyArMTAzMCw4IEBACiAJCSAgIGVyYXNlZCBibG9jaywgaW4gd2hpY2ggY2FzZSB0aGUgRUNDIHdpbGwgbm90IGNvbWUgb3V0IHJpZ2h0LgogCQkgICBXZSdsbCBzdXBwcmVzcyB0aGUgZXJyb3IgYW5kIHRlbGwgdGhlIGNhbGxlciBldmVyeXRoaW5nJ3MKIAkJICAgT0suICBCZWNhdXNlIGl0IGlzLiAqLwotCQlpZiAoIWVtcHR5bWF0Y2gpIHJldCA9IGRvY19lY2NfZGVjb2RlIChyc19kZWNvZGVyLCBkYXQsIGNhbGNfZWNjKTsKKwkJaWYgKCFlbXB0eW1hdGNoKQorCQkJcmV0ID0gZG9jX2VjY19kZWNvZGUocnNfZGVjb2RlciwgZGF0LCBjYWxjX2VjYyk7CiAJCWlmIChyZXQgPiAwKQogCQkJcHJpbnRrKEtFUk5fRVJSICJkb2MyMDB4X2NvcnJlY3RfZGF0YSBjb3JyZWN0ZWQgJWQgZXJyb3JzXG4iLCByZXQpOwogCX0KQEAgLTEwNTksMTEgKzEwNTgsMTAgQEAKICAqIHNhZmVyLiAgVGhlIG9ubHkgcHJvYmxlbSB3aXRoIGl0IGlzIHRoYXQgYW55IGNvZGUgdGhhdCBwYXJzZXMgb29iZnJlZSBtdXN0CiAgKiBiZSBhYmxlIHRvIGhhbmRsZSBvdXQtb2Ytb3JkZXIgc2VnbWVudHMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIGRvYzIwMHhfb29iaW5mbyA9IHsKLSAgICAgICAgLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKLSAgICAgICAgLmVjY2J5dGVzID0gNiwKLSAgICAgICAgLmVjY3BvcyA9IHswLCAxLCAyLCAzLCA0LCA1fSwKLSAgICAgICAgLm9vYmZyZWUgPSB7IHs4LCA4fSwgezYsIDJ9IH0KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgZG9jMjAweF9vb2JpbmZvID0geworCS5lY2NieXRlcyA9IDYsCisJLmVjY3BvcyA9IHswLCAxLCAyLCAzLCA0LCA1fSwKKwkub29iZnJlZSA9IHt7OCwgOH0sIHs2LCAyfX0KIH07CiAKIC8qIEZpbmQgdGhlIChJKU5GVEwgTWVkaWEgSGVhZGVyLCBhbmQgb3B0aW9uYWxseSBhbHNvIHRoZSBtaXJyb3IgbWVkaWEgaGVhZGVyLgpAQCAtMTA3Miw4ICsxMDcwLDcgQEAKICAgIGVpdGhlciAiQU5BTkQiIG9yICJCTkFORCIuICBJZiBmaW5kbWlycm9yPTEsIGFsc28gbG9vayBmb3IgdGhlIG1pcnJvciBtZWRpYQogICAgaGVhZGVyLiAgVGhlIHBhZ2UgI3Mgb2YgdGhlIGZvdW5kIG1lZGlhIGhlYWRlcnMgYXJlIHBsYWNlZCBpbiBtaDBfcGFnZSBhbmQKICAgIG1oMV9wYWdlIGluIHRoZSBET0MgcHJpdmF0ZSBzdHJ1Y3R1cmUuICovCi1zdGF0aWMgaW50IF9faW5pdCBmaW5kX21lZGlhX2hlYWRlcnMoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLAotCQkJCSAgICAgY29uc3QgY2hhciAqaWQsIGludCBmaW5kbWlycm9yKQorc3RhdGljIGludCBfX2luaXQgZmluZF9tZWRpYV9oZWFkZXJzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgY29uc3QgY2hhciAqaWQsIGludCBmaW5kbWlycm9yKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwpAQCAtMTA4MiwxNyArMTA3OSwxOSBAQAogCXNpemVfdCByZXRsZW47CiAKIAlmb3IgKG9mZnMgPSAwOyBvZmZzIDwgbXRkLT5zaXplOyBvZmZzICs9IG10ZC0+ZXJhc2VzaXplKSB7Ci0JCXJldCA9IG10ZC0+cmVhZChtdGQsIG9mZnMsIG10ZC0+b29iYmxvY2ssICZyZXRsZW4sIGJ1Zik7Ci0JCWlmIChyZXRsZW4gIT0gbXRkLT5vb2JibG9jaykgY29udGludWU7CisJCXJldCA9IG10ZC0+cmVhZChtdGQsIG9mZnMsIG10ZC0+d3JpdGVzaXplLCAmcmV0bGVuLCBidWYpOworCQlpZiAocmV0bGVuICE9IG10ZC0+d3JpdGVzaXplKQorCQkJY29udGludWU7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVDQyBlcnJvciBzY2FubmluZyBET0MgYXQgMHgleFxuIiwKLQkJCQlvZmZzKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVDQyBlcnJvciBzY2FubmluZyBET0MgYXQgMHgleFxuIiwgb2Zmcyk7CiAJCX0KLQkJaWYgKG1lbWNtcChidWYsIGlkLCA2KSkgY29udGludWU7CisJCWlmIChtZW1jbXAoYnVmLCBpZCwgNikpCisJCQljb250aW51ZTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgRGlza09uQ2hpcCAlcyBNZWRpYSBIZWFkZXIgYXQgMHgleFxuIiwgaWQsIG9mZnMpOwogCQlpZiAoZG9jLT5taDBfcGFnZSA9PSAtMSkgewogCQkJZG9jLT5taDBfcGFnZSA9IG9mZnMgPj4gdGhpcy0+cGFnZV9zaGlmdDsKLQkJCWlmICghZmluZG1pcnJvcikgcmV0dXJuIDE7CisJCQlpZiAoIWZpbmRtaXJyb3IpCisJCQkJcmV0dXJuIDE7CiAJCQljb250aW51ZTsKIAkJfQogCQlkb2MtPm1oMV9wYWdlID0gb2ZmcyA+PiB0aGlzLT5wYWdlX3NoaWZ0OwpAQCAtMTEwNSw4ICsxMTA0LDggQEAKIAkvKiBPbmx5IG9uZSBtZWRpYWhlYWRlciB3YXMgZm91bmQuICBXZSB3YW50IGJ1ZiB0byBjb250YWluIGEKIAkgICBtZWRpYWhlYWRlciBvbiByZXR1cm4sIHNvIHdlJ2xsIGhhdmUgdG8gcmUtcmVhZCB0aGUgb25lIHdlIGZvdW5kLiAqLwogCW9mZnMgPSBkb2MtPm1oMF9wYWdlIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7Ci0JcmV0ID0gbXRkLT5yZWFkKG10ZCwgb2ZmcywgbXRkLT5vb2JibG9jaywgJnJldGxlbiwgYnVmKTsKLQlpZiAocmV0bGVuICE9IG10ZC0+b29iYmxvY2spIHsKKwlyZXQgPSBtdGQtPnJlYWQobXRkLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSwgJnJldGxlbiwgYnVmKTsKKwlpZiAocmV0bGVuICE9IG10ZC0+d3JpdGVzaXplKSB7CiAJCS8qIEluc2FuaXR5LiAgR2l2ZSB1cC4gKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIERpc2tPbkNoaXAgTWVkaWEgSGVhZGVyIG9uY2UsIGJ1dCBjYW4ndCByZXJlYWQgaXQ/Pz9cbiIpOwogCQlyZXR1cm4gMDsKQEAgLTExMTQsOCArMTExMyw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBuZnRsX3BhcnRzY2FuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cykKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBuZnRsX3BhcnRzY2FuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7CkBAIC0xMTI3LDEzICsxMTI1LDE0IEBACiAJdW5zaWduZWQgYmxvY2tzLCBtYXhibG9ja3M7CiAJaW50IG9mZnMsIG51bWhlYWRlcnM7CiAKLQlidWYgPSBrbWFsbG9jKG10ZC0+b29iYmxvY2ssIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MobXRkLT53cml0ZXNpemUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRGlza09uQ2hpcCBtZWRpYWhlYWRlciBrbWFsbG9jIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKCEobnVtaGVhZGVycz1maW5kX21lZGlhX2hlYWRlcnMobXRkLCBidWYsICJBTkFORCIsIDEpKSkgZ290byBvdXQ7Ci0JbWggPSAoc3RydWN0IE5GVExNZWRpYUhlYWRlciAqKSBidWY7CisJaWYgKCEobnVtaGVhZGVycyA9IGZpbmRfbWVkaWFfaGVhZGVycyhtdGQsIGJ1ZiwgIkFOQU5EIiwgMSkpKQorCQlnb3RvIG91dDsKKwltaCA9IChzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyICopYnVmOwogCiAJbWgtPk51bUVyYXNlVW5pdHMgPSBsZTE2X3RvX2NwdShtaC0+TnVtRXJhc2VVbml0cyk7CiAJbWgtPkZpcnN0UGh5c2ljYWxFVU4gPSBsZTE2X3RvX2NwdShtaC0+Rmlyc3RQaHlzaWNhbEVVTik7CkBAIC0xMTU1LDggKzExNTQsOCBAQAogCQkvKiBBdXRvLWRldGVybWluZSBVbml0U2l6ZUZhY3Rvci4gIFRoZSBjb25zdHJhaW50cyBhcmU6CiAJCSAgIC0gVGhlcmUgY2FuIGJlIGF0IG1vc3QgMzI3NjggdmlydHVhbCBibG9ja3MuCiAJCSAgIC0gVGhlcmUgY2FuIGJlIGF0IG1vc3QgKHZpcnR1YWwgYmxvY2sgc2l6ZSAtIHBhZ2Ugc2l6ZSkKLQkJICAgICB2aXJ0dWFsIGJsb2NrcyAoYmVjYXVzZSBNZWRpYUhlYWRlcitCQlQgbXVzdCBmaXQgaW4gMSkuCi0JCSovCisJCSAgIHZpcnR1YWwgYmxvY2tzIChiZWNhdXNlIE1lZGlhSGVhZGVyK0JCVCBtdXN0IGZpdCBpbiAxKS4KKwkJICovCiAJCW1oLT5Vbml0U2l6ZUZhY3RvciA9IDB4ZmY7CiAJCXdoaWxlIChibG9ja3MgPiBtYXhibG9ja3MpIHsKIAkJCWJsb2NrcyA+Pj0gMTsKQEAgLTEyMTEsMTQgKzEyMTAsMTMgQEAKIAl9CiAKIAlyZXQgPSBudW1wYXJ0czsKLW91dDoKKyBvdXQ6CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBUaGlzIGlzIGEgc3RyaXBwZWQtZG93biBjb3B5IG9mIHRoZSBjb2RlIGluIGluZnRsbW91bnQuYyAqLwotc3RhdGljIGlubGluZSBpbnQgX19pbml0IGluZnRsX3BhcnRzY2FuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJCSBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMpCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgaW5mdGxfcGFydHNjYW4oc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cykKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKQEAgLTEyMzUsMTUgKzEyMzMsMTYgQEAKIAlpZiAoaW5mdGxfYmJ0X3dyaXRlKQogCQllbmQgLT0gKElORlRMX0JCVF9SRVNFUlZFRF9CTE9DS1MgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCk7CiAKLQlidWYgPSBrbWFsbG9jKG10ZC0+b29iYmxvY2ssIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MobXRkLT53cml0ZXNpemUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRGlza09uQ2hpcCBtZWRpYWhlYWRlciBrbWFsbG9jIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIWZpbmRfbWVkaWFfaGVhZGVycyhtdGQsIGJ1ZiwgIkJOQU5EIiwgMCkpIGdvdG8gb3V0OworCWlmICghZmluZF9tZWRpYV9oZWFkZXJzKG10ZCwgYnVmLCAiQk5BTkQiLCAwKSkKKwkJZ290byBvdXQ7CiAJZG9jLT5taDFfcGFnZSA9IGRvYy0+bWgwX3BhZ2UgKyAoNDA5NiA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQltaCA9IChzdHJ1Y3QgSU5GVExNZWRpYUhlYWRlciAqKSBidWY7CisJbWggPSAoc3RydWN0IElORlRMTWVkaWFIZWFkZXIgKilidWY7CiAKIAltaC0+Tm9PZkJvb3RJbWFnZUJsb2NrcyA9IGxlMzJfdG9fY3B1KG1oLT5Ob09mQm9vdEltYWdlQmxvY2tzKTsKIAltaC0+Tm9PZkJpbmFyeVBhcnRpdGlvbnMgPSBsZTMyX3RvX2NwdShtaC0+Tm9PZkJpbmFyeVBhcnRpdGlvbnMpOwpAQCAtMTMxOSw4ICsxMzE4LDEwIEBACiAJCXBhcnRzW251bXBhcnRzXS5vZmZzZXQgPSBpcC0+Zmlyc3RVbml0IDw8IHZzaGlmdDsKIAkJcGFydHNbbnVtcGFydHNdLnNpemUgPSAoMSArIGlwLT5sYXN0VW5pdCAtIGlwLT5maXJzdFVuaXQpIDw8IHZzaGlmdDsKIAkJbnVtcGFydHMrKzsKLQkJaWYgKGlwLT5sYXN0VW5pdCA+IGxhc3R2dW5pdCkgbGFzdHZ1bml0ID0gaXAtPmxhc3RVbml0OwotCQlpZiAoaXAtPmZsYWdzICYgSU5GVExfTEFTVCkgYnJlYWs7CisJCWlmIChpcC0+bGFzdFVuaXQgPiBsYXN0dnVuaXQpCisJCQlsYXN0dnVuaXQgPSBpcC0+bGFzdFVuaXQ7CisJCWlmIChpcC0+ZmxhZ3MgJiBJTkZUTF9MQVNUKQorCQkJYnJlYWs7CiAJfQogCWxhc3R2dW5pdCsrOwogCWlmICgobGFzdHZ1bml0IDw8IHZzaGlmdCkgPCBlbmQpIHsKQEAgLTEzMzAsNyArMTMzMSw3IEBACiAJCW51bXBhcnRzKys7CiAJfQogCXJldCA9IG51bXBhcnRzOwotb3V0OgorIG91dDoKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMzQyLDExICsxMzQzLDEyIEBACiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwogCXN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRzWzJdOwogCi0JbWVtc2V0KChjaGFyICopIHBhcnRzLCAwLCBzaXplb2YocGFydHMpKTsKKwltZW1zZXQoKGNoYXIgKilwYXJ0cywgMCwgc2l6ZW9mKHBhcnRzKSk7CiAJLyogT24gTkZUTCwgd2UgaGF2ZSB0byBmaW5kIHRoZSBtZWRpYSBoZWFkZXJzIGJlZm9yZSB3ZSBjYW4gcmVhZCB0aGUKIAkgICBCQlRzLCBzaW5jZSB0aGV5J3JlIHN0b3JlZCBpbiB0aGUgbWVkaWEgaGVhZGVyIGVyYXNlYmxvY2tzLiAqLwogCW51bXBhcnRzID0gbmZ0bF9wYXJ0c2NhbihtdGQsIHBhcnRzKTsKLQlpZiAoIW51bXBhcnRzKSByZXR1cm4gLUVJTzsKKwlpZiAoIW51bXBhcnRzKQorCQlyZXR1cm4gLUVJTzsKIAl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgPSBOQU5EX0JCVF9BQlNQQUdFIHwgTkFORF9CQlRfOEJJVCB8CiAJCQkJTkFORF9CQlRfU0FWRUNPTlRFTlQgfCBOQU5EX0JCVF9XUklURSB8CiAJCQkJTkFORF9CQlRfVkVSU0lPTjsKQEAgLTEzOTMsOCArMTM5NSw3IEBACiAJCXRoaXMtPmJidF90ZC0+cGFnZXNbMF0gPSAyOwogCQl0aGlzLT5iYnRfbWQgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCXRoaXMtPmJidF90ZC0+b3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUXzhCSVQgfAotCQkJCQlOQU5EX0JCVF9WRVJTSU9OOworCQl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF84QklUIHwgTkFORF9CQlRfVkVSU0lPTjsKIAkJaWYgKGluZnRsX2JidF93cml0ZSkKIAkJCXRoaXMtPmJidF90ZC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9XUklURTsKIAkJdGhpcy0+YmJ0X3RkLT5vZmZzID0gODsKQEAgLTE0MDQsOCArMTQwNSw3IEBACiAJCXRoaXMtPmJidF90ZC0+cmVzZXJ2ZWRfYmxvY2tfY29kZSA9IDB4MDE7CiAJCXRoaXMtPmJidF90ZC0+cGF0dGVybiA9ICJNU1lTX0JCVCI7CiAKLQkJdGhpcy0+YmJ0X21kLT5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfOEJJVCB8Ci0JCQkJCU5BTkRfQkJUX1ZFUlNJT047CisJCXRoaXMtPmJidF9tZC0+b3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUXzhCSVQgfCBOQU5EX0JCVF9WRVJTSU9OOwogCQlpZiAoaW5mdGxfYmJ0X3dyaXRlKQogCQkJdGhpcy0+YmJ0X21kLT5vcHRpb25zIHw9IE5BTkRfQkJUX1dSSVRFOwogCQl0aGlzLT5iYnRfbWQtPm9mZnMgPSA4OwpAQCAtMTQyMCwxMiArMTQyMCwxMyBAQAogCSAgIEF0IGxlYXN0IGFzIG5hbmRfYmJ0LmMgaXMgY3VycmVudGx5IHdyaXR0ZW4uICovCiAJaWYgKChyZXQgPSBuYW5kX3NjYW5fYmJ0KG10ZCwgTlVMTCkpKQogCQlyZXR1cm4gcmV0OwotCW1lbXNldCgoY2hhciAqKSBwYXJ0cywgMCwgc2l6ZW9mKHBhcnRzKSk7CisJbWVtc2V0KChjaGFyICopcGFydHMsIDAsIHNpemVvZihwYXJ0cykpOwogCW51bXBhcnRzID0gaW5mdGxfcGFydHNjYW4obXRkLCBwYXJ0cyk7CiAJLyogQXQgbGVhc3QgZm9yIG5vdywgcmVxdWlyZSB0aGUgSU5GVEwgTWVkaWEgSGVhZGVyLiAgV2UgY291bGQgcHJvYmFibHkKIAkgICBkbyB3aXRob3V0IGl0IGZvciBub24tSU5GVEwgdXNlLCBzaW5jZSBhbGwgaXQgZ2l2ZXMgdXMgaXMKIAkgICBhdXRvcGFydGl0aW9uaW5nLCBidXQgSSB3YW50IHRvIGdpdmUgaXQgbW9yZSB0aG91Z2h0LiAqLwotCWlmICghbnVtcGFydHMpIHJldHVybiAtRUlPOworCWlmICghbnVtcGFydHMpCisJCXJldHVybiAtRUlPOwogCWFkZF9tdGRfZGV2aWNlKG10ZCk7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaWYgKCFub19hdXRvcGFydCkKQEAgLTE0MzksNyArMTQ0MCw2IEBACiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7CiAKLQl0aGlzLT53cml0ZV9ieXRlID0gZG9jMjAwMF93cml0ZV9ieXRlOwogCXRoaXMtPnJlYWRfYnl0ZSA9IGRvYzIwMDBfcmVhZF9ieXRlOwogCXRoaXMtPndyaXRlX2J1ZiA9IGRvYzIwMDBfd3JpdGVidWY7CiAJdGhpcy0+cmVhZF9idWYgPSBkb2MyMDAwX3JlYWRidWY7CkBAIC0xNDU3LDcgKzE0NTcsNiBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwogCi0JdGhpcy0+d3JpdGVfYnl0ZSA9IGRvYzIwMDFfd3JpdGVfYnl0ZTsKIAl0aGlzLT5yZWFkX2J5dGUgPSBkb2MyMDAxX3JlYWRfYnl0ZTsKIAl0aGlzLT53cml0ZV9idWYgPSBkb2MyMDAxX3dyaXRlYnVmOwogCXRoaXMtPnJlYWRfYnVmID0gZG9jMjAwMV9yZWFkYnVmOwpAQCAtMTQ4OSwxNiArMTQ4OCwxNSBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwogCi0JdGhpcy0+d3JpdGVfYnl0ZSA9IE5VTEw7CiAJdGhpcy0+cmVhZF9ieXRlID0gZG9jMjAwMXBsdXNfcmVhZF9ieXRlOwogCXRoaXMtPndyaXRlX2J1ZiA9IGRvYzIwMDFwbHVzX3dyaXRlYnVmOwogCXRoaXMtPnJlYWRfYnVmID0gZG9jMjAwMXBsdXNfcmVhZGJ1ZjsKIAl0aGlzLT52ZXJpZnlfYnVmID0gZG9jMjAwMXBsdXNfdmVyaWZ5YnVmOwogCXRoaXMtPnNjYW5fYmJ0ID0gaW5mdGxfc2Nhbl9iYnQ7Ci0JdGhpcy0+aHdjb250cm9sID0gTlVMTDsKKwl0aGlzLT5jbWRfY3RybCA9IE5VTEw7CiAJdGhpcy0+c2VsZWN0X2NoaXAgPSBkb2MyMDAxcGx1c19zZWxlY3RfY2hpcDsKIAl0aGlzLT5jbWRmdW5jID0gZG9jMjAwMXBsdXNfY29tbWFuZDsKLQl0aGlzLT5lbmFibGVfaHdlY2MgPSBkb2MyMDAxcGx1c19lbmFibGVfaHdlY2M7CisJdGhpcy0+ZWNjLmh3Y3RsID0gZG9jMjAwMXBsdXNfZW5hYmxlX2h3ZWNjOwogCiAJZG9jLT5jaGlwc19wZXJfZmxvb3IgPSAxOwogCW10ZC0+bmFtZSA9ICJEaXNrT25DaGlwIE1pbGxlbm5pdW0gUGx1cyI7CkBAIC0xNTM1LDIwICsxNTMzLDE2IEBACiAJc2F2ZV9jb250cm9sID0gUmVhZERPQyh2aXJ0YWRyLCBET0NDb250cm9sKTsKIAogCS8qIFJlc2V0IHRoZSBEaXNrT25DaGlwIEFTSUMgKi8KLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUkVTRVQsCi0JCSB2aXJ0YWRyLCBET0NDb250cm9sKTsKLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUkVTRVQsCi0JCSB2aXJ0YWRyLCBET0NDb250cm9sKTsKKwlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUkVTRVQsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOworCVdyaXRlRE9DKERPQ19NT0RFX0NMUl9FUlIgfCBET0NfTU9ERV9NRFdSRU4gfCBET0NfTU9ERV9SRVNFVCwgdmlydGFkciwgRE9DQ29udHJvbCk7CiAKIAkvKiBFbmFibGUgdGhlIERpc2tPbkNoaXAgQVNJQyAqLwotCVdyaXRlRE9DKERPQ19NT0RFX0NMUl9FUlIgfCBET0NfTU9ERV9NRFdSRU4gfCBET0NfTU9ERV9OT1JNQUwsCi0JCSB2aXJ0YWRyLCBET0NDb250cm9sKTsKLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfTk9STUFMLAotCQkgdmlydGFkciwgRE9DQ29udHJvbCk7CisJV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX05PUk1BTCwgdmlydGFkciwgRE9DQ29udHJvbCk7CisJV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX05PUk1BTCwgdmlydGFkciwgRE9DQ29udHJvbCk7CiAKIAlDaGlwSUQgPSBSZWFkRE9DKHZpcnRhZHIsIENoaXBJRCk7CiAKLQlzd2l0Y2goQ2hpcElEKSB7CisJc3dpdGNoIChDaGlwSUQpIHsKIAljYXNlIERPQ19DaGlwSURfRG9jMms6CiAJCXJlZyA9IERvQ18ya19FQ0NTdGF0dXM7CiAJCWJyZWFrOwpAQCAtMTU2NCwxNSArMTU1OCwxMyBAQAogCQkJUmVhZERPQyh2aXJ0YWRyLCBNcGx1c19Qb3dlcik7CiAKIAkJLyogUmVzZXQgdGhlIE1pbGxlbm5pdW0gUGx1cyBBU0lDICovCi0JCXRtcCA9IERPQ19NT0RFX1JFU0VUIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUlNUX0xBVCB8Ci0JCQlET0NfTU9ERV9CREVDVDsKKwkJdG1wID0gRE9DX01PREVfUkVTRVQgfCBET0NfTU9ERV9NRFdSRU4gfCBET0NfTU9ERV9SU1RfTEFUIHwgRE9DX01PREVfQkRFQ1Q7CiAJCVdyaXRlRE9DKHRtcCwgdmlydGFkciwgTXBsdXNfRE9DQ29udHJvbCk7CiAJCVdyaXRlRE9DKH50bXAsIHZpcnRhZHIsIE1wbHVzX0N0cmxDb25maXJtKTsKIAogCQltZGVsYXkoMSk7CiAJCS8qIEVuYWJsZSB0aGUgTWlsbGVubml1bSBQbHVzIEFTSUMgKi8KLQkJdG1wID0gRE9DX01PREVfTk9STUFMIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUlNUX0xBVCB8Ci0JCQlET0NfTU9ERV9CREVDVDsKKwkJdG1wID0gRE9DX01PREVfTk9STUFMIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUlNUX0xBVCB8IERPQ19NT0RFX0JERUNUOwogCQlXcml0ZURPQyh0bXAsIHZpcnRhZHIsIE1wbHVzX0RPQ0NvbnRyb2wpOwogCQlXcml0ZURPQyh+dG1wLCB2aXJ0YWRyLCBNcGx1c19DdHJsQ29uZmlybSk7CiAJCW1kZWxheSgxKTsKQEAgLTE1OTYsNyArMTU4OCw3IEBACiAJCWdvdG8gbm90Zm91bmQ7CiAJfQogCS8qIENoZWNrIHRoZSBUT0dHTEUgYml0IGluIHRoZSBFQ0MgcmVnaXN0ZXIgKi8KLQl0bXAgID0gUmVhZERPQ18odmlydGFkciwgcmVnKSAmIERPQ19UT0dHTEVfQklUOworCXRtcCA9IFJlYWRET0NfKHZpcnRhZHIsIHJlZykgJiBET0NfVE9HR0xFX0JJVDsKIAl0bXBiID0gUmVhZERPQ18odmlydGFkciwgcmVnKSAmIERPQ19UT0dHTEVfQklUOwogCXRtcGMgPSBSZWFkRE9DXyh2aXJ0YWRyLCByZWcpICYgRE9DX1RPR0dMRV9CSVQ7CiAJaWYgKCh0bXAgPT0gdG1wYikgfHwgKHRtcCAhPSB0bXBjKSkgewpAQCAtMTYyNiwxMSArMTYxOCwxMSBAQAogCQlpZiAoQ2hpcElEID09IERPQ19DaGlwSURfRG9jTWlsUGx1czE2KSB7CiAJCQlXcml0ZURPQyh+bmV3dmFsLCB2aXJ0YWRyLCBNcGx1c19BbGlhc1Jlc29sdXRpb24pOwogCQkJb2xkdmFsID0gUmVhZERPQyhkb2MtPnZpcnRhZHIsIE1wbHVzX0FsaWFzUmVzb2x1dGlvbik7Ci0JCQlXcml0ZURPQyhuZXd2YWwsIHZpcnRhZHIsIE1wbHVzX0FsaWFzUmVzb2x1dGlvbik7IC8vIHJlc3RvcmUgaXQKKwkJCVdyaXRlRE9DKG5ld3ZhbCwgdmlydGFkciwgTXBsdXNfQWxpYXNSZXNvbHV0aW9uKTsJLy8gcmVzdG9yZSBpdAogCQl9IGVsc2UgewogCQkJV3JpdGVET0Mofm5ld3ZhbCwgdmlydGFkciwgQWxpYXNSZXNvbHV0aW9uKTsKIAkJCW9sZHZhbCA9IFJlYWRET0MoZG9jLT52aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOwotCQkJV3JpdGVET0MobmV3dmFsLCB2aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOyAvLyByZXN0b3JlIGl0CisJCQlXcml0ZURPQyhuZXd2YWwsIHZpcnRhZHIsIEFsaWFzUmVzb2x1dGlvbik7CS8vIHJlc3RvcmUgaXQKIAkJfQogCQluZXd2YWwgPSB+bmV3dmFsOwogCQlpZiAob2xkdmFsID09IG5ld3ZhbCkgewpAQCAtMTY0MiwxMCArMTYzNCw4IEBACiAJcHJpbnRrKEtFUk5fTk9USUNFICJEaXNrT25DaGlwIGZvdW5kIGF0IDB4JWx4XG4iLCBwaHlzYWRyKTsKIAogCWxlbiA9IHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsKLQkgICAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkgKwotCSAgICAgIHNpemVvZihzdHJ1Y3QgZG9jX3ByaXYpICsKLQkgICAgICAoMiAqIHNpemVvZihzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IpKTsKLQltdGQgPSAga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCSAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkgKyBzaXplb2Yoc3RydWN0IGRvY19wcml2KSArICgyICogc2l6ZW9mKHN0cnVjdCBuYW5kX2JidF9kZXNjcikpOworCW10ZCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW10ZCkgewogCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXAga21hbGxvYyAoJWQgYnl0ZXMpIGZhaWxlZCFcbiIsIGxlbik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xNjYzLDE3ICsxNjUzLDE5IEBACiAKIAluYW5kLT5wcml2CQk9IGRvYzsKIAluYW5kLT5zZWxlY3RfY2hpcAk9IGRvYzIwMHhfc2VsZWN0X2NoaXA7Ci0JbmFuZC0+aHdjb250cm9sCQk9IGRvYzIwMHhfaHdjb250cm9sOworCW5hbmQtPmNtZF9jdHJsCQk9IGRvYzIwMHhfaHdjb250cm9sOwogCW5hbmQtPmRldl9yZWFkeQkJPSBkb2MyMDB4X2Rldl9yZWFkeTsKIAluYW5kLT53YWl0ZnVuYwkJPSBkb2MyMDB4X3dhaXQ7CiAJbmFuZC0+YmxvY2tfYmFkCQk9IGRvYzIwMHhfYmxvY2tfYmFkOwotCW5hbmQtPmVuYWJsZV9od2VjYwk9IGRvYzIwMHhfZW5hYmxlX2h3ZWNjOwotCW5hbmQtPmNhbGN1bGF0ZV9lY2MJPSBkb2MyMDB4X2NhbGN1bGF0ZV9lY2M7Ci0JbmFuZC0+Y29ycmVjdF9kYXRhCT0gZG9jMjAweF9jb3JyZWN0X2RhdGE7CisJbmFuZC0+ZWNjLmh3Y3RsCQk9IGRvYzIwMHhfZW5hYmxlX2h3ZWNjOworCW5hbmQtPmVjYy5jYWxjdWxhdGUJPSBkb2MyMDB4X2NhbGN1bGF0ZV9lY2M7CisJbmFuZC0+ZWNjLmNvcnJlY3QJPSBkb2MyMDB4X2NvcnJlY3RfZGF0YTsKIAotCW5hbmQtPmF1dG9vb2IJCT0gJmRvYzIwMHhfb29iaW5mbzsKLQluYW5kLT5lY2Ntb2RlCQk9IE5BTkRfRUNDX0hXNl81MTI7Ci0JbmFuZC0+b3B0aW9ucwkJPSBOQU5EX1VTRV9GTEFTSF9CQlQgfCBOQU5EX0hXRUNDX1NZTkRST01FOworCW5hbmQtPmVjYy5sYXlvdXQJPSAmZG9jMjAweF9vb2JpbmZvOworCW5hbmQtPmVjYy5tb2RlCQk9IE5BTkRfRUNDX0hXX1NZTkRST01FOworCW5hbmQtPmVjYy5zaXplCQk9IDUxMjsKKwluYW5kLT5lY2MuYnl0ZXMJCT0gNjsKKwluYW5kLT5vcHRpb25zCQk9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKIAogCWRvYy0+cGh5c2FkcgkJPSBwaHlzYWRyOwogCWRvYy0+dmlydGFkcgkJPSB2aXJ0YWRyOwpAQCAtMTcwNywxOCArMTY5OSwxOCBAQAogCWRvY2xpc3QgPSBtdGQ7CiAJcmV0dXJuIDA7CiAKLW5vdGZvdW5kOgorIG5vdGZvdW5kOgogCS8qIFB1dCBiYWNrIHRoZSBjb250ZW50cyBvZiB0aGUgRE9DQ29udHJvbCByZWdpc3RlciwgaW4gY2FzZSBpdCdzIG5vdAogCSAgIGFjdHVhbGx5IGEgRGlza09uQ2hpcC4gICovCiAJV3JpdGVET0Moc2F2ZV9jb250cm9sLCB2aXJ0YWRyLCBET0NDb250cm9sKTsKLWZhaWw6CisgZmFpbDoKIAlpb3VubWFwKHZpcnRhZHIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfbmFuZGRvYyh2b2lkKQogewotIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgKm5leHRtdGQ7CisJc3RydWN0IG10ZF9pbmZvICptdGQsICpuZXh0bXRkOwogCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQ7CiAJc3RydWN0IGRvY19wcml2ICpkb2M7CiAKQEAgLTE3NDcsOCArMTczOSw4IEBACiAJICogZ2VuZXJhdG9yIHBvbGlub21pYWwgZGVncmVlID0gNAogCSAqLwogCXJzX2RlY29kZXIgPSBpbml0X3JzKDEwLCAweDQwOSwgRkNSLCAxLCBOUk9PVFMpOwotIAlpZiAoIXJzX2RlY29kZXIpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiRGlza09uQ2hpcDogQ291bGQgbm90IGNyZWF0ZSBhIFJTIGRlY29kZXJcbiIpOworCWlmICghcnNfZGVjb2RlcikgeworCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXA6IENvdWxkIG5vdCBjcmVhdGUgYSBSUyBkZWNvZGVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNzU4LDcgKzE3NTAsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0ZXJyOwogCX0gZWxzZSB7Ci0JCWZvciAoaT0wOyAoZG9jX2xvY2F0aW9uc1tpXSAhPSAweGZmZmZmZmZmKTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IChkb2NfbG9jYXRpb25zW2ldICE9IDB4ZmZmZmZmZmYpOyBpKyspIHsKIAkJCWRvY19wcm9iZShkb2NfbG9jYXRpb25zW2ldKTsKIAkJfQogCX0KQEAgLTE3NzAsNyArMTc2Miw3IEBACiAJCWdvdG8gb3V0ZXJyOwogCX0KIAlyZXR1cm4gMDsKLW91dGVycjoKKyBvdXRlcnI6CiAJZnJlZV9ycyhyc19kZWNvZGVyKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMgYi9kcml2ZXJzL210ZC9uYW5kL2VkYjczMTIuYwppbmRleCA5YjFmZDJmLi41MTZjMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2VkYjczMTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2VkYjczMTIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcml1cyBHcvZnZXIgKG1hZ0BzeXNnby5kZSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFyaXVzIEdyw7ZnZXIgKG1hZ0BzeXNnby5kZSkKICAqCiAgKiAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYwogICogICAgICAgQ29weXJpZ2h0IChjKSAyMDAxIFRob21hcyBHbGVpeG5lciAoZ2xlaXhuZXJAYXV0cm9uaXguZGUpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+IC8qIGZvciBDTFBTNzExMV9WSVJUX0JBU0UgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgkvKiBmb3IgQ0xQUzcxMTFfVklSVF9CQVNFICovCiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CiAKQEAgLTU0LDUxICs1NCw0NSBAQAogICovCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwNzMxMl9maW9fcGJhc2UgPSBFUDczMTJfRklPX1BCQVNFOwotc3RhdGljIHZvaWQgX19pb21lbSAqIGVwNzMxMl9weGRyID0gKHZvaWQgX19pb21lbSAqKSBFUDczMTJfUFhEUjsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKiBlcDczMTJfcHhkZHIgPSAodm9pZCBfX2lvbWVtICopIEVQNzMxMl9QWEREUjsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmVwNzMxMl9weGRyID0gKHZvaWQgX19pb21lbSAqKUVQNzMxMl9QWERSOworc3RhdGljIHZvaWQgX19pb21lbSAqZXA3MzEyX3B4ZGRyID0gKHZvaWQgX19pb21lbSAqKUVQNzMxMl9QWEREUjsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogLyoKICAqIERlZmluZSBzdGF0aWMgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewotCXsgLm5hbWUgPSAiRVA3MzEyIE5hbmQgRmxhc2giLAotCQkgIC5vZmZzZXQgPSAwLAotCQkgIC5zaXplID0gOCoxMDI0KjEwMjQgfQorCXsubmFtZSA9ICJFUDczMTIgTmFuZCBGbGFzaCIsCisJIC5vZmZzZXQgPSAwLAorCSAuc2l6ZSA9IDggKiAxMDI0ICogMTAyNH0KIH07CisKICNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMQogCiAjZW5kaWYKIAotCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKKyAqCisgKglOQU5EX05DRTogYml0IDAgLT4gYml0IDcKKyAqCU5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgNAorICoJTkFORF9BTEU6IGJpdCAyIC0+IGJpdCA1CiAgKi8KLXN0YXRpYyB2b2lkIGVwNzMxMl9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCitzdGF0aWMgdm9pZCBlcDczMTJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKIHsKLQlzd2l0Y2goY21kKSB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotCQljbHBzX3dyaXRlYihjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSB8IDB4MTAsIGVwNzMxMl9weGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0JCWNscHNfd3JpdGViKGNscHNfcmVhZGIoZXA3MzEyX3B4ZHIpICYgfjB4MTAsIGVwNzMxMl9weGRyKTsKLQkJYnJlYWs7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGNoYXIgYml0czsKIAotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQljbHBzX3dyaXRlYihjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSB8IDB4MjAsIGVwNzMxMl9weGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0JCWNscHNfd3JpdGViKGNscHNfcmVhZGIoZXA3MzEyX3B4ZHIpICYgfjB4MjAsIGVwNzMxMl9weGRyKTsKLQkJYnJlYWs7CisJCWJpdHMgPSAoY3RybCAmIChOQU5EX0NMRSB8IE5BTkRfQUxFKSkgPDwgMzsKKwkJYml0cyA9IChjdHJsICYgTkFORF9OQ0UpIDw8IDc7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQkJY2xwc193cml0ZWIoKGNscHNfcmVhZGIoZXA3MzEyX3B4ZHIpIHwgMHg4MCkgJiB+MHg0MCwgZXA3MzEyX3B4ZHIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJY2xwc193cml0ZWIoKGNscHNfcmVhZGIoZXA3MzEyX3B4ZHIpIHwgMHg4MCkgfCAweDQwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOworCQljbHBzX3dyaXRlYigoY2xwc19yZWFkYihlcDczMTJfcHhkcikgICYgMHhCMCkgfCAweDEwLAorCQkJICAgIGVwNzMxMl9weGRyKTsKIAl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAvKgpAQCAtMTA4LDYgKzEwMiw3IEBACiB7CiAJcmV0dXJuIDE7CiB9CisKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKICNlbmRpZgpAQCAtMTE1LDE4ICsxMTAsMTYgQEAKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotc3RhdGljIGludCBfX2luaXQgZXA3MzEyX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBlcDczMTJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CiAJY29uc3QgY2hhciAqcGFydF90eXBlID0gMDsKIAlpbnQgbXRkX3BhcnRzX25iID0gMDsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbXRkX3BhcnRzID0gMDsKLQl2b2lkIF9faW9tZW0gKiBlcDczMTJfZmlvX2Jhc2U7CisJdm9pZCBfX2lvbWVtICplcDczMTJfZmlvX2Jhc2U7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQllcDczMTJfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwKLQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJZXA3MzEyX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwogCWlmICghZXA3MzEyX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBFREI3MzEyIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzQsMjEgKzEyNywyMiBAQAogCiAJLyogbWFwIHBoeXNpY2FsIGFkcmVzcyAqLwogCWVwNzMxMl9maW9fYmFzZSA9IGlvcmVtYXAoZXA3MzEyX2Zpb19wYmFzZSwgU1pfMUspOwotCWlmKCFlcDczMTJfZmlvX2Jhc2UpIHsKKwlpZiAoIWVwNzMxMl9maW9fYmFzZSkgewogCQlwcmludGsoImlvcmVtYXAgRURCNzMxMiBOQU5EIGZsYXNoIGZhaWxlZFxuIik7CiAJCWtmcmVlKGVwNzMxMl9tdGQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZlcDczMTJfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJmVwNzMxMl9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIGVwNzMxMl9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQoKGNoYXIgKikgdGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKwltZW1zZXQoZXA3MzEyX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAllcDczMTJfbXRkLT5wcml2ID0gdGhpczsKKwllcDczMTJfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyoKIAkgKiBTZXQgR1BJTyBQb3J0IEIgY29udHJvbCByZWdpc3RlciBzbyB0aGF0IHRoZSBwaW5zIGFyZSBjb25maWd1cmVkCkBAIC0xNTksMjIgKzE1MywyMCBAQAogCS8qIGluc2VydCBjYWxsYmFja3MgKi8KIAl0aGlzLT5JT19BRERSX1IgPSBlcDczMTJfZmlvX2Jhc2U7CiAJdGhpcy0+SU9fQUREUl9XID0gZXA3MzEyX2Zpb19iYXNlOwotCXRoaXMtPmh3Y29udHJvbCA9IGVwNzMxMl9od2NvbnRyb2w7CisJdGhpcy0+Y21kX2N0cmwgPSBlcDczMTJfaHdjb250cm9sOwogCXRoaXMtPmRldl9yZWFkeSA9IGVwNzMxMl9kZXZpY2VfcmVhZHk7CiAJLyogMTUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCiAJdGhpcy0+Y2hpcF9kZWxheSA9IDE1OwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCi0JaWYgKG5hbmRfc2NhbiAoZXA3MzEyX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKGVwNzMxMl9tdGQsIDEpKSB7CiAJCWlvdW5tYXAoKHZvaWQgKillcDczMTJfZmlvX2Jhc2UpOwotCQlrZnJlZSAoZXA3MzEyX210ZCk7CisJCWtmcmVlKGVwNzMxMl9tdGQpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWVwNzMxMl9tdGQtPm5hbWUgPSAiZWRiNzMxMi1uYW5kIjsKLQltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhlcDczMTJfbXRkLCBwYXJ0X3Byb2JlcywKLQkJCQkJICAgICZtdGRfcGFydHMsIDApOworCW10ZF9wYXJ0c19uYiA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGVwNzMxMl9tdGQsIHBhcnRfcHJvYmVzLCAmbXRkX3BhcnRzLCAwKTsKIAlpZiAobXRkX3BhcnRzX25iID4gMCkKIAkJcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CiAJZWxzZQpAQCAtMTkzLDI0ICsxODUsMjMgQEAKIAkvKiBSZXR1cm4gaGFwcHkgKi8KIAlyZXR1cm4gMDsKIH0KKwogbW9kdWxlX2luaXQoZXA3MzEyX2luaXQpOwogCiAvKgogICogQ2xlYW4gdXAgcm91dGluZQogICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXA3MzEyX2NsZWFudXAgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZXA3MzEyX2NsZWFudXAodm9pZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgJmVwNzMxMl9tdGRbMV07CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopJmVwNzMxMl9tdGRbMV07CiAKIAkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2UgKGFwNzMxMl9tdGQpOwotCi0JLyogRnJlZSBpbnRlcm5hbCBkYXRhIGJ1ZmZlciAqLwotCWtmcmVlICh0aGlzLT5kYXRhX2J1Zik7CisJbmFuZF9yZWxlYXNlKGFwNzMxMl9tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAoZXA3MzEyX210ZCk7CisJa2ZyZWUoZXA3MzEyX210ZCk7CiB9CisKIG1vZHVsZV9leGl0KGVwNzMxMl9jbGVhbnVwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9oMTkxMC5jIGIvZHJpdmVycy9tdGQvbmFuZC9oMTkxMC5jCmluZGV4IGY2OGY3YTkuLjJkNTg1ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvaDE5MTAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2gxOTEwLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEpvc2h1YSBXaXNlIChqb3NodWFAam9zaHVhd2lzZS5jb20pCiAgKgogICogIERlcml2ZWQgZnJvbSBkcml2ZXJzL210ZC9uYW5kL2VkYjczMTIuYwotICogICAgICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcml1cyBHcvZnZXIgKG1hZ0BzeXNnby5kZSkKKyAqICAgICAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJpdXMgR3LDtmdlciAobWFnQHN5c2dvLmRlKQogICogICAgICAgQ29weXJpZ2h0IChjKSAyMDAxIFRob21hcyBHbGVpeG5lciAoZ2xlaXhuZXJAYXV0cm9uaXguZGUpCiAgKgogICogJElkOiBoMTkxMC5jLHYgMS42IDIwMDUvMTEvMDcgMTE6MTQ6MzAgZ2xlaXhuZXIgRXhwICQKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4gLyogZm9yIENMUFM3MTExX1ZJUlRfQkFTRSAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CS8qIGZvciBDTFBTNzExMV9WSVJUX0JBU0UgKi8KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oMTkwMC1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXBhcS5oPgpAQCAtNDUsNDcgKzQ1LDI5IEBACiAgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQogICovCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9bXSA9IHsKLQl7IG5hbWU6ICJoMTkxMCBOQU5EIEZsYXNoIiwKLQkJICBvZmZzZXQ6IDAsCi0JCSAgc2l6ZTogMTYqMTAyNCoxMDI0IH0KKyAgICAgIHtuYW1lOiJoMTkxMCBOQU5EIEZsYXNoIiwKKwkgICAgICBvZmZzZXQ6MCwKKyAgICAgIHNpemU6MTYgKiAxMDI0ICogMTAyNH0KIH07CisKICNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMQogCiAjZW5kaWYKIAotCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKKyAqCisgKglOQU5EX05DRTogYml0IDAgLSBkb24ndCBjYXJlCisgKglOQU5EX0NMRTogYml0IDEgLSBhZGRyZXNzIGJpdCAyCisgKglOQU5EX0FMRTogYml0IDIgLSBhZGRyZXNzIGJpdCAzCiAgKi8KLXN0YXRpYyB2b2lkIGgxOTEwX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIGgxOTEwX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwKiB0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKG10ZC0+cHJpdik7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCXN3aXRjaChjbWQpIHsKLQotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotCQl0aGlzLT5JT19BRERSX1IgfD0gKDEgPDwgMik7Ci0JCXRoaXMtPklPX0FERFJfVyB8PSAoMSA8PCAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0JCXRoaXMtPklPX0FERFJfUiAmPSB+KDEgPDwgMik7Ci0JCXRoaXMtPklPX0FERFJfVyAmPSB+KDEgPDwgMik7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0JCXRoaXMtPklPX0FERFJfUiB8PSAoMSA8PCAzKTsKLQkJdGhpcy0+SU9fQUREUl9XIHw9ICgxIDw8IDMpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkFMRToKLQkJdGhpcy0+SU9fQUREUl9SICY9IH4oMSA8PCAzKTsKLQkJdGhpcy0+SU9fQUREUl9XICY9IH4oMSA8PCAzKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCWJyZWFrOwotCX0KKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyB8ICgoY3RybCAmIDB4NikgPDwgMSkpOwogfQogCiAvKgpAQCAtMTAxLDcgKzgzLDcgQEAKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotc3RhdGljIGludCBfX2luaXQgaDE5MTBfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGgxOTEwX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZSA9IDA7CkBAIC0xMTksMjQgKzEwMSwyMyBAQAogCX0KIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCWgxOTEwX25hbmRfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwKLQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaDE5MTBfbmFuZF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWgxOTEwX25hbmRfbXRkKSB7CiAJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIGgxOTEwIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKLQkJaW91bm1hcCAoKHZvaWQgKikgbmFuZGFkZHIpOworCQlpb3VubWFwKCh2b2lkICopbmFuZGFkZHIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZoMTkxMF9uYW5kX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZoMTkxMF9uYW5kX210ZFsxXSk7CiAKIAkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQoKGNoYXIgKikgaDE5MTBfbmFuZF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQoKGNoYXIgKikgdGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKwltZW1zZXQoaDE5MTBfbmFuZF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJaDE5MTBfbmFuZF9tdGQtPnByaXYgPSB0aGlzOworCWgxOTEwX25hbmRfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyoKIAkgKiBFbmFibGUgVlBFTgpAQCAtMTQ2LDMxICsxMjcsMjggQEAKIAkvKiBpbnNlcnQgY2FsbGJhY2tzICovCiAJdGhpcy0+SU9fQUREUl9SID0gbmFuZGFkZHI7CiAJdGhpcy0+SU9fQUREUl9XID0gbmFuZGFkZHI7Ci0JdGhpcy0+aHdjb250cm9sID0gaDE5MTBfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gaDE5MTBfaHdjb250cm9sOwogCXRoaXMtPmRldl9yZWFkeSA9IE5VTEw7CS8qIHVua25vd24gd2hldGhlciB0aGF0IHdhcyBjb3JyZWN0IG9yIG5vdCBzbyB3ZSB3aWxsIGp1c3QgZG8gaXQgbGlrZSB0aGlzICovCiAJLyogMTUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCiAJdGhpcy0+Y2hpcF9kZWxheSA9IDUwOwotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKIAl0aGlzLT5vcHRpb25zID0gTkFORF9OT19BVVRPSU5DUjsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKGgxOTEwX25hbmRfbXRkLCAxKSkgeworCWlmIChuYW5kX3NjYW4oaDE5MTBfbmFuZF9tdGQsIDEpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiTm8gTkFORCBkZXZpY2UgLSByZXR1cm5pbmcgLUVOWElPXG4iKTsKLQkJa2ZyZWUgKGgxOTEwX25hbmRfbXRkKTsKLQkJaW91bm1hcCAoKHZvaWQgKikgbmFuZGFkZHIpOworCQlrZnJlZShoMTkxMF9uYW5kX210ZCk7CisJCWlvdW5tYXAoKHZvaWQgKiluYW5kYWRkcik7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCiAjaWZkZWYgQ09ORklHX01URF9DTURMSU5FX1BBUlRTCi0JbXRkX3BhcnRzX25iID0gcGFyc2VfY21kbGluZV9wYXJ0aXRpb25zKGgxOTEwX25hbmRfbXRkLCAmbXRkX3BhcnRzLAotCQkJCQkJImgxOTEwLW5hbmQiKTsKKwltdGRfcGFydHNfbmIgPSBwYXJzZV9jbWRsaW5lX3BhcnRpdGlvbnMoaDE5MTBfbmFuZF9tdGQsICZtdGRfcGFydHMsICJoMTkxMC1uYW5kIik7CiAJaWYgKG10ZF9wYXJ0c19uYiA+IDApCi0JICBwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKKwkJcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CiAJZWxzZQotCSAgbXRkX3BhcnRzX25iID0gMDsKKwkJbXRkX3BhcnRzX25iID0gMDsKICNlbmRpZgotCWlmIChtdGRfcGFydHNfbmIgPT0gMCkKLQl7CisJaWYgKG10ZF9wYXJ0c19uYiA9PSAwKSB7CiAJCW10ZF9wYXJ0cyA9IHBhcnRpdGlvbl9pbmZvOwogCQltdGRfcGFydHNfbmIgPSBOVU1fUEFSVElUSU9OUzsKIAkJcGFydF90eXBlID0gInN0YXRpYyI7CkBAIC0xODMsMjQgKzE2MSwyNiBAQAogCS8qIFJldHVybiBoYXBweSAqLwogCXJldHVybiAwOwogfQorCiBtb2R1bGVfaW5pdChoMTkxMF9pbml0KTsKIAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgX19leGl0IGgxOTEwX2NsZWFudXAgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaDE5MTBfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmaDE5MTBfbmFuZF9tdGRbMV07CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopJmgxOTEwX25hbmRfbXRkWzFdOwogCiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlIChoMTkxMF9uYW5kX210ZCk7CisJbmFuZF9yZWxlYXNlKGgxOTEwX25hbmRfbXRkKTsKIAogCS8qIFJlbGVhc2UgaW8gcmVzb3VyY2UgKi8KLQlpb3VubWFwICgodm9pZCAqKSB0aGlzLT5JT19BRERSX1cpOworCWlvdW5tYXAoKHZvaWQgKil0aGlzLT5JT19BRERSX1cpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAoaDE5MTBfbmFuZF9tdGQpOworCWtmcmVlKGgxOTEwX25hbmRfbXRkKTsKIH0KKwogbW9kdWxlX2V4aXQoaDE5MTBfY2xlYW51cCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IDk1ZTk2ZmEuLjI3MDgzZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtMTAsNjcgKzEwLDMxIEBACiAgKglodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnL3RlY2gvbmFuZC5odG1sCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMCBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKLSAqIAkJICAyMDAyIFRob21hcyBHbGVpeG5lciAodGdseEBsaW51dHJvbml4LmRlKQorICoJCSAgMjAwMi0yMDA2IFRob21hcyBHbGVpeG5lciAodGdseEBsaW51dHJvbml4LmRlKQogICoKLSAqICAwMi0wOC0yMDA0ICB0Z2x4OiBzdXBwb3J0IGZvciBzdHJhbmdlIGNoaXBzLCB3aGljaCBjYW5ub3QgYXV0byBpbmNyZW1lbnQKLSAqCQlwYWdlcyBvbiByZWFkIC8gcmVhZF9vb2IKLSAqCi0gKiAgMDMtMTctMjAwNCAgdGdseDogQ2hlY2sgcmVhZHkgYmVmb3JlIGF1dG8gaW5jcmVtZW50IGNoZWNrLiBTaW1vbiBCYXllcwotICoJCXBvaW50ZWQgdGhpcyBvdXQsIGFzIGhlIG1hcmtlZCBhbiBhdXRvIGluY3JlbWVudCBjYXBhYmxlIGNoaXAKLSAqCQlhcyBOT0FVVE9JTkNSIGluIHRoZSBib2FyZCBkcml2ZXIuCi0gKgkJTWFrZSByZWFkcyBvdmVyIGJsb2NrIGJvdW5kYXJpZXMgd29yayB0b28KLSAqCi0gKiAgMDQtMTQtMjAwNAl0Z2x4OiBmaXJzdCB3b3JraW5nIHZlcnNpb24gZm9yIDJrIHBhZ2Ugc2l6ZSBjaGlwcwotICoKLSAqICAwNS0xOS0yMDA0ICB0Z2x4OiBCYXNpYyBzdXBwb3J0IGZvciBSZW5lc2FzIEFHLUFORCBjaGlwcwotICoKLSAqICAwOS0yNC0yMDA0ICB0Z2x4OiBhZGQgc3VwcG9ydCBmb3IgaGFyZHdhcmUgY29udHJvbGxlcnMgKGUuZy4gRUNDKSBzaGFyZWQKLSAqCQlhbW9uZyBtdWx0aXBsZSBpbmRlcGVuZGVuZCBkZXZpY2VzLiBTdWdnZXN0aW9ucyBhbmQgaW5pdGlhbCBwYXRjaAotICoJCWZyb20gQmVuIERvb2tzIDxiZW4tbXRkQGZsdWZmLm9yZz4KLSAqCi0gKiAgMTItMDUtMjAwNAlkbWFybGluOiBhZGQgd29ya2Fyb3VuZCBmb3IgUmVuZXNhcyBBRy1BTkQgY2hpcHMgImRpc3R1cmIiIGlzc3VlLgotICoJCUJhc2ljYWxseSwgYW55IGJsb2NrIG5vdCByZXdyaXR0ZW4gbWF5IGxvc2UgZGF0YSB3aGVuIHN1cnJvdW5kaW5nIGJsb2NrcwotICoJCWFyZSByZXdyaXR0ZW4gbWFueSB0aW1lcy4gIEpGRlMyIGVuc3VyZXMgdGhpcyBkb2Vzbid0IGhhcHBlbiBmb3IgYmxvY2tzCi0gKgkJaXQgdXNlcywgYnV0IHRoZSBCYWQgQmxvY2sgVGFibGUocykgbWF5IG5vdCBiZSByZXdyaXR0ZW4uICBUbyBlbnN1cmUgdGhleQotICoJCWRvIG5vdCBsb3NlIGRhdGEsIGZvcmNlIHRoZW0gdG8gYmUgcmV3cml0dGVuIHdoZW4gc29tZSBvZiB0aGUgc3Vycm91bmRpbmcKLSAqCQlibG9ja3MgYXJlIGVyYXNlZC4gIFJhdGhlciB0aGFuIHRyYWNraW5nIGEgc3BlY2lmaWMgbmVhcmJ5IGJsb2NrICh3aGljaAotICoJCWNvdWxkIGl0c2VsZiBnbyBiYWQpLCB1c2UgYSBwYWdlIGFkZHJlc3MgJ21hc2snIHRvIHNlbGVjdCBzZXZlcmFsIGJsb2NrcwotICoJCWluIHRoZSBzYW1lIGFyZWEsIGFuZCByZXdyaXRlIHRoZSBCQlQgd2hlbiBhbnkgb2YgdGhlbSBhcmUgZXJhc2VkLgotICoKLSAqICAwMS0wMy0yMDA1CWRtYXJsaW46IGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBkZXZpY2UgcmVjb3ZlcnkgY29tbWFuZCBzZXF1ZW5jZSBmb3IgUmVuZXNhcwotICoJCUFHLUFORCBjaGlwcy4gIElmIHRoZXJlIHdhcyBhIHN1ZGRlbiBsb3NzIG9mIHBvd2VyIGR1cmluZyBhbiBlcmFzZSBvcGVyYXRpb24sCi0gKiAJCWEgImRldmljZSByZWNvdmVyeSIgb3BlcmF0aW9uIG11c3QgYmUgcGVyZm9ybWVkIHdoZW4gcG93ZXIgaXMgcmVzdG9yZWQKLSAqIAkJdG8gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uLgotICoKLSAqICAwMS0yMC0yMDA1CWRtYXJsaW46IGFkZGVkIHN1cHBvcnQgZm9yIG9wdGlvbmFsIGhhcmR3YXJlIHNwZWNpZmljIGNhbGxiYWNrIHJvdXRpbmUgdG8KLSAqCQlwZXJmb3JtIGV4dHJhIGVycm9yIHN0YXR1cyBjaGVja3Mgb24gZXJhc2UgYW5kIHdyaXRlIGZhaWx1cmVzLiAgVGhpcyByZXF1aXJlZAotICoJCWFkZGluZyBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIG5hbmRfcmVhZF9lY2MuCi0gKgotICogMDgtMjAtMjAwNQl2d29vbDogc3VzcGVuZC9yZXN1bWUgYWRkZWQKLSAqCi0gKiBDcmVkaXRzOgorICogIENyZWRpdHM6CiAgKglEYXZpZCBXb29kaG91c2UgZm9yIGFkZGluZyBtdWx0aWNoaXAgc3VwcG9ydAogICoKICAqCUFsZXBoIE9uZSBMdGQuIGFuZCBUb2J5IENodXJjaGlsbCBMdGQuIGZvciBzdXBwb3J0aW5nIHRoZQogICoJcmV3b3JrIGZvciAySyBwYWdlIHNpemUgY2hpcHMKICAqCi0gKiBUT0RPOgorICogIFRPRE86CiAgKglFbmFibGUgY2FjaGVkIHByb2dyYW1taW5nIGZvciAyayBwYWdlIHNpemUgY2hpcHMKICAqCUNoZWNrLCBpZiBtdGQtPmVjY3R5cGUgc2hvdWxkIGJlIHNldCB0byBNVERfRUNDX0hXCiAgKglpZiB3ZSBoYXZlIEhXIGVjYyBzdXBwb3J0LgogICoJVGhlIEFHLUFORCBjaGlwcyBoYXZlIG5pY2UgZmVhdHVyZXMgZm9yIHNwZWVkIGltcHJvdmVtZW50LAogICoJd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiBSZWFkIC8gcHJvZ3JhbSA0IHBhZ2VzIGluIG9uZSBnby4KICAqCi0gKiAkSWQ6IG5hbmRfYmFzZS5jLHYgMS4xNTAgMjAwNS8wOS8xNSAxMzo1ODo0OCB2d29vbCBFeHAgJAotICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTg4LDc1ICs1Miw0NiBAQAogI2VuZGlmCiAKIC8qIERlZmluZSBkZWZhdWx0IG9vYiBwbGFjZW1lbnQgc2NoZW1lcyBmb3IgbGFyZ2UgYW5kIHNtYWxsIHBhZ2UgZGV2aWNlcyAqLwotc3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8gbmFuZF9vb2JfOCA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX29vYl84ID0gewogCS5lY2NieXRlcyA9IDMsCiAJLmVjY3BvcyA9IHswLCAxLCAyfSwKLQkub29iZnJlZSA9IHsgezMsIDJ9LCB7NiwgMn0gfQorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDMsCisJCSAubGVuZ3RoID0gMn0sCisJCXsub2Zmc2V0ID0gNiwKKwkJIC5sZW5ndGggPSAyfX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfb29iXzE2ID0gewotCS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfb29iXzE2ID0gewogCS5lY2NieXRlcyA9IDYsCiAJLmVjY3BvcyA9IHswLCAxLCAyLCAzLCA2LCA3fSwKLQkub29iZnJlZSA9IHsgezgsIDh9IH0KKwkub29iZnJlZSA9IHsKKwkJey5vZmZzZXQgPSA4LAorCQkgLiBsZW5ndGggPSA4fX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfb29iXzY0ID0gewotCS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfb29iXzY0ID0gewogCS5lY2NieXRlcyA9IDI0LAogCS5lY2Nwb3MgPSB7Ci0JCTQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywKLQkJNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LAotCQk1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjN9LAotCS5vb2JmcmVlID0geyB7MiwgMzh9IH0KKwkJICAgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LAorCQkgICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsCisJCSAgIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2M30sCisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gMiwKKwkJIC5sZW5ndGggPSAzOH19CiB9OwogCi0vKiBUaGlzIGlzIHVzZWQgZm9yIHBhZGRpbmcgcHVycG9zZXMgaW4gbmFuZF93cml0ZV9vb2IgKi8KLXN0YXRpYyB1X2NoYXIgZmZjaGFyc1tdID0gewotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLX07CitzdGF0aWMgaW50IG5hbmRfZ2V0X2RldmljZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCSAgIGludCBuZXdfc3RhdGUpOworCitzdGF0aWMgaW50IG5hbmRfZG9fd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKIAogLyoKLSAqIE5BTkQgbG93LWxldmVsIE1URCBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKiBGb3IgZGV2aWNlcyB3aGljaCBkaXNwbGF5IGV2ZXJ5IGZhcnQgaW4gdGhlIHN5c3RlbSBvbiBhIHNlcGVyYXRlIExFRC4gSXMKKyAqIGNvbXBpbGVkIGF3YXkgd2hlbiBMRUQgc3VwcG9ydCBpcyBkaXNhYmxlZC4KICAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKTsKLXN0YXRpYyB2b2lkIG5hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKTsKLXN0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci0KLXN0YXRpYyBpbnQgbmFuZF9yZWFkIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKTsKLXN0YXRpYyBpbnQgbmFuZF9yZWFkX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJICBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBuYW5kX3JlYWRfb29iIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKTsKLXN0YXRpYyBpbnQgbmFuZF93cml0ZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpOwotc3RhdGljIGludCBuYW5kX3dyaXRlX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJCSAgIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKTsKLXN0YXRpYyBpbnQgbmFuZF93cml0ZXYgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJCXVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICogcmV0bGVuKTsKLXN0YXRpYyBpbnQgbmFuZF93cml0ZXZfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci1zdGF0aWMgaW50IG5hbmRfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwotc3RhdGljIHZvaWQgbmFuZF9zeW5jIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0KLS8qIFNvbWUgaW50ZXJuYWwgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGVfcGFnZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBwYWdlLCB1X2NoYXIgKm9vYl9idWYsCi0JCXN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IG1vZGUpOwotI2lmZGVmIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUKLXN0YXRpYyBpbnQgbmFuZF92ZXJpZnlfcGFnZXMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgcGFnZSwgaW50IG51bXBhZ2VzLAotCXVfY2hhciAqb29iX2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsLCBpbnQgY2hpcG5yLCBpbnQgb29ibW9kZSk7Ci0jZWxzZQotI2RlZmluZSBuYW5kX3ZlcmlmeV9wYWdlcyguLi4pICgwKQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbmFuZF9nZXRfZGV2aWNlIChzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG5ld19zdGF0ZSk7CitERUZJTkVfTEVEX1RSSUdHRVIobmFuZF9sZWRfdHJpZ2dlcik7CiAKIC8qKgogICogbmFuZF9yZWxlYXNlX2RldmljZSAtIFtHRU5FUklDXSByZWxlYXNlIGNoaXAKQEAgLTE2NCwyNyArOTksMTkgQEAKICAqCiAgKiBEZXNlbGVjdCwgcmVsZWFzZSBjaGlwIGxvY2sgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZQogICovCi1zdGF0aWMgdm9pZCBuYW5kX3JlbGVhc2VfZGV2aWNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3N0YXRpYyB2b2lkIG5hbmRfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCiAJLyogRGUtc2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwogCi0JaWYgKHRoaXMtPmNvbnRyb2xsZXIpIHsKLQkJLyogUmVsZWFzZSB0aGUgY29udHJvbGxlciBhbmQgdGhlIGNoaXAgKi8KLQkJc3Bpbl9sb2NrKCZ0aGlzLT5jb250cm9sbGVyLT5sb2NrKTsKLQkJdGhpcy0+Y29udHJvbGxlci0+YWN0aXZlID0gTlVMTDsKLQkJdGhpcy0+c3RhdGUgPSBGTF9SRUFEWTsKLQkJd2FrZV91cCgmdGhpcy0+Y29udHJvbGxlci0+d3EpOwotCQlzcGluX3VubG9jaygmdGhpcy0+Y29udHJvbGxlci0+bG9jayk7Ci0JfSBlbHNlIHsKLQkJLyogUmVsZWFzZSB0aGUgY2hpcCAqLwotCQlzcGluX2xvY2soJnRoaXMtPmNoaXBfbG9jayk7Ci0JCXRoaXMtPnN0YXRlID0gRkxfUkVBRFk7Ci0JCXdha2VfdXAoJnRoaXMtPndxKTsKLQkJc3Bpbl91bmxvY2soJnRoaXMtPmNoaXBfbG9jayk7Ci0JfQorCS8qIFJlbGVhc2UgdGhlIGNvbnRyb2xsZXIgYW5kIHRoZSBjaGlwICovCisJc3Bpbl9sb2NrKCZjaGlwLT5jb250cm9sbGVyLT5sb2NrKTsKKwljaGlwLT5jb250cm9sbGVyLT5hY3RpdmUgPSBOVUxMOworCWNoaXAtPnN0YXRlID0gRkxfUkVBRFk7CisJd2FrZV91cCgmY2hpcC0+Y29udHJvbGxlci0+d3EpOworCXNwaW5fdW5sb2NrKCZjaGlwLT5jb250cm9sbGVyLT5sb2NrKTsKIH0KIAogLyoqCkBAIC0xOTMsMjMgKzEyMCwxMCBAQAogICoKICAqIERlZmF1bHQgcmVhZCBmdW5jdGlvbiBmb3IgOGJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyB1X2NoYXIgbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdWludDhfdCBuYW5kX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXJldHVybiByZWFkYih0aGlzLT5JT19BRERSX1IpOwotfQotCi0vKioKLSAqIG5hbmRfd3JpdGVfYnl0ZSAtIFtERUZBVUxUXSB3cml0ZSBvbmUgYnl0ZSB0byB0aGUgY2hpcAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBieXRlOglwb2ludGVyIHRvIGRhdGEgYnl0ZSB0byB3cml0ZQotICoKLSAqIERlZmF1bHQgd3JpdGUgZnVuY3Rpb24gZm9yIDhpdCBidXN3aXRoCi0gKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl3cml0ZWIoYnl0ZSwgdGhpcy0+SU9fQUREUl9XKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXJldHVybiByZWFkYihjaGlwLT5JT19BRERSX1IpOwogfQogCiAvKioKQEAgLTIxOSwyNCArMTMzLDEwIEBACiAgKiBEZWZhdWx0IHJlYWQgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGggd2l0aAogICogZW5kaWFuZXNzIGNvbnZlcnNpb24KICAqLwotc3RhdGljIHVfY2hhciBuYW5kX3JlYWRfYnl0ZTE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIHVpbnQ4X3QgbmFuZF9yZWFkX2J5dGUxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXJldHVybiAodV9jaGFyKSBjcHVfdG9fbGUxNihyZWFkdyh0aGlzLT5JT19BRERSX1IpKTsKLX0KLQotLyoqCi0gKiBuYW5kX3dyaXRlX2J5dGUxNiAtIFtERUZBVUxUXSB3cml0ZSBvbmUgYnl0ZSBlbmRpYW5lc3MgYXdhcmUgdG8gdGhlIGNoaXAKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAYnl0ZToJcG9pbnRlciB0byBkYXRhIGJ5dGUgdG8gd3JpdGUKLSAqCi0gKiBEZWZhdWx0IHdyaXRlIGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoIHdpdGgKLSAqIGVuZGlhbmVzcyBjb252ZXJzaW9uCi0gKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnl0ZTE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgYnl0ZSkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXdyaXRldyhsZTE2X3RvX2NwdSgodTE2KSBieXRlKSwgdGhpcy0+SU9fQUREUl9XKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXJldHVybiAodWludDhfdCkgY3B1X3RvX2xlMTYocmVhZHcoY2hpcC0+SU9fQUREUl9SKSk7CiB9CiAKIC8qKgpAQCAtMjQ4LDIyICsxNDgsOCBAQAogICovCiBzdGF0aWMgdTE2IG5hbmRfcmVhZF93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JcmV0dXJuIHJlYWR3KHRoaXMtPklPX0FERFJfUik7Ci19Ci0KLS8qKgotICogbmFuZF93cml0ZV93b3JkIC0gW0RFRkFVTFRdIHdyaXRlIG9uZSB3b3JkIHRvIHRoZSBjaGlwCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHdvcmQ6CWRhdGEgd29yZCB0byB3cml0ZQotICoKLSAqIERlZmF1bHQgd3JpdGUgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGggd2l0aG91dAotICogZW5kaWFuZXNzIGNvbnZlcnNpb24KLSAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1MTYgd29yZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXdyaXRldyh3b3JkLCB0aGlzLT5JT19BRERSX1cpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJcmV0dXJuIHJlYWR3KGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgpAQCAtMjczLDE1ICsxNTksMTUgQEAKICAqCiAgKiBEZWZhdWx0IHNlbGVjdCBmdW5jdGlvbiBmb3IgMSBjaGlwIGRldmljZXMuCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQorc3RhdGljIHZvaWQgbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXBucikKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN3aXRjaChjaGlwKSB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKworCXN3aXRjaCAoY2hpcG5yKSB7CiAJY2FzZSAtMToKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSTkNFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLCAwIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAJCWJyZWFrOwogCWNhc2UgMDoKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUTkNFKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjk3LDEzICsxODMsMTMgQEAKICAqCiAgKiBEZWZhdWx0IHdyaXRlIGZ1bmN0aW9uIGZvciA4Yml0IGJ1c3dpdGgKICAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgbmFuZF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykKLQkJd3JpdGViKGJ1ZltpXSwgdGhpcy0+SU9fQUREUl9XKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXdyaXRlYihidWZbaV0sIGNoaXAtPklPX0FERFJfVyk7CiB9CiAKIC8qKgpAQCAtMzE0LDEzICsyMDAsMTMgQEAKICAqCiAgKiBEZWZhdWx0IHJlYWQgZnVuY3Rpb24gZm9yIDhiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG5hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykKLQkJYnVmW2ldID0gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWJ1ZltpXSA9IHJlYWRiKGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgpAQCAtMzMxLDE1ICsyMTcsMTQgQEAKICAqCiAgKiBEZWZhdWx0IHZlcmlmeSBmdW5jdGlvbiBmb3IgOGJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCWlmIChidWZbaV0gIT0gcmVhZGIodGhpcy0+SU9fQUREUl9SKSkKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChidWZbaV0gIT0gcmVhZGIoY2hpcC0+SU9fQUREUl9SKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1MSwxNSArMjM2LDE1IEBACiAgKgogICogRGVmYXVsdCB3cml0ZSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCXdyaXRldyhwW2ldLCB0aGlzLT5JT19BRERSX1cpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJd3JpdGV3KHBbaV0sIGNoaXAtPklPX0FERFJfVyk7CiAKIH0KIApAQCAtMzcxLDE1ICsyNTYsMTUgQEAKICAqCiAgKiBEZWZhdWx0IHJlYWQgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGgKICAqLwotc3RhdGljIHZvaWQgbmFuZF9yZWFkX2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG5hbmRfcmVhZF9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1MTYgKnAgPSAodTE2ICopIGJ1ZjsKIAlsZW4gPj49IDE7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykKLQkJcFtpXSA9IHJlYWR3KHRoaXMtPklPX0FERFJfUik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlwW2ldID0gcmVhZHcoY2hpcC0+SU9fQUREUl9SKTsKIH0KIAogLyoqCkBAIC0zOTAsMTUgKzI3NSwxNSBAQAogICoKICAqIERlZmF1bHQgdmVyaWZ5IGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIGludCBuYW5kX3ZlcmlmeV9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1MTYgKnAgPSAodTE2ICopIGJ1ZjsKIAlsZW4gPj49IDE7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykKLQkJaWYgKHBbaV0gIT0gcmVhZHcodGhpcy0+SU9fQUREUl9SKSkKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChwW2ldICE9IHJlYWR3KGNoaXAtPklPX0FERFJfUikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwpAQCAtNDE1LDM4ICszMDAsMzcgQEAKIHN0YXRpYyBpbnQgbmFuZF9ibG9ja19iYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKQogewogCWludCBwYWdlLCBjaGlwbnIsIHJlcyA9IDA7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCXUxNiBiYWQ7CiAKIAlpZiAoZ2V0Y2hpcCkgewotCQlwYWdlID0gKGludCkob2ZzID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCQljaGlwbnIgPSAoaW50KShvZnMgPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CisJCXBhZ2UgPSAoaW50KShvZnMgPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJCWNoaXBuciA9IChpbnQpKG9mcyA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKIAotCQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQkJbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1JFQURJTkcpOworCQluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9SRUFESU5HKTsKIAogCQkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwogCX0gZWxzZQotCQlwYWdlID0gKGludCkgb2ZzOworCQlwYWdlID0gKGludClvZnM7CiAKLQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFET09CLCB0aGlzLT5iYWRibG9ja3BvcyAmIDB4RkUsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCWJhZCA9IGNwdV90b19sZTE2KHRoaXMtPnJlYWRfd29yZChtdGQpKTsKLQkJaWYgKHRoaXMtPmJhZGJsb2NrcG9zICYgMHgxKQorCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgeworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgY2hpcC0+YmFkYmxvY2twb3MgJiAweEZFLAorCQkJICAgICAgcGFnZSAmIGNoaXAtPnBhZ2VtYXNrKTsKKwkJYmFkID0gY3B1X3RvX2xlMTYoY2hpcC0+cmVhZF93b3JkKG10ZCkpOworCQlpZiAoY2hpcC0+YmFkYmxvY2twb3MgJiAweDEpCiAJCQliYWQgPj49IDg7CiAJCWlmICgoYmFkICYgMHhGRikgIT0gMHhmZikKIAkJCXJlcyA9IDE7CiAJfSBlbHNlIHsKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFET09CLCB0aGlzLT5iYWRibG9ja3BvcywgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkJaWYgKHRoaXMtPnJlYWRfYnl0ZShtdGQpICE9IDB4ZmYpCisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCBjaGlwLT5iYWRibG9ja3BvcywKKwkJCSAgICAgIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CisJCWlmIChjaGlwLT5yZWFkX2J5dGUobXRkKSAhPSAweGZmKQogCQkJcmVzID0gMTsKIAl9CiAKLQlpZiAoZ2V0Y2hpcCkgewotCQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCisJaWYgKGdldGNoaXApCiAJCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKLQl9CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtNDYxLDIzICszNDUsMzMgQEAKICovCiBzdGF0aWMgaW50IG5hbmRfZGVmYXVsdF9ibG9ja19tYXJrYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JdV9jaGFyIGJ1ZlsyXSA9IHswLCAwfTsKLQlzaXplX3QJcmV0bGVuOwotCWludCBibG9jazsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXVpbnQ4X3QgYnVmWzJdID0geyAwLCAwIH07CisJaW50IGJsb2NrLCByZXQ7CiAKIAkvKiBHZXQgYmxvY2sgbnVtYmVyICovCi0JYmxvY2sgPSAoKGludCkgb2ZzKSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7Ci0JaWYgKHRoaXMtPmJidCkKLQkJdGhpcy0+YmJ0W2Jsb2NrID4+IDJdIHw9IDB4MDEgPDwgKChibG9jayAmIDB4MDMpIDw8IDEpOworCWJsb2NrID0gKChpbnQpb2ZzKSA+PiBjaGlwLT5iYnRfZXJhc2Vfc2hpZnQ7CisJaWYgKGNoaXAtPmJidCkKKwkJY2hpcC0+YmJ0W2Jsb2NrID4+IDJdIHw9IDB4MDEgPDwgKChibG9jayAmIDB4MDMpIDw8IDEpOwogCiAJLyogRG8gd2UgaGF2ZSBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZSA/ICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX1VTRV9GTEFTSF9CQlQpCi0JCXJldHVybiBuYW5kX3VwZGF0ZV9iYnQgKG10ZCwgb2ZzKTsKKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVCkKKwkJcmV0ID0gbmFuZF91cGRhdGVfYmJ0KG10ZCwgb2ZzKTsKKwllbHNlIHsKKwkJLyogV2Ugd3JpdGUgdHdvIGJ5dGVzLCBzbyB3ZSBkb250IGhhdmUgdG8gbWVzcyB3aXRoIDE2IGJpdAorCQkgKiBhY2Nlc3MKKwkJICovCisJCW9mcyArPSBtdGQtPm9vYnNpemU7CisJCWNoaXAtPm9wcy5sZW4gPSAyOworCQljaGlwLT5vcHMuZGF0YnVmID0gTlVMTDsKKwkJY2hpcC0+b3BzLm9vYmJ1ZiA9IGJ1ZjsKKwkJY2hpcC0+b3BzLm9vYm9mZnMgPSBjaGlwLT5iYWRibG9ja3BvcyAmIH4weDAxOwogCi0JLyogV2Ugd3JpdGUgdHdvIGJ5dGVzLCBzbyB3ZSBkb250IGhhdmUgdG8gbWVzcyB3aXRoIDE2IGJpdCBhY2Nlc3MgKi8KLQlvZnMgKz0gbXRkLT5vb2JzaXplICsgKHRoaXMtPmJhZGJsb2NrcG9zICYgfjB4MDEpOwotCXJldHVybiBuYW5kX3dyaXRlX29vYiAobXRkLCBvZnMgLCAyLCAmcmV0bGVuLCBidWYpOworCQlyZXQgPSBuYW5kX2RvX3dyaXRlX29vYihtdGQsIG9mcywgJmNoaXAtPm9wcyk7CisJfQorCWlmICghcmV0KQorCQltdGQtPmVjY19zdGF0cy5iYWRibG9ja3MrKzsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTQ4NywxMiArMzgxLDEyIEBACiAgKgogICogVGhlIGZ1bmN0aW9uIGV4cGVjdHMsIHRoYXQgdGhlIGRldmljZSBpcyBhbHJlYWR5IHNlbGVjdGVkCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF9jaGVja193cCAoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgaW50IG5hbmRfY2hlY2tfd3Aoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCS8qIENoZWNrIHRoZSBXUCBiaXQgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVUywgLTEsIC0xKTsKLQlyZXR1cm4gKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfV1ApID8gMCA6IDE7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVUywgLTEsIC0xKTsKKwlyZXR1cm4gKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfV1ApID8gMCA6IDE7CiB9CiAKIC8qKgpAQCAtNTA1LDMyICszOTksMzEgQEAKICAqIENoZWNrLCBpZiB0aGUgYmxvY2sgaXMgYmFkLiBFaXRoZXIgYnkgcmVhZGluZyB0aGUgYmFkIGJsb2NrIHRhYmxlIG9yCiAgKiBjYWxsaW5nIG9mIHRoZSBzY2FuIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IG5hbmRfYmxvY2tfY2hlY2tiYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCwgaW50IGFsbG93YmJ0KQorc3RhdGljIGludCBuYW5kX2Jsb2NrX2NoZWNrYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCwKKwkJCSAgICAgICBpbnQgYWxsb3diYnQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JaWYgKCF0aGlzLT5iYnQpCi0JCXJldHVybiB0aGlzLT5ibG9ja19iYWQobXRkLCBvZnMsIGdldGNoaXApOworCWlmICghY2hpcC0+YmJ0KQorCQlyZXR1cm4gY2hpcC0+YmxvY2tfYmFkKG10ZCwgb2ZzLCBnZXRjaGlwKTsKIAogCS8qIFJldHVybiBpbmZvIGZyb20gdGhlIHRhYmxlICovCi0JcmV0dXJuIG5hbmRfaXNiYWRfYmJ0IChtdGQsIG9mcywgYWxsb3diYnQpOworCXJldHVybiBuYW5kX2lzYmFkX2JidChtdGQsIG9mcywgYWxsb3diYnQpOwogfQogCi1ERUZJTkVfTEVEX1RSSUdHRVIobmFuZF9sZWRfdHJpZ2dlcik7Ci0KIC8qCiAgKiBXYWl0IGZvciB0aGUgcmVhZHkgcGluLCBhZnRlciBhIGNvbW1hbmQKICAqIFRoZSB0aW1lb3V0IGlzIGNhdGNoZWQgbGF0ZXIuCiAgKi8KIHN0YXRpYyB2b2lkIG5hbmRfd2FpdF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVuc2lnbmVkIGxvbmcJdGltZW8gPSBqaWZmaWVzICsgMjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgMjsKIAogCWxlZF90cmlnZ2VyX2V2ZW50KG5hbmRfbGVkX3RyaWdnZXIsIExFRF9GVUxMKTsKIAkvKiB3YWl0IHVudGlsIGNvbW1hbmQgaXMgcHJvY2Vzc2VkIG9yIHRpbWVvdXQgb2NjdXJlcyAqLwogCWRvIHsKLQkJaWYgKHRoaXMtPmRldl9yZWFkeShtdGQpKQorCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KG10ZCkpCiAJCQlicmVhazsKIAkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvKSk7CkBAIC01NDcsMjEgKzQ0MCwyMSBAQAogICogU2VuZCBjb21tYW5kIHRvIE5BTkQgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHNtYWxsIHBhZ2UKICAqIGRldmljZXMgKDI1Ni81MTIgQnl0ZXMgcGVyIHBhZ2UpCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfY29tbWFuZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCitzdGF0aWMgdm9pZCBuYW5kX2NvbW1hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCBjb21tYW5kLAorCQkJIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCiB7Ci0JcmVnaXN0ZXIgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCBjdHJsID0gTkFORF9DVFJMX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0U7CiAKLQkvKiBCZWdpbiBjb21tYW5kIGxhdGNoIGN5Y2xlICovCi0JdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKIAkvKgogCSAqIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLgogCSAqLwogCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1NFUUlOKSB7CiAJCWludCByZWFkY21kOwogCi0JCWlmIChjb2x1bW4gPj0gbXRkLT5vb2JibG9jaykgeworCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CiAJCQkvKiBPT0IgYXJlYSAqLwotCQkJY29sdW1uIC09IG10ZC0+b29iYmxvY2s7CisJCQljb2x1bW4gLT0gbXRkLT53cml0ZXNpemU7CiAJCQlyZWFkY21kID0gTkFORF9DTURfUkVBRE9PQjsKIAkJfSBlbHNlIGlmIChjb2x1bW4gPCAyNTYpIHsKIAkJCS8qIEZpcnN0IDI1NiBieXRlcyAtLT4gUkVBRDAgKi8KQEAgLTU3MCwzOCArNDYzLDM3IEBACiAJCQljb2x1bW4gLT0gMjU2OwogCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQUQxOwogCQl9Ci0JCXRoaXMtPndyaXRlX2J5dGUobXRkLCByZWFkY21kKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCByZWFkY21kLCBjdHJsKTsKKwkJY3RybCAmPSB+TkFORF9DVFJMX0NIQU5HRTsKIAl9Ci0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIGNvbW1hbmQpOworCWNoaXAtPmNtZF9jdHJsKG10ZCwgY29tbWFuZCwgY3RybCk7CiAKLQkvKiBTZXQgQUxFIGFuZCBjbGVhciBDTEUgdG8gc3RhcnQgYWRkcmVzcyBjeWNsZSAqLwotCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7Ci0KLQlpZiAoY29sdW1uICE9IC0xIHx8IHBhZ2VfYWRkciAhPSAtMSkgewotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRBTEUpOwotCi0JCS8qIFNlcmlhbGx5IGlucHV0IGFkZHJlc3MgKi8KLQkJaWYgKGNvbHVtbiAhPSAtMSkgewotCQkJLyogQWRqdXN0IGNvbHVtbnMgZm9yIDE2IGJpdCBidXN3aWR0aCAqLwotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQotCQkJCWNvbHVtbiA+Pj0gMTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb2x1bW4pOwotCQl9Ci0JCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodW5zaWduZWQgY2hhcikgKHBhZ2VfYWRkciAmIDB4ZmYpKTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodW5zaWduZWQgY2hhcikgKChwYWdlX2FkZHIgPj4gOCkgJiAweGZmKSk7Ci0JCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMzJNaUIgKi8KLQkJCWlmICh0aGlzLT5jaGlwc2l6ZSA+ICgzMiA8PCAyMCkpCi0JCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweDBmKSk7Ci0JCX0KLQkJLyogTGF0Y2ggaW4gYWRkcmVzcyAqLwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJBTEUpOworCS8qCisJICogQWRkcmVzcyBjeWNsZSwgd2hlbiBuZWNlc3NhcnkKKwkgKi8KKwljdHJsID0gTkFORF9DVFJMX0FMRSB8IE5BTkRfQ1RSTF9DSEFOR0U7CisJLyogU2VyaWFsbHkgaW5wdXQgYWRkcmVzcyAqLworCWlmIChjb2x1bW4gIT0gLTEpIHsKKwkJLyogQWRqdXN0IGNvbHVtbnMgZm9yIDE2IGJpdCBidXN3aWR0aCAqLworCQlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQljb2x1bW4gPj49IDE7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgY29sdW1uLCBjdHJsKTsKKwkJY3RybCAmPSB+TkFORF9DVFJMX0NIQU5HRTsKIAl9CisJaWYgKHBhZ2VfYWRkciAhPSAtMSkgeworCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciwgY3RybCk7CisJCWN0cmwgJj0gfk5BTkRfQ1RSTF9DSEFOR0U7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyID4+IDgsIGN0cmwpOworCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMzJNaUIgKi8KKwkJaWYgKGNoaXAtPmNoaXBzaXplID4gKDMyIDw8IDIwKSkKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyID4+IDE2LCBjdHJsKTsKKwl9CisJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJLyoKIAkgKiBwcm9ncmFtIGFuZCBlcmFzZSBoYXZlIHRoZWlyIG93biBidXN5IGhhbmRsZXJzCiAJICogc3RhdHVzIGFuZCBzZXF1ZW50aWFsIGluIG5lZWRzIG5vIGRlbGF5Ci0JKi8KKwkgKi8KIAlzd2l0Y2ggKGNvbW1hbmQpIHsKIAogCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CkBAIC02MTIsMjkgKzUwNCwzMCBAQAogCQlyZXR1cm47CiAKIAljYXNlIE5BTkRfQ01EX1JFU0VUOgotCQlpZiAodGhpcy0+ZGV2X3JlYWR5KQorCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KQogCQkJYnJlYWs7Ci0JCXVkZWxheSh0aGlzLT5jaGlwX2RlbGF5KTsKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKLQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIE5BTkRfQ01EX1NUQVRVUyk7Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7Ci0JCXdoaWxlICggISh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1JFQURZKSk7CisJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9TVEFUVVMsCisJCQkgICAgICAgTkFORF9DVFJMX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQljaGlwLT5jbWRfY3RybChtdGQsCisJCQkgICAgICAgTkFORF9DTURfTk9ORSwgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJd2hpbGUgKCEoY2hpcC0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkpIDsKIAkJcmV0dXJuOwogCi0JLyogVGhpcyBhcHBsaWVzIHRvIHJlYWQgY29tbWFuZHMgKi8KKwkJLyogVGhpcyBhcHBsaWVzIHRvIHJlYWQgY29tbWFuZHMgKi8KIAlkZWZhdWx0OgogCQkvKgogCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgYnVzeSBwaW4sIHdlIGFwcGx5IHRoZSBnaXZlbgogCQkgKiBjb21tYW5kIGRlbGF5Ci0JCSovCi0JCWlmICghdGhpcy0+ZGV2X3JlYWR5KSB7Ci0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOworCQkgKi8KKwkJaWYgKCFjaGlwLT5kZXZfcmVhZHkpIHsKKwkJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAkvKiBBcHBseSB0aGlzIHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0IHRXQiBpbgogCSAqIGFueSBjYXNlIG9uIGFueSBtYWNoaW5lLiAqLwotCW5kZWxheSAoMTAwKTsKKwluZGVsYXkoMTAwKTsKIAogCW5hbmRfd2FpdF9yZWFkeShtdGQpOwogfQpAQCAtNjQ2LDUwICs1MzksNDkgQEAKICAqIEBjb2x1bW46CXRoZSBjb2x1bW4gYWRkcmVzcyBmb3IgdGhpcyBjb21tYW5kLCAtMSBpZiBub25lCiAgKiBAcGFnZV9hZGRyOgl0aGUgcGFnZSBhZGRyZXNzIGZvciB0aGlzIGNvbW1hbmQsIC0xIGlmIG5vbmUKICAqCi0gKiBTZW5kIGNvbW1hbmQgdG8gTkFORCBkZXZpY2UuIFRoaXMgaXMgdGhlIHZlcnNpb24gZm9yIHRoZSBuZXcgbGFyZ2UgcGFnZSBkZXZpY2VzCi0gKiBXZSBkb250IGhhdmUgdGhlIHNlcGVyYXRlIHJlZ2lvbnMgYXMgd2UgaGF2ZSBpbiB0aGUgc21hbGwgcGFnZSBkZXZpY2VzLgotICogV2UgbXVzdCBlbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgdG8ga2VlcCB0aGUgY29kZSBjb21wYXRpYmxlLgorICogU2VuZCBjb21tYW5kIHRvIE5BTkQgZGV2aWNlLiBUaGlzIGlzIHRoZSB2ZXJzaW9uIGZvciB0aGUgbmV3IGxhcmdlIHBhZ2UKKyAqIGRldmljZXMgV2UgZG9udCBoYXZlIHRoZSBzZXBhcmF0ZSByZWdpb25zIGFzIHdlIGhhdmUgaW4gdGhlIHNtYWxsIHBhZ2UKKyAqIGRldmljZXMuICBXZSBtdXN0IGVtdWxhdGUgTkFORF9DTURfUkVBRE9PQiB0byBrZWVwIHRoZSBjb2RlIGNvbXBhdGlibGUuCiAgKgogICovCi1zdGF0aWMgdm9pZCBuYW5kX2NvbW1hbmRfbHAgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQorc3RhdGljIHZvaWQgbmFuZF9jb21tYW5kX2xwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCSAgICBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewotCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJcmVnaXN0ZXIgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAogCS8qIEVtdWxhdGUgTkFORF9DTURfUkVBRE9PQiAqLwogCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQURPT0IpIHsKLQkJY29sdW1uICs9IG10ZC0+b29iYmxvY2s7CisJCWNvbHVtbiArPSBtdGQtPndyaXRlc2l6ZTsKIAkJY29tbWFuZCA9IE5BTkRfQ01EX1JFQUQwOwogCX0KIAotCi0JLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7Ci0JLyogV3JpdGUgb3V0IHRoZSBjb21tYW5kIHRvIHRoZSBkZXZpY2UuICovCi0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIChjb21tYW5kICYgMHhmZikpOwotCS8qIEVuZCBjb21tYW5kIGxhdGNoIGN5Y2xlICovCi0JdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKKwkvKiBDb21tYW5kIGxhdGNoIGN5Y2xlICovCisJY2hpcC0+Y21kX2N0cmwobXRkLCBjb21tYW5kICYgMHhmZiwKKwkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCWlmIChjb2x1bW4gIT0gLTEgfHwgcGFnZV9hZGRyICE9IC0xKSB7Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7CisJCWludCBjdHJsID0gTkFORF9DVFJMX0NIQU5HRSB8IE5BTkRfTkNFIHwgTkFORF9BTEU7CiAKIAkJLyogU2VyaWFsbHkgaW5wdXQgYWRkcmVzcyAqLwogCQlpZiAoY29sdW1uICE9IC0xKSB7CiAJCQkvKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCi0JCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCiAJCQkJY29sdW1uID4+PSAxOwotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIGNvbHVtbiAmIDB4ZmYpOwotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIGNvbHVtbiA+PiA4KTsKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgY29sdW1uLCBjdHJsKTsKKwkJCWN0cmwgJj0gfk5BTkRfQ1RSTF9DSEFOR0U7CisJCQljaGlwLT5jbWRfY3RybChtdGQsIGNvbHVtbiA+PiA4LCBjdHJsKTsKIAkJfQogCQlpZiAocGFnZV9hZGRyICE9IC0xKSB7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpIChwYWdlX2FkZHIgJiAweGZmKSk7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpICgocGFnZV9hZGRyID4+IDgpICYgMHhmZikpOworCQkJY2hpcC0+Y21kX2N0cmwobXRkLCBwYWdlX2FkZHIsIGN0cmwpOworCQkJY2hpcC0+Y21kX2N0cmwobXRkLCBwYWdlX2FkZHIgPj4gOCwKKwkJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0FMRSk7CiAJCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMTI4TWlCICovCi0JCQlpZiAodGhpcy0+Y2hpcHNpemUgPiAoMTI4IDw8IDIwKSkKLQkJCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpICgocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYpKTsKKwkJCWlmIChjaGlwLT5jaGlwc2l6ZSA+ICgxMjggPDwgMjApKQorCQkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyID4+IDE2LAorCQkJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0FMRSk7CiAJCX0KLQkJLyogTGF0Y2ggaW4gYWRkcmVzcyAqLwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJBTEUpOwogCX0KKwljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKIAkvKgogCSAqIHByb2dyYW0gYW5kIGVyYXNlIGhhdmUgdGhlaXIgb3duIGJ1c3kgaGFuZGxlcnMKQEAgLTcwMiw1NSArNTk0LDYyIEBACiAJY2FzZSBOQU5EX0NNRF9FUkFTRTE6CiAJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CiAJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwljYXNlIE5BTkRfQ01EX1JORElOOgogCWNhc2UgTkFORF9DTURfU1RBVFVTOgogCWNhc2UgTkFORF9DTURfREVQTEVURTE6CiAJCXJldHVybjsKIAotCS8qCi0JICogcmVhZCBlcnJvciBzdGF0dXMgY29tbWFuZHMgcmVxdWlyZSBvbmx5IGEgc2hvcnQgZGVsYXkKLQkgKi8KKwkJLyoKKwkJICogcmVhZCBlcnJvciBzdGF0dXMgY29tbWFuZHMgcmVxdWlyZSBvbmx5IGEgc2hvcnQgZGVsYXkKKwkJICovCiAJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1I6CiAJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IwOgogCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMToKIAljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjI6CiAJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IzOgotCQl1ZGVsYXkodGhpcy0+Y2hpcF9kZWxheSk7CisJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKIAkJcmV0dXJuOwogCiAJY2FzZSBOQU5EX0NNRF9SRVNFVDoKLQkJaWYgKHRoaXMtPmRldl9yZWFkeSkKKwkJaWYgKGNoaXAtPmRldl9yZWFkeSkKIAkJCWJyZWFrOwotCQl1ZGVsYXkodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7Ci0JCXRoaXMtPndyaXRlX2J5dGUobXRkLCBOQU5EX0NNRF9TVEFUVVMpOwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCQl3aGlsZSAoICEodGhpcy0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkpOworCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfU1RBVFVTLAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJCXdoaWxlICghKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpKSA7CisJCXJldHVybjsKKworCWNhc2UgTkFORF9DTURfUk5ET1VUOgorCQkvKiBObyByZWFkeSAvIGJ1c3kgY2hlY2sgbmVjZXNzYXJ5ICovCisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfUk5ET1VUU1RBUlQsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAkJcmV0dXJuOwogCiAJY2FzZSBOQU5EX0NNRF9SRUFEMDoKLQkJLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCQkvKiBXcml0ZSBvdXQgdGhlIHN0YXJ0IHJlYWQgY29tbWFuZCAqLwotCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfUkVBRFNUQVJUKTsKLQkJLyogRW5kIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQkJLyogRmFsbCB0aHJvdWdoIGludG8gcmVhZHkgY2hlY2sgKi8KKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9SRUFEU1RBUlQsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAotCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCisJCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCiAJZGVmYXVsdDoKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1c3kgcGluLCB3ZSBhcHBseSB0aGUgZ2l2ZW4KIAkJICogY29tbWFuZCBkZWxheQotCQkqLwotCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkgewotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKKwkJICovCisJCWlmICghY2hpcC0+ZGV2X3JlYWR5KSB7CisJCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAkvKiBBcHBseSB0aGlzIHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0IHRXQiBpbgogCSAqIGFueSBjYXNlIG9uIGFueSBtYWNoaW5lLiAqLwotCW5kZWxheSAoMTAwKTsKKwluZGVsYXkoMTAwKTsKIAogCW5hbmRfd2FpdF9yZWFkeShtdGQpOwogfQpAQCAtNzYzLDM0ICs2NjIsMjggQEAKICAqCiAgKiBHZXQgdGhlIGRldmljZSBhbmQgbG9jayBpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcwogICovCi1zdGF0aWMgaW50IG5hbmRfZ2V0X2RldmljZSAoc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBuZXdfc3RhdGUpCitzdGF0aWMgaW50CituYW5kX2dldF9kZXZpY2Uoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBuZXdfc3RhdGUpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqYWN0aXZlOwotCXNwaW5sb2NrX3QgKmxvY2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxOwotCURFQ0xBUkVfV0FJVFFVRVVFICh3YWl0LCBjdXJyZW50KTsKLQotCWxvY2sgPSAodGhpcy0+Y29udHJvbGxlcikgPyAmdGhpcy0+Y29udHJvbGxlci0+bG9jayA6ICZ0aGlzLT5jaGlwX2xvY2s7Ci0Jd3EgPSAodGhpcy0+Y29udHJvbGxlcikgPyAmdGhpcy0+Y29udHJvbGxlci0+d3EgOiAmdGhpcy0+d3E7Ci1yZXRyeToKLQlhY3RpdmUgPSB0aGlzOworCXNwaW5sb2NrX3QgKmxvY2sgPSAmY2hpcC0+Y29udHJvbGxlci0+bG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSAmY2hpcC0+Y29udHJvbGxlci0+d3E7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisgcmV0cnk6CiAJc3Bpbl9sb2NrKGxvY2spOwogCiAJLyogSGFyZHdhcmUgY29udHJvbGxlciBzaGFyZWQgYW1vbmcgaW5kZXBlbmRlbmQgZGV2aWNlcyAqLwotCWlmICh0aGlzLT5jb250cm9sbGVyKSB7Ci0JCWlmICh0aGlzLT5jb250cm9sbGVyLT5hY3RpdmUpCi0JCQlhY3RpdmUgPSB0aGlzLT5jb250cm9sbGVyLT5hY3RpdmU7Ci0JCWVsc2UKLQkJCXRoaXMtPmNvbnRyb2xsZXItPmFjdGl2ZSA9IHRoaXM7Ci0JfQotCWlmIChhY3RpdmUgPT0gdGhpcyAmJiB0aGlzLT5zdGF0ZSA9PSBGTF9SRUFEWSkgewotCQl0aGlzLT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwkvKiBIYXJkd2FyZSBjb250cm9sbGVyIHNoYXJlZCBhbW9uZyBpbmRlcGVuZGVuZCBkZXZpY2VzICovCisJaWYgKCFjaGlwLT5jb250cm9sbGVyLT5hY3RpdmUpCisJCWNoaXAtPmNvbnRyb2xsZXItPmFjdGl2ZSA9IGNoaXA7CisKKwlpZiAoY2hpcC0+Y29udHJvbGxlci0+YWN0aXZlID09IGNoaXAgJiYgY2hpcC0+c3RhdGUgPT0gRkxfUkVBRFkpIHsKKwkJY2hpcC0+c3RhdGUgPSBuZXdfc3RhdGU7CiAJCXNwaW5fdW5sb2NrKGxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKG5ld19zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpIHsKIAkJc3Bpbl91bmxvY2sobG9jayk7Ci0JCXJldHVybiAodGhpcy0+c3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKSA/IDAgOiAtRUFHQUlOOworCQlyZXR1cm4gKGNoaXAtPnN0YXRlID09IEZMX1BNX1NVU1BFTkRFRCkgPyAwIDogLUVBR0FJTjsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCWFkZF93YWl0X3F1ZXVlKHdxLCAmd2FpdCk7CkBAIC04MDQsMjY1ICs2OTcsMzcxIEBACiAgKiBuYW5kX3dhaXQgLSBbREVGQVVMVF0gIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgaXMgZG9uZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0aGlzOglOQU5EIGNoaXAgc3RydWN0dXJlCi0gKiBAc3RhdGU6CXN0YXRlIHRvIHNlbGVjdCB0aGUgbWF4LiB0aW1lb3V0IHZhbHVlCiAgKgogICogV2FpdCBmb3IgY29tbWFuZCBkb25lLiBUaGlzIGFwcGxpZXMgdG8gZXJhc2UgYW5kIHByb2dyYW0gb25seQogICogRXJhc2UgY2FuIHRha2UgdXAgdG8gNDAwbXMgYW5kIHByb2dyYW0gdXAgdG8gMjBtcyBhY2NvcmRpbmcgdG8KICAqIGdlbmVyYWwgTkFORCBhbmQgU21hcnRNZWRpYSBzcGVjcwogICoKICovCi1zdGF0aWMgaW50IG5hbmRfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlKQorc3RhdGljIGludCBuYW5kX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCiB7CiAKLQl1bnNpZ25lZCBsb25nCXRpbWVvID0gamlmZmllczsKLQlpbnQJc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzOworCWludCBzdGF0dXMsIHN0YXRlID0gY2hpcC0+c3RhdGU7CiAKIAlpZiAoc3RhdGUgPT0gRkxfRVJBU0lORykKLQkJIHRpbWVvICs9IChIWiAqIDQwMCkgLyAxMDAwOworCQl0aW1lbyArPSAoSFogKiA0MDApIC8gMTAwMDsKIAllbHNlCi0JCSB0aW1lbyArPSAoSFogKiAyMCkgLyAxMDAwOworCQl0aW1lbyArPSAoSFogKiAyMCkgLyAxMDAwOwogCiAJbGVkX3RyaWdnZXJfZXZlbnQobmFuZF9sZWRfdHJpZ2dlciwgTEVEX0ZVTEwpOwogCiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7CisJbmRlbGF5KDEwMCk7CiAKLQlpZiAoKHN0YXRlID09IEZMX0VSQVNJTkcpICYmICh0aGlzLT5vcHRpb25zICYgTkFORF9JU19BTkQpKQotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVU19NVUxUSSwgLTEsIC0xKTsKKwlpZiAoKHN0YXRlID09IEZMX0VSQVNJTkcpICYmIChjaGlwLT5vcHRpb25zICYgTkFORF9JU19BTkQpKQorCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTX01VTFRJLCAtMSwgLTEpOwogCWVsc2UKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7CisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7CiAKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW8pKSB7Ci0JCS8qIENoZWNrLCBpZiB3ZSB3ZXJlIGludGVycnVwdGVkICovCi0JCWlmICh0aGlzLT5zdGF0ZSAhPSBzdGF0ZSkKLQkJCXJldHVybiAwOwotCi0JCWlmICh0aGlzLT5kZXZfcmVhZHkpIHsKLQkJCWlmICh0aGlzLT5kZXZfcmVhZHkobXRkKSkKKwkJaWYgKGNoaXAtPmRldl9yZWFkeSkgeworCQkJaWYgKGNoaXAtPmRldl9yZWFkeShtdGQpKQogCQkJCWJyZWFrOwogCQl9IGVsc2UgewotCQkJaWYgKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpCisJCQlpZiAoY2hpcC0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkKIAkJCQlicmVhazsKIAkJfQogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJbGVkX3RyaWdnZXJfZXZlbnQobmFuZF9sZWRfdHJpZ2dlciwgTEVEX09GRik7CiAKLQlzdGF0dXMgPSAoaW50KSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKKwlzdGF0dXMgPSAoaW50KWNoaXAtPnJlYWRfYnl0ZShtdGQpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICogbmFuZF93cml0ZV9wYWdlIC0gW0dFTkVSSUNdIHdyaXRlIG9uZSBwYWdlCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRoaXM6CU5BTkQgY2hpcCBzdHJ1Y3R1cmUKLSAqIEBwYWdlOiAJc3RhcnRwYWdlIGluc2lkZSB0aGUgY2hpcCwgbXVzdCBiZSBjYWxsZWQgd2l0aCAocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKQotICogQG9vYl9idWY6CW91dCBvZiBiYW5kIGRhdGEgYnVmZmVyCi0gKiBAb29ic2VsOglvdXQgb2YgYmFuZCBzZWxlY3R0aW9uIHN0cnVjdHJlCi0gKiBAY2FjaGVkOgkxID0gZW5hYmxlIGNhY2hlZCBwcm9ncmFtbWluZyBpZiBzdXBwb3J0ZWQgYnkgY2hpcAotICoKLSAqIE5hbmRfcGFnZV9wcm9ncmFtIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHdyaXRlIGFuZCB3cml0ZXYgIQotICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyBwcm9ncmFtIGEgZnVsbCBwYWdlIG9mIGRhdGEKLSAqIElmIHlvdSBjYWxsIGl0IHdpdGggYSBub24gcGFnZSBhbGlnbmVkIGJ1ZmZlciwgeW91J3JlIGxvc3QgOikKLSAqCi0gKiBDYWNoZWQgcHJvZ3JhbW1pbmcgaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisgKiBuYW5kX3JlYWRfcGFnZV9yYXcgLSBbSW50ZXJuXSByZWFkIHJhdyBwYWdlIGRhdGEgd2l0aG91dCBlY2MKKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGVfcGFnZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBwYWdlLAotCXVfY2hhciAqb29iX2J1ZiwgIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGNhY2hlZCkKK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICAgICAgdWludDhfdCAqYnVmKQogewotCWludCAJaSwgc3RhdHVzOwotCXVfY2hhcgllY2NfY29kZVszMl07Ci0JaW50CWVjY21vZGUgPSBvb2JzZWwtPnVzZWVjYyA/IHRoaXMtPmVjY21vZGUgOiBOQU5EX0VDQ19OT05FOwotCWludCAgCSpvb2JfY29uZmlnID0gb29ic2VsLT5lY2Nwb3M7Ci0JaW50CWRhdGlkeCA9IDAsIGVjY2lkeCA9IDAsIGVjY3N0ZXBzID0gdGhpcy0+ZWNjc3RlcHM7Ci0JaW50CWVjY2J5dGVzID0gMDsKKwljaGlwLT5yZWFkX2J1ZihtdGQsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOworCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKKwlyZXR1cm4gMDsKK30KIAotCS8qIEZJWE1FOiBFbmFibGUgY2FjaGVkIHByb2dyYW1taW5nICovCi0JY2FjaGVkID0gMDsKKy8qKgorICogbmFuZF9yZWFkX3BhZ2Vfc3dlY2MgLSB7UkVQTEFDQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHBhZ2UgcmVhZCBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2Vfc3dlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy5lY2NjYWxjOworCXVpbnQ4X3QgKmVjY19jb2RlID0gY2hpcC0+YnVmZmVycy5lY2Njb2RlOworCWludCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOwogCi0JLyogU2VuZCBjb21tYW5kIHRvIGJlZ2luIGF1dG8gcGFnZSBwcm9ncmFtbWluZyAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU0VRSU4sIDB4MDAsIHBhZ2UpOworCW5hbmRfcmVhZF9wYWdlX3JhdyhtdGQsIGNoaXAsIGJ1Zik7CiAKLQkvKiBXcml0ZSBvdXQgY29tcGxldGUgcGFnZSBvZiBkYXRhLCB0YWtlIGNhcmUgb2YgZWNjbW9kZSAqLwotCXN3aXRjaCAoZWNjbW9kZSkgewotCS8qIE5vIGVjYywgd3JpdGUgYWxsICovCi0JY2FzZSBOQU5EX0VDQ19OT05FOgotCQlwcmludGsgKEtFUk5fV0FSTklORyAiV3JpdGluZyBkYXRhIHdpdGhvdXQgRUNDIHRvIE5BTkQtRkxBU0ggaXMgbm90IHJlY29tbWVuZGVkXG4iKTsKLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgdGhpcy0+ZGF0YV9wb2ksIG10ZC0+b29iYmxvY2spOwotCQlicmVhazsKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKQorCQljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVjY19jYWxjW2ldKTsKIAotCS8qIFNvZnR3YXJlIGVjYyAzLzI1Niwgd3JpdGUgYWxsICovCi0JY2FzZSBOQU5EX0VDQ19TT0ZUOgotCQlmb3IgKDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0pIHsKLQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MobXRkLCAmdGhpcy0+ZGF0YV9wb2lbZGF0aWR4XSwgZWNjX2NvZGUpOwotCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgZWNjaWR4KyspCi0JCQkJb29iX2J1Zltvb2JfY29uZmlnW2VjY2lkeF1dID0gZWNjX2NvZGVbaV07Ci0JCQlkYXRpZHggKz0gdGhpcy0+ZWNjc2l6ZTsKLQkJfQotCQl0aGlzLT53cml0ZV9idWYobXRkLCB0aGlzLT5kYXRhX3BvaSwgbXRkLT5vb2JibG9jayk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVjY2J5dGVzID0gdGhpcy0+ZWNjYnl0ZXM7Ci0JCWZvciAoOyBlY2NzdGVwczsgZWNjc3RlcHMtLSkgewotCQkJLyogZW5hYmxlIGhhcmR3YXJlIGVjYyBsb2dpYyBmb3Igd3JpdGUgKi8KLQkJCXRoaXMtPmVuYWJsZV9od2VjYyhtdGQsIE5BTkRfRUNDX1dSSVRFKTsKLQkJCXRoaXMtPndyaXRlX2J1ZihtdGQsICZ0aGlzLT5kYXRhX3BvaVtkYXRpZHhdLCB0aGlzLT5lY2NzaXplKTsKLQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MobXRkLCAmdGhpcy0+ZGF0YV9wb2lbZGF0aWR4XSwgZWNjX2NvZGUpOwotCQkJZm9yIChpID0gMDsgaSA8IGVjY2J5dGVzOyBpKyssIGVjY2lkeCsrKQotCQkJCW9vYl9idWZbb29iX2NvbmZpZ1tlY2NpZHhdXSA9IGVjY19jb2RlW2ldOwotCQkJLyogSWYgdGhlIGhhcmR3YXJlIGVjYyBwcm92aWRlcyBzeW5kcm9tZXMgdGhlbgotCQkJICogdGhlIGVjYyBjb2RlIG11c3QgYmUgd3JpdHRlbiBpbW1pZGlhdGVseSBhZnRlcgotCQkJICogdGhlIGRhdGEgYnl0ZXMgKHdvcmRzKSAqLwotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0hXRUNDX1NZTkRST01FKQotCQkJCXRoaXMtPndyaXRlX2J1ZihtdGQsIGVjY19jb2RlLCBlY2NieXRlcyk7Ci0JCQlkYXRpZHggKz0gdGhpcy0+ZWNjc2l6ZTsKLQkJfQotCQlicmVhazsKLQl9CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQllY2NfY29kZVtpXSA9IGNoaXAtPm9vYl9wb2lbZWNjcG9zW2ldXTsKIAotCS8qIFdyaXRlIG91dCBPT0IgZGF0YSAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9IV0VDQ19TWU5EUk9NRSkKLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgJm9vYl9idWZbb29ic2VsLT5lY2NieXRlc10sIG10ZC0+b29ic2l6ZSAtIG9vYnNlbC0+ZWNjYnl0ZXMpOwotCWVsc2UKLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgb29iX2J1ZiwgbXRkLT5vb2JzaXplKTsKKwllY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwlwID0gYnVmOwogCi0JLyogU2VuZCBjb21tYW5kIHRvIGFjdHVhbGx5IHByb2dyYW0gdGhlIGRhdGEgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIGNhY2hlZCA/IE5BTkRfQ01EX0NBQ0hFRFBST0cgOiBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKKwlmb3IgKGkgPSAwIDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQlpbnQgc3RhdDsKIAotCWlmICghY2FjaGVkKSB7Ci0JCS8qIGNhbGwgd2FpdCByZWFkeSBmdW5jdGlvbiAqLwotCQlzdGF0dXMgPSB0aGlzLT53YWl0ZnVuYyAobXRkLCB0aGlzLCBGTF9XUklUSU5HKTsKLQotCQkvKiBTZWUgaWYgb3BlcmF0aW9uIGZhaWxlZCBhbmQgYWRkaXRpb25hbCBzdGF0dXMgY2hlY2tzIGFyZSBhdmFpbGFibGUgKi8KLQkJaWYgKChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSAmJiAodGhpcy0+ZXJyc3RhdCkpIHsKLQkJCXN0YXR1cyA9IHRoaXMtPmVycnN0YXQobXRkLCB0aGlzLCBGTF9XUklUSU5HLCBzdGF0dXMsIHBhZ2UpOwotCQl9Ci0KLQkJLyogU2VlIGlmIGRldmljZSB0aGlua3MgaXQgc3VjY2VlZGVkICovCi0JCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSB7Ci0JCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiAiICJGYWlsZWQgd3JpdGUsIHBhZ2UgMHglMDh4LCAiLCBfX0ZVTkNUSU9OX18sIHBhZ2UpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBGSVhNRTogSW1wbGVtZW50IGNhY2hlZCBwcm9ncmFtbWluZyAhICovCi0JCS8qIHdhaXQgdW50aWwgY2FjaGUgaXMgcmVhZHkqLwotCQkvLyBzdGF0dXMgPSB0aGlzLT53YWl0ZnVuYyAobXRkLCB0aGlzLCBGTF9DQUNIRURSUEcpOworCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCAmZWNjX2NvZGVbaV0sICZlY2NfY2FsY1tpXSk7CisJCWlmIChzdGF0ID09IC0xKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0OwogCX0KIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUKIC8qKgotICogbmFuZF92ZXJpZnlfcGFnZXMgLSBbR0VORVJJQ10gdmVyaWZ5IHRoZSBjaGlwIGNvbnRlbnRzIGFmdGVyIGEgd3JpdGUKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAdGhpczoJTkFORCBjaGlwIHN0cnVjdHVyZQotICogQHBhZ2U6IAlzdGFydHBhZ2UgaW5zaWRlIHRoZSBjaGlwLCBtdXN0IGJlIGNhbGxlZCB3aXRoIChwYWdlICYgdGhpcy0+cGFnZW1hc2spCi0gKiBAbnVtcGFnZXM6CW51bWJlciBvZiBwYWdlcyB0byB2ZXJpZnkKLSAqIEBvb2JfYnVmOglvdXQgb2YgYmFuZCBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb3V0IG9mIGJhbmQgc2VsZWN0dGlvbiBzdHJ1Y3RyZQotICogQGNoaXBucjoJbnVtYmVyIG9mIHRoZSBjdXJyZW50IGNoaXAKLSAqIEBvb2Jtb2RlOgkxID0gZnVsbCBidWZmZXIgdmVyaWZ5LCAwID0gZWNjIG9ubHkKKyAqIG5hbmRfcmVhZF9wYWdlX2h3ZWNjIC0ge1JFUExBQ0FCTEVdIGhhcmR3YXJlIGVjYyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQogICoKLSAqIFRoZSBOQU5EIGRldmljZSBhc3N1bWVzIHRoYXQgaXQgaXMgYWx3YXlzIHdyaXRpbmcgdG8gYSBjbGVhbmx5IGVyYXNlZCBwYWdlLgotICogSGVuY2UsIGl0IHBlcmZvcm1zIGl0cyBpbnRlcm5hbCB3cml0ZSB2ZXJpZmljYXRpb24gb25seSBvbiBiaXRzIHRoYXQKLSAqIHRyYW5zaXRpb25lZCBmcm9tIDEgdG8gMC4gVGhlIGRldmljZSBkb2VzIE5PVCB2ZXJpZnkgdGhlIHdob2xlIHBhZ2Ugb24gYQotICogYnl0ZSBieSBieXRlIGJhc2lzLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBwYWdlIHdhcyBub3QgY29tcGxldGVseSBlcmFzZWQKLSAqIG9yIHRoZSBwYWdlIGlzIGJlY29taW5nIHVudXNhYmxlIGR1ZSB0byB3ZWFyLiBUaGUgcmVhZCB3aXRoIEVDQyB3b3VsZCBjYXRjaAotICogdGhlIGVycm9yIGxhdGVyIHdoZW4gdGhlIEVDQyBwYWdlIGNoZWNrIGZhaWxzLCBidXQgd2Ugd291bGQgcmF0aGVyIGNhdGNoCi0gKiBpdCBlYXJseSBpbiB0aGUgcGFnZSB3cml0ZSBzdGFnZS4gQmV0dGVyIHRvIHdyaXRlIG5vIGRhdGEgdGhhbiBpbnZhbGlkIGRhdGEuCisgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycyB3aGljaCBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KLXN0YXRpYyBpbnQgbmFuZF92ZXJpZnlfcGFnZXMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgcGFnZSwgaW50IG51bXBhZ2VzLAotCXVfY2hhciAqb29iX2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsLCBpbnQgY2hpcG5yLCBpbnQgb29ibW9kZSkKK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJdWludDhfdCAqYnVmKQogewotCWludCAJaSwgaiwgZGF0aWR4ID0gMCwgb29ib2ZzID0gMCwgcmVzID0gLUVJTzsKLQlpbnQJZWNjc3RlcHMgPSB0aGlzLT5lY2NzdGVwczsKLQlpbnQJaHdlY2NieXRlczsKLQl1X2NoYXIgCW9vYmRhdGFbNjRdOworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy5lY2NjYWxjOworCXVpbnQ4X3QgKmVjY19jb2RlID0gY2hpcC0+YnVmZmVycy5lY2Njb2RlOworCWludCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOwogCi0JaHdlY2NieXRlcyA9ICh0aGlzLT5vcHRpb25zICYgTkFORF9IV0VDQ19TWU5EUk9NRSkgPyAob29ic2VsLT5lY2NieXRlcyAvIGVjY3N0ZXBzKSA6IDA7CisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19SRUFEKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBwLCBlY2NzaXplKTsKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZlY2NfY2FsY1tpXSk7CisJfQorCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKIAotCS8qIFNlbmQgY29tbWFuZCB0byByZWFkIGJhY2sgdGhlIGZpcnN0IHBhZ2UgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnRvdGFsOyBpKyspCisJCWVjY19jb2RlW2ldID0gY2hpcC0+b29iX3BvaVtlY2Nwb3NbaV1dOwogCi0JZm9yKDs7KSB7Ci0JCWZvciAoaiA9IDA7IGogPCBlY2NzdGVwczsgaisrKSB7Ci0JCQkvKiBMb29wIHRocm91Z2ggYW5kIHZlcmlmeSB0aGUgZGF0YSAqLwotCQkJaWYgKHRoaXMtPnZlcmlmeV9idWYobXRkLCAmdGhpcy0+ZGF0YV9wb2lbZGF0aWR4XSwgbXRkLT5lY2NzaXplKSkgewotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAiJXM6ICIgIkZhaWxlZCB3cml0ZSB2ZXJpZnksIHBhZ2UgMHglMDh4ICIsIF9fRlVOQ1RJT05fXywgcGFnZSk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlkYXRpZHggKz0gbXRkLT5lY2NzaXplOwotCQkJLyogSGF2ZSB3ZSBhIGh3IGdlbmVyYXRvciBsYXlvdXQgPyAqLwotCQkJaWYgKCFod2VjY2J5dGVzKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHRoaXMtPnZlcmlmeV9idWYobXRkLCAmdGhpcy0+b29iX2J1Zltvb2JvZnNdLCBod2VjY2J5dGVzKSkgewotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAiJXM6ICIgIkZhaWxlZCB3cml0ZSB2ZXJpZnksIHBhZ2UgMHglMDh4ICIsIF9fRlVOQ1RJT05fXywgcGFnZSk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlvb2JvZnMgKz0gaHdlY2NieXRlczsKKwllY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwlwID0gYnVmOworCisJZm9yIChpID0gMCA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJaW50IHN0YXQ7CisKKwkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCAmZWNjX2NhbGNbaV0pOworCQlpZiAoc3RhdCA9PSAtMSkKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQllbHNlCisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWUgLSB7UkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIHN5bmRyb20gYmFzZWQgcGFnZSByZWFkCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqCisgKiBUaGUgaHcgZ2VuZXJhdG9yIGNhbGN1bGF0ZXMgdGhlIGVycm9yIHN5bmRyb21lIGF1dG9tYXRpY2FsbHkuIFRoZXJlZm9yCisgKiB3ZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZy4KKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9zeW5kcm9tZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQkgICB1aW50OF90ICpidWYpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKnAgPSBidWY7CisJdWludDhfdCAqb29iID0gY2hpcC0+b29iX3BvaTsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJaW50IHN0YXQ7CisKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfUkVBRCk7CisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisKKwkJaWYgKGNoaXAtPmVjYy5wcmVwYWQpIHsKKwkJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBjaGlwLT5lY2MucHJlcGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucHJlcGFkOwogCQl9CiAKLQkJLyogY2hlY2ssIGlmIHdlIG11c3QgY29tcGFyZSBhbGwgZGF0YSBvciBpZiB3ZSBqdXN0IGhhdmUgdG8KLQkJICogY29tcGFyZSB0aGUgZWNjIGJ5dGVzCi0JCSAqLwotCQlpZiAob29ibW9kZSkgewotCQkJaWYgKHRoaXMtPnZlcmlmeV9idWYobXRkLCAmb29iX2J1Zltvb2JvZnNdLCBtdGQtPm9vYnNpemUgLSBod2VjY2J5dGVzICogZWNjc3RlcHMpKSB7Ci0JCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICIlczogIiAiRmFpbGVkIHdyaXRlIHZlcmlmeSwgcGFnZSAweCUwOHggIiwgX19GVU5DVElPTl9fLCBwYWdlKTsKLQkJCQlnb3RvIG91dDsKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfUkVBRFNZTik7CisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBlY2NieXRlcyk7CisJCXN0YXQgPSBjaGlwLT5lY2MuY29ycmVjdChtdGQsIHAsIG9vYiwgTlVMTCk7CisKKwkJaWYgKHN0YXQgPT0gLTEpCisJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJZWxzZQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7CisKKwkJb29iICs9IGVjY2J5dGVzOworCisJCWlmIChjaGlwLT5lY2MucG9zdHBhZCkgeworCQkJY2hpcC0+cmVhZF9idWYobXRkLCBvb2IsIGNoaXAtPmVjYy5wb3N0cGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucG9zdHBhZDsKKwkJfQorCX0KKworCS8qIENhbGN1bGF0ZSByZW1haW5pbmcgb29iIGJ5dGVzICovCisJaSA9IG10ZC0+b29ic2l6ZSAtIChvb2IgLSBjaGlwLT5vb2JfcG9pKTsKKwlpZiAoaSkKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBvb2IsIGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmFuZF90cmFuc2Zlcl9vb2IgLSBbSW50ZXJuYWxdIFRyYW5zZmVyIG9vYiB0byBjbGllbnQgYnVmZmVyCisgKiBAY2hpcDoJbmFuZCBjaGlwIHN0cnVjdHVyZQorICogQG9wczoJb29iIG9wcyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHVpbnQ4X3QgKm5hbmRfdHJhbnNmZXJfb29iKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3QgKm9vYiwKKwkJCQkgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCXNpemVfdCBsZW4gPSBvcHMtPm9vYmxlbjsKKworCXN3aXRjaChvcHMtPm1vZGUpIHsKKworCWNhc2UgTVREX09PQl9QTEFDRToKKwljYXNlIE1URF9PT0JfUkFXOgorCQltZW1jcHkob29iLCBjaGlwLT5vb2JfcG9pICsgb3BzLT5vb2JvZmZzLCBsZW4pOworCQlyZXR1cm4gb29iICsgbGVuOworCisJY2FzZSBNVERfT09CX0FVVE86IHsKKwkJc3RydWN0IG5hbmRfb29iZnJlZSAqZnJlZSA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmZyZWU7CisJCXVpbnQzMl90IGJvZmZzID0gMCwgcm9mZnMgPSBvcHMtPm9vYm9mZnM7CisJCXNpemVfdCBieXRlcyA9IDA7CisKKwkJZm9yKDsgZnJlZS0+bGVuZ3RoICYmIGxlbjsgZnJlZSsrLCBsZW4gLT0gYnl0ZXMpIHsKKwkJCS8qIFJlYWQgcmVxdWVzdCBub3QgZnJvbSBvZmZzZXQgMCA/ICovCisJCQlpZiAodW5saWtlbHkocm9mZnMpKSB7CisJCQkJaWYgKHJvZmZzID49IGZyZWUtPmxlbmd0aCkgeworCQkJCQlyb2ZmcyAtPSBmcmVlLT5sZW5ndGg7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlib2ZmcyA9IGZyZWUtPm9mZnNldCArIHJvZmZzOworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sCisJCQkJCSAgICAgIChmcmVlLT5sZW5ndGggLSByb2ZmcykpOworCQkJCXJvZmZzID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJYnl0ZXMgPSBtaW5fdChzaXplX3QsIGxlbiwgZnJlZS0+bGVuZ3RoKTsKKwkJCQlib2ZmcyA9IGZyZWUtPm9mZnNldDsKKwkJCX0KKwkJCW1lbWNweShvb2IsIGNoaXAtPm9vYl9wb2kgKyBib2ZmcywgYnl0ZXMpOworCQkJb29iICs9IGJ5dGVzOworCQl9CisJCXJldHVybiBvb2I7CisJfQorCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBuYW5kX2RvX3JlYWRfb3BzIC0gW0ludGVybmFsXSBSZWFkIGRhdGEgd2l0aCBFQ0MKKyAqCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KKyAqCisgKiBJbnRlcm5hbCBmdW5jdGlvbi4gQ2FsbGVkIHdpdGggY2hpcCBoZWxkLgorICovCitzdGF0aWMgaW50IG5hbmRfZG9fcmVhZF9vcHMoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCWludCBjaGlwbnIsIHBhZ2UsIHJlYWxwYWdlLCBjb2wsIGJ5dGVzLCBhbGlnbmVkOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG10ZF9lY2Nfc3RhdHMgc3RhdHM7CisJaW50IGJsa2NoZWNrID0gKDEgPDwgKGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgLSBjaGlwLT5wYWdlX3NoaWZ0KSkgLSAxOworCWludCBzbmRjbWQgPSAxOworCWludCByZXQgPSAwOworCXVpbnQzMl90IHJlYWRsZW4gPSBvcHMtPmxlbjsKKwl1aW50OF90ICpidWZwb2ksICpvb2IsICpidWY7CisKKwlzdGF0cyA9IG10ZC0+ZWNjX3N0YXRzOworCisJY2hpcG5yID0gKGludCkoZnJvbSA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisKKwlyZWFscGFnZSA9IChpbnQpKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CisKKwljb2wgPSAoaW50KShmcm9tICYgKG10ZC0+d3JpdGVzaXplIC0gMSkpOworCWNoaXAtPm9vYl9wb2kgPSBjaGlwLT5idWZmZXJzLm9vYnJidWY7CisKKwlidWYgPSBvcHMtPmRhdGJ1ZjsKKwlvb2IgPSBvcHMtPm9vYmJ1ZjsKKworCXdoaWxlKDEpIHsKKwkJYnl0ZXMgPSBtaW4obXRkLT53cml0ZXNpemUgLSBjb2wsIHJlYWRsZW4pOworCQlhbGlnbmVkID0gKGJ5dGVzID09IG10ZC0+d3JpdGVzaXplKTsKKworCQkvKiBJcyB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBidWZmZXIgPyAqLworCQlpZiAocmVhbHBhZ2UgIT0gY2hpcC0+cGFnZWJ1ZiB8fCBvb2IpIHsKKwkJCWJ1ZnBvaSA9IGFsaWduZWQgPyBidWYgOiBjaGlwLT5idWZmZXJzLmRhdGFidWY7CisKKwkJCWlmIChsaWtlbHkoc25kY21kKSkgeworCQkJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFEMCwgMHgwMCwgcGFnZSk7CisJCQkJc25kY21kID0gMDsKKwkJCX0KKworCQkJLyogTm93IHJlYWQgdGhlIHBhZ2UgaW50byB0aGUgYnVmZmVyICovCisJCQlyZXQgPSBjaGlwLT5lY2MucmVhZF9wYWdlKG10ZCwgY2hpcCwgYnVmcG9pKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCisJCQkvKiBUcmFuc2ZlciBub3QgYWxpZ25lZCBkYXRhICovCisJCQlpZiAoIWFsaWduZWQpIHsKKwkJCQljaGlwLT5wYWdlYnVmID0gcmVhbHBhZ2U7CisJCQkJbWVtY3B5KGJ1ZiwgY2hpcC0+YnVmZmVycy5kYXRhYnVmICsgY29sLCBieXRlcyk7CisJCQl9CisKKwkJCWJ1ZiArPSBieXRlczsKKworCQkJaWYgKHVubGlrZWx5KG9vYikpIHsKKwkJCQkvKiBSYXcgbW9kZSBkb2VzIGRhdGE6b29iOmRhdGE6b29iICovCisJCQkJaWYgKG9wcy0+bW9kZSAhPSBNVERfT09CX1JBVykKKwkJCQkJb29iID0gbmFuZF90cmFuc2Zlcl9vb2IoY2hpcCwgb29iLCBvcHMpOworCQkJCWVsc2UKKwkJCQkJYnVmID0gbmFuZF90cmFuc2Zlcl9vb2IoY2hpcCwgYnVmLCBvcHMpOworCQkJfQorCisJCQlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9OT19SRUFEUkRZKSkgeworCQkJCS8qCisJCQkJICogQXBwbHkgZGVsYXkgb3Igd2FpdCBmb3IgcmVhZHkvYnVzeSBwaW4uIERvCisJCQkJICogdGhpcyBiZWZvcmUgdGhlIEFVVE9JTkNSIGNoZWNrLCBzbyBubworCQkJCSAqIHByb2JsZW1zIGFyaXNlIGlmIGEgY2hpcCB3aGljaCBkb2VzIGF1dG8KKwkJCQkgKiBpbmNyZW1lbnQgaXMgbWFya2VkIGFzIE5PQVVUT0lOQ1IgYnkgdGhlCisJCQkJICogYm9hcmQgZHJpdmVyLgorCQkJCSAqLworCQkJCWlmICghY2hpcC0+ZGV2X3JlYWR5KQorCQkJCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CisJCQkJZWxzZQorCQkJCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCS8qIFJlYWQgYWx3YXlzLCBlbHNlIGF1dG9pbmNyZW1lbnQgZmFpbHMgKi8KLQkJCXRoaXMtPnJlYWRfYnVmKG10ZCwgb29iZGF0YSwgbXRkLT5vb2JzaXplIC0gaHdlY2NieXRlcyAqIGVjY3N0ZXBzKTsKLQotCQkJaWYgKG9vYnNlbC0+dXNlZWNjICE9IE1URF9OQU5ERUNDX09GRiAmJiAhaHdlY2NieXRlcykgewotCQkJCWludCBlY2NjbnQgPSBvb2JzZWwtPmVjY2J5dGVzOwotCi0JCQkJZm9yIChpID0gMDsgaSA8IGVjY2NudDsgaSsrKSB7Ci0JCQkJCWludCBpZHggPSBvb2JzZWwtPmVjY3Bvc1tpXTsKLQkJCQkJaWYgKG9vYmRhdGFbaWR4XSAhPSBvb2JfYnVmW29vYm9mcyArIGlkeF0gKSB7Ci0JCQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwKLQkJCQkJICAgICAgIAkiJXM6IEZhaWxlZCBFQ0Mgd3JpdGUgIgotCQkJCQkJInZlcmlmeSwgcGFnZSAweCUwOHgsICIgIiU2aSBieXRlcyB3ZXJlIHN1Y2Nlc2Z1bFxuIiwgX19GVU5DVElPTl9fLCBwYWdlLCBpKTsKLQkJCQkJCWdvdG8gb3V0OwotCQkJCQl9Ci0JCQkJfQotCQkJfQorCQkJbWVtY3B5KGJ1ZiwgY2hpcC0+YnVmZmVycy5kYXRhYnVmICsgY29sLCBieXRlcyk7CisJCQlidWYgKz0gYnl0ZXM7CiAJCX0KLQkJb29ib2ZzICs9IG10ZC0+b29ic2l6ZSAtIGh3ZWNjYnl0ZXMgKiBlY2NzdGVwczsKLQkJcGFnZSsrOwotCQludW1wYWdlcy0tOwogCi0JCS8qIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluCi0JCSAqIERvIHRoaXMgYmVmb3JlIHRoZSBBVVRPSU5DUiBjaGVjaywgc28gbm8gcHJvYmxlbXMKLQkJICogYXJpc2UgaWYgYSBjaGlwIHdoaWNoIGRvZXMgYXV0byBpbmNyZW1lbnQKLQkJICogaXMgbWFya2VkIGFzIE5PQVVUT0lOQ1IgYnkgdGhlIGJvYXJkIGRyaXZlci4KLQkJICogRG8gdGhpcyBhbHNvIGJlZm9yZSByZXR1cm5pbmcsIHNvIHRoZSBjaGlwIGlzCi0JCSAqIHJlYWR5IGZvciB0aGUgbmV4dCBjb21tYW5kLgotCQkqLwotCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkKLQkJCXVkZWxheSAodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCWVsc2UKLQkJCW5hbmRfd2FpdF9yZWFkeShtdGQpOworCQlyZWFkbGVuIC09IGJ5dGVzOwogCi0JCS8qIEFsbCBkb25lLCByZXR1cm4gaGFwcHkgKi8KLQkJaWYgKCFudW1wYWdlcykKLQkJCXJldHVybiAwOworCQlpZiAoIXJlYWRsZW4pCisJCQlicmVhazsKIAorCQkvKiBGb3Igc3Vic2VxdWVudCByZWFkcyBhbGlnbiB0byBwYWdlIGJvdW5kYXJ5LiAqLworCQljb2wgPSAwOworCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzICovCisJCXJlYWxwYWdlKys7CiAKLQkJLyogQ2hlY2ssIGlmIHRoZSBjaGlwIHN1cHBvcnRzIGF1dG8gcGFnZSBpbmNyZW1lbnQgKi8KLQkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKHRoaXMpKQotCQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFEMCwgMHgwMCwgcGFnZSk7CisJCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOworCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCisJCWlmICghcGFnZSkgeworCQkJY2hpcG5yKys7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJfQorCisJCS8qIENoZWNrLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBhdXRvIHBhZ2UgaW5jcmVtZW50CisJCSAqIG9yIGlmIHdlIGhhdmUgaGl0IGEgYmxvY2sgYm91bmRhcnkuCisJCSAqLworCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IoY2hpcCkgfHwgIShwYWdlICYgYmxrY2hlY2spKQorCQkJc25kY21kID0gMTsKIAl9Ci0JLyoKLQkgKiBUZXJtaW5hdGUgdGhlIHJlYWQgY29tbWFuZC4gV2UgY29tZSBoZXJlIGluIGNhc2Ugb2YgYW4gZXJyb3IKLQkgKiBTbyB3ZSBtdXN0IGlzc3VlIGEgcmVzZXQgY29tbWFuZC4KLQkgKi8KLW91dDoKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOwotCXJldHVybiByZXM7CisKKwlvcHMtPnJldGxlbiA9IG9wcy0+bGVuIC0gKHNpemVfdCkgcmVhZGxlbjsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobXRkLT5lY2Nfc3RhdHMuZmFpbGVkIC0gc3RhdHMuZmFpbGVkKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwlyZXR1cm4gIG10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCAtIHN0YXRzLmNvcnJlY3RlZCA/IC1FVUNMRUFOIDogMDsKIH0KLSNlbmRpZgogCiAvKioKICAqIG5hbmRfcmVhZCAtIFtNVEQgSW50ZXJmYWNlXSBNVEQgY29tcGFiaWxpdHkgZnVuY3Rpb24gZm9yIG5hbmRfZG9fcmVhZF9lY2MKQEAgLTEwNzIsOTc0ICsxMDcxLDc0MSBAQAogICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKICAqIEBidWY6CXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCiAgKgotICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgbmFuZF9kb19yZWFkX2VjYyB3aXRoIG9vYiBidWZmZXIgYW5kIG9vYnNlbCA9IE5VTEwKLSAqIGFuZCBmbGFncyA9IDB4ZmYKKyAqIEdldCBob2xkIG9mIHRoZSBjaGlwIGFuZCBjYWxsIG5hbmRfZG9fcmVhZAogICovCi1zdGF0aWMgaW50IG5hbmRfcmVhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZikKK3N0YXRpYyBpbnQgbmFuZF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJICAgICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmKQogewotCXJldHVybiBuYW5kX2RvX3JlYWRfZWNjIChtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYsIE5VTEwsICZtdGQtPm9vYmluZm8sIDB4ZmYpOwotfQotCi0KLS8qKgotICogbmFuZF9yZWFkX2VjYyAtIFtNVEQgSW50ZXJmYWNlXSBNVEQgY29tcGFiaWxpdHkgZnVuY3Rpb24gZm9yIG5hbmRfZG9fcmVhZF9lY2MKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAZnJvbToJb2Zmc2V0IHRvIHJlYWQgZnJvbQotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCi0gKiBAYnVmOgl0aGUgZGF0YWJ1ZmZlciB0byBwdXQgZGF0YQotICogQG9vYl9idWY6CWZpbGVzeXN0ZW0gc3VwcGxpZWQgb29iIGRhdGEgYnVmZmVyCi0gKiBAb29ic2VsOglvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG5hbmRfZG9fcmVhZF9lY2Mgd2l0aCBmbGFncyA9IDB4ZmYKLSAqLwotc3RhdGljIGludCBuYW5kX3JlYWRfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQkgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBvb2JfYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0JLyogdXNlIHVzZXJzcGFjZSBzdXBwbGllZCBvb2JpbmZvLCBpZiB6ZXJvICovCi0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCXJldHVybiBuYW5kX2RvX3JlYWRfZWNjKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1Ziwgb29iX2J1Ziwgb29ic2VsLCAweGZmKTsKLX0KLQotCi0vKioKLSAqIG5hbmRfZG9fcmVhZF9lY2MgLSBbTVREIEludGVyZmFjZV0gUmVhZCBkYXRhIHdpdGggRUNDCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKLSAqIEBvb2JfYnVmOglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlciAoY2FuIGJlIE5VTEwpCi0gKiBAb29ic2VsOglvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQotICogQGZsYWdzOglmbGFnIHRvIGluZGljYXRlIGlmIG5hbmRfZ2V0X2RldmljZS9uYW5kX3JlbGVhc2VfZGV2aWNlIHNob3VsZCBiZSBwcmVmb3JtZWQKLSAqCQlhbmQgaG93IG1hbnkgY29ycmVjdGVkIGVycm9yIGJpdHMgYXJlIGFjY2VwdGFibGU6Ci0gKgkJICBiaXRzIDAuLjcgLSBudW1iZXIgb2YgdG9sZXJhYmxlIGVycm9ycwotICoJCSAgYml0ICA4ICAgIC0gMCA9PSBkbyBub3QgZ2V0L3JlbGVhc2UgY2hpcCwgMSA9PSBnZXQvcmVsZWFzZSBjaGlwCi0gKgotICogTkFORCByZWFkIHdpdGggRUNDCi0gKi8KLWludCBuYW5kX2RvX3JlYWRfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQkgICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBvb2JfYnVmLAotCQkJICAgICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBmbGFncykKLXsKLQotCWludCBpLCBqLCBjb2wsIHJlYWxwYWdlLCBwYWdlLCBlbmQsIGVjYywgY2hpcG5yLCBzbmRjbWQgPSAxOwotCWludCByZWFkID0gMCwgb29iID0gMCwgZWNjX3N0YXR1cyA9IDAsIGVjY19mYWlsZWQgPSAwOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JdV9jaGFyICpkYXRhX3BvaSwgKm9vYl9kYXRhID0gb29iX2J1ZjsKLQl1X2NoYXIgZWNjX2NhbGNbMzJdOwotCXVfY2hhciBlY2NfY29kZVszMl07Ci0gICAgICAgIGludCBlY2Ntb2RlLCBlY2NzdGVwczsKLQlpbnQJKm9vYl9jb25maWcsIGRhdGlkeDsKLQlpbnQJYmxvY2tjaGVjayA9ICgxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpIC0gMTsKLQlpbnQJZWNjYnl0ZXM7Ci0JaW50CWNvbXBhcmVlY2MgPSAxOwotCWludAlvb2JyZWFkbGVuOwotCi0KLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfcmVhZF9lY2M6IGZyb20gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCAoaW50KSBsZW4pOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldDsKIAogCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX2VjYzogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKLQkJKnJldGxlbiA9IDA7CisJaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWlmICghbGVuKQorCQlyZXR1cm4gMDsKIAotCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCWlmIChmbGFncyAmIE5BTkRfR0VUX0RFVklDRSkKLQkJbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1JFQURJTkcpOworCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1JFQURJTkcpOwogCi0JLyogQXV0b3BsYWNlIG9mIG9vYiBkYXRhID8gVXNlIHRoZSBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUgKi8KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFKQotCQlvb2JzZWwgPSB0aGlzLT5hdXRvb29iOworCWNoaXAtPm9wcy5sZW4gPSBsZW47CisJY2hpcC0+b3BzLmRhdGJ1ZiA9IGJ1ZjsKKwljaGlwLT5vcHMub29iYnVmID0gTlVMTDsKIAotCWVjY21vZGUgPSBvb2JzZWwtPnVzZWVjYyA/IHRoaXMtPmVjY21vZGUgOiBOQU5EX0VDQ19OT05FOwotCW9vYl9jb25maWcgPSBvb2JzZWwtPmVjY3BvczsKKwlyZXQgPSBuYW5kX2RvX3JlYWRfb3BzKG10ZCwgZnJvbSwgJmNoaXAtPm9wcyk7CiAKLQkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JY2hpcG5yID0gKGludCkoZnJvbSA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCi0JLyogRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBzdGFydGluZyBwYWdlICovCi0JcmVhbHBhZ2UgPSAoaW50KSAoZnJvbSA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQlwYWdlID0gcmVhbHBhZ2UgJiB0aGlzLT5wYWdlbWFzazsKLQotCS8qIEdldCByYXcgc3RhcnRpbmcgY29sdW1uICovCi0JY29sID0gZnJvbSAmIChtdGQtPm9vYmJsb2NrIC0gMSk7Ci0KLQllbmQgPSBtdGQtPm9vYmJsb2NrOwotCWVjYyA9IHRoaXMtPmVjY3NpemU7Ci0JZWNjYnl0ZXMgPSB0aGlzLT5lY2NieXRlczsKLQotCWlmICgoZWNjbW9kZSA9PSBOQU5EX0VDQ19OT05FKSB8fCAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSFdFQ0NfU1lORFJPTUUpKQotCQljb21wYXJlZWNjID0gMDsKLQotCW9vYnJlYWRsZW4gPSBtdGQtPm9vYnNpemU7Ci0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0hXRUNDX1NZTkRST01FKQotCQlvb2JyZWFkbGVuIC09IG9vYnNlbC0+ZWNjYnl0ZXM7Ci0KLQkvKiBMb29wIHVudGlsIGFsbCBkYXRhIHJlYWQgKi8KLQl3aGlsZSAocmVhZCA8IGxlbikgewotCi0JCWludCBhbGlnbmVkID0gKCFjb2wgJiYgKGxlbiAtIHJlYWQpID49IGVuZCk7Ci0JCS8qCi0JCSAqIElmIHRoZSByZWFkIGlzIG5vdCBwYWdlIGFsaWduZWQsIHdlIGhhdmUgdG8gcmVhZCBpbnRvIGRhdGEgYnVmZmVyCi0JCSAqIGR1ZSB0byBlY2MsIGVsc2Ugd2UgcmVhZCBpbnRvIHJldHVybiBidWZmZXIgZGlyZWN0Ci0JCSAqLwotCQlpZiAoYWxpZ25lZCkKLQkJCWRhdGFfcG9pID0gJmJ1ZltyZWFkXTsKLQkJZWxzZQotCQkJZGF0YV9wb2kgPSB0aGlzLT5kYXRhX2J1ZjsKLQotCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0aGlzIHBhZ2UgaW4gdGhlIGJ1ZmZlcgotCQkgKgotCQkgKiBGSVhNRTogTWFrZSBpdCB3b3JrIHdoZW4gd2UgbXVzdCBwcm92aWRlIG9vYiBkYXRhIHRvbywKLQkJICogY2hlY2sgdGhlIHVzYWdlIG9mIGRhdGFfYnVmIG9vYiBmaWVsZAotCQkgKi8KLQkJaWYgKHJlYWxwYWdlID09IHRoaXMtPnBhZ2VidWYgJiYgIW9vYl9idWYpIHsKLQkJCS8qIGFsaWduZWQgcmVhZCA/ICovCi0JCQlpZiAoYWxpZ25lZCkKLQkJCQltZW1jcHkgKGRhdGFfcG9pLCB0aGlzLT5kYXRhX2J1ZiwgZW5kKTsKLQkJCWdvdG8gcmVhZGRhdGE7Ci0JCX0KLQotCQkvKiBDaGVjaywgaWYgd2UgbXVzdCBzZW5kIHRoZSByZWFkIGNvbW1hbmQgKi8KLQkJaWYgKHNuZGNtZCkgewotCQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFEMCwgMHgwMCwgcGFnZSk7Ci0JCQlzbmRjbWQgPSAwOwotCQl9Ci0KLQkJLyogZ2V0IG9vYiBhcmVhLCBpZiB3ZSBoYXZlIG5vIG9vYiBidWZmZXIgZnJvbSBmcy1kcml2ZXIgKi8KLQkJaWYgKCFvb2JfYnVmIHx8IG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSB8fAotCQkJb29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMX1VTUikKLQkJCW9vYl9kYXRhID0gJnRoaXMtPmRhdGFfYnVmW2VuZF07Ci0KLQkJZWNjc3RlcHMgPSB0aGlzLT5lY2NzdGVwczsKLQotCQlzd2l0Y2ggKGVjY21vZGUpIHsKLQkJY2FzZSBOQU5EX0VDQ19OT05FOiB7CS8qIE5vIEVDQywgUmVhZCBpbiBhIHBhZ2UgKi8KLQkJCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3R3aGluZ2UgPSAwOwotCQkJaWYgKChsYXN0d2hpbmdlIC8gSFopICE9IChqaWZmaWVzIC8gSFopKSB7Ci0JCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIlJlYWRpbmcgZGF0YSBmcm9tIE5BTkQgRkxBU0ggd2l0aG91dCBFQ0MgaXMgbm90IHJlY29tbWVuZGVkXG4iKTsKLQkJCQlsYXN0d2hpbmdlID0gamlmZmllczsKLQkJCX0KLQkJCXRoaXMtPnJlYWRfYnVmKG10ZCwgZGF0YV9wb2ksIGVuZCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWNhc2UgTkFORF9FQ0NfU09GVDoJLyogU29mdHdhcmUgRUNDIDMvMjU2OiBSZWFkIGluIGEgcGFnZSArIG9vYiBkYXRhICovCi0JCQl0aGlzLT5yZWFkX2J1ZihtdGQsIGRhdGFfcG9pLCBlbmQpOwotCQkJZm9yIChpID0gMCwgZGF0aWR4ID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkrPTMsIGRhdGlkeCArPSBlY2MpCi0JCQkJdGhpcy0+Y2FsY3VsYXRlX2VjYyhtdGQsICZkYXRhX3BvaVtkYXRpZHhdLCAmZWNjX2NhbGNbaV0pOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWZvciAoaSA9IDAsIGRhdGlkeCA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpKz1lY2NieXRlcywgZGF0aWR4ICs9IGVjYykgewotCQkJCXRoaXMtPmVuYWJsZV9od2VjYyhtdGQsIE5BTkRfRUNDX1JFQUQpOwotCQkJCXRoaXMtPnJlYWRfYnVmKG10ZCwgJmRhdGFfcG9pW2RhdGlkeF0sIGVjYyk7Ci0KLQkJCQkvKiBIVyBlY2Mgd2l0aCBzeW5kcm9tZSBjYWxjdWxhdGlvbiBtdXN0IHJlYWQgdGhlCi0JCQkJICogc3luZHJvbWUgZnJvbSBmbGFzaCBpbW1pZGlhdGVseSBhZnRlciB0aGUgZGF0YSAqLwotCQkJCWlmICghY29tcGFyZWVjYykgewotCQkJCQkvKiBTb21lIGh3IGVjYyBnZW5lcmF0b3JzIG5lZWQgdG8ga25vdyB3aGVuIHRoZQotCQkJCQkgKiBzeW5kcm9tZSBpcyByZWFkIGZyb20gZmxhc2ggKi8KLQkJCQkJdGhpcy0+ZW5hYmxlX2h3ZWNjKG10ZCwgTkFORF9FQ0NfUkVBRFNZTik7Ci0JCQkJCXRoaXMtPnJlYWRfYnVmKG10ZCwgJm9vYl9kYXRhW2ldLCBlY2NieXRlcyk7Ci0JCQkJCS8qIFdlIGNhbGMgZXJyb3IgY29ycmVjdGlvbiBkaXJlY3RseSwgaXQgY2hlY2tzIHRoZSBodwotCQkJCQkgKiBnZW5lcmF0b3IgZm9yIGFuIGVycm9yLCByZWFkcyBiYWNrIHRoZSBzeW5kcm9tZSBhbmQKLQkJCQkJICogZG9lcyB0aGUgZXJyb3IgY29ycmVjdGlvbiBvbiB0aGUgZmx5ICovCi0JCQkJCWVjY19zdGF0dXMgPSB0aGlzLT5jb3JyZWN0X2RhdGEobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgJm9vYl9kYXRhW2ldLCAmZWNjX2NvZGVbaV0pOwotCQkJCQlpZiAoKGVjY19zdGF0dXMgPT0gLTEpIHx8IChlY2Nfc3RhdHVzID4gKGZsYWdzICYmIDB4ZmYpKSkgewotCQkJCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3JlYWRfZWNjOiAiCi0JCQkJCQkJIkZhaWxlZCBFQ0MgcmVhZCwgcGFnZSAweCUwOHggb24gY2hpcCAlZFxuIiwgcGFnZSwgY2hpcG5yKTsKLQkJCQkJCWVjY19mYWlsZWQrKzsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgJmVjY19jYWxjW2ldKTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHJlYWQgb29iZGF0YSAqLwotCQl0aGlzLT5yZWFkX2J1ZihtdGQsICZvb2JfZGF0YVttdGQtPm9vYnNpemUgLSBvb2JyZWFkbGVuXSwgb29icmVhZGxlbik7Ci0KLQkJLyogU2tpcCBFQ0MgY2hlY2ssIGlmIG5vdCByZXF1ZXN0ZWQgKEVDQ19OT05FIG9yIEhXX0VDQyB3aXRoIHN5bmRyb21lcykgKi8KLQkJaWYgKCFjb21wYXJlZWNjKQotCQkJZ290byByZWFkb29iOwotCi0JCS8qIFBpY2sgdGhlIEVDQyBieXRlcyBvdXQgb2YgdGhlIG9vYiBkYXRhICovCi0JCWZvciAoaiA9IDA7IGogPCBvb2JzZWwtPmVjY2J5dGVzOyBqKyspCi0JCQllY2NfY29kZVtqXSA9IG9vYl9kYXRhW29vYl9jb25maWdbal1dOwotCi0JCS8qIGNvcnJlY3QgZGF0YSwgaWYgbmVjY2VjYXJ5ICovCi0JCWZvciAoaSA9IDAsIGogPSAwLCBkYXRpZHggPSAwOyBpIDwgdGhpcy0+ZWNjc3RlcHM7IGkrKywgZGF0aWR4ICs9IGVjYykgewotCQkJZWNjX3N0YXR1cyA9IHRoaXMtPmNvcnJlY3RfZGF0YShtdGQsICZkYXRhX3BvaVtkYXRpZHhdLCAmZWNjX2NvZGVbal0sICZlY2NfY2FsY1tqXSk7Ci0KLQkJCS8qIEdldCBuZXh0IGNodW5rIG9mIGVjYyBieXRlcyAqLwotCQkJaiArPSBlY2NieXRlczsKLQotCQkJLyogQ2hlY2ssIGlmIHdlIGhhdmUgYSBmcyBzdXBwbGllZCBvb2ItYnVmZmVyLAotCQkJICogVGhpcyBpcyB0aGUgbGVnYWN5IG1vZGUuIFVzZWQgYnkgWUFGRlMxCi0JCQkgKiBTaG91bGQgZ28gYXdheSBzb21lIGRheQotCQkJICovCi0JCQlpZiAob29iX2J1ZiAmJiBvb2JzZWwtPnVzZWVjYyA9PSBNVERfTkFOREVDQ19QTEFDRSkgewotCQkJCWludCAqcCA9IChpbnQgKikoJm9vYl9kYXRhW210ZC0+b29ic2l6ZV0pOwotCQkJCXBbaV0gPSBlY2Nfc3RhdHVzOwotCQkJfQotCi0JCQlpZiAoKGVjY19zdGF0dXMgPT0gLTEpIHx8IChlY2Nfc3RhdHVzID4gKGZsYWdzICYmIDB4ZmYpKSkgewotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX2VjYzogIiAiRmFpbGVkIEVDQyByZWFkLCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7Ci0JCQkJZWNjX2ZhaWxlZCsrOwotCQkJfQotCQl9Ci0KLQlyZWFkb29iOgotCQkvKiBjaGVjaywgaWYgd2UgaGF2ZSBhIGZzIHN1cHBsaWVkIG9vYi1idWZmZXIgKi8KLQkJaWYgKG9vYl9idWYpIHsKLQkJCS8qIHdpdGhvdXQgYXV0b3BsYWNlLiBMZWdhY3kgbW9kZSB1c2VkIGJ5IFlBRkZTMSAqLwotCQkJc3dpdGNoKG9vYnNlbC0+dXNlZWNjKSB7Ci0JCQljYXNlIE1URF9OQU5ERUNDX0FVVE9QTEFDRToKLQkJCWNhc2UgTVREX05BTkRFQ0NfQVVUT1BMX1VTUjoKLQkJCQkvKiBXYWxrIHRocm91Z2ggdGhlIGF1dG9wbGFjZSBjaHVua3MgKi8KLQkJCQlmb3IgKGkgPSAwOyBvb2JzZWwtPm9vYmZyZWVbaV1bMV07IGkrKykgewotCQkJCQlpbnQgZnJvbSA9IG9vYnNlbC0+b29iZnJlZVtpXVswXTsKLQkJCQkJaW50IG51bSA9IG9vYnNlbC0+b29iZnJlZVtpXVsxXTsKLQkJCQkJbWVtY3B5KCZvb2JfYnVmW29vYl0sICZvb2JfZGF0YVtmcm9tXSwgbnVtKTsKLQkJCQkJb29iICs9IG51bTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1URF9OQU5ERUNDX1BMQUNFOgotCQkJCS8qIFlBRkZTMSBsZWdhY3kgbW9kZSAqLwotCQkJCW9vYl9kYXRhICs9IHRoaXMtPmVjY3N0ZXBzICogc2l6ZW9mIChpbnQpOwotCQkJZGVmYXVsdDoKLQkJCQlvb2JfZGF0YSArPSBtdGQtPm9vYnNpemU7Ci0JCQl9Ci0JCX0KLQlyZWFkZGF0YToKLQkJLyogUGFydGlhbCBwYWdlIHJlYWQsIHRyYW5zZmVyIGRhdGEgaW50byBmcyBidWZmZXIgKi8KLQkJaWYgKCFhbGlnbmVkKSB7Ci0JCQlmb3IgKGogPSBjb2w7IGogPCBlbmQgJiYgcmVhZCA8IGxlbjsgaisrKQotCQkJCWJ1ZltyZWFkKytdID0gZGF0YV9wb2lbal07Ci0JCQl0aGlzLT5wYWdlYnVmID0gcmVhbHBhZ2U7Ci0JCX0gZWxzZQotCQkJcmVhZCArPSBtdGQtPm9vYmJsb2NrOwotCi0JCS8qIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluCi0JCSAqIERvIHRoaXMgYmVmb3JlIHRoZSBBVVRPSU5DUiBjaGVjaywgc28gbm8gcHJvYmxlbXMKLQkJICogYXJpc2UgaWYgYSBjaGlwIHdoaWNoIGRvZXMgYXV0byBpbmNyZW1lbnQKLQkJICogaXMgbWFya2VkIGFzIE5PQVVUT0lOQ1IgYnkgdGhlIGJvYXJkIGRyaXZlci4KLQkJKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOwotCQllbHNlCi0JCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKLQotCQlpZiAocmVhZCA9PSBsZW4pCi0JCQlicmVhazsKLQotCQkvKiBGb3Igc3Vic2VxdWVudCByZWFkcyBhbGlnbiB0byBwYWdlIGJvdW5kYXJ5LiAqLwotCQljb2wgPSAwOwotCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzICovCi0JCXJlYWxwYWdlKys7Ci0KLQkJcGFnZSA9IHJlYWxwYWdlICYgdGhpcy0+cGFnZW1hc2s7Ci0JCS8qIENoZWNrLCBpZiB3ZSBjcm9zcyBhIGNoaXAgYm91bmRhcnkgKi8KLQkJaWYgKCFwYWdlKSB7Ci0JCQljaGlwbnIrKzsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwotCQl9Ci0JCS8qIENoZWNrLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBhdXRvIHBhZ2UgaW5jcmVtZW50Ci0JCSAqIG9yIGlmIHdlIGhhdmUgaGl0IGEgYmxvY2sgYm91bmRhcnkuCi0JCSovCi0JCWlmICghTkFORF9DQU5BVVRPSU5DUih0aGlzKSB8fCAhKHBhZ2UgJiBibG9ja2NoZWNrKSkKLQkJCXNuZGNtZCA9IDE7Ci0JfQotCi0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwotCWlmIChmbGFncyAmIE5BTkRfR0VUX0RFVklDRSkKLQkJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwotCi0JLyoKLQkgKiBSZXR1cm4gc3VjY2VzcywgaWYgbm8gRUNDIGZhaWx1cmVzLCBlbHNlIC1FQkFETVNHCi0JICogZnMgZHJpdmVyIHdpbGwgdGFrZSBjYXJlIG9mIHRoYXQsIGJlY2F1c2UKLQkgKiByZXRsZW4gPT0gZGVzaXJlZCBsZW4gYW5kIHJlc3VsdCA9PSAtRUJBRE1TRwotCSAqLwotCSpyZXRsZW4gPSByZWFkOwotCXJldHVybiBlY2NfZmFpbGVkID8gLUVCQURNU0cgOiAwOworCSpyZXRsZW4gPSBjaGlwLT5vcHMucmV0bGVuOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgotICogbmFuZF9yZWFkX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHJlYWQgb3V0LW9mLWJhbmQKKyAqIG5hbmRfcmVhZF9vb2Jfc3RkIC0gW1JFUExBQ0FCTEVdIHRoZSBtb3N0IGNvbW1vbiBPT0IgZGF0YSByZWFkIGZ1bmN0aW9uCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCisgKiBAc25kY21kOglmbGFnIHdoZXRoZXIgdG8gaXNzdWUgcmVhZCBjb21tYW5kIG9yIG5vdAorICovCitzdGF0aWMgaW50IG5hbmRfcmVhZF9vb2Jfc3RkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICAgICBpbnQgcGFnZSwgaW50IHNuZGNtZCkKK3sKKwlpZiAoc25kY21kKSB7CisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCAwLCBwYWdlKTsKKwkJc25kY21kID0gMDsKKwl9CisJY2hpcC0+cmVhZF9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCXJldHVybiBzbmRjbWQ7Cit9CisKKy8qKgorICogbmFuZF9yZWFkX29vYl9zeW5kcm9tZSAtIFtSRVBMQUNBQkxFXSBPT0IgZGF0YSByZWFkIGZ1bmN0aW9uIGZvciBIVyBFQ0MKKyAqCQkJICAgIHdpdGggc3luZHJvbWVzCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCisgKiBAc25kY21kOglmbGFnIHdoZXRoZXIgdG8gaXNzdWUgcmVhZCBjb21tYW5kIG9yIG5vdAorICovCitzdGF0aWMgaW50IG5hbmRfcmVhZF9vb2Jfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICBpbnQgcGFnZSwgaW50IHNuZGNtZCkKK3sKKwl1aW50OF90ICpidWYgPSBjaGlwLT5vb2JfcG9pOworCWludCBsZW5ndGggPSBtdGQtPm9vYnNpemU7CisJaW50IGNodW5rID0gY2hpcC0+ZWNjLmJ5dGVzICsgY2hpcC0+ZWNjLnByZXBhZCArIGNoaXAtPmVjYy5wb3N0cGFkOworCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJdWludDhfdCAqYnVmcG9pID0gYnVmOworCWludCBpLCB0b3JlYWQsIHNuZHJuZCA9IDAsIHBvczsKKworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFEMCwgY2hpcC0+ZWNjLnNpemUsIHBhZ2UpOworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5lY2Muc3RlcHM7IGkrKykgeworCQlpZiAoc25kcm5kKSB7CisJCQlwb3MgPSBlY2NzaXplICsgaSAqIChlY2NzaXplICsgY2h1bmspOworCQkJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyKQorCQkJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9STkRPVVQsIHBvcywgLTEpOworCQkJZWxzZQorCQkJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFEMCwgcG9zLCBwYWdlKTsKKwkJfSBlbHNlCisJCQlzbmRybmQgPSAxOworCQl0b3JlYWQgPSBtaW5fdChpbnQsIGxlbmd0aCwgY2h1bmspOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIGJ1ZnBvaSwgdG9yZWFkKTsKKwkJYnVmcG9pICs9IHRvcmVhZDsKKwkJbGVuZ3RoIC09IHRvcmVhZDsKKwl9CisJaWYgKGxlbmd0aCA+IDApCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgYnVmcG9pLCBsZW5ndGgpOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogbmFuZF93cml0ZV9vb2Jfc3RkIC0gW1JFUExBQ0FCTEVdIHRoZSBtb3N0IGNvbW1vbiBPT0IgZGF0YSB3cml0ZSBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gd3JpdGUKKyAqLworc3RhdGljIGludCBuYW5kX3dyaXRlX29vYl9zdGQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkgICAgICBpbnQgcGFnZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwljb25zdCB1aW50OF90ICpidWYgPSBjaGlwLT5vb2JfcG9pOworCWludCBsZW5ndGggPSBtdGQtPm9vYnNpemU7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU0VRSU4sIG10ZC0+d3JpdGVzaXplLCBwYWdlKTsKKwljaGlwLT53cml0ZV9idWYobXRkLCBidWYsIGxlbmd0aCk7CisJLyogU2VuZCBjb21tYW5kIHRvIHByb2dyYW0gdGhlIE9PQiBkYXRhICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLCAtMSwgLTEpOworCisJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogbmFuZF93cml0ZV9vb2Jfc3luZHJvbWUgLSBbUkVQTEFDQUJMRV0gT09CIGRhdGEgd3JpdGUgZnVuY3Rpb24gZm9yIEhXIEVDQworICoJCQkgICAgIHdpdGggc3luZHJvbWUgLSBvbmx5IGZvciBsYXJnZSBwYWdlIGZsYXNoICEKKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHdyaXRlCisgKi8KK3N0YXRpYyBpbnQgbmFuZF93cml0ZV9vb2Jfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCit7CisJaW50IGNodW5rID0gY2hpcC0+ZWNjLmJ5dGVzICsgY2hpcC0+ZWNjLnByZXBhZCArIGNoaXAtPmVjYy5wb3N0cGFkOworCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemUsIGxlbmd0aCA9IG10ZC0+b29ic2l6ZTsKKwlpbnQgaSwgbGVuLCBwb3MsIHN0YXR1cyA9IDAsIHNuZGNtZCA9IDAsIHN0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCWNvbnN0IHVpbnQ4X3QgKmJ1ZnBvaSA9IGNoaXAtPm9vYl9wb2k7CisKKwkvKgorCSAqIGRhdGEtZWNjLWRhdGEtZWNjIC4uLiBlY2Mtb29iCisJICogb3IKKwkgKiBkYXRhLXBhZC1lY2MtcGFkLWRhdGEtcGFkIC4uLi4gZWNjLXBhZC1vb2IKKwkgKi8KKwlpZiAoIWNoaXAtPmVjYy5wcmVwYWQgJiYgIWNoaXAtPmVjYy5wb3N0cGFkKSB7CisJCXBvcyA9IHN0ZXBzICogKGVjY3NpemUgKyBjaHVuayk7CisJCXN0ZXBzID0gMDsKKwl9IGVsc2UKKwkJcG9zID0gZWNjc2l6ZSArIGNodW5rOworCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NFUUlOLCBwb3MsIHBhZ2UpOworCWZvciAoaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CisJCWlmIChzbmRjbWQpIHsKKwkJCWlmIChtdGQtPndyaXRlc2l6ZSA8PSA1MTIpIHsKKwkJCQl1aW50MzJfdCBmaWxsID0gMHhGRkZGRkZGRjsKKworCQkJCWxlbiA9IGVjY3NpemU7CisJCQkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCQkJaW50IG51bSA9IG1pbl90KGludCwgbGVuLCA0KTsKKwkJCQkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgKHVpbnQ4X3QgKikmZmlsbCwKKwkJCQkJCQludW0pOworCQkJCQlsZW4gLT0gbnVtOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcG9zID0gZWNjc2l6ZSArIGkgKiAoZWNjc2l6ZSArIGNodW5rKTsKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUk5ESU4sIHBvcywgLTEpOworCQkJfQorCQl9IGVsc2UKKwkJCXNuZGNtZCA9IDE7CisJCWxlbiA9IG1pbl90KGludCwgbGVuZ3RoLCBjaHVuayk7CisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuKTsKKwkJYnVmcG9pICs9IGxlbjsKKwkJbGVuZ3RoIC09IGxlbjsKKwl9CisJaWYgKGxlbmd0aCA+IDApCisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuZ3RoKTsKKworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKKwlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOworCisJcmV0dXJuIHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwgPyAtRUlPIDogMDsKK30KKworLyoqCisgKiBuYW5kX2RvX3JlYWRfb29iIC0gW0ludGVybl0gTkFORCByZWFkIG91dC1vZi1iYW5kCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKKyAqIEBvcHM6CW9vYiBvcGVyYXRpb25zIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQogICoKICAqIE5BTkQgcmVhZCBvdXQtb2YtYmFuZCBkYXRhIGZyb20gdGhlIHNwYXJlIGFyZWEKICAqLwotc3RhdGljIGludCBuYW5kX3JlYWRfb29iIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQorc3RhdGljIGludCBuYW5kX2RvX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLQlpbnQgaSwgY29sLCBwYWdlLCBjaGlwbnI7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQJYmxvY2tjaGVjayA9ICgxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpIC0gMTsKKwlpbnQgcGFnZSwgcmVhbHBhZ2UsIGNoaXBuciwgc25kY21kID0gMTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCBibGtjaGVjayA9ICgxIDw8IChjaGlwLT5waHlzX2VyYXNlX3NoaWZ0IC0gY2hpcC0+cGFnZV9zaGlmdCkpIC0gMTsKKwlpbnQgcmVhZGxlbiA9IG9wcy0+bGVuOworCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+b29iYnVmOwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3JlYWRfb29iOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAibmFuZF9yZWFkX29vYjogZnJvbSA9IDB4JTA4THgsIGxlbiA9ICVpXG4iLAorCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZnJvbSwgcmVhZGxlbik7CisKKwljaGlwbnIgPSAoaW50KShmcm9tID4+IGNoaXAtPmNoaXBfc2hpZnQpOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKIAogCS8qIFNoaWZ0IHRvIGdldCBwYWdlICovCi0JcGFnZSA9IChpbnQpKGZyb20gPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JY2hpcG5yID0gKGludCkoZnJvbSA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKKwlyZWFscGFnZSA9IChpbnQpKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CiAKLQkvKiBNYXNrIHRvIGdldCBjb2x1bW4gKi8KLQljb2wgPSBmcm9tICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCWNoaXAtPm9vYl9wb2kgPSBjaGlwLT5idWZmZXJzLm9vYnJidWY7CiAKLQkvKiBJbml0aWFsaXplIHJldHVybiBsZW5ndGggdmFsdWUgKi8KLQkqcmV0bGVuID0gMDsKKwl3aGlsZSgxKSB7CisJCXNuZGNtZCA9IGNoaXAtPmVjYy5yZWFkX29vYihtdGQsIGNoaXAsIHBhZ2UsIHNuZGNtZCk7CisJCWJ1ZiA9IG5hbmRfdHJhbnNmZXJfb29iKGNoaXAsIGJ1Ziwgb3BzKTsKIAotCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX29vYjogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKLQkJKnJldGxlbiA9IDA7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwkJcmVhZGxlbiAtPSBvcHMtPm9vYmxlbjsKKwkJaWYgKCFyZWFkbGVuKQorCQkJYnJlYWs7CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCAsIEZMX1JFQURJTkcpOwotCi0JLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKLQotCS8qIFNlbmQgdGhlIHJlYWQgY29tbWFuZCAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgY29sLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCS8qCi0JICogUmVhZCB0aGUgZGF0YSwgaWYgd2UgcmVhZCBtb3JlIHRoYW4gb25lIHBhZ2UKLQkgKiBvb2IgZGF0YSwgbGV0IHRoZSBkZXZpY2UgdHJhbnNmZXIgdGhlIGRhdGEgIQotCSAqLwotCWkgPSAwOwotCXdoaWxlIChpIDwgbGVuKSB7Ci0JCWludCB0aGlzbGVuID0gbXRkLT5vb2JzaXplIC0gY29sOwotCQl0aGlzbGVuID0gbWluX3QoaW50LCB0aGlzbGVuLCBsZW4pOwotCQl0aGlzLT5yZWFkX2J1ZihtdGQsICZidWZbaV0sIHRoaXNsZW4pOwotCQlpICs9IHRoaXNsZW47Ci0KLQkJLyogUmVhZCBtb3JlID8gKi8KLQkJaWYgKGkgPCBsZW4pIHsKLQkJCXBhZ2UrKzsKLQkJCWNvbCA9IDA7Ci0KLQkJCS8qIENoZWNrLCBpZiB3ZSBjcm9zcyBhIGNoaXAgYm91bmRhcnkgKi8KLQkJCWlmICghKHBhZ2UgJiB0aGlzLT5wYWdlbWFzaykpIHsKLQkJCQljaGlwbnIrKzsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0JCQl9Ci0KLQkJCS8qIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluCi0JCQkgKiBEbyB0aGlzIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zCi0JCQkgKiBhcmlzZSBpZiBhIGNoaXAgd2hpY2ggZG9lcyBhdXRvIGluY3JlbWVudAotCQkJICogaXMgbWFya2VkIGFzIE5PQVVUT0lOQ1IgYnkgdGhlIGJvYXJkIGRyaXZlci4KKwkJaWYgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfTk9fUkVBRFJEWSkpIHsKKwkJCS8qCisJCQkgKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbi4gRG8gdGhpcworCQkJICogYmVmb3JlIHRoZSBBVVRPSU5DUiBjaGVjaywgc28gbm8gcHJvYmxlbXMgYXJpc2UgaWYgYQorCQkJICogY2hpcCB3aGljaCBkb2VzIGF1dG8gaW5jcmVtZW50IGlzIG1hcmtlZCBhcworCQkJICogTk9BVVRPSU5DUiBieSB0aGUgYm9hcmQgZHJpdmVyLgogCQkJICovCi0JCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkKLQkJCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOworCQkJaWYgKCFjaGlwLT5kZXZfcmVhZHkpCisJCQkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOwogCQkJZWxzZQogCQkJCW5hbmRfd2FpdF9yZWFkeShtdGQpOwotCi0JCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudAotCQkJICogb3IgaWYgd2UgaGF2ZSBoaXQgYSBibG9jayBib3VuZGFyeS4KLQkJCSovCi0JCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IodGhpcykgfHwgIShwYWdlICYgYmxvY2tjaGVjaykpIHsKLQkJCQkvKiBGb3Igc3Vic2VxdWVudCBwYWdlIHJlYWRzIHNldCBvZmZzZXQgdG8gMCAqLwotCQkJICAgICAgICB0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIDB4MCwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkJCX0KIAkJfQotCX0KIAotCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CisJCS8qIEluY3JlbWVudCBwYWdlIGFkZHJlc3MgKi8KKwkJcmVhbHBhZ2UrKzsKIAotCS8qIFJldHVybiBoYXBweSAqLwotCSpyZXRsZW4gPSBsZW47Ci0JcmV0dXJuIDA7Ci19CisJCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOworCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCisJCWlmICghcGFnZSkgeworCQkJY2hpcG5yKys7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJfQogCi0vKioKLSAqIG5hbmRfcmVhZF9yYXcgLSBbR0VORVJJQ10gUmVhZCByYXcgZGF0YSBpbmNsdWRpbmcgb29iIGludG8gYnVmZmVyCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGJ1ZjoJdGVtcG9yYXJ5IGJ1ZmZlcgotICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAb29ibGVuOgludW1iZXIgb2Ygb29iIGRhdGEgYnl0ZXMgdG8gcmVhZAotICoKLSAqIFJlYWQgcmF3IGRhdGEgaW5jbHVkaW5nIG9vYiBpbnRvIGJ1ZmZlcgotICovCi1pbnQgbmFuZF9yZWFkX3JhdyAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCBvb2JsZW4pCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgcGFnZSA9IChpbnQpIChmcm9tID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWludCBjaGlwID0gKGludCkgKGZyb20gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JaW50IHNuZGNtZCA9IDE7Ci0JaW50IGNudCA9IDA7Ci0JaW50IHBhZ2VzaXplID0gbXRkLT5vb2JibG9jayArIG10ZC0+b29ic2l6ZTsKLQlpbnQJYmxvY2tjaGVjayA9ICgxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpIC0gMTsKLQotCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX3JhdzogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQgLCBGTF9SRUFESU5HKTsKLQotCXRoaXMtPnNlbGVjdF9jaGlwIChtdGQsIGNoaXApOwotCi0JLyogQWRkIHJlcXVlc3RlZCBvb2IgbGVuZ3RoICovCi0JbGVuICs9IG9vYmxlbjsKLQotCXdoaWxlIChsZW4pIHsKLQkJaWYgKHNuZGNtZCkKLQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCXNuZGNtZCA9IDA7Ci0KLQkJdGhpcy0+cmVhZF9idWYgKG10ZCwgJmJ1ZltjbnRdLCBwYWdlc2l6ZSk7Ci0KLQkJbGVuIC09IHBhZ2VzaXplOwotCQljbnQgKz0gcGFnZXNpemU7Ci0JCXBhZ2UrKzsKLQotCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkKLQkJCXVkZWxheSAodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCWVsc2UKLQkJCW5hbmRfd2FpdF9yZWFkeShtdGQpOwotCi0JCS8qIENoZWNrLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBhdXRvIHBhZ2UgaW5jcmVtZW50ICovCi0JCWlmICghTkFORF9DQU5BVVRPSU5DUih0aGlzKSB8fCAhKHBhZ2UgJiBibG9ja2NoZWNrKSkKKwkJLyogQ2hlY2ssIGlmIHRoZSBjaGlwIHN1cHBvcnRzIGF1dG8gcGFnZSBpbmNyZW1lbnQKKwkJICogb3IgaWYgd2UgaGF2ZSBoaXQgYSBibG9jayBib3VuZGFyeS4KKwkJICovCisJCWlmICghTkFORF9DQU5BVVRPSU5DUihjaGlwKSB8fCAhKHBhZ2UgJiBibGtjaGVjaykpCiAJCQlzbmRjbWQgPSAxOwogCX0KIAotCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CisJb3BzLT5yZXRsZW4gPSBvcHMtPmxlbjsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKioKLSAqIG5hbmRfcHJlcGFyZV9vb2JidWYgLSBbR0VORVJJQ10gUHJlcGFyZSB0aGUgb3V0IG9mIGJhbmQgYnVmZmVyCisgKiBuYW5kX3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgcmVhZCBkYXRhIGFuZC9vciBvdXQtb2YtYmFuZAogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBmc2J1ZjoJYnVmZmVyIGdpdmVuIGJ5IGZzIGRyaXZlcgotICogQG9vYnNlbDoJb3V0IG9mIGJhbmQgc2VsZWN0aW9uIHN0cnVjdHJlCi0gKiBAYXV0b3BsYWNlOgkxID0gcGxhY2UgZ2l2ZW4gYnVmZmVyIGludG8gdGhlIG9vYiBieXRlcwotICogQG51bXBhZ2VzOgludW1iZXIgb2YgcGFnZXMgdG8gcHJlcGFyZQorICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KKyAqIEBvcHM6CW9vYiBvcGVyYXRpb24gZGVzY3JpcHRpb24gc3RydWN0dXJlCiAgKgotICogUmV0dXJuOgotICogMS4gRmlsZXN5c3RlbSBidWZmZXIgYXZhaWxhYmxlIGFuZCBhdXRvcGxhY2VtZW50IGlzIG9mZiwKLSAqICAgIHJldHVybiBmaWxlc3lzdGVtIGJ1ZmZlcgotICogMi4gTm8gZmlsZXN5c3RlbSBidWZmZXIgb3IgYXV0b3BsYWNlIGlzIG9mZiwgcmV0dXJuIGludGVybmFsCi0gKiAgICBidWZmZXIKLSAqIDMuIEZpbGVzeXN0ZW0gYnVmZmVyIGlzIGdpdmVuIGFuZCBhdXRvcGxhY2Ugc2VsZWN0ZWQKLSAqICAgIHB1dCBkYXRhIGZyb20gZnMgYnVmZmVyIGludG8gaW50ZXJuYWwgYnVmZmVyIGFuZAotICogICAgcmV0cnVuIGludGVybmFsIGJ1ZmZlcgotICoKLSAqIE5vdGU6IFRoZSBpbnRlcm5hbCBidWZmZXIgaXMgZmlsbGVkIHdpdGggMHhmZi4gVGhpcyBtdXN0Ci0gKiBiZSBkb25lIG9ubHkgb25jZSwgd2hlbiBubyBhdXRvcGxhY2VtZW50IGhhcHBlbnMKLSAqIEF1dG9wbGFjZW1lbnQgc2V0cyB0aGUgYnVmZmVyIGRpcnR5IGZsYWcsIHdoaWNoCi0gKiBmb3JjZXMgdGhlIDB4ZmYgZmlsbCBiZWZvcmUgdXNpbmcgdGhlIGJ1ZmZlciBhZ2Fpbi4KLSAqCi0qLwotc3RhdGljIHVfY2hhciAqIG5hbmRfcHJlcGFyZV9vb2JidWYgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmZzYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsCi0JCWludCBhdXRvcGxhY2UsIGludCBudW1wYWdlcykKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCWludCBpLCBsZW4sIG9mczsKLQotCS8qIFplcm8gY29weSBmcyBzdXBwbGllZCBidWZmZXIgKi8KLQlpZiAoZnNidWYgJiYgIWF1dG9wbGFjZSkKLQkJcmV0dXJuIGZzYnVmOwotCi0JLyogQ2hlY2ssIGlmIHRoZSBidWZmZXIgbXVzdCBiZSBmaWxsZWQgd2l0aCBmZiBhZ2FpbiAqLwotCWlmICh0aGlzLT5vb2JkaXJ0eSkgewotCQltZW1zZXQgKHRoaXMtPm9vYl9idWYsIDB4ZmYsCi0JCQltdGQtPm9vYnNpemUgPDwgKHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KSk7Ci0JCXRoaXMtPm9vYmRpcnR5ID0gMDsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIG5vIGF1dG9wbGFjZW1lbnQgb3Igbm8gZnMgYnVmZmVyIHVzZSB0aGUgaW50ZXJuYWwgb25lICovCi0JaWYgKCFhdXRvcGxhY2UgfHwgIWZzYnVmKQotCQlyZXR1cm4gdGhpcy0+b29iX2J1ZjsKLQotCS8qIFdhbGsgdGhyb3VnaCB0aGUgcGFnZXMgYW5kIHBsYWNlIHRoZSBkYXRhICovCi0JdGhpcy0+b29iZGlydHkgPSAxOwotCW9mcyA9IDA7Ci0Jd2hpbGUgKG51bXBhZ2VzLS0pIHsKLQkJZm9yIChpID0gMCwgbGVuID0gMDsgbGVuIDwgbXRkLT5vb2JhdmFpbDsgaSsrKSB7Ci0JCQlpbnQgdG8gPSBvZnMgKyBvb2JzZWwtPm9vYmZyZWVbaV1bMF07Ci0JCQlpbnQgbnVtID0gb29ic2VsLT5vb2JmcmVlW2ldWzFdOwotCQkJbWVtY3B5ICgmdGhpcy0+b29iX2J1Zlt0b10sIGZzYnVmLCBudW0pOwotCQkJbGVuICs9IG51bTsKLQkJCWZzYnVmICs9IG51bTsKLQkJfQotCQlvZnMgKz0gbXRkLT5vb2JhdmFpbDsKLQl9Ci0JcmV0dXJuIHRoaXMtPm9vYl9idWY7Ci19Ci0KLSNkZWZpbmUgTk9UQUxJR05FRCh4KSAoeCAmIChtdGQtPm9vYmJsb2NrLTEpKSAhPSAwCi0KLS8qKgotICogbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSBjb21wYWJpbGl0eSBmdW5jdGlvbiBmb3IgbmFuZF93cml0ZV9lY2MKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byB3cml0ZQotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKLSAqIEBidWY6CXRoZSBkYXRhIHRvIHdyaXRlCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgbmFuZF93cml0ZV9lY2Mgd2l0aCBvb2IgYnVmZmVyIGFuZCBvb2JzZWwgPSBOVUxMCi0gKgotKi8KLXN0YXRpYyBpbnQgbmFuZF93cml0ZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpCi17Ci0JcmV0dXJuIChuYW5kX3dyaXRlX2VjYyAobXRkLCB0bywgbGVuLCByZXRsZW4sIGJ1ZiwgTlVMTCwgTlVMTCkpOwotfQotCi0vKioKLSAqIG5hbmRfd3JpdGVfZWNjIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgd3JpdGUgd2l0aCBFQ0MKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byB3cml0ZQotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKLSAqIEBidWY6CXRoZSBkYXRhIHRvIHdyaXRlCi0gKiBAZWNjYnVmOglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBOQU5EIHJlYWQgZGF0YSBhbmQvb3Igb3V0LW9mLWJhbmQgZGF0YQogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGVfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJICAgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYsIHVfY2hhciAqIGVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIGludCBuYW5kX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLQlpbnQgc3RhcnRwYWdlLCBwYWdlLCByZXQgPSAtRUlPLCBvb2IgPSAwLCB3cml0dGVuID0gMCwgY2hpcG5yOwotCWludCBhdXRvcGxhY2UgPSAwLCBudW1wYWdlcywgdG90YWxwYWdlczsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVfY2hhciAqb29iYnVmLCAqYnVmc3RhcnQ7Ci0JaW50CXBwYmxvY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKKwlpbnQgKCpyZWFkX3BhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJIHVpbnQ4X3QgKmJ1ZikgPSBOVUxMOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldCA9IC1FTk9UU1VQUDsKIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF93cml0ZV9lY2M6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CisJb3BzLT5yZXRsZW4gPSAwOwogCi0JLyogSW5pdGlhbGl6ZSByZXRsZW4sIGluIGNhc2Ugb2YgZWFybHkgZXhpdCAqLwotCSpyZXRsZW4gPSAwOwotCi0JLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZSAqLwotCWlmICgodG8gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgcGFnZVxuIik7CisJLyogRG8gbm90IGFsbG93IHJlYWRzIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICgoZnJvbSArIG9wcy0+bGVuKSA+IG10ZC0+c2l6ZSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX29vYjogIgorCQkgICAgICAiQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogcmVqZWN0IHdyaXRlcywgd2hpY2ggYXJlIG5vdCBwYWdlIGFsaWduZWQgKi8KLQlpZiAoTk9UQUxJR05FRCAodG8pIHx8IE5PVEFMSUdORUQobGVuKSkgewotCQlwcmludGsgKEtFUk5fTk9USUNFICJuYW5kX3dyaXRlX2VjYzogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfUkVBRElORyk7CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfV1JJVElORyk7CisJc3dpdGNoKG9wcy0+bW9kZSkgeworCWNhc2UgTVREX09PQl9QTEFDRToKKwljYXNlIE1URF9PT0JfQVVUTzoKKwkJYnJlYWs7CiAKLQkvKiBDYWxjdWxhdGUgY2hpcG5yICovCi0JY2hpcG5yID0gKGludCkodG8gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwljYXNlIE1URF9PT0JfUkFXOgorCQkvKiBSZXBsYWNlIHRoZSByZWFkX3BhZ2UgYWxnb3JpdGhtIHRlbXBvcmFyeSAqLworCQlyZWFkX3BhZ2UgPSBjaGlwLT5lY2MucmVhZF9wYWdlOworCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQlicmVhazsKIAotCS8qIENoZWNrLCBpZiBpdCBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KLQlpZiAobmFuZF9jaGVja193cChtdGQpKQorCWRlZmF1bHQ6CiAJCWdvdG8gb3V0OwotCi0JLyogaWYgb29ic2VsIGlzIE5VTEwsIHVzZSBjaGlwIGRlZmF1bHRzICovCi0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCi0JLyogQXV0b3BsYWNlIG9mIG9vYiBkYXRhID8gVXNlIHRoZSBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUgKi8KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFKSB7Ci0JCW9vYnNlbCA9IHRoaXMtPmF1dG9vb2I7Ci0JCWF1dG9wbGFjZSA9IDE7CiAJfQotCWlmIChvb2JzZWwtPnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExfVVNSKQotCQlhdXRvcGxhY2UgPSAxOwogCi0JLyogU2V0dXAgdmFyaWFibGVzIGFuZCBvb2IgYnVmZmVyICovCi0JdG90YWxwYWdlcyA9IGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0OwotCXBhZ2UgPSAoaW50KSAodG8gPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgaWYgd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCi0JaWYgKHBhZ2UgPD0gdGhpcy0+cGFnZWJ1ZiAmJiB0aGlzLT5wYWdlYnVmIDwgKHBhZ2UgKyB0b3RhbHBhZ2VzKSkKLQkJdGhpcy0+cGFnZWJ1ZiA9IC0xOwotCi0JLyogU2V0IGl0IHJlbGF0aXZlIHRvIGNoaXAgKi8KLQlwYWdlICY9IHRoaXMtPnBhZ2VtYXNrOwotCXN0YXJ0cGFnZSA9IHBhZ2U7Ci0JLyogQ2FsYyBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHdyaXRlIGluIG9uZSBnbyAqLwotCW51bXBhZ2VzID0gbWluIChwcGJsb2NrIC0gKHN0YXJ0cGFnZSAgJiAocHBibG9jayAtIDEpKSwgdG90YWxwYWdlcyk7Ci0Jb29iYnVmID0gbmFuZF9wcmVwYXJlX29vYmJ1ZiAobXRkLCBlY2NidWYsIG9vYnNlbCwgYXV0b3BsYWNlLCBudW1wYWdlcyk7Ci0JYnVmc3RhcnQgPSAodV9jaGFyICopYnVmOwotCi0JLyogTG9vcCB1bnRpbCBhbGwgZGF0YSBpcyB3cml0dGVuICovCi0Jd2hpbGUgKHdyaXR0ZW4gPCBsZW4pIHsKLQotCQl0aGlzLT5kYXRhX3BvaSA9ICh1X2NoYXIqKSAmYnVmW3dyaXR0ZW5dOwotCQkvKiBXcml0ZSBvbmUgcGFnZS4gSWYgdGhpcyBpcyB0aGUgbGFzdCBwYWdlIHRvIHdyaXRlCi0JCSAqIG9yIHRoZSBsYXN0IHBhZ2UgaW4gdGhpcyBibG9jaywgdGhlbiB1c2UgdGhlCi0JCSAqIHJlYWwgcGFnZXByb2dyYW0gY29tbWFuZCwgZWxzZSBzZWxlY3QgY2FjaGVkIHByb2dyYW1taW5nCi0JCSAqIGlmIHN1cHBvcnRlZCBieSB0aGUgY2hpcC4KLQkJICovCi0JCXJldCA9IG5hbmRfd3JpdGVfcGFnZSAobXRkLCB0aGlzLCBwYWdlLCAmb29iYnVmW29vYl0sIG9vYnNlbCwgKC0tbnVtcGFnZXMgPiAwKSk7Ci0JCWlmIChyZXQpIHsKLQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9lY2M6IHdyaXRlX3BhZ2UgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJLyogTmV4dCBvb2IgcGFnZSAqLwotCQlvb2IgKz0gbXRkLT5vb2JzaXplOwotCQkvKiBVcGRhdGUgd3JpdHRlbiBieXRlcyBjb3VudCAqLwotCQl3cml0dGVuICs9IG10ZC0+b29iYmxvY2s7Ci0JCWlmICh3cml0dGVuID09IGxlbikKLQkJCWdvdG8gY21wOwotCi0JCS8qIEluY3JlbWVudCBwYWdlIGFkZHJlc3MgKi8KLQkJcGFnZSsrOwotCi0JCS8qIEhhdmUgd2UgaGl0IGEgYmxvY2sgYm91bmRhcnkgPyBUaGVuIHdlIGhhdmUgdG8gdmVyaWZ5IGFuZAotCQkgKiBpZiB2ZXJpZnkgaXMgb2ssIHdlIGhhdmUgdG8gc2V0dXAgdGhlIG9vYiBidWZmZXIgZm9yCi0JCSAqIHRoZSBuZXh0IHBhZ2VzLgotCQkqLwotCQlpZiAoIShwYWdlICYgKHBwYmxvY2sgLSAxKSkpewotCQkJaW50IG9mczsKLQkJCXRoaXMtPmRhdGFfcG9pID0gYnVmc3RhcnQ7Ci0JCQlyZXQgPSBuYW5kX3ZlcmlmeV9wYWdlcyAobXRkLCB0aGlzLCBzdGFydHBhZ2UsCi0JCQkJcGFnZSAtIHN0YXJ0cGFnZSwKLQkJCQlvb2JidWYsIG9vYnNlbCwgY2hpcG5yLCAoZWNjYnVmICE9IE5VTEwpKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfZWNjOiB2ZXJpZnlfcGFnZXMgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJKnJldGxlbiA9IHdyaXR0ZW47Ci0KLQkJCW9mcyA9IGF1dG9wbGFjZSA/IG10ZC0+b29iYXZhaWwgOiBtdGQtPm9vYnNpemU7Ci0JCQlpZiAoZWNjYnVmKQotCQkJCWVjY2J1ZiArPSAocGFnZSAtIHN0YXJ0cGFnZSkgKiBvZnM7Ci0JCQl0b3RhbHBhZ2VzIC09IHBhZ2UgLSBzdGFydHBhZ2U7Ci0JCQludW1wYWdlcyA9IG1pbiAodG90YWxwYWdlcywgcHBibG9jayk7Ci0JCQlwYWdlICY9IHRoaXMtPnBhZ2VtYXNrOwotCQkJc3RhcnRwYWdlID0gcGFnZTsKLQkJCW9vYmJ1ZiA9IG5hbmRfcHJlcGFyZV9vb2JidWYgKG10ZCwgZWNjYnVmLCBvb2JzZWwsCi0JCQkJCWF1dG9wbGFjZSwgbnVtcGFnZXMpOwotCQkJb29iID0gMDsKLQkJCS8qIENoZWNrLCBpZiB3ZSBjcm9zcyBhIGNoaXAgYm91bmRhcnkgKi8KLQkJCWlmICghcGFnZSkgewotCQkJCWNoaXBucisrOwotCQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKLQkJCX0KLQkJfQotCX0KLQkvKiBWZXJpZnkgdGhlIHJlbWFpbmluZyBwYWdlcyAqLwotY21wOgotCXRoaXMtPmRhdGFfcG9pID0gYnVmc3RhcnQ7Ci0gCXJldCA9IG5hbmRfdmVyaWZ5X3BhZ2VzIChtdGQsIHRoaXMsIHN0YXJ0cGFnZSwgdG90YWxwYWdlcywKLQkJb29iYnVmLCBvb2JzZWwsIGNoaXBuciwgKGVjY2J1ZiAhPSBOVUxMKSk7Ci0JaWYgKCFyZXQpCi0JCSpyZXRsZW4gPSB3cml0dGVuOworCWlmICghb3BzLT5kYXRidWYpCisJCXJldCA9IG5hbmRfZG9fcmVhZF9vb2IobXRkLCBmcm9tLCBvcHMpOwogCWVsc2UKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX2VjYzogdmVyaWZ5X3BhZ2VzIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0ID0gbmFuZF9kb19yZWFkX29wcyhtdGQsIGZyb20sIG9wcyk7CiAKLW91dDoKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCisJaWYgKHVubGlrZWx5KG9wcy0+bW9kZSA9PSBNVERfT09CX1JBVykpCisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSByZWFkX3BhZ2U7Cisgb3V0OgogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIAogLyoqCi0gKiBuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIG91dC1vZi1iYW5kCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQotICoKLSAqIE5BTkQgd3JpdGUgb3V0LW9mLWJhbmQKKyAqIG5hbmRfd3JpdGVfcGFnZV9yYXcgLSBbSW50ZXJuXSByYXcgcGFnZSB3cml0ZSBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZikKK3N0YXRpYyB2b2lkIG5hbmRfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJY29uc3QgdWludDhfdCAqYnVmKQogewotCWludCBjb2x1bW4sIHBhZ2UsIHN0YXR1cywgcmV0ID0gLUVJTywgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKK30KIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF93cml0ZV9vb2I6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CisvKioKKyAqIG5hbmRfd3JpdGVfcGFnZV9zd2VjYyAtIHtSRVBMQUNBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgcGFnZSB3cml0ZSBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICBjb25zdCB1aW50OF90ICpidWYpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy5lY2NjYWxjOworCWNvbnN0IHVpbnQ4X3QgKnAgPSBidWY7CisJaW50ICplY2Nwb3MgPSBjaGlwLT5lY2MubGF5b3V0LT5lY2Nwb3M7CiAKLQkvKiBTaGlmdCB0byBnZXQgcGFnZSAqLwotCXBhZ2UgPSAoaW50KSAodG8gPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JY2hpcG5yID0gKGludCkgKHRvID4+IHRoaXMtPmNoaXBfc2hpZnQpOworCS8qIFNvZnR3YXJlIGVjYyBjYWxjdWxhdGlvbiAqLworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOwogCi0JLyogTWFzayB0byBnZXQgY29sdW1uICovCi0JY29sdW1uID0gdG8gJiAobXRkLT5vb2JzaXplIC0gMSk7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQljaGlwLT5vb2JfcG9pW2VjY3Bvc1tpXV0gPSBlY2NfY2FsY1tpXTsKIAotCS8qIEluaXRpYWxpemUgcmV0dXJuIGxlbmd0aCB2YWx1ZSAqLwotCSpyZXRsZW4gPSAwOworCW5hbmRfd3JpdGVfcGFnZV9yYXcobXRkLCBjaGlwLCBidWYpOworfQogCi0JLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2UgKi8KLQlpZiAoKGNvbHVtbiArIGxlbikgPiBtdGQtPm9vYnNpemUpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogQXR0ZW1wdCB0byB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisvKioKKyAqIG5hbmRfd3JpdGVfcGFnZV9od2VjYyAtIHtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2MgYmFzZWQgcGFnZSB3cml0ZSBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICBjb25zdCB1aW50OF90ICpidWYpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy5lY2NjYWxjOworCWNvbnN0IHVpbnQ4X3QgKnAgPSBidWY7CisJaW50ICplY2Nwb3MgPSBjaGlwLT5lY2MubGF5b3V0LT5lY2Nwb3M7CisKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1dSSVRFKTsKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOwogCX0KIAotCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9XUklUSU5HKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnRvdGFsOyBpKyspCisJCWNoaXAtPm9vYl9wb2lbZWNjcG9zW2ldXSA9IGVjY19jYWxjW2ldOwogCi0JLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwljaGlwLT53cml0ZV9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworfQogCi0JLyogUmVzZXQgdGhlIGNoaXAuIFNvbWUgY2hpcHMgKGxpa2UgdGhlIFRvc2hpYmEgVEM1ODMyREMgZm91bmQKLQkgICBpbiBvbmUgb2YgbXkgRGlza09uQ2hpcCAyMDAwIHRlc3QgdW5pdHMpIHdpbGwgY2xlYXIgdGhlIHdob2xlCi0JICAgZGF0YSBwYWdlIHRvbyBpZiB3ZSBkb24ndCBkbyB0aGlzLiBJIGhhdmUgbm8gY2x1ZSB3aHksIGJ1dAotCSAgIEkgc2VlbSB0byBoYXZlICdmaXhlZCcgaXQgaW4gdGhlIGRvYzIwMDAgZHJpdmVyIGluCi0JICAgQXVndXN0IDE5OTkuICBkd213Mi4gKi8KLQl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CisvKioKKyAqIG5hbmRfd3JpdGVfcGFnZV9zeW5kcm9tZSAtIHtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2Mgc3luZHJvbSBiYXNlZCBwYWdlIHdyaXRlCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWRhdGEgYnVmZmVyCisgKgorICogVGhlIGh3IGdlbmVyYXRvciBjYWxjdWxhdGVzIHRoZSBlcnJvciBzeW5kcm9tZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcgorICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIG5hbmRfd3JpdGVfcGFnZV9zeW5kcm9tZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKm9vYiA9IGNoaXAtPm9vYl9wb2k7CiAKLQkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCi0JaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkKLQkJZ290byBvdXQ7CisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgewogCi0JLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgaWYgd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCi0JaWYgKHBhZ2UgPT0gdGhpcy0+cGFnZWJ1ZikKLQkJdGhpcy0+cGFnZWJ1ZiA9IC0xOworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19XUklURSk7CisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIHAsIGVjY3NpemUpOwogCi0JaWYgKE5BTkRfTVVTVF9QQUQodGhpcykpIHsKLQkJLyogV3JpdGUgb3V0IGRlc2lyZWQgZGF0YSAqLwotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPm9vYmJsb2NrLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQkvKiBwcmVwYWQgMHhmZiBmb3IgcGFydGlhbCBwcm9ncmFtbWluZyAqLwotCQl0aGlzLT53cml0ZV9idWYobXRkLCBmZmNoYXJzLCBjb2x1bW4pOwotCQkvKiB3cml0ZSBkYXRhICovCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIGJ1ZiwgbGVuKTsKLQkJLyogcG9zdHBhZCAweGZmIGZvciBwYXJ0aWFsIHByb2dyYW1taW5nICovCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIGZmY2hhcnMsIG10ZC0+b29ic2l6ZSAtIChsZW4rY29sdW1uKSk7CisJCWlmIChjaGlwLT5lY2MucHJlcGFkKSB7CisJCQljaGlwLT53cml0ZV9idWYobXRkLCBvb2IsIGNoaXAtPmVjYy5wcmVwYWQpOworCQkJb29iICs9IGNoaXAtPmVjYy5wcmVwYWQ7CisJCX0KKworCQljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgb29iKTsKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgb29iLCBlY2NieXRlcyk7CisJCW9vYiArPSBlY2NieXRlczsKKworCQlpZiAoY2hpcC0+ZWNjLnBvc3RwYWQpIHsKKwkJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnBvc3RwYWQpOworCQkJb29iICs9IGNoaXAtPmVjYy5wb3N0cGFkOworCQl9CisJfQorCisJLyogQ2FsY3VsYXRlIHJlbWFpbmluZyBvb2IgYnl0ZXMgKi8KKwlpID0gbXRkLT5vb2JzaXplIC0gKG9vYiAtIGNoaXAtPm9vYl9wb2kpOworCWlmIChpKQorCQljaGlwLT53cml0ZV9idWYobXRkLCBvb2IsIGkpOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfcGFnZSAtIFtJTlRFUk5BTF0gd3JpdGUgb25lIHBhZ2UKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2hpcDoJTkFORCBjaGlwIGRlc2NyaXB0b3IKKyAqIEBidWY6CXRoZSBkYXRhIHRvIHdyaXRlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gd3JpdGUKKyAqIEBjYWNoZWQ6CWNhY2hlZCBwcm9ncmFtbWluZworICovCitzdGF0aWMgaW50IG5hbmRfd3JpdGVfcGFnZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UsIGludCBjYWNoZWQpCit7CisJaW50IHN0YXR1czsKKworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgMHgwMCwgcGFnZSk7CisKKwljaGlwLT5lY2Mud3JpdGVfcGFnZShtdGQsIGNoaXAsIGJ1Zik7CisKKwkvKgorCSAqIENhY2hlZCBwcm9nYW1taW5nIGRpc2FibGVkIGZvciBub3csIE5vdCBzdXJlIGlmIGl0cyB3b3J0aCB0aGUKKwkgKiB0cm91YmxlLiBUaGUgc3BlZWQgZ2FpbiBpcyBub3QgdmVyeSBpbXByZXNzaXZlLiAoMi4zLT4yLjZNaWIvcykKKwkgKi8KKwljYWNoZWQgPSAwOworCisJaWYgKCFjYWNoZWQgfHwgIShjaGlwLT5vcHRpb25zICYgTkFORF9DQUNIRVBSRykpIHsKKworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisJCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CisJCS8qCisJCSAqIFNlZSBpZiBvcGVyYXRpb24gZmFpbGVkIGFuZCBhZGRpdGlvbmFsIHN0YXR1cyBjaGVja3MgYXJlCisJCSAqIGF2YWlsYWJsZQorCQkgKi8KKwkJaWYgKChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSAmJiAoY2hpcC0+ZXJyc3RhdCkpCisJCQlzdGF0dXMgPSBjaGlwLT5lcnJzdGF0KG10ZCwgY2hpcCwgRkxfV1JJVElORywgc3RhdHVzLAorCQkJCQkgICAgICAgcGFnZSk7CisKKwkJaWYgKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpCisJCQlyZXR1cm4gLUVJTzsKIAl9IGVsc2UgewotCQkvKiBXcml0ZSBvdXQgZGVzaXJlZCBkYXRhICovCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU0VRSU4sIG10ZC0+b29iYmxvY2sgKyBjb2x1bW4sIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCS8qIHdyaXRlIGRhdGEgKi8KLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgYnVmLCBsZW4pOworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfQ0FDSEVEUFJPRywgLTEsIC0xKTsKKwkJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsKIAl9Ci0JLyogU2VuZCBjb21tYW5kIHRvIHByb2dyYW0gdGhlIE9PQiBkYXRhICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKLQotCXN0YXR1cyA9IHRoaXMtPndhaXRmdW5jIChtdGQsIHRoaXMsIEZMX1dSSVRJTkcpOwotCi0JLyogU2VlIGlmIGRldmljZSB0aGlua3MgaXQgc3VjY2VlZGVkICovCi0JaWYgKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIiAiRmFpbGVkIHdyaXRlLCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBSZXR1cm4gaGFwcHkgKi8KLQkqcmV0bGVuID0gbGVuOwogCiAjaWZkZWYgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURQogCS8qIFNlbmQgY29tbWFuZCB0byByZWFkIGJhY2sgdGhlIGRhdGEgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIGNvbHVtbiwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsIHBhZ2UpOwogCi0JaWYgKHRoaXMtPnZlcmlmeV9idWYobXRkLCBidWYsIGxlbikpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIiAiRmFpbGVkIHdyaXRlIHZlcmlmeSwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKGNoaXAtPnZlcmlmeV9idWYobXRkLCBidWYsIG10ZC0+d3JpdGVzaXplKSkKKwkJcmV0dXJuIC1FSU87CiAjZW5kaWYKLQlyZXQgPSAwOwotb3V0OgotCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qKgotICogbmFuZF93cml0ZXYgLSBbTVREIEludGVyZmFjZV0gY29tcGFiaWx0eSBmdW5jdGlvbiBmb3IgbmFuZF93cml0ZXZfZWNjCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHZlY3M6CXRoZSBpb3ZlY3RvcnMgdG8gd3JpdGUKLSAqIEBjb3VudDoJbnVtYmVyIG9mIHZlY3RvcnMKLSAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bwotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKLSAqCi0gKiBOQU5EIHdyaXRlIHdpdGgga3ZlYy4gVGhpcyBqdXN0IGNhbGxzIHRoZSBlY2MgZnVuY3Rpb24KLSAqLwotc3RhdGljIGludCBuYW5kX3dyaXRldiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LAotCQlsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbikKLXsKLQlyZXR1cm4gKG5hbmRfd3JpdGV2X2VjYyAobXRkLCB2ZWNzLCBjb3VudCwgdG8sIHJldGxlbiwgTlVMTCwgTlVMTCkpOworCXJldHVybiAwOwogfQogCiAvKioKLSAqIG5hbmRfd3JpdGV2X2VjYyAtIFtNVEQgSW50ZXJmYWNlXSB3cml0ZSB3aXRoIGlvdmVjIHdpdGggZWNjCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHZlY3M6CXRoZSBpb3ZlY3RvcnMgdG8gd3JpdGUKLSAqIEBjb3VudDoJbnVtYmVyIG9mIHZlY3RvcnMKLSAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bwotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKLSAqIEBlY2NidWY6CWZpbGVzeXN0ZW0gc3VwcGxpZWQgb29iIGRhdGEgYnVmZmVyCi0gKiBAb29ic2VsOglvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQotICoKLSAqIE5BTkQgd3JpdGUgd2l0aCBpb3ZlYyB3aXRoIGVjYworICogbmFuZF9maWxsX29vYiAtIFtJbnRlcm5hbF0gVHJhbnNmZXIgY2xpZW50IGJ1ZmZlciB0byBvb2IKKyAqIEBjaGlwOgluYW5kIGNoaXAgc3RydWN0dXJlCisgKiBAb29iOglvb2IgZGF0YSBidWZmZXIKKyAqIEBvcHM6CW9vYiBvcHMgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF93cml0ZXZfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsCi0JCWxvZmZfdCB0bywgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIHVpbnQ4X3QgKm5hbmRfZmlsbF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdWludDhfdCAqb29iLAorCQkJCSAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0JaW50IGksIHBhZ2UsIGxlbiwgdG90YWxfbGVuLCByZXQgPSAtRUlPLCB3cml0dGVuID0gMCwgY2hpcG5yOwotCWludCBvb2IsIG51bXBhZ2VzLCBhdXRvcGxhY2UgPSAwLCBzdGFydHBhZ2U7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQJcHBibG9jayA9ICgxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpOwotCXVfY2hhciAqb29iYnVmLCAqYnVmc3RhcnQ7CisJc2l6ZV90IGxlbiA9IG9wcy0+b29ibGVuOwogCi0JLyogUHJlc2V0IHdyaXR0ZW4gbGVuIGZvciBlYXJseSBleGl0ICovCi0JKnJldGxlbiA9IDA7CisJc3dpdGNoKG9wcy0+bW9kZSkgewogCi0JLyogQ2FsY3VsYXRlIHRvdGFsIGxlbmd0aCBvZiBkYXRhICovCi0JdG90YWxfbGVuID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJdG90YWxfbGVuICs9IChpbnQpIHZlY3NbaV0uaW92X2xlbjsKKwljYXNlIE1URF9PT0JfUExBQ0U6CisJY2FzZSBNVERfT09CX1JBVzoKKwkJbWVtY3B5KGNoaXAtPm9vYl9wb2kgKyBvcHMtPm9vYm9mZnMsIG9vYiwgbGVuKTsKKwkJcmV0dXJuIG9vYiArIGxlbjsKIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLAotCSAgICAgICAibmFuZF93cml0ZXY6IHRvID0gMHglMDh4LCBsZW4gPSAlaSwgY291bnQgPSAlbGRcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAodW5zaWduZWQgaW50KSB0b3RhbF9sZW4sIGNvdW50KTsKKwljYXNlIE1URF9PT0JfQVVUTzogeworCQlzdHJ1Y3QgbmFuZF9vb2JmcmVlICpmcmVlID0gY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZTsKKwkJdWludDMyX3QgYm9mZnMgPSAwLCB3b2ZmcyA9IG9wcy0+b29ib2ZmczsKKwkJc2l6ZV90IGJ5dGVzID0gMDsKIAotCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlICovCi0JaWYgKCh0byArIHRvdGFsX2xlbikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRldjogQXR0ZW1wdGVkIHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlmb3IoOyBmcmVlLT5sZW5ndGggJiYgbGVuOyBmcmVlKyssIGxlbiAtPSBieXRlcykgeworCQkJLyogV3JpdGUgcmVxdWVzdCBub3QgZnJvbSBvZmZzZXQgMCA/ICovCisJCQlpZiAodW5saWtlbHkod29mZnMpKSB7CisJCQkJaWYgKHdvZmZzID49IGZyZWUtPmxlbmd0aCkgeworCQkJCQl3b2ZmcyAtPSBmcmVlLT5sZW5ndGg7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlib2ZmcyA9IGZyZWUtPm9mZnNldCArIHdvZmZzOworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sCisJCQkJCSAgICAgIChmcmVlLT5sZW5ndGggLSB3b2ZmcykpOworCQkJCXdvZmZzID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJYnl0ZXMgPSBtaW5fdChzaXplX3QsIGxlbiwgZnJlZS0+bGVuZ3RoKTsKKwkJCQlib2ZmcyA9IGZyZWUtPm9mZnNldDsKKwkJCX0KKwkJCW1lbWNweShjaGlwLT5vb2JfcG9pICsgd29mZnMsIG9vYiwgYnl0ZXMpOworCQkJb29iICs9IGJ5dGVzOworCQl9CisJCXJldHVybiBvb2I7CiAJfQorCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSBOT1RBTElHTkVEKHgpICh4ICYgKG10ZC0+d3JpdGVzaXplLTEpKSAhPSAwCisKKy8qKgorICogbmFuZF9kb193cml0ZV9vcHMgLSBbSW50ZXJuYWxdIE5BTkQgd3JpdGUgd2l0aCBFQ0MKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KKyAqIEBvcHM6CW9vYiBvcGVyYXRpb25zIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQorICoKKyAqIE5BTkQgd3JpdGUgd2l0aCBFQ0MKKyAqLworc3RhdGljIGludCBuYW5kX2RvX3dyaXRlX29wcyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlpbnQgY2hpcG5yLCByZWFscGFnZSwgcGFnZSwgYmxvY2ttYXNrOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJdWludDMyX3Qgd3JpdGVsZW4gPSBvcHMtPmxlbjsKKwl1aW50OF90ICpvb2IgPSBvcHMtPm9vYmJ1ZjsKKwl1aW50OF90ICpidWYgPSBvcHMtPmRhdGJ1ZjsKKwlpbnQgYnl0ZXMgPSBtdGQtPndyaXRlc2l6ZTsKKwlpbnQgcmV0OworCisJb3BzLT5yZXRsZW4gPSAwOwogCiAJLyogcmVqZWN0IHdyaXRlcywgd2hpY2ggYXJlIG5vdCBwYWdlIGFsaWduZWQgKi8KLQlpZiAoTk9UQUxJR05FRCAodG8pIHx8IE5PVEFMSUdORUQodG90YWxfbGVuKSkgewotCQlwcmludGsgKEtFUk5fTk9USUNFICJuYW5kX3dyaXRlX2VjYzogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworCWlmIChOT1RBTElHTkVEKHRvKSB8fCBOT1RBTElHTkVEKG9wcy0+bGVuKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm5hbmRfd3JpdGU6ICIKKwkJICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIG5vdCBwYWdlIGFsaWduZWQgZGF0YVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9XUklUSU5HKTsKLQotCS8qIEdldCB0aGUgY3VycmVudCBjaGlwLW5yICovCi0JY2hpcG5yID0gKGludCkgKHRvID4+IHRoaXMtPmNoaXBfc2hpZnQpOwotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJaWYgKCF3cml0ZWxlbikKKwkJcmV0dXJuIDA7CiAKIAkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCiAJaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRUlPOwogCi0JLyogaWYgb29ic2VsIGlzIE5VTEwsIHVzZSBjaGlwIGRlZmF1bHRzICovCi0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOworCWNoaXBuciA9IChpbnQpKHRvID4+IGNoaXAtPmNoaXBfc2hpZnQpOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKIAotCS8qIEF1dG9wbGFjZSBvZiBvb2IgZGF0YSA/IFVzZSB0aGUgZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lICovCi0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgewotCQlvb2JzZWwgPSB0aGlzLT5hdXRvb29iOwotCQlhdXRvcGxhY2UgPSAxOwotCX0KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMX1VTUikKLQkJYXV0b3BsYWNlID0gMTsKKwlyZWFscGFnZSA9IChpbnQpKHRvID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOworCWJsb2NrbWFzayA9ICgxIDw8IChjaGlwLT5waHlzX2VyYXNlX3NoaWZ0IC0gY2hpcC0+cGFnZV9zaGlmdCkpIC0gMTsKIAotCS8qIFNldHVwIHN0YXJ0IHBhZ2UgKi8KLQlwYWdlID0gKGludCkgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIHdyaXRlIHRvIHRoZSBjYWNoZWQgcGFnZSAqLwotCWlmIChwYWdlIDw9IHRoaXMtPnBhZ2VidWYgJiYgdGhpcy0+cGFnZWJ1ZiA8ICgodG8gKyB0b3RhbF9sZW4pID4+IHRoaXMtPnBhZ2Vfc2hpZnQpKQotCQl0aGlzLT5wYWdlYnVmID0gLTE7CisJLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgd2hlbiB3ZSB3cml0ZSB0byB0aGUgY2FjaGVkIHBhZ2UgKi8KKwlpZiAodG8gPD0gKGNoaXAtPnBhZ2VidWYgPDwgY2hpcC0+cGFnZV9zaGlmdCkgJiYKKwkgICAgKGNoaXAtPnBhZ2VidWYgPDwgY2hpcC0+cGFnZV9zaGlmdCkgPCAodG8gKyBvcHMtPmxlbikpCisJCWNoaXAtPnBhZ2VidWYgPSAtMTsKIAotCXN0YXJ0cGFnZSA9IHBhZ2UgJiB0aGlzLT5wYWdlbWFzazsKKwljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy5vb2J3YnVmOwogCi0JLyogTG9vcCB1bnRpbCBhbGwga3ZlYycgZGF0YSBoYXMgYmVlbiB3cml0dGVuICovCi0JbGVuID0gMDsKLQl3aGlsZSAoY291bnQpIHsKLQkJLyogSWYgdGhlIGdpdmVuIHR1cGxlIGlzID49IHBhZ2VzaXplIHRoZW4KLQkJICogd3JpdGUgaXQgb3V0IGZyb20gdGhlIGlvdgotCQkgKi8KLQkJaWYgKCh2ZWNzLT5pb3ZfbGVuIC0gbGVuKSA+PSBtdGQtPm9vYmJsb2NrKSB7Ci0JCQkvKiBDYWxjIG51bWJlciBvZiBwYWdlcyB3ZSBjYW4gd3JpdGUKLQkJCSAqIG91dCBvZiB0aGlzIGlvdiBpbiBvbmUgZ28gKi8KLQkJCW51bXBhZ2VzID0gKHZlY3MtPmlvdl9sZW4gLSBsZW4pID4+IHRoaXMtPnBhZ2Vfc2hpZnQ7Ci0JCQkvKiBEbyBub3QgY3Jvc3MgYmxvY2sgYm91bmRhcmllcyAqLwotCQkJbnVtcGFnZXMgPSBtaW4gKHBwYmxvY2sgLSAoc3RhcnRwYWdlICYgKHBwYmxvY2sgLSAxKSksIG51bXBhZ2VzKTsKLQkJCW9vYmJ1ZiA9IG5hbmRfcHJlcGFyZV9vb2JidWYgKG10ZCwgTlVMTCwgb29ic2VsLCBhdXRvcGxhY2UsIG51bXBhZ2VzKTsKLQkJCWJ1ZnN0YXJ0ID0gKHVfY2hhciAqKXZlY3MtPmlvdl9iYXNlOwotCQkJYnVmc3RhcnQgKz0gbGVuOwotCQkJdGhpcy0+ZGF0YV9wb2kgPSBidWZzdGFydDsKLQkJCW9vYiA9IDA7Ci0JCQlmb3IgKGkgPSAxOyBpIDw9IG51bXBhZ2VzOyBpKyspIHsKLQkJCQkvKiBXcml0ZSBvbmUgcGFnZS4gSWYgdGhpcyBpcyB0aGUgbGFzdCBwYWdlIHRvIHdyaXRlCi0JCQkJICogdGhlbiB1c2UgdGhlIHJlYWwgcGFnZXByb2dyYW0gY29tbWFuZCwgZWxzZSBzZWxlY3QKLQkJCQkgKiBjYWNoZWQgcHJvZ3JhbW1pbmcgaWYgc3VwcG9ydGVkIGJ5IHRoZSBjaGlwLgotCQkJCSAqLwotCQkJCXJldCA9IG5hbmRfd3JpdGVfcGFnZSAobXRkLCB0aGlzLCBwYWdlICYgdGhpcy0+cGFnZW1hc2ssCi0JCQkJCSZvb2JidWZbb29iXSwgb29ic2VsLCBpICE9IG51bXBhZ2VzKTsKLQkJCQlpZiAocmV0KQotCQkJCQlnb3RvIG91dDsKLQkJCQl0aGlzLT5kYXRhX3BvaSArPSBtdGQtPm9vYmJsb2NrOwotCQkJCWxlbiArPSBtdGQtPm9vYmJsb2NrOwotCQkJCW9vYiArPSBtdGQtPm9vYnNpemU7Ci0JCQkJcGFnZSsrOwotCQkJfQotCQkJLyogQ2hlY2ssIGlmIHdlIGhhdmUgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IHR1cGxlICovCi0JCQlpZiAobGVuID49IChpbnQpIHZlY3MtPmlvdl9sZW4pIHsKLQkJCQl2ZWNzKys7Ci0JCQkJbGVuID0gMDsKLQkJCQljb3VudC0tOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogV2UgbXVzdCB1c2UgdGhlIGludGVybmFsIGJ1ZmZlciwgcmVhZCBkYXRhIG91dCBvZiBlYWNoCi0JCQkgKiB0dXBsZSB1bnRpbCB3ZSBoYXZlIGEgZnVsbCBwYWdlIHRvIHdyaXRlCi0JCQkgKi8KLQkJCWludCBjbnQgPSAwOwotCQkJd2hpbGUgKGNudCA8IG10ZC0+b29iYmxvY2spIHsKLQkJCQlpZiAodmVjcy0+aW92X2Jhc2UgIT0gTlVMTCAmJiB2ZWNzLT5pb3ZfbGVuKQotCQkJCQl0aGlzLT5kYXRhX2J1ZltjbnQrK10gPSAoKHVfY2hhciAqKSB2ZWNzLT5pb3ZfYmFzZSlbbGVuKytdOwotCQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCB0dXBsZSAqLwotCQkJCWlmIChsZW4gPj0gKGludCkgdmVjcy0+aW92X2xlbikgewotCQkJCQl2ZWNzKys7Ci0JCQkJCWxlbiA9IDA7Ci0JCQkJCWNvdW50LS07Ci0JCQkJfQotCQkJfQotCQkJdGhpcy0+cGFnZWJ1ZiA9IHBhZ2U7Ci0JCQl0aGlzLT5kYXRhX3BvaSA9IHRoaXMtPmRhdGFfYnVmOwotCQkJYnVmc3RhcnQgPSB0aGlzLT5kYXRhX3BvaTsKLQkJCW51bXBhZ2VzID0gMTsKLQkJCW9vYmJ1ZiA9IG5hbmRfcHJlcGFyZV9vb2JidWYgKG10ZCwgTlVMTCwgb29ic2VsLCBhdXRvcGxhY2UsIG51bXBhZ2VzKTsKLQkJCXJldCA9IG5hbmRfd3JpdGVfcGFnZSAobXRkLCB0aGlzLCBwYWdlICYgdGhpcy0+cGFnZW1hc2ssCi0JCQkJb29iYnVmLCBvb2JzZWwsIDApOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJCXBhZ2UrKzsKLQkJfQorCXdoaWxlKDEpIHsKKwkJaW50IGNhY2hlZCA9IHdyaXRlbGVuID4gYnl0ZXMgJiYgcGFnZSAhPSBibG9ja21hc2s7CiAKLQkJdGhpcy0+ZGF0YV9wb2kgPSBidWZzdGFydDsKLQkJcmV0ID0gbmFuZF92ZXJpZnlfcGFnZXMgKG10ZCwgdGhpcywgc3RhcnRwYWdlLCBudW1wYWdlcywgb29iYnVmLCBvb2JzZWwsIGNoaXBuciwgMCk7CisJCWlmICh1bmxpa2VseShvb2IpKQorCQkJb29iID0gbmFuZF9maWxsX29vYihjaGlwLCBvb2IsIG9wcyk7CisKKwkJcmV0ID0gbmFuZF93cml0ZV9wYWdlKG10ZCwgY2hpcCwgYnVmLCBwYWdlLCBjYWNoZWQpOwogCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0KLQkJd3JpdHRlbiArPSBtdGQtPm9vYmJsb2NrICogbnVtcGFnZXM7Ci0JCS8qIEFsbCBkb25lID8gKi8KLQkJaWYgKCFjb3VudCkKIAkJCWJyZWFrOwogCi0JCXN0YXJ0cGFnZSA9IHBhZ2UgJiB0aGlzLT5wYWdlbWFzazsKKwkJd3JpdGVsZW4gLT0gYnl0ZXM7CisJCWlmICghd3JpdGVsZW4pCisJCQlicmVhazsKKworCQlidWYgKz0gYnl0ZXM7CisJCXJlYWxwYWdlKys7CisKKwkJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CiAJCS8qIENoZWNrLCBpZiB3ZSBjcm9zcyBhIGNoaXAgYm91bmRhcnkgKi8KLQkJaWYgKCFzdGFydHBhZ2UpIHsKKwkJaWYgKCFwYWdlKSB7CiAJCQljaGlwbnIrKzsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAJCX0KIAl9Ci0JcmV0ID0gMDsKLW91dDoKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCisKKwlpZiAodW5saWtlbHkob29iKSkKKwkJbWVtc2V0KGNoaXAtPm9vYl9wb2ksIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CisKKwlvcHMtPnJldGxlbiA9IG9wcy0+bGVuIC0gd3JpdGVsZW47CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBuYW5kX3dyaXRlIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgd3JpdGUgd2l0aCBFQ0MKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KKyAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKKyAqIEBidWY6CXRoZSBkYXRhIHRvIHdyaXRlCisgKgorICogTkFORCB3cml0ZSB3aXRoIEVDQworICovCitzdGF0aWMgaW50IG5hbmRfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwkJCSAgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVpbnQ4X3QgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQ7CisKKwkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKCh0byArIGxlbikgPiBtdGQtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1dSSVRJTkcpOworCisJY2hpcC0+b3BzLmxlbiA9IGxlbjsKKwljaGlwLT5vcHMuZGF0YnVmID0gKHVpbnQ4X3QgKilidWY7CisJY2hpcC0+b3BzLm9vYmJ1ZiA9IE5VTEw7CisKKwlyZXQgPSBuYW5kX2RvX3dyaXRlX29wcyhtdGQsIHRvLCAmY2hpcC0+b3BzKTsKKwogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAotCSpyZXRsZW4gPSB3cml0dGVuOworCSpyZXRsZW4gPSBjaGlwLT5vcHMucmV0bGVuOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbmFuZF9kb193cml0ZV9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSBvdXQtb2YtYmFuZAorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bworICogQG9wczoJb29iIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBOQU5EIHdyaXRlIG91dC1vZi1iYW5kCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9kb193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSAgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJaW50IGNoaXBuciwgcGFnZSwgc3RhdHVzOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAibmFuZF93cml0ZV9vb2I6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwKKwkgICAgICAodW5zaWduZWQgaW50KXRvLCAoaW50KW9wcy0+bGVuKTsKKworCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlICovCisJaWYgKChvcHMtPm9vYm9mZnMgKyBvcHMtPmxlbikgPiBtdGQtPm9vYnNpemUpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfb29iOiAiCisJCSAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGlwbnIgPSAoaW50KSh0byA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisKKwkvKiBTaGlmdCB0byBnZXQgcGFnZSAqLworCXBhZ2UgPSAoaW50KSh0byA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKworCS8qCisJICogUmVzZXQgdGhlIGNoaXAuIFNvbWUgY2hpcHMgKGxpa2UgdGhlIFRvc2hpYmEgVEM1ODMyREMgZm91bmQgaW4gb25lCisJICogb2YgbXkgRGlza09uQ2hpcCAyMDAwIHRlc3QgdW5pdHMpIHdpbGwgY2xlYXIgdGhlIHdob2xlIGRhdGEgcGFnZSB0b28KKwkgKiBpZiB3ZSBkb24ndCBkbyB0aGlzLiBJIGhhdmUgbm8gY2x1ZSB3aHksIGJ1dCBJIHNlZW0gdG8gaGF2ZSAnZml4ZWQnCisJICogaXQgaW4gdGhlIGRvYzIwMDAgZHJpdmVyIGluIEF1Z3VzdCAxOTk5LiAgZHdtdzIuCisJICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCisJLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLworCWlmIChuYW5kX2NoZWNrX3dwKG10ZCkpCisJCXJldHVybiAtRVJPRlM7CisKKwkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLCBpZiB3ZSB3cml0ZSB0byB0aGUgY2FjaGVkIHBhZ2UgKi8KKwlpZiAocGFnZSA9PSBjaGlwLT5wYWdlYnVmKQorCQljaGlwLT5wYWdlYnVmID0gLTE7CisKKwljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy5vb2J3YnVmOworCW1lbXNldChjaGlwLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOworCW5hbmRfZmlsbF9vb2IoY2hpcCwgb3BzLT5vb2JidWYsIG9wcyk7CisJc3RhdHVzID0gY2hpcC0+ZWNjLndyaXRlX29vYihtdGQsIGNoaXAsIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CisJbWVtc2V0KGNoaXAtPm9vYl9wb2ksIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJb3BzLT5yZXRsZW4gPSBvcHMtPmxlbjsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfb29iIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgd3JpdGUgZGF0YSBhbmQvb3Igb3V0LW9mLWJhbmQKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZnJvbToJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQG9wczoJb29iIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCBuYW5kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorCQkJICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwl2b2lkICgqd3JpdGVfcGFnZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkgIGNvbnN0IHVpbnQ4X3QgKmJ1ZikgPSBOVUxMOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldCA9IC1FTk9UU1VQUDsKKworCW9wcy0+cmV0bGVuID0gMDsKKworCS8qIERvIG5vdCBhbGxvdyB3cml0ZXMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKCh0byArIG9wcy0+bGVuKSA+IG10ZC0+c2l6ZSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX29vYjogIgorCQkgICAgICAiQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfV1JJVElORyk7CisKKwlzd2l0Y2gob3BzLT5tb2RlKSB7CisJY2FzZSBNVERfT09CX1BMQUNFOgorCWNhc2UgTVREX09PQl9BVVRPOgorCQlicmVhazsKKworCWNhc2UgTVREX09PQl9SQVc6CisJCS8qIFJlcGxhY2UgdGhlIHdyaXRlX3BhZ2UgYWxnb3JpdGhtIHRlbXBvcmFyeSAqLworCQl3cml0ZV9wYWdlID0gY2hpcC0+ZWNjLndyaXRlX3BhZ2U7CisJCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gbmFuZF93cml0ZV9wYWdlX3JhdzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW9wcy0+ZGF0YnVmKQorCQlyZXQgPSBuYW5kX2RvX3dyaXRlX29vYihtdGQsIHRvLCBvcHMpOworCWVsc2UKKwkJcmV0ID0gbmFuZF9kb193cml0ZV9vcHMobXRkLCB0bywgb3BzKTsKKworCWlmICh1bmxpa2VseShvcHMtPm1vZGUgPT0gTVREX09PQl9SQVcpKQorCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IHdyaXRlX3BhZ2U7Cisgb3V0OgorCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDUwLDEyICsxODE2LDEyIEBACiAgKgogICogU3RhbmRhcmQgZXJhc2UgY29tbWFuZCBmb3IgTkFORCBjaGlwcwogICovCi1zdGF0aWMgdm9pZCBzaW5nbGVfZXJhc2VfY21kIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpCitzdGF0aWMgdm9pZCBzaW5nbGVfZXJhc2VfY21kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJLyogU2VuZCBjb21tYW5kcyB0byBlcmFzZSBhIGJsb2NrICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMiwgLTEsIC0xKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMiwgLTEsIC0xKTsKIH0KIAogLyoqCkBAIC0yMDY2LDE1ICsxODMyLDE1IEBACiAgKiBBTkQgbXVsdGkgYmxvY2sgZXJhc2UgY29tbWFuZCBmdW5jdGlvbgogICogRXJhc2UgNCBjb25zZWN1dGl2ZSBibG9ja3MKICAqLwotc3RhdGljIHZvaWQgbXVsdGlfZXJhc2VfY21kIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpCitzdGF0aWMgdm9pZCBtdWx0aV9lcmFzZV9jbWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAkvKiBTZW5kIGNvbW1hbmRzIHRvIGVyYXNlIGEgYmxvY2sgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UrKyk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKyspOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UpOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UyLCAtMSwgLTEpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKyspOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKyspOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKyspOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UyLCAtMSwgLTEpOwogfQogCiAvKioKQEAgLTIwODQsNzkgKzE4NTAsODIgQEAKICAqCiAgKiBFcmFzZSBvbmUgb3JlIG1vcmUgYmxvY2tzCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF9lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKK3N0YXRpYyBpbnQgbmFuZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQogewotCXJldHVybiBuYW5kX2VyYXNlX25hbmQgKG10ZCwgaW5zdHIsIDApOworCXJldHVybiBuYW5kX2VyYXNlX25hbmQobXRkLCBpbnN0ciwgMCk7CiB9CiAKICNkZWZpbmUgQkJUX1BBR0VfTUFTSwkweGZmZmZmZjNmCiAvKioKLSAqIG5hbmRfZXJhc2VfaW50ZXJuIC0gW05BTkQgSW50ZXJmYWNlXSBlcmFzZSBibG9jayhzKQorICogbmFuZF9lcmFzZV9uYW5kIC0gW0ludGVybmFsXSBlcmFzZSBibG9jayhzKQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBpbnN0cjoJZXJhc2UgaW5zdHJ1Y3Rpb24KICAqIEBhbGxvd2JidDoJYWxsb3cgZXJhc2luZyB0aGUgYmJ0IGFyZWEKICAqCiAgKiBFcmFzZSBvbmUgb3JlIG1vcmUgYmxvY2tzCiAgKi8KLWludCBuYW5kX2VyYXNlX25hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsIGludCBhbGxvd2JidCkKK2ludCBuYW5kX2VyYXNlX25hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciwKKwkJICAgIGludCBhbGxvd2JidCkKIHsKIAlpbnQgcGFnZSwgbGVuLCBzdGF0dXMsIHBhZ2VzX3Blcl9ibG9jaywgcmV0LCBjaGlwbnI7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgcmV3cml0ZV9iYnRbTkFORF9NQVhfQ0hJUFNdPXswfTsJLyogZmxhZ3MgdG8gaW5kaWNhdGUgdGhlIHBhZ2UsIGlmIGJidCBuZWVkcyB0byBiZSByZXdyaXR0ZW4uICovCi0JdW5zaWduZWQgaW50IGJidF9tYXNrZWRfcGFnZTsJCS8qIGJidCBtYXNrIHRvIGNvbXBhcmUgdG8gcGFnZSBiZWluZyBlcmFzZWQuICovCi0JCQkJCQkvKiBJdCBpcyB1c2VkIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwYWdlIGlzIGluIHRoZSBzYW1lICovCi0JCQkJCQkvKiAgIDI1NiBibG9jayBncm91cCBhbmQgdGhlIHNhbWUgYmFuayBhcyB0aGUgYmJ0LiAqLworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJld3JpdGVfYmJ0W05BTkRfTUFYX0NISVBTXT17MH07CisJdW5zaWduZWQgaW50IGJidF9tYXNrZWRfcGFnZSA9IDB4ZmZmZmZmZmY7CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywKLQkgICAgICAgIm5hbmRfZXJhc2U6IHN0YXJ0ID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgaW5zdHItPmFkZHIsICh1bnNpZ25lZCBpbnQpIGluc3RyLT5sZW4pOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCisJICAgICAgKHVuc2lnbmVkIGludClpbnN0ci0+YWRkciwgKHVuc2lnbmVkIGludClpbnN0ci0+bGVuKTsKIAogCS8qIFN0YXJ0IGFkZHJlc3MgbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLwotCWlmIChpbnN0ci0+YWRkciAmICgoMSA8PCB0aGlzLT5waHlzX2VyYXNlX3NoaWZ0KSAtIDEpKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogVW5hbGlnbmVkIGFkZHJlc3NcbiIpOworCWlmIChpbnN0ci0+YWRkciAmICgoMSA8PCBjaGlwLT5waHlzX2VyYXNlX3NoaWZ0KSAtIDEpKSB7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBVbmFsaWduZWQgYWRkcmVzc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIExlbmd0aCBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5ICovCi0JaWYgKGluc3RyLT5sZW4gJiAoKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6IExlbmd0aCBub3QgYmxvY2sgYWxpZ25lZFxuIik7CisJaWYgKGluc3RyLT5sZW4gJiAoKDEgPDwgY2hpcC0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIgorCQkgICAgICAiTGVuZ3RoIG5vdCBibG9jayBhbGlnbmVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogRG8gbm90IGFsbG93IGVyYXNlIHBhc3QgZW5kIG9mIGRldmljZSAqLwogCWlmICgoaW5zdHItPmxlbiArIGluc3RyLT5hZGRyKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6IEVyYXNlIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiCisJCSAgICAgICJFcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpbnN0ci0+ZmFpbF9hZGRyID0gMHhmZmZmZmZmZjsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9FUkFTSU5HKTsKKwluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9FUkFTSU5HKTsKIAogCS8qIFNoaWZ0IHRvIGdldCBmaXJzdCBwYWdlICovCi0JcGFnZSA9IChpbnQpIChpbnN0ci0+YWRkciA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQljaGlwbnIgPSAoaW50KSAoaW5zdHItPmFkZHIgPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CisJcGFnZSA9IChpbnQpKGluc3RyLT5hZGRyID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCWNoaXBuciA9IChpbnQpKGluc3RyLT5hZGRyID4+IGNoaXAtPmNoaXBfc2hpZnQpOwogCiAJLyogQ2FsY3VsYXRlIHBhZ2VzIGluIGVhY2ggYmxvY2sgKi8KLQlwYWdlc19wZXJfYmxvY2sgPSAxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CisJcGFnZXNfcGVyX2Jsb2NrID0gMSA8PCAoY2hpcC0+cGh5c19lcmFzZV9zaGlmdCAtIGNoaXAtPnBhZ2Vfc2hpZnQpOwogCiAJLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKLQkvKiBDaGVjayB0aGUgV1AgYml0ICovCiAJLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwogCWlmIChuYW5kX2NoZWNrX3dwKG10ZCkpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBEZXZpY2UgaXMgd3JpdGUgcHJvdGVjdGVkISEhXG4iKTsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6ICIKKwkJICAgICAgIkRldmljZSBpcyB3cml0ZSBwcm90ZWN0ZWQhISFcbiIpOwogCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwogCQlnb3RvIGVyYXNlX2V4aXQ7CiAJfQogCi0JLyogaWYgQkJUIHJlcXVpcmVzIHJlZnJlc2gsIHNldCB0aGUgQkJUIHBhZ2UgbWFzayB0byBzZWUgaWYgdGhlIEJCVCBzaG91bGQgYmUgcmV3cml0dGVuICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBCQlRfQVVUT19SRUZSRVNIKSB7Ci0JCWJidF9tYXNrZWRfcGFnZSA9IHRoaXMtPmJidF90ZC0+cGFnZXNbY2hpcG5yXSAmIEJCVF9QQUdFX01BU0s7Ci0JfSBlbHNlIHsKLQkJYmJ0X21hc2tlZF9wYWdlID0gMHhmZmZmZmZmZjsJLyogc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZyAqLwotCX0KKwkvKgorCSAqIElmIEJCVCByZXF1aXJlcyByZWZyZXNoLCBzZXQgdGhlIEJCVCBwYWdlIG1hc2sgdG8gc2VlIGlmIHRoZSBCQlQKKwkgKiBzaG91bGQgYmUgcmV3cml0dGVuLiBPdGhlcndpc2UgdGhlIG1hc2sgaXMgc2V0IHRvIDB4ZmZmZmZmZmYgd2hpY2gKKwkgKiBjYW4gbm90IGJlIG1hdGNoZWQuIFRoaXMgaXMgYWxzbyBkb25lIHdoZW4gdGhlIGJidCBpcyBhY3R1YWxseQorCSAqIGVyYXNlZCB0byBhdm9pZCByZWN1c3JzaXZlIHVwZGF0ZXMKKwkgKi8KKwlpZiAoY2hpcC0+b3B0aW9ucyAmIEJCVF9BVVRPX1JFRlJFU0ggJiYgIWFsbG93YmJ0KQorCQliYnRfbWFza2VkX3BhZ2UgPSBjaGlwLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0gJiBCQlRfUEFHRV9NQVNLOwogCiAJLyogTG9vcCB0aHJvdWdoIHRoZSBwYWdlcyAqLwogCWxlbiA9IGluc3RyLT5sZW47CkBAIC0yMTY0LDY0ICsxOTMzLDc3IEBACiAJaW5zdHItPnN0YXRlID0gTVREX0VSQVNJTkc7CiAKIAl3aGlsZSAobGVuKSB7Ci0JCS8qIENoZWNrIGlmIHdlIGhhdmUgYSBiYWQgYmxvY2ssIHdlIGRvIG5vdCBlcmFzZSBiYWQgYmxvY2tzICEgKi8KLQkJaWYgKG5hbmRfYmxvY2tfY2hlY2tiYWQobXRkLCAoKGxvZmZfdCkgcGFnZSkgPDwgdGhpcy0+cGFnZV9zaGlmdCwgMCwgYWxsb3diYnQpKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9lcmFzZTogYXR0ZW1wdCB0byBlcmFzZSBhIGJhZCBibG9jayBhdCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7CisJCS8qCisJCSAqIGhlY2sgaWYgd2UgaGF2ZSBhIGJhZCBibG9jaywgd2UgZG8gbm90IGVyYXNlIGJhZCBibG9ja3MgIQorCQkgKi8KKwkJaWYgKG5hbmRfYmxvY2tfY2hlY2tiYWQobXRkLCAoKGxvZmZfdCkgcGFnZSkgPDwKKwkJCQkJY2hpcC0+cGFnZV9zaGlmdCwgMCwgYWxsb3diYnQpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuYW5kX2VyYXNlOiBhdHRlbXB0IHRvIGVyYXNlIGEgIgorCQkJICAgICAgICJiYWQgYmxvY2sgYXQgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKIAkJCWdvdG8gZXJhc2VfZXhpdDsKIAkJfQogCi0JCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIGVyYXNlIHRoZSBibG9jayB3aGljaCBjb250YWlucwotCQkgICB0aGUgY3VycmVudCBjYWNoZWQgcGFnZSAqLwotCQlpZiAocGFnZSA8PSB0aGlzLT5wYWdlYnVmICYmIHRoaXMtPnBhZ2VidWYgPCAocGFnZSArIHBhZ2VzX3Blcl9ibG9jaykpCi0JCQl0aGlzLT5wYWdlYnVmID0gLTE7CisJCS8qCisJCSAqIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIGVyYXNlIHRoZSBibG9jayB3aGljaAorCQkgKiBjb250YWlucyB0aGUgY3VycmVudCBjYWNoZWQgcGFnZQorCQkgKi8KKwkJaWYgKHBhZ2UgPD0gY2hpcC0+cGFnZWJ1ZiAmJiBjaGlwLT5wYWdlYnVmIDwKKwkJICAgIChwYWdlICsgcGFnZXNfcGVyX2Jsb2NrKSkKKwkJCWNoaXAtPnBhZ2VidWYgPSAtMTsKIAotCQl0aGlzLT5lcmFzZV9jbWQgKG10ZCwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKKwkJY2hpcC0+ZXJhc2VfY21kKG10ZCwgcGFnZSAmIGNoaXAtPnBhZ2VtYXNrKTsKIAotCQlzdGF0dXMgPSB0aGlzLT53YWl0ZnVuYyAobXRkLCB0aGlzLCBGTF9FUkFTSU5HKTsKKwkJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsKIAotCQkvKiBTZWUgaWYgb3BlcmF0aW9uIGZhaWxlZCBhbmQgYWRkaXRpb25hbCBzdGF0dXMgY2hlY2tzIGFyZSBhdmFpbGFibGUgKi8KLQkJaWYgKChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSAmJiAodGhpcy0+ZXJyc3RhdCkpIHsKLQkJCXN0YXR1cyA9IHRoaXMtPmVycnN0YXQobXRkLCB0aGlzLCBGTF9FUkFTSU5HLCBzdGF0dXMsIHBhZ2UpOwotCQl9CisJCS8qCisJCSAqIFNlZSBpZiBvcGVyYXRpb24gZmFpbGVkIGFuZCBhZGRpdGlvbmFsIHN0YXR1cyBjaGVja3MgYXJlCisJCSAqIGF2YWlsYWJsZQorCQkgKi8KKwkJaWYgKChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSAmJiAoY2hpcC0+ZXJyc3RhdCkpCisJCQlzdGF0dXMgPSBjaGlwLT5lcnJzdGF0KG10ZCwgY2hpcCwgRkxfRVJBU0lORywKKwkJCQkJICAgICAgIHN0YXR1cywgcGFnZSk7CiAKIAkJLyogU2VlIGlmIGJsb2NrIGVyYXNlIHN1Y2NlZWRlZCAqLwogCQlpZiAoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgewotCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiICJGYWlsZWQgZXJhc2UsIHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiCisJCQkgICAgICAiRmFpbGVkIGVyYXNlLCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7CiAJCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwotCQkJaW5zdHItPmZhaWxfYWRkciA9IChwYWdlIDw8IHRoaXMtPnBhZ2Vfc2hpZnQpOworCQkJaW5zdHItPmZhaWxfYWRkciA9IChwYWdlIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpOwogCQkJZ290byBlcmFzZV9leGl0OwogCQl9CiAKLQkJLyogaWYgQkJUIHJlcXVpcmVzIHJlZnJlc2gsIHNldCB0aGUgQkJUIHJld3JpdGUgZmxhZyB0byB0aGUgcGFnZSBiZWluZyBlcmFzZWQgKi8KLQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBCQlRfQVVUT19SRUZSRVNIKSB7Ci0JCQlpZiAoKChwYWdlICYgQkJUX1BBR0VfTUFTSykgPT0gYmJ0X21hc2tlZF9wYWdlKSAmJgotCQkJICAgICAocGFnZSAhPSB0aGlzLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0pKSB7Ci0JCQkJcmV3cml0ZV9iYnRbY2hpcG5yXSA9IChwYWdlIDw8IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCQkJfQotCQl9CisJCS8qCisJCSAqIElmIEJCVCByZXF1aXJlcyByZWZyZXNoLCBzZXQgdGhlIEJCVCByZXdyaXRlIGZsYWcgdG8gdGhlCisJCSAqIHBhZ2UgYmVpbmcgZXJhc2VkCisJCSAqLworCQlpZiAoYmJ0X21hc2tlZF9wYWdlICE9IDB4ZmZmZmZmZmYgJiYKKwkJICAgIChwYWdlICYgQkJUX1BBR0VfTUFTSykgPT0gYmJ0X21hc2tlZF9wYWdlKQorCQkJICAgIHJld3JpdGVfYmJ0W2NoaXBucl0gPSAocGFnZSA8PCBjaGlwLT5wYWdlX3NoaWZ0KTsKIAogCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzIGFuZCBkZWNyZW1lbnQgbGVuZ3RoICovCi0JCWxlbiAtPSAoMSA8PCB0aGlzLT5waHlzX2VyYXNlX3NoaWZ0KTsKKwkJbGVuIC09ICgxIDw8IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQpOwogCQlwYWdlICs9IHBhZ2VzX3Blcl9ibG9jazsKIAogCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCWlmIChsZW4gJiYgIShwYWdlICYgdGhpcy0+cGFnZW1hc2spKSB7CisJCWlmIChsZW4gJiYgIShwYWdlICYgY2hpcC0+cGFnZW1hc2spKSB7CiAJCQljaGlwbnIrKzsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKLQkJCS8qIGlmIEJCVCByZXF1aXJlcyByZWZyZXNoIGFuZCBCQlQtUEVSQ0hJUCwKLQkJCSAqICAgc2V0IHRoZSBCQlQgcGFnZSBtYXNrIHRvIHNlZSBpZiB0aGlzIEJCVCBzaG91bGQgYmUgcmV3cml0dGVuICovCi0JCQlpZiAoKHRoaXMtPm9wdGlvbnMgJiBCQlRfQVVUT19SRUZSRVNIKSAmJiAodGhpcy0+YmJ0X3RkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkpIHsKLQkJCQliYnRfbWFza2VkX3BhZ2UgPSB0aGlzLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0gJiBCQlRfUEFHRV9NQVNLOwotCQkJfQotCisJCQkvKgorCQkJICogSWYgQkJUIHJlcXVpcmVzIHJlZnJlc2ggYW5kIEJCVC1QRVJDSElQLCBzZXQgdGhlIEJCVAorCQkJICogcGFnZSBtYXNrIHRvIHNlZSBpZiB0aGlzIEJCVCBzaG91bGQgYmUgcmV3cml0dGVuCisJCQkgKi8KKwkJCWlmIChiYnRfbWFza2VkX3BhZ2UgIT0gMHhmZmZmZmZmZiAmJgorCQkJICAgIChjaGlwLT5iYnRfdGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9QRVJDSElQKSkKKwkJCQliYnRfbWFza2VkX3BhZ2UgPSBjaGlwLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0gJgorCQkJCQlCQlRfUEFHRV9NQVNLOwogCQl9CiAJfQogCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9ET05FOwogCi1lcmFzZV9leGl0OgorIGVyYXNlX2V4aXQ6CiAKIAlyZXQgPSBpbnN0ci0+c3RhdGUgPT0gTVREX0VSQVNFX0RPTkUgPyAwIDogLUVJTzsKIAkvKiBEbyBjYWxsIGJhY2sgZnVuY3Rpb24gKi8KQEAgLTIyMzEsMTYgKzIwMTMsMjEgQEAKIAkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCiAJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCi0JLyogaWYgQkJUIHJlcXVpcmVzIHJlZnJlc2ggYW5kIGVyYXNlIHdhcyBzdWNjZXNzZnVsLCByZXdyaXRlIGFueSBzZWxlY3RlZCBiYWQgYmxvY2sgdGFibGVzICovCi0JaWYgKCh0aGlzLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCkgJiYgKCFyZXQpKSB7Ci0JCWZvciAoY2hpcG5yID0gMDsgY2hpcG5yIDwgdGhpcy0+bnVtY2hpcHM7IGNoaXBucisrKSB7Ci0JCQlpZiAocmV3cml0ZV9iYnRbY2hpcG5yXSkgewotCQkJCS8qIHVwZGF0ZSB0aGUgQkJUIGZvciBjaGlwICovCi0JCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlX25hbmQ6IG5hbmRfdXBkYXRlX2JidCAoJWQ6MHglMHggMHglMHgpXG4iLAotCQkJCQljaGlwbnIsIHJld3JpdGVfYmJ0W2NoaXBucl0sIHRoaXMtPmJidF90ZC0+cGFnZXNbY2hpcG5yXSk7Ci0JCQkJbmFuZF91cGRhdGVfYmJ0IChtdGQsIHJld3JpdGVfYmJ0W2NoaXBucl0pOwotCQkJfQotCQl9CisJLyoKKwkgKiBJZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCBhbmQgZXJhc2Ugd2FzIHN1Y2Nlc3NmdWwsIHJld3JpdGUgYW55CisJICogc2VsZWN0ZWQgYmFkIGJsb2NrIHRhYmxlcworCSAqLworCWlmIChiYnRfbWFza2VkX3BhZ2UgPT0gMHhmZmZmZmZmZiB8fCByZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGNoaXBuciA9IDA7IGNoaXBuciA8IGNoaXAtPm51bWNoaXBzOyBjaGlwbnIrKykgeworCQlpZiAoIXJld3JpdGVfYmJ0W2NoaXBucl0pCisJCQljb250aW51ZTsKKwkJLyogdXBkYXRlIHRoZSBCQlQgZm9yIGNoaXAgKi8KKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2VfbmFuZDogbmFuZF91cGRhdGVfYmJ0ICIKKwkJICAgICAgIiglZDoweCUweCAweCUweClcbiIsIGNoaXBuciwgcmV3cml0ZV9iYnRbY2hpcG5yXSwKKwkJICAgICAgY2hpcC0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdKTsKKwkJbmFuZF91cGRhdGVfYmJ0KG10ZCwgcmV3cml0ZV9iYnRbY2hpcG5yXSk7CiAJfQogCiAJLyogUmV0dXJuIG1vcmUgb3IgbGVzcyBoYXBweSAqLwpAQCAtMjI1Myw1MSArMjA0MCw1MCBAQAogICoKICAqIFN5bmMgaXMgYWN0dWFsbHkgYSB3YWl0IGZvciBjaGlwIHJlYWR5IGZ1bmN0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfc3luYyAoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdm9pZCBuYW5kX3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3N5bmM6IGNhbGxlZFxuIik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfc3luYzogY2FsbGVkXG4iKTsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9TWU5DSU5HKTsKKwluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9TWU5DSU5HKTsKIAkvKiBSZWxlYXNlIGl0IGFuZCBnbyBiYWNrICovCi0JbmFuZF9yZWxlYXNlX2RldmljZSAobXRkKTsKKwluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiB9CiAKLQogLyoqCi0gKiBuYW5kX2Jsb2NrX2lzYmFkIC0gW01URCBJbnRlcmZhY2VdIENoZWNrIHdoZXRoZXIgdGhlIGJsb2NrIGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgYmFkCisgKiBuYW5kX2Jsb2NrX2lzYmFkIC0gW01URCBJbnRlcmZhY2VdIENoZWNrIGlmIGJsb2NrIGF0IG9mZnNldCBpcyBiYWQKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAb2ZzOglvZmZzZXQgcmVsYXRpdmUgdG8gbXRkIHN0YXJ0CiAgKi8KLXN0YXRpYyBpbnQgbmFuZF9ibG9ja19pc2JhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCitzdGF0aWMgaW50IG5hbmRfYmxvY2tfaXNiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKQogewogCS8qIENoZWNrIGZvciBpbnZhbGlkIG9mZnNldCAqLwotCWlmIChvZnMgPiBtdGQtPnNpemUpCisJaWYgKG9mZnMgPiBtdGQtPnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIG5hbmRfYmxvY2tfY2hlY2tiYWQgKG10ZCwgb2ZzLCAxLCAwKTsKKwlyZXR1cm4gbmFuZF9ibG9ja19jaGVja2JhZChtdGQsIG9mZnMsIDEsIDApOwogfQogCiAvKioKLSAqIG5hbmRfYmxvY2tfbWFya2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBNYXJrIHRoZSBibG9jayBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGFzIGJhZAorICogbmFuZF9ibG9ja19tYXJrYmFkIC0gW01URCBJbnRlcmZhY2VdIE1hcmsgYmxvY2sgYXQgdGhlIGdpdmVuIG9mZnNldCBhcyBiYWQKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAb2ZzOglvZmZzZXQgcmVsYXRpdmUgdG8gbXRkIHN0YXJ0CiAgKi8KLXN0YXRpYyBpbnQgbmFuZF9ibG9ja19tYXJrYmFkIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKK3N0YXRpYyBpbnQgbmFuZF9ibG9ja19tYXJrYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAlpbnQgcmV0OwogCi0gICAgICAgIGlmICgocmV0ID0gbmFuZF9ibG9ja19pc2JhZChtdGQsIG9mcykpKSB7Ci0gICAgICAgIAkvKiBJZiBpdCB3YXMgYmFkIGFscmVhZHksIHJldHVybiBzdWNjZXNzIGFuZCBkbyBub3RoaW5nLiAqLworCWlmICgocmV0ID0gbmFuZF9ibG9ja19pc2JhZChtdGQsIG9mcykpKSB7CisJCS8qIElmIGl0IHdhcyBiYWQgYWxyZWFkeSwgcmV0dXJuIHN1Y2Nlc3MgYW5kIGRvIG5vdGhpbmcuICovCiAJCWlmIChyZXQgPiAwKQogCQkJcmV0dXJuIDA7Ci0gICAgICAgIAlyZXR1cm4gcmV0OwotICAgICAgICB9CisJCXJldHVybiByZXQ7CisJfQogCi0JcmV0dXJuIHRoaXMtPmJsb2NrX21hcmtiYWQobXRkLCBvZnMpOworCXJldHVybiBjaGlwLT5ibG9ja19tYXJrYmFkKG10ZCwgb2ZzKTsKIH0KIAogLyoqCkBAIC0yMzA2LDkgKzIwOTIsOSBAQAogICovCiBzdGF0aWMgaW50IG5hbmRfc3VzcGVuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlyZXR1cm4gbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1BNX1NVU1BFTkRFRCk7CisJcmV0dXJuIG5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1BNX1NVU1BFTkRFRCk7CiB9CiAKIC8qKgpAQCAtMjMxNywzNzMgKzIxMDMsMzg1IEBACiAgKi8KIHN0YXRpYyB2b2lkIG5hbmRfcmVzdW1lKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWlmICh0aGlzLT5zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpCisJaWYgKGNoaXAtPnN0YXRlID09IEZMX1BNX1NVU1BFTkRFRCkKIAkJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJyZXN1bWUoKSBjYWxsZWQgZm9yIHRoZSBjaGlwIHdoaWNoIGlzIG5vdCAiCi0JCQkJImluIHN1c3BlbmRlZCBzdGF0ZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAibmFuZF9yZXN1bWUoKSBjYWxsZWQgZm9yIGEgY2hpcCB3aGljaCBpcyBub3QgIgorCQkgICAgICAgImluIHN1c3BlbmRlZCBzdGF0ZVxuIik7Cit9CisKKy8qCisgKiBTZXQgZGVmYXVsdCBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgbmFuZF9zZXRfZGVmYXVsdHMoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IGJ1c3cpCit7CisJLyogY2hlY2sgZm9yIHByb3BlciBjaGlwX2RlbGF5IHNldHVwLCBzZXQgMjB1cyBpZiBub3QgKi8KKwlpZiAoIWNoaXAtPmNoaXBfZGVsYXkpCisJCWNoaXAtPmNoaXBfZGVsYXkgPSAyMDsKKworCS8qIGNoZWNrLCBpZiBhIHVzZXIgc3VwcGxpZWQgY29tbWFuZCBmdW5jdGlvbiBnaXZlbiAqLworCWlmIChjaGlwLT5jbWRmdW5jID09IE5VTEwpCisJCWNoaXAtPmNtZGZ1bmMgPSBuYW5kX2NvbW1hbmQ7CisKKwkvKiBjaGVjaywgaWYgYSB1c2VyIHN1cHBsaWVkIHdhaXQgZnVuY3Rpb24gZ2l2ZW4gKi8KKwlpZiAoY2hpcC0+d2FpdGZ1bmMgPT0gTlVMTCkKKwkJY2hpcC0+d2FpdGZ1bmMgPSBuYW5kX3dhaXQ7CisKKwlpZiAoIWNoaXAtPnNlbGVjdF9jaGlwKQorCQljaGlwLT5zZWxlY3RfY2hpcCA9IG5hbmRfc2VsZWN0X2NoaXA7CisJaWYgKCFjaGlwLT5yZWFkX2J5dGUpCisJCWNoaXAtPnJlYWRfYnl0ZSA9IGJ1c3cgPyBuYW5kX3JlYWRfYnl0ZTE2IDogbmFuZF9yZWFkX2J5dGU7CisJaWYgKCFjaGlwLT5yZWFkX3dvcmQpCisJCWNoaXAtPnJlYWRfd29yZCA9IG5hbmRfcmVhZF93b3JkOworCWlmICghY2hpcC0+YmxvY2tfYmFkKQorCQljaGlwLT5ibG9ja19iYWQgPSBuYW5kX2Jsb2NrX2JhZDsKKwlpZiAoIWNoaXAtPmJsb2NrX21hcmtiYWQpCisJCWNoaXAtPmJsb2NrX21hcmtiYWQgPSBuYW5kX2RlZmF1bHRfYmxvY2tfbWFya2JhZDsKKwlpZiAoIWNoaXAtPndyaXRlX2J1ZikKKwkJY2hpcC0+d3JpdGVfYnVmID0gYnVzdyA/IG5hbmRfd3JpdGVfYnVmMTYgOiBuYW5kX3dyaXRlX2J1ZjsKKwlpZiAoIWNoaXAtPnJlYWRfYnVmKQorCQljaGlwLT5yZWFkX2J1ZiA9IGJ1c3cgPyBuYW5kX3JlYWRfYnVmMTYgOiBuYW5kX3JlYWRfYnVmOworCWlmICghY2hpcC0+dmVyaWZ5X2J1ZikKKwkJY2hpcC0+dmVyaWZ5X2J1ZiA9IGJ1c3cgPyBuYW5kX3ZlcmlmeV9idWYxNiA6IG5hbmRfdmVyaWZ5X2J1ZjsKKwlpZiAoIWNoaXAtPnNjYW5fYmJ0KQorCQljaGlwLT5zY2FuX2JidCA9IG5hbmRfZGVmYXVsdF9iYnQ7CisKKwlpZiAoIWNoaXAtPmNvbnRyb2xsZXIpIHsKKwkJY2hpcC0+Y29udHJvbGxlciA9ICZjaGlwLT5od2NvbnRyb2w7CisJCXNwaW5fbG9ja19pbml0KCZjaGlwLT5jb250cm9sbGVyLT5sb2NrKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hpcC0+Y29udHJvbGxlci0+d3EpOworCX0KIAogfQogCisvKgorICogR2V0IHRoZSBmbGFzaCBhbmQgbWFudWZhY3R1cmVyIGlkIGFuZCBsb29rdXAgaWYgdGhlIHR5cGUgaXMgc3VwcG9ydGVkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKm5hbmRfZ2V0X2ZsYXNoX3R5cGUoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCQkgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJCQkgIGludCBidXN3LCBpbnQgKm1hZl9pZCkKK3sKKwlzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKnR5cGUgPSBOVUxMOworCWludCBpLCBkZXZfaWQsIG1hZl9pZHg7CisKKwkvKiBTZWxlY3QgdGhlIGRldmljZSAqLworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgMCk7CisKKwkvKiBTZW5kIHRoZSBjb21tYW5kIGZvciByZWFkaW5nIGRldmljZSBJRCAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDB4MDAsIC0xKTsKKworCS8qIFJlYWQgbWFudWZhY3R1cmVyIGFuZCBkZXZpY2UgSURzICovCisJKm1hZl9pZCA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCWRldl9pZCA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCisJLyogTG9va3VwIHRoZSBmbGFzaCBpZCAqLworCWZvciAoaSA9IDA7IG5hbmRfZmxhc2hfaWRzW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7CisJCWlmIChkZXZfaWQgPT0gbmFuZF9mbGFzaF9pZHNbaV0uaWQpIHsKKwkJCXR5cGUgPSAgJm5hbmRfZmxhc2hfaWRzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXR5cGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJaWYgKCFtdGQtPm5hbWUpCisJCW10ZC0+bmFtZSA9IHR5cGUtPm5hbWU7CisKKwljaGlwLT5jaGlwc2l6ZSA9IHR5cGUtPmNoaXBzaXplIDw8IDIwOworCisJLyogTmV3ZXIgZGV2aWNlcyBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gYWRkaXRpb25hbCBpZCBieXRlcyAqLworCWlmICghdHlwZS0+cGFnZXNpemUpIHsKKwkJaW50IGV4dGlkOworCQkvKiBUaGUgM3JkIGlkIGJ5dGUgY29udGFpbnMgbm9uIHJlbGV2YW50IGRhdGEgQVRNICovCisJCWV4dGlkID0gY2hpcC0+cmVhZF9ieXRlKG10ZCk7CisJCS8qIFRoZSA0dGggaWQgYnl0ZSBpcyB0aGUgaW1wb3J0YW50IG9uZSAqLworCQlleHRpZCA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCQkvKiBDYWxjIHBhZ2VzaXplICovCisJCW10ZC0+d3JpdGVzaXplID0gMTAyNCA8PCAoZXh0aWQgJiAweDMpOworCQlleHRpZCA+Pj0gMjsKKwkJLyogQ2FsYyBvb2JzaXplICovCisJCW10ZC0+b29ic2l6ZSA9ICg4IDw8IChleHRpZCAmIDB4MDEpKSAqIChtdGQtPndyaXRlc2l6ZSA+PiA5KTsKKwkJZXh0aWQgPj49IDI7CisJCS8qIENhbGMgYmxvY2tzaXplLiBCbG9ja3NpemUgaXMgbXVsdGlwbGVzIG9mIDY0S2lCICovCisJCW10ZC0+ZXJhc2VzaXplID0gKDY0ICogMTAyNCkgPDwgKGV4dGlkICYgMHgwMyk7CisJCWV4dGlkID4+PSAyOworCQkvKiBHZXQgYnVzd2lkdGggaW5mb3JtYXRpb24gKi8KKwkJYnVzdyA9IChleHRpZCAmIDB4MDEpID8gTkFORF9CVVNXSURUSF8xNiA6IDA7CisKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPbGQgZGV2aWNlcyBoYXZlIGNoaXAgZGF0YSBoYXJkY29kZWQgaW4gdGhlIGRldmljZSBpZCB0YWJsZQorCQkgKi8KKwkJbXRkLT5lcmFzZXNpemUgPSB0eXBlLT5lcmFzZXNpemU7CisJCW10ZC0+d3JpdGVzaXplID0gdHlwZS0+cGFnZXNpemU7CisJCW10ZC0+b29ic2l6ZSA9IG10ZC0+d3JpdGVzaXplIC8gMzI7CisJCWJ1c3cgPSB0eXBlLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNjsKKwl9CisKKwkvKiBUcnkgdG8gaWRlbnRpZnkgbWFudWZhY3R1cmVyICovCisJZm9yIChtYWZfaWR4ID0gMDsgbmFuZF9tYW51Zl9pZHNbbWFmX2lkeF0uaWQgIT0gMHgwOyBtYWZfaWQrKykgeworCQlpZiAobmFuZF9tYW51Zl9pZHNbbWFmX2lkeF0uaWQgPT0gKm1hZl9pZCkKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogQ2hlY2ssIGlmIGJ1c3dpZHRoIGlzIGNvcnJlY3QuIEhhcmR3YXJlIGRyaXZlcnMgc2hvdWxkIHNldAorCSAqIGNoaXAgY29ycmVjdCAhCisJICovCisJaWYgKGJ1c3cgIT0gKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKKwkJICAgICAgICIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgKm1hZl9pZCwKKwkJICAgICAgIGRldl9pZCwgbmFuZF9tYW51Zl9pZHNbbWFmX2lkeF0ubmFtZSwgbXRkLT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTkFORCBidXMgd2lkdGggJWQgaW5zdGVhZCAlZCBiaXRcbiIsCisJCSAgICAgICAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpID8gMTYgOiA4LAorCQkgICAgICAgYnVzdyA/IDE2IDogOCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCS8qIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBzaGlmdCBmcm9tIHRoZSBwYWdlIHNpemUgKi8KKwljaGlwLT5wYWdlX3NoaWZ0ID0gZmZzKG10ZC0+d3JpdGVzaXplKSAtIDE7CisJLyogQ29udmVydCBjaGlwc2l6ZSB0byBudW1iZXIgb2YgcGFnZXMgcGVyIGNoaXAgLTEuICovCisJY2hpcC0+cGFnZW1hc2sgPSAoY2hpcC0+Y2hpcHNpemUgPj4gY2hpcC0+cGFnZV9zaGlmdCkgLSAxOworCisJY2hpcC0+YmJ0X2VyYXNlX3NoaWZ0ID0gY2hpcC0+cGh5c19lcmFzZV9zaGlmdCA9CisJCWZmcyhtdGQtPmVyYXNlc2l6ZSkgLSAxOworCWNoaXAtPmNoaXBfc2hpZnQgPSBmZnMoY2hpcC0+Y2hpcHNpemUpIC0gMTsKKworCS8qIFNldCB0aGUgYmFkIGJsb2NrIHBvc2l0aW9uICovCisJY2hpcC0+YmFkYmxvY2twb3MgPSBtdGQtPndyaXRlc2l6ZSA+IDUxMiA/CisJCU5BTkRfTEFSR0VfQkFEQkxPQ0tfUE9TIDogTkFORF9TTUFMTF9CQURCTE9DS19QT1M7CisKKwkvKiBHZXQgY2hpcCBvcHRpb25zLCBwcmVzZXJ2ZSBub24gY2hpcCBiYXNlZCBvcHRpb25zICovCisJY2hpcC0+b3B0aW9ucyAmPSB+TkFORF9DSElQT1BUSU9OU19NU0s7CisJY2hpcC0+b3B0aW9ucyB8PSB0eXBlLT5vcHRpb25zICYgTkFORF9DSElQT1BUSU9OU19NU0s7CisKKwkvKgorCSAqIFNldCBjaGlwIGFzIGEgZGVmYXVsdC4gQm9hcmQgZHJpdmVycyBjYW4gb3ZlcnJpZGUgaXQsIGlmIG5lY2Vzc2FyeQorCSAqLworCWNoaXAtPm9wdGlvbnMgfD0gTkFORF9OT19BVVRPSU5DUjsKKworCS8qIENoZWNrIGlmIGNoaXAgaXMgYSBub3QgYSBzYW1zdW5nIGRldmljZS4gRG8gbm90IGNsZWFyIHRoZQorCSAqIG9wdGlvbnMgZm9yIGNoaXBzIHdoaWNoIGFyZSBub3QgaGF2aW5nIGFuIGV4dGVuZGVkIGlkLgorCSAqLworCWlmICgqbWFmX2lkICE9IE5BTkRfTUZSX1NBTVNVTkcgJiYgIXR5cGUtPnBhZ2VzaXplKQorCQljaGlwLT5vcHRpb25zICY9IH5OQU5EX1NBTVNVTkdfTFBfT1BUSU9OUzsKKworCS8qIENoZWNrIGZvciBBTkQgY2hpcHMgd2l0aCA0IHBhZ2UgcGxhbmVzICovCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EXzRQQUdFX0FSUkFZKQorCQljaGlwLT5lcmFzZV9jbWQgPSBtdWx0aV9lcmFzZV9jbWQ7CisJZWxzZQorCQljaGlwLT5lcmFzZV9jbWQgPSBzaW5nbGVfZXJhc2VfY21kOworCisJLyogRG8gbm90IHJlcGxhY2UgdXNlciBzdXBwbGllZCBjb21tYW5kIGZ1bmN0aW9uICEgKi8KKwlpZiAobXRkLT53cml0ZXNpemUgPiA1MTIgJiYgY2hpcC0+Y21kZnVuYyA9PSBuYW5kX2NvbW1hbmQpCisJCWNoaXAtPmNtZGZ1bmMgPSBuYW5kX2NvbW1hbmRfbHA7CisKKwlwcmludGsoS0VSTl9JTkZPICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKKwkgICAgICAgIiAweCUwMngsIENoaXAgSUQ6IDB4JTAyeCAoJXMgJXMpXG4iLCAqbWFmX2lkLCBkZXZfaWQsCisJICAgICAgIG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLm5hbWUsIHR5cGUtPm5hbWUpOworCisJcmV0dXJuIHR5cGU7Cit9CisKKy8qIG1vZHVsZV90ZXh0X2FkZHJlc3MoKSBpc24ndCBleHBvcnRlZCwgYW5kIGl0J3MgbW9zdGx5IGEgcG9pbnRsZXNzCisgICB0ZXN0IGlmIHRoaXMgaXMgYSBtb2R1bGUgX2FueXdheV8gLS0gdGhleSdkIGhhdmUgdG8gdHJ5IF9yZWFsbHlfIGhhcmQKKyAgIHRvIGNhbGwgdXMgZnJvbSBpbi1rZXJuZWwgY29kZSBpZiB0aGUgY29yZSBOQU5EIHN1cHBvcnQgaXMgbW9kdWxhci4gKi8KKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgY2FsbGVyX2lzX21vZHVsZSgpICgxKQorI2Vsc2UKKyNkZWZpbmUgY2FsbGVyX2lzX21vZHVsZSgpIFwKKwltb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKyNlbmRpZgogCiAvKioKICAqIG5hbmRfc2NhbiAtIFtOQU5EIEludGVyZmFjZV0gU2NhbiBmb3IgdGhlIE5BTkQgZGV2aWNlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQG1heGNoaXBzOglOdW1iZXIgb2YgY2hpcHMgdG8gc2NhbiBmb3IKICAqCi0gKiBUaGlzIGZpbGxzIG91dCBhbGwgdGhlIG5vdCBpbml0aWFsaXplZCBmdW5jdGlvbiBwb2ludGVycworICogVGhpcyBmaWxscyBvdXQgYWxsIHRoZSB1bmluaXRpYWxpemVkIGZ1bmN0aW9uIHBvaW50ZXJzCiAgKiB3aXRoIHRoZSBkZWZhdWx0cy4KICAqIFRoZSBmbGFzaCBJRCBpcyByZWFkIGFuZCB0aGUgbXRkL2NoaXAgc3RydWN0dXJlcyBhcmUKLSAqIGZpbGxlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuIEJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBpZgotICogdGhleSBhcmUgbm90IHByb3ZpZGVkIGJ5IHRoZSBib2FyZCBkcml2ZXIKKyAqIGZpbGxlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuCisgKiBUaGUgbXRkLT5vd25lciBmaWVsZCBtdXN0IGJlIHNldCB0byB0aGUgbW9kdWxlIG9mIHRoZSBjYWxsZXIKICAqCiAgKi8KLWludCBuYW5kX3NjYW4gKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbWF4Y2hpcHMpCitpbnQgbmFuZF9zY2FuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbWF4Y2hpcHMpCiB7Ci0JaW50IGksIG5hbmRfbWFmX2lkLCBuYW5kX2Rldl9pZCwgYnVzdywgbWFmX2lkOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IGksIGJ1c3csIG5hbmRfbWFmX2lkOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfZmxhc2hfZGV2ICp0eXBlOwogCi0JLyogR2V0IGJ1c3dpZHRoIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBmdW5jdGlvbnMqLwotCWJ1c3cgPSB0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNjsKLQotCS8qIGNoZWNrIGZvciBwcm9wZXIgY2hpcF9kZWxheSBzZXR1cCwgc2V0IDIwdXMgaWYgbm90ICovCi0JaWYgKCF0aGlzLT5jaGlwX2RlbGF5KQotCQl0aGlzLT5jaGlwX2RlbGF5ID0gMjA7Ci0KLQkvKiBjaGVjaywgaWYgYSB1c2VyIHN1cHBsaWVkIGNvbW1hbmQgZnVuY3Rpb24gZ2l2ZW4gKi8KLQlpZiAodGhpcy0+Y21kZnVuYyA9PSBOVUxMKQotCQl0aGlzLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kOwotCi0JLyogY2hlY2ssIGlmIGEgdXNlciBzdXBwbGllZCB3YWl0IGZ1bmN0aW9uIGdpdmVuICovCi0JaWYgKHRoaXMtPndhaXRmdW5jID09IE5VTEwpCi0JCXRoaXMtPndhaXRmdW5jID0gbmFuZF93YWl0OwotCi0JaWYgKCF0aGlzLT5zZWxlY3RfY2hpcCkKLQkJdGhpcy0+c2VsZWN0X2NoaXAgPSBuYW5kX3NlbGVjdF9jaGlwOwotCWlmICghdGhpcy0+d3JpdGVfYnl0ZSkKLQkJdGhpcy0+d3JpdGVfYnl0ZSA9IGJ1c3cgPyBuYW5kX3dyaXRlX2J5dGUxNiA6IG5hbmRfd3JpdGVfYnl0ZTsKLQlpZiAoIXRoaXMtPnJlYWRfYnl0ZSkKLQkJdGhpcy0+cmVhZF9ieXRlID0gYnVzdyA/IG5hbmRfcmVhZF9ieXRlMTYgOiBuYW5kX3JlYWRfYnl0ZTsKLQlpZiAoIXRoaXMtPndyaXRlX3dvcmQpCi0JCXRoaXMtPndyaXRlX3dvcmQgPSBuYW5kX3dyaXRlX3dvcmQ7Ci0JaWYgKCF0aGlzLT5yZWFkX3dvcmQpCi0JCXRoaXMtPnJlYWRfd29yZCA9IG5hbmRfcmVhZF93b3JkOwotCWlmICghdGhpcy0+YmxvY2tfYmFkKQotCQl0aGlzLT5ibG9ja19iYWQgPSBuYW5kX2Jsb2NrX2JhZDsKLQlpZiAoIXRoaXMtPmJsb2NrX21hcmtiYWQpCi0JCXRoaXMtPmJsb2NrX21hcmtiYWQgPSBuYW5kX2RlZmF1bHRfYmxvY2tfbWFya2JhZDsKLQlpZiAoIXRoaXMtPndyaXRlX2J1ZikKLQkJdGhpcy0+d3JpdGVfYnVmID0gYnVzdyA/IG5hbmRfd3JpdGVfYnVmMTYgOiBuYW5kX3dyaXRlX2J1ZjsKLQlpZiAoIXRoaXMtPnJlYWRfYnVmKQotCQl0aGlzLT5yZWFkX2J1ZiA9IGJ1c3cgPyBuYW5kX3JlYWRfYnVmMTYgOiBuYW5kX3JlYWRfYnVmOwotCWlmICghdGhpcy0+dmVyaWZ5X2J1ZikKLQkJdGhpcy0+dmVyaWZ5X2J1ZiA9IGJ1c3cgPyBuYW5kX3ZlcmlmeV9idWYxNiA6IG5hbmRfdmVyaWZ5X2J1ZjsKLQlpZiAoIXRoaXMtPnNjYW5fYmJ0KQotCQl0aGlzLT5zY2FuX2JidCA9IG5hbmRfZGVmYXVsdF9iYnQ7Ci0KLQkvKiBTZWxlY3QgdGhlIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgMCk7Ci0KLQkvKiBTZW5kIHRoZSBjb21tYW5kIGZvciByZWFkaW5nIGRldmljZSBJRCAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7Ci0KLQkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyAqLwotCW5hbmRfbWFmX2lkID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7Ci0JbmFuZF9kZXZfaWQgPSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKLQotCS8qIFByaW50IGFuZCBzdG9yZSBmbGFzaCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KLQlmb3IgKGkgPSAwOyBuYW5kX2ZsYXNoX2lkc1tpXS5uYW1lICE9IE5VTEw7IGkrKykgewotCi0JCWlmIChuYW5kX2Rldl9pZCAhPSBuYW5kX2ZsYXNoX2lkc1tpXS5pZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghbXRkLT5uYW1lKSBtdGQtPm5hbWUgPSBuYW5kX2ZsYXNoX2lkc1tpXS5uYW1lOwotCQl0aGlzLT5jaGlwc2l6ZSA9IG5hbmRfZmxhc2hfaWRzW2ldLmNoaXBzaXplIDw8IDIwOwotCi0JCS8qIE5ldyBkZXZpY2VzIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBpbiBhZGRpdGlvbmFsIGlkIGJ5dGVzICovCi0JCWlmICghbmFuZF9mbGFzaF9pZHNbaV0ucGFnZXNpemUpIHsKLQkJCWludCBleHRpZDsKLQkJCS8qIFRoZSAzcmQgaWQgYnl0ZSBjb250YWlucyBub24gcmVsZXZhbnQgZGF0YSBBVE0gKi8KLQkJCWV4dGlkID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7Ci0JCQkvKiBUaGUgNHRoIGlkIGJ5dGUgaXMgdGhlIGltcG9ydGFudCBvbmUgKi8KLQkJCWV4dGlkID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7Ci0JCQkvKiBDYWxjIHBhZ2VzaXplICovCi0JCQltdGQtPm9vYmJsb2NrID0gMTAyNCA8PCAoZXh0aWQgJiAweDMpOwotCQkJZXh0aWQgPj49IDI7Ci0JCQkvKiBDYWxjIG9vYnNpemUgKi8KLQkJCW10ZC0+b29ic2l6ZSA9ICg4IDw8IChleHRpZCAmIDB4MDEpKSAqIChtdGQtPm9vYmJsb2NrID4+IDkpOwotCQkJZXh0aWQgPj49IDI7Ci0JCQkvKiBDYWxjIGJsb2Nrc2l6ZS4gQmxvY2tzaXplIGlzIG11bHRpcGxlcyBvZiA2NEtpQiAqLwotCQkJbXRkLT5lcmFzZXNpemUgPSAoNjQgKiAxMDI0KSAgPDwgKGV4dGlkICYgMHgwMyk7Ci0JCQlleHRpZCA+Pj0gMjsKLQkJCS8qIEdldCBidXN3aWR0aCBpbmZvcm1hdGlvbiAqLwotCQkJYnVzdyA9IChleHRpZCAmIDB4MDEpID8gTkFORF9CVVNXSURUSF8xNiA6IDA7Ci0KLQkJfSBlbHNlIHsKLQkJCS8qIE9sZCBkZXZpY2VzIGhhdmUgdGhpcyBkYXRhIGhhcmRjb2RlZCBpbiB0aGUKLQkJCSAqIGRldmljZSBpZCB0YWJsZSAqLwotCQkJbXRkLT5lcmFzZXNpemUgPSBuYW5kX2ZsYXNoX2lkc1tpXS5lcmFzZXNpemU7Ci0JCQltdGQtPm9vYmJsb2NrID0gbmFuZF9mbGFzaF9pZHNbaV0ucGFnZXNpemU7Ci0JCQltdGQtPm9vYnNpemUgPSBtdGQtPm9vYmJsb2NrIC8gMzI7Ci0JCQlidXN3ID0gbmFuZF9mbGFzaF9pZHNbaV0ub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTY7Ci0JCX0KLQotCQkvKiBUcnkgdG8gaWRlbnRpZnkgbWFudWZhY3R1cmVyICovCi0JCWZvciAobWFmX2lkID0gMDsgbmFuZF9tYW51Zl9pZHNbbWFmX2lkXS5pZCAhPSAweDA7IG1hZl9pZCsrKSB7Ci0JCQlpZiAobmFuZF9tYW51Zl9pZHNbbWFmX2lkXS5pZCA9PSBuYW5kX21hZl9pZCkKLQkJCQlicmVhazsKLQkJfQotCi0JCS8qIENoZWNrLCBpZiBidXN3aWR0aCBpcyBjb3JyZWN0LiBIYXJkd2FyZSBkcml2ZXJzIHNob3VsZCBzZXQKLQkJICogdGhpcyBjb3JyZWN0ICEgKi8KLQkJaWYgKGJ1c3cgIT0gKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSkgewotCQkJcHJpbnRrIChLRVJOX0lORk8gIk5BTkQgZGV2aWNlOiBNYW51ZmFjdHVyZXIgSUQ6IgotCQkJCSIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgbmFuZF9tYWZfaWQsIG5hbmRfZGV2X2lkLAotCQkJCW5hbmRfbWFudWZfaWRzW21hZl9pZF0ubmFtZSAsIG10ZC0+bmFtZSk7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJCSJOQU5EIGJ1cyB3aWR0aCAlZCBpbnN0ZWFkICVkIGJpdFxuIiwKLQkJCQkJKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSA/IDE2IDogOCwKLQkJCQkJYnVzdyA/IDE2IDogOCk7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJLyogQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIHNoaWZ0IGZyb20gdGhlIHBhZ2Ugc2l6ZSAqLwotCQl0aGlzLT5wYWdlX3NoaWZ0ID0gZmZzKG10ZC0+b29iYmxvY2spIC0gMTsKLQkJdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0ID0gdGhpcy0+cGh5c19lcmFzZV9zaGlmdCA9IGZmcyhtdGQtPmVyYXNlc2l6ZSkgLSAxOwotCQl0aGlzLT5jaGlwX3NoaWZ0ID0gZmZzKHRoaXMtPmNoaXBzaXplKSAtIDE7Ci0KLQkJLyogU2V0IHRoZSBiYWQgYmxvY2sgcG9zaXRpb24gKi8KLQkJdGhpcy0+YmFkYmxvY2twb3MgPSBtdGQtPm9vYmJsb2NrID4gNTEyID8KLQkJCU5BTkRfTEFSR0VfQkFEQkxPQ0tfUE9TIDogTkFORF9TTUFMTF9CQURCTE9DS19QT1M7Ci0KLQkJLyogR2V0IGNoaXAgb3B0aW9ucywgcHJlc2VydmUgbm9uIGNoaXAgYmFzZWQgb3B0aW9ucyAqLwotCQl0aGlzLT5vcHRpb25zICY9IH5OQU5EX0NISVBPUFRJT05TX01TSzsKLQkJdGhpcy0+b3B0aW9ucyB8PSBuYW5kX2ZsYXNoX2lkc1tpXS5vcHRpb25zICYgTkFORF9DSElQT1BUSU9OU19NU0s7Ci0JCS8qIFNldCB0aGlzIGFzIGEgZGVmYXVsdC4gQm9hcmQgZHJpdmVycyBjYW4gb3ZlcnJpZGUgaXQsIGlmIG5lY2NlY2FyeSAqLwotCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfTk9fQVVUT0lOQ1I7Ci0JCS8qIENoZWNrIGlmIHRoaXMgaXMgYSBub3QgYSBzYW1zdW5nIGRldmljZS4gRG8gbm90IGNsZWFyIHRoZSBvcHRpb25zCi0JCSAqIGZvciBjaGlwcyB3aGljaCBhcmUgbm90IGhhdmluZyBhbiBleHRlbmRlZCBpZC4KLQkJICovCi0JCWlmIChuYW5kX21hZl9pZCAhPSBOQU5EX01GUl9TQU1TVU5HICYmICFuYW5kX2ZsYXNoX2lkc1tpXS5wYWdlc2l6ZSkKLQkJCXRoaXMtPm9wdGlvbnMgJj0gfk5BTkRfU0FNU1VOR19MUF9PUFRJT05TOwotCi0JCS8qIENoZWNrIGZvciBBTkQgY2hpcHMgd2l0aCA0IHBhZ2UgcGxhbmVzICovCi0JCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF80UEFHRV9BUlJBWSkKLQkJCXRoaXMtPmVyYXNlX2NtZCA9IG11bHRpX2VyYXNlX2NtZDsKLQkJZWxzZQotCQkJdGhpcy0+ZXJhc2VfY21kID0gc2luZ2xlX2VyYXNlX2NtZDsKLQotCQkvKiBEbyBub3QgcmVwbGFjZSB1c2VyIHN1cHBsaWVkIGNvbW1hbmQgZnVuY3Rpb24gISAqLwotCQlpZiAobXRkLT5vb2JibG9jayA+IDUxMiAmJiB0aGlzLT5jbWRmdW5jID09IG5hbmRfY29tbWFuZCkKLQkJCXRoaXMtPmNtZGZ1bmMgPSBuYW5kX2NvbW1hbmRfbHA7Ci0KLQkJcHJpbnRrIChLRVJOX0lORk8gIk5BTkQgZGV2aWNlOiBNYW51ZmFjdHVyZXIgSUQ6IgotCQkJIiAweCUwMngsIENoaXAgSUQ6IDB4JTAyeCAoJXMgJXMpXG4iLCBuYW5kX21hZl9pZCwgbmFuZF9kZXZfaWQsCi0JCQluYW5kX21hbnVmX2lkc1ttYWZfaWRdLm5hbWUgLCBuYW5kX2ZsYXNoX2lkc1tpXS5uYW1lKTsKLQkJYnJlYWs7CisJLyogTWFueSBjYWxsZXJzIGdvdCB0aGlzIHdyb25nLCBzbyBjaGVjayBmb3IgaXQgZm9yIGEgd2hpbGUuLi4gKi8KKwlpZiAoIW10ZC0+b3duZXIgJiYgY2FsbGVyX2lzX21vZHVsZSgpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIm5hbmRfc2NhbigpIGNhbGxlZCB3aXRoIE5VTEwgbXRkLT5vd25lciFcbiIpOworCQlCVUcoKTsKIAl9CiAKLQlpZiAoIW5hbmRfZmxhc2hfaWRzW2ldLm5hbWUpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIE5BTkQgZGV2aWNlIGZvdW5kISEhXG4iKTsKLQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0JCXJldHVybiAxOworCS8qIEdldCBidXN3aWR0aCB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZnVuY3Rpb25zICovCisJYnVzdyA9IGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2OworCS8qIFNldCB0aGUgZGVmYXVsdCBmdW5jdGlvbnMgKi8KKwluYW5kX3NldF9kZWZhdWx0cyhjaGlwLCBidXN3KTsKKworCS8qIFJlYWQgdGhlIGZsYXNoIHR5cGUgKi8KKwl0eXBlID0gbmFuZF9nZXRfZmxhc2hfdHlwZShtdGQsIGNoaXAsIGJ1c3csICZuYW5kX21hZl9pZCk7CisKKwlpZiAoSVNfRVJSKHR5cGUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIE5BTkQgZGV2aWNlIGZvdW5kISEhXG4iKTsKKwkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCXJldHVybiBQVFJfRVJSKHR5cGUpOwogCX0KIAotCWZvciAoaT0xOyBpIDwgbWF4Y2hpcHM7IGkrKykgewotCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGkpOwotCisJLyogQ2hlY2sgZm9yIGEgY2hpcCBhcnJheSAqLworCWZvciAoaSA9IDE7IGkgPCBtYXhjaGlwczsgaSsrKSB7CisJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgaSk7CiAJCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7Ci0KKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwogCQkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyAqLwotCQlpZiAobmFuZF9tYWZfaWQgIT0gdGhpcy0+cmVhZF9ieXRlKG10ZCkgfHwKLQkJICAgIG5hbmRfZGV2X2lkICE9IHRoaXMtPnJlYWRfYnl0ZShtdGQpKQorCQlpZiAobmFuZF9tYWZfaWQgIT0gY2hpcC0+cmVhZF9ieXRlKG10ZCkgfHwKKwkJICAgIHR5cGUtPmlkICE9IGNoaXAtPnJlYWRfYnl0ZShtdGQpKQogCQkJYnJlYWs7CiAJfQogCWlmIChpID4gMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJWQgTkFORCBjaGlwcyBkZXRlY3RlZFxuIiwgaSk7CiAKLQkvKiBBbGxvY2F0ZSBidWZmZXJzLCBpZiBuZWNjZWNhcnkgKi8KLQlpZiAoIXRoaXMtPm9vYl9idWYpIHsKLQkJc2l6ZV90IGxlbjsKLQkJbGVuID0gbXRkLT5vb2JzaXplIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JCXRoaXMtPm9vYl9idWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoIXRoaXMtPm9vYl9idWYpIHsKLQkJCXByaW50ayAoS0VSTl9FUlIgIm5hbmRfc2NhbigpOiBDYW5ub3QgYWxsb2NhdGUgb29iX2J1ZlxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfT09CQlVGX0FMTE9DOwotCX0KLQotCWlmICghdGhpcy0+ZGF0YV9idWYpIHsKLQkJc2l6ZV90IGxlbjsKLQkJbGVuID0gbXRkLT5vb2JibG9jayArIG10ZC0+b29ic2l6ZTsKLQkJdGhpcy0+ZGF0YV9idWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoIXRoaXMtPmRhdGFfYnVmKSB7Ci0JCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfT09CQlVGX0FMTE9DKQotCQkJCWtmcmVlICh0aGlzLT5vb2JfYnVmKTsKLQkJCXByaW50ayAoS0VSTl9FUlIgIm5hbmRfc2NhbigpOiBDYW5ub3QgYWxsb2NhdGUgZGF0YV9idWZcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX0RBVEFCVUZfQUxMT0M7Ci0JfQotCiAJLyogU3RvcmUgdGhlIG51bWJlciBvZiBjaGlwcyBhbmQgY2FsYyB0b3RhbCBzaXplIGZvciBtdGQgKi8KLQl0aGlzLT5udW1jaGlwcyA9IGk7Ci0JbXRkLT5zaXplID0gaSAqIHRoaXMtPmNoaXBzaXplOwotCS8qIENvbnZlcnQgY2hpcHNpemUgdG8gbnVtYmVyIG9mIHBhZ2VzIHBlciBjaGlwIC0xLiAqLwotCXRoaXMtPnBhZ2VtYXNrID0gKHRoaXMtPmNoaXBzaXplID4+IHRoaXMtPnBhZ2Vfc2hpZnQpIC0gMTsKLQkvKiBQcmVzZXQgdGhlIGludGVybmFsIG9vYiBidWZmZXIgKi8KLQltZW1zZXQodGhpcy0+b29iX2J1ZiwgMHhmZiwgbXRkLT5vb2JzaXplIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpOworCWNoaXAtPm51bWNoaXBzID0gaTsKKwltdGQtPnNpemUgPSBpICogY2hpcC0+Y2hpcHNpemU7CiAKLQkvKiBJZiBubyBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUgaXMgZ2l2ZW4sIHNlbGVjdCBhbgotCSAqIGFwcHJvcHJpYXRlIG9uZSAqLwotCWlmICghdGhpcy0+YXV0b29vYikgewotCQkvKiBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGRlZmF1bHQgb29iIHBsYWNlbWVudCBzY2hlbWUgZm9yCi0JCSAqIHBsYWNlbWVudCBhZ25vc3RpYyBmaWxlc3lzdGVtcyAqLworCS8qIFByZXNldCB0aGUgaW50ZXJuYWwgb29iIHdyaXRlIGJ1ZmZlciAqLworCW1lbXNldChjaGlwLT5idWZmZXJzLm9vYndidWYsIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CisKKwkvKgorCSAqIElmIG5vIGRlZmF1bHQgcGxhY2VtZW50IHNjaGVtZSBpcyBnaXZlbiwgc2VsZWN0IGFuIGFwcHJvcHJpYXRlIG9uZQorCSAqLworCWlmICghY2hpcC0+ZWNjLmxheW91dCkgewogCQlzd2l0Y2ggKG10ZC0+b29ic2l6ZSkgewogCQljYXNlIDg6Ci0JCQl0aGlzLT5hdXRvb29iID0gJm5hbmRfb29iXzg7CisJCQljaGlwLT5lY2MubGF5b3V0ID0gJm5hbmRfb29iXzg7CiAJCQlicmVhazsKIAkJY2FzZSAxNjoKLQkJCXRoaXMtPmF1dG9vb2IgPSAmbmFuZF9vb2JfMTY7CisJCQljaGlwLT5lY2MubGF5b3V0ID0gJm5hbmRfb29iXzE2OwogCQkJYnJlYWs7CiAJCWNhc2UgNjQ6Ci0JCQl0aGlzLT5hdXRvb29iID0gJm5hbmRfb29iXzY0OworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl82NDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIG9vYiBzY2hlbWUgZGVmaW5lZCBmb3Igb29ic2l6ZSAlZFxuIiwKLQkJCQltdGQtPm9vYnNpemUpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gb29iIHNjaGVtZSBkZWZpbmVkIGZvciAiCisJCQkgICAgICAgIm9vYnNpemUgJWRcbiIsIG10ZC0+b29ic2l6ZSk7CiAJCQlCVUcoKTsKIAkJfQogCX0KIAotCS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGZvciB0aGUgZmlsZXN5c3RlbSB0byBwbGFjZSBmcyBkZXBlbmRlbmQKLQkgKiBvb2IgZGF0YSAqLwotCW10ZC0+b29iYXZhaWwgPSAwOwotCWZvciAoaSA9IDA7IHRoaXMtPmF1dG9vb2ItPm9vYmZyZWVbaV1bMV07IGkrKykKLQkJbXRkLT5vb2JhdmFpbCArPSB0aGlzLT5hdXRvb29iLT5vb2JmcmVlW2ldWzFdOworCS8qCisJICogY2hlY2sgRUNDIG1vZGUsIGRlZmF1bHQgdG8gc29mdHdhcmUgaWYgM2J5dGUvNTEyYnl0ZSBoYXJkd2FyZSBFQ0MgaXMKKwkgKiBzZWxlY3RlZCBhbmQgd2UgaGF2ZSAyNTYgYnl0ZSBwYWdlc2l6ZSBmYWxsYmFjayB0byBzb2Z0d2FyZSBFQ0MKKwkgKi8KKwlzd2l0Y2ggKGNoaXAtPmVjYy5tb2RlKSB7CisJY2FzZSBOQU5EX0VDQ19IVzoKKwkJLyogVXNlIHN0YW5kYXJkIGh3ZWNjIHJlYWQgcGFnZSBmdW5jdGlvbiA/ICovCisJCWlmICghY2hpcC0+ZWNjLnJlYWRfcGFnZSkKKwkJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBuYW5kX3JlYWRfcGFnZV9od2VjYzsKKwkJaWYgKCFjaGlwLT5lY2Mud3JpdGVfcGFnZSkKKwkJCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gbmFuZF93cml0ZV9wYWdlX2h3ZWNjOworCQlpZiAoIWNoaXAtPmVjYy5yZWFkX29vYikKKwkJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOworCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9vb2IpCisJCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOworCisJY2FzZSBOQU5EX0VDQ19IV19TWU5EUk9NRToKKwkJaWYgKCFjaGlwLT5lY2MuY2FsY3VsYXRlIHx8ICFjaGlwLT5lY2MuY29ycmVjdCB8fAorCQkgICAgIWNoaXAtPmVjYy5od2N0bCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gRUNDIGZ1bmN0aW9ucyBzdXBwbGllZCwgIgorCQkJICAgICAgICJIYXJkd2FyZSBFQ0Mgbm90IHBvc3NpYmxlXG4iKTsKKwkJCUJVRygpOworCQl9CisJCS8qIFVzZSBzdGFuZGFyZCBzeW5kcm9tZSByZWFkL3dyaXRlIHBhZ2UgZnVuY3Rpb24gPyAqLworCQlpZiAoIWNoaXAtPmVjYy5yZWFkX3BhZ2UpCisJCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWU7CisJCWlmICghY2hpcC0+ZWNjLndyaXRlX3BhZ2UpCisJCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9zeW5kcm9tZTsKKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9vb2IpCisJCQljaGlwLT5lY2MucmVhZF9vb2IgPSBuYW5kX3JlYWRfb29iX3N5bmRyb21lOworCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9vb2IpCisJCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3luZHJvbWU7CisKKwkJaWYgKG10ZC0+d3JpdGVzaXplID49IGNoaXAtPmVjYy5zaXplKQorCQkJYnJlYWs7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVkIGJ5dGUgSFcgRUNDIG5vdCBwb3NzaWJsZSBvbiAiCisJCSAgICAgICAiJWQgYnl0ZSBwYWdlIHNpemUsIGZhbGxiYWNrIHRvIFNXIEVDQ1xuIiwKKwkJICAgICAgIGNoaXAtPmVjYy5zaXplLCBtdGQtPndyaXRlc2l6ZSk7CisJCWNoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKworCWNhc2UgTkFORF9FQ0NfU09GVDoKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IG5hbmRfY2FsY3VsYXRlX2VjYzsKKwkJY2hpcC0+ZWNjLmNvcnJlY3QgPSBuYW5kX2NvcnJlY3RfZGF0YTsKKwkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX3N3ZWNjOworCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9zd2VjYzsKKwkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zdGQ7CisJCWNoaXAtPmVjYy53cml0ZV9vb2IgPSBuYW5kX3dyaXRlX29vYl9zdGQ7CisJCWNoaXAtPmVjYy5zaXplID0gMjU2OworCQljaGlwLT5lY2MuYnl0ZXMgPSAzOworCQlicmVhazsKKworCWNhc2UgTkFORF9FQ0NfTk9ORToKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTkFORF9FQ0NfTk9ORSBzZWxlY3RlZCBieSBib2FyZCBkcml2ZXIuICIKKwkJICAgICAgICJUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCAhIVxuIik7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBuYW5kX3JlYWRfcGFnZV9yYXc7CisJCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gbmFuZF93cml0ZV9wYWdlX3JhdzsKKwkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zdGQ7CisJCWNoaXAtPmVjYy53cml0ZV9vb2IgPSBuYW5kX3dyaXRlX29vYl9zdGQ7CisJCWNoaXAtPmVjYy5zaXplID0gbXRkLT53cml0ZXNpemU7CisJCWNoaXAtPmVjYy5ieXRlcyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgTkFORF9FQ0NfTU9ERSAlZFxuIiwKKwkJICAgICAgIGNoaXAtPmVjYy5tb2RlKTsKKwkJQlVHKCk7CisJfQogCiAJLyoKLQkgKiBjaGVjayBFQ0MgbW9kZSwgZGVmYXVsdCB0byBzb2Z0d2FyZQotCSAqIGlmIDNieXRlLzUxMmJ5dGUgaGFyZHdhcmUgRUNDIGlzIHNlbGVjdGVkIGFuZCB3ZSBoYXZlIDI1NiBieXRlIHBhZ2VzaXplCi0JICogZmFsbGJhY2sgdG8gc29mdHdhcmUgRUNDCi0JKi8KLQl0aGlzLT5lY2NzaXplID0gMjU2OwkvKiBzZXQgZGVmYXVsdCBlY2NzaXplICovCi0JdGhpcy0+ZWNjYnl0ZXMgPSAzOworCSAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGZvciBhIGNsaWVudCB0byBwbGFjZSBkYXRhIGludG8KKwkgKiB0aGUgb3V0IG9mIGJhbmQgYXJlYQorCSAqLworCWNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsID0gMDsKKwlmb3IgKGkgPSAwOyBjaGlwLT5lY2MubGF5b3V0LT5vb2JmcmVlW2ldLmxlbmd0aDsgaSsrKQorCQljaGlwLT5lY2MubGF5b3V0LT5vb2JhdmFpbCArPQorCQkJY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZVtpXS5sZW5ndGg7CiAKLQlzd2l0Y2ggKHRoaXMtPmVjY21vZGUpIHsKLQljYXNlIE5BTkRfRUNDX0hXMTJfMjA0ODoKLQkJaWYgKG10ZC0+b29iYmxvY2sgPCAyMDQ4KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIyMDQ4IGJ5dGUgSFcgRUNDIG5vdCBwb3NzaWJsZSBvbiAlZCBieXRlIHBhZ2Ugc2l6ZSwgZmFsbGJhY2sgdG8gU1cgRUNDXG4iLAotCQkJICAgICAgIG10ZC0+b29iYmxvY2spOwotCQkJdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7Ci0JCQl0aGlzLT5jYWxjdWxhdGVfZWNjID0gbmFuZF9jYWxjdWxhdGVfZWNjOwotCQkJdGhpcy0+Y29ycmVjdF9kYXRhID0gbmFuZF9jb3JyZWN0X2RhdGE7Ci0JCX0gZWxzZQotCQkJdGhpcy0+ZWNjc2l6ZSA9IDIwNDg7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0VDQ19IVzNfNTEyOgotCWNhc2UgTkFORF9FQ0NfSFc2XzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXOF81MTI6Ci0JCWlmIChtdGQtPm9vYmJsb2NrID09IDI1NikgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIjUxMiBieXRlIEhXIEVDQyBub3QgcG9zc2libGUgb24gMjU2IEJ5dGUgcGFnZXNpemUsIGZhbGxiYWNrIHRvIFNXIEVDQyBcbiIpOwotCQkJdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7Ci0JCQl0aGlzLT5jYWxjdWxhdGVfZWNjID0gbmFuZF9jYWxjdWxhdGVfZWNjOwotCQkJdGhpcy0+Y29ycmVjdF9kYXRhID0gbmFuZF9jb3JyZWN0X2RhdGE7Ci0JCX0gZWxzZQotCQkJdGhpcy0+ZWNjc2l6ZSA9IDUxMjsgLyogc2V0IGVjY3NpemUgdG8gNTEyICovCi0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0VDQ19IVzNfMjU2OgotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfTk9ORToKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5BTkRfRUNDX05PTkUgc2VsZWN0ZWQgYnkgYm9hcmQgZHJpdmVyLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCAhIVxuIik7Ci0JCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19OT05FOwotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfU09GVDoKLQkJdGhpcy0+Y2FsY3VsYXRlX2VjYyA9IG5hbmRfY2FsY3VsYXRlX2VjYzsKLQkJdGhpcy0+Y29ycmVjdF9kYXRhID0gbmFuZF9jb3JyZWN0X2RhdGE7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkludmFsaWQgTkFORF9FQ0NfTU9ERSAlZFxuIiwgdGhpcy0+ZWNjbW9kZSk7CisJLyoKKwkgKiBTZXQgdGhlIG51bWJlciBvZiByZWFkIC8gd3JpdGUgc3RlcHMgZm9yIG9uZSBwYWdlIGRlcGVuZGluZyBvbiBFQ0MKKwkgKiBtb2RlCisJICovCisJY2hpcC0+ZWNjLnN0ZXBzID0gbXRkLT53cml0ZXNpemUgLyBjaGlwLT5lY2Muc2l6ZTsKKwlpZihjaGlwLT5lY2Muc3RlcHMgKiBjaGlwLT5lY2Muc2l6ZSAhPSBtdGQtPndyaXRlc2l6ZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIGVjYyBwYXJhbWV0ZXJzXG4iKTsKIAkJQlVHKCk7CiAJfQorCWNoaXAtPmVjYy50b3RhbCA9IGNoaXAtPmVjYy5zdGVwcyAqIGNoaXAtPmVjYy5ieXRlczsKIAotCS8qIENoZWNrIGhhcmR3YXJlIGVjYyBmdW5jdGlvbiBhdmFpbGFiaWxpdHkgYW5kIGFkanVzdCBudW1iZXIgb2YgZWNjIGJ5dGVzIHBlcgotCSAqIGNhbGN1bGF0aW9uIHN0ZXAKLQkqLwotCXN3aXRjaCAodGhpcy0+ZWNjbW9kZSkgewotCWNhc2UgTkFORF9FQ0NfSFcxMl8yMDQ4OgotCQl0aGlzLT5lY2NieXRlcyArPSA0OwotCWNhc2UgTkFORF9FQ0NfSFc4XzUxMjoKLQkJdGhpcy0+ZWNjYnl0ZXMgKz0gMjsKLQljYXNlIE5BTkRfRUNDX0hXNl81MTI6Ci0JCXRoaXMtPmVjY2J5dGVzICs9IDM7Ci0JY2FzZSBOQU5EX0VDQ19IVzNfNTEyOgotCWNhc2UgTkFORF9FQ0NfSFczXzI1NjoKLQkJaWYgKHRoaXMtPmNhbGN1bGF0ZV9lY2MgJiYgdGhpcy0+Y29ycmVjdF9kYXRhICYmIHRoaXMtPmVuYWJsZV9od2VjYykKLQkJCWJyZWFrOwotCQlwcmludGsgKEtFUk5fV0FSTklORyAiTm8gRUNDIGZ1bmN0aW9ucyBzdXBwbGllZCwgSGFyZHdhcmUgRUNDIG5vdCBwb3NzaWJsZVxuIik7Ci0JCUJVRygpOwotCX0KLQotCW10ZC0+ZWNjc2l6ZSA9IHRoaXMtPmVjY3NpemU7Ci0KLQkvKiBTZXQgdGhlIG51bWJlciBvZiByZWFkIC8gd3JpdGUgc3RlcHMgZm9yIG9uZSBwYWdlIHRvIGVuc3VyZSBFQ0MgZ2VuZXJhdGlvbiAqLwotCXN3aXRjaCAodGhpcy0+ZWNjbW9kZSkgewotCWNhc2UgTkFORF9FQ0NfSFcxMl8yMDQ4OgotCQl0aGlzLT5lY2NzdGVwcyA9IG10ZC0+b29iYmxvY2sgLyAyMDQ4OwotCQlicmVhazsKLQljYXNlIE5BTkRfRUNDX0hXM181MTI6Ci0JY2FzZSBOQU5EX0VDQ19IVzZfNTEyOgotCWNhc2UgTkFORF9FQ0NfSFc4XzUxMjoKLQkJdGhpcy0+ZWNjc3RlcHMgPSBtdGQtPm9vYmJsb2NrIC8gNTEyOwotCQlicmVhazsKLQljYXNlIE5BTkRfRUNDX0hXM18yNTY6Ci0JY2FzZSBOQU5EX0VDQ19TT0ZUOgotCQl0aGlzLT5lY2NzdGVwcyA9IG10ZC0+b29iYmxvY2sgLyAyNTY7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0VDQ19OT05FOgotCQl0aGlzLT5lY2NzdGVwcyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEluaXRpYWxpemUgc3RhdGUsIHdhaXRxdWV1ZSBhbmQgc3BpbmxvY2sgKi8KLQl0aGlzLT5zdGF0ZSA9IEZMX1JFQURZOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZ0aGlzLT53cSk7Ci0Jc3Bpbl9sb2NrX2luaXQgKCZ0aGlzLT5jaGlwX2xvY2spOworCS8qIEluaXRpYWxpemUgc3RhdGUgKi8KKwljaGlwLT5zdGF0ZSA9IEZMX1JFQURZOwogCiAJLyogRGUtc2VsZWN0IHRoZSBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKIAogCS8qIEludmFsaWRhdGUgdGhlIHBhZ2VidWZmZXIgcmVmZXJlbmNlICovCi0JdGhpcy0+cGFnZWJ1ZiA9IC0xOworCWNoaXAtPnBhZ2VidWYgPSAtMTsKIAogCS8qIEZpbGwgaW4gcmVtYWluaW5nIE1URCBkcml2ZXIgZGF0YSAqLwogCW10ZC0+dHlwZSA9IE1URF9OQU5ERkxBU0g7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIIHwgTVREX0VDQzsKKwltdGQtPmZsYWdzID0gTVREX0NBUF9OQU5ERkxBU0g7CiAJbXRkLT5lY2N0eXBlID0gTVREX0VDQ19TVzsKIAltdGQtPmVyYXNlID0gbmFuZF9lcmFzZTsKIAltdGQtPnBvaW50ID0gTlVMTDsKIAltdGQtPnVucG9pbnQgPSBOVUxMOwogCW10ZC0+cmVhZCA9IG5hbmRfcmVhZDsKIAltdGQtPndyaXRlID0gbmFuZF93cml0ZTsKLQltdGQtPnJlYWRfZWNjID0gbmFuZF9yZWFkX2VjYzsKLQltdGQtPndyaXRlX2VjYyA9IG5hbmRfd3JpdGVfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBuYW5kX3JlYWRfb29iOwogCW10ZC0+d3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2I7Ci0JbXRkLT5yZWFkdiA9IE5VTEw7Ci0JbXRkLT53cml0ZXYgPSBuYW5kX3dyaXRldjsKLQltdGQtPndyaXRldl9lY2MgPSBuYW5kX3dyaXRldl9lY2M7CiAJbXRkLT5zeW5jID0gbmFuZF9zeW5jOwogCW10ZC0+bG9jayA9IE5VTEw7CiAJbXRkLT51bmxvY2sgPSBOVUxMOwpAQCAtMjY5Miw0NyArMjQ5MCwzOCBAQAogCW10ZC0+YmxvY2tfaXNiYWQgPSBuYW5kX2Jsb2NrX2lzYmFkOwogCW10ZC0+YmxvY2tfbWFya2JhZCA9IG5hbmRfYmxvY2tfbWFya2JhZDsKIAotCS8qIGFuZCBtYWtlIHRoZSBhdXRvb29iIHRoZSBkZWZhdWx0IG9uZSAqLwotCW1lbWNweSgmbXRkLT5vb2JpbmZvLCB0aGlzLT5hdXRvb29iLCBzaXplb2YobXRkLT5vb2JpbmZvKSk7Ci0KLQltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisJLyogcHJvcGFnYXRlIGVjYy5sYXlvdXQgdG8gbXRkX2luZm8gKi8KKwltdGQtPmVjY2xheW91dCA9IGNoaXAtPmVjYy5sYXlvdXQ7CiAKIAkvKiBDaGVjaywgaWYgd2Ugc2hvdWxkIHNraXAgdGhlIGJhZCBibG9jayB0YWJsZSBzY2FuICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX1NLSVBfQkJUU0NBTikKKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfU0tJUF9CQlRTQ0FOKQogCQlyZXR1cm4gMDsKIAogCS8qIEJ1aWxkIGJhZCBibG9jayB0YWJsZSAqLwotCXJldHVybiB0aGlzLT5zY2FuX2JidCAobXRkKTsKKwlyZXR1cm4gY2hpcC0+c2Nhbl9iYnQobXRkKTsKIH0KIAogLyoqCiAgKiBuYW5kX3JlbGVhc2UgLSBbTkFORCBJbnRlcmZhY2VdIEZyZWUgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIE5BTkQgZGV2aWNlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogKi8KLXZvaWQgbmFuZF9yZWxlYXNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3ZvaWQgbmFuZF9yZWxlYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCS8qIERlcmVnaXN0ZXIgcGFydGl0aW9ucyAqLwotCWRlbF9tdGRfcGFydGl0aW9ucyAobXRkKTsKKwlkZWxfbXRkX3BhcnRpdGlvbnMobXRkKTsKICNlbmRpZgogCS8qIERlcmVnaXN0ZXIgdGhlIGRldmljZSAqLwotCWRlbF9tdGRfZGV2aWNlIChtdGQpOworCWRlbF9tdGRfZGV2aWNlKG10ZCk7CiAKIAkvKiBGcmVlIGJhZCBibG9jayB0YWJsZSBtZW1vcnkgKi8KLQlrZnJlZSAodGhpcy0+YmJ0KTsKLQkvKiBCdWZmZXIgYWxsb2NhdGVkIGJ5IG5hbmRfc2NhbiA/ICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX09PQkJVRl9BTExPQykKLQkJa2ZyZWUgKHRoaXMtPm9vYl9idWYpOwotCS8qIEJ1ZmZlciBhbGxvY2F0ZWQgYnkgbmFuZF9zY2FuID8gKi8KLQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfREFUQUJVRl9BTExPQykKLQkJa2ZyZWUgKHRoaXMtPmRhdGFfYnVmKTsKKwlrZnJlZShjaGlwLT5iYnQpOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTCAobmFuZF9zY2FuKTsKLUVYUE9SVF9TWU1CT0xfR1BMIChuYW5kX3JlbGVhc2UpOwotCitFWFBPUlRfU1lNQk9MX0dQTChuYW5kX3NjYW4pOworRVhQT1JUX1NZTUJPTF9HUEwobmFuZF9yZWxlYXNlKTsKIAogc3RhdGljIGludCBfX2luaXQgbmFuZF9iYXNlX2luaXQodm9pZCkKIHsKQEAgLTI3NDgsNiArMjUzNyw2IEBACiBtb2R1bGVfaW5pdChuYW5kX2Jhc2VfaW5pdCk7CiBtb2R1bGVfZXhpdChuYW5kX2Jhc2VfZXhpdCk7CiAKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SICgiU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkdlbmVyaWMgTkFORCBmbGFzaCBkcml2ZXIgY29kZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBOQU5EIGZsYXNoIGRyaXZlciBjb2RlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKaW5kZXggY2EyODY5OS4uYTYxMmM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYwpAQCAtNDgsNyArNDgsNyBAQAogICoKICAqIEZvbGxvd2luZyBhc3N1bXB0aW9ucyBhcmUgbWFkZToKICAqIC0gYmJ0cyBzdGFydCBhdCBhIHBhZ2UgYm91bmRhcnksIGlmIGF1dG9sb2NhdGVkIG9uIGEgYmxvY2sgYm91bmRhcnkKLSAqIC0gdGhlIHNwYWNlIG5lY2NlY2FyeSBmb3IgYSBiYnQgaW4gRkxBU0ggZG9lcyBub3QgZXhjZWVkIGEgYmxvY2sgYm91bmRhcnkKKyAqIC0gdGhlIHNwYWNlIG5lY2Vzc2FyeSBmb3IgYSBiYnQgaW4gRkxBU0ggZG9lcyBub3QgZXhjZWVkIGEgYmxvY2sgYm91bmRhcnkKICAqCiAgKi8KIApAQCAtNjAsNyArNjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAvKioKICAqIGNoZWNrX3BhdHRlcm4gLSBbR0VORVJJQ10gY2hlY2sgaWYgYSBwYXR0ZXJuIGlzIGluIHRoZSBidWZmZXIKQEAgLTc1LDcgKzc1LDcgQEAKICAqIHBhdHRlcm4gYXJlYSBjb250YWluIDB4ZmYKICAqCiAqLwotc3RhdGljIGludCBjaGVja19wYXR0ZXJuICh1aW50OF90ICpidWYsIGludCBsZW4sIGludCBwYWdsZW4sIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCitzdGF0aWMgaW50IGNoZWNrX3BhdHRlcm4odWludDhfdCAqYnVmLCBpbnQgbGVuLCBpbnQgcGFnbGVuLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQogewogCWludCBpLCBlbmQgPSAwOwogCXVpbnQ4X3QgKnAgPSBidWY7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAqIG5vIG9wdGlvbmFsIGVtcHR5IGNoZWNrCiAgKgogKi8KLXN0YXRpYyBpbnQgY2hlY2tfc2hvcnRfcGF0dGVybiAodWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQorc3RhdGljIGludCBjaGVja19zaG9ydF9wYXR0ZXJuKHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKIHsKIAlpbnQgaTsKIAl1aW50OF90ICpwID0gYnVmOwpAQCAtMTQyLDggKzE0Miw4IEBACiAgKiBSZWFkIHRoZSBiYWQgYmxvY2sgdGFibGUgc3RhcnRpbmcgZnJvbSBwYWdlLgogICoKICAqLwotc3RhdGljIGludCByZWFkX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UsIGludCBudW0sCi0JaW50IGJpdHMsIGludCBvZmZzLCBpbnQgcmVzZXJ2ZWRfYmxvY2tfY29kZSkKK3N0YXRpYyBpbnQgcmVhZF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UsIGludCBudW0sCisJCSAgICBpbnQgYml0cywgaW50IG9mZnMsIGludCByZXNlcnZlZF9ibG9ja19jb2RlKQogewogCWludCByZXMsIGksIGosIGFjdCA9IDA7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKQEAgLTE1MiwxNyArMTUyLDE3IEBACiAJdWludDhfdCBtc2sgPSAodWludDhfdCkgKCgxIDw8IGJpdHMpIC0gMSk7CiAKIAl0b3RsZW4gPSAobnVtICogYml0cykgPj4gMzsKLQlmcm9tID0gKChsb2ZmX3QpcGFnZSkgPDwgdGhpcy0+cGFnZV9zaGlmdDsKKwlmcm9tID0gKChsb2ZmX3QpIHBhZ2UpIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7CiAKIAl3aGlsZSAodG90bGVuKSB7Ci0JCWxlbiA9IG1pbiAodG90bGVuLCAoc2l6ZV90KSAoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpKTsKLQkJcmVzID0gbXRkLT5yZWFkX2VjYyAobXRkLCBmcm9tLCBsZW4sICZyZXRsZW4sIGJ1ZiwgTlVMTCwgdGhpcy0+YXV0b29vYik7CisJCWxlbiA9IG1pbih0b3RsZW4sIChzaXplX3QpICgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCkpOworCQlyZXMgPSBtdGQtPnJlYWQobXRkLCBmcm9tLCBsZW4sICZyZXRsZW4sIGJ1Zik7CiAJCWlmIChyZXMgPCAwKSB7CiAJCQlpZiAocmV0bGVuICE9IGxlbikgewotCQkJCXByaW50ayAoS0VSTl9JTkZPICJuYW5kX2JidDogRXJyb3IgcmVhZGluZyBiYWQgYmxvY2sgdGFibGVcbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gIm5hbmRfYmJ0OiBFcnJvciByZWFkaW5nIGJhZCBibG9jayB0YWJsZVxuIik7CiAJCQkJcmV0dXJuIHJlczsKIAkJCX0KLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5hbmRfYmJ0OiBFQ0MgZXJyb3Igd2hpbGUgcmVhZGluZyBiYWQgYmxvY2sgdGFibGVcbiIpOwogCQl9CiAKIAkJLyogQW5hbHlzZSBkYXRhICovCkBAIC0xNzIsMjIgKzE3MiwyMyBAQAogCQkJCXVpbnQ4X3QgdG1wID0gKGRhdCA+PiBqKSAmIG1zazsKIAkJCQlpZiAodG1wID09IG1zaykKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKHJlc2VydmVkX2Jsb2NrX2NvZGUgJiYKLQkJCQkgICAgKHRtcCA9PSByZXNlcnZlZF9ibG9ja19jb2RlKSkgewotCQkJCQlwcmludGsgKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IFJlc2VydmVkIGJsb2NrIGF0IDB4JTA4eFxuIiwKLQkJCQkJCSgob2ZmcyA8PCAyKSArIChhY3QgPj4gMSkpIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CisJCQkJaWYgKHJlc2VydmVkX2Jsb2NrX2NvZGUgJiYgKHRtcCA9PSByZXNlcnZlZF9ibG9ja19jb2RlKSkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAibmFuZF9yZWFkX2JidDogUmVzZXJ2ZWQgYmxvY2sgYXQgMHglMDh4XG4iLAorCQkJCQkgICAgICAgKChvZmZzIDw8IDIpICsgKGFjdCA+PiAxKSkgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAkJCQkJdGhpcy0+YmJ0W29mZnMgKyAoYWN0ID4+IDMpXSB8PSAweDIgPDwgKGFjdCAmIDB4MDYpOworCQkJCQltdGQtPmVjY19zdGF0cy5iYnRibG9ja3MrKzsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCS8qIExlYXZlIGl0IGZvciBub3csIGlmIGl0cyBtYXR1cmVkIHdlIGNhbiBtb3ZlIHRoaXMKIAkJCQkgKiBtZXNzYWdlIHRvIE1URF9ERUJVR19MRVZFTDAgKi8KLQkJCQlwcmludGsgKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IEJhZCBibG9jayBhdCAweCUwOHhcbiIsCi0JCQkJCSgob2ZmcyA8PCAyKSArIChhY3QgPj4gMSkpIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IEJhZCBibG9jayBhdCAweCUwOHhcbiIsCisJCQkJICAgICAgICgob2ZmcyA8PCAyKSArIChhY3QgPj4gMSkpIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCQkJLyogRmFjdG9yeSBtYXJrZWQgYmFkIG9yIHdvcm4gb3V0ID8gKi8KIAkJCQlpZiAodG1wID09IDApCiAJCQkJCXRoaXMtPmJidFtvZmZzICsgKGFjdCA+PiAzKV0gfD0gMHgzIDw8IChhY3QgJiAweDA2KTsKIAkJCQllbHNlCiAJCQkJCXRoaXMtPmJidFtvZmZzICsgKGFjdCA+PiAzKV0gfD0gMHgxIDw8IChhY3QgJiAweDA2KTsKKwkJCQltdGQtPmVjY19zdGF0cy5iYWRibG9ja3MrKzsKIAkJCX0KIAkJfQogCQl0b3RsZW4gLT0gbGVuOwpAQCAtMjA3LDcgKzIwOCw3IEBACiAgKiBSZWFkIHRoZSBiYWQgYmxvY2sgdGFibGUgZm9yIGFsbCBjaGlwcyBzdGFydGluZyBhdCBhIGdpdmVuIHBhZ2UKICAqIFdlIGFzc3VtZSB0aGF0IHRoZSBiYnQgYml0cyBhcmUgaW4gY29uc2VjdXRpdmUgb3JkZXIuCiAqLwotc3RhdGljIGludCByZWFkX2Fic19iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIGludCBjaGlwKQorc3RhdGljIGludCByZWFkX2Fic19iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgaW50IGNoaXApCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgcmVzID0gMCwgaTsKQEAgLTIzMSw2ICsyMzIsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFNjYW4gcmVhZCByYXcgZGF0YSBmcm9tIGZsYXNoCisgKi8KK3N0YXRpYyBpbnQgc2Nhbl9yZWFkX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBsb2ZmX3Qgb2ZmcywKKwkJCSBzaXplX3QgbGVuKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUkFXOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JidWYgPSBidWY7CisJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwlvcHMubGVuID0gbGVuOworCisJcmV0dXJuIG10ZC0+cmVhZF9vb2IobXRkLCBvZmZzLCAmb3BzKTsKK30KKworLyoKKyAqIFNjYW4gd3JpdGUgZGF0YSB3aXRoIG9vYiB0byBmbGFzaAorICovCitzdGF0aWMgaW50IHNjYW5fd3JpdGVfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJCSAgdWludDhfdCAqYnVmLCB1aW50OF90ICpvb2IpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKwlvcHMub29ib2ZmcyA9IDA7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMuZGF0YnVmID0gYnVmOworCW9wcy5vb2JidWYgPSBvb2I7CisJb3BzLmxlbiA9IGxlbjsKKworCXJldHVybiBtdGQtPndyaXRlX29vYihtdGQsIG9mZnMsICZvcHMpOworfQorCiAvKioKICAqIHJlYWRfYWJzX2JidHMgLSBbR0VORVJJQ10gUmVhZCB0aGUgYmFkIGJsb2NrIHRhYmxlKHMpIGZvciBhbGwgY2hpcHMgc3RhcnRpbmcgYXQgYSBnaXZlbiBwYWdlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjQyLDI4ICsyNzksODUgQEAKICAqIFdlIGFzc3VtZSB0aGF0IHRoZSBiYnQgYml0cyBhcmUgaW4gY29uc2VjdXRpdmUgb3JkZXIuCiAgKgogKi8KLXN0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0cyAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwKLQlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kKQorc3RhdGljIGludCByZWFkX2Fic19iYnRzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsCisJCQkgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCiAJLyogUmVhZCB0aGUgcHJpbWFyeSB2ZXJzaW9uLCBpZiBhdmFpbGFibGUgKi8KIAlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSB7Ci0JCW5hbmRfcmVhZF9yYXcgKG10ZCwgYnVmLCB0ZC0+cGFnZXNbMF0gPDwgdGhpcy0+cGFnZV9zaGlmdCwgbXRkLT5vb2JibG9jaywgbXRkLT5vb2JzaXplKTsKLQkJdGQtPnZlcnNpb25bMF0gPSBidWZbbXRkLT5vb2JibG9jayArIHRkLT52ZXJvZmZzXTsKLQkJcHJpbnRrIChLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsIHRkLT5wYWdlc1swXSwgdGQtPnZlcnNpb25bMF0pOworCQlzY2FuX3JlYWRfcmF3KG10ZCwgYnVmLCB0ZC0+cGFnZXNbMF0gPDwgdGhpcy0+cGFnZV9zaGlmdCwKKwkJCSAgICAgIG10ZC0+d3JpdGVzaXplKTsKKwkJdGQtPnZlcnNpb25bMF0gPSBidWZbbXRkLT53cml0ZXNpemUgKyB0ZC0+dmVyb2Zmc107CisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsCisJCSAgICAgICB0ZC0+cGFnZXNbMF0sIHRkLT52ZXJzaW9uWzBdKTsKIAl9CiAKIAkvKiBSZWFkIHRoZSBtaXJyb3IgdmVyc2lvbiwgaWYgYXZhaWxhYmxlICovCiAJaWYgKG1kICYmIChtZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pKSB7Ci0JCW5hbmRfcmVhZF9yYXcgKG10ZCwgYnVmLCBtZC0+cGFnZXNbMF0gPDwgdGhpcy0+cGFnZV9zaGlmdCwgbXRkLT5vb2JibG9jaywgbXRkLT5vb2JzaXplKTsKLQkJbWQtPnZlcnNpb25bMF0gPSBidWZbbXRkLT5vb2JibG9jayArIG1kLT52ZXJvZmZzXTsKLQkJcHJpbnRrIChLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsIG1kLT5wYWdlc1swXSwgbWQtPnZlcnNpb25bMF0pOworCQlzY2FuX3JlYWRfcmF3KG10ZCwgYnVmLCBtZC0+cGFnZXNbMF0gPDwgdGhpcy0+cGFnZV9zaGlmdCwKKwkJCSAgICAgIG10ZC0+d3JpdGVzaXplKTsKKwkJbWQtPnZlcnNpb25bMF0gPSBidWZbbXRkLT53cml0ZXNpemUgKyBtZC0+dmVyb2Zmc107CisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsCisJCSAgICAgICBtZC0+cGFnZXNbMF0sIG1kLT52ZXJzaW9uWzBdKTsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIFNjYW4gYSBnaXZlbiBibG9jayBmdWxsCisgKi8KK3N0YXRpYyBpbnQgc2Nhbl9ibG9ja19mdWxsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkLAorCQkJICAgbG9mZl90IG9mZnMsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHJlYWRsZW4sCisJCQkgICBpbnQgc2NhbmxlbiwgaW50IGxlbikKK3sKKwlpbnQgcmV0LCBqOworCisJcmV0ID0gc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1Ziwgb2ZmcywgcmVhZGxlbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaiA9IDA7IGogPCBsZW47IGorKywgYnVmICs9IHNjYW5sZW4pIHsKKwkJaWYgKGNoZWNrX3BhdHRlcm4oYnVmLCBzY2FubGVuLCBtdGQtPndyaXRlc2l6ZSwgYmQpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU2NhbiBhIGdpdmVuIGJsb2NrIHBhcnRpYWxseQorICovCitzdGF0aWMgaW50IHNjYW5fYmxvY2tfZmFzdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCwKKwkJCSAgIGxvZmZfdCBvZmZzLCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgaiwgcmV0OworCisJb3BzLmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JidWYgPSBidWY7CisJb3BzLm9vYm9mZnMgPSAwOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKworCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykgeworCQkvKgorCQkgKiBSZWFkIHRoZSBmdWxsIG9vYiB1bnRpbCByZWFkX29vYiBpcyBmaXhlZCB0bworCQkgKiBoYW5kbGUgc2luZ2xlIGJ5dGUgcmVhZHMgZm9yIDE2IGJpdAorCQkgKiBidXN3aWR0aAorCQkgKi8KKwkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMsICZvcHMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoY2hlY2tfc2hvcnRfcGF0dGVybihidWYsIGJkKSkKKwkJCXJldHVybiAxOworCisJCW9mZnMgKz0gbXRkLT53cml0ZXNpemU7CisJfQorCXJldHVybiAwOworfQorCiAvKioKICAqIGNyZWF0ZV9iYnQgLSBbR0VORVJJQ10gQ3JlYXRlIGEgYmFkIGJsb2NrIHRhYmxlIGJ5IHNjYW5uaW5nIHRoZSBkZXZpY2UKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yNzUsMTUgKzM2OSwxNiBAQAogICogQ3JlYXRlIGEgYmFkIGJsb2NrIHRhYmxlIGJ5IHNjYW5uaW5nIHRoZSBkZXZpY2UKICAqIGZvciB0aGUgZ2l2ZW4gZ29vZC9iYWQgYmxvY2sgaWRlbnRpZnkgcGF0dGVybgogICovCi1zdGF0aWMgaW50IGNyZWF0ZV9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQsIGludCBjaGlwKQorc3RhdGljIGludCBjcmVhdGVfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsCisJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCwgaW50IGNoaXApCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgaSwgaiwgbnVtYmxvY2tzLCBsZW4sIHNjYW5sZW47CisJaW50IGksIG51bWJsb2NrcywgbGVuLCBzY2FubGVuOwogCWludCBzdGFydGJsb2NrOwogCWxvZmZfdCBmcm9tOwotCXNpemVfdCByZWFkbGVuLCBvb2JsZW47CisJc2l6ZV90IHJlYWRsZW47CiAKLQlwcmludGsgKEtFUk5fSU5GTyAiU2Nhbm5pbmcgZGV2aWNlIGZvciBiYWQgYmxvY2tzXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJTY2FubmluZyBkZXZpY2UgZm9yIGJhZCBibG9ja3NcbiIpOwogCiAJaWYgKGJkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkFMTFBBR0VTKQogCQlsZW4gPSAxIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKQEAgLTI5NiwyNSArMzkxLDI0IEBACiAKIAlpZiAoIShiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5FTVBUWSkpIHsKIAkJLyogV2UgbmVlZCBvbmx5IHJlYWQgZmV3IGJ5dGVzIGZyb20gdGhlIE9PQiBhcmVhICovCi0JCXNjYW5sZW4gPSBvb2JsZW4gPSAwOworCQlzY2FubGVuID0gMDsKIAkJcmVhZGxlbiA9IGJkLT5sZW47CiAJfSBlbHNlIHsKIAkJLyogRnVsbCBwYWdlIGNvbnRlbnQgc2hvdWxkIGJlIHJlYWQgKi8KLQkJc2Nhbmxlbgk9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7Ci0JCXJlYWRsZW4gPSBsZW4gKiBtdGQtPm9vYmJsb2NrOwotCQlvb2JsZW4gPSBsZW4gKiBtdGQtPm9vYnNpemU7CisJCXNjYW5sZW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKKwkJcmVhZGxlbiA9IGxlbiAqIG10ZC0+d3JpdGVzaXplOwogCX0KIAogCWlmIChjaGlwID09IC0xKSB7Ci0JCS8qIE5vdGUgdGhhdCBudW1ibG9ja3MgaXMgMiAqIChyZWFsIG51bWJsb2NrcykgaGVyZSwgc2VlIGkrPTIgYmVsb3cgYXMgaXQKLQkJICogbWFrZXMgc2hpZnRpbmcgYW5kIG1hc2tpbmcgbGVzcyBwYWluZnVsICovCisJCS8qIE5vdGUgdGhhdCBudW1ibG9ja3MgaXMgMiAqIChyZWFsIG51bWJsb2NrcykgaGVyZSwgc2VlIGkrPTIKKwkJICogYmVsb3cgYXMgaXQgbWFrZXMgc2hpZnRpbmcgYW5kIG1hc2tpbmcgbGVzcyBwYWluZnVsICovCiAJCW51bWJsb2NrcyA9IG10ZC0+c2l6ZSA+PiAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gMSk7CiAJCXN0YXJ0YmxvY2sgPSAwOwogCQlmcm9tID0gMDsKIAl9IGVsc2UgewogCQlpZiAoY2hpcCA+PSB0aGlzLT5udW1jaGlwcykgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgImNyZWF0ZV9iYnQoKTogY2hpcG5yICglZCkgPiBhdmFpbGFibGUgY2hpcHMgKCVkKVxuIiwKLQkJCQljaGlwICsgMSwgdGhpcy0+bnVtY2hpcHMpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3JlYXRlX2JidCgpOiBjaGlwbnIgKCVkKSA+IGF2YWlsYWJsZSBjaGlwcyAoJWQpXG4iLAorCQkJICAgICAgIGNoaXAgKyAxLCB0aGlzLT5udW1jaGlwcyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQludW1ibG9ja3MgPSB0aGlzLT5jaGlwc2l6ZSA+PiAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gMSk7CkBAIC0zMjYsMzYgKzQyMCwyMiBAQAogCWZvciAoaSA9IHN0YXJ0YmxvY2s7IGkgPCBudW1ibG9ja3M7KSB7CiAJCWludCByZXQ7CiAKLQkJaWYgKGJkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkVNUFRZKQotCQkJaWYgKChyZXQgPSBuYW5kX3JlYWRfcmF3IChtdGQsIGJ1ZiwgZnJvbSwgcmVhZGxlbiwgb29ibGVuKSkpCi0JCQkJcmV0dXJuIHJldDsKKwkJaWYgKGJkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkFMTFBBR0VTKQorCQkJcmV0ID0gc2Nhbl9ibG9ja19mdWxsKG10ZCwgYmQsIGZyb20sIGJ1ZiwgcmVhZGxlbiwKKwkJCQkJICAgICAgc2NhbmxlbiwgbGVuKTsKKwkJZWxzZQorCQkJcmV0ID0gc2Nhbl9ibG9ja19mYXN0KG10ZCwgYmQsIGZyb20sIGJ1ZiwgbGVuKTsKIAotCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLQkJCWlmICghKGJkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkVNUFRZKSkgewotCQkJCXNpemVfdCByZXRsZW47CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAotCQkJCS8qIFJlYWQgdGhlIGZ1bGwgb29iIHVudGlsIHJlYWRfb29iIGlzIGZpeGVkIHRvCi0JCQkJICogaGFuZGxlIHNpbmdsZSBieXRlIHJlYWRzIGZvciAxNiBiaXQgYnVzd2lkdGggKi8KLQkJCQlyZXQgPSBtdGQtPnJlYWRfb29iKG10ZCwgZnJvbSArIGogKiBtdGQtPm9vYmJsb2NrLAotCQkJCQkJCW10ZC0+b29ic2l6ZSwgJnJldGxlbiwgYnVmKTsKLQkJCQlpZiAocmV0KQotCQkJCQlyZXR1cm4gcmV0OwotCi0JCQkJaWYgKGNoZWNrX3Nob3J0X3BhdHRlcm4gKGJ1ZiwgYmQpKSB7Ci0JCQkJCXRoaXMtPmJidFtpID4+IDNdIHw9IDB4MDMgPDwgKGkgJiAweDYpOwotCQkJCQlwcmludGsgKEtFUk5fV0FSTklORyAiQmFkIGVyYXNlYmxvY2sgJWQgYXQgMHglMDh4XG4iLAotCQkJCQkJaSA+PiAxLCAodW5zaWduZWQgaW50KSBmcm9tKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoY2hlY2tfcGF0dGVybiAoJmJ1ZltqICogc2Nhbmxlbl0sIHNjYW5sZW4sIG10ZC0+b29iYmxvY2ssIGJkKSkgewotCQkJCQl0aGlzLT5iYnRbaSA+PiAzXSB8PSAweDAzIDw8IChpICYgMHg2KTsKLQkJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkJhZCBlcmFzZWJsb2NrICVkIGF0IDB4JTA4eFxuIiwKLQkJCQkJCWkgPj4gMSwgKHVuc2lnbmVkIGludCkgZnJvbSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KKwkJaWYgKHJldCkgeworCQkJdGhpcy0+YmJ0W2kgPj4gM10gfD0gMHgwMyA8PCAoaSAmIDB4Nik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJCYWQgZXJhc2VibG9jayAlZCBhdCAweCUwOHhcbiIsCisJCQkgICAgICAgaSA+PiAxLCAodW5zaWduZWQgaW50KWZyb20pOworCQkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CiAJCX0KKwogCQlpICs9IDI7CiAJCWZyb20gKz0gKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAl9CkBAIC0zNzQsMjIgKzQ1NCwyMyBAQAogICogYmxvY2suCiAgKiBJZiB0aGUgb3B0aW9uIE5BTkRfQkJUX1BFUkNISVAgaXMgZ2l2ZW4sIGVhY2ggY2hpcCBpcyBzZWFyY2hlZAogICogZm9yIGEgYmJ0LCB3aGljaCBjb250YWlucyB0aGUgYmFkIGJsb2NrIGluZm9ybWF0aW9uIG9mIHRoaXMgY2hpcC4KLSAqIFRoaXMgaXMgbmVjY2VjYXJ5IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgY2VydGFpbiBET0MgZGV2aWNlcy4KKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgY2VydGFpbiBET0MgZGV2aWNlcy4KICAqCiAgKiBUaGUgYmJ0IGlkZW50IHBhdHRlcm4gcmVzaWRlcyBpbiB0aGUgb29iIGFyZWEgb2YgdGhlIGZpcnN0IHBhZ2UKICAqIGluIGEgYmxvY2suCiAgKi8KLXN0YXRpYyBpbnQgc2VhcmNoX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3N0YXRpYyBpbnQgc2VhcmNoX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGksIGNoaXBzOwogCWludCBiaXRzLCBzdGFydGJsb2NrLCBibG9jaywgZGlyOwotCWludCBzY2FubGVuID0gbXRkLT5vb2JibG9jayArIG10ZC0+b29ic2l6ZTsKKwlpbnQgc2NhbmxlbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplOwogCWludCBiYnRibG9ja3M7CisJaW50IGJsb2NrdG9wYWdlID0gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdDsKIAogCS8qIFNlYXJjaCBkaXJlY3Rpb24gdG9wIC0+IGRvd24gPyAqLwogCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX0xBU1RCTE9DSykgewotCQlzdGFydGJsb2NrID0gKG10ZC0+c2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpIC0xOworCQlzdGFydGJsb2NrID0gKG10ZC0+c2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpIC0gMTsKIAkJZGlyID0gLTE7CiAJfSBlbHNlIHsKIAkJc3RhcnRibG9jayA9IDA7CkBAIC00MTUsMTMgKzQ5NiwxNiBAQAogCQl0ZC0+cGFnZXNbaV0gPSAtMTsKIAkJLyogU2NhbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzICovCiAJCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IHRkLT5tYXhibG9ja3M7IGJsb2NrKyspIHsKKwogCQkJaW50IGFjdGJsb2NrID0gc3RhcnRibG9jayArIGRpciAqIGJsb2NrOworCQkJbG9mZl90IG9mZnMgPSBhY3RibG9jayA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7CisKIAkJCS8qIFJlYWQgZmlyc3QgcGFnZSAqLwotCQkJbmFuZF9yZWFkX3JhdyAobXRkLCBidWYsIGFjdGJsb2NrIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCwgbXRkLT5vb2JibG9jaywgbXRkLT5vb2JzaXplKTsKLQkJCWlmICghY2hlY2tfcGF0dGVybihidWYsIHNjYW5sZW4sIG10ZC0+b29iYmxvY2ssIHRkKSkgewotCQkJCXRkLT5wYWdlc1tpXSA9IGFjdGJsb2NrIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKKwkJCXNjYW5fcmVhZF9yYXcobXRkLCBidWYsIG9mZnMsIG10ZC0+d3JpdGVzaXplKTsKKwkJCWlmICghY2hlY2tfcGF0dGVybihidWYsIHNjYW5sZW4sIG10ZC0+d3JpdGVzaXplLCB0ZCkpIHsKKwkJCQl0ZC0+cGFnZXNbaV0gPSBhY3RibG9jayA8PCBibG9ja3RvcGFnZTsKIAkJCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSB7Ci0JCQkJCXRkLT52ZXJzaW9uW2ldID0gYnVmW210ZC0+b29iYmxvY2sgKyB0ZC0+dmVyb2Zmc107CisJCQkJCXRkLT52ZXJzaW9uW2ldID0gYnVmW210ZC0+d3JpdGVzaXplICsgdGQtPnZlcm9mZnNdOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCX0KQEAgLTQzMSw5ICs1MTUsMTAgQEAKIAkvKiBDaGVjaywgaWYgd2UgZm91bmQgYSBiYnQgZm9yIGVhY2ggcmVxdWVzdGVkIGNoaXAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2hpcHM7IGkrKykgewogCQlpZiAodGQtPnBhZ2VzW2ldID09IC0xKQotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkJhZCBibG9jayB0YWJsZSBub3QgZm91bmQgZm9yIGNoaXAgJWRcbiIsIGkpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQmFkIGJsb2NrIHRhYmxlIG5vdCBmb3VuZCBmb3IgY2hpcCAlZFxuIiwgaSk7CiAJCWVsc2UKLQkJCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGZvdW5kIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCB0ZC0+cGFnZXNbaV0sIHRkLT52ZXJzaW9uW2ldKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgZm91bmQgYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsIHRkLT5wYWdlc1tpXSwKKwkJCSAgICAgICB0ZC0+dmVyc2lvbltpXSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDQ3LDIxICs1MzIsMTkgQEAKICAqCiAgKiBTZWFyY2ggYW5kIHJlYWQgdGhlIGJhZCBibG9jayB0YWJsZShzKQogKi8KLXN0YXRpYyBpbnQgc2VhcmNoX3JlYWRfYmJ0cyAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwKLQlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kKQorc3RhdGljIGludCBzZWFyY2hfcmVhZF9iYnRzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICogYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kKQogewogCS8qIFNlYXJjaCB0aGUgcHJpbWFyeSB0YWJsZSAqLwotCXNlYXJjaF9iYnQgKG10ZCwgYnVmLCB0ZCk7CisJc2VhcmNoX2JidChtdGQsIGJ1ZiwgdGQpOwogCiAJLyogU2VhcmNoIHRoZSBtaXJyb3IgdGFibGUgKi8KIAlpZiAobWQpCi0JCXNlYXJjaF9iYnQgKG10ZCwgYnVmLCBtZCk7CisJCXNlYXJjaF9iYnQobXRkLCBidWYsIG1kKTsKIAogCS8qIEZvcmNlIHJlc3VsdCBjaGVjayAqLwogCXJldHVybiAxOwogfQogCi0KIC8qKgogICogd3JpdGVfYmJ0IC0gW0dFTkVSSUNdIChSZSl3cml0ZSB0aGUgYmFkIGJsb2NrIHRhYmxlCiAgKgpAQCAtNDc0LDI1ICs1NTcsMzEgQEAKICAqIChSZSl3cml0ZSB0aGUgYmFkIGJsb2NrIHRhYmxlCiAgKgogKi8KLXN0YXRpYyBpbnQgd3JpdGVfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAotCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqbWQsIGludCBjaGlwc2VsKQorc3RhdGljIGludCB3cml0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwKKwkJICAgICBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kLAorCQkgICAgIGludCBjaGlwc2VsKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IG5hbmRfb29iaW5mbyBvb2JpbmZvOwogCXN0cnVjdCBlcmFzZV9pbmZvIGVpbmZvOwogCWludCBpLCBqLCByZXMsIGNoaXAgPSAwOwogCWludCBiaXRzLCBzdGFydGJsb2NrLCBkaXIsIHBhZ2UsIG9mZnMsIG51bWJsb2Nrcywgc2Z0LCBzZnRtc2s7Ci0JaW50IG5yY2hpcHMsIGJidG9mZnMsIHBhZ2VvZmZzOworCWludCBucmNoaXBzLCBiYnRvZmZzLCBwYWdlb2Zmcywgb29ib2ZmczsKIAl1aW50OF90IG1za1s0XTsKIAl1aW50OF90IHJjb2RlID0gdGQtPnJlc2VydmVkX2Jsb2NrX2NvZGU7CiAJc2l6ZV90IHJldGxlbiwgbGVuID0gMDsKIAlsb2ZmX3QgdG87CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKworCW9wcy5vb2JsZW4gPSBtdGQtPm9vYnNpemU7CisJb3BzLm9vYm9mZnMgPSAwOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKIAogCWlmICghcmNvZGUpCiAJCXJjb2RlID0gMHhmZjsKIAkvKiBXcml0ZSBiYWQgYmxvY2sgdGFibGUgcGVyIGNoaXAgcmF0aGVyIHRoYW4gcGVyIGRldmljZSA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkgewotCQludW1ibG9ja3MgPSAoaW50KSAodGhpcy0+Y2hpcHNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKKwkJbnVtYmxvY2tzID0gKGludCkodGhpcy0+Y2hpcHNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAkJLyogRnVsbCBkZXZpY2Ugd3JpdGUgb3Igc3BlY2lmaWMgY2hpcCA/ICovCiAJCWlmIChjaGlwc2VsID09IC0xKSB7CiAJCQlucmNoaXBzID0gdGhpcy0+bnVtY2hpcHM7CkBAIC01MDEsNyArNTkwLDcgQEAKIAkJCWNoaXAgPSBjaGlwc2VsOwogCQl9CiAJfSBlbHNlIHsKLQkJbnVtYmxvY2tzID0gKGludCkgKG10ZC0+c2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQludW1ibG9ja3MgPSAoaW50KShtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAkJbnJjaGlwcyA9IDE7CiAJfQogCkBAIC01MzAsMjcgKzYxOSwzOCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgdGQtPm1heGJsb2NrczsgaSsrKSB7CiAJCQlpbnQgYmxvY2sgPSBzdGFydGJsb2NrICsgZGlyICogaTsKIAkJCS8qIENoZWNrLCBpZiB0aGUgYmxvY2sgaXMgYmFkICovCi0JCQlzd2l0Y2ggKCh0aGlzLT5iYnRbYmxvY2sgPj4gMl0gPj4gKDIgKiAoYmxvY2sgJiAweDAzKSkpICYgMHgwMykgeworCQkJc3dpdGNoICgodGhpcy0+YmJ0W2Jsb2NrID4+IDJdID4+CisJCQkJICgyICogKGJsb2NrICYgMHgwMykpKSAmIDB4MDMpIHsKIAkJCWNhc2UgMHgwMToKIAkJCWNhc2UgMHgwMzoKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCXBhZ2UgPSBibG9jayA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CisJCQlwYWdlID0gYmxvY2sgPDwKKwkJCQkodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CiAJCQkvKiBDaGVjaywgaWYgdGhlIGJsb2NrIGlzIHVzZWQgYnkgdGhlIG1pcnJvciB0YWJsZSAqLwogCQkJaWYgKCFtZCB8fCBtZC0+cGFnZXNbY2hpcF0gIT0gcGFnZSkKIAkJCQlnb3RvIHdyaXRlOwogCQl9Ci0JCXByaW50ayAoS0VSTl9FUlIgIk5vIHNwYWNlIGxlZnQgdG8gd3JpdGUgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBzcGFjZSBsZWZ0IHRvIHdyaXRlIGJhZCBibG9jayB0YWJsZVxuIik7CiAJCXJldHVybiAtRU5PU1BDOwotd3JpdGU6CisJd3JpdGU6CiAKIAkJLyogU2V0IHVwIHNoaWZ0IGNvdW50IGFuZCBtYXNrcyBmb3IgdGhlIGZsYXNoIHRhYmxlICovCiAJCWJpdHMgPSB0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX05SQklUU19NU0s7CisJCW1za1syXSA9IH5yY29kZTsKIAkJc3dpdGNoIChiaXRzKSB7Ci0JCWNhc2UgMTogc2Z0ID0gMzsgc2Z0bXNrID0gMHgwNzsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwMTsgbXNrWzJdID0gfnJjb2RlOyBtc2tbM10gPSAweDAxOyBicmVhazsKLQkJY2FzZSAyOiBzZnQgPSAyOyBzZnRtc2sgPSAweDA2OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDAxOyBtc2tbMl0gPSB+cmNvZGU7IG1za1szXSA9IDB4MDM7IGJyZWFrOwotCQljYXNlIDQ6IHNmdCA9IDE7IHNmdG1zayA9IDB4MDQ7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MEM7IG1za1syXSA9IH5yY29kZTsgbXNrWzNdID0gMHgwZjsgYnJlYWs7Ci0JCWNhc2UgODogc2Z0ID0gMDsgc2Z0bXNrID0gMHgwMDsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwRjsgbXNrWzJdID0gfnJjb2RlOyBtc2tbM10gPSAweGZmOyBicmVhazsKKwkJY2FzZSAxOiBzZnQgPSAzOyBzZnRtc2sgPSAweDA3OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDAxOworCQkJbXNrWzNdID0gMHgwMTsKKwkJCWJyZWFrOworCQljYXNlIDI6IHNmdCA9IDI7IHNmdG1zayA9IDB4MDY7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MDE7CisJCQltc2tbM10gPSAweDAzOworCQkJYnJlYWs7CisJCWNhc2UgNDogc2Z0ID0gMTsgc2Z0bXNrID0gMHgwNDsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwQzsKKwkJCW1za1szXSA9IDB4MGY7CisJCQlicmVhazsKKwkJY2FzZSA4OiBzZnQgPSAwOyBzZnRtc2sgPSAweDAwOyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDBGOworCQkJbXNrWzNdID0gMHhmZjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC01NTgsODIgKzY1OCw5MiBAQAogCiAJCXRvID0gKChsb2ZmX3QpIHBhZ2UpIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7CiAKLQkJbWVtY3B5ICgmb29iaW5mbywgdGhpcy0+YXV0b29vYiwgc2l6ZW9mKG9vYmluZm8pKTsKLQkJb29iaW5mby51c2VlY2MgPSBNVERfTkFOREVDQ19QTEFDRU9OTFk7Ci0KIAkJLyogTXVzdCB3ZSBzYXZlIHRoZSBibG9jayBjb250ZW50cyA/ICovCiAJCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NBVkVDT05URU5UKSB7CiAJCQkvKiBNYWtlIGl0IGJsb2NrIGFsaWduZWQgKi8KIAkJCXRvICY9IH4oKGxvZmZfdCkgKCgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCkgLSAxKSk7CiAJCQlsZW4gPSAxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdDsKLQkJCXJlcyA9IG10ZC0+cmVhZF9lY2MgKG10ZCwgdG8sIGxlbiwgJnJldGxlbiwgYnVmLCAmYnVmW2xlbl0sICZvb2JpbmZvKTsKKwkJCXJlcyA9IG10ZC0+cmVhZChtdGQsIHRvLCBsZW4sICZyZXRsZW4sIGJ1Zik7CiAJCQlpZiAocmVzIDwgMCkgewogCQkJCWlmIChyZXRsZW4gIT0gbGVuKSB7Ci0JCQkJCXByaW50ayAoS0VSTl9JTkZPICJuYW5kX2JidDogRXJyb3IgcmVhZGluZyBibG9jayBmb3Igd3JpdGluZyB0aGUgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAibmFuZF9iYnQ6IEVycm9yICIKKwkJCQkJICAgICAgICJyZWFkaW5nIGJsb2NrIGZvciB3cml0aW5nICIKKwkJCQkJICAgICAgICJ0aGUgYmFkIGJsb2NrIHRhYmxlXG4iKTsKIAkJCQkJcmV0dXJuIHJlczsKIAkJCQl9Ci0JCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm5hbmRfYmJ0OiBFQ0MgZXJyb3Igd2hpbGUgcmVhZGluZyBibG9jayBmb3Igd3JpdGluZyBiYWQgYmxvY2sgdGFibGVcbiIpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5hbmRfYmJ0OiBFQ0MgZXJyb3IgIgorCQkJCSAgICAgICAid2hpbGUgcmVhZGluZyBibG9jayBmb3Igd3JpdGluZyAiCisJCQkJICAgICAgICJiYWQgYmxvY2sgdGFibGVcbiIpOwogCQkJfQorCQkJLyogUmVhZCBvb2IgZGF0YSAqLworCQkJb3BzLmxlbiA9IChsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdCkgKiBtdGQtPm9vYnNpemU7CisJCQlvcHMub29iYnVmID0gJmJ1ZltsZW5dOworCQkJcmVzID0gbXRkLT5yZWFkX29vYihtdGQsIHRvICsgbXRkLT53cml0ZXNpemUsICZvcHMpOworCQkJaWYgKHJlcyA8IDAgfHwgb3BzLnJldGxlbiAhPSBvcHMubGVuKQorCQkJCWdvdG8gb3V0ZXJyOworCiAJCQkvKiBDYWxjIHRoZSBieXRlIG9mZnNldCBpbiB0aGUgYnVmZmVyICovCiAJCQlwYWdlb2ZmcyA9IHBhZ2UgLSAoaW50KSh0byA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKIAkJCW9mZnMgPSBwYWdlb2ZmcyA8PCB0aGlzLT5wYWdlX3NoaWZ0OwogCQkJLyogUHJlc2V0IHRoZSBiYnQgYXJlYSB3aXRoIDB4ZmYgKi8KLQkJCW1lbXNldCAoJmJ1ZltvZmZzXSwgMHhmZiwgKHNpemVfdCkobnVtYmxvY2tzID4+IHNmdCkpOwotCQkJLyogUHJlc2V0IHRoZSBiYnQncyBvb2IgYXJlYSB3aXRoIDB4ZmYgKi8KLQkJCW1lbXNldCAoJmJ1ZltsZW4gKyBwYWdlb2ZmcyAqIG10ZC0+b29ic2l6ZV0sIDB4ZmYsCi0JCQkJKChsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdCkgLSBwYWdlb2ZmcykgKiBtdGQtPm9vYnNpemUpOwotCQkJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikgewotCQkJCWJ1ZltsZW4gKyAocGFnZW9mZnMgKiBtdGQtPm9vYnNpemUpICsgdGQtPnZlcm9mZnNdID0gdGQtPnZlcnNpb25bY2hpcF07Ci0JCQl9CisJCQltZW1zZXQoJmJ1ZltvZmZzXSwgMHhmZiwgKHNpemVfdCkgKG51bWJsb2NrcyA+PiBzZnQpKTsKKwkJCW9vYm9mZnMgPSBsZW4gKyAocGFnZW9mZnMgKiBtdGQtPm9vYnNpemUpOworCiAJCX0gZWxzZSB7CiAJCQkvKiBDYWxjIGxlbmd0aCAqLwogCQkJbGVuID0gKHNpemVfdCkgKG51bWJsb2NrcyA+PiBzZnQpOwogCQkJLyogTWFrZSBpdCBwYWdlIGFsaWduZWQgISAqLwotCQkJbGVuID0gKGxlbiArIChtdGQtPm9vYmJsb2NrLTEpKSAmIH4obXRkLT5vb2JibG9jay0xKTsKKwkJCWxlbiA9IChsZW4gKyAobXRkLT53cml0ZXNpemUgLSAxKSkgJgorCQkJCX4obXRkLT53cml0ZXNpemUgLSAxKTsKIAkJCS8qIFByZXNldCB0aGUgYnVmZmVyIHdpdGggMHhmZiAqLwotCQkJbWVtc2V0IChidWYsIDB4ZmYsIGxlbiArIChsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdCkgKiBtdGQtPm9vYnNpemUpOworCQkJbWVtc2V0KGJ1ZiwgMHhmZiwgbGVuICsKKwkJCSAgICAgICAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpKiBtdGQtPm9vYnNpemUpOwogCQkJb2ZmcyA9IDA7CisJCQlvb2JvZmZzID0gbGVuOwogCQkJLyogUGF0dGVybiBpcyBsb2NhdGVkIGluIG9vYiBhcmVhIG9mIGZpcnN0IHBhZ2UgKi8KLQkJCW1lbWNweSAoJmJ1ZltsZW4gKyB0ZC0+b2Zmc10sIHRkLT5wYXR0ZXJuLCB0ZC0+bGVuKTsKLQkJCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pIHsKLQkJCQlidWZbbGVuICsgdGQtPnZlcm9mZnNdID0gdGQtPnZlcnNpb25bY2hpcF07Ci0JCQl9CisJCQltZW1jcHkoJmJ1Zltvb2JvZmZzICsgdGQtPm9mZnNdLCB0ZC0+cGF0dGVybiwgdGQtPmxlbik7CiAJCX0KIAorCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKQorCQkJYnVmW29vYm9mZnMgKyB0ZC0+dmVyb2Zmc10gPSB0ZC0+dmVyc2lvbltjaGlwXTsKKwogCQkvKiB3YWxrIHRocm91Z2ggdGhlIG1lbW9yeSB0YWJsZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmxvY2tzOyApIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bWJsb2NrczspIHsKIAkJCXVpbnQ4X3QgZGF0OwogCQkJZGF0ID0gdGhpcy0+YmJ0W2JidG9mZnMgKyAoaSA+PiAyKV07Ci0JCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrICwgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrLCBpKyspIHsKIAkJCQlpbnQgc2Z0Y250ID0gKGkgPDwgKDMgLSBzZnQpKSAmIHNmdG1zazsKIAkJCQkvKiBEbyBub3Qgc3RvcmUgdGhlIHJlc2VydmVkIGJidCBibG9ja3MgISAqLwotCQkJCWJ1ZltvZmZzICsgKGkgPj4gc2Z0KV0gJj0gfihtc2tbZGF0ICYgMHgwM10gPDwgc2Z0Y250KTsKKwkJCQlidWZbb2ZmcyArIChpID4+IHNmdCldICY9CisJCQkJCX4obXNrW2RhdCAmIDB4MDNdIDw8IHNmdGNudCk7CiAJCQkJZGF0ID4+PSAyOwogCQkJfQogCQl9CiAKLQkJbWVtc2V0ICgmZWluZm8sIDAsIHNpemVvZiAoZWluZm8pKTsKKwkJbWVtc2V0KCZlaW5mbywgMCwgc2l6ZW9mKGVpbmZvKSk7CiAJCWVpbmZvLm10ZCA9IG10ZDsKLQkJZWluZm8uYWRkciA9ICh1bnNpZ25lZCBsb25nKSB0bzsKKwkJZWluZm8uYWRkciA9ICh1bnNpZ25lZCBsb25nKXRvOwogCQllaW5mby5sZW4gPSAxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdDsKLQkJcmVzID0gbmFuZF9lcmFzZV9uYW5kIChtdGQsICZlaW5mbywgMSk7Ci0JCWlmIChyZXMgPCAwKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9iYnQ6IEVycm9yIGR1cmluZyBibG9jayBlcmFzZTogJWRcbiIsIHJlcyk7Ci0JCQlyZXR1cm4gcmVzOwotCQl9CisJCXJlcyA9IG5hbmRfZXJhc2VfbmFuZChtdGQsICZlaW5mbywgMSk7CisJCWlmIChyZXMgPCAwKQorCQkJZ290byBvdXRlcnI7CiAKLQkJcmVzID0gbXRkLT53cml0ZV9lY2MgKG10ZCwgdG8sIGxlbiwgJnJldGxlbiwgYnVmLCAmYnVmW2xlbl0sICZvb2JpbmZvKTsKLQkJaWYgKHJlcyA8IDApIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRXJyb3Igd2hpbGUgd3JpdGluZyBiYWQgYmxvY2sgdGFibGUgJWRcbiIsIHJlcyk7Ci0JCQlyZXR1cm4gcmVzOwotCQl9Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIHdyaXR0ZW4gdG8gMHglMDh4LCB2ZXJzaW9uIDB4JTAyWFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpIHRvLCB0ZC0+dmVyc2lvbltjaGlwXSk7CisJCXJlcyA9IHNjYW5fd3JpdGVfYmJ0KG10ZCwgdG8sIGxlbiwgYnVmLCAmYnVmW2xlbl0pOworCQlpZiAocmVzIDwgMCkKKwkJCWdvdG8gb3V0ZXJyOworCisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgd3JpdHRlbiB0byAweCUwOHgsIHZlcnNpb24gIgorCQkgICAgICAgIjB4JTAyWFxuIiwgKHVuc2lnbmVkIGludCl0bywgdGQtPnZlcnNpb25bY2hpcF0pOwogCiAJCS8qIE1hcmsgaXQgYXMgdXNlZCAqLwogCQl0ZC0+cGFnZXNbY2hpcF0gPSBwYWdlOwogCX0KIAlyZXR1cm4gMDsKKworIG91dGVycjoKKwlwcmludGsoS0VSTl9XQVJOSU5HCisJICAgICAgICJuYW5kX2JidDogRXJyb3Igd2hpbGUgd3JpdGluZyBiYWQgYmxvY2sgdGFibGUgJWRcbiIsIHJlcyk7CisJcmV0dXJuIHJlczsKIH0KIAogLyoqCkBAIC02NDQsMjcgKzc1NCwyNyBAQAogICogVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBtZW1vcnkgYmFzZWQgYmJ0IGJ5IHNjYW5uaW5nIHRoZSBkZXZpY2UKICAqIGZvciBtYW51ZmFjdHVyZXIgLyBzb2Z0d2FyZSBtYXJrZWQgZ29vZCAvIGJhZCBibG9ja3MKICovCi1zdGF0aWMgaW5saW5lIGludCBuYW5kX21lbW9yeV9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQorc3RhdGljIGlubGluZSBpbnQgbmFuZF9tZW1vcnlfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKIAliZC0+b3B0aW9ucyAmPSB+TkFORF9CQlRfU0NBTkVNUFRZOwotCXJldHVybiBjcmVhdGVfYmJ0IChtdGQsIHRoaXMtPmRhdGFfYnVmLCBiZCwgLTEpOworCXJldHVybiBjcmVhdGVfYmJ0KG10ZCwgdGhpcy0+YnVmZmVycy5kYXRhYnVmLCBiZCwgLTEpOwogfQogCiAvKioKLSAqIGNoZWNrX2NyZWF0ZSAtIFtHRU5FUklDXSBjcmVhdGUgYW5kIHdyaXRlIGJidChzKSBpZiBuZWNjZWNhcnkKKyAqIGNoZWNrX2NyZWF0ZSAtIFtHRU5FUklDXSBjcmVhdGUgYW5kIHdyaXRlIGJidChzKSBpZiBuZWNlc3NhcnkKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAYnVmOgl0ZW1wb3JhcnkgYnVmZmVyCiAgKiBAYmQ6CQlkZXNjcmlwdG9yIGZvciB0aGUgZ29vZC9iYWQgYmxvY2sgc2VhcmNoIHBhdHRlcm4KICAqCiAgKiBUaGUgZnVuY3Rpb24gY2hlY2tzIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyBjYWxsIHRvIHJlYWRfYmJ0Ci0gKiBhbmQgY3JlYXRlcyAvIHVwZGF0ZXMgdGhlIGJidChzKSBpZiBuZWNjZWNhcnkKLSAqIENyZWF0aW9uIGlzIG5lY2NlY2FyeSBpZiBubyBiYnQgd2FzIGZvdW5kIGZvciB0aGUgY2hpcC9kZXZpY2UKLSAqIFVwZGF0ZSBpcyBuZWNjZWNhcnkgaWYgb25lIG9mIHRoZSB0YWJsZXMgaXMgbWlzc2luZyBvciB0aGUKKyAqIGFuZCBjcmVhdGVzIC8gdXBkYXRlcyB0aGUgYmJ0KHMpIGlmIG5lY2Vzc2FyeQorICogQ3JlYXRpb24gaXMgbmVjZXNzYXJ5IGlmIG5vIGJidCB3YXMgZm91bmQgZm9yIHRoZSBjaGlwL2RldmljZQorICogVXBkYXRlIGlzIG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHRhYmxlcyBpcyBtaXNzaW5nIG9yIHRoZQogICogdmVyc2lvbiBuci4gb2Ygb25lIHRhYmxlIGlzIGxlc3MgdGhhbiB0aGUgb3RoZXIKICovCi1zdGF0aWMgaW50IGNoZWNrX2NyZWF0ZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCkKK3N0YXRpYyBpbnQgY2hlY2tfY3JlYXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpCiB7CiAJaW50IGksIGNoaXBzLCB3cml0ZW9wcywgY2hpcHNlbCwgcmVzOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CkBAIC03MzIsMzUgKzg0MiwzNSBAQAogCQkJcmQgPSB0ZDsKIAkJCWdvdG8gd3JpdGVjaGVjazsKIAkJfQotY3JlYXRlOgorCWNyZWF0ZToKIAkJLyogQ3JlYXRlIHRoZSBiYWQgYmxvY2sgdGFibGUgYnkgc2Nhbm5pbmcgdGhlIGRldmljZSA/ICovCiAJCWlmICghKHRkLT5vcHRpb25zICYgTkFORF9CQlRfQ1JFQVRFKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIENyZWF0ZSB0aGUgdGFibGUgaW4gbWVtb3J5IGJ5IHNjYW5uaW5nIHRoZSBjaGlwKHMpICovCi0JCWNyZWF0ZV9iYnQgKG10ZCwgYnVmLCBiZCwgY2hpcHNlbCk7CisJCWNyZWF0ZV9iYnQobXRkLCBidWYsIGJkLCBjaGlwc2VsKTsKIAogCQl0ZC0+dmVyc2lvbltpXSA9IDE7CiAJCWlmIChtZCkKIAkJCW1kLT52ZXJzaW9uW2ldID0gMTsKLXdyaXRlY2hlY2s6CisJd3JpdGVjaGVjazoKIAkJLyogcmVhZCBiYWNrIGZpcnN0ID8gKi8KIAkJaWYgKHJkKQotCQkJcmVhZF9hYnNfYmJ0IChtdGQsIGJ1ZiwgcmQsIGNoaXBzZWwpOworCQkJcmVhZF9hYnNfYmJ0KG10ZCwgYnVmLCByZCwgY2hpcHNlbCk7CiAJCS8qIElmIHRoZXkgd2VyZW4ndCB2ZXJzaW9uZWQsIHJlYWQgYm90aC4gKi8KIAkJaWYgKHJkMikKLQkJCXJlYWRfYWJzX2JidCAobXRkLCBidWYsIHJkMiwgY2hpcHNlbCk7CisJCQlyZWFkX2Fic19iYnQobXRkLCBidWYsIHJkMiwgY2hpcHNlbCk7CiAKIAkJLyogV3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZSB0byB0aGUgZGV2aWNlID8gKi8KIAkJaWYgKCh3cml0ZW9wcyAmIDB4MDEpICYmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1dSSVRFKSkgewotCQkJcmVzID0gd3JpdGVfYmJ0IChtdGQsIGJ1ZiwgdGQsIG1kLCBjaGlwc2VsKTsKKwkJCXJlcyA9IHdyaXRlX2JidChtdGQsIGJ1ZiwgdGQsIG1kLCBjaGlwc2VsKTsKIAkJCWlmIChyZXMgPCAwKQogCQkJCXJldHVybiByZXM7CiAJCX0KIAogCQkvKiBXcml0ZSB0aGUgbWlycm9yIGJhZCBibG9jayB0YWJsZSB0byB0aGUgZGV2aWNlID8gKi8KIAkJaWYgKCh3cml0ZW9wcyAmIDB4MDIpICYmIG1kICYmIChtZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1dSSVRFKSkgewotCQkJcmVzID0gd3JpdGVfYmJ0IChtdGQsIGJ1ZiwgbWQsIHRkLCBjaGlwc2VsKTsKKwkJCXJlcyA9IHdyaXRlX2JidChtdGQsIGJ1ZiwgbWQsIHRkLCBjaGlwc2VsKTsKIAkJCWlmIChyZXMgPCAwKQogCQkJCXJldHVybiByZXM7CiAJCX0KQEAgLTc3Nyw3ICs4ODcsNyBAQAogICogYWNjaWRlbnRhbCBlcmFzdXJlcyAvIHdyaXRlcy4gVGhlIHJlZ2lvbnMgYXJlIGlkZW50aWZpZWQgYnkKICAqIHRoZSBtYXJrIDB4MDIuCiAqLwotc3RhdGljIHZvaWQgbWFya19iYnRfcmVnaW9uIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3N0YXRpYyB2b2lkIG1hcmtfYmJ0X3JlZ2lvbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCBpLCBqLCBjaGlwcywgYmxvY2ssIG5yYmxvY2tzLCB1cGRhdGU7CkBAIC03OTUsNyArOTA1LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgY2hpcHM7IGkrKykgewogCQlpZiAoKHRkLT5vcHRpb25zICYgTkFORF9CQlRfQUJTUEFHRSkgfHwKIAkJICAgICEodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJICAgIAlpZiAodGQtPnBhZ2VzW2ldID09IC0xKSBjb250aW51ZTsKKwkJCWlmICh0ZC0+cGFnZXNbaV0gPT0gLTEpCisJCQkJY29udGludWU7CiAJCQlibG9jayA9IHRkLT5wYWdlc1tpXSA+PiAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CiAJCQlibG9jayA8PD0gMTsKIAkJCW9sZHZhbCA9IHRoaXMtPmJidFsoYmxvY2sgPj4gMyldOwpAQCAtODE1LDcgKzkyNiw4IEBACiAJCQlvbGR2YWwgPSB0aGlzLT5iYnRbKGJsb2NrID4+IDMpXTsKIAkJCW5ld3ZhbCA9IG9sZHZhbCB8ICgweDIgPDwgKGJsb2NrICYgMHgwNikpOwogCQkJdGhpcy0+YmJ0WyhibG9jayA+PiAzKV0gPSBuZXd2YWw7Ci0JCQlpZiAob2xkdmFsICE9IG5ld3ZhbCkgdXBkYXRlID0gMTsKKwkJCWlmIChvbGR2YWwgIT0gbmV3dmFsKQorCQkJCXVwZGF0ZSA9IDE7CiAJCQlibG9jayArPSAyOwogCQl9CiAJCS8qIElmIHdlIHdhbnQgcmVzZXJ2ZWQgYmxvY2tzIHRvIGJlIHJlY29yZGVkIHRvIGZsYXNoLCBhbmQgc29tZQpAQCAtODQwLDcgKzk1Miw3IEBACiAgKiBieSBjYWxsaW5nIHRoZSBuYW5kX2ZyZWVfYmJ0IGZ1bmN0aW9uLgogICoKICovCi1pbnQgbmFuZF9zY2FuX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpCitpbnQgbmFuZF9zY2FuX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCBsZW4sIHJlcyA9IDA7CkBAIC04NTAsMjEgKzk2MiwyMSBAQAogCiAJbGVuID0gbXRkLT5zaXplID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgKyAyKTsKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgKDJiaXQgcGVyIGJsb2NrKSAqLwotCXRoaXMtPmJidCA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJdGhpcy0+YmJ0ID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghdGhpcy0+YmJ0KSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIm5hbmRfc2Nhbl9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfc2Nhbl9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogQ2xlYXIgdGhlIG1lbW9yeSBiYWQgYmxvY2sgdGFibGUgKi8KLQltZW1zZXQgKHRoaXMtPmJidCwgMHgwMCwgbGVuKTsKKwltZW1zZXQodGhpcy0+YmJ0LCAweDAwLCBsZW4pOwogCiAJLyogSWYgbm8gcHJpbWFyeSB0YWJsZSBkZWNyaXB0b3IgaXMgZ2l2ZW4sIHNjYW4gdGhlIGRldmljZQogCSAqIHRvIGJ1aWxkIGEgbWVtb3J5IGJhc2VkIGJhZCBibG9jayB0YWJsZQogCSAqLwogCWlmICghdGQpIHsKIAkJaWYgKChyZXMgPSBuYW5kX21lbW9yeV9iYnQobXRkLCBiZCkpKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX2JidDogQ2FuJ3Qgc2NhbiBmbGFzaCBhbmQgYnVpbGQgdGhlIFJBTS1iYXNlZCBCQlRcbiIpOwotCQkJa2ZyZWUgKHRoaXMtPmJidCk7CisJCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfYmJ0OiBDYW4ndCBzY2FuIGZsYXNoIGFuZCBidWlsZCB0aGUgUkFNLWJhc2VkIEJCVFxuIik7CisJCQlrZnJlZSh0aGlzLT5iYnQpOwogCQkJdGhpcy0+YmJ0ID0gTlVMTDsKIAkJfQogCQlyZXR1cm4gcmVzOwpAQCAtODczLDM1ICs5ODUsMzQgQEAKIAkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIG9uZSBlcmFzZWJsb2NrIGluY2wuIG9vYiAqLwogCWxlbiA9ICgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJbGVuICs9IChsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdCkgKiBtdGQtPm9vYnNpemU7Ci0JYnVmID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKKwlidWYgPSB2bWFsbG9jKGxlbik7CiAJaWYgKCFidWYpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAibmFuZF9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOwotCQlrZnJlZSAodGhpcy0+YmJ0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJuYW5kX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CisJCWtmcmVlKHRoaXMtPmJidCk7CiAJCXRoaXMtPmJidCA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIElzIHRoZSBiYnQgYXQgYSBnaXZlbiBwYWdlID8gKi8KIAlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9BQlNQQUdFKSB7Ci0JCXJlcyA9IHJlYWRfYWJzX2JidHMgKG10ZCwgYnVmLCB0ZCwgbWQpOworCQlyZXMgPSByZWFkX2Fic19iYnRzKG10ZCwgYnVmLCB0ZCwgbWQpOwogCX0gZWxzZSB7CiAJCS8qIFNlYXJjaCB0aGUgYmFkIGJsb2NrIHRhYmxlIHVzaW5nIGEgcGF0dGVybiBpbiBvb2IgKi8KLQkJcmVzID0gc2VhcmNoX3JlYWRfYmJ0cyAobXRkLCBidWYsIHRkLCBtZCk7CisJCXJlcyA9IHNlYXJjaF9yZWFkX2JidHMobXRkLCBidWYsIHRkLCBtZCk7CiAJfQogCiAJaWYgKHJlcykKLQkJcmVzID0gY2hlY2tfY3JlYXRlIChtdGQsIGJ1ZiwgYmQpOworCQlyZXMgPSBjaGVja19jcmVhdGUobXRkLCBidWYsIGJkKTsKIAogCS8qIFByZXZlbnQgdGhlIGJidCByZWdpb25zIGZyb20gZXJhc2luZyAvIHdyaXRpbmcgKi8KLQltYXJrX2JidF9yZWdpb24gKG10ZCwgdGQpOworCW1hcmtfYmJ0X3JlZ2lvbihtdGQsIHRkKTsKIAlpZiAobWQpCi0JCW1hcmtfYmJ0X3JlZ2lvbiAobXRkLCBtZCk7CisJCW1hcmtfYmJ0X3JlZ2lvbihtdGQsIG1kKTsKIAotCWtmcmVlIChidWYpOworCXZmcmVlKGJ1Zik7CiAJcmV0dXJuIHJlczsKIH0KIAotCiAvKioKICAqIG5hbmRfdXBkYXRlX2JidCAtIFtOQU5EIEludGVyZmFjZV0gdXBkYXRlIGJhZCBibG9jayB0YWJsZShzKQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTkwOSw3ICsxMDIwLDcgQEAKICAqCiAgKiBUaGUgZnVuY3Rpb24gdXBkYXRlcyB0aGUgYmFkIGJsb2NrIHRhYmxlKHMpCiAqLwotaW50IG5hbmRfdXBkYXRlX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKQoraW50IG5hbmRfdXBkYXRlX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgbGVuLCByZXMgPSAwLCB3cml0ZW9wcyA9IDA7CkBAIC05MjUsOSArMTAzNiw5IEBACiAJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBvbmUgZXJhc2VibG9jayBpbmNsLiBvb2IgKi8KIAlsZW4gPSAoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCWxlbiArPSAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplOwotCWJ1ZiA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIm5hbmRfdXBkYXRlX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAibmFuZF91cGRhdGVfYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC05MzUsNyArMTA0Niw3IEBACiAKIAkvKiBEbyB3ZSBoYXZlIGEgYmJ0IHBlciBjaGlwID8gKi8KIAlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9QRVJDSElQKSB7Ci0JCWNoaXAgPSAoaW50KSAob2ZmcyA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKKwkJY2hpcCA9IChpbnQpKG9mZnMgPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CiAJCWNoaXBzZWwgPSBjaGlwOwogCX0gZWxzZSB7CiAJCWNoaXAgPSAwOwpAQCAtOTQ4LDE3ICsxMDU5LDE3IEBACiAKIAkvKiBXcml0ZSB0aGUgYmFkIGJsb2NrIHRhYmxlIHRvIHRoZSBkZXZpY2UgPyAqLwogCWlmICgod3JpdGVvcHMgJiAweDAxKSAmJiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJcmVzID0gd3JpdGVfYmJ0IChtdGQsIGJ1ZiwgdGQsIG1kLCBjaGlwc2VsKTsKKwkJcmVzID0gd3JpdGVfYmJ0KG10ZCwgYnVmLCB0ZCwgbWQsIGNoaXBzZWwpOwogCQlpZiAocmVzIDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KIAkvKiBXcml0ZSB0aGUgbWlycm9yIGJhZCBibG9jayB0YWJsZSB0byB0aGUgZGV2aWNlID8gKi8KIAlpZiAoKHdyaXRlb3BzICYgMHgwMikgJiYgbWQgJiYgKG1kLT5vcHRpb25zICYgTkFORF9CQlRfV1JJVEUpKSB7Ci0JCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CisJCXJlcyA9IHdyaXRlX2JidChtdGQsIGJ1ZiwgbWQsIHRkLCBjaGlwc2VsKTsKIAl9CiAKLW91dDoKLQlrZnJlZSAoYnVmKTsKKyBvdXQ6CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC05ODEsMTQgKzEwOTIsMTQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc21hbGxwYWdlX2ZsYXNoYmFzZWQgPSB7Ci0JLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FORU1QVFkgfCBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMsCisJLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSwKIAkub2ZmcyA9IDUsCiAJLmxlbiA9IDEsCiAJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgbGFyZ2VwYWdlX2ZsYXNoYmFzZWQgPSB7Ci0JLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FORU1QVFkgfCBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMsCisJLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSwKIAkub2ZmcyA9IDAsCiAJLmxlbiA9IDIsCiAJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KQEAgLTEwMzYsNyArMTE0Nyw3IEBACiAgKiBzdXBwb3J0IGZvciB0aGUgZGV2aWNlIGFuZCBjYWxscyB0aGUgbmFuZF9zY2FuX2JidCBmdW5jdGlvbgogICoKICovCi1pbnQgbmFuZF9kZWZhdWx0X2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQpCitpbnQgbmFuZF9kZWZhdWx0X2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCkBAIC0xMDQ2LDcgKzExNTcsNyBAQAogCSAqIG9mIHRoZSBnb29kIC8gYmFkIGluZm9ybWF0aW9uLCBzbyB3ZSBfbXVzdF8gc3RvcmUKIAkgKiB0aGlzIGluZm9ybWF0aW9uIGluIGEgZ29vZCAvIGJhZCB0YWJsZSBkdXJpbmcKIAkgKiBzdGFydHVwCi0JKi8KKwkgKi8KIAlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSB7CiAJCS8qIFVzZSB0aGUgZGVmYXVsdCBwYXR0ZXJuIGRlc2NyaXB0b3JzICovCiAJCWlmICghdGhpcy0+YmJ0X3RkKSB7CkBAIC0xMDU0LDEwICsxMTY1LDkgQEAKIAkJCXRoaXMtPmJidF9tZCA9ICZiYnRfbWlycm9yX2Rlc2NyOwogCQl9CiAJCXRoaXMtPm9wdGlvbnMgfD0gTkFORF9VU0VfRkxBU0hfQkJUOwotCQlyZXR1cm4gbmFuZF9zY2FuX2JidCAobXRkLCAmYWdhbmRfZmxhc2hiYXNlZCk7CisJCXJldHVybiBuYW5kX3NjYW5fYmJ0KG10ZCwgJmFnYW5kX2ZsYXNoYmFzZWQpOwogCX0KIAotCiAJLyogSXMgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgcmVxdWVzdGVkID8gKi8KIAlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVCkgewogCQkvKiBVc2UgdGhlIGRlZmF1bHQgcGF0dGVybiBkZXNjcmlwdG9ycyAqLwpAQCAtMTA2NiwxOCArMTE3NiwxNyBAQAogCQkJdGhpcy0+YmJ0X21kID0gJmJidF9taXJyb3JfZGVzY3I7CiAJCX0KIAkJaWYgKCF0aGlzLT5iYWRibG9ja19wYXR0ZXJuKSB7Ci0JCQl0aGlzLT5iYWRibG9ja19wYXR0ZXJuID0gKG10ZC0+b29iYmxvY2sgPiA1MTIpID8KLQkJCQkmbGFyZ2VwYWdlX2ZsYXNoYmFzZWQgOiAmc21hbGxwYWdlX2ZsYXNoYmFzZWQ7CisJCQl0aGlzLT5iYWRibG9ja19wYXR0ZXJuID0gKG10ZC0+d3JpdGVzaXplID4gNTEyKSA/ICZsYXJnZXBhZ2VfZmxhc2hiYXNlZCA6ICZzbWFsbHBhZ2VfZmxhc2hiYXNlZDsKIAkJfQogCX0gZWxzZSB7CiAJCXRoaXMtPmJidF90ZCA9IE5VTEw7CiAJCXRoaXMtPmJidF9tZCA9IE5VTEw7CiAJCWlmICghdGhpcy0+YmFkYmxvY2tfcGF0dGVybikgewotCQkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IChtdGQtPm9vYmJsb2NrID4gNTEyKSA/Ci0JCQkJJmxhcmdlcGFnZV9tZW1vcnliYXNlZCA6ICZzbWFsbHBhZ2VfbWVtb3J5YmFzZWQ7CisJCQl0aGlzLT5iYWRibG9ja19wYXR0ZXJuID0gKG10ZC0+d3JpdGVzaXplID4gNTEyKSA/CisJCQkgICAgJmxhcmdlcGFnZV9tZW1vcnliYXNlZCA6ICZzbWFsbHBhZ2VfbWVtb3J5YmFzZWQ7CiAJCX0KIAl9Ci0JcmV0dXJuIG5hbmRfc2Nhbl9iYnQgKG10ZCwgdGhpcy0+YmFkYmxvY2tfcGF0dGVybik7CisJcmV0dXJuIG5hbmRfc2Nhbl9iYnQobXRkLCB0aGlzLT5iYWRibG9ja19wYXR0ZXJuKTsKIH0KIAogLyoqCkBAIC0xMDg3LDI2ICsxMTk2LDI5IEBACiAgKiBAYWxsb3diYnQ6CWFsbG93IGFjY2VzcyB0byBiYWQgYmxvY2sgdGFibGUgcmVnaW9uCiAgKgogKi8KLWludCBuYW5kX2lzYmFkX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBpbnQgYWxsb3diYnQpCitpbnQgbmFuZF9pc2JhZF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBpbnQgYWxsb3diYnQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgYmxvY2s7Ci0JdWludDhfdAlyZXM7CisJdWludDhfdCByZXM7CiAKIAkvKiBHZXQgYmxvY2sgbnVtYmVyICogMiAqLwotCWJsb2NrID0gKGludCkgKG9mZnMgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKKwlibG9jayA9IChpbnQpKG9mZnMgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKIAlyZXMgPSAodGhpcy0+YmJ0W2Jsb2NrID4+IDNdID4+IChibG9jayAmIDB4MDYpKSAmIDB4MDM7CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMiwgIm5hbmRfaXNiYWRfYmJ0KCk6IGJidCBpbmZvIGZvciBvZmZzIDB4JTA4eDogKGJsb2NrICVkKSAweCUwMnhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpb2ZmcywgYmxvY2sgPj4gMSwgcmVzKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwyLCAibmFuZF9pc2JhZF9iYnQoKTogYmJ0IGluZm8gZm9yIG9mZnMgMHglMDh4OiAoYmxvY2sgJWQpIDB4JTAyeFxuIiwKKwkgICAgICAodW5zaWduZWQgaW50KW9mZnMsIGJsb2NrID4+IDEsIHJlcyk7CiAKIAlzd2l0Y2ggKChpbnQpcmVzKSB7Ci0JY2FzZSAweDAwOglyZXR1cm4gMDsKLQljYXNlIDB4MDE6CXJldHVybiAxOwotCWNhc2UgMHgwMjoJcmV0dXJuIGFsbG93YmJ0ID8gMCA6IDE7CisJY2FzZSAweDAwOgorCQlyZXR1cm4gMDsKKwljYXNlIDB4MDE6CisJCXJldHVybiAxOworCWNhc2UgMHgwMjoKKwkJcmV0dXJuIGFsbG93YmJ0ID8gMCA6IDE7CiAJfQogCXJldHVybiAxOwogfQogCi1FWFBPUlRfU1lNQk9MIChuYW5kX3NjYW5fYmJ0KTsKLUVYUE9SVF9TWU1CT0wgKG5hbmRfZGVmYXVsdF9iYnQpOworRVhQT1JUX1NZTUJPTChuYW5kX3NjYW5fYmJ0KTsKK0VYUE9SVF9TWU1CT0wobmFuZF9kZWZhdWx0X2JidCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKaW5kZXggNDBhYzkwOS4uMmExNjNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwpAQCAtNyw2ICs3LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQogICogICAgICAgICAgICAgICAgICAgICAgICAgVG9zaGliYSBBbWVyaWNhIEVsZWN0cm9uaWNzIENvbXBvbmVudHMsIEluYy4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKgogICogJElkOiBuYW5kX2VjYy5jLHYgMS4xNSAyMDA1LzExLzA3IDExOjE0OjMwIGdsZWl4bmVyIEV4cCAkCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTYyLDkwICs2NCw3NiBAQAogCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAKIH07CiAKLQogLyoqCi0gKiBuYW5kX3RyYW5zX3Jlc3VsdCAtIFtHRU5FUklDXSBjcmVhdGUgbm9uLWludmVydGVkIEVDQwotICogQHJlZzI6CWxpbmUgcGFyaXR5IHJlZyAyCi0gKiBAcmVnMzoJbGluZSBwYXJpdHkgcmVnIDMKLSAqIEBlY2NfY29kZToJZWNjCi0gKgotICogQ3JlYXRlcyBub24taW52ZXJ0ZWQgRUNDIGNvZGUgZnJvbSBsaW5lIHBhcml0eQotICovCi1zdGF0aWMgdm9pZCBuYW5kX3RyYW5zX3Jlc3VsdCh1X2NoYXIgcmVnMiwgdV9jaGFyIHJlZzMsCi0JdV9jaGFyICplY2NfY29kZSkKLXsKLQl1X2NoYXIgYSwgYiwgaSwgdG1wMSwgdG1wMjsKLQotCS8qIEluaXRpYWxpemUgdmFyaWFibGVzICovCi0JYSA9IGIgPSAweDgwOwotCXRtcDEgPSB0bXAyID0gMDsKLQotCS8qIENhbGN1bGF0ZSBmaXJzdCBFQ0MgYnl0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaWYgKHJlZzMgJiBhKQkJLyogTFAxNSwxMywxMSw5IC0tPiBlY2NfY29kZVswXSAqLwotCQkJdG1wMSB8PSBiOwotCQliID4+PSAxOwotCQlpZiAocmVnMiAmIGEpCQkvKiBMUDE0LDEyLDEwLDggLS0+IGVjY19jb2RlWzBdICovCi0JCQl0bXAxIHw9IGI7Ci0JCWIgPj49IDE7Ci0JCWEgPj49IDE7Ci0JfQotCi0JLyogQ2FsY3VsYXRlIHNlY29uZCBFQ0MgYnl0ZSAqLwotCWIgPSAweDgwOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaWYgKHJlZzMgJiBhKQkJLyogTFA3LDUsMywxIC0tPiBlY2NfY29kZVsxXSAqLwotCQkJdG1wMiB8PSBiOwotCQliID4+PSAxOwotCQlpZiAocmVnMiAmIGEpCQkvKiBMUDYsNCwyLDAgLS0+IGVjY19jb2RlWzFdICovCi0JCQl0bXAyIHw9IGI7Ci0JCWIgPj49IDE7Ci0JCWEgPj49IDE7Ci0JfQotCi0JLyogU3RvcmUgdHdvIG9mIHRoZSBFQ0MgYnl0ZXMgKi8KLQllY2NfY29kZVswXSA9IHRtcDE7Ci0JZWNjX2NvZGVbMV0gPSB0bXAyOwotfQotCi0vKioKLSAqIG5hbmRfY2FsY3VsYXRlX2VjYyAtIFtOQU5EIEludGVyZmFjZV0gQ2FsY3VsYXRlIDMgYnl0ZSBFQ0MgY29kZSBmb3IgMjU2IGJ5dGUgYmxvY2sKKyAqIG5hbmRfY2FsY3VsYXRlX2VjYyAtIFtOQU5EIEludGVyZmFjZV0gQ2FsY3VsYXRlIDMgYnl0ZSBFQ0MgY29kZQorICoJCQlmb3IgMjU2IGJ5dGUgYmxvY2sKICAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKICAqIEBkYXQ6CXJhdyBkYXRhCiAgKiBAZWNjX2NvZGU6CWJ1ZmZlciBmb3IgRUNDCiAgKi8KLWludCBuYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQoraW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCisJCSAgICAgICB1X2NoYXIgKmVjY19jb2RlKQogewotCXVfY2hhciBpZHgsIHJlZzEsIHJlZzIsIHJlZzM7Ci0JaW50IGo7CisJdWludDhfdCBpZHgsIHJlZzEsIHJlZzIsIHJlZzMsIHRtcDEsIHRtcDI7CisJaW50IGk7CiAKIAkvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqLwogCXJlZzEgPSByZWcyID0gcmVnMyA9IDA7Ci0JZWNjX2NvZGVbMF0gPSBlY2NfY29kZVsxXSA9IGVjY19jb2RlWzJdID0gMDsKIAogCS8qIEJ1aWxkIHVwIGNvbHVtbiBwYXJpdHkgKi8KLQlmb3IoaiA9IDA7IGogPCAyNTY7IGorKykgewotCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJLyogR2V0IENQMCAtIENQNSBmcm9tIHRhYmxlICovCi0JCWlkeCA9IG5hbmRfZWNjX3ByZWNhbGNfdGFibGVbZGF0W2pdXTsKKwkJaWR4ID0gbmFuZF9lY2NfcHJlY2FsY190YWJsZVsqZGF0KytdOwogCQlyZWcxIF49IChpZHggJiAweDNmKTsKIAogCQkvKiBBbGwgYml0IFhPUiA9IDEgPyAqLwogCQlpZiAoaWR4ICYgMHg0MCkgewotCQkJcmVnMyBePSAodV9jaGFyKSBqOwotCQkJcmVnMiBePSB+KCh1X2NoYXIpIGopOworCQkJcmVnMyBePSAodWludDhfdCkgaTsKKwkJCXJlZzIgXj0gfigodWludDhfdCkgaSk7CiAJCX0KIAl9CiAKIAkvKiBDcmVhdGUgbm9uLWludmVydGVkIEVDQyBjb2RlIGZyb20gbGluZSBwYXJpdHkgKi8KLQluYW5kX3RyYW5zX3Jlc3VsdChyZWcyLCByZWczLCBlY2NfY29kZSk7CisJdG1wMSAgPSAocmVnMyAmIDB4ODApID4+IDA7IC8qIEI3IC0+IEI3ICovCisJdG1wMSB8PSAocmVnMiAmIDB4ODApID4+IDE7IC8qIEI3IC0+IEI2ICovCisJdG1wMSB8PSAocmVnMyAmIDB4NDApID4+IDE7IC8qIEI2IC0+IEI1ICovCisJdG1wMSB8PSAocmVnMiAmIDB4NDApID4+IDI7IC8qIEI2IC0+IEI0ICovCisJdG1wMSB8PSAocmVnMyAmIDB4MjApID4+IDI7IC8qIEI1IC0+IEIzICovCisJdG1wMSB8PSAocmVnMiAmIDB4MjApID4+IDM7IC8qIEI1IC0+IEIyICovCisJdG1wMSB8PSAocmVnMyAmIDB4MTApID4+IDM7IC8qIEI0IC0+IEIxICovCisJdG1wMSB8PSAocmVnMiAmIDB4MTApID4+IDQ7IC8qIEI0IC0+IEIwICovCisKKwl0bXAyICA9IChyZWczICYgMHgwOCkgPDwgNDsgLyogQjMgLT4gQjcgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwOCkgPDwgMzsgLyogQjMgLT4gQjYgKi8KKwl0bXAyIHw9IChyZWczICYgMHgwNCkgPDwgMzsgLyogQjIgLT4gQjUgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwNCkgPDwgMjsgLyogQjIgLT4gQjQgKi8KKwl0bXAyIHw9IChyZWczICYgMHgwMikgPDwgMjsgLyogQjEgLT4gQjMgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwMikgPDwgMTsgLyogQjEgLT4gQjIgKi8KKwl0bXAyIHw9IChyZWczICYgMHgwMSkgPDwgMTsgLyogQjAgLT4gQjEgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwMSkgPDwgMDsgLyogQjcgLT4gQjAgKi8KIAogCS8qIENhbGN1bGF0ZSBmaW5hbCBFQ0MgY29kZSAqLwotCWVjY19jb2RlWzBdID0gfmVjY19jb2RlWzBdOwotCWVjY19jb2RlWzFdID0gfmVjY19jb2RlWzFdOworI2lmZGVmIENPTkZJR19OQU5EX0VDQ19TTUMKKwllY2NfY29kZVswXSA9IH50bXAyOworCWVjY19jb2RlWzFdID0gfnRtcDE7CisjZWxzZQorCWVjY19jb2RlWzBdID0gfnRtcDE7CisJZWNjX2NvZGVbMV0gPSB+dG1wMjsKKyNlbmRpZgogCWVjY19jb2RlWzJdID0gKCh+cmVnMSkgPDwgMikgfCAweDAzOworCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5hbmRfY2FsY3VsYXRlX2VjYyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvdW50Yml0cyh1aW50MzJfdCBieXRlKQoreworCWludCByZXMgPSAwOworCisJZm9yICg7Ynl0ZTsgYnl0ZSA+Pj0gMSkKKwkJcmVzICs9IGJ5dGUgJiAweDAxOworCXJldHVybiByZXM7Cit9CiAKIC8qKgogICogbmFuZF9jb3JyZWN0X2RhdGEgLSBbTkFORCBJbnRlcmZhY2VdIERldGVjdCBhbmQgY29ycmVjdCBiaXQgZXJyb3IocykKQEAgLTE1Niw5MyArMTQ0LDU0IEBACiAgKgogICogRGV0ZWN0IGFuZCBjb3JyZWN0IGEgMSBiaXQgZXJyb3IgZm9yIDI1NiBieXRlIGJsb2NrCiAgKi8KLWludCBuYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCitpbnQgbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAorCQkgICAgICB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQogewotCXVfY2hhciBhLCBiLCBjLCBkMSwgZDIsIGQzLCBhZGQsIGJpdCwgaTsKKwl1aW50OF90IHMwLCBzMSwgczI7CiAKLQkvKiBEbyBlcnJvciBkZXRlY3Rpb24gKi8KLQlkMSA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JZDIgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCWQzID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKLQotCWlmICgoZDEgfCBkMiB8IGQzKSA9PSAwKSB7Ci0JCS8qIE5vIGVycm9ycyAqLworI2lmZGVmIENPTkZJR19OQU5EX0VDQ19TTUMKKwlzMCA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07CisJczEgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOworCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKyNlbHNlCisJczEgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOworCXMwID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKKwlzMiA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07CisjZW5kaWYKKwlpZiAoKHMwIHwgczEgfCBzMikgPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQotCWVsc2UgewotCQlhID0gKGQxIF4gKGQxID4+IDEpKSAmIDB4NTU7Ci0JCWIgPSAoZDIgXiAoZDIgPj4gMSkpICYgMHg1NTsKLQkJYyA9IChkMyBeIChkMyA+PiAxKSkgJiAweDU0OwogCi0JCS8qIEZvdW5kIGFuZCB3aWxsIGNvcnJlY3Qgc2luZ2xlIGJpdCBlcnJvciBpbiB0aGUgZGF0YSAqLwotCQlpZiAoKGEgPT0gMHg1NSkgJiYgKGIgPT0gMHg1NSkgJiYgKGMgPT0gMHg1NCkpIHsKLQkJCWMgPSAweDgwOwotCQkJYWRkID0gMDsKLQkJCWEgPSAweDgwOwotCQkJZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCQkJaWYgKGQxICYgYykKLQkJCQkJYWRkIHw9IGE7Ci0JCQkJYyA+Pj0gMjsKLQkJCQlhID4+PSAxOwotCQkJfQotCQkJYyA9IDB4ODA7Ci0JCQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJCQlpZiAoZDIgJiBjKQotCQkJCQlhZGQgfD0gYTsKLQkJCQljID4+PSAyOwotCQkJCWEgPj49IDE7Ci0JCQl9Ci0JCQliaXQgPSAwOwotCQkJYiA9IDB4MDQ7Ci0JCQljID0gMHg4MDsKLQkJCWZvciAoaT0wOyBpPDM7IGkrKykgewotCQkJCWlmIChkMyAmIGMpCi0JCQkJCWJpdCB8PSBiOwotCQkJCWMgPj49IDI7Ci0JCQkJYiA+Pj0gMTsKLQkJCX0KLQkJCWIgPSAweDAxOwotCQkJYSA9IGRhdFthZGRdOwotCQkJYSBePSAoYiA8PCBiaXQpOwotCQkJZGF0W2FkZF0gPSBhOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpID0gMDsKLQkJCXdoaWxlIChkMSkgewotCQkJCWlmIChkMSAmIDB4MDEpCi0JCQkJCSsraTsKLQkJCQlkMSA+Pj0gMTsKLQkJCX0KLQkJCXdoaWxlIChkMikgewotCQkJCWlmIChkMiAmIDB4MDEpCi0JCQkJCSsraTsKLQkJCQlkMiA+Pj0gMTsKLQkJCX0KLQkJCXdoaWxlIChkMykgewotCQkJCWlmIChkMyAmIDB4MDEpCi0JCQkJCSsraTsKLQkJCQlkMyA+Pj0gMTsKLQkJCX0KLQkJCWlmIChpID09IDEpIHsKLQkJCQkvKiBFQ0MgQ29kZSBFcnJvciBDb3JyZWN0aW9uICovCi0JCQkJcmVhZF9lY2NbMF0gPSBjYWxjX2VjY1swXTsKLQkJCQlyZWFkX2VjY1sxXSA9IGNhbGNfZWNjWzFdOwotCQkJCXJlYWRfZWNjWzJdID0gY2FsY19lY2NbMl07Ci0JCQkJcmV0dXJuIDI7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvKiBVbmNvcnJlY3RhYmxlIEVycm9yICovCi0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQl9CisJLyogQ2hlY2sgZm9yIGEgc2luZ2xlIGJpdCBlcnJvciAqLworCWlmKCAoKHMwIF4gKHMwID4+IDEpKSAmIDB4NTUpID09IDB4NTUgJiYKKwkgICAgKChzMSBeIChzMSA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCisJICAgICgoczIgXiAoczIgPj4gMSkpICYgMHg1NCkgPT0gMHg1NCkgeworCisJCXVpbnQzMl90IGJ5dGVvZmZzLCBiaXRudW07CisKKwkJYnl0ZW9mZnMgPSAoczEgPDwgMCkgJiAweDgwOworCQlieXRlb2ZmcyB8PSAoczEgPDwgMSkgJiAweDQwOworCQlieXRlb2ZmcyB8PSAoczEgPDwgMikgJiAweDIwOworCQlieXRlb2ZmcyB8PSAoczEgPDwgMykgJiAweDEwOworCisJCWJ5dGVvZmZzIHw9IChzMCA+PiA0KSAmIDB4MDg7CisJCWJ5dGVvZmZzIHw9IChzMCA+PiAzKSAmIDB4MDQ7CisJCWJ5dGVvZmZzIHw9IChzMCA+PiAyKSAmIDB4MDI7CisJCWJ5dGVvZmZzIHw9IChzMCA+PiAxKSAmIDB4MDE7CisKKwkJYml0bnVtID0gKHMyID4+IDUpICYgMHgwNDsKKwkJYml0bnVtIHw9IChzMiA+PiA0KSAmIDB4MDI7CisJCWJpdG51bSB8PSAoczIgPj4gMykgJiAweDAxOworCisJCWRhdFtieXRlb2Zmc10gXj0gKDEgPDwgYml0bnVtKTsKKworCQlyZXR1cm4gMTsKIAl9CiAKLQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaWYoY291bnRiaXRzKHMwIHwgKCh1aW50MzJfdClzMSA8PCA4KSB8ICgodWludDMyX3QpczIgPDwxNikpID09IDEpCisJCXJldHVybiAxOworCiAJcmV0dXJuIC0xOwogfQotCi1FWFBPUlRfU1lNQk9MKG5hbmRfY2FsY3VsYXRlX2VjYyk7CiBFWFBPUlRfU1lNQk9MKG5hbmRfY29ycmVjdF9kYXRhKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2lkcy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2lkcy5jCmluZGV4IGRiYzdlNTUuLjJlMmNkZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfaWRzLmMKQEAgLTE4LDk5ICsxOCwxMTAgQEAKICoJTmFtZS4gSUQgY29kZSwgcGFnZXNpemUsIGNoaXBzaXplIGluIE1lZ2FCeXRlLCBlcmFzZWJsb2NrIHNpemUsCiAqCW9wdGlvbnMKICoKLSogCVBhZ2VzaXplOyAwLCAyNTYsIDUxMgotKgkwIAlnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBleHRlbmRlZCBjaGlwIElECisqCVBhZ2VzaXplOyAwLCAyNTYsIDUxMgorKgkwCWdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlIGV4dGVuZGVkIGNoaXAgSUQKICsJMjU2CTI1NiBCeXRlIHBhZ2Ugc2l6ZQogKgk1MTIJNTEyIEJ5dGUgcGFnZSBzaXplCiAqLwogc3RydWN0IG5hbmRfZmxhc2hfZGV2IG5hbmRfZmxhc2hfaWRzW10gPSB7Ci0JeyJOQU5EIDFNaUIgNVYgOC1iaXQiLCAJCTB4NmUsIDI1NiwgMSwgMHgxMDAwLCAwfSwKLQl7Ik5BTkQgMk1pQiA1ViA4LWJpdCIsIAkJMHg2NCwgMjU2LCAyLCAweDEwMDAsIDB9LAotCXsiTkFORCA0TWlCIDVWIDgtYml0IiwgCQkweDZiLCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsIAkweGU4LCAyNTYsIDEsIDB4MTAwMCwgMH0sCi0JeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsIAkweGVjLCAyNTYsIDEsIDB4MTAwMCwgMH0sCi0JeyJOQU5EIDJNaUIgMywzViA4LWJpdCIsIAkweGVhLCAyNTYsIDIsIDB4MTAwMCwgMH0sCi0JeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsIAkweGQ1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsIAkweGUzLCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsIAkweGU1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDhNaUIgMywzViA4LWJpdCIsIAkweGQ2LCA1MTIsIDgsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDFNaUIgNVYgOC1iaXQiLAkJMHg2ZSwgMjU2LCAxLCAweDEwMDAsIDB9LAorCXsiTkFORCAyTWlCIDVWIDgtYml0IiwJCTB4NjQsIDI1NiwgMiwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgNE1pQiA1ViA4LWJpdCIsCQkweDZiLCA1MTIsIDQsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsCTB4ZTgsIDI1NiwgMSwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgMU1pQiAzLDNWIDgtYml0IiwJMHhlYywgMjU2LCAxLCAweDEwMDAsIDB9LAorCXsiTkFORCAyTWlCIDMsM1YgOC1iaXQiLAkweGVhLCAyNTYsIDIsIDB4MTAwMCwgMH0sCisJeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsCTB4ZDUsIDUxMiwgNCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgNE1pQiAzLDNWIDgtYml0IiwJMHhlMywgNTEyLCA0LCAweDIwMDAsIDB9LAorCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLAkweGU1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDhNaUIgMywzViA4LWJpdCIsCTB4ZDYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKIAotCXsiTkFORCA4TWlCIDEsOFYgOC1iaXQiLCAJMHgzOSwgNTEyLCA4LCAweDIwMDAsIDB9LAotCXsiTkFORCA4TWlCIDMsM1YgOC1iaXQiLCAJMHhlNiwgNTEyLCA4LCAweDIwMDAsIDB9LAotCXsiTkFORCA4TWlCIDEsOFYgMTYtYml0IiwgCTB4NDksIDUxMiwgOCwgMHgyMDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgOE1pQiAzLDNWIDE2LWJpdCIsIAkweDU5LCA1MTIsIDgsIDB4MjAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDhNaUIgMSw4ViA4LWJpdCIsCTB4MzksIDUxMiwgOCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgOE1pQiAzLDNWIDgtYml0IiwJMHhlNiwgNTEyLCA4LCAweDIwMDAsIDB9LAorCXsiTkFORCA4TWlCIDEsOFYgMTYtYml0IiwJMHg0OSwgNTEyLCA4LCAweDIwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCA4TWlCIDMsM1YgMTYtYml0IiwJMHg1OSwgNTEyLCA4LCAweDIwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDE2TWlCIDEsOFYgOC1iaXQiLCAJMHgzMywgNTEyLCAxNiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTZNaUIgMywzViA4LWJpdCIsIAkweDczLCA1MTIsIDE2LCAweDQwMDAsIDB9LAotCXsiTkFORCAxNk1pQiAxLDhWIDE2LWJpdCIsIAkweDQzLCA1MTIsIDE2LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAxNk1pQiAzLDNWIDE2LWJpdCIsIAkweDUzLCA1MTIsIDE2LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAxNk1pQiAxLDhWIDgtYml0IiwJMHgzMywgNTEyLCAxNiwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgMTZNaUIgMywzViA4LWJpdCIsCTB4NzMsIDUxMiwgMTYsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDE2TWlCIDEsOFYgMTYtYml0IiwJMHg0MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTZNaUIgMywzViAxNi1iaXQiLAkweDUzLCA1MTIsIDE2LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDMyTWlCIDEsOFYgOC1iaXQiLCAJMHgzNSwgNTEyLCAzMiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMzJNaUIgMywzViA4LWJpdCIsIAkweDc1LCA1MTIsIDMyLCAweDQwMDAsIDB9LAotCXsiTkFORCAzMk1pQiAxLDhWIDE2LWJpdCIsIAkweDQ1LCA1MTIsIDMyLCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAzMk1pQiAzLDNWIDE2LWJpdCIsIAkweDU1LCA1MTIsIDMyLCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAzMk1pQiAxLDhWIDgtYml0IiwJMHgzNSwgNTEyLCAzMiwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgMzJNaUIgMywzViA4LWJpdCIsCTB4NzUsIDUxMiwgMzIsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDMyTWlCIDEsOFYgMTYtYml0IiwJMHg0NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMzJNaUIgMywzViAxNi1iaXQiLAkweDU1LCA1MTIsIDMyLCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDY0TWlCIDEsOFYgOC1iaXQiLCAJMHgzNiwgNTEyLCA2NCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgNjRNaUIgMywzViA4LWJpdCIsIAkweDc2LCA1MTIsIDY0LCAweDQwMDAsIDB9LAotCXsiTkFORCA2NE1pQiAxLDhWIDE2LWJpdCIsIAkweDQ2LCA1MTIsIDY0LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCA2NE1pQiAzLDNWIDE2LWJpdCIsIAkweDU2LCA1MTIsIDY0LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCA2NE1pQiAxLDhWIDgtYml0IiwJMHgzNiwgNTEyLCA2NCwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgNjRNaUIgMywzViA4LWJpdCIsCTB4NzYsIDUxMiwgNjQsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDY0TWlCIDEsOFYgMTYtYml0IiwJMHg0NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLAkweDU2LCA1MTIsIDY0LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwgCTB4NzgsIDUxMiwgMTI4LCAweDQwMDAsIDB9LAotCXsiTkFORCAxMjhNaUIgMSw4ViA4LWJpdCIsIAkweDM5LCA1MTIsIDEyOCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTI4TWlCIDMsM1YgOC1iaXQiLCAJMHg3OSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsIAkweDcyLCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgMTI4TWlCIDEsOFYgMTYtYml0IiwgCTB4NDksIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLCAJMHg3NCwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCi0JeyJOQU5EIDEyOE1pQiAzLDNWIDE2LWJpdCIsIAkweDU5LCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLAkweDc4LCA1MTIsIDEyOCwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLAkweDM5LCA1MTIsIDEyOCwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgMTI4TWlCIDMsM1YgOC1iaXQiLAkweDc5LCA1MTIsIDEyOCwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgMTYtYml0IiwJMHg3MiwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsCTB4NDksIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLAkweDc0LCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwJMHg1OSwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCiAKLQl7Ik5BTkQgMjU2TWlCIDMsM1YgOC1iaXQiLCAJMHg3MSwgNTEyLCAyNTYsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDI1Nk1pQiAzLDNWIDgtYml0IiwJMHg3MSwgNTEyLCAyNTYsIDB4NDAwMCwgMH0sCiAKLQkvKiBUaGVzZSBhcmUgdGhlIG5ldyBjaGlwcyB3aXRoIGxhcmdlIHBhZ2Ugc2l6ZS4gVGhlIHBhZ2VzaXplCi0JKiBhbmQgdGhlIGVyYXNlc2l6ZSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIGV4dGVuZGVkIGlkIGJ5dGVzCi0JKi8KKwkvKgorCSAqIFRoZXNlIGFyZSB0aGUgbmV3IGNoaXBzIHdpdGggbGFyZ2UgcGFnZSBzaXplLiBUaGUgcGFnZXNpemUgYW5kIHRoZQorCSAqIGVyYXNlc2l6ZSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIGV4dGVuZGVkIGlkIGJ5dGVzCisJICovCisjZGVmaW5lIExQX09QVElPTlMgKE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19SRUFEUkRZIHwgTkFORF9OT19BVVRPSU5DUikKKyNkZWZpbmUgTFBfT1BUSU9OUzE2IChMUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNikKKwogCS8qNTEyIE1lZ2FiaXQgKi8KLQl7Ik5BTkQgNjRNaUIgMSw4ViA4LWJpdCIsIAkweEEyLCAwLCAgNjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLCAJMHhGMiwgMCwgIDY0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCA2NE1pQiAxLDhWIDE2LWJpdCIsIAkweEIyLCAwLCAgNjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCA2NE1pQiAzLDNWIDE2LWJpdCIsIAkweEMyLCAwLCAgNjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCA2NE1pQiAxLDhWIDgtYml0IiwJMHhBMiwgMCwgIDY0LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNjRNaUIgMywzViA4LWJpdCIsCTB4RjIsIDAsICA2NCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDY0TWlCIDEsOFYgMTYtYml0IiwJMHhCMiwgMCwgIDY0LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCA2NE1pQiAzLDNWIDE2LWJpdCIsCTB4QzIsIDAsICA2NCwgMCwgTFBfT1BUSU9OUzE2fSwKIAogCS8qIDEgR2lnYWJpdCAqLwotCXsiTkFORCAxMjhNaUIgMSw4ViA4LWJpdCIsIAkweEExLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwgCTB4RjEsIDAsIDEyOCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMTI4TWlCIDEsOFYgMTYtYml0IiwgCTB4QjEsIDAsIDEyOCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDEyOE1pQiAzLDNWIDE2LWJpdCIsIAkweEMxLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCAxMjhNaUIgMSw4ViA4LWJpdCIsCTB4QTEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHhGMSwgMCwgMTI4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgMTYtYml0IiwJMHhCMSwgMCwgMTI4LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLAkweEMxLCAwLCAxMjgsIDAsIExQX09QVElPTlMxNn0sCiAKIAkvKiAyIEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMjU2TWlCIDEsOFYgOC1iaXQiLCAJMHhBQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyNTZNaUIgMywzViA4LWJpdCIsIAkweERBLCAwLCAyNTYsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDI1Nk1pQiAxLDhWIDE2LWJpdCIsIAkweEJBLCAwLCAyNTYsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyNTZNaUIgMywzViAxNi1iaXQiLCAJMHhDQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKKwl7Ik5BTkQgMjU2TWlCIDEsOFYgOC1iaXQiLAkweEFBLCAwLCAyNTYsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAyNTZNaUIgMywzViA4LWJpdCIsCTB4REEsIDAsIDI1NiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDI1Nk1pQiAxLDhWIDE2LWJpdCIsCTB4QkEsIDAsIDI1NiwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgMjU2TWlCIDMsM1YgMTYtYml0IiwJMHhDQSwgMCwgMjU2LCAwLCBMUF9PUFRJT05TMTZ9LAogCiAJLyogNCBHaWdhYml0ICovCi0JeyJOQU5EIDUxMk1pQiAxLDhWIDgtYml0IiwgCTB4QUMsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNTEyTWlCIDMsM1YgOC1iaXQiLCAJMHhEQywgMCwgNTEyLCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCA1MTJNaUIgMSw4ViAxNi1iaXQiLCAJMHhCQywgMCwgNTEyLCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNTEyTWlCIDMsM1YgMTYtYml0IiwgCTB4Q0MsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDUxMk1pQiAxLDhWIDgtYml0IiwJMHhBQywgMCwgNTEyLCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNTEyTWlCIDMsM1YgOC1iaXQiLAkweERDLCAwLCA1MTIsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCA1MTJNaUIgMSw4ViAxNi1iaXQiLAkweEJDLCAwLCA1MTIsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDUxMk1pQiAzLDNWIDE2LWJpdCIsCTB4Q0MsIDAsIDUxMiwgMCwgTFBfT1BUSU9OUzE2fSwKIAogCS8qIDggR2lnYWJpdCAqLwotCXsiTkFORCAxR2lCIDEsOFYgOC1iaXQiLCAJMHhBMywgMCwgMTAyNCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMUdpQiAzLDNWIDgtYml0IiwgCTB4RDMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDFHaUIgMSw4ViAxNi1iaXQiLCAJMHhCMywgMCwgMTAyNCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDFHaUIgMywzViAxNi1iaXQiLCAJMHhDMywgMCwgMTAyNCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDFHaUIgMSw4ViA4LWJpdCIsCTB4QTMsIDAsIDEwMjQsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAxR2lCIDMsM1YgOC1iaXQiLAkweEQzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMUdpQiAxLDhWIDE2LWJpdCIsCTB4QjMsIDAsIDEwMjQsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDFHaUIgMywzViAxNi1iaXQiLAkweEMzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TMTZ9LAogCiAJLyogMTYgR2lnYWJpdCAqLwotCXsiTkFORCAyR2lCIDEsOFYgOC1iaXQiLCAJMHhBNSwgMCwgMjA0OCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMkdpQiAzLDNWIDgtYml0IiwgCTB4RDUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDJHaUIgMSw4ViAxNi1iaXQiLCAJMHhCNSwgMCwgMjA0OCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDJHaUIgMywzViAxNi1iaXQiLCAJMHhDNSwgMCwgMjA0OCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDJHaUIgMSw4ViA4LWJpdCIsCTB4QTUsIDAsIDIwNDgsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAyR2lCIDMsM1YgOC1iaXQiLAkweEQ1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMkdpQiAxLDhWIDE2LWJpdCIsCTB4QjUsIDAsIDIwNDgsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDJHaUIgMywzViAxNi1iaXQiLAkweEM1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TMTZ9LAogCi0JLyogUmVuZXNhcyBBTkQgMSBHaWdhYml0LiBUaG9zZSBjaGlwcyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBpZCBhbmQgaGF2ZSBhIHN0cmFuZ2UgcGFnZS9ibG9jayBsYXlvdXQgIQotCSAqIFRoZSBjaG9zZW4gbWluaW11bSBlcmFzZXNpemUgaXMgNCAqIDIgKiAyMDQ4ID0gMTYzODQgQnl0ZSwgYXMgdGhvc2UgY2hpcHMgaGF2ZSBhbiBhcnJheSBvZiA0IHBhZ2UgcGxhbmVzCi0JICogMSBibG9jayA9IDIgcGFnZXMsIGJ1dCBkdWUgdG8gcGxhbmUgYXJyYW5nZW1lbnQgdGhlIGJsb2NrcyAwLTMgY29uc2lzdHMgb2YgcGFnZSAwICsgNCwxICsgNSwgMiArIDYsIDMgKyA3Ci0JICogQW55d2F5IEpGRlMyIHdvdWxkIGluY3JlYXNlIHRoZSBlcmFzZWJsb2NrIHNpemUgc28gd2UgY2hvc2UgYSBjb21iaW5lZCBvbmUgd2hpY2ggY2FuIGJlIGVyYXNlZCBpbiBvbmUgZ28KLQkgKiBUaGVyZSBhcmUgbW9yZSBzcGVlZCBpbXByb3ZlbWVudHMgZm9yIHJlYWRzIGFuZCB3cml0ZXMgcG9zc2libGUsIGJ1dCBub3QgaW1wbGVtZW50ZWQgbm93CisJLyoKKwkgKiBSZW5lc2FzIEFORCAxIEdpZ2FiaXQuIFRob3NlIGNoaXBzIGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIGlkIGFuZAorCSAqIGhhdmUgYSBzdHJhbmdlIHBhZ2UvYmxvY2sgbGF5b3V0ICEgIFRoZSBjaG9zZW4gbWluaW11bSBlcmFzZXNpemUgaXMKKwkgKiA0ICogMiAqIDIwNDggPSAxNjM4NCBCeXRlLCBhcyB0aG9zZSBjaGlwcyBoYXZlIGFuIGFycmF5IG9mIDQgcGFnZQorCSAqIHBsYW5lcyAxIGJsb2NrID0gMiBwYWdlcywgYnV0IGR1ZSB0byBwbGFuZSBhcnJhbmdlbWVudCB0aGUgYmxvY2tzCisJICogMC0zIGNvbnNpc3RzIG9mIHBhZ2UgMCArIDQsMSArIDUsIDIgKyA2LCAzICsgNyBBbnl3YXkgSkZGUzIgd291bGQKKwkgKiBpbmNyZWFzZSB0aGUgZXJhc2VibG9jayBzaXplIHNvIHdlIGNob3NlIGEgY29tYmluZWQgb25lIHdoaWNoIGNhbiBiZQorCSAqIGVyYXNlZCBpbiBvbmUgZ28gVGhlcmUgYXJlIG1vcmUgc3BlZWQgaW1wcm92ZW1lbnRzIGZvciByZWFkcyBhbmQKKwkgKiB3cml0ZXMgcG9zc2libGUsIGJ1dCBub3QgaW1wbGVtZW50ZWQgbm93CiAJICovCi0JeyJBTkQgMTI4TWlCIDMsM1YgOC1iaXQiLAkweDAxLCAyMDQ4LCAxMjgsIDB4NDAwMCwgTkFORF9JU19BTkQgfCBOQU5EX05PX0FVVE9JTkNSIHwgTkFORF80UEFHRV9BUlJBWSB8IEJCVF9BVVRPX1JFRlJFU0h9LAorCXsiQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHgwMSwgMjA0OCwgMTI4LCAweDQwMDAsCisJIE5BTkRfSVNfQU5EIHwgTkFORF9OT19BVVRPSU5DUiB8TkFORF9OT19SRUFEUkRZIHwgTkFORF80UEFHRV9BUlJBWSB8CisJIEJCVF9BVVRPX1JFRlJFU0gKKwl9LAogCiAJe05VTEwsfQogfTsKQEAgLTEyNSwxMyArMTM2LDEzIEBACiAJe05BTkRfTUZSX05BVElPTkFMLCAiTmF0aW9uYWwifSwKIAl7TkFORF9NRlJfUkVORVNBUywgIlJlbmVzYXMifSwKIAl7TkFORF9NRlJfU1RNSUNSTywgIlNUIE1pY3JvIn0sCi0gICAgICAgIHtOQU5EX01GUl9IWU5JWCwgIkh5bml4In0sCisJe05BTkRfTUZSX0hZTklYLCAiSHluaXgifSwKIAl7MHgwLCAiVW5rbm93biJ9CiB9OwogCi1FWFBPUlRfU1lNQk9MIChuYW5kX21hbnVmX2lkcyk7Ci1FWFBPUlRfU1lNQk9MIChuYW5kX2ZsYXNoX2lkcyk7CitFWFBPUlRfU1lNQk9MKG5hbmRfbWFudWZfaWRzKTsKK0VYUE9SVF9TWU1CT0wobmFuZF9mbGFzaF9pZHMpOwogCi1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOwotTU9EVUxFX0FVVEhPUiAoIlRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiTmFuZCBkZXZpY2UgJiBtYW51ZmFjdHVyZXIgSUQncyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5hbmQgZGV2aWNlICYgbWFudWZhY3R1cmVyIElEcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwppbmRleCBhMGFmOTJjLi5lYmQ2NGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgTkFORCBmbGFzaCBwYXJhbWV0ZXJzICovCiAJbnMtPmJ1c3cgPSBjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNiA/IDE2IDogODsKIAlucy0+Z2VvbS50b3RzeiAgICA9IG10ZC0+c2l6ZTsKLQlucy0+Z2VvbS5wZ3N6ICAgICA9IG10ZC0+b29iYmxvY2s7CisJbnMtPmdlb20ucGdzeiAgICAgPSBtdGQtPndyaXRlc2l6ZTsKIAlucy0+Z2VvbS5vb2JzeiAgICA9IG10ZC0+b29ic2l6ZTsKIAlucy0+Z2VvbS5zZWNzeiAgICA9IG10ZC0+ZXJhc2VzaXplOwogCW5zLT5nZW9tLnBnc3pvb2IgID0gbnMtPmdlb20ucGdzeiArIG5zLT5nZW9tLm9vYnN6OwpAQCAtMTA3MSw2OCArMTA3MSw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZAotbnNfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQotewotCXN0cnVjdCBuYW5kc2ltICpucyA9IChzdHJ1Y3QgbmFuZHNpbSAqKSgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPnByaXY7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCi0JLyogc2V0IENMRSBsaW5lIGhpZ2ggKi8KLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IHN0YXJ0IGNvbW1hbmQgbGF0Y2ggY3ljbGVzXG4iKTsKLQkJbnMtPmxpbmVzLmNsZSAgPSAxOwotCQlicmVhazsKLQotCS8qIHNldCBDTEUgbGluZSBsb3cgKi8KLQljYXNlIE5BTkRfQ1RMX0NMUkNMRToKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IHN0b3AgY29tbWFuZCBsYXRjaCBjeWNsZXNcbiIpOwotCQlucy0+bGluZXMuY2xlICA9IDA7Ci0JCWJyZWFrOwotCi0JLyogc2V0IEFMRSBsaW5lIGhpZ2ggKi8KLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IHN0YXJ0IGFkZHJlc3MgbGF0Y2ggY3ljbGVzXG4iKTsKLQkJbnMtPmxpbmVzLmFsZSAgID0gMTsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgQUxFIGxpbmUgbG93ICovCi0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBzdG9wIGFkZHJlc3MgbGF0Y2ggY3ljbGVzXG4iKTsKLQkJbnMtPmxpbmVzLmFsZSAgPSAwOwotCQlicmVhazsKLQotCS8qIHNldCBXUCBsaW5lIGhpZ2ggKi8KLQljYXNlIE5BTkRfQ1RMX1NFVFdQOgotCQlOU19EQkcoIm5zX2h3Y29udHJvbDogZW5hYmxlIHdyaXRlIHByb3RlY3Rpb25cbiIpOwotCQlucy0+bGluZXMud3AgPSAxOwotCQlicmVhazsKLQotCS8qIHNldCBXUCBsaW5lIGxvdyAqLwotCWNhc2UgTkFORF9DVExfQ0xSV1A6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBkaXNhYmxlIHdyaXRlIHByb3RlY3Rpb25cbiIpOwotCQlucy0+bGluZXMud3AgPSAwOwotCQlicmVhazsKLQotCS8qIHNldCBDRSBsaW5lIGxvdyAqLwotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotCQlOU19EQkcoIm5zX2h3Y29udHJvbDogZW5hYmxlIGNoaXBcbiIpOwotCQlucy0+bGluZXMuY2UgPSAxOwotCQlicmVhazsKLQotCS8qIHNldCBDRSBsaW5lIGhpZ2ggKi8KLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IGRpc2FibGUgY2hpcFxuIik7Ci0JCW5zLT5saW5lcy5jZSA9IDA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJTlNfRVJSKCJod2NvbnRyb2w6IHVua25vd24gY29tbWFuZFxuIik7Ci0gICAgICAgIH0KLQotCXJldHVybjsKLX0KLQogc3RhdGljIHVfY2hhcgogbnNfbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CkBAIC0xMzU5LDYgKzEyOTcsMTggQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyB2b2lkIG5zX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGJpdG1hc2spCit7CisJc3RydWN0IG5hbmRzaW0gKm5zID0gKChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2KS0+cHJpdjsKKworCW5zLT5saW5lcy5jbGUgPSBiaXRtYXNrICYgTkFORF9DTEUgPyAxIDogMDsKKwlucy0+bGluZXMuYWxlID0gYml0bWFzayAmIE5BTkRfQUxFID8gMSA6IDA7CisJbnMtPmxpbmVzLmNlID0gYml0bWFzayAmIE5BTkRfTkNFID8gMSA6IDA7CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCW5zX25hbmRfd3JpdGVfYnl0ZShtdGQsIGNtZCk7Cit9CisKIHN0YXRpYyBpbnQKIG5zX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKQEAgLTEzNzcsMTcgKzEzMjcsNiBAQAogfQogCiBzdGF0aWMgdm9pZAotbnNfbmFuZF93cml0ZV93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50MTZfdCB3b3JkKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdjsKLQotCU5TX0RCRygid3JpdGVfd29yZFxuIik7Ci0KLQljaGlwLT53cml0ZV9ieXRlKG10ZCwgd29yZCAmIDB4RkYpOwotCWNoaXAtPndyaXRlX2J5dGUobXRkLCB3b3JkID4+IDgpOwotfQotCi1zdGF0aWMgdm9pZAogbnNfbmFuZF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogICAgICAgICBzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OwpAQCAtMTUxNCwxNiArMTQ1MywxNCBAQAogCS8qCiAJICogUmVnaXN0ZXIgc2ltdWxhdG9yJ3MgY2FsbGJhY2tzLgogCSAqLwotCWNoaXAtPmh3Y29udHJvbCAgPSBuc19od2NvbnRyb2w7CisJY2hpcC0+Y21kX2N0cmwJID0gbnNfaHdjb250cm9sOwogCWNoaXAtPnJlYWRfYnl0ZSAgPSBuc19uYW5kX3JlYWRfYnl0ZTsKIAljaGlwLT5kZXZfcmVhZHkgID0gbnNfZGV2aWNlX3JlYWR5OwotCWNoaXAtPndyaXRlX2J5dGUgPSBuc19uYW5kX3dyaXRlX2J5dGU7CiAJY2hpcC0+d3JpdGVfYnVmICA9IG5zX25hbmRfd3JpdGVfYnVmOwogCWNoaXAtPnJlYWRfYnVmICAgPSBuc19uYW5kX3JlYWRfYnVmOwogCWNoaXAtPnZlcmlmeV9idWYgPSBuc19uYW5kX3ZlcmlmeV9idWY7Ci0JY2hpcC0+d3JpdGVfd29yZCA9IG5zX25hbmRfd3JpdGVfd29yZDsKIAljaGlwLT5yZWFkX3dvcmQgID0gbnNfbmFuZF9yZWFkX3dvcmQ7Ci0JY2hpcC0+ZWNjbW9kZSAgICA9IE5BTkRfRUNDX1NPRlQ7CisJY2hpcC0+ZWNjLm1vZGUgICA9IE5BTkRfRUNDX1NPRlQ7CiAJY2hpcC0+b3B0aW9ucyAgIHw9IE5BTkRfU0tJUF9CQlRTQ0FOOwogCiAJLyoKQEAgLTE1NDYsNiArMTQ4Myw4IEBACiAJCWNoaXAtPm9wdGlvbnMgfD0gTkFORF9CVVNXSURUSF8xNjsKIAl9CiAKKwluc210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwogCWlmICgocmV0dmFsID0gbmFuZF9zY2FuKG5zbXRkLCAxKSkgIT0gMCkgewogCQlOU19FUlIoImNhbid0IHJlZ2lzdGVyIE5BTkQgU2ltdWxhdG9yXG4iKTsKIAkJaWYgKHJldHZhbCA+IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOGQzODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqICBkcml2ZXJzL210ZC9uZGZjLmMKKyAqCisgKiAgT3ZlcnZpZXc6CisgKiAgIFBsYXRmb3JtIGluZGVwZW5kZW5kIGRyaXZlciBmb3IgTkRGQyAoTmFuRCBGbGFzaCBDb250cm9sbGVyKQorICogICBpbnRlZ3JhdGVkIGludG8gRVA0NDAgY29yZXMKKyAqCisgKiAgQXV0aG9yOiBUaG9tYXMgR2xlaXhuZXIKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDYgSUJNCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25kZmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+CisKK3N0cnVjdCBuZGZjX25hbmRfbXRkIHsKKwlzdHJ1Y3QgbXRkX2luZm8JCQltdGQ7CisJc3RydWN0IG5hbmRfY2hpcAkJY2hpcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwCSpwbF9jaGlwOworfTsKKworc3RhdGljIHN0cnVjdCBuZGZjX25hbmRfbXRkIG5kZmNfbXRkW05ERkNfTUFYX0JBTktTXTsKKworc3RydWN0IG5kZmNfY29udHJvbGxlciB7CisJdm9pZCBfX2lvbWVtCQkqbmRmY2Jhc2U7CisJc3RydWN0IG5hbmRfaHdfY29udHJvbAluZGZjX2NvbnRyb2w7CisJYXRvbWljX3QJCWNoaWxkc19hY3RpdmU7Cit9OworCitzdGF0aWMgc3RydWN0IG5kZmNfY29udHJvbGxlciBuZGZjX2N0cmw7CisKK3N0YXRpYyB2b2lkIG5kZmNfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCXVpbnQzMl90IGNjcjsKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmRmY19uYW5kX210ZCAqbmFuZG10ZCA9IG5hbmRjaGlwLT5wcml2OworCXN0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgKnBjaGlwID0gbmFuZG10ZC0+cGxfY2hpcDsKKworCWNjciA9IF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19DQ1IpOworCWlmIChjaGlwID49IDApIHsKKwkJY2NyICY9IH5OREZDX0NDUl9CU19NQVNLOworCQljY3IgfD0gTkRGQ19DQ1JfQlMoY2hpcCArIHBjaGlwLT5jaGlwX29mZnNldCk7CisJfSBlbHNlCisJCWNjciB8PSBOREZDX0NDUl9SRVNFVF9DRTsKKwl3cml0ZWwoY2NyLCBuZGZjLT5uZGZjYmFzZSArIE5ERkNfQ0NSKTsKK30KKworc3RhdGljIHZvaWQgbmRmY19od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKKworCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlbChjbWQgJiAweEZGLCBjaGlwLT5JT19BRERSX1cgKyBOREZDX0NNRCk7CisJZWxzZQorCQl3cml0ZWwoY21kICYgMHhGRiwgY2hpcC0+SU9fQUREUl9XICsgTkRGQ19BTEUpOworfQorCitzdGF0aWMgaW50IG5kZmNfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisKKwlyZXR1cm4gX19yYXdfcmVhZGwobmRmYy0+bmRmY2Jhc2UgKyBOREZDX1NUQVQpICYgTkRGQ19TVEFUX0lTX1JFQURZOworfQorCitzdGF0aWMgdm9pZCBuZGZjX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCit7CisJdWludDMyX3QgY2NyOworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCisJY2NyID0gX19yYXdfcmVhZGwobmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7CisJY2NyIHw9IE5ERkNfQ0NSX1JFU0VUX0VDQzsKKwlfX3Jhd193cml0ZWwoY2NyLCBuZGZjLT5uZGZjYmFzZSArIE5ERkNfQ0NSKTsKKwl3bWIoKTsKK30KKworc3RhdGljIGludCBuZGZjX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkgICAgICBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKK3sKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKwl1aW50MzJfdCBlY2M7CisJdWludDhfdCAqcCA9ICh1aW50OF90ICopJmVjYzsKKworCXdtYigpOworCWVjYyA9IF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19FQ0MpOworCWVjY19jb2RlWzBdID0gcFsxXTsKKwllY2NfY29kZVsxXSA9IHBbMl07CisJZWNjX2NvZGVbMl0gPSBwWzNdOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTcGVlZHVwcyBmb3IgYnVmZmVyIHJlYWQvd3JpdGUvdmVyaWZ5CisgKgorICogTkRGQyBhbGxvd3MgMzJiaXQgcmVhZC93cml0ZSBvZiBkYXRhLiBTbyB3ZSBjYW4gc3BlZWQgdXAgdGhlIGJ1ZmZlcgorICogZnVuY3Rpb25zLiBObyBmdXJ0aGVyIGNoZWNraW5nLCBhcyBuYW5kX2Jhc2Ugd2lsbCBhbHdheXMgcmVhZC93cml0ZQorICogcGFnZSBhbGlnbmVkLgorICovCitzdGF0aWMgdm9pZCBuZGZjX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJdWludDMyX3QgKnAgPSAodWludDMyX3QgKikgYnVmOworCisJZm9yKDtsZW4gPiAwOyBsZW4gLT0gNCkKKwkJKnArKyA9IF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBKTsKK30KKworc3RhdGljIHZvaWQgbmRmY193cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKwl1aW50MzJfdCAqcCA9ICh1aW50MzJfdCAqKSBidWY7CisKKwlmb3IoO2xlbiA+IDA7IGxlbiAtPSA0KQorCQlfX3Jhd193cml0ZWwoKnArKywgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0RBVEEpOworfQorCitzdGF0aWMgaW50IG5kZmNfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopIGJ1ZjsKKworCWZvcig7bGVuID4gMDsgbGVuIC09IDQpCisJCWlmICgqcCsrICE9IF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjaGlwIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBuZGZjX2NoaXBfaW5pdChzdHJ1Y3QgbmRmY19uYW5kX210ZCAqbXRkKQoreworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAmbXRkLT5jaGlwOworCisJY2hpcC0+SU9fQUREUl9SID0gbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0RBVEE7CisJY2hpcC0+SU9fQUREUl9XID0gbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0RBVEE7CisJY2hpcC0+Y21kX2N0cmwgPSBuZGZjX2h3Y29udHJvbDsKKwljaGlwLT5kZXZfcmVhZHkgPSBuZGZjX3JlYWR5OworCWNoaXAtPnNlbGVjdF9jaGlwID0gbmRmY19zZWxlY3RfY2hpcDsKKwljaGlwLT5jaGlwX2RlbGF5ID0gNTA7CisJY2hpcC0+cHJpdiA9IG10ZDsKKwljaGlwLT5vcHRpb25zID0gbXRkLT5wbF9jaGlwLT5vcHRpb25zOworCWNoaXAtPmNvbnRyb2xsZXIgPSAmbmRmYy0+bmRmY19jb250cm9sOworCWNoaXAtPnJlYWRfYnVmID0gbmRmY19yZWFkX2J1ZjsKKwljaGlwLT53cml0ZV9idWYgPSBuZGZjX3dyaXRlX2J1ZjsKKwljaGlwLT52ZXJpZnlfYnVmID0gbmRmY192ZXJpZnlfYnVmOworCWNoaXAtPmVjYy5jb3JyZWN0ID0gbmFuZF9jb3JyZWN0X2RhdGE7CisJY2hpcC0+ZWNjLmh3Y3RsID0gbmRmY19lbmFibGVfaHdlY2M7CisJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IG5kZmNfY2FsY3VsYXRlX2VjYzsKKwljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCWNoaXAtPmVjYy5zaXplID0gMjU2OworCWNoaXAtPmVjYy5ieXRlcyA9IDM7CisJY2hpcC0+ZWNjbGF5b3V0ID0gbXRkLT5wbF9jaGlwLT5lY2NsYXlvdXQ7CisJbXRkLT5tdGQucHJpdiA9IGNoaXA7CisJbXRkLT5tdGQub3duZXIgPSBUSElTX01PRFVMRTsKK30KKworc3RhdGljIGludCBuZGZjX2NoaXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwICpuYyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBuZGZjX2NoaXBfc2V0dGluZ3MgKnNldHRpbmdzID0gbmMtPnByaXY7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJc3RydWN0IG5kZmNfbmFuZF9tdGQgKm5hbmRtdGQ7CisKKwlpZiAobmMtPmNoaXBfb2Zmc2V0ID49IE5ERkNfTUFYX0JBTktTIHx8IG5jLT5ucl9jaGlwcyA+IE5ERkNfTUFYX0JBTktTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNldCB0aGUgYmFuayBzZXR0aW5ncyAqLworCV9fcmF3X3dyaXRlbChzZXR0aW5ncy0+YmFua19zZXR0aW5ncywKKwkJICAgICBuZGZjLT5uZGZjYmFzZSArIE5ERkNfQkNGRzAgKyAobmMtPmNoaXBfb2Zmc2V0IDw8IDIpKTsKKworCW5hbmRtdGQgPSAmbmRmY19tdGRbcGRldi0+aWRdOworCWlmIChuYW5kbXRkLT5wbF9jaGlwKQorCQlyZXR1cm4gLUVCVVNZOworCisJbmFuZG10ZC0+cGxfY2hpcCA9IG5jOworCW5kZmNfY2hpcF9pbml0KG5hbmRtdGQpOworCisJLyogU2NhbiBmb3IgY2hpcHMgKi8KKwlpZiAobmFuZF9zY2FuKCZuYW5kbXRkLT5tdGQsIG5jLT5ucl9jaGlwcykpIHsKKwkJbmFuZG10ZC0+cGxfY2hpcCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCXByaW50aygiTnVtYmVyIG9mIHBhcnRpdGlvbnMgJWRcbiIsIG5jLT5ucl9wYXJ0aXRpb25zKTsKKwlpZiAobmMtPm5yX3BhcnRpdGlvbnMpIHsKKwkJLyogQWRkIHRoZSBmdWxsIGRldmljZSwgc28gY29tcGxldGUgZHVtcHMgY2FuIGJlIG1hZGUgKi8KKwkJYWRkX210ZF9kZXZpY2UoJm5hbmRtdGQtPm10ZCk7CisJCWFkZF9tdGRfcGFydGl0aW9ucygmbmFuZG10ZC0+bXRkLCBuYy0+cGFydGl0aW9ucywKKwkJCQkgICBuYy0+bnJfcGFydGl0aW9ucyk7CisKKwl9IGVsc2UKKyNlbHNlCisJCWFkZF9tdGRfZGV2aWNlKCZuYW5kbXRkLT5tdGQpOworI2VuZGlmCisKKwlhdG9taWNfaW5jKCZuZGZjLT5jaGlsZHNfYWN0aXZlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZGZjX2NoaXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX25hbmRfY3RybCAqbmMgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyX3NldHRpbmdzICpzZXR0aW5ncyA9IG5jLT5wcml2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJdW5zaWduZWQgbG9uZyBsb25nIHBoeXMgPSBzZXR0aW5ncy0+bmRmY19lcnBuIHwgcmVzLT5zdGFydDsKKworCW5kZmMtPm5kZmNiYXNlID0gaW9yZW1hcDY0KHBoeXMsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghbmRmYy0+bmRmY2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJOREZDOiBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCV9fcmF3X3dyaXRlbChzZXR0aW5ncy0+Y2NyX3NldHRpbmdzLCBuZGZjLT5uZGZjYmFzZSArIE5ERkNfQ0NSKTsKKworCXNwaW5fbG9ja19pbml0KCZuZGZjLT5uZGZjX2NvbnRyb2wubG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbmRmYy0+bmRmY19jb250cm9sLndxKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZmMpOworCisJcHJpbnRrKCJOREZDIE5BTkQgRHJpdmVyIGluaXRpYWxpemVkLiBDaGlwLVJldjogMHglMDh4XG4iLAorCSAgICAgICBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfUkVWSUQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5kZmNfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoYXRvbWljX3JlYWQoJm5kZmMtPmNoaWxkc19hY3RpdmUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKG5kZmMpIHsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJCWlvdW5tYXAobmRmY19jdHJsLm5kZmNiYXNlKTsKKwkJbmRmY19jdHJsLm5kZmNiYXNlID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGRyaXZlciBkZXZpY2UgcmVnaXN0cmF0aW9uICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5kZmNfY2hpcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG5kZmNfY2hpcF9wcm9iZSwKKwkucmVtb3ZlCQk9IG5kZmNfY2hpcF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm5kZmMtY2hpcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuZGZjX25hbmRfZHJpdmVyID0geworCS5wcm9iZQkJPSBuZGZjX25hbmRfcHJvYmUsCisJLnJlbW92ZQkJPSBuZGZjX25hbmRfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJuZGZjLW5hbmQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmRmY19uYW5kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2luaXQoJm5kZmNfY3RybC5uZGZjX2NvbnRyb2wubG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbmRmY19jdHJsLm5kZmNfY29udHJvbC53cSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm5kZmNfbmFuZF9kcml2ZXIpOworCWlmICghcmV0KQorCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm5kZmNfY2hpcF9kcml2ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZGZjX25hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZuZGZjX2NoaXBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbmRmY19uYW5kX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG5kZmNfbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KG5kZmNfbmFuZF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBsYXRmb3JtIGRyaXZlciBmb3IgTkRGQyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9wcGNoYW1lbGVvbmV2Yi5jIGIvZHJpdmVycy9tdGQvbmFuZC9wcGNoYW1lbGVvbmV2Yi5jCmluZGV4IDkxYTk1ZjMuLjIyZmE2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3BwY2hhbWVsZW9uZXZiLmMKQEAgLTU4LDIxICs1OCwyMSBAQAogLyoKICAqIE1URCBzdHJ1Y3R1cmUgZm9yIFBQQ2hhbWVsZW9uRVZCIGJvYXJkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnBwY2hhbWVsZW9uX210ZCAJPSBOVUxMOworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqcHBjaGFtZWxlb25fbXRkID0gTlVMTDsKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnBwY2hhbWVsZW9uZXZiX210ZCA9IE5VTEw7CiAKIC8qCiAgKiBNb2R1bGUgc3R1ZmYKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcHBjaGFtZWxlb25fZmlvX3BiYXNlIAk9IENGR19OQU5EMF9QQUREUjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBwY2hhbWVsZW9uX2Zpb19wYmFzZSA9IENGR19OQU5EMF9QQUREUjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBwY2hhbWVsZW9uZXZiX2Zpb19wYmFzZSA9IENGR19OQU5EMV9QQUREUjsKIAogI2lmZGVmIE1PRFVMRQogbW9kdWxlX3BhcmFtKHBwY2hhbWVsZW9uX2Zpb19wYmFzZSwgdWxvbmcsIDApOwogbW9kdWxlX3BhcmFtKHBwY2hhbWVsZW9uZXZiX2Zpb19wYmFzZSwgdWxvbmcsIDApOwogI2Vsc2UKLV9fc2V0dXAoInBwY2hhbWVsZW9uX2Zpb19wYmFzZT0iLHBwY2hhbWVsZW9uX2Zpb19wYmFzZSk7Ci1fX3NldHVwKCJwcGNoYW1lbGVvbmV2Yl9maW9fcGJhc2U9IixwcGNoYW1lbGVvbmV2Yl9maW9fcGJhc2UpOworX19zZXR1cCgicHBjaGFtZWxlb25fZmlvX3BiYXNlPSIsIHBwY2hhbWVsZW9uX2Zpb19wYmFzZSk7CitfX3NldHVwKCJwcGNoYW1lbGVvbmV2Yl9maW9fcGJhc2U9IiwgcHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCkBAIC04MCw4MiArODAsOTYgQEAKICAqIERlZmluZSBzdGF0aWMgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlcwogICovCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9faGlbXSA9IHsKLQl7IG5hbWU6ICJQUENoYW1lbGVvbiBISSBOYW5kIEZsYXNoIiwKLQkJICBvZmZzZXQ6IDAsCi0JCSAgc2l6ZTogMTI4KjEwMjQqMTAyNCB9CisgICAgICB7IC5uYW1lID0gIlBQQ2hhbWVsZW9uIEhJIE5hbmQgRmxhc2giLAorCW9mZnNldCA9IDAsCisJLnNpemUgPSAxMjggKiAxMDI0ICogMTAyNAorICAgICAgfQogfTsKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvX21lW10gPSB7Ci0JeyBuYW1lOiAiUFBDaGFtZWxlb24gTUUgTmFuZCBGbGFzaCIsCi0JCSAgb2Zmc2V0OiAwLAotCQkgIHNpemU6IDMyKjEwMjQqMTAyNCB9CisgICAgICB7IC5uYW1lID0gIlBQQ2hhbWVsZW9uIE1FIE5hbmQgRmxhc2giLAorCS5vZmZzZXQgPSAwLAorCS5zaXplID0gMzIgKiAxMDI0ICogMTAyNAorICAgICAgfQogfTsKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvX2V2YltdID0gewotCXsgbmFtZTogIlBQQ2hhbWVsZW9uRVZCIE5hbmQgRmxhc2giLAotCQkgIG9mZnNldDogMCwKLQkJICBzaXplOiAzMioxMDI0KjEwMjQgfQorICAgICAgeyAubmFtZSA9ICJQUENoYW1lbGVvbkVWQiBOYW5kIEZsYXNoIiwKKwkub2Zmc2V0ID0gMCwKKwkuc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQKKyAgICAgIH0KIH07CiAKICNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMQogCi1leHRlcm4gaW50IHBhcnNlX2NtZGxpbmVfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKLQkJCQkgICAgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCi0JCQkJICAgIGNvbnN0IGNoYXIgKm10ZF9pZCk7CitleHRlcm4gaW50IHBhcnNlX2NtZGxpbmVfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3Rlciwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsIGNvbnN0IGNoYXIgKm10ZF9pZCk7CiAjZW5kaWYKIAotCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKICAqLwotc3RhdGljIHZvaWQgcHBjaGFtZWxlb25faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbywgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHBwY2hhbWVsZW9uX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBjbWQsCisJCQkJICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKLQlzd2l0Y2goY21kKSB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfU0VUQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfQ0xSQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfU0VUQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfQ0xSQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUTkNFOgorCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworI2Vycm9yIE1pc3NpbmcgaGVhZGVyZmlsZXMuIE5vIHdheSB0byBmaXggdGhpcy4gLXRnbHgKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBOQU5EX0NUTF9TRVRDTEU6CisJCQlNQUNST19OQU5EX0NUTF9TRVRDTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQwX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUkNMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX0NMUkNMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfU0VUQUxFOgorCQkJTUFDUk9fTkFORF9DVExfU0VUQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9DTFJBTEU6CisJCQlNQUNST19OQU5EX0NUTF9DTFJBTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQwX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKIAkJCU1BQ1JPX05BTkRfRU5BQkxFX0NFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSTkNFOgorCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSTkNFOgogCQkJTUFDUk9fTkFORF9ESVNBQkxFX0NFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7Ci0JCWJyZWFrOworCQkJYnJlYWs7CisJCX0KIAl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwogfQogCi1zdGF0aWMgdm9pZCBwcGNoYW1lbGVvbmV2Yl9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGRpbmZvLCBpbnQgY21kKQorc3RhdGljIHZvaWQgcHBjaGFtZWxlb25ldmJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbywgaW50IGNtZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjdHJsKQogewotCXN3aXRjaChjbWQpIHsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0gICAgICAgIAlNQUNST19OQU5EX0NUTF9TRVRDTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0gICAgICAgIAlNQUNST19OQU5EX0NUTF9DTFJDTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0gICAgICAgIAlNQUNST19OQU5EX0NUTF9TRVRBTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0gICAgICAgIAlNQUNST19OQU5EX0NUTF9DTFJBTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0gICAgICAgIAlNQUNST19OQU5EX0VOQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLSAgICAgICAgCU1BQ1JPX05BTkRfRElTQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOwotCQlicmVhazsKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKyNlcnJvciBNaXNzaW5nIGhlYWRlcmZpbGVzLiBObyB3YXkgdG8gZml4IHRoaXMuIC10Z2x4CisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgTkFORF9DVExfU0VUQ0xFOgorCQkJTUFDUk9fTkFORF9DVExfU0VUQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9DTFJDTEU6CisJCQlNQUNST19OQU5EX0NUTF9DTFJDTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX1NFVEFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQUxFOgorCQkJTUFDUk9fTkFORF9DVExfQ0xSQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9TRVROQ0U6CisJCQlNQUNST19OQU5EX0VOQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSTkNFOgorCQkJTUFDUk9fTkFORF9ESVNBQkxFX0NFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7CisJCQlicmVhazsKKwkJfQogCX0KKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyk7CiB9CiAKICNpZmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KQEAgLTE2NCwxNSArMTc4LDE1IEBACiAgKi8KIHN0YXRpYyBpbnQgcHBjaGFtZWxlb25fZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbWluZm8pCiB7Ci0JaWYgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9JUikgJiBOQU5EX1JCX0dQSU9fUElOKQorCWlmIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lSKSAmIE5BTkRfUkJfR1BJT19QSU4pCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBwY2hhbWVsZW9uZXZiX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm1pbmZvKQogewotCWlmIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfSVIpICYgTkFORF9FVkJfUkJfR1BJT19QSU4pCi0JcmV0dXJuIDE7CisJaWYgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfSVIpICYgTkFORF9FVkJfUkJfR1BJT19QSU4pCisJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0xODUsNyArMTk5LDcgQEAKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotc3RhdGljIGludCBfX2luaXQgcHBjaGFtZWxlb25ldmJfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBwY2hhbWVsZW9uZXZiX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZSA9IDA7CkBAIC0xOTQsMTMgKzIwOCwxMSBAQAogCXZvaWQgX19pb21lbSAqcHBjaGFtZWxlb25fZmlvX2Jhc2U7CiAJdm9pZCBfX2lvbWVtICpwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZTsKIAotCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSogUHJvY2Vzc29yIG1vZHVsZSBOQU5EIChpZiBhbnkpICoKIAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JcHBjaGFtZWxlb25fbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCi0JCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOworCXBwY2hhbWVsZW9uX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwogCWlmICghcHBjaGFtZWxlb25fbXRkKSB7CiAJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIFBQQ2hhbWVsZW9uIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDgsNjMgKzIyMCw2NSBAQAogCiAJLyogbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlwcGNoYW1lbGVvbl9maW9fYmFzZSA9IGlvcmVtYXAocHBjaGFtZWxlb25fZmlvX3BiYXNlLCBTWl80TSk7Ci0JaWYoIXBwY2hhbWVsZW9uX2Zpb19iYXNlKSB7CisJaWYgKCFwcGNoYW1lbGVvbl9maW9fYmFzZSkgewogCQlwcmludGsoImlvcmVtYXAgUFBDaGFtZWxlb24gTkFORCBmbGFzaCBmYWlsZWRcbiIpOwogCQlrZnJlZShwcGNoYW1lbGVvbl9tdGQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZwcGNoYW1lbGVvbl9tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmcHBjaGFtZWxlb25fbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBwcGNoYW1lbGVvbl9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQoKGNoYXIgKikgdGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKwltZW1zZXQocHBjaGFtZWxlb25fbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCXBwY2hhbWVsZW9uX210ZC0+cHJpdiA9IHRoaXM7CisJcHBjaGFtZWxlb25fbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0gICAgICAgIC8qIEluaXRpYWxpemUgR1BJT3MgKi8KKwkvKiBJbml0aWFsaXplIEdQSU9zICovCiAJLyogUGluIG1hcHBpbmcgZm9yIE5BTkQgY2hpcCAqLwogCS8qCi0JCUNFCUdQSU9fMDEKLQkJQ0xFCUdQSU9fMDIKLQkJQUxFCUdQSU9fMDMKLQkJUi9CCUdQSU9fMDQKLQkqLworCSAgIENFICAgR1BJT18wMQorCSAgIENMRSAgR1BJT18wMgorCSAgIEFMRSAgR1BJT18wMworCSAgIFIvQiAgR1BJT18wNAorCSAqLwogCS8qIG91dHB1dCBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX09TUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9PU1JIKSAmIDB4QzBGRkZGRkYpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX09TUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfT1NSSCkgJiAweEMwRkZGRkZGKTsKIAkvKiB0aHJlZS1zdGF0ZSBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JIKSAmIDB4QzBGRkZGRkYpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSSCkgJiAweEMwRkZGRkZGKTsKIAkvKiBlbmFibGUgb3V0cHV0IGRyaXZlciAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSKSB8IE5BTkRfbkNFX0dQSU9fUElOIHwgTkFORF9DTEVfR1BJT19QSU4gfCBOQU5EX0FMRV9HUElPX1BJTik7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSLAorCQkgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UQ1IpIHwgTkFORF9uQ0VfR1BJT19QSU4gfCBOQU5EX0NMRV9HUElPX1BJTiB8IE5BTkRfQUxFX0dQSU9fUElOKTsKICNpZmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KIAkvKiB0aHJlZS1zdGF0ZSBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JIKSAmIDB4RkYzRkZGRkYpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSSCkgJiAweEZGM0ZGRkZGKTsKIAkvKiBoaWdoLWltcGVkZWNlbmNlICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IpICYgKH5OQU5EX1JCX0dQSU9fUElOKSk7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUikgJiAofk5BTkRfUkJfR1BJT19QSU4pKTsKIAkvKiBpbnB1dCBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX0lTUjFILCAoaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX0lTUjFIKSAmIDB4RkYzRkZGRkYpIHwgMHgwMDQwMDAwMCk7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfSVNSMUgsCisJCSAoaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9JU1IxSCkgJiAweEZGM0ZGRkZGKSB8IDB4MDA0MDAwMDApOwogI2VuZGlmCiAKIAkvKiBpbnNlcnQgY2FsbGJhY2tzICovCiAJdGhpcy0+SU9fQUREUl9SID0gcHBjaGFtZWxlb25fZmlvX2Jhc2U7CiAJdGhpcy0+SU9fQUREUl9XID0gcHBjaGFtZWxlb25fZmlvX2Jhc2U7Ci0JdGhpcy0+aHdjb250cm9sID0gcHBjaGFtZWxlb25faHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gcHBjaGFtZWxlb25faHdjb250cm9sOwogI2lmZGVmIFVTRV9SRUFEWV9CVVNZX1BJTgogCXRoaXMtPmRldl9yZWFkeSA9IHBwY2hhbWVsZW9uX2RldmljZV9yZWFkeTsKICNlbmRpZgogCXRoaXMtPmNoaXBfZGVsYXkgPSBOQU5EX0JJR19ERUxBWV9VUzsKIAkvKiBFQ0MgbW9kZSAqLwotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAoaXQgY291bGQgbm90IGJlIG1vdW50ZWQpICovCi0JaWYgKG5hbmRfc2NhbiAocHBjaGFtZWxlb25fbXRkLCAxKSkgeworCWlmIChuYW5kX3NjYW4ocHBjaGFtZWxlb25fbXRkLCAxKSkgewogCQlpb3VubWFwKCh2b2lkICopcHBjaGFtZWxlb25fZmlvX2Jhc2UpOwotCQlrZnJlZSAocHBjaGFtZWxlb25fbXRkKTsKKwkJa2ZyZWUocHBjaGFtZWxlb25fbXRkKTsKIAkJZ290byBuYW5kX2V2Yl9pbml0OwogCX0KLQogI2lmbmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KIAkvKiBBZGp1c3QgZGVsYXkgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHBwY2hhbWVsZW9uX210ZC0+c2l6ZSA9PSBOQU5EX1NNQUxMX1NJWkUpCkBAIC0yNzUsMTIgKzI4OSwxMSBAQAogCXBwY2hhbWVsZW9uX210ZC0+bmFtZSA9ICJwcGNoYW1lbGVvbi1uYW5kIjsKIAltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhwcGNoYW1lbGVvbl9tdGQsIHBhcnRfcHJvYmVzLCAmbXRkX3BhcnRzLCAwKTsKIAlpZiAobXRkX3BhcnRzX25iID4gMCkKLQkgIHBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOworCQlwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKIAllbHNlCi0JICBtdGRfcGFydHNfbmIgPSAwOworCQltdGRfcGFydHNfbmIgPSAwOwogI2VuZGlmCi0JaWYgKG10ZF9wYXJ0c19uYiA9PSAwKQotCXsKKwlpZiAobXRkX3BhcnRzX25iID09IDApIHsKIAkJaWYgKHBwY2hhbWVsZW9uX210ZC0+c2l6ZSA9PSBOQU5EX1NNQUxMX1NJWkUpCiAJCQltdGRfcGFydHMgPSBwYXJ0aXRpb25faW5mb19tZTsKIAkJZWxzZQpAQCAtMjkzLDEzICszMDYsMTIgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlVzaW5nICVzIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iLCBwYXJ0X3R5cGUpOwogCWFkZF9tdGRfcGFydGl0aW9ucyhwcGNoYW1lbGVvbl9tdGQsIG10ZF9wYXJ0cywgbXRkX3BhcnRzX25iKTsKIAotbmFuZF9ldmJfaW5pdDoKKyBuYW5kX2V2Yl9pbml0OgogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJKiBFVkIgTkFORCAoYWx3YXlzIHByZXNlbnQpICoKIAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCXBwY2hhbWVsZW9uZXZiX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwotCQkJCQkJCSBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOworCXBwY2hhbWVsZW9uZXZiX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwogCWlmICghcHBjaGFtZWxlb25ldmJfbXRkKSB7CiAJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIFBQQ2hhbWVsZW9uRVZCIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMDcsNzcgKzMxOSw3NiBAQAogCiAJLyogbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZSA9IGlvcmVtYXAocHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlLCBTWl80TSk7Ci0JaWYoIXBwY2hhbWVsZW9uZXZiX2Zpb19iYXNlKSB7CisJaWYgKCFwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZSkgewogCQlwcmludGsoImlvcmVtYXAgUFBDaGFtZWxlb25FVkIgTkFORCBmbGFzaCBmYWlsZWRcbiIpOwogCQlrZnJlZShwcGNoYW1lbGVvbmV2Yl9tdGQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZwcGNoYW1lbGVvbmV2Yl9tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmcHBjaGFtZWxlb25ldmJfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBwcGNoYW1lbGVvbmV2Yl9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQoKGNoYXIgKikgdGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKwltZW1zZXQocHBjaGFtZWxlb25ldmJfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCXBwY2hhbWVsZW9uZXZiX210ZC0+cHJpdiA9IHRoaXM7CiAKLSAgICAgICAgLyogSW5pdGlhbGl6ZSBHUElPcyAqLworCS8qIEluaXRpYWxpemUgR1BJT3MgKi8KIAkvKiBQaW4gbWFwcGluZyBmb3IgTkFORCBjaGlwICovCiAJLyoKLQkJQ0UJR1BJT18xNAotCQlDTEUJR1BJT18xNQotCQlBTEUJR1BJT18xNgotCQlSL0IJR1BJT18zMQotCSovCisJICAgQ0UgICBHUElPXzE0CisJICAgQ0xFICBHUElPXzE1CisJICAgQUxFICBHUElPXzE2CisJICAgUi9CICBHUElPXzMxCisJICovCiAJLyogb3V0cHV0IHNlbGVjdCAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfT1NSSCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX09TUkgpICYgMHhGRkZGRkZGMCk7Ci0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9PU1JMLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfT1NSTCkgJiAweDNGRkZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9PU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX09TUkgpICYgMHhGRkZGRkZGMCk7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfT1NSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9PU1JMKSAmIDB4M0ZGRkZGRkYpOwogCS8qIHRocmVlLXN0YXRlIHNlbGVjdCAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSSCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkgpICYgMHhGRkZGRkZGMCk7Ci0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JMLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSTCkgJiAweDNGRkZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkgpICYgMHhGRkZGRkZGMCk7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JMKSAmIDB4M0ZGRkZGRkYpOwogCS8qIGVuYWJsZSBvdXRwdXQgZHJpdmVyICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IpIHwgTkFORF9FVkJfbkNFX0dQSU9fUElOIHwKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UQ1IsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSKSB8IE5BTkRfRVZCX25DRV9HUElPX1BJTiB8CiAJCSBOQU5EX0VWQl9DTEVfR1BJT19QSU4gfCBOQU5EX0VWQl9BTEVfR1BJT19QSU4pOwogI2lmZGVmIFVTRV9SRUFEWV9CVVNZX1BJTgogCS8qIHRocmVlLXN0YXRlIHNlbGVjdCAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkwpICYgMHhGRkZGRkZGQyk7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JMKSAmIDB4RkZGRkZGRkMpOwogCS8qIGhpZ2gtaW1wZWRlY2VuY2UgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RDUiwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RDUikgJiAofk5BTkRfRVZCX1JCX0dQSU9fUElOKSk7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUikgJiAofk5BTkRfRVZCX1JCX0dQSU9fUElOKSk7CiAJLyogaW5wdXQgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9JU1IxTCwgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9JU1IxTCkgJiAweEZGRkZGRkZDKSB8IDB4MDAwMDAwMDEpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lTUjFMLAorCQkgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfSVNSMUwpICYgMHhGRkZGRkZGQykgfCAweDAwMDAwMDAxKTsKICNlbmRpZgogCiAJLyogaW5zZXJ0IGNhbGxiYWNrcyAqLwogCXRoaXMtPklPX0FERFJfUiA9IHBwY2hhbWVsZW9uZXZiX2Zpb19iYXNlOwogCXRoaXMtPklPX0FERFJfVyA9IHBwY2hhbWVsZW9uZXZiX2Zpb19iYXNlOwotCXRoaXMtPmh3Y29udHJvbCA9IHBwY2hhbWVsZW9uZXZiX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IHBwY2hhbWVsZW9uZXZiX2h3Y29udHJvbDsKICNpZmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KIAl0aGlzLT5kZXZfcmVhZHkgPSBwcGNoYW1lbGVvbmV2Yl9kZXZpY2VfcmVhZHk7CiAjZW5kaWYKIAl0aGlzLT5jaGlwX2RlbGF5ID0gTkFORF9TTUFMTF9ERUxBWV9VUzsKIAogCS8qIEVDQyBtb2RlICovCi0JdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCi0JaWYgKG5hbmRfc2NhbiAocHBjaGFtZWxlb25ldmJfbXRkLCAxKSkgeworCWlmIChuYW5kX3NjYW4ocHBjaGFtZWxlb25ldmJfbXRkLCAxKSkgewogCQlpb3VubWFwKCh2b2lkICopcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2UpOwotCQlrZnJlZSAocHBjaGFtZWxlb25ldmJfbXRkKTsKKwkJa2ZyZWUocHBjaGFtZWxlb25ldmJfbXRkKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0KICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAlwcGNoYW1lbGVvbmV2Yl9tdGQtPm5hbWUgPSBOQU5EX0VWQl9NVERfTkFNRTsKIAltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhwcGNoYW1lbGVvbmV2Yl9tdGQsIHBhcnRfcHJvYmVzX2V2YiwgJm10ZF9wYXJ0cywgMCk7CiAJaWYgKG10ZF9wYXJ0c19uYiA+IDApCi0JICBwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKKwkJcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CiAJZWxzZQotCSAgbXRkX3BhcnRzX25iID0gMDsKKwkJbXRkX3BhcnRzX25iID0gMDsKICNlbmRpZgotCWlmIChtdGRfcGFydHNfbmIgPT0gMCkKLQl7CisJaWYgKG10ZF9wYXJ0c19uYiA9PSAwKSB7CiAJCW10ZF9wYXJ0cyA9IHBhcnRpdGlvbl9pbmZvX2V2YjsKIAkJbXRkX3BhcnRzX25iID0gTlVNX1BBUlRJVElPTlM7CiAJCXBhcnRfdHlwZSA9ICJzdGF0aWMiOwpAQCAtMzkwLDE4ICs0MDEsMTkgQEAKIAkvKiBSZXR1cm4gaGFwcHkgKi8KIAlyZXR1cm4gMDsKIH0KKwogbW9kdWxlX2luaXQocHBjaGFtZWxlb25ldmJfaW5pdCk7CiAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBwcGNoYW1lbGVvbmV2Yl9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBwY2hhbWVsZW9uZXZiX2NsZWFudXAodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlKHMpICovCi0JbmFuZF9yZWxlYXNlIChwcGNoYW1lbGVvbl9tdGQpOwotCW5hbmRfcmVsZWFzZSAocHBjaGFtZWxlb25ldmJfbXRkKTsKKwluYW5kX3JlbGVhc2UocHBjaGFtZWxlb25fbXRkKTsKKwluYW5kX3JlbGVhc2UocHBjaGFtZWxlb25ldmJfbXRkKTsKIAogCS8qIFJlbGVhc2UgaW9tYXBzICovCiAJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICZwcGNoYW1lbGVvbl9tdGRbMV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jIGIvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYwppbmRleCA0MTI5YzAzLi5mOGM0OTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcnRjX2Zyb200LmMKQEAgLTk3LDEyICs5NywxMiBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqcnRjX2Zyb200X2Zpb19iYXNlID0gKHZvaWQgKilQMlNFR0FERFIoUlRDX0ZST000X0ZJT19CQVNFKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgICAgICAubmFtZSAgID0gIlJlbmVzYXMgZmxhc2ggcGFydGl0aW9uIDEiLAotICAgICAgICAgICAgICAgIC5vZmZzZXQgPSAwLAotICAgICAgICAgICAgICAgIC5zaXplICAgPSBNVERQQVJUX1NJWl9GVUxMCi0gICAgICAgIH0sCisJeworCSAubmFtZSA9ICJSZW5lc2FzIGZsYXNoIHBhcnRpdGlvbiAxIiwKKwkgLm9mZnNldCA9IDAsCisJIC5zaXplID0gTVREUEFSVF9TSVpfRlVMTH0sCiB9OworCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDEKIAogLyoKQEAgLTExMSw4ICsxMTEsOCBAQAogICoJCU5BTkRfQkJUX0NSRUFURSBhbmQvb3IgTkFORF9CQlRfV1JJVEUKICAqCiAgKi8KLXN0YXRpYyB1aW50OF90IGJidF9wYXR0ZXJuW10gPSB7J0InLCAnYicsICd0JywgJzAnIH07Ci1zdGF0aWMgdWludDhfdCBtaXJyb3JfcGF0dGVybltdID0geycxJywgJ3QnLCAnYicsICdCJyB9Oworc3RhdGljIHVpbnQ4X3QgYmJ0X3BhdHRlcm5bXSA9IHsgJ0InLCAnYicsICd0JywgJzAnIH07CitzdGF0aWMgdWludDhfdCBtaXJyb3JfcGF0dGVybltdID0geyAnMScsICd0JywgJ2InLCAnQicgfTsKIAogc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBydGNfZnJvbTRfYmJ0X21haW5fZGVzY3IgPSB7CiAJLm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF9DUkVBVEUgfCBOQU5EX0JCVF9XUklURQpAQCAtMTM0LDggKzEzNCw2IEBACiAJLnBhdHRlcm4gPSBtaXJyb3JfcGF0dGVybgogfTsKIAotCi0KICNpZmRlZiBSVENfRlJPTTRfSFdFQ0MKIAogLyogdGhlIFJlZWQgU29sb21vbiBjb250cm9sIHN0cnVjdHVyZSAqLwpAQCAtMTQ0LDE1ICsxNDIsMTQgQEAKIC8qCiAgKiAgICAgIGhhcmR3YXJlIHNwZWNpZmljIE91dCBPZiBCYW5kIGluZm9ybWF0aW9uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHJ0Y19mcm9tNF9uYW5kX29vYmluZm8gPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgcnRjX2Zyb200X25hbmRfb29iaW5mbyA9IHsKIAkuZWNjYnl0ZXMgPSAzMiwKIAkuZWNjcG9zID0gewotCQkgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCi0JCSA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKLQkJMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLAotCQkyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzF9LAotCS5vb2JmcmVlID0geyB7MzIsIDMyfSB9CisJCSAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsCisJCSAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisJCSAgIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywKKwkJICAgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxfSwKKwkub29iZnJlZSA9IHt7MzIsIDMyfX0KIH07CiAKIC8qIEFhcmdoLiBJIG1pc3NlZCB0aGUgcmV2ZXJzZWQgYml0IG9yZGVyLCB3aGVuIEkKQEAgLTE2Miw0NCArMTU5LDQyIEBACiAgKiBvZiB0aGUgZWNjIGJ5dGUgd2hpY2ggd2UgZ2V0IGZyb20gdGhlIEZQR0EKICAqLwogc3RhdGljIHVpbnQ4X3QgcmV2Yml0c1syNTZdID0gewotICAgICAgICAweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLAotICAgICAgICAweDEwLCAweDkwLCAweDUwLCAweGQwLCAweDMwLCAweGIwLCAweDcwLCAweGYwLAotICAgICAgICAweDA4LCAweDg4LCAweDQ4LCAweGM4LCAweDI4LCAweGE4LCAweDY4LCAweGU4LAotICAgICAgICAweDE4LCAweDk4LCAweDU4LCAweGQ4LCAweDM4LCAweGI4LCAweDc4LCAweGY4LAotICAgICAgICAweDA0LCAweDg0LCAweDQ0LCAweGM0LCAweDI0LCAweGE0LCAweDY0LCAweGU0LAotICAgICAgICAweDE0LCAweDk0LCAweDU0LCAweGQ0LCAweDM0LCAweGI0LCAweDc0LCAweGY0LAotICAgICAgICAweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLCAweGVjLAotICAgICAgICAweDFjLCAweDljLCAweDVjLCAweGRjLCAweDNjLCAweGJjLCAweDdjLCAweGZjLAotICAgICAgICAweDAyLCAweDgyLCAweDQyLCAweGMyLCAweDIyLCAweGEyLCAweDYyLCAweGUyLAotICAgICAgICAweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLCAweGIyLCAweDcyLCAweGYyLAotICAgICAgICAweDBhLCAweDhhLCAweDRhLCAweGNhLCAweDJhLCAweGFhLCAweDZhLCAweGVhLAotICAgICAgICAweDFhLCAweDlhLCAweDVhLCAweGRhLCAweDNhLCAweGJhLCAweDdhLCAweGZhLAotICAgICAgICAweDA2LCAweDg2LCAweDQ2LCAweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LAotICAgICAgICAweDE2LCAweDk2LCAweDU2LCAweGQ2LCAweDM2LCAweGI2LCAweDc2LCAweGY2LAotICAgICAgICAweDBlLCAweDhlLCAweDRlLCAweGNlLCAweDJlLCAweGFlLCAweDZlLCAweGVlLAotICAgICAgICAweDFlLCAweDllLCAweDVlLCAweGRlLCAweDNlLCAweGJlLCAweDdlLCAweGZlLAotICAgICAgICAweDAxLCAweDgxLCAweDQxLCAweGMxLCAweDIxLCAweGExLCAweDYxLCAweGUxLAotICAgICAgICAweDExLCAweDkxLCAweDUxLCAweGQxLCAweDMxLCAweGIxLCAweDcxLCAweGYxLAotICAgICAgICAweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LAotICAgICAgICAweDE5LCAweDk5LCAweDU5LCAweGQ5LCAweDM5LCAweGI5LCAweDc5LCAweGY5LAotICAgICAgICAweDA1LCAweDg1LCAweDQ1LCAweGM1LCAweDI1LCAweGE1LCAweDY1LCAweGU1LAotICAgICAgICAweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAotICAgICAgICAweDBkLCAweDhkLCAweDRkLCAweGNkLCAweDJkLCAweGFkLCAweDZkLCAweGVkLAotICAgICAgICAweDFkLCAweDlkLCAweDVkLCAweGRkLCAweDNkLCAweGJkLCAweDdkLCAweGZkLAotICAgICAgICAweDAzLCAweDgzLCAweDQzLCAweGMzLCAweDIzLCAweGEzLCAweDYzLCAweGUzLAotICAgICAgICAweDEzLCAweDkzLCAweDUzLCAweGQzLCAweDMzLCAweGIzLCAweDczLCAweGYzLAotICAgICAgICAweDBiLCAweDhiLCAweDRiLCAweGNiLCAweDJiLCAweGFiLCAweDZiLCAweGViLAotICAgICAgICAweDFiLCAweDliLCAweDViLCAweGRiLCAweDNiLCAweGJiLCAweDdiLCAweGZiLAotICAgICAgICAweDA3LCAweDg3LCAweDQ3LCAweGM3LCAweDI3LCAweGE3LCAweDY3LCAweGU3LAotICAgICAgICAweDE3LCAweDk3LCAweDU3LCAweGQ3LCAweDM3LCAweGI3LCAweDc3LCAweGY3LAotICAgICAgICAweDBmLCAweDhmLCAweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLAotICAgICAgICAweDFmLCAweDlmLCAweDVmLCAweGRmLCAweDNmLCAweGJmLCAweDdmLCAweGZmLAorCTB4MDAsIDB4ODAsIDB4NDAsIDB4YzAsIDB4MjAsIDB4YTAsIDB4NjAsIDB4ZTAsCisJMHgxMCwgMHg5MCwgMHg1MCwgMHhkMCwgMHgzMCwgMHhiMCwgMHg3MCwgMHhmMCwKKwkweDA4LCAweDg4LCAweDQ4LCAweGM4LCAweDI4LCAweGE4LCAweDY4LCAweGU4LAorCTB4MTgsIDB4OTgsIDB4NTgsIDB4ZDgsIDB4MzgsIDB4YjgsIDB4NzgsIDB4ZjgsCisJMHgwNCwgMHg4NCwgMHg0NCwgMHhjNCwgMHgyNCwgMHhhNCwgMHg2NCwgMHhlNCwKKwkweDE0LCAweDk0LCAweDU0LCAweGQ0LCAweDM0LCAweGI0LCAweDc0LCAweGY0LAorCTB4MGMsIDB4OGMsIDB4NGMsIDB4Y2MsIDB4MmMsIDB4YWMsIDB4NmMsIDB4ZWMsCisJMHgxYywgMHg5YywgMHg1YywgMHhkYywgMHgzYywgMHhiYywgMHg3YywgMHhmYywKKwkweDAyLCAweDgyLCAweDQyLCAweGMyLCAweDIyLCAweGEyLCAweDYyLCAweGUyLAorCTB4MTIsIDB4OTIsIDB4NTIsIDB4ZDIsIDB4MzIsIDB4YjIsIDB4NzIsIDB4ZjIsCisJMHgwYSwgMHg4YSwgMHg0YSwgMHhjYSwgMHgyYSwgMHhhYSwgMHg2YSwgMHhlYSwKKwkweDFhLCAweDlhLCAweDVhLCAweGRhLCAweDNhLCAweGJhLCAweDdhLCAweGZhLAorCTB4MDYsIDB4ODYsIDB4NDYsIDB4YzYsIDB4MjYsIDB4YTYsIDB4NjYsIDB4ZTYsCisJMHgxNiwgMHg5NiwgMHg1NiwgMHhkNiwgMHgzNiwgMHhiNiwgMHg3NiwgMHhmNiwKKwkweDBlLCAweDhlLCAweDRlLCAweGNlLCAweDJlLCAweGFlLCAweDZlLCAweGVlLAorCTB4MWUsIDB4OWUsIDB4NWUsIDB4ZGUsIDB4M2UsIDB4YmUsIDB4N2UsIDB4ZmUsCisJMHgwMSwgMHg4MSwgMHg0MSwgMHhjMSwgMHgyMSwgMHhhMSwgMHg2MSwgMHhlMSwKKwkweDExLCAweDkxLCAweDUxLCAweGQxLCAweDMxLCAweGIxLCAweDcxLCAweGYxLAorCTB4MDksIDB4ODksIDB4NDksIDB4YzksIDB4MjksIDB4YTksIDB4NjksIDB4ZTksCisJMHgxOSwgMHg5OSwgMHg1OSwgMHhkOSwgMHgzOSwgMHhiOSwgMHg3OSwgMHhmOSwKKwkweDA1LCAweDg1LCAweDQ1LCAweGM1LCAweDI1LCAweGE1LCAweDY1LCAweGU1LAorCTB4MTUsIDB4OTUsIDB4NTUsIDB4ZDUsIDB4MzUsIDB4YjUsIDB4NzUsIDB4ZjUsCisJMHgwZCwgMHg4ZCwgMHg0ZCwgMHhjZCwgMHgyZCwgMHhhZCwgMHg2ZCwgMHhlZCwKKwkweDFkLCAweDlkLCAweDVkLCAweGRkLCAweDNkLCAweGJkLCAweDdkLCAweGZkLAorCTB4MDMsIDB4ODMsIDB4NDMsIDB4YzMsIDB4MjMsIDB4YTMsIDB4NjMsIDB4ZTMsCisJMHgxMywgMHg5MywgMHg1MywgMHhkMywgMHgzMywgMHhiMywgMHg3MywgMHhmMywKKwkweDBiLCAweDhiLCAweDRiLCAweGNiLCAweDJiLCAweGFiLCAweDZiLCAweGViLAorCTB4MWIsIDB4OWIsIDB4NWIsIDB4ZGIsIDB4M2IsIDB4YmIsIDB4N2IsIDB4ZmIsCisJMHgwNywgMHg4NywgMHg0NywgMHhjNywgMHgyNywgMHhhNywgMHg2NywgMHhlNywKKwkweDE3LCAweDk3LCAweDU3LCAweGQ3LCAweDM3LCAweGI3LCAweDc3LCAweGY3LAorCTB4MGYsIDB4OGYsIDB4NGYsIDB4Y2YsIDB4MmYsIDB4YWYsIDB4NmYsIDB4ZWYsCisJMHgxZiwgMHg5ZiwgMHg1ZiwgMHhkZiwgMHgzZiwgMHhiZiwgMHg3ZiwgMHhmZiwKIH07CiAKICNlbmRpZgogCi0KLQogLyoKICAqIHJ0Y19mcm9tNF9od2NvbnRyb2wgLSBoYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcwogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTIxMiwzNSArMjA3LDIwIEBACiAgKiBBZGRyZXNzIGxpbmVzIChBMjQtQTIyKSwgc28gbm8gYWN0aW9uIGlzIHJlcXVpcmVkIGhlcmUuCiAgKgogICovCi1zdGF0aWMgdm9pZCBydGNfZnJvbTRfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorc3RhdGljIHZvaWQgcnRjX2Zyb200X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBpbnQgY3RybCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwKiB0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKG10ZC0+cHJpdik7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IChtdGQtPnByaXYpOwogCi0Jc3dpdGNoKGNtZCkgeworCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOwogCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgUlRDX0ZST000X0NMRSk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyAmIH5SVENfRlJPTTRfQ0xFKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1cgfCBSVENfRlJPTTRfQUxFKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0JCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XICYgflJUQ19GUk9NNF9BTEUpOwotCQlicmVhazsKLQotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJYnJlYWs7Ci0KLQl9CisJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XIHwgUlRDX0ZST000X0NMRSk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cgfCBSVENfRlJPTTRfQUxFKTsKIH0KIAotCiAvKgogICogcnRjX2Zyb200X25hbmRfc2VsZWN0X2NoaXAgLSBoYXJkd2FyZSBzcGVjaWZpYyBjaGlwIHNlbGVjdAogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTI1MiwyNiArMjMyLDI1IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ0Y19mcm9tNF9uYW5kX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKIHsKLSAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCiAJdGhpcy0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1IgJiB+UlRDX0ZST000X05BTkRfQUREUl9NQVNLKTsKIAl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyAmIH5SVENfRlJPTTRfTkFORF9BRERSX01BU0spOwogCi0gICAgICAgIHN3aXRjaChjaGlwKSB7CisJc3dpdGNoIChjaGlwKSB7CiAKLSAgICAgICAgY2FzZSAwOgkJLyogc2VsZWN0IHNsb3QgMyBjaGlwICovCisJY2FzZSAwOgkJLyogc2VsZWN0IHNsb3QgMyBjaGlwICovCiAJCXRoaXMtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9SIHwgUlRDX0ZST000X05BTkRfQUREUl9TTE9UMyk7CiAJCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgUlRDX0ZST000X05BTkRfQUREUl9TTE9UMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToJCS8qIHNlbGVjdCBzbG90IDQgY2hpcCAqLworCQlicmVhazsKKwljYXNlIDE6CQkvKiBzZWxlY3Qgc2xvdCA0IGNoaXAgKi8KIAkJdGhpcy0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1IgfCBSVENfRlJPTTRfTkFORF9BRERSX1NMT1Q0KTsKIAkJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1cgfCBSVENfRlJPTTRfTkFORF9BRERSX1NMT1Q0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAKLSAgICAgICAgfQorCX0KIH0KIAotCiAvKgogICogcnRjX2Zyb200X25hbmRfZGV2aWNlX3JlYWR5IC0gaGFyZHdhcmUgc3BlY2lmaWMgcmVhZHkvYnVzeSBjaGVjawogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTI5MCw3ICsyNjksNiBAQAogCiB9CiAKLQogLyoKICAqIGRlcGxldGUgLSBjb2RlIHRvIHBlcmZvcm0gZGV2aWNlIHJlY292ZXJ5IGluIGNhc2UgdGhlcmUgd2FzIGEgcG93ZXIgbG9zcwogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTMwNiwyNCArMjg0LDIzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGRlcGxldGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQogewotICAgICAgICBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKLSAgICAgICAgLyogd2FpdCB1bnRpbCBkZXZpY2UgaXMgcmVhZHkgKi8KLSAgICAgICAgd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSk7CisJLyogd2FpdCB1bnRpbCBkZXZpY2UgaXMgcmVhZHkgKi8KKwl3aGlsZSAoIXRoaXMtPmRldl9yZWFkeShtdGQpKSA7CiAKIAl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXApOwogCiAJLyogU2VuZCB0aGUgY29tbWFuZHMgZm9yIGRldmljZSByZWNvdmVyeSwgcGhhc2UgMSAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfREVQTEVURTEsIDB4MDAwMCwgMHgwMDAwKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0RFUExFVEUyLCAtMSwgLTEpOworCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9ERVBMRVRFMSwgMHgwMDAwLCAweDAwMDApOworCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9ERVBMRVRFMiwgLTEsIC0xKTsKIAogCS8qIFNlbmQgdGhlIGNvbW1hbmRzIGZvciBkZXZpY2UgcmVjb3ZlcnksIHBoYXNlIDIgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0RFUExFVEUxLCAweDAwMDAsIDB4MDAwNCk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9ERVBMRVRFMiwgLTEsIC0xKTsKKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfREVQTEVURTEsIDB4MDAwMCwgMHgwMDA0KTsKKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfREVQTEVURTIsIC0xLCAtMSk7CiAKIH0KIAotCiAjaWZkZWYgUlRDX0ZST000X0hXRUNDCiAvKgogICogcnRjX2Zyb200X2VuYWJsZV9od2VjYyAtIGhhcmR3YXJlIHNwZWNpZmljIGhhcmR3YXJlIEVDQyBlbmFibGUgZnVuY3Rpb24KQEAgLTMzNSwzOSArMzEyLDM1IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ0Y19mcm9tNF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICogcnNfZWNjX2N0bCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShydGNfZnJvbTRfZmlvX2Jhc2UgKyBSVENfRlJPTTRfUlNfRUNDX0NUTCk7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnJzX2VjY19jdGwgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocnRjX2Zyb200X2Zpb19iYXNlICsgUlRDX0ZST000X1JTX0VDQ19DVEwpOwogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIAogCXN3aXRjaCAobW9kZSkgewotCSAgICBjYXNlIE5BTkRfRUNDX1JFQUQgOgotCQlzdGF0dXMgPSAgUlRDX0ZST000X1JTX0VDQ19DVExfQ0xSCi0JCQl8IFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0ZEX0U7CisJY2FzZSBOQU5EX0VDQ19SRUFEOgorCQlzdGF0dXMgPSBSVENfRlJPTTRfUlNfRUNDX0NUTF9DTFIgfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9GRF9FOwogCiAJCSpyc19lY2NfY3RsID0gc3RhdHVzOwogCQlicmVhazsKIAotCSAgICBjYXNlIE5BTkRfRUNDX1JFQURTWU4gOgotCQlzdGF0dXMgPSAgMHgwMDsKKwljYXNlIE5BTkRfRUNDX1JFQURTWU46CisJCXN0YXR1cyA9IDB4MDA7CiAKIAkJKnJzX2VjY19jdGwgPSBzdGF0dXM7CiAJCWJyZWFrOwogCi0JICAgIGNhc2UgTkFORF9FQ0NfV1JJVEUgOgotCQlzdGF0dXMgPSAgUlRDX0ZST000X1JTX0VDQ19DVExfQ0xSCi0JCQl8IFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0dFTgotCQkJfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9GRF9FOworCWNhc2UgTkFORF9FQ0NfV1JJVEU6CisJCXN0YXR1cyA9IFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0NMUiB8IFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0dFTiB8IFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0ZEX0U7CiAKIAkJKnJzX2VjY19jdGwgPSBzdGF0dXM7CiAJCWJyZWFrOwogCi0JICAgIGRlZmF1bHQ6CisJZGVmYXVsdDoKIAkJQlVHKCk7CiAJCWJyZWFrOwogCX0KIAogfQogCi0KIC8qCiAgKiBydGNfZnJvbTRfY2FsY3VsYXRlX2VjYyAtIGhhcmR3YXJlIHNwZWNpZmljIGNvZGUgdG8gcmVhZCBFQ0MgY29kZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTM4Myw3ICszNTYsNyBAQAogICovCiBzdGF0aWMgdm9pZCBydGNfZnJvbTRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCiB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKiByc19lY2NuID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHJ0Y19mcm9tNF9maW9fYmFzZSArIFJUQ19GUk9NNF9SU19FQ0NOKTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcnNfZWNjbiA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShydGNfZnJvbTRfZmlvX2Jhc2UgKyBSVENfRlJPTTRfUlNfRUNDTik7CiAJdW5zaWduZWQgc2hvcnQgdmFsdWU7CiAJaW50IGk7CiAKQEAgLTM5NSw3ICszNjgsNiBAQAogCWVjY19jb2RlWzddIHw9IDB4MGY7CS8qIHNldCB0aGUgbGFzdCBmb3VyIGJpdHMgKG5vdCB1c2VkKSAqLwogfQogCi0KIC8qCiAgKiBydGNfZnJvbTRfY29ycmVjdF9kYXRhIC0gaGFyZHdhcmUgc3BlY2lmaWMgY29kZSB0byBjb3JyZWN0IGRhdGEgdXNpbmcgRUNDIGNvZGUKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC00MTQsNyArMzg2LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJdWludDE2X3QgcGFyWzZdLCBzeW5bNl07CiAJdWludDhfdCBlY2NbOF07Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpyc19lY2M7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnJzX2VjYzsKIAogCXN0YXR1cyA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHJ0Y19mcm9tNF9maW9fYmFzZSArIFJUQ19GUk9NNF9SU19FQ0NfQ0hLKSk7CiAKQEAgLTQyNCwyMyArMzk2LDE4IEBACiAKIAkvKiBSZWFkIHRoZSBzeW5kcm9tIHBhdHRlcm4gZnJvbSB0aGUgRlBHQSBhbmQgY29ycmVjdCB0aGUgYml0b3JkZXIgKi8KIAlyc19lY2MgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocnRjX2Zyb200X2Zpb19iYXNlICsgUlRDX0ZST000X1JTX0VDQyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAgICAgICAgICAgICBlY2NbaV0gPSByZXZiaXRzWygqcnNfZWNjKSAmIDB4RkZdOwotICAgICAgICAgICAgICAgIHJzX2VjYysrOwotICAgICAgICB9CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQllY2NbaV0gPSByZXZiaXRzWygqcnNfZWNjKSAmIDB4RkZdOworCQlyc19lY2MrKzsKKwl9CiAKIAkvKiBjb252ZXJ0IGludG8gNiAxMGJpdCBzeW5kcm9tZSBmaWVsZHMgKi8KLQlwYXJbNV0gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCllY2NbMF0gPj4gMCkgJiAweDBmZikgfAotCQkJCSAgICAgICgoKHVpbnQxNl90KWVjY1sxXSA8PCA4KSAmIDB4MzAwKV07Ci0JcGFyWzRdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpZWNjWzFdID4+IDIpICYgMHgwM2YpIHwKLQkJCQkgICAgICAoKCh1aW50MTZfdCllY2NbMl0gPDwgNikgJiAweDNjMCldOwotCXBhclszXSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KWVjY1syXSA+PiA0KSAmIDB4MDBmKSB8Ci0JCQkJICAgICAgKCgodWludDE2X3QpZWNjWzNdIDw8IDQpICYgMHgzZjApXTsKLQlwYXJbMl0gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCllY2NbM10gPj4gNikgJiAweDAwMykgfAotCQkJCSAgICAgICgoKHVpbnQxNl90KWVjY1s0XSA8PCAyKSAmIDB4M2ZjKV07Ci0JcGFyWzFdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpZWNjWzVdID4+IDApICYgMHgwZmYpIHwKLQkJCQkgICAgICAoKCh1aW50MTZfdCllY2NbNl0gPDwgOCkgJiAweDMwMCldOwotCXBhclswXSA9ICgoKHVpbnQxNl90KWVjY1s2XSA+PiAyKSAmIDB4MDNmKSB8ICgoKHVpbnQxNl90KWVjY1s3XSA8PCA2KSAmIDB4M2MwKTsKKwlwYXJbNV0gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCkgZWNjWzBdID4+IDApICYgMHgwZmYpIHwgKCgodWludDE2X3QpIGVjY1sxXSA8PCA4KSAmIDB4MzAwKV07CisJcGFyWzRdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpIGVjY1sxXSA+PiAyKSAmIDB4MDNmKSB8ICgoKHVpbnQxNl90KSBlY2NbMl0gPDwgNikgJiAweDNjMCldOworCXBhclszXSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KSBlY2NbMl0gPj4gNCkgJiAweDAwZikgfCAoKCh1aW50MTZfdCkgZWNjWzNdIDw8IDQpICYgMHgzZjApXTsKKwlwYXJbMl0gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCkgZWNjWzNdID4+IDYpICYgMHgwMDMpIHwgKCgodWludDE2X3QpIGVjY1s0XSA8PCAyKSAmIDB4M2ZjKV07CisJcGFyWzFdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpIGVjY1s1XSA+PiAwKSAmIDB4MGZmKSB8ICgoKHVpbnQxNl90KSBlY2NbNl0gPDwgOCkgJiAweDMwMCldOworCXBhclswXSA9ICgoKHVpbnQxNl90KSBlY2NbNl0gPj4gMikgJiAweDAzZikgfCAoKCh1aW50MTZfdCkgZWNjWzddIDw8IDYpICYgMHgzYzApOwogCiAJLyogQ29udmVydCB0byBjb21wdXRhYmxlIHN5bmRyb21lICovCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewpAQCAtNDUzLDE2ICs0MjAsMTQgQEAKIAkJc3luW2ldID0gcnNfZGVjb2Rlci0+aW5kZXhfb2Zbc3luW2ldXTsKIAl9CiAKLQkvKiBMZXQgdGhlIGxpYnJhcnkgY29kZSBkbyBpdHMgbWFnaWMuKi8KLQlyZXMgPSBkZWNvZGVfcnM4KHJzX2RlY29kZXIsICh1aW50OF90ICopYnVmLCBwYXIsIDUxMiwgc3luLCAwLCBOVUxMLCAweGZmLCBOVUxMKTsKKwkvKiBMZXQgdGhlIGxpYnJhcnkgY29kZSBkbyBpdHMgbWFnaWMuICovCisJcmVzID0gZGVjb2RlX3JzOChyc19kZWNvZGVyLCAodWludDhfdCAqKSBidWYsIHBhciwgNTEyLCBzeW4sIDAsIE5VTEwsIDB4ZmYsIE5VTEwpOwogCWlmIChyZXMgPiAwKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAicnRjX2Zyb200X2NvcnJlY3RfZGF0YTogIgotCQkJIkVDQyBjb3JyZWN0ZWQgJWQgZXJyb3JzIG9uIHJlYWRcbiIsIHJlcyk7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJydGNfZnJvbTRfY29ycmVjdF9kYXRhOiAiICJFQ0MgY29ycmVjdGVkICVkIGVycm9ycyBvbiByZWFkXG4iLCByZXMpOwogCX0KIAlyZXR1cm4gcmVzOwogfQogCi0KIC8qKgogICogcnRjX2Zyb200X2VycnN0YXQgLSBwZXJmb3JtIGFkZGl0aW9uYWwgZXJyb3Igc3RhdHVzIGNoZWNrcwogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTQ3OCw1NCArNDQzLDY2IEBACiAgKiBub3RlOiBzZWUgcGFnZXMgMzQuLjM3IG9mIGRhdGEgc2hlZXQgZm9yIGRldGFpbHMuCiAgKgogICovCi1zdGF0aWMgaW50IHJ0Y19mcm9tNF9lcnJzdGF0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUsIGludCBzdGF0dXMsIGludCBwYWdlKQorc3RhdGljIGludCBydGNfZnJvbTRfZXJyc3RhdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywKKwkJCSAgICAgaW50IHN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgcGFnZSkKIHsKLQlpbnQJZXJfc3RhdD0wOwotCWludAlydG4sIHJldGxlbjsKLQlzaXplX3QJbGVuOworCWludCBlcl9zdGF0ID0gMDsKKwlpbnQgcnRuLCByZXRsZW47CisJc2l6ZV90IGxlbjsKIAl1aW50OF90ICpidWY7Ci0JaW50CWk7CisJaW50IGk7CiAKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVU19DTEVBUiwgLTEsIC0xKTsKKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTX0NMRUFSLCAtMSwgLTEpOwogCi0gICAgICAgIGlmIChzdGF0ZSA9PSBGTF9FUkFTSU5HKSB7Ci0JCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkJaWYgKHN0YXR1cyAmIDE8PChpKzEpKSB7Ci0JCQkJdGhpcy0+Y21kZnVuYyAobXRkLCAoTkFORF9DTURfU1RBVFVTX0VSUk9SICsgaSArIDEpLCAtMSwgLTEpOwotCQkJCXJ0biA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU1RBVFVTX1JFU0VULCAtMSwgLTEpOwotCQkJCWlmICghKHJ0biAmIEVSUl9TVEFUX0VDQ19BVkFJTEFCTEUpKSB7Ci0JCQkJCWVyX3N0YXQgfD0gMTw8KGkrMSk7CS8qIGVycl9lY2Nfbm90X2F2YWlsICovCi0JCQkJfQotCQkJfQorCWlmIChzdGF0ZSA9PSBGTF9FUkFTSU5HKSB7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKCEoc3RhdHVzICYgMSA8PCAoaSArIDEpKSkKKwkJCQljb250aW51ZTsKKwkJCXRoaXMtPmNtZGZ1bmMobXRkLCAoTkFORF9DTURfU1RBVFVTX0VSUk9SICsgaSArIDEpLAorCQkJCSAgICAgIC0xLCAtMSk7CisJCQlydG4gPSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKKwkJCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVNfUkVTRVQsIC0xLCAtMSk7CisKKwkJCS8qIGVycl9lY2Nfbm90X2F2YWlsICovCisJCQlpZiAoIShydG4gJiBFUlJfU1RBVF9FQ0NfQVZBSUxBQkxFKSkKKwkJCQllcl9zdGF0IHw9IDEgPDwgKGkgKyAxKTsKIAkJfQorCiAJfSBlbHNlIGlmIChzdGF0ZSA9PSBGTF9XUklUSU5HKSB7CisKKwkJdW5zaWduZWQgbG9uZyBjb3JyZWN0ZWQgPSBtdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQ7CisKIAkJLyogc2luZ2xlIGJhbmsgd3JpdGUgbG9naWMgKi8KLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfRVJST1IsIC0xLCAtMSk7CisJCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVNfRVJST1IsIC0xLCAtMSk7CiAJCXJ0biA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVU19SRVNFVCwgLTEsIC0xKTsKKwkJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVU19SRVNFVCwgLTEsIC0xKTsKKwogCQlpZiAoIShydG4gJiBFUlJfU1RBVF9FQ0NfQVZBSUxBQkxFKSkgewotCQkJZXJfc3RhdCB8PSAxPDwxOwkvKiBlcnJfZWNjX25vdF9hdmFpbCAqLwotCQl9IGVsc2UgewotCQkJbGVuID0gbXRkLT5vb2JibG9jazsKLQkJCWJ1ZiA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWJ1ZikgewotCQkJCXByaW50ayAoS0VSTl9FUlIgInJ0Y19mcm9tNF9lcnJzdGF0OiBPdXQgb2YgbWVtb3J5IVxuIik7Ci0JCQkJZXJfc3RhdCA9IDE7CQkJLyogaWYgd2UgY2FuJ3QgY2hlY2ssIGFzc3VtZSBmYWlsZWQgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJLyogcmVjb3ZlcnkgcmVhZCAqLwotCQkJCS8qIHBhZ2UgcmVhZCAqLwotCQkJCXJ0biA9IG5hbmRfZG9fcmVhZF9lY2MgKG10ZCwgcGFnZSwgbGVuLCAmcmV0bGVuLCBidWYsIE5VTEwsIHRoaXMtPmF1dG9vb2IsIDEpOwotCQkJCWlmIChydG4pIHsJLyogaWYgcmVhZCBmYWlsZWQgb3IgPiAxLWJpdCBlcnJvciBjb3JyZWN0ZWQgKi8KLQkJCQkJZXJfc3RhdCB8PSAxPDwxOwkvKiBFQ0MgcmVhZCBmYWlsZWQgKi8KLQkJCQl9Ci0JCQkJa2ZyZWUoYnVmKTsKLQkJCX0KKwkJCS8qIGVycl9lY2Nfbm90X2F2YWlsICovCisJCQllcl9zdGF0IHw9IDEgPDwgMTsKKwkJCWdvdG8gb3V0OwogCQl9CisKKwkJbGVuID0gbXRkLT53cml0ZXNpemU7CisJCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicnRjX2Zyb200X2VycnN0YXQ6IE91dCBvZiBtZW1vcnkhXG4iKTsKKwkJCWVyX3N0YXQgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiByZWNvdmVyeSByZWFkICovCisJCXJ0biA9IG5hbmRfZG9fcmVhZChtdGQsIHBhZ2UsIGxlbiwgJnJldGxlbiwgYnVmKTsKKworCQkvKiBpZiByZWFkIGZhaWxlZCBvciA+IDEtYml0IGVycm9yIGNvcnJlY3RlZCAqLworCQlpZiAocnRuIHx8IChtdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgLSBjb3JyZWN0ZWQpID4gMSkgeworCQkJZXJfc3RhdCB8PSAxIDw8IDE7CisJCWtmcmVlKGJ1Zik7CiAJfQogCiAJcnRuID0gc3RhdHVzOwotCWlmIChlcl9zdGF0ID09IDApIHsJCQkJLyogaWYgRUNDIGlzIGF2YWlsYWJsZSAgICovCisJaWYgKGVyX3N0YXQgPT0gMCkgewkvKiBpZiBFQ0MgaXMgYXZhaWxhYmxlICAgKi8KIAkJcnRuID0gKHN0YXR1cyAmIH5OQU5EX1NUQVRVU19GQUlMKTsJLyogICBjbGVhciB0aGUgZXJyb3IgYml0ICovCiAJfQogCkBAIC01MzMsMzMgKzUxMCwzMiBAQAogfQogI2VuZGlmCiAKLQogLyoKICAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQogICovCi1pbnQgX19pbml0IHJ0Y19mcm9tNF9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcnRjX2Zyb200X2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCXVuc2lnbmVkIHNob3J0IGJjcjEsIGJjcjIsIHdjcjI7CiAJaW50IGk7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQlydGNfZnJvbTRfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZiAoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkJR0ZQX0tFUk5FTCk7CisJcnRjX2Zyb200X210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwogCWlmICghcnRjX2Zyb200X210ZCkgewotCQlwcmludGsgKCJVbmFibGUgdG8gYWxsb2NhdGUgUmVuZXNhcyBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIFJlbmVzYXMgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZydGNfZnJvbTRfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnJ0Y19mcm9tNF9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIHJ0Y19mcm9tNF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQoKGNoYXIgKikgdGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKwltZW1zZXQocnRjX2Zyb200X210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlydGNfZnJvbTRfbXRkLT5wcml2ID0gdGhpczsKKwlydGNfZnJvbTRfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogc2V0IGFyZWEgNSBhcyBQQ01DSUEgbW9kZSB0byBjbGVhciB0aGUgc3BlYyBvZiB0REgoRGF0YSBob2xkIHRpbWU7OW5zIG1pbikgKi8KIAliY3IxID0gKlNINzdYOV9CQ1IxICYgfjB4MDAwMjsKQEAgLTU4MCw5ICs1NTYsOSBAQAogCXRoaXMtPklPX0FERFJfUiA9IHJ0Y19mcm9tNF9maW9fYmFzZTsKIAl0aGlzLT5JT19BRERSX1cgPSBydGNfZnJvbTRfZmlvX2Jhc2U7CiAJLyogU2V0IGFkZHJlc3Mgb2YgaGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbiAqLwotCXRoaXMtPmh3Y29udHJvbCA9IHJ0Y19mcm9tNF9od2NvbnRyb2w7CisJdGhpcy0+Y21kX2N0cmwgPSBydGNfZnJvbTRfaHdjb250cm9sOwogCS8qIFNldCBhZGRyZXNzIG9mIGNoaXAgc2VsZWN0IGZ1bmN0aW9uICovCi0gICAgICAgIHRoaXMtPnNlbGVjdF9jaGlwID0gcnRjX2Zyb200X25hbmRfc2VsZWN0X2NoaXA7CisJdGhpcy0+c2VsZWN0X2NoaXAgPSBydGNfZnJvbTRfbmFuZF9zZWxlY3RfY2hpcDsKIAkvKiBjb21tYW5kIGRlbGF5IHRpbWUgKGluIHVzKSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSAxMDA7CiAJLyogcmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIFJlYWR5L0J1c3kgbGluZSAqLwpAQCAtNTkxLDE5ICs1NjcsMjAgQEAKICNpZmRlZiBSVENfRlJPTTRfSFdFQ0MKIAlwcmludGsoS0VSTl9JTkZPICJydGNfZnJvbTRfaW5pdDogdXNpbmcgaGFyZHdhcmUgRUNDIGRldGVjdGlvbi5cbiIpOwogCi0gICAgICAgIHRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19IVzhfNTEyOwotCXRoaXMtPm9wdGlvbnMgfD0gTkFORF9IV0VDQ19TWU5EUk9NRTsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXX1NZTkRST01FOworCXRoaXMtPmVjYy5zaXplID0gNTEyOworCXRoaXMtPmVjYy5ieXRlcyA9IDg7CiAJLyogcmV0dXJuIHRoZSBzdGF0dXMgb2YgZXh0cmEgc3RhdHVzIGFuZCBFQ0MgY2hlY2tzICovCiAJdGhpcy0+ZXJyc3RhdCA9IHJ0Y19mcm9tNF9lcnJzdGF0OwogCS8qIHNldCB0aGUgbmFuZF9vb2JpbmZvIHRvIHN1cHBvcnQgRlBHQSBIL1cgZXJyb3IgZGV0ZWN0aW9uICovCi0JdGhpcy0+YXV0b29vYiA9ICZydGNfZnJvbTRfbmFuZF9vb2JpbmZvOwotCXRoaXMtPmVuYWJsZV9od2VjYyA9IHJ0Y19mcm9tNF9lbmFibGVfaHdlY2M7Ci0JdGhpcy0+Y2FsY3VsYXRlX2VjYyA9IHJ0Y19mcm9tNF9jYWxjdWxhdGVfZWNjOwotCXRoaXMtPmNvcnJlY3RfZGF0YSA9IHJ0Y19mcm9tNF9jb3JyZWN0X2RhdGE7CisJdGhpcy0+ZWNjLmxheW91dCA9ICZydGNfZnJvbTRfbmFuZF9vb2JpbmZvOworCXRoaXMtPmVjYy5od2N0bCA9IHJ0Y19mcm9tNF9lbmFibGVfaHdlY2M7CisJdGhpcy0+ZWNjLmNhbGN1bGF0ZSA9IHJ0Y19mcm9tNF9jYWxjdWxhdGVfZWNjOworCXRoaXMtPmVjYy5jb3JyZWN0ID0gcnRjX2Zyb200X2NvcnJlY3RfZGF0YTsKICNlbHNlCiAJcHJpbnRrKEtFUk5fSU5GTyAicnRjX2Zyb200X2luaXQ6IHVzaW5nIHNvZnR3YXJlIEVDQyBkZXRlY3Rpb24uXG4iKTsKIAotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKICNlbmRpZgogCiAJLyogc2V0IHRoZSBiYWQgYmxvY2sgdGFibGVzIHRvIHN1cHBvcnQgZGVidWdnaW5nICovCkBAIC02MTcsNyArNTk0LDcgQEAKIAl9CiAKIAkvKiBQZXJmb3JtICdkZXZpY2UgcmVjb3ZlcnknIGZvciBlYWNoIGNoaXAgaW4gY2FzZSB0aGVyZSB3YXMgYSBwb3dlciBsb3NzLiAqLwotCWZvciAoaT0wOyBpIDwgdGhpcy0+bnVtY2hpcHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCB0aGlzLT5udW1jaGlwczsgaSsrKSB7CiAJCWRlcGxldGUocnRjX2Zyb200X210ZCwgaSk7CiAJfQogCkBAIC02NDMsNyArNjIwLDcgQEAKIAkgKi8KIAlyc19kZWNvZGVyID0gaW5pdF9ycygxMCwgMHg0MDksIDAsIDEsIDYpOwogCWlmICghcnNfZGVjb2RlcikgewotCQlwcmludGsgKEtFUk5fRVJSICJDb3VsZCBub3QgY3JlYXRlIGEgUlMgZGVjb2RlclxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGNyZWF0ZSBhIFJTIGRlY29kZXJcbiIpOwogCQluYW5kX3JlbGVhc2UocnRjX2Zyb200X210ZCk7CiAJCWtmcmVlKHJ0Y19mcm9tNF9tdGQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY1MiwyMCArNjI5LDE5IEBACiAJLyogUmV0dXJuIGhhcHB5ICovCiAJcmV0dXJuIDA7CiB9Ci1tb2R1bGVfaW5pdChydGNfZnJvbTRfaW5pdCk7CiAKK21vZHVsZV9pbml0KHJ0Y19mcm9tNF9pbml0KTsKIAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgX19leGl0IHJ0Y19mcm9tNF9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHJ0Y19mcm9tNF9jbGVhbnVwKHZvaWQpCiB7CiAJLyogUmVsZWFzZSByZXNvdXJjZSwgdW5yZWdpc3RlciBwYXJ0aXRpb25zICovCiAJbmFuZF9yZWxlYXNlKHJ0Y19mcm9tNF9tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAocnRjX2Zyb200X210ZCk7CisJa2ZyZWUocnRjX2Zyb200X210ZCk7CiAKICNpZmRlZiBSVENfRlJPTTRfSFdFQ0MKIAkvKiBGcmVlIHRoZSByZWVkIHNvbG9tb24gcmVzb3VyY2VzICovCkBAIC02NzQsMTAgKzY1MCw5IEBACiAJfQogI2VuZGlmCiB9CisKIG1vZHVsZV9leGl0KHJ0Y19mcm9tNF9jbGVhbnVwKTsKLSNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJkLm1hcmxpbiA8ZG1hcmxpbkByZWRoYXQuY29tIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJvYXJkLXNwZWNpZmljIGdsdWUgbGF5ZXIgZm9yIEFHLUFORCBmbGFzaCBvbiBSZW5lc2FzIEZST01fQk9BUkQ0Iik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKaW5kZXggNWI1NTU5OS4uMmMyNjJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKQEAgLTE4LDggKzE4LDkgQEAKICAqCTIwLUp1bi0yMDA1ICBCSkQgIFVwZGF0ZWQgczNjMjQ0MCBzdXBwb3J0LCBmaXhlZCB0aW1pbmcgYnVnCiAgKgkwOC1KdWwtMjAwNSAgQkpEICBGaXggT09QUyB3aGVuIG5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWQKICAqCTIwLU9jdC0yMDA1ICBCSkQgIEZpeCB0aW1pbmcgY2FsY3VsYXRpb24gYnVnCisgKgkxNC1KYW4tMjAwNiAgQkpEICBBbGxvdyBjbG9jayB0byBiZSBzdG9wcGVkIHdoZW4gaWRsZQogICoKLSAqICRJZDogczNjMjQxMC5jLHYgMS4yMCAyMDA1LzExLzA3IDExOjE0OjMxIGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IHMzYzI0MTAuYyx2IDEuMjMgMjAwNi8wNC8wMSAxODowNjoyOSBiamQgRXhwICQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDkgKzM3LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCiAKLSNpbmNsdWRlIDxjb25maWcvbXRkL25hbmQvczNjMjQxMC9od2VjYy5oPgotI2luY2x1ZGUgPGNvbmZpZy9tdGQvbmFuZC9zM2MyNDEwL2RlYnVnLmg+Ci0KICNpZmRlZiBDT05GSUdfTVREX05BTkRfUzNDMjQxMF9ERUJVRwogI2RlZmluZSBERUJVRwogI2VuZGlmCkBAIC03MywxNCArNzEsMjAgQEAKIHN0YXRpYyBpbnQgaGFyZHdhcmVfZWNjID0gMDsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfQ0xLU1RPUAorc3RhdGljIGludCBjbG9ja19zdG9wID0gMTsKKyNlbHNlCitzdGF0aWMgY29uc3QgaW50IGNsb2NrX3N0b3AgPSAwOworI2VuZGlmCisKKwogLyogbmV3IG9vYiBwbGFjZW1lbnQgYmxvY2sgZm9yIHVzZSB3aXRoIGhhcmR3YXJlIGVjYyBnZW5lcmF0aW9uCiAgKi8KIAotc3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8gbmFuZF9od19lY2Nvb2IgPSB7Ci0JLnVzZWVjYwkJPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCi0JLmVjY2J5dGVzCT0gMywKLQkuZWNjcG9zCQk9IHswLCAxLCAyIH0sCi0JLm9vYmZyZWUJPSB7IHs4LCA4fSB9CitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfaHdfZWNjb29iID0geworCS5lY2NieXRlcyA9IDMsCisJLmVjY3BvcyA9IHswLCAxLCAyfSwKKwkub29iZnJlZSA9IHt7OCwgOH19CiB9OwogCiAvKiBjb250cm9sbGVyIGFuZCBtdGQgaW5mb3JtYXRpb24gKi8KQEAgLTEzNSw2ICsxMzksMTEgQEAKIAlyZXR1cm4gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYWxsb3dfY2xrX3N0b3Aoc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvKQoreworCXJldHVybiBjbG9ja19zdG9wOworfQorCiAvKiB0aW1pbmcgY2FsY3VsYXRpb25zICovCiAKICNkZWZpbmUgTlNfSU5fS0haIDEwMDAwMDAKQEAgLTE0OSw4ICsxNTgsNyBAQAogCXByX2RlYnVnKCJyZXN1bHQgJWQgZnJvbSAlbGQsICVkXG4iLCByZXN1bHQsIGNsaywgd2FudGVkKTsKIAogCWlmIChyZXN1bHQgPiBtYXgpIHsKLQkJcHJpbnRrKCIlZCBucyBpcyB0b28gYmlnIGZvciBjdXJyZW50IGNsb2NrIHJhdGUgJWxkXG4iLAotCQkgICAgICAgd2FudGVkLCBjbGspOworCQlwcmludGsoIiVkIG5zIGlzIHRvbyBiaWcgZm9yIGN1cnJlbnQgY2xvY2sgcmF0ZSAlbGRcbiIsIHdhbnRlZCwgY2xrKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTY0LDggKzE3Miw3IEBACiAKIC8qIGNvbnRyb2xsZXIgc2V0dXAgKi8KIAotc3RhdGljIGludCBzM2MyNDEwX25hbmRfaW5pdGh3KHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBzM2MyNDEwX25hbmRfaW5pdGh3KHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbywgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICpwbGF0ID0gdG9fbmFuZF9wbGF0KHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOwpAQCAtMTc3LDcgKzE4NCw3IEBACiAJY2xrcmF0ZSAvPSAxMDAwOwkvKiB0dXJuIGNsb2NrIGludG8ga0h6IGZvciBlYXNlIG9mIHVzZSAqLwogCiAJaWYgKHBsYXQgIT0gTlVMTCkgewotCQl0YWNscyAgPSBzM2MyNDEwX25hbmRfY2FsY19yYXRlKHBsYXQtPnRhY2xzLCBjbGtyYXRlLCA0KTsKKwkJdGFjbHMgPSBzM2MyNDEwX25hbmRfY2FsY19yYXRlKHBsYXQtPnRhY2xzLCBjbGtyYXRlLCA0KTsKIAkJdHdycGgwID0gczNjMjQxMF9uYW5kX2NhbGNfcmF0ZShwbGF0LT50d3JwaDAsIGNsa3JhdGUsIDgpOwogCQl0d3JwaDEgPSBzM2MyNDEwX25hbmRfY2FsY19yYXRlKHBsYXQtPnR3cnBoMSwgY2xrcmF0ZSwgOCk7CiAJfSBlbHNlIHsKQEAgLTE5MywxOSArMjAwLDIyIEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlRhY2xzPSVkLCAlZG5zIFR3cnBoMD0lZCAlZG5zLCBUd3JwaDE9JWQgJWRuc1xuIiwKLQkgICAgICAgdGFjbHMsIHRvX25zKHRhY2xzLCBjbGtyYXRlKSwKLQkgICAgICAgdHdycGgwLCB0b19ucyh0d3JwaDAsIGNsa3JhdGUpLAotCSAgICAgICB0d3JwaDEsIHRvX25zKHR3cnBoMSwgY2xrcmF0ZSkpOworCSAgICAgICB0YWNscywgdG9fbnModGFjbHMsIGNsa3JhdGUpLCB0d3JwaDAsIHRvX25zKHR3cnBoMCwgY2xrcmF0ZSksIHR3cnBoMSwgdG9fbnModHdycGgxLCBjbGtyYXRlKSk7CiAKIAlpZiAoIWluZm8tPmlzX3MzYzI0NDApIHsKLQkJY2ZnICA9IFMzQzI0MTBfTkZDT05GX0VOOwotCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVEFDTFModGFjbHMtMSk7Ci0JCWNmZyB8PSBTM0MyNDEwX05GQ09ORl9UV1JQSDAodHdycGgwLTEpOwotCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVFdSUEgxKHR3cnBoMS0xKTsKKwkJY2ZnID0gUzNDMjQxMF9ORkNPTkZfRU47CisJCWNmZyB8PSBTM0MyNDEwX05GQ09ORl9UQUNMUyh0YWNscyAtIDEpOworCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVFdSUEgwKHR3cnBoMCAtIDEpOworCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVFdSUEgxKHR3cnBoMSAtIDEpOwogCX0gZWxzZSB7Ci0JCWNmZyAgID0gUzNDMjQ0MF9ORkNPTkZfVEFDTFModGFjbHMtMSk7Ci0JCWNmZyAgfD0gUzNDMjQ0MF9ORkNPTkZfVFdSUEgwKHR3cnBoMC0xKTsKLQkJY2ZnICB8PSBTM0MyNDQwX05GQ09ORl9UV1JQSDEodHdycGgxLTEpOworCQljZmcgPSBTM0MyNDQwX05GQ09ORl9UQUNMUyh0YWNscyAtIDEpOworCQljZmcgfD0gUzNDMjQ0MF9ORkNPTkZfVFdSUEgwKHR3cnBoMCAtIDEpOworCQljZmcgfD0gUzNDMjQ0MF9ORkNPTkZfVFdSUEgxKHR3cnBoMSAtIDEpOworCisJCS8qIGVuYWJsZSB0aGUgY29udHJvbGxlciBhbmQgZGUtYXNzZXJ0IG5GQ0UgKi8KKworCQl3cml0ZWwoUzNDMjQ0MF9ORkNPTlRfRU5BQkxFIHwgUzNDMjQ0MF9ORkNPTlRfRU5BQkxFLAorCQkgICAgICAgaW5mby0+cmVncyArIFMzQzI0NDBfTkZDT05UKTsKIAl9CiAKIAlwcl9kZWJ1ZyhQRlggIk5GX0NPTkYgaXMgMHglbHhcbiIsIGNmZyk7CkBAIC0yMjksNyArMjM5LDEwIEBACiAJaW5mbyA9IG5tdGQtPmluZm87CiAKIAliaXQgPSAoaW5mby0+aXNfczNjMjQ0MCkgPyBTM0MyNDQwX05GQ09OVF9uRkNFIDogUzNDMjQxMF9ORkNPTkZfbkZDRTsKLQlyZWcgPSBpbmZvLT5yZWdzKygoaW5mby0+aXNfczNjMjQ0MCkgPyBTM0MyNDQwX05GQ09OVDpTM0MyNDEwX05GQ09ORik7CisJcmVnID0gaW5mby0+cmVncyArICgoaW5mby0+aXNfczNjMjQ0MCkgPyBTM0MyNDQwX05GQ09OVCA6IFMzQzI0MTBfTkZDT05GKTsKKworCWlmIChjaGlwICE9IC0xICYmIGFsbG93X2Nsa19zdG9wKGluZm8pKQorCQljbGtfZW5hYmxlKGluZm8tPmNsayk7CiAKIAljdXIgPSByZWFkbChyZWcpOwogCkBAIC0yNDMsNzcgKzI1Niw1MSBAQAogCiAJCWlmIChpbmZvLT5wbGF0Zm9ybSAhPSBOVUxMKSB7CiAJCQlpZiAoaW5mby0+cGxhdGZvcm0tPnNlbGVjdF9jaGlwICE9IE5VTEwpCi0JCQkJKGluZm8tPnBsYXRmb3JtLT5zZWxlY3RfY2hpcCkobm10ZC0+c2V0LCBjaGlwKTsKKwkJCQkoaW5mby0+cGxhdGZvcm0tPnNlbGVjdF9jaGlwKSAobm10ZC0+c2V0LCBjaGlwKTsKIAkJfQogCiAJCWN1ciAmPSB+Yml0OwogCX0KIAogCXdyaXRlbChjdXIsIHJlZyk7CisKKwlpZiAoY2hpcCA9PSAtMSAmJiBhbGxvd19jbGtfc3RvcChpbmZvKSkKKwkJY2xrX2Rpc2FibGUoaW5mby0+Y2xrKTsKIH0KIAotLyogY29tbWFuZCBhbmQgY29udHJvbCBmdW5jdGlvbnMKKy8qIHMzYzI0MTBfbmFuZF9od2NvbnRyb2wKICAqCi0gKiBOb3RlLCB0aGVzZSBhbGwgdXNlIHRnbHgncyBtZXRob2Qgb2YgY2hhbmdpbmcgdGhlIElPX0FERFJfVyBmaWVsZAotICogdG8gbWFrZSB0aGUgY29kZSBzaW1wbGVyLCBhbmQgdXNlIHRoZSBuYW5kIGxheWVyJ3MgY29kZSB0byBpc3N1ZSB0aGUKLSAqIGNvbW1hbmQgYW5kIGFkZHJlc3Mgc2VxdWVuY2VzIHZpYSB0aGUgcHJvcGVyIElPIHBvcnRzLgotICoKKyAqIElzc3VlIGNvbW1hbmQgYW5kIGFkZHJlc3MgY3ljbGVzIHRvIHRoZSBjaGlwCiAqLwogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX25hbmRfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorc3RhdGljIHZvaWQgczNjMjQxMF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOwotCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotCWNhc2UgTkFORF9DVExfQ0xSTkNFOgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYWxsZWQgZm9yIE5DRVxuIiwgX19GVU5DVElPTl9fKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJY2hpcC0+SU9fQUREUl9XID0gaW5mby0+cmVncyArIFMzQzI0MTBfTkZDTUQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0JCWNoaXAtPklPX0FERFJfVyA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GQUREUjsKLQkJYnJlYWs7Ci0KLQkJLyogTkFORF9DVExfQ0xSQ0xFOiAqLwotCQkvKiBOQU5EX0NUTF9DTFJBTEU6ICovCi0JZGVmYXVsdDoKLQkJY2hpcC0+SU9fQUREUl9XID0gaW5mby0+cmVncyArIFMzQzI0MTBfTkZEQVRBOwotCQlicmVhazsKLQl9CisJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJd3JpdGViKGNtZCwgaW5mby0+cmVncyArIFMzQzI0MTBfTkZDTUQpOworCWVsc2UKKwkJd3JpdGViKGNtZCwgaW5mby0+cmVncyArIFMzQzI0MTBfTkZBRERSKTsKIH0KIAogLyogY29tbWFuZCBhbmQgY29udHJvbCBmdW5jdGlvbnMgKi8KIAotc3RhdGljIHZvaWQgczNjMjQ0MF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHMzYzI0NDBfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gczNjMjQxMF9uYW5kX210ZF90b2luZm8obXRkKTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkIGZvciBOQ0VcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWJyZWFrOworCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOwogCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCWNoaXAtPklPX0FERFJfVyA9IGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GQ01EOwotCQlicmVhazsKLQotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQljaGlwLT5JT19BRERSX1cgPSBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkFERFI7Ci0JCWJyZWFrOwotCi0JCS8qIE5BTkRfQ1RMX0NMUkNMRTogKi8KLQkJLyogTkFORF9DVExfQ0xSQUxFOiAqLwotCWRlZmF1bHQ6Ci0JCWNoaXAtPklPX0FERFJfVyA9IGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GREFUQTsKLQkJYnJlYWs7Ci0JfQorCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GQ01EKTsKKwllbHNlCisJCXdyaXRlYihjbWQsIGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GQUREUik7CiB9CiAKIC8qIHMzYzI0MTBfbmFuZF9kZXZyZWFkeSgpCkBAIC0zMzAsMjIgKzMxNywxNiBAQAogCXJldHVybiByZWFkYihpbmZvLT5yZWdzICsgUzNDMjQxMF9ORlNUQVQpICYgUzNDMjQxMF9ORlNUQVRfQlVTWTsKIH0KIAotCiAvKiBFQ0MgaGFuZGxpbmcgZnVuY3Rpb25zICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsCi0JCQkJICAgICB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQorc3RhdGljIGludCBzM2MyNDEwX25hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKIHsKLQlwcl9kZWJ1ZygiczNjMjQxMF9uYW5kX2NvcnJlY3RfZGF0YSglcCwlcCwlcCwlcClcbiIsCi0JCSBtdGQsIGRhdCwgcmVhZF9lY2MsIGNhbGNfZWNjKTsKKwlwcl9kZWJ1ZygiczNjMjQxMF9uYW5kX2NvcnJlY3RfZGF0YSglcCwlcCwlcCwlcClcbiIsIG10ZCwgZGF0LCByZWFkX2VjYywgY2FsY19lY2MpOwogCiAJcHJfZGVidWcoImVjY3M6IHJlYWQgJTAyeCwlMDJ4LCUwMnggdnMgY2FsYyAlMDJ4LCUwMngsJTAyeFxuIiwKLQkJIHJlYWRfZWNjWzBdLCByZWFkX2VjY1sxXSwgcmVhZF9lY2NbMl0sCi0JCSBjYWxjX2VjY1swXSwgY2FsY19lY2NbMV0sIGNhbGNfZWNjWzJdKTsKKwkJIHJlYWRfZWNjWzBdLCByZWFkX2VjY1sxXSwgcmVhZF9lY2NbMl0sIGNhbGNfZWNjWzBdLCBjYWxjX2VjY1sxXSwgY2FsY19lY2NbMl0pOwogCi0JaWYgKHJlYWRfZWNjWzBdID09IGNhbGNfZWNjWzBdICYmCi0JICAgIHJlYWRfZWNjWzFdID09IGNhbGNfZWNjWzFdICYmCi0JICAgIHJlYWRfZWNjWzJdID09IGNhbGNfZWNjWzJdKQorCWlmIChyZWFkX2VjY1swXSA9PSBjYWxjX2VjY1swXSAmJiByZWFkX2VjY1sxXSA9PSBjYWxjX2VjY1sxXSAmJiByZWFkX2VjY1syXSA9PSBjYWxjX2VjY1syXSkKIAkJcmV0dXJuIDA7CiAKIAkvKiB3ZSBjdXJlbnRseSBoYXZlIG5vIG1ldGhvZCBmb3IgY29ycmVjdGluZyB0aGUgZXJyb3IgKi8KQEAgLTM3OCw4ICszNTksNyBAQAogCXdyaXRlbChjdHJsIHwgUzNDMjQ0MF9ORkNPTlRfSU5JVEVDQywgaW5mby0+cmVncyArIFMzQzI0NDBfTkZDT05UKTsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwX25hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCQkgICAgICBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQogewogCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHMzYzI0MTBfbmFuZF9tdGRfdG9pbmZvKG10ZCk7CiAKQEAgLTM4NywxNSArMzY3LDEyIEBACiAJZWNjX2NvZGVbMV0gPSByZWFkYihpbmZvLT5yZWdzICsgUzNDMjQxMF9ORkVDQyArIDEpOwogCWVjY19jb2RlWzJdID0gcmVhZGIoaW5mby0+cmVncyArIFMzQzI0MTBfTkZFQ0MgKyAyKTsKIAotCXByX2RlYnVnKCJjYWxjdWxhdGVfZWNjOiByZXR1cm5pbmcgZWNjICUwMngsJTAyeCwlMDJ4XG4iLAotCQkgZWNjX2NvZGVbMF0sIGVjY19jb2RlWzFdLCBlY2NfY29kZVsyXSk7CisJcHJfZGVidWcoImNhbGN1bGF0ZV9lY2M6IHJldHVybmluZyBlY2MgJTAyeCwlMDJ4LCUwMnhcbiIsIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOwogCiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBzM2MyNDQwX25hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCQkgICAgICBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKK3N0YXRpYyBpbnQgczNjMjQ0MF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQogewogCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHMzYzI0MTBfbmFuZF9tdGRfdG9pbmZvKG10ZCk7CiAJdW5zaWduZWQgbG9uZyBlY2MgPSByZWFkbChpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORk1FQ0MwKTsKQEAgLTQwNCwxMyArMzgxLDExIEBACiAJZWNjX2NvZGVbMV0gPSBlY2MgPj4gODsKIAllY2NfY29kZVsyXSA9IGVjYyA+PiAxNjsKIAotCXByX2RlYnVnKCJjYWxjdWxhdGVfZWNjOiByZXR1cm5pbmcgZWNjICUwMngsJTAyeCwlMDJ4XG4iLAotCQkgZWNjX2NvZGVbMF0sIGVjY19jb2RlWzFdLCBlY2NfY29kZVsyXSk7CisJcHJfZGVidWcoImNhbGN1bGF0ZV9lY2M6IHJldHVybmluZyBlY2MgJTAyeCwlMDJ4LCUwMnhcbiIsIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOwogCiAJcmV0dXJuIDA7CiB9CiAKLQogLyogb3Zlci1yaWRlIHRoZSBzdGFuZGFyZCBmdW5jdGlvbnMgZm9yIGEgbGl0dGxlIG1vcmUgc3BlZWQuIFdlIGNhbgogICogdXNlIHJlYWQvd3JpdGUgYmxvY2sgdG8gbW92ZSB0aGUgZGF0YSBidWZmZXJzIHRvL2Zyb20gdGhlIGNvbnRyb2xsZXIKICovCkBAIC00MjEsOCArMzk2LDcgQEAKIAlyZWFkc2IodGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfbmFuZF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkJICAgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBzM2MyNDEwX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXdyaXRlc2IodGhpcy0+SU9fQUREUl9XLCBidWYsIGxlbik7CkBAIC00NTksNyArNDMzLDggQEAKIAkvKiBmcmVlIHRoZSBjb21tb24gcmVzb3VyY2VzICovCiAKIAlpZiAoaW5mby0+Y2xrICE9IE5VTEwgJiYgIUlTX0VSUihpbmZvLT5jbGspKSB7Ci0JCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CisJCWlmICghYWxsb3dfY2xrX3N0b3AoaW5mbykpCisJCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOwogCQljbGtfcHV0KGluZm8tPmNsayk7CiAJfQogCkBAIC00ODgsOSArNDYzLDcgQEAKIAkJcmV0dXJuIGFkZF9tdGRfZGV2aWNlKCZtdGQtPm10ZCk7CiAKIAlpZiAoc2V0LT5ucl9wYXJ0aXRpb25zID4gMCAmJiBzZXQtPnBhcnRpdGlvbnMgIT0gTlVMTCkgewotCQlyZXR1cm4gYWRkX210ZF9wYXJ0aXRpb25zKCZtdGQtPm10ZCwKLQkJCQkJICBzZXQtPnBhcnRpdGlvbnMsCi0JCQkJCSAgc2V0LT5ucl9wYXJ0aXRpb25zKTsKKwkJcmV0dXJuIGFkZF9tdGRfcGFydGl0aW9ucygmbXRkLT5tdGQsIHNldC0+cGFydGl0aW9ucywgc2V0LT5ucl9wYXJ0aXRpb25zKTsKIAl9CiAKIAlyZXR1cm4gYWRkX210ZF9kZXZpY2UoJm10ZC0+bXRkKTsKQEAgLTUxNyw3ICs0OTAsNyBAQAogCiAJY2hpcC0+SU9fQUREUl9SCSAgID0gaW5mby0+cmVncyArIFMzQzI0MTBfTkZEQVRBOwogCWNoaXAtPklPX0FERFJfVyAgICA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GREFUQTsKLQljaGlwLT5od2NvbnRyb2wgICAgPSBzM2MyNDEwX25hbmRfaHdjb250cm9sOworCWNoaXAtPmNtZF9jdHJsICAgICA9IHMzYzI0MTBfbmFuZF9od2NvbnRyb2w7CiAJY2hpcC0+ZGV2X3JlYWR5ICAgID0gczNjMjQxMF9uYW5kX2RldnJlYWR5OwogCWNoaXAtPndyaXRlX2J1ZiAgICA9IHMzYzI0MTBfbmFuZF93cml0ZV9idWY7CiAJY2hpcC0+cmVhZF9idWYgICAgID0gczNjMjQxMF9uYW5kX3JlYWRfYnVmOwpAQCAtNTMwLDI2ICs1MDMsMjkgQEAKIAlpZiAoaW5mby0+aXNfczNjMjQ0MCkgewogCQljaGlwLT5JT19BRERSX1IJID0gaW5mby0+cmVncyArIFMzQzI0NDBfTkZEQVRBOwogCQljaGlwLT5JT19BRERSX1cgID0gaW5mby0+cmVncyArIFMzQzI0NDBfTkZEQVRBOwotCQljaGlwLT5od2NvbnRyb2wgID0gczNjMjQ0MF9uYW5kX2h3Y29udHJvbDsKKwkJY2hpcC0+Y21kX2N0cmwgICA9IHMzYzI0NDBfbmFuZF9od2NvbnRyb2w7CiAJfQogCiAJbm10ZC0+aW5mbwkgICA9IGluZm87CiAJbm10ZC0+bXRkLnByaXYJICAgPSBjaGlwOworCW5tdGQtPm10ZC5vd25lciAgICA9IFRISVNfTU9EVUxFOwogCW5tdGQtPnNldAkgICA9IHNldDsKIAogCWlmIChoYXJkd2FyZV9lY2MpIHsKLQkJY2hpcC0+Y29ycmVjdF9kYXRhICA9IHMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGE7Ci0JCWNoaXAtPmVuYWJsZV9od2VjYyAgPSBzM2MyNDEwX25hbmRfZW5hYmxlX2h3ZWNjOwotCQljaGlwLT5jYWxjdWxhdGVfZWNjID0gczNjMjQxMF9uYW5kX2NhbGN1bGF0ZV9lY2M7Ci0JCWNoaXAtPmVjY21vZGUJICAgID0gTkFORF9FQ0NfSFczXzUxMjsKLQkJY2hpcC0+YXV0b29vYiAgICAgICA9ICZuYW5kX2h3X2VjY29vYjsKKwkJY2hpcC0+ZWNjLmNvcnJlY3QgICA9IHMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGE7CisJCWNoaXAtPmVjYy5od2N0bAkgICAgPSBzM2MyNDEwX25hbmRfZW5hYmxlX2h3ZWNjOworCQljaGlwLT5lY2MuY2FsY3VsYXRlID0gczNjMjQxMF9uYW5kX2NhbGN1bGF0ZV9lY2M7CisJCWNoaXAtPmVjYy5tb2RlCSAgICA9IE5BTkRfRUNDX0hXOworCQljaGlwLT5lY2Muc2l6ZQkgICAgPSA1MTI7CisJCWNoaXAtPmVjYy5ieXRlcwkgICAgPSAzOworCQljaGlwLT5lY2MubGF5b3V0ICAgID0gJm5hbmRfaHdfZWNjb29iOwogCiAJCWlmIChpbmZvLT5pc19zM2MyNDQwKSB7Ci0JCQljaGlwLT5lbmFibGVfaHdlY2MgID0gczNjMjQ0MF9uYW5kX2VuYWJsZV9od2VjYzsKLQkJCWNoaXAtPmNhbGN1bGF0ZV9lY2MgPSBzM2MyNDQwX25hbmRfY2FsY3VsYXRlX2VjYzsKKwkJCWNoaXAtPmVjYy5od2N0bCAgICAgPSBzM2MyNDQwX25hbmRfZW5hYmxlX2h3ZWNjOworCQkJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IHMzYzI0NDBfbmFuZF9jYWxjdWxhdGVfZWNjOwogCQl9CiAJfSBlbHNlIHsKLQkJY2hpcC0+ZWNjbW9kZQkgICAgPSBOQU5EX0VDQ19TT0ZUOworCQljaGlwLT5lY2MubW9kZQkgICAgPSBOQU5EX0VDQ19TT0ZUOwogCX0KIH0KIApAQCAtNjU0LDEzICs2MzAsMTEgQEAKIAlubXRkID0gaW5mby0+bXRkczsKIAogCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8IG5yX3NldHM7IHNldG5vKyssIG5tdGQrKykgewotCQlwcl9kZWJ1ZygiaW5pdGlhbGlzaW5nIHNldCAlZCAoJXAsIGluZm8gJXApXG4iLAotCQkJIHNldG5vLCBubXRkLCBpbmZvKTsKKwkJcHJfZGVidWcoImluaXRpYWxpc2luZyBzZXQgJWQgKCVwLCBpbmZvICVwKVxuIiwgc2V0bm8sIG5tdGQsIGluZm8pOwogCiAJCXMzYzI0MTBfbmFuZF9pbml0X2NoaXAoaW5mbywgbm10ZCwgc2V0cyk7CiAKLQkJbm10ZC0+c2Nhbl9yZXMgPSBuYW5kX3NjYW4oJm5tdGQtPm10ZCwKLQkJCQkJICAgKHNldHMpID8gc2V0cy0+bnJfY2hpcHMgOiAxKTsKKwkJbm10ZC0+c2Nhbl9yZXMgPSBuYW5kX3NjYW4oJm5tdGQtPm10ZCwgKHNldHMpID8gc2V0cy0+bnJfY2hpcHMgOiAxKTsKIAogCQlpZiAobm10ZC0+c2Nhbl9yZXMgPT0gMCkgewogCQkJczNjMjQxMF9uYW5kX2FkZF9wYXJ0aXRpb24oaW5mbywgbm10ZCwgc2V0cyk7CkBAIC02NzAsNiArNjQ0LDExIEBACiAJCQlzZXRzKys7CiAJfQogCisJaWYgKGFsbG93X2Nsa19zdG9wKGluZm8pKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJjbG9jayBpZGxlIHN1cHBvcnQgZW5hYmxlZFxuIik7CisJCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CisJfQorCiAJcHJfZGVidWcoImluaXRpYWxpc2VkIG9rXG4iKTsKIAlyZXR1cm4gMDsKIApAQCAtNjgxLDYgKzY2MCw0MSBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qIFBNIFN1cHBvcnQgKi8KKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBzM2MyNHh4X25hbmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBwbSkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGluZm8pIHsKKwkJaWYgKCFhbGxvd19jbGtfc3RvcChpbmZvKSkKKwkJCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjMjR4eF9uYW5kX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCWNsa19lbmFibGUoaW5mby0+Y2xrKTsKKwkJczNjMjQxMF9uYW5kX2luaXRodyhpbmZvLCBkZXYpOworCisJCWlmIChhbGxvd19jbGtfc3RvcChpbmZvKSkKKwkJCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0eHhfbmFuZF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjMjR4eF9uYW5kX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogLyogZHJpdmVyIGRldmljZSByZWdpc3RyYXRpb24gKi8KIAogc3RhdGljIGludCBzM2MyNDEwX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpAQCAtNjk2LDYgKzcxMCw4IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX25hbmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNDEwX25hbmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNDEwX25hbmRfcmVtb3ZlLAorCS5zdXNwZW5kCT0gczNjMjR4eF9uYW5kX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNHh4X25hbmRfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzM2MyNDEwLW5hbmQiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKQEAgLTcwNSw2ICs3MjEsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQ0MF9uYW5kX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjQ0MF9uYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMF9uYW5kX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHMzYzI0eHhfbmFuZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9uYW5kX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiczNjMjQ0MC1uYW5kIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYyBiL2RyaXZlcnMvbXRkL25hbmQvc2hhcnBzbC5jCmluZGV4IDE5MjRhNGYuLjIxNzQzNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hhcnBzbC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc2hhcnBzbC5jCkBAIC00Niw3ICs0Niw2IEBACiAjZGVmaW5lIEZMQ0xFCQkoMSA8PCAxKQogI2RlZmluZSBGTENFMAkJKDEgPDwgMCkKIAotCiAvKgogICogTVREIHN0cnVjdHVyZSBmb3IgU2hhcnBTTAogICovCkBAIC02MCw1MCArNTksNDQgQEAKIHN0YXRpYyBpbnQgbnJfcGFydGl0aW9uczsKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzaGFycHNsX25hbmRfZGVmYXVsdF9wYXJ0aXRpb25faW5mb1tdID0gewogCXsKLQkubmFtZSA9ICJTeXN0ZW0gQXJlYSIsCi0JLm9mZnNldCA9IDAsCi0JLnNpemUgPSA3ICogMTAyNCAqIDEwMjQsCi0JfSwKKwkgLm5hbWUgPSAiU3lzdGVtIEFyZWEiLAorCSAub2Zmc2V0ID0gMCwKKwkgLnNpemUgPSA3ICogMTAyNCAqIDEwMjQsCisJIH0sCiAJewotCS5uYW1lID0gIlJvb3QgRmlsZXN5c3RlbSIsCi0JLm9mZnNldCA9IDcgKiAxMDI0ICogMTAyNCwKLQkuc2l6ZSA9IDMwICogMTAyNCAqIDEwMjQsCi0JfSwKKwkgLm5hbWUgPSAiUm9vdCBGaWxlc3lzdGVtIiwKKwkgLm9mZnNldCA9IDcgKiAxMDI0ICogMTAyNCwKKwkgLnNpemUgPSAzMCAqIDEwMjQgKiAxMDI0LAorCSB9LAogCXsKLQkubmFtZSA9ICJIb21lIEZpbGVzeXN0ZW0iLAotCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQgLAotCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCAsCi0JfSwKKwkgLm5hbWUgPSAiSG9tZSBGaWxlc3lzdGVtIiwKKwkgLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCSB9LAogfTsKIAogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgljdHJsOgorICoJTkFORF9DTkU6IGJpdCAwIC0+IGJpdCAwICYgNAorICoJTkFORF9DTEU6IGJpdCAxIC0+IGJpdCAxCisgKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDIKKyAqCiAgKi8KLXN0YXRpYyB2b2lkCi1zaGFycHNsX25hbmRfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyogbXRkLCBpbnQgY21kKQorc3RhdGljIHZvaWQgc2hhcnBzbF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpIHwgRkxDTEUsIEZMQVNIQ1RMKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0JCXdyaXRlYihyZWFkYihGTEFTSENUTCkgJiB+RkxDTEUsIEZMQVNIQ1RMKTsKLQkJYnJlYWs7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpIHwgRkxBTEUsIEZMQVNIQ1RMKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0JCXdyaXRlYihyZWFkYihGTEFTSENUTCkgJiB+RkxBTEUsIEZMQVNIQ1RMKTsKLQkJYnJlYWs7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGNoYXIgYml0cyA9IGN0cmwgJiAweDA3OwogCi0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JCXdyaXRlYihyZWFkYihGTEFTSENUTCkgJiB+KEZMQ0UwfEZMQ0UxKSwgRkxBU0hDVEwpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJd3JpdGViKHJlYWRiKEZMQVNIQ1RMKSB8IChGTENFMHxGTENFMSksIEZMQVNIQ1RMKTsKLQkJYnJlYWs7CisJCWJpdHMgfD0gKGN0cmwgJiAweDAxKSA8PCA0OworCQl3cml0ZWIoKHJlYWRiKEZMQVNIQ1RMKSAmIDB4MTcpIHwgYml0cywgRkxBU0hDVEwpOwogCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAogc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYsIDB4ZmYgfTsKQEAgLTEyMiwzMSArMTE1LDI2IEBACiAJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIGFraXRhX29vYmluZm8gPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgYWtpdGFfb29iaW5mbyA9IHsKIAkuZWNjYnl0ZXMgPSAyNCwKIAkuZWNjcG9zID0gewotCQkweDUsICAweDEsICAweDIsICAweDMsICAweDYsICAweDcsICAweDE1LCAweDExLAotCQkweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAotCQkweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3fSwKLQkub29iZnJlZSA9IHsgezB4MDgsIDB4MDl9IH0KKwkJICAgMHg1LCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywgMHgxNSwgMHgxMSwKKwkJICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKKwkJICAgMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzN30sCisJLm9vYmZyZWUgPSB7ezB4MDgsIDB4MDl9fQogfTsKIAotc3RhdGljIGludAotc2hhcnBzbF9uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8qIG10ZCkKK3N0YXRpYyBpbnQgc2hhcnBzbF9uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlyZXR1cm4gISgocmVhZGIoRkxBU0hDVEwpICYgRkxSWUJZKSA9PSAwKTsKIH0KIAotc3RhdGljIHZvaWQKLXNoYXJwc2xfbmFuZF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvKiBtdGQsIGludCBtb2RlKQorc3RhdGljIHZvaWQgc2hhcnBzbF9uYW5kX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCiB7Ci0Jd3JpdGViKDAgLEVDQ0NMUlIpOworCXdyaXRlYigwLCBFQ0NDTFJSKTsKIH0KIAotc3RhdGljIGludAotc2hhcnBzbF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvKiBtdGQsIGNvbnN0IHVfY2hhciogZGF0LAotCQkJCXVfY2hhciogZWNjX2NvZGUpCitzdGF0aWMgaW50IHNoYXJwc2xfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKiBkYXQsIHVfY2hhciAqIGVjY19jb2RlKQogewogCWVjY19jb2RlWzBdID0gfnJlYWRiKEVDQ0xQVUIpOwogCWVjY19jb2RlWzFdID0gfnJlYWRiKEVDQ0xQTEIpOwpAQCAtMTU0LDQ3ICsxNDIsNDQgQEAKIAlyZXR1cm4gcmVhZGIoRUNDQ05UUikgIT0gMDsKIH0KIAotCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAjZW5kaWYKIAotCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQKLXNoYXJwc2xfbmFuZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzaGFycHNsX25hbmRfaW5pdCh2b2lkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24qIHNoYXJwc2xfcGFydGl0aW9uX2luZm87CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnNoYXJwc2xfcGFydGl0aW9uX2luZm87CiAJaW50IGVyciA9IDA7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQlzaGFycHNsX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkJR0ZQX0tFUk5FTCk7CisJc2hhcnBzbF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNoYXJwc2xfbXRkKSB7Ci0JCXByaW50ayAoIlVuYWJsZSB0byBhbGxvY2F0ZSBTaGFycFNMIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgU2hhcnBTTCBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIG1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KIAlzaGFycHNsX2lvX2Jhc2UgPSBpb3JlbWFwKHNoYXJwc2xfcGh5c19iYXNlLCAweDEwMDApOwotCWlmKCFzaGFycHNsX2lvX2Jhc2UpeworCWlmICghc2hhcnBzbF9pb19iYXNlKSB7CiAJCXByaW50aygiaW9yZW1hcCB0byBhY2Nlc3MgU2hhcnAgU0wgTkFORCBjaGlwIGZhaWxlZFxuIik7CiAJCWtmcmVlKHNoYXJwc2xfbXRkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmc2hhcnBzbF9tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmc2hhcnBzbF9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIHNoYXJwc2xfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHNoYXJwc2xfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCXNoYXJwc2xfbXRkLT5wcml2ID0gdGhpczsKKwlzaGFycHNsX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogUFhBIGluaXRpYWxpemUKQEAgLTIwNSwyMyArMTkwLDI1IEBACiAJdGhpcy0+SU9fQUREUl9SID0gRkxBU0hJTzsKIAl0aGlzLT5JT19BRERSX1cgPSBGTEFTSElPOwogCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQl0aGlzLT5od2NvbnRyb2wgPSBzaGFycHNsX25hbmRfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gc2hhcnBzbF9uYW5kX2h3Y29udHJvbDsKIAl0aGlzLT5kZXZfcmVhZHkgPSBzaGFycHNsX25hbmRfZGV2X3JlYWR5OwogCS8qIDE1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSAxNTsKIAkvKiBzZXQgZWNjbW9kZSB1c2luZyBoYXJkd2FyZSBFQ0MgKi8KLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfSFczXzI1NjsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCXRoaXMtPmVjYy5zaXplID0gMjU2OworCXRoaXMtPmVjYy5ieXRlcyA9IDM7CiAJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2JidDsKIAlpZiAobWFjaGluZV9pc19ha2l0YSgpIHx8IG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKIAkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKLQkJdGhpcy0+YXV0b29vYiA9ICZha2l0YV9vb2JpbmZvOworCQl0aGlzLT5lY2MubGF5b3V0ID0gJmFraXRhX29vYmluZm87CiAJfQotCXRoaXMtPmVuYWJsZV9od2VjYyA9IHNoYXJwc2xfbmFuZF9lbmFibGVfaHdlY2M7Ci0JdGhpcy0+Y2FsY3VsYXRlX2VjYyA9IHNoYXJwc2xfbmFuZF9jYWxjdWxhdGVfZWNjOwotCXRoaXMtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOworCXRoaXMtPmVjYy5od2N0bCA9IHNoYXJwc2xfbmFuZF9lbmFibGVfaHdlY2M7CisJdGhpcy0+ZWNjLmNhbGN1bGF0ZSA9IHNoYXJwc2xfbmFuZF9jYWxjdWxhdGVfZWNjOworCXRoaXMtPmVjYy5jb3JyZWN0ID0gbmFuZF9jb3JyZWN0X2RhdGE7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQllcnI9bmFuZF9zY2FuKHNoYXJwc2xfbXRkLDEpOworCWVyciA9IG5hbmRfc2NhbihzaGFycHNsX210ZCwgMSk7CiAJaWYgKGVycikgewogCQlpb3VubWFwKHNoYXJwc2xfaW9fYmFzZSk7CiAJCWtmcmVlKHNoYXJwc2xfbXRkKTsKQEAgLTIzMCwyNCArMjE3LDIzIEBACiAKIAkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwogCXNoYXJwc2xfbXRkLT5uYW1lID0gInNoYXJwc2wtbmFuZCI7Ci0JbnJfcGFydGl0aW9ucyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKHNoYXJwc2xfbXRkLCBwYXJ0X3Byb2JlcywKLQkJCQkJCSZzaGFycHNsX3BhcnRpdGlvbl9pbmZvLCAwKTsKKwlucl9wYXJ0aXRpb25zID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoc2hhcnBzbF9tdGQsIHBhcnRfcHJvYmVzLCAmc2hhcnBzbF9wYXJ0aXRpb25faW5mbywgMCk7CiAKIAlpZiAobnJfcGFydGl0aW9ucyA8PSAwKSB7CiAJCW5yX3BhcnRpdGlvbnMgPSBERUZBVUxUX05VTV9QQVJUSVRJT05TOwogCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvID0gc2hhcnBzbF9uYW5kX2RlZmF1bHRfcGFydGl0aW9uX2luZm87CiAJCWlmIChtYWNoaW5lX2lzX3Bvb2RsZSgpKSB7Ci0JCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemU9MzAgKiAxMDI0ICogMTAyNDsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZSA9IDIyICogMTAyNCAqIDEwMjQ7CiAJCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb3JnaSgpIHx8IG1hY2hpbmVfaXNfc2hlcGhlcmQoKSkgewotCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTI1ICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSAyNSAqIDEwMjQgKiAxMDI0OwogCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfaHVza3koKSkgewotCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTUzICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSA1MyAqIDEwMjQgKiAxMDI0OwogCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfc3BpdHooKSkgewotCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTUgKiAxMDI0ICogMTAyNDsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZSA9IDUgKiAxMDI0ICogMTAyNDsKIAkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2FraXRhKCkpIHsKLQkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT01OCAqIDEwMjQgKiAxMDI0OworCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplID0gNTggKiAxMDI0ICogMTAyNDsKIAkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2JvcnpvaSgpKSB7Ci0JCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemU9MzIgKiAxMDI0ICogMTAyNDsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAJCX0KIAl9CiAKQEAgLTI2MSwxNSArMjQ3LDE1IEBACiAJLyogUmV0dXJuIGhhcHB5ICovCiAJcmV0dXJuIDA7CiB9CisKIG1vZHVsZV9pbml0KHNoYXJwc2xfbmFuZF9pbml0KTsKIAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotI2lmZGVmIE1PRFVMRQogc3RhdGljIHZvaWQgX19leGl0IHNoYXJwc2xfbmFuZF9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICZzaGFycHNsX210ZFsxXTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikmc2hhcnBzbF9tdGRbMV07CiAKIAkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KIAluYW5kX3JlbGVhc2Uoc2hhcnBzbF9tdGQpOwpAQCAtMjc5LDggKzI2NSw4IEBACiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAlrZnJlZShzaGFycHNsX210ZCk7CiB9CisKIG1vZHVsZV9leGl0KHNoYXJwc2xfbmFuZF9jbGVhbnVwKTsKLSNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NwaWEuYyBiL2RyaXZlcnMvbXRkL25hbmQvc3BpYS5jCmluZGV4IDljZjFjZTcuLjFmNmQ0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc3BpYS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc3BpYS5jCkBAIC0zOSwxNiArMzksMTYgQEAKICAqLwogI2RlZmluZSBTUElBX0lPX0JBU0UJMHhkMDAwMDAwMAkvKiBTdGFydCBvZiBFUDcyMTIgSU8gYWRkcmVzcyBzcGFjZSAqLwogI2RlZmluZSBTUElBX0ZJT19CQVNFCTB4ZjAwMDAwMDAJLyogQWRkcmVzcyB3aGVyZSBmbGFzaCBpcyBtYXBwZWQgKi8KLSNkZWZpbmUgU1BJQV9QRURSCTB4MDA4MAkJLyoKLQkJCQkJICogSU8gb2Zmc2V0IHRvIFBvcnQgRSBkYXRhIHJlZ2lzdGVyCi0JCQkJCSAqIHdoZXJlIHRoZSBDTEUsIEFMRSBhbmQgTkNFIHBpbnMKLQkJCQkJICogYXJlIHdpcmVkIHRvLgotCQkJCQkgKi8KLSNkZWZpbmUgU1BJQV9QRUREUgkweDAwYzAJCS8qCi0JCQkJCSAqIElPIG9mZnNldCB0byBQb3J0IEUgZGF0YSBkaXJlY3Rpb24KLQkJCQkJICogcmVnaXN0ZXIgc28gd2UgY2FuIGNvbnRyb2wgdGhlIElPCi0JCQkJCSAqIGxpbmVzLgotCQkJCQkgKi8KKyNkZWZpbmUgU1BJQV9QRURSCTB4MDA4MAkvKgorCQkJCSAqIElPIG9mZnNldCB0byBQb3J0IEUgZGF0YSByZWdpc3RlcgorCQkJCSAqIHdoZXJlIHRoZSBDTEUsIEFMRSBhbmQgTkNFIHBpbnMKKwkJCQkgKiBhcmUgd2lyZWQgdG8uCisJCQkJICovCisjZGVmaW5lIFNQSUFfUEVERFIJMHgwMGMwCS8qCisJCQkJICogSU8gb2Zmc2V0IHRvIFBvcnQgRSBkYXRhIGRpcmVjdGlvbgorCQkJCSAqIHJlZ2lzdGVyIHNvIHdlIGNhbiBjb250cm9sIHRoZSBJTworCQkJCSAqIGxpbmVzLgorCQkJCSAqLwogCiAvKgogICogTW9kdWxlIHN0dWZmCkBAIC02OSw3OSArNjksODQgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7CiAJewotCQkubmFtZQk9ICJTUElBIGZsYXNoIHBhcnRpdGlvbiAxIiwKLQkJLm9mZnNldAk9IDAsCi0JCS5zaXplCT0gMioxMDI0KjEwMjQKLQl9LAorCSAubmFtZSA9ICJTUElBIGZsYXNoIHBhcnRpdGlvbiAxIiwKKwkgLm9mZnNldCA9IDAsCisJIC5zaXplID0gMiAqIDEwMjQgKiAxMDI0fSwKIAl7Ci0JCS5uYW1lCT0gIlNQSUEgZmxhc2ggcGFydGl0aW9uIDIiLAotCQkub2Zmc2V0CT0gMioxMDI0KjEwMjQsCi0JCS5zaXplCT0gNioxMDI0KjEwMjQKLQl9CisJIC5uYW1lID0gIlNQSUEgZmxhc2ggcGFydGl0aW9uIDIiLAorCSAub2Zmc2V0ID0gMiAqIDEwMjQgKiAxMDI0LAorCSAuc2l6ZSA9IDYgKiAxMDI0ICogMTAyNH0KIH07Ci0jZGVmaW5lIE5VTV9QQVJUSVRJT05TIDIKIAorI2RlZmluZSBOVU1fUEFSVElUSU9OUyAyCiAKIC8qCiAgKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcwotKi8KLXN0YXRpYyB2b2lkIHNwaWFfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKXsKKyAqCisgKgljdHJsOgorICoJTkFORF9DTkU6IGJpdCAwIC0+IGJpdCAyCisgKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDAKKyAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgMQorICovCitzdGF0aWMgdm9pZCBzcGlhX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0gICAgc3dpdGNoKGNtZCl7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXZvaWQgX19pb21lbSAqYWRkciA9IHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkcjsKKwkJdW5zaWduZWQgY2hhciBiaXRzOwogCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkcikpIHw9ICAweDAxOyBicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkNMRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoc3BpYV9pb19iYXNlICsgc3BpYV9wZWRyKSkgJj0gfjB4MDE7IGJyZWFrOworCQliaXRzID0gKGN0cmwgJiBOQU5EX0NORSkgPDwgMjsKKwkJYml0cyB8PSAoY3RybCAmIE5BTkRfQ0xFIHwgTkFORF9BTEUpID4+IDE7CisJCXdyaXRlYigocmVhZGIoYWRkcikgJiB+MHg3KSB8IGJpdHMsIGFkZHIpOworCX0KIAotCWNhc2UgTkFORF9DVExfU0VUQUxFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSB8PSAgMHgwMjsgYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkcikpICY9IH4weDAyOyBicmVhazsKLQotCWNhc2UgTkFORF9DVExfU0VUTkNFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSAmPSB+MHgwNDsgYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkcikpIHw9ICAweDA0OyBicmVhazsKLSAgICB9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQgc3BpYV9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc3BpYV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCXNwaWFfbXRkID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCXNwaWFfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcGlhX210ZCkgewotCQlwcmludGsgKCJVbmFibGUgdG8gYWxsb2NhdGUgU1BJQSBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIFNQSUEgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgKCZzcGlhX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZzcGlhX210ZFsxXSk7CiAKIAkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQoKGNoYXIgKikgc3BpYV9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQoKGNoYXIgKikgdGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKwltZW1zZXQoc3BpYV9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJc3BpYV9tdGQtPnByaXYgPSB0aGlzOworCXNwaWFfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyoKIAkgKiBTZXQgR1BJTyBQb3J0IEUgY29udHJvbCByZWdpc3RlciBzbyB0aGF0IHRoZSBwaW5zIGFyZSBjb25maWd1cmVkCiAJICogdG8gYmUgb3V0cHV0cyBmb3IgY29udHJvbGxpbmcgdGhlIE5BTkQgZmxhc2guCiAJICovCi0JKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoc3BpYV9pb19iYXNlICsgc3BpYV9wZWRkcikpID0gMHgwNzsKKwkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkZHIpKSA9IDB4MDc7CiAKIAkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCi0JdGhpcy0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqKSBzcGlhX2Zpb19iYXNlOwotCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikgc3BpYV9maW9fYmFzZTsKKwl0aGlzLT5JT19BRERSX1IgPSAodm9pZCBfX2lvbWVtICopc3BpYV9maW9fYmFzZTsKKwl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopc3BpYV9maW9fYmFzZTsKIAkvKiBTZXQgYWRkcmVzcyBvZiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uICovCi0JdGhpcy0+aHdjb250cm9sID0gc3BpYV9od2NvbnRyb2w7CisJdGhpcy0+Y21kX2N0cmwgPSBzcGlhX2h3Y29udHJvbDsKIAkvKiAxNSB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMTU7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuIChzcGlhX210ZCwgMSkpIHsKLQkJa2ZyZWUgKHNwaWFfbXRkKTsKKwlpZiAobmFuZF9zY2FuKHNwaWFfbXRkLCAxKSkgeworCQlrZnJlZShzcGlhX210ZCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCkBAIC0xNTEsMjIgKzE1NiwyMiBAQAogCS8qIFJldHVybiBoYXBweSAqLwogCXJldHVybiAwOwogfQorCiBtb2R1bGVfaW5pdChzcGlhX2luaXQpOwogCiAvKgogICogQ2xlYW4gdXAgcm91dGluZQogICovCi0jaWZkZWYgTU9EVUxFCi1zdGF0aWMgdm9pZCBfX2V4aXQgc3BpYV9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNwaWFfY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAoc3BpYV9tdGQpOworCW5hbmRfcmVsZWFzZShzcGlhX210ZCk7CiAKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwotCWtmcmVlIChzcGlhX210ZCk7CisJa2ZyZWUoc3BpYV9tdGQpOwogfQorCiBtb2R1bGVfZXhpdChzcGlhX2NsZWFudXApOwotI2VuZGlmCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYyBiL2RyaXZlcnMvbXRkL25hbmQvdG90by5jCmluZGV4IDc2MDljNDMuLmY5ZTJkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvdG90by5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvdG90by5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gtb21hcDE1MTAvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKKyNkZWZpbmUgQ09ORklHX05BTkRfV09SS0FST1VORCAxCisKIC8qCiAgKiBNVEQgc3RydWN0dXJlIGZvciBUT1RPIGJvYXJkCiAgKi8KQEAgLTM5LDI1ICs0MSw2IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRvdG9faW9fYmFzZSA9IE9NQVBfRkxBU0hfMV9CQVNFOwogCi0jZGVmaW5lIENPTkZJR19OQU5EX1dPUktBUk9VTkQgMQotCi0jZGVmaW5lIE5BTkRfTkNFIDB4NDAwMAotI2RlZmluZSBOQU5EX0NMRSAweDEwMDAKLSNkZWZpbmUgTkFORF9BTEUgMHgwMDAyCi0jZGVmaW5lIE5BTkRfTUFTSyAoTkFORF9DTEUgfCBOQU5EX0FMRSB8IE5BTkRfTkNFKQotCi0jZGVmaW5lIFRfTkFORF9DVExfQ0xSQUxFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9BTEUsIDApCi0jZGVmaW5lIFRfTkFORF9DVExfU0VUQUxFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9BTEUsIE5BTkRfQUxFKQotI2lmZGVmIENPTkZJR19OQU5EX1dPUktBUk9VTkQgICAgIC8qICJzb21lIiBkZXYgYm9hcmRzIGJ1c3RlZCwgYmx1ZSB3aXJlZCB0byBydHMyIDooICovCi0jZGVmaW5lIFRfTkFORF9DVExfQ0xSQ0xFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9DTEUsIDApOyBydHMyc2V0b3V0KDIsIDIpCi0jZGVmaW5lIFRfTkFORF9DVExfU0VUQ0xFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9DTEUsIE5BTkRfQ0xFKTsgcnRzMnNldG91dCgyLCAwKQotI2Vsc2UKLSNkZWZpbmUgVF9OQU5EX0NUTF9DTFJDTEUoaW9iKSAgZ3Bpb3NldG91dChOQU5EX0NMRSwgMCkKLSNkZWZpbmUgVF9OQU5EX0NUTF9TRVRDTEUoaW9iKSAgZ3Bpb3NldG91dChOQU5EX0NMRSwgTkFORF9DTEUpCi0jZW5kaWYKLSNkZWZpbmUgVF9OQU5EX0NUTF9TRVROQ0UoaW9iKSAgZ3Bpb3NldG91dChOQU5EX05DRSwgMCkKLSNkZWZpbmUgVF9OQU5EX0NUTF9DTFJOQ0UoaW9iKSAgZ3Bpb3NldG91dChOQU5EX05DRSwgTkFORF9OQ0UpCi0KIC8qCiAgKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlcwogICovCkBAIC05MSw5MSArNzQsMTEwIEBACiAKICNkZWZpbmUgTlVNX1BBUlRJVElPTlMzMk0gMwogI2RlZmluZSBOVU1fUEFSVElUSU9OUzY0TSA0CisKIC8qCiAgKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcwotKi8KLQotc3RhdGljIHZvaWQgdG90b19od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCisgKgorICoJY3RybDoKKyAqCU5BTkRfTkNFOiBiaXQgMCAtPiBiaXQgMTQgKDB4NDAwMCkKKyAqCU5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgMTIgKDB4MTAwMCkKKyAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgMSAgKDB4MDAwMikKKyAqLworc3RhdGljIHZvaWQgdG90b19od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JdWRlbGF5KDEpOyAvKiBob3BlZnVsbHkgZW5vdWdoIHRpbWUgZm9yIHRjIG1ha2UgcHJvY2VkaW5nIHdyaXRlIHRvIGNsZWFyICovCi0Jc3dpdGNoKGNtZCl7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGxvbmcgYml0czsKIAotCQljYXNlIE5BTkRfQ1RMX1NFVENMRTogVF9OQU5EX0NUTF9TRVRDTEUoY21kKTsgYnJlYWs7Ci0JCWNhc2UgTkFORF9DVExfQ0xSQ0xFOiBUX05BTkRfQ1RMX0NMUkNMRShjbWQpOyBicmVhazsKKwkJLyogaG9wZWZ1bGx5IGVub3VnaCB0aW1lIGZvciB0YyBtYWtlIHByb2NlZGluZyB3cml0ZSB0byBjbGVhciAqLworCQl1ZGVsYXkoMSk7CiAKLQkJY2FzZSBOQU5EX0NUTF9TRVRBTEU6IFRfTkFORF9DVExfU0VUQUxFKGNtZCk7IGJyZWFrOwotCQljYXNlIE5BTkRfQ1RMX0NMUkFMRTogVF9OQU5EX0NUTF9DTFJBTEUoY21kKTsgYnJlYWs7CisJCWJpdHMgPSAofmN0cmwgJiBOQU5EX05DRSkgPDwgMTQ7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0NMRSkgPDwgMTI7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0FMRSkgPj4gMTsKIAotCQljYXNlIE5BTkRfQ1RMX1NFVE5DRTogVF9OQU5EX0NUTF9TRVROQ0UoY21kKTsgYnJlYWs7Ci0JCWNhc2UgTkFORF9DVExfQ0xSTkNFOiBUX05BTkRfQ1RMX0NMUk5DRShjbWQpOyBicmVhazsKKyN3YXJuaW5nIFdpbGQgZ3Vlc3MgYXMgZ3Bpb3NldG91dCgpIGlzIG5vd2hlcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsIHNvdXJjZSAtIHRnbHgKKwkJZ3Bpb3NldG91dCgweDUwMDIsIGJpdHMpOworCisjaWZkZWYgQ09ORklHX05BTkRfV09SS0FST1VORAorCQkvKiAic29tZSIgZGV2IGJvYXJkcyBidXN0ZWQsIGJsdWUgd2lyZWQgdG8gcnRzMiA6KCAqLworCQlydHMyc2V0b3V0KDIsIChjdHJsICYgTkFORF9DTEUpIDw8IDEpOworI2VuZGlmCisJCS8qIGFsbG93IHRpbWUgdG8gZW5zdXJlIGdwaW8gc3RhdGUgdG8gb3ZlciB0YWtlIG1lbW9yeSB3cml0ZSAqLworCQl1ZGVsYXkoMSk7CiAJfQotCXVkZWxheSgxKTsgLyogYWxsb3cgdGltZSB0byBlbnN1cmUgZ3BpbyBzdGF0ZSB0byBvdmVyIHRha2UgbWVtb3J5IHdyaXRlICovCisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyk7CiB9CiAKIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotaW50IF9faW5pdCB0b3RvX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB0b3RvX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWludCBlcnIgPSAwOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JdG90b19tdGQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZiAoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkJR0ZQX0tFUk5FTCk7CisJdG90b19tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRvdG9fbXRkKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgdG90byBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSB0b3RvIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmdG90b19tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmdG90b19tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIHRvdG9fbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHRvdG9fbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCXRvdG9fbXRkLT5wcml2ID0gdGhpczsKKwl0b3RvX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKi8KIAl0aGlzLT5JT19BRERSX1IgPSB0b3RvX2lvX2Jhc2U7CiAJdGhpcy0+SU9fQUREUl9XID0gdG90b19pb19iYXNlOwotCXRoaXMtPmh3Y29udHJvbCA9IHRvdG9faHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gdG90b19od2NvbnRyb2w7CiAJdGhpcy0+ZGV2X3JlYWR5ID0gTlVMTDsKIAkvKiAyNSB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMzA7Ci0JdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOwogCi0gICAgICAgIC8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKHRvdG9fbXRkLCAxKSkgeworCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4odG90b19tdGQsIDEpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXRfbXRkOwogCX0KIAogCS8qIFJlZ2lzdGVyIHRoZSBwYXJ0aXRpb25zICovCi0Jc3dpdGNoKHRvdG9fbXRkLT5zaXplKXsKLQkJY2FzZSBTWl82NE06IGFkZF9tdGRfcGFydGl0aW9ucyh0b3RvX210ZCwgcGFydGl0aW9uX2luZm82NE0sIE5VTV9QQVJUSVRJT05TNjRNKTsgYnJlYWs7Ci0JCWNhc2UgU1pfMzJNOiBhZGRfbXRkX3BhcnRpdGlvbnModG90b19tdGQsIHBhcnRpdGlvbl9pbmZvMzJNLCBOVU1fUEFSVElUSU9OUzMyTSk7IGJyZWFrOwotCQlkZWZhdWx0OiB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiVW5zdXBwb3J0ZWQgTmFuZCBkZXZpY2VcbiIpOworCXN3aXRjaCAodG90b19tdGQtPnNpemUpIHsKKwljYXNlIFNaXzY0TToKKwkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzY0TSwgTlVNX1BBUlRJVElPTlM2NE0pOworCQlicmVhazsKKwljYXNlIFNaXzMyTToKKwkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzMyTSwgTlVNX1BBUlRJVElPTlMzMk0pOworCQlicmVhazsKKwlkZWZhdWx0OnsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuc3VwcG9ydGVkIE5hbmQgZGV2aWNlXG4iKTsKIAkJCWVyciA9IC1FTlhJTzsKIAkJCWdvdG8gb3V0X2J1ZjsKIAkJfQogCX0KIAotICAgIAlncGlvcmVzZXJ2ZShOQU5EX01BU0spOyAgLyogY2xhaW0gb3VyIGdwaW9zICovCi0gICAgCWFyY2hmbGFzaHdwKDAsMCk7CSAvKiBvcGVuIHVwIGZsYXNoIGZvciB3cml0aW5nICovCisJZ3Bpb3Jlc2VydmUoTkFORF9NQVNLKTsJLyogY2xhaW0gb3VyIGdwaW9zICovCisJYXJjaGZsYXNod3AoMCwgMCk7CS8qIG9wZW4gdXAgZmxhc2ggZm9yIHdyaXRpbmcgKi8KIAogCWdvdG8gb3V0OwogCi1vdXRfYnVmOgotCWtmcmVlICh0aGlzLT5kYXRhX2J1Zik7Ci1vdXRfbXRkOgotCWtmcmVlICh0b3RvX210ZCk7Ci1vdXQ6Cisgb3V0X210ZDoKKwlrZnJlZSh0b3RvX210ZCk7Cisgb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NCwyMCArMTg2LDIxIEBACiAvKgogICogQ2xlYW4gdXAgcm91dGluZQogICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgdG90b19jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHRvdG9fY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAodG90b19tdGQpOworCW5hbmRfcmVsZWFzZSh0b3RvX210ZCk7CiAKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwotCWtmcmVlICh0b3RvX210ZCk7CisJa2ZyZWUodG90b19tdGQpOwogCiAJLyogc3RvcCBmbGFzaCB3cml0ZXMgKi8KLQkgYXJjaGZsYXNod3AoMCwxKTsKKwlhcmNoZmxhc2h3cCgwLCAxKTsKIAogCS8qIHJlbGVhc2UgZ3Bpb3MgdG8gc3lzdGVtICovCi0JIGdwaW9yZWxlYXNlKE5BTkRfTUFTSyk7CisJZ3Bpb3JlbGVhc2UoTkFORF9NQVNLKTsKIH0KKwogbW9kdWxlX2V4aXQodG90b19jbGVhbnVwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC90czcyNTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvdHM3MjUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiNGIxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvdHM3MjUwLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBkcml2ZXJzL210ZC9uYW5kL3RzNzI1MC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRlY2hub2xvZ2ljIFN5c3RlbXMgKHN1cHBvcnRAZW1iZWRkZWRBUk0uY29tKQorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL210ZC9uYW5kL2VkYjczMTIuYworICogICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFyaXVzIEdyw7ZnZXIgKG1hZ0BzeXNnby5kZSkKKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCisgKiAgIENvcHlyaWdodCAoYykgMjAwMSBUaG9tYXMgR2xlaXhuZXIgKGdsZWl4bmVyQGF1dHJvbml4LmRlKQorICoKKyAqICRJZDogdHM3MjUwLmMsdiAxLjQgMjAwNC8xMi8zMCAyMjowMjowNyBqb2ZmIEV4cCAkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBPdmVydmlldzoKKyAqICAgVGhpcyBpcyBhIGRldmljZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGRldmljZSBmb3VuZCBvbiB0aGUKKyAqICAgVFMtNzI1MCBib2FyZCB3aGljaCB1dGlsaXplcyBhIFNhbXN1bmcgMzIgTWJ5dGUgcGFydC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworLyoKKyAqIE1URCBzdHJ1Y3R1cmUgZm9yIFRTNzI1MCBib2FyZAorICovCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICp0czcyNTBfbXRkID0gTlVMTDsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworI2RlZmluZSBOVU1fUEFSVElUSU9OUyAzCisKKy8qCisgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm8zMltdID0geworCXsKKwkJLm5hbWUJCT0gIlRTLUJPT1RST00iLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IDB4MDAwMDQwMDAsCisJfSwgeworCQkubmFtZQkJPSAiTGludXgiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDQwMDAsCisJCS5zaXplCQk9IDB4MDFkMDAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiUmVkQm9vdCIsCisJCS5vZmZzZXQJCT0gMHgwMWQwNDAwMCwKKwkJLnNpemUJCT0gMHgwMDJmYzAwMCwKKwl9LAorfTsKKworLyoKKyAqIERlZmluZSBzdGF0aWMgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mbzEyOFtdID0geworCXsKKwkJLm5hbWUJCT0gIlRTLUJPT1RST00iLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IDB4MDAwMDQwMDAsCisJfSwgeworCQkubmFtZQkJPSAiTGludXgiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDQwMDAsCisJCS5zaXplCQk9IDB4MDdkMDAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiUmVkQm9vdCIsCisJCS5vZmZzZXQJCT0gMHgwN2QwNDAwMCwKKwkJLnNpemUJCT0gMHgwMDJmYzAwMCwKKwl9LAorfTsKKyNlbmRpZgorCisKKy8qCisgKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICoKKyAqCWN0cmw6CisgKglOQU5EX05DRTogYml0IDAgLT4gYml0IDIKKyAqCU5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgMQorICoJTkFORF9BTEU6IGJpdCAyIC0+IGJpdCAwCisgKi8KK3N0YXRpYyB2b2lkIHRzNzI1MF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gVFM3MlhYX05BTkRfQ09OVFJPTF9WSVJUX0JBU0U7CisJCXVuc2lnbmVkIGNoYXIgYml0czsKKworCQliaXRzID0gKGN0cmwgJiBOQU5EX0NORSkgPDwgMjsKKwkJYml0cyB8PSBjdHJsICYgTkFORF9DTEU7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0FMRSkgPj4gMjsKKworCQlfX3Jhd193cml0ZWIoKF9fcmF3X3JlYWRiKGFkZHIpICYgfjB4NykgfCBiaXRzLCBhZGRyKTsKKwl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyk7Cit9CisKKy8qCisgKglyZWFkIGRldmljZSByZWFkeSBwaW4KKyAqLworc3RhdGljIGludCB0czcyNTBfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBfX3Jhd19yZWFkYihUUzcyWFhfTkFORF9CVVNZX1ZJUlRfQkFTRSkgJiAweDIwOworfQorCisvKgorICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHRzNzI1MF9pbml0KHZvaWQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwljb25zdCBjaGFyICpwYXJ0X3R5cGUgPSAwOworCWludCBtdGRfcGFydHNfbmIgPSAwOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICptdGRfcGFydHMgPSAwOworCisJaWYgKCFtYWNoaW5lX2lzX3RzNzJ4eCgpIHx8IGJvYXJkX2lzX3RzNzIwMCgpKQorCQlyZXR1cm4gLUVOWElPOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJdHM3MjUwX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOworCWlmICghdHM3MjUwX210ZCkgeworCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBUUzcyNTAgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnRzNzI1MF9tdGRbMV0pOworCisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJbWVtc2V0KHRzNzI1MF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKKworCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCisJdHM3MjUwX210ZC0+cHJpdiA9IHRoaXM7CisJdHM3MjUwX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIGluc2VydCBjYWxsYmFja3MgKi8KKwl0aGlzLT5JT19BRERSX1IgPSAodm9pZCAqKVRTNzJYWF9OQU5EX0RBVEFfVklSVF9CQVNFOworCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkICopVFM3MlhYX05BTkRfREFUQV9WSVJUX0JBU0U7CisJdGhpcy0+Y21kX2N0cmwgPSB0czcyNTBfaHdjb250cm9sOworCXRoaXMtPmRldl9yZWFkeSA9IHRzNzI1MF9kZXZpY2VfcmVhZHk7CisJdGhpcy0+Y2hpcF9kZWxheSA9IDE1OworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKworCXByaW50aygiU2VhcmNoaW5nIGZvciBOQU5EIGZsYXNoLi4uXG4iKTsKKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwlpZiAobmFuZF9zY2FuKHRzNzI1MF9tdGQsIDEpKSB7CisJCWtmcmVlKHRzNzI1MF9tdGQpOworCQlyZXR1cm4gLUVOWElPOworCX0KKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwl0czcyNTBfbXRkLT5uYW1lID0gInRzNzI1MC1uYW5kIjsKKwltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyh0czcyNTBfbXRkLCBwYXJ0X3Byb2JlcywgJm10ZF9wYXJ0cywgMCk7CisJaWYgKG10ZF9wYXJ0c19uYiA+IDApCisJCXBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOworCWVsc2UKKwkJbXRkX3BhcnRzX25iID0gMDsKKyNlbmRpZgorCWlmIChtdGRfcGFydHNfbmIgPT0gMCkgeworCQltdGRfcGFydHMgPSBwYXJ0aXRpb25faW5mbzMyOworCQlpZiAodHM3MjUwX210ZC0+c2l6ZSA+PSAoMTI4ICogMHgxMDAwMDApKQorCQkJbXRkX3BhcnRzID0gcGFydGl0aW9uX2luZm8xMjg7CisJCW10ZF9wYXJ0c19uYiA9IE5VTV9QQVJUSVRJT05TOworCQlwYXJ0X3R5cGUgPSAic3RhdGljIjsKKwl9CisKKwkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLworCXByaW50ayhLRVJOX05PVElDRSAiVXNpbmcgJXMgcGFydGl0aW9uIGRlZmluaXRpb25cbiIsIHBhcnRfdHlwZSk7CisJYWRkX210ZF9wYXJ0aXRpb25zKHRzNzI1MF9tdGQsIG10ZF9wYXJ0cywgbXRkX3BhcnRzX25iKTsKKworCS8qIFJldHVybiBoYXBweSAqLworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdCh0czcyNTBfaW5pdCk7CisKKy8qCisgKiBDbGVhbiB1cCByb3V0aW5lCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCB0czcyNTBfY2xlYW51cCh2b2lkKQoreworCS8qIFVucmVnaXN0ZXIgdGhlIGRldmljZSAqLworCWRlbF9tdGRfZGV2aWNlKHRzNzI1MF9tdGQpOworCisJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlrZnJlZSh0czcyNTBfbXRkKTsKK30KKworbW9kdWxlX2V4aXQodHM3MjUwX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKZXNzZSBPZmYgPGpvZmZAZW1iZWRkZWRBUk0uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03MjUwIGJvYXJkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uZnRsY29yZS5jIGIvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYwppbmRleCBkN2NkNWZhLi5kYzc1NzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uZnRsY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL25mdGxjb3JlLmMKQEAgLTcwLDggKzcwLDYgQEAKIAluZnRsLT5tYmQuZGV2bnVtID0gLTE7CiAJbmZ0bC0+bWJkLmJsa3NpemUgPSA1MTI7CiAJbmZ0bC0+bWJkLnRyID0gdHI7Ci0JbWVtY3B5KCZuZnRsLT5vb2JpbmZvLCAmbXRkLT5vb2JpbmZvLCBzaXplb2Yoc3RydWN0IG5hbmRfb29iaW5mbykpOwotCW5mdGwtPm9vYmluZm8udXNlZWNjID0gTVREX05BTkRFQ0NfUExBQ0VPTkxZOwogCiAgICAgICAgIGlmIChORlRMX21vdW50KG5mdGwpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJORlRMOiBjb3VsZCBub3QgbW91bnQgZGV2aWNlXG4iKTsKQEAgLTEzNiw2ICsxMzQsNjkgQEAKIAlrZnJlZShuZnRsKTsKIH0KIAorLyoKKyAqIFJlYWQgb29iIGRhdGEgZnJvbSBmbGFzaAorICovCitpbnQgbmZ0bF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCSAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1ZikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZXM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisJb3BzLm9vYm9mZnMgPSBvZmZzICYgKG10ZC0+d3JpdGVzaXplIC0gMSk7CisJb3BzLm9vYmxlbiA9IGxlbjsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5sZW4gPSBsZW47CisKKwlyZXMgPSBtdGQtPnJlYWRfb29iKG10ZCwgb2ZmcyAmIH4obXRkLT53cml0ZXNpemUgLSAxKSwgJm9wcyk7CisJKnJldGxlbiA9IG9wcy5yZXRsZW47CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFdyaXRlIG9vYiBkYXRhIHRvIGZsYXNoCisgKi8KK2ludCBuZnRsX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCSAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmcyAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCW9wcy5vb2JsZW4gPSBsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzICYgfihtdGQtPndyaXRlc2l6ZSAtIDEpLCAmb3BzKTsKKwkqcmV0bGVuID0gb3BzLnJldGxlbjsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogV3JpdGUgZGF0YSBhbmQgb29iIHRvIGZsYXNoCisgKi8KK3N0YXRpYyBpbnQgbmZ0bF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCSAgICAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYsIHVpbnQ4X3QgKm9vYikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZXM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisJb3BzLm9vYm9mZnMgPSBvZmZzOworCW9wcy5vb2JsZW4gPSBtdGQtPm9vYnNpemU7CisJb3BzLm9vYmJ1ZiA9IG9vYjsKKwlvcHMuZGF0YnVmID0gYnVmOworCW9wcy5sZW4gPSBsZW47CisKKwlyZXMgPSBtdGQtPndyaXRlX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOworCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCXJldHVybiByZXM7Cit9CisKICNpZmRlZiBDT05GSUdfTkZUTF9SVwogCiAvKiBBY3R1YWwgTkZUTCBhY2Nlc3Mgcm91dGluZXMgKi8KQEAgLTE4NSw2ICsyNDYsNyBAQAogCiBzdGF0aWMgdTE2IE5GVExfZm9sZGNoYWluIChzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCwgdW5zaWduZWQgdGhpc1ZVQywgdW5zaWduZWQgcGVuZGluZ2Jsb2NrICkKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAJdTE2IEJsb2NrTWFwW01BWF9TRUNUT1JTX1BFUl9VTklUXTsKIAl1bnNpZ25lZCBjaGFyIEJsb2NrTGFzdFN0YXRlW01BWF9TRUNUT1JTX1BFUl9VTklUXTsKIAl1bnNpZ25lZCBjaGFyIEJsb2NrRnJlZUZvdW5kW01BWF9TRUNUT1JTX1BFUl9VTklUXTsKQEAgLTE5NCw3ICsyNTYsNyBAQAogCXVuc2lnbmVkIGludCB0YXJnZXRFVU47CiAJc3RydWN0IG5mdGxfb29iIG9vYjsKIAlpbnQgaW5wbGFjZSA9IDE7Ci0gICAgICAgIHNpemVfdCByZXRsZW47CisJc2l6ZV90IHJldGxlbjsKIAogCW1lbXNldChCbG9ja01hcCwgMHhmZiwgc2l6ZW9mKEJsb2NrTWFwKSk7CiAJbWVtc2V0KEJsb2NrRnJlZUZvdW5kLCAwLCBzaXplb2YoQmxvY2tGcmVlRm91bmQpKTsKQEAgLTIxMCwyMSArMjcyLDIxIEBACiAJLyogU2NhbiB0byBmaW5kIHRoZSBFcmFzZSBVbml0IHdoaWNoIGhvbGRzIHRoZSBhY3R1YWwgZGF0YSBmb3IgZWFjaAogCSAgIDUxMi1ieXRlIGJsb2NrIHdpdGhpbiB0aGUgQ2hhaW4uCiAJKi8KLSAgICAgICAgc2lsbHkgPSBNQVhfTE9PUFM7CisJc2lsbHkgPSBNQVhfTE9PUFM7CiAJdGFyZ2V0RVVOID0gQkxPQ0tfTklMOwogCXdoaWxlICh0aGlzRVVOIDw9IG5mdGwtPmxhc3RFVU4gKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXR1cywgZm9sZG1hcms7CisJCXVuc2lnbmVkIGludCBzdGF0dXMsIGZvbGRtYXJrOwogCiAJCXRhcmdldEVVTiA9IHRoaXNFVU47CiAJCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IG5mdGwtPkVyYXNlU2l6ZSAvIDUxMjsgYmxvY2sgKyspIHsKLQkJCU1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsCi0JCQkJICAgICh0aGlzRVVOICogbmZ0bC0+RXJhc2VTaXplKSArIChibG9jayAqIDUxMiksCi0JCQkJICAgIDE2ICwgJnJldGxlbiwgKGNoYXIgKikmb29iKTsKKwkJCW5mdGxfcmVhZF9vb2IobXRkLCAodGhpc0VVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKworCQkJCSAgICAgIChibG9jayAqIDUxMiksIDE2ICwgJnJldGxlbiwKKwkJCQkgICAgICAoY2hhciAqKSZvb2IpOwogCQkJaWYgKGJsb2NrID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZG1hcmsgPSBvb2IudS5jLkZvbGRNYXJrIHwgb29iLnUuYy5Gb2xkTWFyazE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkbWFyayA9PSBGT0xEX01BUktfSU5fUFJPR1JFU1MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVRyhNVERfREVCVUdfTEVWRUwxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcml0ZSBJbmhpYml0ZWQgb24gRVVOICVkXG4iLCB0aGlzRVVOKTsKKwkJCQlmb2xkbWFyayA9IG9vYi51LmMuRm9sZE1hcmsgfCBvb2IudS5jLkZvbGRNYXJrMTsKKwkJCQlpZiAoZm9sZG1hcmsgPT0gRk9MRF9NQVJLX0lOX1BST0dSRVNTKSB7CisJCQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsCisJCQkJCSAgICAgICJXcml0ZSBJbmhpYml0ZWQgb24gRVVOICVkXG4iLCB0aGlzRVVOKTsKIAkJCQkJaW5wbGFjZSA9IDA7CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyogVGhlcmUncyBubyBvdGhlciByZWFzb24gbm90IHRvIGRvIGlucGxhY2UsCkBAIC0yMzMsNyArMjk1LDcgQEAKIAkJCQkJaW5wbGFjZSA9IDE7CiAJCQkJfQogCQkJfQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gb29iLmIuU3RhdHVzIHwgb29iLmIuU3RhdHVzMTsKKwkJCXN0YXR1cyA9IG9vYi5iLlN0YXR1cyB8IG9vYi5iLlN0YXR1czE7CiAJCQlCbG9ja0xhc3RTdGF0ZVtibG9ja10gPSBzdGF0dXM7CiAKIAkJCXN3aXRjaChzdGF0dXMpIHsKQEAgLTMyOCwxNSArMzkwLDE1IEBACiAJCQlyZXR1cm4gQkxPQ0tfTklMOwogCQl9CiAJfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIFdlIHB1dCBhIGZvbGQgbWFyayBpbiB0aGUgY2hhaW4gd2UgYXJlIGZvbGRpbmcgb25seSBpZgotICAgICAgICAgICAgICAgd2UgZm9sZCBpbiBwbGFjZSB0byBoZWxwIHRoZSBtb3VudCBjaGVjayBjb2RlLiBJZiB3ZSBkbwotICAgICAgICAgICAgICAgbm90IGZvbGQgaW4gcGxhY2UsIGl0IGlzIHBvc3NpYmxlIHRvIGZpbmQgdGhlIHZhbGlkCi0gICAgICAgICAgICAgICBjaGFpbiBieSBzZWxlY3RpbmcgdGhlIGxvbmdlciBvbmUgKi8KLSAgICAgICAgICAgIG9vYi51LmMuRm9sZE1hcmsgPSBvb2IudS5jLkZvbGRNYXJrMSA9IGNwdV90b19sZTE2KEZPTERfTUFSS19JTl9QUk9HUkVTUyk7Ci0gICAgICAgICAgICBvb2IudS5jLnVudXNlZCA9IDB4ZmZmZmZmZmY7Ci0gICAgICAgICAgICBNVERfV1JJVEVPT0IobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyAyICogNTEyICsgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7Ci0gICAgICAgIH0KKwkJLyogV2UgcHV0IGEgZm9sZCBtYXJrIGluIHRoZSBjaGFpbiB3ZSBhcmUgZm9sZGluZyBvbmx5IGlmIHdlCisgICAgICAgICAgICAgICBmb2xkIGluIHBsYWNlIHRvIGhlbHAgdGhlIG1vdW50IGNoZWNrIGNvZGUuIElmIHdlIGRvIG5vdCBmb2xkIGluCisgICAgICAgICAgICAgICBwbGFjZSwgaXQgaXMgcG9zc2libGUgdG8gZmluZCB0aGUgdmFsaWQgY2hhaW4gYnkgc2VsZWN0aW5nIHRoZQorICAgICAgICAgICAgICAgbG9uZ2VyIG9uZSAqLworCQlvb2IudS5jLkZvbGRNYXJrID0gb29iLnUuYy5Gb2xkTWFyazEgPSBjcHVfdG9fbGUxNihGT0xEX01BUktfSU5fUFJPR1JFU1MpOworCQlvb2IudS5jLnVudXNlZCA9IDB4ZmZmZmZmZmY7CisJCW5mdGxfd3JpdGVfb29iKG10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyAyICogNTEyICsgOCwKKwkJCSAgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJfQogCiAJLyogT0suIFdlIG5vdyBrbm93IHRoZSBsb2NhdGlvbiBvZiBldmVyeSBibG9jayBpbiB0aGUgVmlydHVhbCBVbml0IENoYWluLAogCSAgIGFuZCB0aGUgRXJhc2UgVW5pdCBpbnRvIHdoaWNoIHdlIGFyZSBzdXBwb3NlZCB0byBiZSBjb3B5aW5nLgpAQCAtMzUzLDMzICs0MTUsMzMgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLSAgICAgICAgICAgICAgICAvKiBjb3B5IG9ubHkgaW4gbm9uIGZyZWUgYmxvY2sgKGZyZWUgYmxvY2tzIGNhbiBvbmx5CisJCS8qIGNvcHkgb25seSBpbiBub24gZnJlZSBibG9jayAoZnJlZSBibG9ja3MgY2FuIG9ubHkKICAgICAgICAgICAgICAgICAgICBoYXBwZW4gaW4gY2FzZSBvZiBtZWRpYSBlcnJvcnMgb3IgZGVsZXRlZCBibG9ja3MpICovCi0gICAgICAgICAgICAgICAgaWYgKEJsb2NrTWFwW2Jsb2NrXSA9PSBCTE9DS19OSUwpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkJaWYgKEJsb2NrTWFwW2Jsb2NrXSA9PSBCTE9DS19OSUwpCisJCQljb250aW51ZTsKIAotICAgICAgICAgICAgICAgIHJldCA9IE1URF9SRUFEKG5mdGwtPm1iZC5tdGQsIChuZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pICsgKGJsb2NrICogNTEyKSwKLQkJCQkgIDUxMiwgJnJldGxlbiwgbW92ZWJ1Zik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gTVREX1JFQUQobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIEJsb2NrTWFwW2Jsb2NrXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoYmxvY2sgKiA1MTIpLCA1MTIsICZyZXRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVidWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IC1FSU8pCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkVycm9yIHdlbnQgYXdheSBvbiByZXRyeS5cbiIpOwotICAgICAgICAgICAgICAgIH0KKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIEJsb2NrTWFwW2Jsb2NrXSkgKyAoYmxvY2sgKiA1MTIpLAorCQkJCTUxMiwgJnJldGxlbiwgbW92ZWJ1Zik7CisJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRVVDTEVBTikgeworCQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIEJsb2NrTWFwW2Jsb2NrXSkKKwkJCQkJKyAoYmxvY2sgKiA1MTIpLCA1MTIsICZyZXRsZW4sCisJCQkJCW1vdmVidWYpOworCQkJaWYgKHJldCAhPSAtRUlPKQorCQkJCXByaW50aygiRXJyb3Igd2VudCBhd2F5IG9uIHJldHJ5LlxuIik7CisJCX0KIAkJbWVtc2V0KCZvb2IsIDB4ZmYsIHNpemVvZihzdHJ1Y3QgbmZ0bF9vb2IpKTsKIAkJb29iLmIuU3RhdHVzID0gb29iLmIuU3RhdHVzMSA9IFNFQ1RPUl9VU0VEOwotICAgICAgICAgICAgICAgIE1URF9XUklURUVDQyhuZnRsLT5tYmQubXRkLCAobmZ0bC0+RXJhc2VTaXplICogdGFyZ2V0RVVOKSArIChibG9jayAqIDUxMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxMiwgJnJldGxlbiwgbW92ZWJ1ZiwgKGNoYXIgKikmb29iLCAmbmZ0bC0+b29iaW5mbyk7CisKKwkJbmZ0bF93cml0ZShuZnRsLT5tYmQubXRkLCAobmZ0bC0+RXJhc2VTaXplICogdGFyZ2V0RVVOKSArCisJCQkgICAoYmxvY2sgKiA1MTIpLCA1MTIsICZyZXRsZW4sIG1vdmVidWYsIChjaGFyICopJm9vYik7CiAJfQogCi0gICAgICAgIC8qIGFkZCB0aGUgaGVhZGVyIHNvIHRoYXQgaXQgaXMgbm93IGEgdmFsaWQgY2hhaW4gKi8KLSAgICAgICAgb29iLnUuYS5WaXJ0VW5pdE51bSA9IG9vYi51LmEuU3BhcmVWaXJ0VW5pdE51bQotICAgICAgICAgICAgICAgID0gY3B1X3RvX2xlMTYodGhpc1ZVQyk7Ci0gICAgICAgIG9vYi51LmEuUmVwbFVuaXROdW0gPSBvb2IudS5hLlNwYXJlUmVwbFVuaXROdW0gPSAweGZmZmY7CisJLyogYWRkIHRoZSBoZWFkZXIgc28gdGhhdCBpdCBpcyBub3cgYSB2YWxpZCBjaGFpbiAqLworCW9vYi51LmEuVmlydFVuaXROdW0gPSBvb2IudS5hLlNwYXJlVmlydFVuaXROdW0gPSBjcHVfdG9fbGUxNih0aGlzVlVDKTsKKwlvb2IudS5hLlJlcGxVbml0TnVtID0gb29iLnUuYS5TcGFyZVJlcGxVbml0TnVtID0gMHhmZmZmOwogCi0gICAgICAgIE1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCAobmZ0bC0+RXJhc2VTaXplICogdGFyZ2V0RVVOKSArIDgsCi0gICAgICAgICAgICAgICAgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJbmZ0bF93cml0ZV9vb2IobXRkLCAobmZ0bC0+RXJhc2VTaXplICogdGFyZ2V0RVVOKSArIDgsCisJCSAgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CiAKIAkvKiBPSy4gV2UndmUgbW92ZWQgdGhlIHdob2xlIGxvdCBpbnRvIHRoZSBuZXcgYmxvY2suIE5vdyB3ZSBoYXZlIHRvIGZyZWUgdGhlIG9yaWdpbmFsIGJsb2Nrcy4gKi8KIApAQCAtMzk2LDE4ICs0NTgsMTggQEAKIAl3aGlsZSAodGhpc0VVTiA8PSBuZnRsLT5sYXN0RVVOICYmIHRoaXNFVU4gIT0gdGFyZ2V0RVVOKSB7CiAJCXVuc2lnbmVkIGludCBFVU50bXA7CiAKLSAgICAgICAgICAgICAgICBFVU50bXAgPSBuZnRsLT5SZXBsVW5pdFRhYmxlW3RoaXNFVU5dOworCQlFVU50bXAgPSBuZnRsLT5SZXBsVW5pdFRhYmxlW3RoaXNFVU5dOwogCi0gICAgICAgICAgICAgICAgaWYgKE5GVExfZm9ybWF0YmxvY2sobmZ0bCwgdGhpc0VVTikgPCAwKSB7CisJCWlmIChORlRMX2Zvcm1hdGJsb2NrKG5mdGwsIHRoaXNFVU4pIDwgMCkgewogCQkJLyogY291bGQgbm90IGVyYXNlIDogbWFyayBibG9jayBhcyByZXNlcnZlZAogCQkJICovCiAJCQluZnRsLT5SZXBsVW5pdFRhYmxlW3RoaXNFVU5dID0gQkxPQ0tfUkVTRVJWRUQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qIGNvcnJlY3RseSBlcmFzZWQgOiBtYXJrIGl0IGFzIGZyZWUgKi8KIAkJCW5mdGwtPlJlcGxVbml0VGFibGVbdGhpc0VVTl0gPSBCTE9DS19GUkVFOwogCQkJbmZ0bC0+bnVtZnJlZUVVTnMrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpc0VVTiA9IEVVTnRtcDsKKwkJfQorCQl0aGlzRVVOID0gRVVOdG1wOwogCX0KIAogCS8qIE1ha2UgdGhpcyB0aGUgbmV3IHN0YXJ0IG9mIGNoYWluIGZvciB0aGlzVlVDICovCkBAIC00NzMsNiArNTM1LDcgQEAKIHsKIAl1MTYgbGFzdEVVTjsKIAl1MTYgdGhpc1ZVQyA9IGJsb2NrIC8gKG5mdGwtPkVyYXNlU2l6ZSAvIDUxMik7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuZnRsLT5tYmQubXRkOwogCXVuc2lnbmVkIGludCB3cml0ZUVVTjsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrb2ZzID0gKGJsb2NrICogNTEyKSAmIChuZnRsLT5FcmFzZVNpemUgLTEpOwogCXNpemVfdCByZXRsZW47CkBAIC00ODksMjEgKzU1MiwyMiBAQAogCQkqLwogCQlsYXN0RVVOID0gQkxPQ0tfTklMOwogCQl3cml0ZUVVTiA9IG5mdGwtPkVVTnRhYmxlW3RoaXNWVUNdOwotICAgICAgICAgICAgICAgIHNpbGx5ID0gTUFYX0xPT1BTOworCQlzaWxseSA9IE1BWF9MT09QUzsKIAkJd2hpbGUgKHdyaXRlRVVOIDw9IG5mdGwtPmxhc3RFVU4pIHsKIAkJCXN0cnVjdCBuZnRsX2JjaSBiY2k7CiAJCQlzaXplX3QgcmV0bGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXR1czsKKwkJCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKIAkJCWxhc3RFVU4gPSB3cml0ZUVVTjsKIAotCQkJTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgKHdyaXRlRVVOICogbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzLAotCQkJCSAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpOworCQkJbmZ0bF9yZWFkX29vYihtdGQsCisJCQkJICAgICAgKHdyaXRlRVVOICogbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzLAorCQkJCSAgICAgIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSk7CiAKIAkJCURFQlVHKE1URF9ERUJVR19MRVZFTDIsICJTdGF0dXMgb2YgYmxvY2sgJWQgaW4gRVVOICVkIGlzICV4XG4iLAogCQkJICAgICAgYmxvY2sgLCB3cml0ZUVVTiwgbGUxNl90b19jcHUoYmNpLlN0YXR1cykpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CisJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CiAJCQlzd2l0Y2goc3RhdHVzKSB7CiAJCQljYXNlIFNFQ1RPUl9GUkVFOgogCQkJCXJldHVybiB3cml0ZUVVTjsKQEAgLTU3NCwxMCArNjM4LDEwIEBACiAJCS8qIFdlJ3ZlIGZvdW5kIGEgZnJlZSBibG9jay4gSW5zZXJ0IGl0IGludG8gdGhlIGNoYWluLiAqLwogCiAJCWlmIChsYXN0RVVOICE9IEJMT0NLX05JTCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzVlVDIHw9IDB4ODAwMDsgLyogSXQncyBhIHJlcGxhY2VtZW50IGJsb2NrICovCisJCQl0aGlzVlVDIHw9IDB4ODAwMDsgLyogSXQncyBhIHJlcGxhY2VtZW50IGJsb2NrICovCiAJCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoZSBmaXJzdCBibG9jayBpbiBhIG5ldyBjaGFpbiAqLwotICAgICAgICAgICAgICAgICAgICBuZnRsLT5FVU50YWJsZVt0aGlzVlVDXSA9IHdyaXRlRVVOOworCQkJLyogVGhlIGZpcnN0IGJsb2NrIGluIGEgbmV3IGNoYWluICovCisJCQluZnRsLT5FVU50YWJsZVt0aGlzVlVDXSA9IHdyaXRlRVVOOwogCQl9CiAKIAkJLyogc2V0IHVwIHRoZSBhY3R1YWwgRVVOIHdlJ3JlIHdyaXRpbmcgaW50byAqLwpAQCAtNTg1LDI5ICs2NDksMjkgQEAKIAkJbmZ0bC0+UmVwbFVuaXRUYWJsZVt3cml0ZUVVTl0gPSBCTE9DS19OSUw7CiAKIAkJLyogLi4uIGFuZCBvbiB0aGUgZmxhc2ggaXRzZWxmICovCi0JCU1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsIHdyaXRlRVVOICogbmZ0bC0+RXJhc2VTaXplICsgOCwgOCwKLQkJCSAgICAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJCW5mdGxfcmVhZF9vb2IobXRkLCB3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSArIDgsIDgsCisJCQkgICAgICAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CiAKIAkJb29iLnUuYS5WaXJ0VW5pdE51bSA9IG9vYi51LmEuU3BhcmVWaXJ0VW5pdE51bSA9IGNwdV90b19sZTE2KHRoaXNWVUMpOwogCi0JCU1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCB3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSArIDgsIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKKwkJbmZ0bF93cml0ZV9vb2IobXRkLCB3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSArIDgsIDgsCisJCQkgICAgICAgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCi0gICAgICAgICAgICAgICAgLyogd2UgbGluayB0aGUgbmV3IGJsb2NrIHRvIHRoZSBjaGFpbiBvbmx5IGFmdGVyIHRoZQorCQkvKiB3ZSBsaW5rIHRoZSBuZXcgYmxvY2sgdG8gdGhlIGNoYWluIG9ubHkgYWZ0ZXIgdGhlCiAgICAgICAgICAgICAgICAgICAgYmxvY2sgaXMgcmVhZHkuIEl0IGF2b2lkcyB0aGUgY2FzZSB3aGVyZSB0aGUgY2hhaW4KICAgICAgICAgICAgICAgICAgICBjb3VsZCBwb2ludCB0byBhIGZyZWUgYmxvY2sgKi8KLSAgICAgICAgICAgICAgICBpZiAobGFzdEVVTiAhPSBCTE9DS19OSUwpIHsKKwkJaWYgKGxhc3RFVU4gIT0gQkxPQ0tfTklMKSB7CiAJCQkvKiBCb3RoIGluIG91ciBjYWNoZS4uLiAqLwogCQkJbmZ0bC0+UmVwbFVuaXRUYWJsZVtsYXN0RVVOXSA9IHdyaXRlRVVOOwogCQkJLyogLi4uIGFuZCBvbiB0aGUgZmxhc2ggaXRzZWxmICovCi0JCQlNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCAobGFzdEVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyA4LAotCQkJCSAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJCQluZnRsX3JlYWRfb29iKG10ZCwgKGxhc3RFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgOCwKKwkJCQkgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CiAKIAkJCW9vYi51LmEuUmVwbFVuaXROdW0gPSBvb2IudS5hLlNwYXJlUmVwbFVuaXROdW0KIAkJCQk9IGNwdV90b19sZTE2KHdyaXRlRVVOKTsKIAotCQkJTVREX1dSSVRFT09CKG5mdGwtPm1iZC5tdGQsIChsYXN0RVVOICogbmZ0bC0+RXJhc2VTaXplKSArIDgsCi0JCQkJICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJCQluZnRsX3dyaXRlX29vYihtdGQsIChsYXN0RVVOICogbmZ0bC0+RXJhc2VTaXplKSArIDgsCisJCQkJICAgICAgIDgsICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAkJfQogCiAJCXJldHVybiB3cml0ZUVVTjsKQEAgLTYzOSwxMCArNzAzLDkgQEAKIAogCW1lbXNldCgmb29iLCAweGZmLCBzaXplb2Yoc3RydWN0IG5mdGxfb29iKSk7CiAJb29iLmIuU3RhdHVzID0gb29iLmIuU3RhdHVzMSA9IFNFQ1RPUl9VU0VEOwotCU1URF9XUklURUVDQyhuZnRsLT5tYmQubXRkLCAod3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgYmxvY2tvZnMsCi0JCSAgICAgNTEyLCAmcmV0bGVuLCAoY2hhciAqKWJ1ZmZlciwgKGNoYXIgKikmb29iLCAmbmZ0bC0+b29iaW5mbyk7Ci0gICAgICAgIC8qIG5lZWQgdG8gd3JpdGUgU0VDVE9SX1VTRUQgZmxhZ3Mgc2luY2UgdGhleSBhcmUgbm90IHdyaXR0ZW4gaW4gbXRkX3dyaXRlZWNjICovCiAKKwluZnRsX3dyaXRlKG5mdGwtPm1iZC5tdGQsICh3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mcywKKwkJICAgNTEyLCAmcmV0bGVuLCAoY2hhciAqKWJ1ZmZlciwgKGNoYXIgKikmb29iKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBDT05GSUdfTkZUTF9SVyAqLwpAQCAtNjUxLDIwICs3MTQsMjIgQEAKIAkJCSAgY2hhciAqYnVmZmVyKQogewogCXN0cnVjdCBORlRMcmVjb3JkICpuZnRsID0gKHZvaWQgKiltYmQ7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuZnRsLT5tYmQubXRkOwogCXUxNiBsYXN0Z29vZEVVTjsKIAl1MTYgdGhpc0VVTiA9IG5mdGwtPkVVTnRhYmxlW2Jsb2NrIC8gKG5mdGwtPkVyYXNlU2l6ZSAvIDUxMildOwogCXVuc2lnbmVkIGxvbmcgYmxvY2tvZnMgPSAoYmxvY2sgKiA1MTIpICYgKG5mdGwtPkVyYXNlU2l6ZSAtIDEpOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJaW50IHNpbGx5ID0gTUFYX0xPT1BTOwotICAgICAgICBzaXplX3QgcmV0bGVuOwotICAgICAgICBzdHJ1Y3QgbmZ0bF9iY2kgYmNpOworCXNpemVfdCByZXRsZW47CisJc3RydWN0IG5mdGxfYmNpIGJjaTsKIAogCWxhc3Rnb29kRVVOID0gQkxPQ0tfTklMOwogCi0gICAgICAgIGlmICh0aGlzRVVOICE9IEJMT0NLX05JTCkgeworCWlmICh0aGlzRVVOICE9IEJMT0NLX05JTCkgewogCQl3aGlsZSAodGhpc0VVTiA8IG5mdGwtPm5iX2Jsb2NrcykgewotCQkJaWYgKE1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsICh0aGlzRVVOICogbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzLAotCQkJCQk4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKKwkJCWlmIChuZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsKKwkJCQkJICBibG9ja29mcywgOCwgJnJldGxlbiwKKwkJCQkJICAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQkJZWxzZQogCQkJCXN0YXR1cyA9IGJjaS5TdGF0dXMgfCBiY2kuU3RhdHVzMTsKQEAgLTY5NCw3ICs3NTksNyBAQAogCQkJfQogCQkJdGhpc0VVTiA9IG5mdGwtPlJlcGxVbml0VGFibGVbdGhpc0VVTl07CiAJCX0KLSAgICAgICAgfQorCX0KIAogIHRoZV9lbmQ6CiAJaWYgKGxhc3Rnb29kRVVOID09IEJMT0NLX05JTCkgewpAQCAtNzAzLDcgKzc2OCw5IEBACiAJfSBlbHNlIHsKIAkJbG9mZl90IHB0ciA9IChsYXN0Z29vZEVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mczsKIAkJc2l6ZV90IHJldGxlbjsKLQkJaWYgKE1URF9SRUFEKG5mdGwtPm1iZC5tdGQsIHB0ciwgNTEyLCAmcmV0bGVuLCBidWZmZXIpKQorCQlpbnQgcmVzID0gbXRkLT5yZWFkKG10ZCwgcHRyLCA1MTIsICZyZXRsZW4sIGJ1ZmZlcik7CisKKwkJaWYgKHJlcyA8IDAgJiYgcmVzICE9IC1FVUNMRUFOKQogCQkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMgYi9kcml2ZXJzL210ZC9uZnRsbW91bnQuYwppbmRleCAzYjEwNGViLi4wNjcyNjJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMKKysrIGIvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMKQEAgLTMzLDYgKzMzLDExIEBACiAKIGNoYXIgbmZ0bG1vdW50cmV2W109IiRSZXZpc2lvbjogMS40MSAkIjsKIAorZXh0ZXJuIGludCBuZnRsX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJCSBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmKTsKK2V4dGVybiBpbnQgbmZ0bF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkJICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmKTsKKwogLyogZmluZF9ib290X3JlY29yZDogRmluZCB0aGUgTkZUTCBNZWRpYSBIZWFkZXIgYW5kIGl0cyBTcGFyZSBjb3B5IHdoaWNoIGNvbnRhaW5zIHRoZQogICoJdmFyaW91cyBkZXZpY2UgaW5mb3JtYXRpb24gb2YgdGhlIE5GVEwgcGFydGl0aW9uIGFuZCBCYWQgVW5pdCBUYWJsZS4gVXBkYXRlCiAgKgl0aGUgUmVwbFVuaXRUYWJsZVtdIHRhYmxlIGFjY3JvZGluZyB0byB0aGUgQmFkIFVuaXQgVGFibGUuIFJlcGxVbml0VGFibGVbXQpAQCAtNDUsNiArNTAsNyBAQAogCXNpemVfdCByZXRsZW47CiAJdTggYnVmW1NFQ1RPUlNJWkVdOwogCXN0cnVjdCBORlRMTWVkaWFIZWFkZXIgKm1oID0gJm5mdGwtPk1lZGlhSGRyOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogICAgICAgICAvKiBBc3N1bWUgbG9naWNhbCBFcmFzZVNpemUgPT0gcGh5c2ljYWwgZXJhc2VzaXplIGZvciBzdGFydGluZyB0aGUgc2Nhbi4KQEAgLTY1LDcgKzcxLDggQEAKIAogCQkvKiBDaGVjayBmb3IgQU5BTkQgaGVhZGVyIGZpcnN0LiBUaGVuIGNhbiB3aGluZ2UgaWYgaXQncyBmb3VuZCBidXQgbGF0ZXIKIAkJICAgY2hlY2tzIGZhaWwgKi8KLQkJcmV0ID0gTVREX1JFQUQobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIGJ1Zik7CisJCXJldCA9IG10ZC0+cmVhZChtdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplLCBTRUNUT1JTSVpFLAorCQkJCSZyZXRsZW4sIGJ1Zik7CiAJCS8qIFdlIGlnbm9yZSByZXQgaW4gY2FzZSB0aGUgRUNDIG9mIHRoZSBNZWRpYUhlYWRlciBpcyBpbnZhbGlkCiAJCSAgICh3aGljaCBpcyBhcHBhcmVudGx5IGFjY2VwdGFibGUpICovCiAJCWlmIChyZXRsZW4gIT0gU0VDVE9SU0laRSkgewpAQCAtOTAsOCArOTcsOSBAQAogCQl9CiAKIAkJLyogVG8gYmUgc2FmZXIgd2l0aCBCSU9TLCBhbHNvIHVzZSBlcmFzZSBtYXJrIGFzIGRpc2NyaW1pbmFudCAqLwotCQlpZiAoKHJldCA9IE1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgU0VDVE9SU0laRSArIDgsCi0JCQkJOCwgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkpIHsKKwkJaWYgKChyZXQgPSBuZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKworCQkJCQkgU0VDVE9SU0laRSArIDgsIDgsICZyZXRsZW4sCisJCQkJCSAoY2hhciAqKSZoMSkgPCAwKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQU5BTkQgaGVhZGVyIGZvdW5kIGF0IDB4JXggaW4gbXRkJWQsIGJ1dCBPT0IgZGF0YSByZWFkIGZhaWxlZCAoZXJyICVkKVxuIiwKIAkJCSAgICAgICBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSwgbmZ0bC0+bWJkLm10ZC0+aW5kZXgsIHJldCk7CiAJCQljb250aW51ZTsKQEAgLTEwOSw4ICsxMTcsOCBAQAogCQl9CiAKIAkJLyogRmluYWxseSByZXJlYWQgdG8gY2hlY2sgRUNDICovCi0JCWlmICgocmV0ID0gTVREX1JFQURFQ0MobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIFNFQ1RPUlNJWkUsCi0JCQkJJnJldGxlbiwgYnVmLCAoY2hhciAqKSZvb2IsIE5VTEwpIDwgMCkpIHsKKwkJaWYgKChyZXQgPSBtdGQtPnJlYWQobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSwgU0VDVE9SU0laRSwKKwkJCQkgICAgICZyZXRsZW4sIGJ1ZikgPCAwKSkgewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBTkFORCBoZWFkZXIgZm91bmQgYXQgMHgleCBpbiBtdGQlZCwgYnV0IEVDQyByZWFkIGZhaWxlZCAoZXJyICVkKVxuIiwKIAkJCSAgICAgICBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSwgbmZ0bC0+bWJkLm10ZC0+aW5kZXgsIHJldCk7CiAJCQljb250aW51ZTsKQEAgLTIyOCw5ICsyMzYsOSBAQAogVGhlIG5ldyBEaXNrT25DaGlwIGRyaXZlciBhbHJlYWR5IHNjYW5uZWQgdGhlIGJhZCBibG9jayB0YWJsZS4gIEp1c3QgcXVlcnkgaXQuCiAJCQlpZiAoKGkgJiAoU0VDVE9SU0laRSAtIDEpKSA9PSAwKSB7CiAJCQkJLyogcmVhZCBvbmUgc2VjdG9yIGZvciBldmVyeSBTRUNUT1JTSVpFIG9mIGJsb2NrcyAqLwotCQkJCWlmICgocmV0ID0gTVREX1JFQURFQ0MobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKwotCQkJCQkJICAgICAgIGkgKyBTRUNUT1JTSVpFLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYsCi0JCQkJCQkgICAgICAgKGNoYXIgKikmb29iLCBOVUxMKSkgPCAwKSB7CisJCQkJaWYgKChyZXQgPSBtdGQtPnJlYWQobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKworCQkJCQkJICAgICBpICsgU0VDVE9SU0laRSwgU0VDVE9SU0laRSwgJnJldGxlbiwKKwkJCQkJCSAgICAgYnVmKSkgPCAwKSB7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiUmVhZCBvZiBiYWQgc2VjdG9yIHRhYmxlIGZhaWxlZCAoZXJyICVkKVxuIiwKIAkJCQkJICAgICAgIHJldCk7CiAJCQkJCWtmcmVlKG5mdGwtPlJlcGxVbml0VGFibGUpOwpAQCAtMjY4LDE4ICsyNzYsMjIgQEAKIHN0YXRpYyBpbnQgY2hlY2tfZnJlZV9zZWN0b3JzKHN0cnVjdCBORlRMcmVjb3JkICpuZnRsLCB1bnNpZ25lZCBpbnQgYWRkcmVzcywgaW50IGxlbiwKIAkJCSAgICAgIGludCBjaGVja19vb2IpCiB7Ci0JaW50IGk7Ci0Jc2l6ZV90IHJldGxlbjsKIAl1OCBidWZbU0VDVE9SU0laRSArIG5mdGwtPm1iZC5tdGQtPm9vYnNpemVdOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKKwlzaXplX3QgcmV0bGVuOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBTRUNUT1JTSVpFKSB7Ci0JCWlmIChNVERfUkVBREVDQyhuZnRsLT5tYmQubXRkLCBhZGRyZXNzLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYsICZidWZbU0VDVE9SU0laRV0sICZuZnRsLT5vb2JpbmZvKSA8IDApCisJCWlmIChtdGQtPnJlYWQobXRkLCBhZGRyZXNzLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYpKQogCQkJcmV0dXJuIC0xOwogCQlpZiAobWVtY21wYihidWYsIDB4ZmYsIFNFQ1RPUlNJWkUpICE9IDApCiAJCQlyZXR1cm4gLTE7CiAKIAkJaWYgKGNoZWNrX29vYikgewotCQkJaWYgKG1lbWNtcGIoYnVmICsgU0VDVE9SU0laRSwgMHhmZiwgbmZ0bC0+bWJkLm10ZC0+b29ic2l6ZSkgIT0gMCkKKwkJCWlmKG5mdGxfcmVhZF9vb2IobXRkLCBhZGRyZXNzLCBtdGQtPm9vYnNpemUsCisJCQkJCSAmcmV0bGVuLCAmYnVmW1NFQ1RPUlNJWkVdKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKG1lbWNtcGIoYnVmICsgU0VDVE9SU0laRSwgMHhmZiwgbXRkLT5vb2JzaXplKSAhPSAwKQogCQkJCXJldHVybiAtMTsKIAkJfQogCQlhZGRyZXNzICs9IFNFQ1RPUlNJWkU7CkBAIC0zMDEsMTAgKzMxMywxMSBAQAogCXVuc2lnbmVkIGludCBuYl9lcmFzZXMsIGVyYXNlX21hcms7CiAJc3RydWN0IG5mdGxfdWNpMSB1Y2k7CiAJc3RydWN0IGVyYXNlX2luZm8gKmluc3RyID0gJm5mdGwtPmluc3RyOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAogCS8qIFJlYWQgdGhlIFVuaXQgQ29udHJvbCBJbmZvcm1hdGlvbiAjMSBmb3IgV2Vhci1MZXZlbGluZyAqLwotCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LAotCQkJOCwgJnJldGxlbiwgKGNoYXIgKikmdWNpKSA8IDApCisJaWYgKG5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LAorCQkJICA4LCAmcmV0bGVuLCAoY2hhciAqKSZ1Y2kpIDwgMCkKIAkJZ290byBkZWZhdWx0X3VjaTE7CiAKIAllcmFzZV9tYXJrID0gbGUxNl90b19jcHUgKCh1Y2kuRXJhc2VNYXJrIHwgdWNpLkVyYXNlTWFyazEpKTsKQEAgLTMyMSw3ICszMzQsNyBAQAogCWluc3RyLT5tdGQgPSBuZnRsLT5tYmQubXRkOwogCWluc3RyLT5hZGRyID0gYmxvY2sgKiBuZnRsLT5FcmFzZVNpemU7CiAJaW5zdHItPmxlbiA9IG5mdGwtPkVyYXNlU2l6ZTsKLQlNVERfRVJBU0UobmZ0bC0+bWJkLm10ZCwgaW5zdHIpOworCW10ZC0+ZXJhc2UobXRkLCBpbnN0cik7CiAKIAlpZiAoaW5zdHItPnN0YXRlID09IE1URF9FUkFTRV9GQUlMRUQpIHsKIAkJcHJpbnRrKCJFcnJvciB3aGlsZSBmb3JtYXR0aW5nIGJsb2NrICVkXG4iLCBibG9jayk7CkBAIC0zNDMsOCArMzU2LDggQEAKIAkJCWdvdG8gZmFpbDsKIAogCQl1Y2kuV2VhckluZm8gPSBsZTMyX3RvX2NwdShuYl9lcmFzZXMpOwotCQlpZiAoTVREX1dSSVRFT09CKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgU0VDVE9SU0laRSArIDgsIDgsCi0JCQkJICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQorCQlpZiAobmZ0bF93cml0ZV9vb2IobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKworCQkJCSAgIDgsIDgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQogCQkJZ290byBmYWlsOwogCQlyZXR1cm4gMDsKIGZhaWw6CkBAIC0zNjUsNiArMzc4LDcgQEAKICAqCWNhc2UuICovCiBzdGF0aWMgdm9pZCBjaGVja19zZWN0b3JzX2luX2NoYWluKHN0cnVjdCBORlRMcmVjb3JkICpuZnRsLCB1bnNpZ25lZCBpbnQgZmlyc3RfYmxvY2spCiB7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuZnRsLT5tYmQubXRkOwogCXVuc2lnbmVkIGludCBibG9jaywgaSwgc3RhdHVzOwogCXN0cnVjdCBuZnRsX2JjaSBiY2k7CiAJaW50IHNlY3RvcnNfcGVyX2Jsb2NrOwpAQCAtMzc0LDggKzM4OCw5IEBACiAJYmxvY2sgPSBmaXJzdF9ibG9jazsKIAlmb3IgKDs7KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBzZWN0b3JzX3Blcl9ibG9jazsgaSsrKSB7Ci0JCQlpZiAoTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBpICogU0VDVE9SU0laRSwKLQkJCQkJOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCisJCQlpZiAobmZ0bF9yZWFkX29vYihtdGQsCisJCQkJCSAgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBpICogU0VDVE9SU0laRSwKKwkJCQkJICA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQkJZWxzZQogCQkJCXN0YXR1cyA9IGJjaS5TdGF0dXMgfCBiY2kuU3RhdHVzMTsKQEAgLTM5NCw5ICs0MDksMTAgQEAKIAkJCQkJLyogc2VjdG9yIG5vdCBmcmVlIGFjdHVhbGx5IDogbWFyayBpdCBhcyBTRUNUT1JfSUdOT1JFICAqLwogCQkJCQliY2kuU3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCQkJYmNpLlN0YXR1czEgPSBTRUNUT1JfSUdOT1JFOwotCQkJCQlNVERfV1JJVEVPT0IobmZ0bC0+bWJkLm10ZCwKLQkJCQkJCSAgICAgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBpICogU0VDVE9SU0laRSwKLQkJCQkJCSAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKKwkJCQkJbmZ0bF93cml0ZV9vb2IobXRkLCBibG9jayAqCisJCQkJCQkgICAgICAgbmZ0bC0+RXJhc2VTaXplICsKKwkJCQkJCSAgICAgICBpICogU0VDVE9SU0laRSwgOCwKKwkJCQkJCSAgICAgICAmcmV0bGVuLCAoY2hhciAqKSZiY2kpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC00ODEsMTMgKzQ5NywxNCBAQAogICoJMS4gKi8KIHN0YXRpYyBpbnQgY2hlY2tfYW5kX21hcmtfZnJlZV9ibG9jayhzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCwgaW50IGJsb2NrKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAlzdHJ1Y3QgbmZ0bF91Y2kxIGgxOwogCXVuc2lnbmVkIGludCBlcmFzZV9tYXJrOwogCXNpemVfdCByZXRsZW47CiAKIAkvKiBjaGVjayBlcmFzZSBtYXJrLiAqLwotCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAotCQkJJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkKKwlpZiAobmZ0bF9yZWFkX29vYihtdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgU0VDVE9SU0laRSArIDgsIDgsCisJCQkgICZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWVyYXNlX21hcmsgPSBsZTE2X3RvX2NwdSAoKGgxLkVyYXNlTWFyayB8IGgxLkVyYXNlTWFyazEpKTsKQEAgLTUwMSw4ICs1MTgsOSBAQAogCQloMS5FcmFzZU1hcmsgPSBjcHVfdG9fbGUxNihFUkFTRV9NQVJLKTsKIAkJaDEuRXJhc2VNYXJrMSA9IGNwdV90b19sZTE2KEVSQVNFX01BUkspOwogCQloMS5XZWFySW5mbyA9IGNwdV90b19sZTMyKDApOwotCQlpZiAoTVREX1dSSVRFT09CKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgU0VDVE9SU0laRSArIDgsIDgsCi0JCQkJICZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApCisJCWlmIChuZnRsX3dyaXRlX29vYihtdGQsCisJCQkJICAgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwgOCwKKwkJCQkgICAmcmV0bGVuLCAoY2hhciAqKSZoMSkgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0gZWxzZSB7CiAjaWYgMApAQCAtNTEzLDggKzUzMSw4IEBACiAJCQkJCQlTRUNUT1JTSVpFLCAwKSAhPSAwKQogCQkJCXJldHVybiAtMTsKIAotCQkJaWYgKE1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgaSwKLQkJCQkJMTYsICZyZXRsZW4sIGJ1ZikgPCAwKQorCQkJaWYgKG5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIGksCisJCQkJCSAgMTYsICZyZXRsZW4sIGJ1ZikgPCAwKQogCQkJCXJldHVybiAtMTsKIAkJCWlmIChpID09IFNFQ1RPUlNJWkUpIHsKIAkJCQkvKiBza2lwIGVyYXNlIG1hcmsgKi8KQEAgLTU0MCwxMSArNTU4LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2ZvbGRfbWFyayhzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCwgdW5zaWduZWQgaW50IGJsb2NrKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAlzdHJ1Y3QgbmZ0bF91Y2kyIHVjaTsKIAlzaXplX3QgcmV0bGVuOwogCi0JaWYgKE1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgMiAqIFNFQ1RPUlNJWkUgKyA4LAotCQkJOCwgJnJldGxlbiwgKGNoYXIgKikmdWNpKSA8IDApCisJaWYgKG5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIDIgKiBTRUNUT1JTSVpFICsgOCwKKwkJCSAgOCwgJnJldGxlbiwgKGNoYXIgKikmdWNpKSA8IDApCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIGxlMTZfdG9fY3B1KCh1Y2kuRm9sZE1hcmsgfCB1Y2kuRm9sZE1hcmsxKSk7CkBAIC01NTgsNiArNTc3LDcgQEAKIAlpbnQgY2hhaW5fbGVuZ3RoLCBkb19mb3JtYXRfY2hhaW47CiAJc3RydWN0IG5mdGxfdWNpMCBoMDsKIAlzdHJ1Y3QgbmZ0bF91Y2kxIGgxOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gcy0+bWJkLm10ZDsKIAlzaXplX3QgcmV0bGVuOwogCiAJLyogc2VhcmNoIGZvciBORlRMIE1lZGlhSGVhZGVyIGFuZCBTcGFyZSBORlRMIE1lZGlhIEhlYWRlciAqLwpAQCAtNTgyLDEwICs2MDIsMTMgQEAKIAogCQkJZm9yICg7OykgewogCQkJCS8qIHJlYWQgdGhlIGJsb2NrIGhlYWRlci4gSWYgZXJyb3IsIHdlIGZvcm1hdCB0aGUgY2hhaW4gKi8KLQkJCQlpZiAoTVREX1JFQURPT0Iocy0+bWJkLm10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKyA4LCA4LAotCQkJCQkJJnJldGxlbiwgKGNoYXIgKikmaDApIDwgMCB8fAotCQkJCSAgICBNVERfUkVBRE9PQihzLT5tYmQubXRkLCBibG9jayAqIHMtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAotCQkJCQkJJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkgeworCQkJCWlmIChuZnRsX3JlYWRfb29iKG10ZCwKKwkJCQkJCSAgYmxvY2sgKiBzLT5FcmFzZVNpemUgKyA4LCA4LAorCQkJCQkJICAmcmV0bGVuLCAoY2hhciAqKSZoMCkgPCAwIHx8CisJCQkJICAgIG5mdGxfcmVhZF9vb2IobXRkLAorCQkJCQkJICBibG9jayAqIHMtPkVyYXNlU2l6ZSArCisJCQkJCQkgIFNFQ1RPUlNJWkUgKyA4LCA4LAorCQkJCQkJICAmcmV0bGVuLCAoY2hhciAqKSZoMSkgPCAwKSB7CiAJCQkJCXMtPlJlcGxVbml0VGFibGVbYmxvY2tdID0gQkxPQ0tfTklMOwogCQkJCQlkb19mb3JtYXRfY2hhaW4gPSAxOwogCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwppbmRleCAxMjZmZjZiLi41OTMwYTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCkBAIC0yOSw2ICsyOSwyMCBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE9uZU5BTkQgZmxhc2ggdmlhIHBsYXRmb3JtIGRldmljZSBkcml2ZXIuCiAKK2NvbmZpZyBNVERfT05FTkFORF9PVFAKKwlib29sICJPbmVOQU5EIE9UUCBTdXBwb3J0IgorCWRlcGVuZHMgb24gTVREX09ORU5BTkQKKwloZWxwCisJICBPbmUgQmxvY2sgb2YgdGhlIE5BTkQgRmxhc2ggQXJyYXkgbWVtb3J5IGlzIHJlc2VydmVkIGFzCisJICBhIE9uZS1UaW1lIFByb2dyYW1tYWJsZSBCbG9jayBtZW1vcnkgYXJlYS4KKwkgIEFsc28sIDFzdCBCbG9jayBvZiBOQU5EIEZsYXNoIEFycmF5IGNhbiBiZSB1c2VkIGFzIE9UUC4KKworCSAgVGhlIE9UUCBibG9jayBjYW4gYmUgcmVhZCwgcHJvZ3JhbW1lZCBhbmQgbG9ja2VkIHVzaW5nIHRoZSBzYW1lCisJICBvcGVyYXRpb25zIGFzIGFueSBvdGhlciBOQU5EIEZsYXNoIEFycmF5IG1lbW9yeSBibG9jay4KKwkgIE9UUCBibG9jayBjYW5ub3QgYmUgZXJhc2VkLgorCisJICBPVFAgYmxvY2sgaXMgZnVsbHktZ3VhcmFudGVlZCB0byBiZSBhIHZhbGlkIGJsb2NrLgorCiBjb25maWcgTVREX09ORU5BTkRfU1lOQ19SRUFECiAJYm9vbCAiT25lTkFORCBTeW5jLiBCdXJzdCBSZWFkIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IGE1M2E3M2YuLjg0ZWM0MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMjMsOCArMjMsNyBAQAogLyoqCiAgKiBvbmVuYW5kX29vYl82NCAtIG9vYiBpbmZvIGZvciBsYXJnZSAoMktCKSBwYWdlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG9uZW5hbmRfb29iXzY0ID0gewotCS51c2VlY2MJCT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBvbmVuYW5kX29vYl82NCA9IHsKIAkuZWNjYnl0ZXMJPSAyMCwKIAkuZWNjcG9zCQk9IHsKIAkJOCwgOSwgMTAsIDExLCAxMiwKQEAgLTM0LDE0ICszMywxNCBAQAogCQl9LAogCS5vb2JmcmVlCT0gewogCQl7MiwgM30sIHsxNCwgMn0sIHsxOCwgM30sIHszMCwgMn0sCi0JCXsyNCwgM30sIHs0NiwgMn0sIHs0MCwgM30sIHs2MiwgMn0gfQorCQl7MzQsIDN9LCB7NDYsIDJ9LCB7NTAsIDN9LCB7NjIsIDJ9CisJfQogfTsKIAogLyoqCiAgKiBvbmVuYW5kX29vYl8zMiAtIG9vYiBpbmZvIGZvciBtaWRkbGUgKDFLQikgcGFnZQogICovCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBvbmVuYW5kX29vYl8zMiA9IHsKLQkudXNlZWNjCQk9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgb25lbmFuZF9vb2JfMzIgPSB7CiAJLmVjY2J5dGVzCT0gMTAsCiAJLmVjY3BvcwkJPSB7CiAJCTgsIDksIDEwLCAxMSwgMTIsCkBAIC0xOTAsNyArMTg5LDcgQEAKIHN0YXRpYyBpbnQgb25lbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCBsb2ZmX3QgYWRkciwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCWludCB2YWx1ZSwgcmVhZGNtZCA9IDA7CisJaW50IHZhbHVlLCByZWFkY21kID0gMCwgYmxvY2tfY21kID0gMDsKIAlpbnQgYmxvY2ssIHBhZ2U7CiAJLyogTm93IHdlIHVzZSBwYWdlIHNpemUgb3BlcmF0aW9uICovCiAJaW50IHNlY3RvcnMgPSA0LCBjb3VudCA9IDQ7CkBAIC0yMDYsNiArMjA1LDggQEAKIAogCWNhc2UgT05FTkFORF9DTURfRVJBU0U6CiAJY2FzZSBPTkVOQU5EX0NNRF9CVUZGRVJSQU06CisJY2FzZSBPTkVOQU5EX0NNRF9PVFBfQUNDRVNTOgorCQlibG9ja19jbWQgPSAxOwogCQlibG9jayA9IChpbnQpIChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KTsKIAkJcGFnZSA9IC0xOwogCQlicmVhazsKQEAgLTIzMyw2ICsyMzQsMTIgQEAKIAkJLyogV3JpdGUgJ0RGUywgRkJBJyBvZiBGbGFzaCAqLwogCQl2YWx1ZSA9IG9uZW5hbmRfYmxvY2tfYWRkcmVzcyh0aGlzLCBibG9jayk7CiAJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMSk7CisKKwkJaWYgKGJsb2NrX2NtZCkgeworCQkJLyogU2VsZWN0IERhdGFSQU0gZm9yIEREUCAqLworCQkJdmFsdWUgPSBvbmVuYW5kX2J1ZmZlcnJhbV9hZGRyZXNzKHRoaXMsIGJsb2NrKTsKKwkJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7CisJCX0KIAl9CiAKIAlpZiAocGFnZSAhPSAtMSkgewpAQCAtMzAxLDYgKzMwOCw3IEBACiAKIAkJaWYgKHN0YXRlICE9IEZMX1JFQURJTkcpCiAJCQljb25kX3Jlc2NoZWQoKTsKKwkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCX0KIAkvKiBUbyBnZXQgY29ycmVjdCBpbnRlcnJ1cHQgc3RhdHVzIGluIHRpbWVvdXQgY2FzZSAqLwogCWludGVycnVwdCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKQEAgLTM0NCw3ICszNTIsNyBAQAogCiAJaWYgKE9ORU5BTkRfQ1VSUkVOVF9CVUZGRVJSQU0odGhpcykpIHsKIAkJaWYgKGFyZWEgPT0gT05FTkFORF9EQVRBUkFNKQotCQkJcmV0dXJuIG10ZC0+b29iYmxvY2s7CisJCQlyZXR1cm4gbXRkLT53cml0ZXNpemU7CiAJCWlmIChhcmVhID09IE9ORU5BTkRfU1BBUkVSQU0pCiAJCQlyZXR1cm4gbXRkLT5vb2JzaXplOwogCX0KQEAgLTM3Miw2ICszODAsMTcgQEAKIAogCWJ1ZmZlcnJhbSArPSBvbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKTsKIAorCWlmIChPTkVOQU5EX0NIRUNLX0JZVEVfQUNDRVNTKGNvdW50KSkgeworCQl1bnNpZ25lZCBzaG9ydCB3b3JkOworCisJCS8qIEFsaWduIHdpdGggd29yZCgxNi1iaXQpIHNpemUgKi8KKwkJY291bnQtLTsKKworCQkvKiBSZWFkIHdvcmQgYW5kIHNhdmUgYnl0ZSAqLworCQl3b3JkID0gdGhpcy0+cmVhZF93b3JkKGJ1ZmZlcnJhbSArIG9mZnNldCArIGNvdW50KTsKKwkJYnVmZmVyW2NvdW50XSA9ICh3b3JkICYgMHhmZik7CisJfQorCiAJbWVtY3B5KGJ1ZmZlciwgYnVmZmVycmFtICsgb2Zmc2V0LCBjb3VudCk7CiAKIAlyZXR1cm4gMDsKQEAgLTM5OSw2ICs0MTgsMTcgQEAKIAogCXRoaXMtPm1tY29udHJvbChtdGQsIE9ORU5BTkRfU1lTX0NGRzFfU1lOQ19SRUFEKTsKIAorCWlmIChPTkVOQU5EX0NIRUNLX0JZVEVfQUNDRVNTKGNvdW50KSkgeworCQl1bnNpZ25lZCBzaG9ydCB3b3JkOworCisJCS8qIEFsaWduIHdpdGggd29yZCgxNi1iaXQpIHNpemUgKi8KKwkJY291bnQtLTsKKworCQkvKiBSZWFkIHdvcmQgYW5kIHNhdmUgYnl0ZSAqLworCQl3b3JkID0gdGhpcy0+cmVhZF93b3JkKGJ1ZmZlcnJhbSArIG9mZnNldCArIGNvdW50KTsKKwkJYnVmZmVyW2NvdW50XSA9ICh3b3JkICYgMHhmZik7CisJfQorCiAJbWVtY3B5KGJ1ZmZlciwgYnVmZmVycmFtICsgb2Zmc2V0LCBjb3VudCk7CiAKIAl0aGlzLT5tbWNvbnRyb2wobXRkLCAwKTsKQEAgLTQyNiw2ICs0NTYsMjIgQEAKIAogCWJ1ZmZlcnJhbSArPSBvbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKTsKIAorCWlmIChPTkVOQU5EX0NIRUNLX0JZVEVfQUNDRVNTKGNvdW50KSkgeworCQl1bnNpZ25lZCBzaG9ydCB3b3JkOworCQlpbnQgYnl0ZV9vZmZzZXQ7CisKKwkJLyogQWxpZ24gd2l0aCB3b3JkKDE2LWJpdCkgc2l6ZSAqLworCQljb3VudC0tOworCisJCS8qIENhbGN1bGF0ZSBieXRlIGFjY2VzcyBvZmZzZXQgKi8KKwkJYnl0ZV9vZmZzZXQgPSBvZmZzZXQgKyBjb3VudDsKKworCQkvKiBSZWFkIHdvcmQgYW5kIHNhdmUgYnl0ZSAqLworCQl3b3JkID0gdGhpcy0+cmVhZF93b3JkKGJ1ZmZlcnJhbSArIGJ5dGVfb2Zmc2V0KTsKKwkJd29yZCA9ICh3b3JkICYgfjB4ZmYpIHwgYnVmZmVyW2NvdW50XTsKKwkJdGhpcy0+d3JpdGVfd29yZCh3b3JkLCBidWZmZXJyYW0gKyBieXRlX29mZnNldCk7CisJfQorCiAJbWVtY3B5KGJ1ZmZlcnJhbSArIG9mZnNldCwgYnVmZmVyLCBjb3VudCk7CiAKIAlyZXR1cm4gMDsKQEAgLTU0OSwzMSArNTk1LDI4IEBACiB9CiAKIC8qKgotICogb25lbmFuZF9yZWFkX2VjYyAtIFtNVEQgSW50ZXJmYWNlXSBSZWFkIGRhdGEgd2l0aCBFQ0MKKyAqIG9uZW5hbmRfcmVhZCAtIFtNVEQgSW50ZXJmYWNlXSBSZWFkIGRhdGEgZnJvbSBmbGFzaAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBmcm9tCQlvZmZzZXQgdG8gcmVhZCBmcm9tCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAogICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwogICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKLSAqIEBwYXJhbSBvb2JfYnVmCWZpbGVzeXN0ZW0gc3VwcGxpZWQgb29iIGRhdGEgYnVmZmVyCi0gKiBAcGFyYW0gb29ic2VsCW9vYiBzZWxlY3Rpb24gc3RydWN0dXJlCiAgKgotICogT25lTkFORCByZWFkIHdpdGggRUNDCi0gKi8KLXN0YXRpYyBpbnQgb25lbmFuZF9yZWFkX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmLAotCXVfY2hhciAqb29iX2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorICogUmVhZCB3aXRoIGVjYworKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgcmVhZCA9IDAsIGNvbHVtbjsKIAlpbnQgdGhpc2xlbjsKIAlpbnQgcmV0ID0gMDsKIAotCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3JlYWRfZWNjOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF9yZWFkOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKIAogCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3JlYWRfZWNjOiBBdHRlbXB0IHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9yZWFkOiBBdHRlbXB0IHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIpOwogCQkqcmV0bGVuID0gMDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTg0LDE0ICs2MjcsMTQgQEAKIAkvKiBUT0RPIGhhbmRsaW5nIG9vYiAqLwogCiAJd2hpbGUgKHJlYWQgPCBsZW4pIHsKLQkJdGhpc2xlbiA9IG1pbl90KGludCwgbXRkLT5vb2JibG9jaywgbGVuIC0gcmVhZCk7CisJCXRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+d3JpdGVzaXplLCBsZW4gLSByZWFkKTsKIAotCQljb2x1bW4gPSBmcm9tICYgKG10ZC0+b29iYmxvY2sgLSAxKTsKLQkJaWYgKGNvbHVtbiArIHRoaXNsZW4gPiBtdGQtPm9vYmJsb2NrKQotCQkJdGhpc2xlbiA9IG10ZC0+b29iYmxvY2sgLSBjb2x1bW47CisJCWNvbHVtbiA9IGZyb20gJiAobXRkLT53cml0ZXNpemUgLSAxKTsKKwkJaWYgKGNvbHVtbiArIHRoaXNsZW4gPiBtdGQtPndyaXRlc2l6ZSkKKwkJCXRoaXNsZW4gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbHVtbjsKIAogCQlpZiAoIW9uZW5hbmRfY2hlY2tfYnVmZmVycmFtKG10ZCwgZnJvbSkpIHsKLQkJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBmcm9tLCBtdGQtPm9vYmJsb2NrKTsKKwkJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBmcm9tLCBtdGQtPndyaXRlc2l6ZSk7CiAKIAkJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9SRUFESU5HKTsKIAkJCS8qIEZpcnN0IGNvcHkgZGF0YSBhbmQgY2hlY2sgcmV0dXJuIHZhbHVlIGZvciBFQ0MgaGFuZGxpbmcgKi8KQEAgLTYwNiw3ICs2NDksNyBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKHJldCkgewotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZF9lY2M6IHJlYWQgZmFpbGVkID0gJWRcbiIsIHJldCk7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9yZWFkOiByZWFkIGZhaWxlZCA9ICVkXG4iLCByZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtNjI4LDIzICs2NzEsNyBAQAogfQogCiAvKioKLSAqIG9uZW5hbmRfcmVhZCAtIFtNVEQgSW50ZXJmYWNlXSBNVEQgY29tcGFiaWxpdHkgZnVuY3Rpb24gZm9yIG9uZW5hbmRfcmVhZF9lY2MKLSAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcGFyYW0gZnJvbQkJb2Zmc2V0IHRvIHJlYWQgZnJvbQotICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKLSAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKLSAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgb25lbmFuZF9yZWFkX2VjYyB3aXRoIG9vYiBidWZmZXIgYW5kIG9vYnNlbCA9IE5VTEwKLSovCi1zdGF0aWMgaW50IG9uZW5hbmRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQotewotCXJldHVybiBvbmVuYW5kX3JlYWRfZWNjKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgTlVMTCwgTlVMTCk7Ci19Ci0KLS8qKgotICogb25lbmFuZF9yZWFkX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBPbmVOQU5EIHJlYWQgb3V0LW9mLWJhbmQKKyAqIG9uZW5hbmRfZG9fcmVhZF9vb2IgLSBbTVREIEludGVyZmFjZV0gT25lTkFORCByZWFkIG91dC1vZi1iYW5kCiAgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQHBhcmFtIGZyb20JCW9mZnNldCB0byByZWFkIGZyb20KICAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCkBAIC02NTMsOCArNjgwLDggQEAKICAqCiAgKiBPbmVOQU5EIHJlYWQgb3V0LW9mLWJhbmQgZGF0YSBmcm9tIHRoZSBzcGFyZSBhcmVhCiAgKi8KLXN0YXRpYyBpbnQgb25lbmFuZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoraW50IG9uZW5hbmRfZG9fcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHJlYWQgPSAwLCB0aGlzbGVuLCBjb2x1bW47CkBAIC03MDQsNyArNzMxLDcgQEAKIAkJLyogUmVhZCBtb3JlPyAqLwogCQlpZiAocmVhZCA8IGxlbikgewogCQkJLyogUGFnZSBzaXplICovCi0JCQlmcm9tICs9IG10ZC0+b29iYmxvY2s7CisJCQlmcm9tICs9IG10ZC0+d3JpdGVzaXplOwogCQkJY29sdW1uID0gMDsKIAkJfQogCX0KQEAgLTcxNyw4ICs3NDQsNTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIG9uZW5hbmRfcmVhZF9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSBkYXRhIGFuZC9vciBvdXQtb2YtYmFuZAorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCisgKiBAb3BzOglvb2Igb3BlcmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CisKKwlyZXR1cm4gb25lbmFuZF9kb19yZWFkX29vYihtdGQsIGZyb20gKyBvcHMtPm9vYm9mZnMsIG9wcy0+bGVuLAorCQkJCSAgICZvcHMtPnJldGxlbiwgb3BzLT5vb2JidWYpOworfQorCiAjaWZkZWYgQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURQogLyoqCisgKiBvbmVuYW5kX3ZlcmlmeV9vb2IgLSBbR0VORVJJQ10gdmVyaWZ5IHRoZSBvb2IgY29udGVudHMgYWZ0ZXIgYSB3cml0ZQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHZlcmlmeQorICogQHBhcmFtIHRvCQlvZmZzZXQgdG8gcmVhZCBmcm9tCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBhbmQgY29tcGFyZQorICoKKyAqLworc3RhdGljIGludCBvbmVuYW5kX3ZlcmlmeV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBsb2ZmX3QgdG8sIGludCBsZW4pCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwljaGFyICpyZWFkcCA9IHRoaXMtPnBhZ2VfYnVmOworCWludCBjb2x1bW4gPSB0byAmIChtdGQtPm9vYnNpemUgLSAxKTsKKwlpbnQgc3RhdHVzLCBpOworCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQURPT0IsIHRvLCBtdGQtPm9vYnNpemUpOworCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIHRvLCAwKTsKKwlzdGF0dXMgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCXRoaXMtPnJlYWRfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgcmVhZHAsIGNvbHVtbiwgbGVuKTsKKworCWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IDB4RkYgJiYgYnVmW2ldICE9IHJlYWRwW2ldKQorCQkJcmV0dXJuIC1FQkFETVNHOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogb25lbmFuZF92ZXJpZnlfcGFnZSAtIFtHRU5FUklDXSB2ZXJpZnkgdGhlIGNoaXAgY29udGVudHMgYWZ0ZXIgYSB3cml0ZQogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHZlcmlmeQpAQCAtNzMxLDcgKzgwMyw3IEBACiAJdm9pZCBfX2lvbWVtICpkYXRhcmFtMCwgKmRhdGFyYW0xOwogCWludCByZXQgPSAwOwogCi0JdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQsIGFkZHIsIG10ZC0+b29iYmxvY2spOworCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBhZGRyLCBtdGQtPndyaXRlc2l6ZSk7CiAKIAlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CiAJaWYgKHJldCkKQEAgLTc0MSw1MyArODEzLDUxIEBACiAKIAkvKiBDaGVjaywgaWYgdGhlIHR3byBkYXRhcmFtIGFyZWFzIGFyZSBzYW1lICovCiAJZGF0YXJhbTAgPSB0aGlzLT5iYXNlICsgT05FTkFORF9EQVRBUkFNOwotCWRhdGFyYW0xID0gZGF0YXJhbTAgKyBtdGQtPm9vYmJsb2NrOworCWRhdGFyYW0xID0gZGF0YXJhbTAgKyBtdGQtPndyaXRlc2l6ZTsKIAotCWlmIChtZW1jbXAoZGF0YXJhbTAsIGRhdGFyYW0xLCBtdGQtPm9vYmJsb2NrKSkKKwlpZiAobWVtY21wKGRhdGFyYW0wLCBkYXRhcmFtMSwgbXRkLT53cml0ZXNpemUpKQogCQlyZXR1cm4gLUVCQURNU0c7CiAKIAlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIG9uZW5hbmRfdmVyaWZ5X3BhZ2UoLi4uKQkoMCkKKyNkZWZpbmUgb25lbmFuZF92ZXJpZnlfb29iKC4uLikJCSgwKQogI2VuZGlmCiAKLSNkZWZpbmUgTk9UQUxJR05FRCh4KQkoKHggJiAobXRkLT5vb2JibG9jayAtIDEpKSAhPSAwKQorI2RlZmluZSBOT1RBTElHTkVEKHgpCSgoeCAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKSAhPSAwKQogCiAvKioKLSAqIG9uZW5hbmRfd3JpdGVfZWNjIC0gW01URCBJbnRlcmZhY2VdIE9uZU5BTkQgd3JpdGUgd2l0aCBFQ0MKKyAqIG9uZW5hbmRfd3JpdGUgLSBbTVREIEludGVyZmFjZV0gd3JpdGUgYnVmZmVyIHRvIEZMQVNICiAgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQHBhcmFtIHRvCQlvZmZzZXQgdG8gd3JpdGUgdG8KICAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byB3cml0ZQogICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwogICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGEgdG8gd3JpdGUKLSAqIEBwYXJhbSBlY2NidWYJZmlsZXN5c3RlbSBzdXBwbGllZCBvb2IgZGF0YSBidWZmZXIKLSAqIEBwYXJhbSBvb2JzZWwJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKICAqCi0gKiBPbmVOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBXcml0ZSB3aXRoIEVDQwogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfd3JpdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLAotCXVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCitzdGF0aWMgaW50IG9uZW5hbmRfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgd3JpdHRlbiA9IDA7CiAJaW50IHJldCA9IDA7CiAKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF93cml0ZV9lY2M6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfd3JpdGU6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CiAKIAkvKiBJbml0aWFsaXplIHJldGxlbiwgaW4gY2FzZSBvZiBlYXJseSBleGl0ICovCiAJKnJldGxlbiA9IDA7CiAKIAkvKiBEbyBub3QgYWxsb3cgd3JpdGVzIHBhc3QgZW5kIG9mIGRldmljZSAqLwogCWlmICh1bmxpa2VseSgodG8gKyBsZW4pID4gbXRkLT5zaXplKSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgd3JpdGUgdG8gcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGU6IEF0dGVtcHQgd3JpdGUgdG8gcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogUmVqZWN0IHdyaXRlcywgd2hpY2ggYXJlIG5vdCBwYWdlIGFsaWduZWQgKi8KICAgICAgICAgaWYgKHVubGlrZWx5KE5PVEFMSUdORUQodG8pKSB8fCB1bmxpa2VseShOT1RBTElHTkVEKGxlbikpKSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGVfZWNjOiBBdHRlbXB0IHRvIHdyaXRlIG5vdCBwYWdlIGFsaWduZWQgZGF0YVxuIik7CisgICAgICAgICAgICAgICAgREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGU6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICAgICAgfQogCkBAIC03OTYsMjAgKzg2NiwyMCBAQAogCiAJLyogTG9vcCB1bnRpbCBhbGwgZGF0YSB3cml0ZSAqLwogCXdoaWxlICh3cml0dGVuIDwgbGVuKSB7Ci0JCWludCB0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPm9vYmJsb2NrLCBsZW4gLSB3cml0dGVuKTsKKwkJaW50IHRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+d3JpdGVzaXplLCBsZW4gLSB3cml0dGVuKTsKIAotCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgbXRkLT5vb2JibG9jayk7CisJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9CVUZGRVJSQU0sIHRvLCBtdGQtPndyaXRlc2l6ZSk7CiAKIAkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9EQVRBUkFNLCBidWYsIDAsIHRoaXNsZW4pOwogCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCBmZmNoYXJzLCAwLCBtdGQtPm9vYnNpemUpOwogCi0JCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9QUk9HLCB0bywgbXRkLT5vb2JibG9jayk7CisJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9QUk9HLCB0bywgbXRkLT53cml0ZXNpemUpOwogCiAJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIHRvLCAxKTsKIAogCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfV1JJVElORyk7CiAJCWlmIChyZXQpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX2VjYzogd3JpdGUgZmlsYWVkICVkXG4iLCByZXQpOworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGU6IHdyaXRlIGZpbGFlZCAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTgxOCw3ICs4ODgsNyBAQAogCQkvKiBPbmx5IGNoZWNrIHZlcmlmeSB3cml0ZSB0dXJuIG9uICovCiAJCXJldCA9IG9uZW5hbmRfdmVyaWZ5X3BhZ2UobXRkLCAodV9jaGFyICopIGJ1ZiwgdG8pOwogCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZV9lY2M6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZTogdmVyaWZ5IGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTgzOSwyNCArOTA5LDcgQEAKIH0KIAogLyoqCi0gKiBvbmVuYW5kX3dyaXRlIC0gW01URCBJbnRlcmZhY2VdIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBvbmVuYW5kX3dyaXRlX2VjYwotICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKLSAqIEBwYXJhbSBidWYJCXRoZSBkYXRhIHRvIHdyaXRlCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgb25lbmFuZF93cml0ZV9lY2MKLSAqIHdpdGggb29iIGJ1ZmZlciBhbmQgb29ic2VsID0gTlVMTAotICovCi1zdGF0aWMgaW50IG9uZW5hbmRfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCi17Ci0JcmV0dXJuIG9uZW5hbmRfd3JpdGVfZWNjKG10ZCwgdG8sIGxlbiwgcmV0bGVuLCBidWYsIE5VTEwsIE5VTEwpOwotfQotCi0vKioKLSAqIG9uZW5hbmRfd3JpdGVfb29iIC0gW01URCBJbnRlcmZhY2VdIE9uZU5BTkQgd3JpdGUgb3V0LW9mLWJhbmQKKyAqIG9uZW5hbmRfZG9fd3JpdGVfb29iIC0gW0ludGVybmFsXSBPbmVOQU5EIHdyaXRlIG91dC1vZi1iYW5kCiAgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQHBhcmFtIHRvCQlvZmZzZXQgdG8gd3JpdGUgdG8KICAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byB3cml0ZQpAQCAtODY1LDExICs5MTgsMTEgQEAKICAqCiAgKiBPbmVOQU5EIHdyaXRlIG91dC1vZi1iYW5kCiAgKi8KLXN0YXRpYyBpbnQgb25lbmFuZF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCitzdGF0aWMgaW50IG9uZW5hbmRfZG9fd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJCQkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IGNvbHVtbiwgc3RhdHVzOworCWludCBjb2x1bW4sIHJldCA9IDA7CiAJaW50IHdyaXR0ZW4gPSAwOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfd3JpdGVfb29iOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOwpAQCAtODk0LDE2ICs5NDcsMjcgQEAKIAogCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgbXRkLT5vb2JzaXplKTsKIAotCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCBmZmNoYXJzLCAwLCBtdGQtPm9vYnNpemUpOwotCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCBidWYsIGNvbHVtbiwgdGhpc2xlbik7CisJCS8qIFdlIHNlbmQgZGF0YSB0byBzcGFyZSByYW0gd2l0aCBvb2JzaXplCisJCSAqIHRvIHByZXZlbnQgYnl0ZSBhY2Nlc3MgKi8KKwkJbWVtc2V0KHRoaXMtPnBhZ2VfYnVmLCAweGZmLCBtdGQtPm9vYnNpemUpOworCQltZW1jcHkodGhpcy0+cGFnZV9idWYgKyBjb2x1bW4sIGJ1ZiwgdGhpc2xlbik7CisJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIHRoaXMtPnBhZ2VfYnVmLCAwLCBtdGQtPm9vYnNpemUpOwogCiAJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9QUk9HT09CLCB0bywgbXRkLT5vb2JzaXplKTsKIAogCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgMCk7CiAKLQkJc3RhdHVzID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOwotCQlpZiAoc3RhdHVzKQorCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfV1JJVElORyk7CisJCWlmIChyZXQpIHsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX29vYjogd3JpdGUgZmlsYWVkICVkXG4iLCByZXQpOwogCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvbmVuYW5kX3ZlcmlmeV9vb2IobXRkLCBidWYsIHRvLCB0aGlzbGVuKTsKKwkJaWYgKHJldCkgeworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGVfb29iOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KIAogCQl3cml0dGVuICs9IHRoaXNsZW47CiAKQEAgLTkyMCwxNDUgKzk4NCwyMiBAQAogCiAJKnJldGxlbiA9IHdyaXR0ZW47CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIG9uZW5hbmRfd3JpdGV2X2VjYyAtIFtNVEQgSW50ZXJmYWNlXSB3cml0ZSB3aXRoIGlvdmVjIHdpdGggZWNjCi0gKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHBhcmFtIHZlY3MJCXRoZSBpb3ZlY3RvcnMgdG8gd3JpdGUKLSAqIEBwYXJhbSBjb3VudAkJbnVtYmVyIG9mIHZlY3RvcnMKLSAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAcGFyYW0gZWNjYnVmCWZpbGVzeXN0ZW0gc3VwcGxpZWQgb29iIGRhdGEgYnVmZmVyCi0gKiBAcGFyYW0gb29ic2VsCW9vYiBzZWxlY3Rpb24gc3RydWN0dXJlCi0gKgotICogT25lTkFORCB3cml0ZSB3aXRoIGlvdmVjIHdpdGggZWNjCisgKiBvbmVuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIGRhdGEgYW5kL29yIG91dC1vZi1iYW5kCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KKyAqIEBvcHM6CW9vYiBvcGVyYXRpb24gZGVzY3JpcHRpb24gc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbnQgb25lbmFuZF93cml0ZXZfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuLAotCXVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCitzdGF0aWMgaW50IG9uZW5hbmRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewotCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JdW5zaWduZWQgY2hhciAqcGJ1ZjsKLQlzaXplX3QgdG90YWxfbGVuLCBsZW47Ci0JaW50IGksIHdyaXR0ZW4gPSAwOwotCWludCByZXQgPSAwOworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CiAKLQkvKiBQcmVzZXQgd3JpdHRlbiBsZW4gZm9yIGVhcmx5IGV4aXQgKi8KLQkqcmV0bGVuID0gMDsKLQotCS8qIENhbGN1bGF0ZSB0b3RhbCBsZW5ndGggb2YgZGF0YSAqLwotCXRvdGFsX2xlbiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXRvdGFsX2xlbiArPSB2ZWNzW2ldLmlvdl9sZW47Ci0KLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF93cml0ZXZfZWNjOiB0byA9IDB4JTA4eCwgbGVuID0gJWksIGNvdW50ID0gJWxkXG4iLCAodW5zaWduZWQgaW50KSB0bywgKHVuc2lnbmVkIGludCkgdG90YWxfbGVuLCBjb3VudCk7Ci0KLQkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgdGhlIGRldmljZSAqLwotCWlmICh1bmxpa2VseSgodG8gKyB0b3RhbF9sZW4pID4gbXRkLT5zaXplKSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZXZfZWNjOiBBdHRlbXB0ZWQgd3JpdGUgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogUmVqZWN0IHdyaXRlcywgd2hpY2ggYXJlIG5vdCBwYWdlIGFsaWduZWQgKi8KLSAgICAgICAgaWYgKHVubGlrZWx5KE5PVEFMSUdORUQodG8pKSB8fCB1bmxpa2VseShOT1RBTElHTkVEKHRvdGFsX2xlbikpKSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGV2X2VjYzogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9XUklUSU5HKTsKLQotCS8qIFRPRE8gaGFuZGxpbmcgb29iICovCi0KLQkvKiBMb29wIHVudGlsIGFsbCBrZXZlJ3MgZGF0YSBoYXMgYmVlbiB3cml0dGVuICovCi0JbGVuID0gMDsKLQl3aGlsZSAoY291bnQpIHsKLQkJcGJ1ZiA9IHRoaXMtPnBhZ2VfYnVmOwotCQkvKgotCQkgKiBJZiB0aGUgZ2l2ZW4gdHVwbGUgaXMgPj0gcGFnZXNpemUgdGhlbgotCQkgKiB3cml0ZSBpdCBvdXQgZnJvbSB0aGUgaW92Ci0JCSAqLwotCQlpZiAoKHZlY3MtPmlvdl9sZW4gLSBsZW4pID49IG10ZC0+b29iYmxvY2spIHsKLQkJCXBidWYgPSB2ZWNzLT5pb3ZfYmFzZSArIGxlbjsKLQotCQkJbGVuICs9IG10ZC0+b29iYmxvY2s7Ci0KLQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCB0dXBsZSAqLwotCQkJaWYgKGxlbiA+PSAoaW50KSB2ZWNzLT5pb3ZfbGVuKSB7Ci0JCQkJdmVjcysrOwotCQkJCWxlbiA9IDA7Ci0JCQkJY291bnQtLTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWludCBjbnQgPSAwLCB0aGlzbGVuOwotCQkJd2hpbGUgKGNudCA8IG10ZC0+b29iYmxvY2spIHsKLQkJCQl0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPm9vYmJsb2NrIC0gY250LCB2ZWNzLT5pb3ZfbGVuIC0gbGVuKTsKLQkJCQltZW1jcHkodGhpcy0+cGFnZV9idWYgKyBjbnQsIHZlY3MtPmlvdl9iYXNlICsgbGVuLCB0aGlzbGVuKTsKLQkJCQljbnQgKz0gdGhpc2xlbjsKLQkJCQlsZW4gKz0gdGhpc2xlbjsKLQotCQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCB0dXBsZSAqLwotCQkJCWlmIChsZW4gPj0gKGludCkgdmVjcy0+aW92X2xlbikgewotCQkJCQl2ZWNzKys7Ci0JCQkJCWxlbiA9IDA7Ci0JCQkJCWNvdW50LS07Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0JVRkZFUlJBTSwgdG8sIG10ZC0+b29iYmxvY2spOwotCi0JCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfREFUQVJBTSwgcGJ1ZiwgMCwgbXRkLT5vb2JibG9jayk7Ci0JCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIGZmY2hhcnMsIDAsIG10ZC0+b29ic2l6ZSk7Ci0KLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1BST0csIHRvLCBtdGQtPm9vYmJsb2NrKTsKLQotCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgMSk7Ci0KLQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOwotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZXZfZWNjOiB3cml0ZSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0KLQkJLyogT25seSBjaGVjayB2ZXJpZnkgd3JpdGUgdHVybiBvbiAqLwotCQlyZXQgPSBvbmVuYW5kX3ZlcmlmeV9wYWdlKG10ZCwgKHVfY2hhciAqKSBwYnVmLCB0byk7Ci0JCWlmIChyZXQpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRldl9lY2M6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXdyaXR0ZW4gKz0gbXRkLT5vb2JibG9jazsKLQotCQl0byArPSBtdGQtPm9vYmJsb2NrOwotCX0KLQotb3V0OgotCS8qIERlc2VsZWN0IGFuZCB3YWt0IHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KLQlvbmVuYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7Ci0KLQkqcmV0bGVuID0gd3JpdHRlbjsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG9uZW5hbmRfd3JpdGV2IC0gW01URCBJbnRlcmZhY2VdIGNvbXBhYmlsdHkgZnVuY3Rpb24gZm9yIG9uZW5hbmRfd3JpdGV2X2VjYwotICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSB2ZWNzCQl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAcGFyYW0gY291bnQJCW51bWJlciBvZiB2ZWN0b3JzCi0gKiBAcGFyYW0gdG8JCW9mZnNldCB0byB3cml0ZSB0bwotICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICoKLSAqIE9uZU5BTkQgd3JpdGUgd2l0aCBrdmVjLiBUaGlzIGp1c3QgY2FsbHMgdGhlIGVjYyBmdW5jdGlvbgotICovCi1zdGF0aWMgaW50IG9uZW5hbmRfd3JpdGV2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuKQotewotCXJldHVybiBvbmVuYW5kX3dyaXRldl9lY2MobXRkLCB2ZWNzLCBjb3VudCwgdG8sIHJldGxlbiwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIG9uZW5hbmRfZG9fd3JpdGVfb29iKG10ZCwgdG8gKyBvcHMtPm9vYm9mZnMsIG9wcy0+bGVuLAorCQkJCSAgICAmb3BzLT5yZXRsZW4sIG9wcy0+b29iYnVmKTsKIH0KIAogLyoqCkBAIC0xMjI3LDcgKzExNjgsNyBAQAogCiAgICAgICAgIC8qIFdlIHdyaXRlIHR3byBieXRlcywgc28gd2UgZG9udCBoYXZlIHRvIG1lc3Mgd2l0aCAxNiBiaXQgYWNjZXNzICovCiAgICAgICAgIG9mcyArPSBtdGQtPm9vYnNpemUgKyAoYmJtLT5iYWRibG9ja3BvcyAmIH4weDAxKTsKLSAgICAgICAgcmV0dXJuIG10ZC0+d3JpdGVfb29iKG10ZCwgb2ZzICwgMiwgJnJldGxlbiwgYnVmKTsKKyAgICAgICAgcmV0dXJuIG9uZW5hbmRfZG9fd3JpdGVfb29iKG10ZCwgb2ZzICwgMiwgJnJldGxlbiwgYnVmKTsKIH0KIAogLyoqCkBAIC0xMzI0LDYgKzEyNjUsMzA0IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTVREX09ORU5BTkRfT1RQCisKKy8qIEludGVyYWwgT1RQIG9wZXJhdGlvbiAqLwordHlwZWRlZiBpbnQgKCpvdHBfb3BfdCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmb3JtLCBzaXplX3QgbGVuLAorCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOworCisvKioKKyAqIGRvX290cF9yZWFkIC0gW0RFRkFVTFRdIFJlYWQgT1RQIGJsb2NrIGFyZWEKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJVGhlIG9mZnNldCB0byByZWFkCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZGJ5dGVzCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqCisgKiBSZWFkIE9UUCBibG9jayBhcmVhLgorICovCitzdGF0aWMgaW50IGRvX290cF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IHJldDsKKworCS8qIEVudGVyIE9UUCBhY2Nlc3MgbW9kZSAqLworCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9PVFBfQUNDRVNTLCAwLCAwKTsKKwl0aGlzLT53YWl0KG10ZCwgRkxfT1RQSU5HKTsKKworCXJldCA9IG10ZC0+cmVhZChtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYpOworCisJLyogRXhpdCBPVFAgYWNjZXNzIG1vZGUgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVTRVQsIDAsIDApOworCXRoaXMtPndhaXQobXRkLCBGTF9SRVNFVElORyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRvX290cF93cml0ZSAtIFtERUZBVUxUXSBXcml0ZSBPVFAgYmxvY2sgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIHdyaXRlCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXRlIGJ5dGVzCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqCisgKiBXcml0ZSBPVFAgYmxvY2sgYXJlYS4KKyAqLworc3RhdGljIGludCBkb19vdHBfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBjaGFyICpwYnVmID0gYnVmOworCWludCByZXQ7CisKKwkvKiBGb3JjZSBidWZmZXIgcGFnZSBhbGlnbmVkICovCisJaWYgKGxlbiA8IG10ZC0+d3JpdGVzaXplKSB7CisJCW1lbWNweSh0aGlzLT5wYWdlX2J1ZiwgYnVmLCBsZW4pOworCQltZW1zZXQodGhpcy0+cGFnZV9idWYgKyBsZW4sIDB4ZmYsIG10ZC0+d3JpdGVzaXplIC0gbGVuKTsKKwkJcGJ1ZiA9IHRoaXMtPnBhZ2VfYnVmOworCQlsZW4gPSBtdGQtPndyaXRlc2l6ZTsKKwl9CisKKwkvKiBFbnRlciBPVFAgYWNjZXNzIG1vZGUgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfT1RQX0FDQ0VTUywgMCwgMCk7CisJdGhpcy0+d2FpdChtdGQsIEZMX09UUElORyk7CisKKwlyZXQgPSBtdGQtPndyaXRlKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIHBidWYpOworCisJLyogRXhpdCBPVFAgYWNjZXNzIG1vZGUgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVTRVQsIDAsIDApOworCXRoaXMtPndhaXQobXRkLCBGTF9SRVNFVElORyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRvX290cF9sb2NrIC0gW0RFRkFVTFRdIExvY2sgT1RQIGJsb2NrIGFyZWEKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJVGhlIG9mZnNldCB0byBsb2NrCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gbG9jaworICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgbG9jayBieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKgorICogTG9jayBPVFAgYmxvY2sgYXJlYS4KKyAqLworc3RhdGljIGludCBkb19vdHBfbG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCByZXQ7CisKKwkvKiBFbnRlciBPVFAgYWNjZXNzIG1vZGUgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfT1RQX0FDQ0VTUywgMCwgMCk7CisJdGhpcy0+d2FpdChtdGQsIEZMX09UUElORyk7CisKKwlyZXQgPSBvbmVuYW5kX2RvX3dyaXRlX29vYihtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYpOworCisJLyogRXhpdCBPVFAgYWNjZXNzIG1vZGUgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVTRVQsIDAsIDApOworCXRoaXMtPndhaXQobXRkLCBGTF9SRVNFVElORyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG9uZW5hbmRfb3RwX3dhbGsgLSBbREVGQVVMVF0gSGFuZGxlIE9UUCBvcGVyYXRpb24KKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJVGhlIG9mZnNldCB0byByZWFkL3dyaXRlCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC93cml0ZQorICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKiBAcGFyYW0gYWN0aW9uCWRvIGdpdmVuIGFjdGlvbgorICogQHBhcmFtIG1vZGUJCXNwZWNpZnkgdXNlciBhbmQgZmFjdG9yeQorICoKKyAqIEhhbmRsZSBPVFAgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW50IG9uZW5hbmRfb3RwX3dhbGsoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmLAorCQkJb3RwX29wX3QgYWN0aW9uLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBvdHBfcGFnZXM7CisJaW50IGRlbnNpdHk7CisJaW50IHJldCA9IDA7CisKKwkqcmV0bGVuID0gMDsKKworCWRlbnNpdHkgPSB0aGlzLT5kZXZpY2VfaWQgPj4gT05FTkFORF9ERVZJQ0VfREVOU0lUWV9TSElGVDsKKwlpZiAoZGVuc2l0eSA8IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfNTEyTWIpCisJCW90cF9wYWdlcyA9IDIwOworCWVsc2UKKwkJb3RwX3BhZ2VzID0gMTA7CisKKwlpZiAobW9kZSA9PSBNVERfT1RQX0ZBQ1RPUlkpIHsKKwkJZnJvbSArPSBtdGQtPndyaXRlc2l6ZSAqIG90cF9wYWdlczsKKwkJb3RwX3BhZ2VzID0gNjQgLSBvdHBfcGFnZXM7CisJfQorCisJLyogQ2hlY2sgVXNlci9GYWN0b3J5IGJvdW5kYXJ5ICovCisJaWYgKCgobXRkLT53cml0ZXNpemUgKiBvdHBfcGFnZXMpIC0gKGZyb20gKyBsZW4pKSA8IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKGxlbiA+IDAgJiYgb3RwX3BhZ2VzID4gMCkgeworCQlpZiAoIWFjdGlvbikgewkvKiBPVFAgSW5mbyBmdW5jdGlvbnMgKi8KKwkJCXN0cnVjdCBvdHBfaW5mbyAqb3RwaW5mbzsKKworCQkJbGVuIC09IHNpemVvZihzdHJ1Y3Qgb3RwX2luZm8pOworCQkJaWYgKGxlbiA8PSAwKQorCQkJCXJldHVybiAtRU5PU1BDOworCisJCQlvdHBpbmZvID0gKHN0cnVjdCBvdHBfaW5mbyAqKSBidWY7CisJCQlvdHBpbmZvLT5zdGFydCA9IGZyb207CisJCQlvdHBpbmZvLT5sZW5ndGggPSBtdGQtPndyaXRlc2l6ZTsKKwkJCW90cGluZm8tPmxvY2tlZCA9IDA7CisKKwkJCWZyb20gKz0gbXRkLT53cml0ZXNpemU7CisJCQlidWYgKz0gc2l6ZW9mKHN0cnVjdCBvdHBfaW5mbyk7CisJCQkqcmV0bGVuICs9IHNpemVvZihzdHJ1Y3Qgb3RwX2luZm8pOworCQl9IGVsc2UgeworCQkJc2l6ZV90IHRtcF9yZXRsZW47CisJCQlpbnQgc2l6ZSA9IGxlbjsKKworCQkJcmV0ID0gYWN0aW9uKG10ZCwgZnJvbSwgbGVuLCAmdG1wX3JldGxlbiwgYnVmKTsKKworCQkJYnVmICs9IHNpemU7CisJCQlsZW4gLT0gc2l6ZTsKKwkJCSpyZXRsZW4gKz0gc2l6ZTsKKworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlvdHBfcGFnZXMtLTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbmVuYW5kX2dldF9mYWN0X3Byb3RfaW5mbyAtIFtNVEQgSW50ZXJmYWNlXSBSZWFkIGZhY3RvcnkgT1RQIGluZm8KKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCisgKgorICogUmVhZCBmYWN0b3J5IE9UUCBpbmZvLgorICovCitzdGF0aWMgaW50IG9uZW5hbmRfZ2V0X2ZhY3RfcHJvdF9pbmZvKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJc3RydWN0IG90cF9pbmZvICpidWYsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgcmV0OworCisJcmV0ID0gb25lbmFuZF9vdHBfd2FsayhtdGQsIDAsIGxlbiwgJnJldGxlbiwgKHVfY2hhciAqKSBidWYsIE5VTEwsIE1URF9PVFBfRkFDVE9SWSk7CisKKwlyZXR1cm4gcmV0ID8gOiByZXRsZW47Cit9CisKKy8qKgorICogb25lbmFuZF9yZWFkX2ZhY3RfcHJvdF9yZWcgLSBbTVREIEludGVyZmFjZV0gUmVhZCBmYWN0b3J5IE9UUCBhcmVhCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gcmVhZAorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKKyAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dC9nZXQgZGF0YQorICoKKyAqIFJlYWQgZmFjdG9yeSBPVFAgYXJlYS4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX3JlYWRfZmFjdF9wcm90X3JlZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQlzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJcmV0dXJuIG9uZW5hbmRfb3RwX3dhbGsobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmLCBkb19vdHBfcmVhZCwgTVREX09UUF9GQUNUT1JZKTsKK30KKworLyoqCisgKiBvbmVuYW5kX2dldF91c2VyX3Byb3RfaW5mbyAtIFtNVEQgSW50ZXJmYWNlXSBSZWFkIHVzZXIgT1RQIGluZm8KKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCisgKgorICogUmVhZCB1c2VyIE9UUCBpbmZvLgorICovCitzdGF0aWMgaW50IG9uZW5hbmRfZ2V0X3VzZXJfcHJvdF9pbmZvKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJc3RydWN0IG90cF9pbmZvICpidWYsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgcmV0OworCisJcmV0ID0gb25lbmFuZF9vdHBfd2FsayhtdGQsIDAsIGxlbiwgJnJldGxlbiwgKHVfY2hhciAqKSBidWYsIE5VTEwsIE1URF9PVFBfVVNFUik7CisKKwlyZXR1cm4gcmV0ID8gOiByZXRsZW47Cit9CisKKy8qKgorICogb25lbmFuZF9yZWFkX3VzZXJfcHJvdF9yZWcgLSBbTVREIEludGVyZmFjZV0gUmVhZCB1c2VyIE9UUCBhcmVhCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gcmVhZAorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKKyAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dC9nZXQgZGF0YQorICoKKyAqIFJlYWQgdXNlciBPVFAgYXJlYS4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX3JlYWRfdXNlcl9wcm90X3JlZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQlzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJcmV0dXJuIG9uZW5hbmRfb3RwX3dhbGsobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmLCBkb19vdHBfcmVhZCwgTVREX09UUF9VU0VSKTsKK30KKworLyoqCisgKiBvbmVuYW5kX3dyaXRlX3VzZXJfcHJvdF9yZWcgLSBbTVREIEludGVyZmFjZV0gV3JpdGUgdXNlciBPVFAgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIHdyaXRlCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXRlIGJ5dGVzCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqCisgKiBXcml0ZSB1c2VyIE9UUCBhcmVhLgorICovCitzdGF0aWMgaW50IG9uZW5hbmRfd3JpdGVfdXNlcl9wcm90X3JlZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQlzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJcmV0dXJuIG9uZW5hbmRfb3RwX3dhbGsobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmLCBkb19vdHBfd3JpdGUsIE1URF9PVFBfVVNFUik7Cit9CisKKy8qKgorICogb25lbmFuZF9sb2NrX3VzZXJfcHJvdF9yZWcgLSBbTVREIEludGVyZmFjZV0gTG9jayB1c2VyIE9UUCBhcmVhCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gbG9jaworICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHVubG9jaworICoKKyAqIFdyaXRlIGxvY2sgbWFyayBvbiBzcGFyZSBhcmVhIGluIHBhZ2UgMCBpbiBPVFAgYmxvY2sKKyAqLworc3RhdGljIGludCBvbmVuYW5kX2xvY2tfdXNlcl9wcm90X3JlZyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQlzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgb29iX2J1Zls2NF07CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgcmV0OworCisJbWVtc2V0KG9vYl9idWYsIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CisJLyoKKwkgKiBOb3RlOiBPVFAgbG9jayBvcGVyYXRpb24KKwkgKiAgICAgICBPVFAgYmxvY2sgOiAweFhYRkMKKwkgKiAgICAgICAxc3QgYmxvY2sgOiAweFhYRjMgKElmIGNoaXAgc3VwcG9ydCkKKwkgKiAgICAgICBCb3RoICAgICAgOiAweFhYRjAgKElmIGNoaXAgc3VwcG9ydCkKKwkgKi8KKwlvb2JfYnVmW09ORU5BTkRfT1RQX0xPQ0tfT0ZGU0VUXSA9IDB4RkM7CisKKwkvKgorCSAqIFdyaXRlIGxvY2sgbWFyayB0byA4dGggd29yZCBvZiBzZWN0b3IwIG9mIHBhZ2UwIG9mIHRoZSBzcGFyZTAuCisJICogV2Ugd3JpdGUgMTYgYnl0ZXMgc3BhcmUgYXJlYSBpbnN0ZWFkIG9mIDIgYnl0ZXMuCisJICovCisJZnJvbSA9IDA7CisJbGVuID0gMTY7CisKKwlyZXQgPSBvbmVuYW5kX290cF93YWxrKG10ZCwgZnJvbSwgbGVuLCAmcmV0bGVuLCBvb2JfYnVmLCBkb19vdHBfbG9jaywgTVREX09UUF9VU0VSKTsKKworCXJldHVybiByZXQgPyA6IHJldGxlbjsKK30KKyNlbmRpZgkvKiBDT05GSUdfTVREX09ORU5BTkRfT1RQICovCisKIC8qKgogICogb25lbmFuZF9wcmludF9kZXZpY2VfaW5mbyAtIFByaW50IGRldmljZSBJRAogICogQHBhcmFtIGRldmljZSAgICAgICAgZGV2aWNlIElECkBAIC0xNDIzLDE1ICsxNjYyLDE1IEBACiAKIAkvKiBPbmVOQU5EIHBhZ2Ugc2l6ZSAmIGJsb2NrIHNpemUgKi8KIAkvKiBUaGUgZGF0YSBidWZmZXIgc2l6ZSBpcyBlcXVhbCB0byBwYWdlIHNpemUgKi8KLQltdGQtPm9vYmJsb2NrID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19EQVRBX0JVRkZFUl9TSVpFKTsKLQltdGQtPm9vYnNpemUgPSBtdGQtPm9vYmJsb2NrID4+IDU7CisJbXRkLT53cml0ZXNpemUgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0RBVEFfQlVGRkVSX1NJWkUpOworCW10ZC0+b29ic2l6ZSA9IG10ZC0+d3JpdGVzaXplID4+IDU7CiAJLyogUGFnZXJzIHBlciBibG9jayBpcyBhbHdheXMgNjQgaW4gT25lTkFORCAqLwotCW10ZC0+ZXJhc2VzaXplID0gbXRkLT5vb2JibG9jayA8PCA2OworCW10ZC0+ZXJhc2VzaXplID0gbXRkLT53cml0ZXNpemUgPDwgNjsKIAogCXRoaXMtPmVyYXNlX3NoaWZ0ID0gZmZzKG10ZC0+ZXJhc2VzaXplKSAtIDE7Ci0JdGhpcy0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPm9vYmJsb2NrKSAtIDE7CisJdGhpcy0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPndyaXRlc2l6ZSkgLSAxOwogCXRoaXMtPnBwYl9zaGlmdCA9ICh0aGlzLT5lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwotCXRoaXMtPnBhZ2VfbWFzayA9IChtdGQtPmVyYXNlc2l6ZSAvIG10ZC0+b29iYmxvY2spIC0gMTsKKwl0aGlzLT5wYWdlX21hc2sgPSAobXRkLT5lcmFzZXNpemUgLyBtdGQtPndyaXRlc2l6ZSkgLSAxOwogCiAJLyogUkVWSVNUOiBNdWx0aWNoaXAgaGFuZGxpbmcgKi8KIApAQCAtMTQ3NSw3ICsxNzE0LDYgQEAKIAkJCQkiaW4gc3VzcGVuZGVkIHN0YXRlXG4iKTsKIH0KIAotCiAvKioKICAqIG9uZW5hbmRfc2NhbiAtIFtPbmVOQU5EIEludGVyZmFjZV0gU2NhbiBmb3IgdGhlIE9uZU5BTkQgZGV2aWNlCiAgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTUyMiw3ICsxNzYwLDcgQEAKIAkvKiBBbGxvY2F0ZSBidWZmZXJzLCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoIXRoaXMtPnBhZ2VfYnVmKSB7CiAJCXNpemVfdCBsZW47Ci0JCWxlbiA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7CisJCWxlbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplOwogCQl0aGlzLT5wYWdlX2J1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0aGlzLT5wYWdlX2J1ZikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3NjYW4oKTogQ2FuJ3QgYWxsb2NhdGUgcGFnZV9idWZcbiIpOwpAQCAtMTUzNyw0MCArMTc3NSw0MiBAQAogCiAJc3dpdGNoIChtdGQtPm9vYnNpemUpIHsKIAljYXNlIDY0OgotCQl0aGlzLT5hdXRvb29iID0gJm9uZW5hbmRfb29iXzY0OworCQl0aGlzLT5lY2NsYXlvdXQgPSAmb25lbmFuZF9vb2JfNjQ7CiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKLQkJdGhpcy0+YXV0b29vYiA9ICZvbmVuYW5kX29vYl8zMjsKKwkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzMyOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIE9PQiBzY2hlbWUgZGVmaW5lZCBmb3Igb29ic2l6ZSAlZFxuIiwKIAkJCW10ZC0+b29ic2l6ZSk7CiAJCS8qIFRvIHByZXZlbnQga2VybmVsIG9vcHMgKi8KLQkJdGhpcy0+YXV0b29vYiA9ICZvbmVuYW5kX29vYl8zMjsKKwkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzMyOwogCQlicmVhazsKIAl9CiAKLQltZW1jcHkoJm10ZC0+b29iaW5mbywgdGhpcy0+YXV0b29vYiwgc2l6ZW9mKG10ZC0+b29iaW5mbykpOworCW10ZC0+ZWNjbGF5b3V0ID0gdGhpcy0+ZWNjbGF5b3V0OwogCiAJLyogRmlsbCBpbiByZW1haW5pbmcgTVREIGRyaXZlciBkYXRhICovCiAJbXRkLT50eXBlID0gTVREX05BTkRGTEFTSDsKLQltdGQtPmZsYWdzID0gTVREX0NBUF9OQU5ERkxBU0ggfCBNVERfRUNDOworCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX05BTkRGTEFTSDsKIAltdGQtPmVjY3R5cGUgPSBNVERfRUNDX1NXOwogCW10ZC0+ZXJhc2UgPSBvbmVuYW5kX2VyYXNlOwogCW10ZC0+cG9pbnQgPSBOVUxMOwogCW10ZC0+dW5wb2ludCA9IE5VTEw7CiAJbXRkLT5yZWFkID0gb25lbmFuZF9yZWFkOwogCW10ZC0+d3JpdGUgPSBvbmVuYW5kX3dyaXRlOwotCW10ZC0+cmVhZF9lY2MgPSBvbmVuYW5kX3JlYWRfZWNjOwotCW10ZC0+d3JpdGVfZWNjID0gb25lbmFuZF93cml0ZV9lY2M7CiAJbXRkLT5yZWFkX29vYiA9IG9uZW5hbmRfcmVhZF9vb2I7CiAJbXRkLT53cml0ZV9vb2IgPSBvbmVuYW5kX3dyaXRlX29vYjsKLQltdGQtPnJlYWR2ID0gTlVMTDsKLQltdGQtPnJlYWR2X2VjYyA9IE5VTEw7Ci0JbXRkLT53cml0ZXYgPSBvbmVuYW5kX3dyaXRldjsKLQltdGQtPndyaXRldl9lY2MgPSBvbmVuYW5kX3dyaXRldl9lY2M7CisjaWZkZWYgQ09ORklHX01URF9PTkVOQU5EX09UUAorCW10ZC0+Z2V0X2ZhY3RfcHJvdF9pbmZvID0gb25lbmFuZF9nZXRfZmFjdF9wcm90X2luZm87CisJbXRkLT5yZWFkX2ZhY3RfcHJvdF9yZWcgPSBvbmVuYW5kX3JlYWRfZmFjdF9wcm90X3JlZzsKKwltdGQtPmdldF91c2VyX3Byb3RfaW5mbyA9IG9uZW5hbmRfZ2V0X3VzZXJfcHJvdF9pbmZvOworCW10ZC0+cmVhZF91c2VyX3Byb3RfcmVnID0gb25lbmFuZF9yZWFkX3VzZXJfcHJvdF9yZWc7CisJbXRkLT53cml0ZV91c2VyX3Byb3RfcmVnID0gb25lbmFuZF93cml0ZV91c2VyX3Byb3RfcmVnOworCW10ZC0+bG9ja191c2VyX3Byb3RfcmVnID0gb25lbmFuZF9sb2NrX3VzZXJfcHJvdF9yZWc7CisjZW5kaWYKIAltdGQtPnN5bmMgPSBvbmVuYW5kX3N5bmM7CiAJbXRkLT5sb2NrID0gTlVMTDsKIAltdGQtPnVubG9jayA9IG9uZW5hbmRfdW5sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jCmluZGV4IDQ1MTBkMzMuLjFiMDBkYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMKQEAgLTE3LDYgKzE3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvb25lbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KIAorZXh0ZXJuIGludCBvbmVuYW5kX2RvX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJCSAgICAgICBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOworCiAvKioKICAqIGNoZWNrX3Nob3J0X3BhdHRlcm4gLSBbR0VORVJJQ10gY2hlY2sgaWYgYSBwYXR0ZXJuIGlzIGluIHRoZSBidWZmZXIKICAqIEBwYXJhbSBidWYJCXRoZSBidWZmZXIgdG8gc2VhcmNoCkBAIC04NywxMyArOTAsMTMgQEAKIAogCQkJLyogTm8gbmVlZCB0byByZWFkIHBhZ2VzIGZ1bGx5LAogCQkJICoganVzdCByZWFkIHJlcXVpcmVkIE9PQiBieXRlcyAqLwotCQkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIGZyb20gKyBqICogbXRkLT5vb2JibG9jayArIGJkLT5vZmZzLAotCQkJCQkJcmVhZGxlbiwgJnJldGxlbiwgJmJ1ZlswXSk7CisJCQlyZXQgPSBvbmVuYW5kX2RvX3JlYWRfb29iKG10ZCwgZnJvbSArIGogKiBtdGQtPndyaXRlc2l6ZSArIGJkLT5vZmZzLAorCQkJCQkJICByZWFkbGVuLCAmcmV0bGVuLCAmYnVmWzBdKTsKIAogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCi0JCQlpZiAoY2hlY2tfc2hvcnRfcGF0dGVybigmYnVmW2ogKiBzY2FubGVuXSwgc2NhbmxlbiwgbXRkLT5vb2JibG9jaywgYmQpKSB7CisJCQlpZiAoY2hlY2tfc2hvcnRfcGF0dGVybigmYnVmW2ogKiBzY2FubGVuXSwgc2NhbmxlbiwgbXRkLT53cml0ZXNpemUsIGJkKSkgewogCQkJCWJibS0+YmJ0W2kgPj4gM10gfD0gMHgwMyA8PCAoaSAmIDB4Nik7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQmFkIGVyYXNlYmxvY2sgJWQgYXQgMHglMDh4XG4iLAogCQkJCQlpID4+IDEsICh1bnNpZ25lZCBpbnQpIGZyb20pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmVkYm9vdC5jIGIvZHJpdmVycy9tdGQvcmVkYm9vdC5jCmluZGV4IGMwNzdkMmUuLjViNTg1MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JlZGJvb3QuYworKysgYi9kcml2ZXJzL210ZC9yZWRib290LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiByZWRib290LmMsdiAxLjE5IDIwMDUvMTIvMDEgMTA6MDM6NTEgZHdtdzIgRXhwICQKKyAqICRJZDogcmVkYm9vdC5jLHYgMS4yMSAyMDA2LzAzLzMwIDE4OjM0OjM3IGJqZCBFeHAgJAogICoKICAqIFBhcnNlIFJlZEJvb3Qtc3R5bGUgRmxhc2ggSW1hZ2UgU3lzdGVtIChGSVMpIHRhYmxlcyBhbmQKICAqIHByb2R1Y2UgYSBMaW51eCBwYXJ0aXRpb24gYXJyYXkgdG8gbWF0Y2guCkBAIC0xNSwxNCArMTUsMTQgQEAKIAogc3RydWN0IGZpc19pbWFnZV9kZXNjIHsKICAgICB1bnNpZ25lZCBjaGFyIG5hbWVbMTZdOyAgICAgIC8vIE51bGwgdGVybWluYXRlZCBuYW1lCi0gICAgdW5zaWduZWQgbG9uZyBmbGFzaF9iYXNlOyAgICAvLyBBZGRyZXNzIHdpdGhpbiBGTEFTSCBvZiBpbWFnZQotICAgIHVuc2lnbmVkIGxvbmcgbWVtX2Jhc2U7ICAgICAgLy8gQWRkcmVzcyBpbiBtZW1vcnkgd2hlcmUgaXQgZXhlY3V0ZXMKLSAgICB1bnNpZ25lZCBsb25nIHNpemU7ICAgICAgICAgIC8vIExlbmd0aCBvZiBpbWFnZQotICAgIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQ7ICAgLy8gRXhlY3V0aW9uIGVudHJ5IHBvaW50Ci0gICAgdW5zaWduZWQgbG9uZyBkYXRhX2xlbmd0aDsgICAvLyBMZW5ndGggb2YgYWN0dWFsIGRhdGEKLSAgICB1bnNpZ25lZCBjaGFyIF9wYWRbMjU2LSgxNis3KnNpemVvZih1bnNpZ25lZCBsb25nKSldOwotICAgIHVuc2lnbmVkIGxvbmcgZGVzY19ja3N1bTsgICAgLy8gQ2hlY2tzdW0gb3ZlciBpbWFnZSBkZXNjcmlwdG9yCi0gICAgdW5zaWduZWQgbG9uZyBmaWxlX2Nrc3VtOyAgICAvLyBDaGVja3N1bSBvdmVyIGltYWdlIGRhdGEKKyAgICB1aW50MzJfdAkgIGZsYXNoX2Jhc2U7ICAgIC8vIEFkZHJlc3Mgd2l0aGluIEZMQVNIIG9mIGltYWdlCisgICAgdWludDMyX3QJICBtZW1fYmFzZTsgICAgICAvLyBBZGRyZXNzIGluIG1lbW9yeSB3aGVyZSBpdCBleGVjdXRlcworICAgIHVpbnQzMl90CSAgc2l6ZTsgICAgICAgICAgLy8gTGVuZ3RoIG9mIGltYWdlCisgICAgdWludDMyX3QJICBlbnRyeV9wb2ludDsgICAvLyBFeGVjdXRpb24gZW50cnkgcG9pbnQKKyAgICB1aW50MzJfdAkgIGRhdGFfbGVuZ3RoOyAgIC8vIExlbmd0aCBvZiBhY3R1YWwgZGF0YQorICAgIHVuc2lnbmVkIGNoYXIgX3BhZFsyNTYtKDE2Kzcqc2l6ZW9mKHVpbnQzMl90KSldOworICAgIHVpbnQzMl90CSAgZGVzY19ja3N1bTsgICAgLy8gQ2hlY2tzdW0gb3ZlciBpbWFnZSBkZXNjcmlwdG9yCisgICAgdWludDMyX3QJICBmaWxlX2Nrc3VtOyAgICAvLyBDaGVja3N1bSBvdmVyIGltYWdlIGRhdGEKIH07CiAKIHN0cnVjdCBmaXNfbGlzdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9yZmRfZnRsLmMgYi9kcml2ZXJzL210ZC9yZmRfZnRsLmMKaW5kZXggYTNlMDBhNC4uZmE0MzYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvcmZkX2Z0bC5jCisrKyBiL2RyaXZlcnMvbXRkL3JmZF9mdGwuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgIFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+CiAgKgotICogJElkOiByZmRfZnRsLmMsdiAxLjUgMjAwNS8xMS8wNyAxMToxNDoyMSBnbGVpeG5lciBFeHAgJAorICogJElkOiByZmRfZnRsLmMsdiAxLjggMjAwNi8wMS8xNSAxMjo1MTo0NCBzZWFuIEV4cCAkCiAgKgogICogVGhpcyB0eXBlIG9mIGZsYXNoIHRyYW5zbGF0aW9uIGxheWVyIChGVEwpIGlzIHVzZWQgYnkgdGhlIEVtYmVkZGVkIEJJT1MKICAqIGJ5IEdlbmVyYWwgU29mdHdhcmUuIEl0IGlzIGtub3duIGFzIHRoZSBSZXNpZGVudCBGbGFzaCBEaXNrIChSRkQpLCBzZWU6CkBAIC02MSw2ICs2MSw3IEBACiAJCUJMT0NLX09LLAogCQlCTE9DS19FUkFTSU5HLAogCQlCTE9DS19FUkFTRUQsCisJCUJMT0NLX1VOVVNFRCwKIAkJQkxPQ0tfRkFJTEVECiAJfSBzdGF0ZTsKIAlpbnQgZnJlZV9zZWN0b3JzOwpAQCAtOTksMTAgKzEwMCw4IEBACiAJYmxvY2stPm9mZnNldCA9IHBhcnQtPmJsb2NrX3NpemUgKiBibG9ja19ubzsKIAogCWlmIChsZTE2X3RvX2NwdShwYXJ0LT5oZWFkZXJfY2FjaGVbMF0pICE9IFJGRF9NQUdJQykgewotCQlibG9jay0+c3RhdGUgPSBCTE9DS19FUkFTRUQ7IC8qIGFzc3VtcHRpb24gKi8KLQkJYmxvY2stPmZyZWVfc2VjdG9ycyA9IHBhcnQtPmRhdGFfc2VjdG9yc19wZXJfYmxvY2s7Ci0JCXBhcnQtPnJlc2VydmVkX2Jsb2NrID0gYmxvY2tfbm87Ci0JCXJldHVybiAxOworCQlibG9jay0+c3RhdGUgPSBCTE9DS19VTlVTRUQ7CisJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCWJsb2NrLT5zdGF0ZSA9IEJMT0NLX09LOwpAQCAtMTI0LDcgKzEyMyw3IEBACiAJCQllbnRyeSA9IDA7CiAKIAkJaWYgKGVudHJ5ID49IHBhcnQtPnNlY3Rvcl9jb3VudCkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKIAkJCQkiJyVzJzogdW5pdCAjJWQ6IGVudHJ5ICVkIGNvcnJ1cHQsICIKIAkJCQkic2VjdG9yICVkIG91dCBvZiByYW5nZVxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLCBibG9ja19ubywgaSwgZW50cnkpOwpAQCAtMTMyLDcgKzEzMSw3IEBACiAJCX0KIAogCQlpZiAocGFydC0+c2VjdG9yX21hcFtlbnRyeV0gIT0gLTEpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVgKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCQkJIiclcyc6IG1vcmUgdGhhbiBvbmUgZW50cnkgZm9yIHNlY3RvciAlZFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLCBlbnRyeSk7CiAJCQlwYXJ0LT5lcnJvcnMgPSAxOwpAQCAtMTY3LDcgKzE2Niw3IEBACiAJLyogZWFjaCBlcmFzZSBibG9jayBoYXMgdGhyZWUgYnl0ZXMgaGVhZGVyLCBmb2xsb3dlZCBieSB0aGUgbWFwICovCiAJcGFydC0+aGVhZGVyX3NlY3RvcnNfcGVyX2Jsb2NrID0KIAkJCSgoSEVBREVSX01BUF9PRkZTRVQgKyBzZWN0b3JzX3Blcl9ibG9jaykgKgotCQkgCXNpemVvZih1MTYpICsgU0VDVE9SX1NJWkUgLSAxKSAvIFNFQ1RPUl9TSVpFOworCQkJc2l6ZW9mKHUxNikgKyBTRUNUT1JfU0laRSAtIDEpIC8gU0VDVE9SX1NJWkU7CiAKIAlwYXJ0LT5kYXRhX3NlY3RvcnNfcGVyX2Jsb2NrID0gc2VjdG9yc19wZXJfYmxvY2sgLQogCQkJcGFydC0+aGVhZGVyX3NlY3RvcnNfcGVyX2Jsb2NrOwpAQCAtMjI2LDcgKzIyNSw3IEBACiAJfQogCiAJaWYgKHBhcnQtPnJlc2VydmVkX2Jsb2NrID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggIiclcyc6IG5vIGVtcHR5IGVyYXNlIHVuaXQgZm91bmRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICInJXMnOiBubyBlbXB0eSBlcmFzZSB1bml0IGZvdW5kXG4iLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUpOwogCiAJCXBhcnQtPmVycm9ycyA9IDE7CkBAIC0zMTUsNyArMzE0LDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggIiclcyc6IHVuYWJsZSB0byB3cml0ZSBSRkQgIgorCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICInJXMnOiB1bmFibGUgdG8gd3JpdGUgUkZEICIKIAkJCQkiaGVhZGVyIGF0IDB4JWx4XG4iLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUsCiAJCQkJcGFydC0+YmxvY2tzW2ldLm9mZnNldCk7CkBAIC0zNDgsNyArMzQ3LDcgQEAKIAlyYyA9IHBhcnQtPm1iZC5tdGQtPmVyYXNlKHBhcnQtPm1iZC5tdGQsIGVyYXNlKTsKIAogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiZXJhc2Ugb2YgcmVnaW9uICV4LCV4IG9uICclcycgIgorCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJlcmFzZSBvZiByZWdpb24gJXgsJXggb24gJyVzJyAiCiAJCQkJImZhaWxlZFxuIiwgZXJhc2UtPmFkZHIsIGVyYXNlLT5sZW4sCiAJCQkJcGFydC0+bWJkLm10ZC0+bmFtZSk7CiAJCWtmcmVlKGVyYXNlKTsKQEAgLTM4Myw3ICszODIsNyBAQAogCQlyYyA9IC1FSU87CiAKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiZXJyb3IgcmVhZGluZyAnJXMnIGF0ICIKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3IgcmVhZGluZyAnJXMnIGF0ICIKIAkJCSIweCVseFxuIiwgcGFydC0+bWJkLm10ZC0+bmFtZSwKIAkJCXBhcnQtPmJsb2Nrc1tibG9ja19ub10ub2Zmc2V0KTsKIApAQCAtNDIzLDcgKzQyMiw3IEBACiAJCQlyYyA9IC1FSU87CiAKIAkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICInJXMnOiBVbmFibGUgdG8gIgorCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJyVzJzogVW5hYmxlIHRvICIKIAkJCQkicmVhZCBzZWN0b3IgZm9yIHJlbG9jYXRpb25cbiIsCiAJCQkJcGFydC0+bWJkLm10ZC0+bmFtZSk7CiAKQEAgLTUyMCw3ICs1MTksNyBAQAogICogYmVjYXVzZSBpZiB3ZSBmaWxsIHRoYXQgb25lIHVwIGZpcnN0IGl0J2xsIGhhdmUgdGhlIG1vc3QgY2hhbmNlIG9mIGhhdmluZwogICogdGhlIGxlYXN0IGxpdmUgc2VjdG9ycyBhdCByZWNsYWltLgogICovCi1zdGF0aWMgaW50IGZpbmRfZnJlZV9ibG9jayhjb25zdCBzdHJ1Y3QgcGFydGl0aW9uICpwYXJ0KQorc3RhdGljIGludCBmaW5kX2ZyZWVfYmxvY2soc3RydWN0IHBhcnRpdGlvbiAqcGFydCkKIHsKIAlpbnQgYmxvY2ssIHN0b3A7CiAKQEAgLTUzMyw2ICs1MzIsOSBAQAogCQkJCWJsb2NrICE9IHBhcnQtPnJlc2VydmVkX2Jsb2NrKQogCQkJcmV0dXJuIGJsb2NrOwogCisJCWlmIChwYXJ0LT5ibG9ja3NbYmxvY2tdLnN0YXRlID09IEJMT0NLX1VOVVNFRCkKKwkJCWVyYXNlX2Jsb2NrKHBhcnQsIGJsb2NrKTsKKwogCQlpZiAoKytibG9jayA+PSBwYXJ0LT50b3RhbF9ibG9ja3MpCiAJCQlibG9jayA9IDA7CiAKQEAgLTU0MSw3ICs1NDMsNyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBmaW5kX3dyaXRlYWJsZV9ibG9jayhzdHJ1Y3QgcGFydGl0aW9uICpwYXJ0LCB1X2xvbmcgKm9sZF9zZWN0b3IpCitzdGF0aWMgaW50IGZpbmRfd3JpdGFibGVfYmxvY2soc3RydWN0IHBhcnRpdGlvbiAqcGFydCwgdV9sb25nICpvbGRfc2VjdG9yKQogewogCWludCByYywgYmxvY2s7CiAJc2l6ZV90IHJldGxlbjsKQEAgLTU3MCw3ICs1NzIsNyBAQAogCQlyYyA9IC1FSU87CiAKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgaGVhZGVyIGF0ICIKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgaGVhZGVyIGF0ICIKIAkJCQkiMHglbHhcbiIsIHBhcnQtPm1iZC5tdGQtPm5hbWUsCiAJCQkJcGFydC0+YmxvY2tzW2Jsb2NrXS5vZmZzZXQpOwogCQlnb3RvIGVycjsKQEAgLTYwMiw3ICs2MDQsNyBAQAogCQlyYyA9IC1FSU87CiAKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAiCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAiCiAJCQkiMHglbHhcbiIsIHBhcnQtPm1iZC5tdGQtPm5hbWUsIGFkZHIpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycjsKQEAgLTY1Miw3ICs2NTQsNyBAQAogCWlmIChwYXJ0LT5jdXJyZW50X2Jsb2NrID09IC0xIHx8CiAJCSFwYXJ0LT5ibG9ja3NbcGFydC0+Y3VycmVudF9ibG9ja10uZnJlZV9zZWN0b3JzKSB7CiAKLQkJcmMgPSBmaW5kX3dyaXRlYWJsZV9ibG9jayhwYXJ0LCBvbGRfYWRkcik7CisJCXJjID0gZmluZF93cml0YWJsZV9ibG9jayhwYXJ0LCBvbGRfYWRkcik7CiAJCWlmIChyYykKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTY3NSw3ICs2NzcsNyBAQAogCQlyYyA9IC1FSU87CiAKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAweCVseFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3Igd3JpdGluZyAnJXMnIGF0IDB4JWx4XG4iLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUsIGFkZHIpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycjsKQEAgLTY5NSw3ICs2OTcsNyBAQAogCQlyYyA9IC1FSU87CiAKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAweCVseFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3Igd3JpdGluZyAnJXMnIGF0IDB4JWx4XG4iLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUsIGFkZHIpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycjsKQEAgLTc3Niw3ICs3NzgsNyBAQAogCQlwYXJ0LT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKIAllbHNlIHsKIAkJaWYgKCFtdGQtPmVyYXNlc2l6ZSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAicGxlYXNlIHByb3ZpZGUgYmxvY2tfc2l6ZSIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggInBsZWFzZSBwcm92aWRlIGJsb2NrX3NpemUiKTsKIAkJCXJldHVybjsKIAkJfQogCQllbHNlCkBAIC03OTEsOCArNzkzLDggQEAKIAkJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQkJcGFydC0+bWJkLnJlYWRvbmx5ID0gMTsKIAkJZWxzZSBpZiAocGFydC0+ZXJyb3JzKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICInJXMnOiBlcnJvcnMgZm91bmQsICIKLQkJCQkJInNldHRpbmcgcmVhZC1vbmx5IiwgbXRkLT5uYW1lKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICInJXMnOiBlcnJvcnMgZm91bmQsICIKKwkJCQkJInNldHRpbmcgcmVhZC1vbmx5XG4iLCBtdGQtPm5hbWUpOwogCQkJcGFydC0+bWJkLnJlYWRvbmx5ID0gMTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwMS5jIGIvZHJpdmVycy9uZXQvM2M1MDEuYwppbmRleCBmNmQ1MWNlLi5iYjQ0NTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwMS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKQEAgLTkwOSw3ICs5MDksNyBAQAogICogaGVyZSBhbHNvIGNhdXNlcyB0aGUgbW9kdWxlIHRvIGJlIHVubG9hZGVkCiAgKi8KICAKLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWRldl8zYzUwMSA9IGVsMV9wcm9iZSgtMSk7CiAJaWYgKElTX0VSUihkZXZfM2M1MDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDMuYyBiL2RyaXZlcnMvbmV0LzNjNTAzLmMKaW5kZXggZGNjOThhZi4uY2I1ZWY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDMuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMy5jCkBAIC02ODgsNyArNjg4LDcgQEAKIAogLyogVGhpcyBpcyBzZXQgdXAgc28gdGhhdCBvbmx5IGEgc2luZ2xlIGF1dG9wcm9iZSB0YWtlcyBwbGFjZSBwZXIgY2FsbC4KIElTQSBkZXZpY2UgYXV0b3Byb2JlcyBvbiBhIHJ1bm5pbmcgbWFjaGluZSBhcmUgbm90IHJlY29tbWVuZGVkLiAqLwotaW50CitpbnQgX19pbml0CiBpbml0X21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwNS5jIGIvZHJpdmVycy9uZXQvM2M1MDUuYwppbmRleCAxMTE2MDFjLi4xOWMwYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA1LmMKQEAgLTE2MzMsNyArMTYzMyw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIkV0aGVyTGluayBQbHVzIElSUSBudW1iZXIocykgKGFzc2lnbmVkKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkbWEsICJFdGhlckxpbmsgUGx1cyBETUEgY2hhbm5lbChzKSIpOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgdGhpc19kZXYsIGZvdW5kID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDcuYyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKaW5kZXggNGRiODI4OS4uNjAzOTA0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDcuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNy5jCkBAIC05MzIsNyArOTMyLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJFdGhlckxpbmsxNiBJL08gYmFzZSBhZGRyZXNzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIihpZ25vcmVkKSIpOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpZiAoaW8gPT0gMCkKIAkJcHJpbnRrKCIzYzUwNzogWW91IHNob3VsZCBub3QgdXNlIGF1dG8tcHJvYmluZyB3aXRoIGluc21vZCFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggYjQwODg1ZDQuLjRiZjg1MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTIzLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjMuYwpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiRXRoZXJMaW5rL01DIElSUSBudW1iZXIocykiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IHRoaXNfZGV2LGZvdW5kID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjcuYyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKaW5kZXggNmRiMzMwMS4uMWIxY2IwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjcuYworKysgYi9kcml2ZXJzL25ldC8zYzUyNy5jCkBAIC0xNjQ2LDcgKzE2NDYsNyBAQAogICoJaW5zbW9kIG11bHRpcGxlIG1vZHVsZXMgZm9yIG5vdyBidXQgaXQncyBhIGhhY2suCiAgKi8KIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJdGhpc19kZXZpY2UgPSBtYzMyX3Byb2JlKC0xKTsKIAlpZiAoSVNfRVJSKHRoaXNfZGV2aWNlKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggMDY2ZTIyYi4uNDZkOGMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTE5LDExICsxOSwxMSBAQAogCVNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAJQ29udHJpYnV0b3JzOgotCQorCiAJCVdha2Utb24tTEFOIHN1cHBvcnQgLSBGZWxpcGUgRGFtYXNpbyA8ZmVsaXBld2RAdGVycmEuY29tLmJyPgogCQlQQ0kgc3VzcGVuZC9yZXN1bWUgIC0gRmVsaXBlIERhbWFzaW8gPGZlbGlwZXdkQHRlcnJhLmNvbS5icj4KIAkJTGlua0NoZyBpbnRlcnJ1cHQgICAtIEZlbGlwZSBEYW1hc2lvIDxmZWxpcGV3ZEB0ZXJyYS5jb20uYnI+Ci0JCQkKKwogCVRPRE86CiAJKiBUZXN0IFR4IGNoZWNrc3VtbWluZyB0aG9yb3VnaGx5CiAJKiBJbXBsZW1lbnQgZGV2LT50eF90aW1lb3V0CkBAIC00NjEsNyArNDYxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjcF9zZXRfcnhidWZzaXplIChzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3ApCiB7CiAJdW5zaWduZWQgaW50IG10dSA9IGNwLT5kZXYtPm10dTsKLQkKKwogCWlmIChtdHUgPiBFVEhfREFUQV9MRU4pCiAJCS8qIE1UVSArIGV0aGVybmV0IGhlYWRlciArIEZDUyArIG9wdGlvbmFsIFZMQU4gdGFnICovCiAJCWNwLT5yeF9idWZfc3ogPSBtdHUgKyBFVEhfSExFTiArIDg7CkBAIC01MTAsNyArNTEwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwX3J4X2NzdW1fb2sgKHUzMiBzdGF0dXMpCiB7CiAJdW5zaWduZWQgaW50IHByb3RvY29sID0gKHN0YXR1cyA+PiAxNikgJiAweDM7Ci0JCisKIAlpZiAobGlrZWx5KChwcm90b2NvbCA9PSBSeFByb3RvVENQKSAmJiAoIShzdGF0dXMgJiBUQ1BGYWlsKSkpKQogCQlyZXR1cm4gMTsKIAllbHNlIGlmICgocHJvdG9jb2wgPT0gUnhQcm90b1VEUCkgJiYgKCEoc3RhdHVzICYgVURQRmFpbCkpKQpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAljcHc4KENvbmZpZzMsIFBBUk1FbmFibGUpOwogCWNwLT53b2xfZW5hYmxlZCA9IDA7CiAKLQljcHc4KENvbmZpZzUsIGNwcjgoQ29uZmlnNSkgJiBQTUVTdGF0dXMpOyAKKwljcHc4KENvbmZpZzUsIGNwcjgoQ29uZmlnNSkgJiBQTUVTdGF0dXMpOwogCiAJY3B3MzJfZihIaVR4UmluZ0FkZHIsIDApOwogCWNwdzMyX2YoSGlUeFJpbmdBZGRyICsgNCwgMCk7CkBAIC0xMzUxLDcgKzEzNTEsNyBAQAogCQkgICAgICAgICBXQUtFX01DQVNUIHwgV0FLRV9VQ0FTVDsKIAkvKiBXZSBkb24ndCBuZWVkIHRvIGdvIG9uIGlmIFdPTCBpcyBkaXNhYmxlZCAqLwogCWlmICghY3AtPndvbF9lbmFibGVkKSByZXR1cm47Ci0JCisKIAlvcHRpb25zICAgICAgICA9IGNwcjggKENvbmZpZzMpOwogCWlmIChvcHRpb25zICYgTGlua1VwKSAgICAgICAgd29sLT53b2xvcHRzIHw9IFdBS0VfUEhZOwogCWlmIChvcHRpb25zICYgTWFnaWNQYWNrZXQpICAgd29sLT53b2xvcHRzIHw9IFdBS0VfTUFHSUM7CkBAIC0xOTE5LDcgKzE5MTksNyBAQAogCW1paV9jaGVja19tZWRpYSgmY3AtPm1paV9pZiwgbmV0aWZfbXNnX2xpbmsoY3ApLCBGQUxTRSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY3AtPmxvY2ssIGZsYWdzKTsKLQkKKwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IGZlYWU3ODMuLmFiZDYyNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogc3RhdGljIGludCBkZWJ1ZyA9IC0xOwogCiAvKgotICogUmVjZWl2ZSByaW5nIHNpemUgCisgKiBSZWNlaXZlIHJpbmcgc2l6ZQogICogV2FybmluZzogNjRLIHJpbmcgaGFzIGhhcmR3YXJlIGlzc3VlcyBhbmQgbWF5IGxvY2sgdXAuCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19TSF9EUkVBTUNBU1QpCkBAIC0yNTcsNyArMjU3LDcgQEAKIAl7MHgwMThhLCAweDAxMDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMzkgfSwKIAl7MHgxMjZjLCAweDEyMTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMzkgfSwKIAl7MHgxNzQzLCAweDgxMzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMzkgfSwKLQl7MHgwMjFiLCAweDgxMzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFJUTDgxMzkgfSwgCisJezB4MDIxYiwgMHg4MTM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSVEw4MTM5IH0sCiAKICNpZmRlZiBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAKIAkvKiBCb2d1cyA4MTM5IHNpbGljb24gcmVwb3J0cyA4MTI5IHdpdGhvdXQgZXh0ZXJuYWwgUFJPTSA6LSggKi8KQEAgLTE4MjQsNyArMTgyNCw3IEBACiAJaW50IHRtcF93b3JrOwogI2VuZGlmCiAKLQlpZiAobmV0aWZfbXNnX3J4X2VyciAodHApKSAKKwlpZiAobmV0aWZfbXNnX3J4X2VyciAodHApKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEV0aGVybmV0IGZyYW1lIGhhZCBlcnJvcnMsIHN0YXR1cyAlOC44eC5cbiIsCiAJCQlkZXYtPm5hbWUsIHJ4X3N0YXR1cyk7CiAJdHAtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtMTk0NCw3ICsxOTQ0LDcgQEAKIAkJIFJUTF9SMTYgKFJ4QnVmQWRkciksCiAJCSBSVExfUjE2IChSeEJ1ZlB0ciksIFJUTF9SOCAoQ2hpcENtZCkpOwogCi0Jd2hpbGUgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiByZWNlaXZlZCA8IGJ1ZGdldCAKKwl3aGlsZSAobmV0aWZfcnVubmluZyhkZXYpICYmIHJlY2VpdmVkIDwgYnVkZ2V0CiAJICAgICAgICYmIChSVExfUjggKENoaXBDbWQpICYgUnhCdWZFbXB0eSkgPT0gMCkgewogCQl1MzIgcmluZ19vZmZzZXQgPSBjdXJfcnggJSBSWF9CVUZfTEVOOwogCQl1MzIgcnhfc3RhdHVzOwpAQCAtMjAzMSw3ICsyMDMxLDcgQEAKIAogCQkJbmV0aWZfcmVjZWl2ZV9za2IgKHNrYik7CiAJCX0gZWxzZSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKSAKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKIAkJCQkJIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKIAkJCQkJZGV2LT5uYW1lKTsKQEAgLTIxNTgsMTMgKzIxNTgsMTMgQEAKIAlzdGF0dXMgPSBSVExfUjE2IChJbnRyU3RhdHVzKTsKIAogCS8qIHNoYXJlZCBpcnE/ICovCi0JaWYgKHVubGlrZWx5KChzdGF0dXMgJiBydGw4MTM5X2ludHJfbWFzaykgPT0gMCkpIAorCWlmICh1bmxpa2VseSgoc3RhdHVzICYgcnRsODEzOV9pbnRyX21hc2spID09IDApKQogCQlnb3RvIG91dDsKIAogCWhhbmRsZWQgPSAxOwogCiAJLyogaC93IG5vIGxvbmdlciBwcmVzZW50IChob3RwbHVnPykgb3IgbWFqb3IgZXJyb3IsIGJhaWwgKi8KLQlpZiAodW5saWtlbHkoc3RhdHVzID09IDB4RkZGRikpIAorCWlmICh1bmxpa2VseShzdGF0dXMgPT0gMHhGRkZGKSkKIAkJZ290byBvdXQ7CiAKIAkvKiBjbG9zZSBwb3NzaWJsZSByYWNlJ3Mgd2l0aCBkZXZfY2xvc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGJkYWFhZDguLjBjNmI0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtNDQ3LDYgKzQ0Nyw3IEBACiBjb25maWcgTUlQU19BVTFYMDBfRU5FVAogCWJvb2wgIk1JUFMgQVUxMDAwIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgU09DX0FVMVgwMAorCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhbiBBbGNoZW15IFNlbWkgQVUxWDAwIGJhc2VkIHN5c3RlbQpAQCAtODY1LDYgKzg2NiwyMiBAQAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldC1tb2R1bGVzLnR4dD4uICBUaGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBkbTkwMDAuCiAKK2NvbmZpZyBTTUM5MTFYCisJdHJpc3RhdGUgIlNNU0MgTEFOOTExWzU2NzhdIHN1cHBvcnQiCisJc2VsZWN0IENSQzMyCisJc2VsZWN0IE1JSQorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEFSQ0hfUFhBCisJaGVscAorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgU01TQydzIExBTjkxMXggc2VyaWVzIG9mIEV0aGVybmV0IGNoaXBzZXRzCisJICBpbmNsdWRpbmcgdGhlIG5ldyBMQU45MTE1LCBMQU45MTE2LCBMQU45MTE3LCBhbmQgTEFOOTExOC4KKwkgIFNheSBZIGlmIHlvdSB3YW50IGl0IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgCisJICBhbmQgcmVhZCB0aGUgRXRoZXJuZXQtSE9XVE8sIGF2YWlsYWJsZSBmcm9tCisJICA8aHR0cDovL3d3dy5saW51eGRvYy5vcmcvZG9jcy5odG1sI2hvd3RvPi4KKworCSAgVGhpcyBkcml2ZXIgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBiZSAKKwkgIGNhbGxlZCBzbWM5MTF4LiAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gCisJICBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+CisKIGNvbmZpZyBORVRfVkVORE9SX1JBQ0FMCiAJYm9vbCAiUmFjYWwtSW50ZXJsYW4gKE1pY29tKSBOSSBjYXJkcyIKIAlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBJU0EKQEAgLTIxNjMsNiArMjE4MCw4IEBACiBjb25maWcgQk5YMgogCXRyaXN0YXRlICJCcm9hZGNvbSBOZXRYdHJlbWVJSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IENSQzMyCisJc2VsZWN0IFpMSUJfSU5GTEFURQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEJyb2FkY29tIE5ldFh0cmVtZUlJIGdpZ2FiaXQgRXRoZXJuZXQgY2FyZHMuCiAKQEAgLTIzMTEsNiArMjMzMCwyMyBAQAogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBNWVJJMTBHRQorCXRyaXN0YXRlICJNeXJpY29tIE15cmktMTBHIEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IENSQzMyCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTXlyaWNvbSBNeXJpLTEwRyBEdWFsIFByb3RvY29sIGludGVyZmFjZSBpbgorCSAgRXRoZXJuZXQgbW9kZS4gSWYgdGhlIGVlcHJvbSBvbiB5b3VyIGJvYXJkIGlzIG5vdCByZWNlbnQgZW5vdWdoLAorCSAgeW91IHdpbGwgbmVlZCBhIG5ld2VyIGZpcm13YXJlIGltYWdlLgorCSAgWW91IG1heSBnZXQgdGhpcyBpbWFnZSBvciBtb3JlIGluZm9ybWF0aW9uLCBhdDoKKworCSAgPGh0dHA6Ly93d3cubXlyaS5jb20vTXlyaS0xMEcvPgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlIGFuZCByZWFkCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG15cmkxMGdlLgorCiBlbmRtZW51CiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvdG9rZW5yaW5nL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGI5MDQ2OGEuLjFlY2VkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xOTIsNyArMTkyLDkgQEAKIG9iai0kKENPTkZJR19BTUQ4MTExX0VUSCkgKz0gYW1kODExMWUubwogb2JqLSQoQ09ORklHX0lCTVZFVEgpICs9IGlibXZldGgubwogb2JqLSQoQ09ORklHX1MySU8pICs9IHMyaW8ubworb2JqLSQoQ09ORklHX01ZUkkxMEdFKSArPSBteXJpMTBnZS8KIG9iai0kKENPTkZJR19TTUM5MVgpICs9IHNtYzkxeC5vCitvYmotJChDT05GSUdfU01DOTExWCkgKz0gc21jOTExeC5vCiBvYmotJChDT05GSUdfRE05MDAwKSArPSBkbTkwMDAubwogb2JqLSQoQ09ORklHX0ZFQ184WFgpICs9IGZlY184eHgvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCAxNGRiYWQxLi4wMzhkNWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC0yLDEzICsyLDE2IEBACiAgKgogICogQWxjaGVteSBBdTF4MDAgZXRoZXJuZXQgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMDEsMjAwMiwyMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQ29weXJpZ2h0IDIwMDEtMjAwMywgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KICAqIENvcHlyaWdodCAyMDAyIFRpbWVTeXMgQ29ycC4KICAqIEFkZGVkIGV0aHRvb2wvbWlpLXRvb2wgc3VwcG9ydCwKICAqIENvcHlyaWdodCAyMDA0IE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CiAgKiBVcGRhdGU6IDIwMDQgQmpvZXJuIFJpZW1lciwgcmllbWVyQGZva3VzLmZyYXVuaG9mZXIuZGUgCiAgKiBvciByaWVtZXJAcmllbWVyLW50LmRlOiBmaXhlZCB0aGUgbGluayBiZWF0IGRldGVjdGlvbiB3aXRoIAogICogaW9jdGxzIChTSU9DR01JSVBIWSkKKyAqIENvcHlyaWdodCAyMDA2IEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPgorICogIGNvbnZlcnRlZCB0byB1c2UgbGludXgtMi42LngncyBQSFkgZnJhbWV3b3JrCisgKgogICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQogICoKQEAgLTUzLDYgKzU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjgsNyArNzIsNyBAQAogc3RhdGljIGludCBhdTEwMDBfZGVidWcgPSAzOwogI2VuZGlmCiAKLSNkZWZpbmUgRFJWX05BTUUJImF1MTAwMGV0aCIKKyNkZWZpbmUgRFJWX05BTUUJImF1MTAwMF9ldGgiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjUiCiAjZGVmaW5lIERSVl9BVVRIT1IJIlBldGUgUG9wb3YgPHBwb3BvdkBlbWJlZGRlZGFsbGV5LmNvbT4iCiAjZGVmaW5lIERSVl9ERVNDCSJBdTF4eHggb24tY2hpcCBFdGhlcm5ldCBkcml2ZXIiCkBAIC04MCw3ICs4NCw3IEBACiAvLyBwcm90b3R5cGVzCiBzdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBlbmFibGVfcnhfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUodTMyIGlvYWRkciwgaW50IGlycSwgaW50IHBvcnRfbnVtKTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIGF1MTAwMF9wcm9iZShpbnQgcG9ydF9udW0pOwogc3RhdGljIGludCBhdTEwMDBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYXUxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGF1MTAwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTg4LDE3ICs5MiwxNSBAQAogc3RhdGljIGludCBhdTEwMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgYXUxMDAwX2ludGVycnVwdChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBzdGF0aWMgdm9pZCBhdTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX3NldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF1MTAwMF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZCBhdTEwMDBfdGltZXIodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsKIHN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50KTsKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LCBpbnQsIHUxNik7Ci1zdGF0aWMgdm9pZCBkdW1wX21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkKTsKK3N0YXRpYyB2b2lkIGF1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKIAogLy8gZXh0ZXJucwotZXh0ZXJuICB2b2lkIGFja19yaXNlX2VkZ2VfaXJxKHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGdldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGVybmV0X2FkZHIpOwogZXh0ZXJuIHZvaWQgc3RyMmVhZGRyKHVuc2lnbmVkIGNoYXIgKmVhLCB1bnNpZ25lZCBjaGFyICpzdHIpOwogZXh0ZXJuIGNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpOwpAQCAtMTI2LDcwNSArMTI4LDgzIEBACiAJMHgwMCwgMHg1MCwgMHhjMiwgMHgwYywgMHgzMCwgMHgwMAogfTsKIAotI2RlZmluZSBuaWJzd2FwKHgpICgoKCh4KSA+PiA0KSAmIDB4MGYpIHwgKCgoeCkgPDwgNCkgJiAweGYwKSkKLSNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQotCi0vLyBGb3IgcmVhZGluZy93cml0aW5nIDMyLWJpdCB3b3JkcyBmcm9tL3RvIERNQSBtZW1vcnkKLSNkZWZpbmUgY3B1X3RvX2RtYTMyIGNwdV90b19iZTMyCi0jZGVmaW5lIGRtYTMyX3RvX2NwdSBiZTMyX3RvX2NwdQotCiBzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1X21hY3NbTlVNX0VUSF9JTlRFUkZBQ0VTXTsKIAotLyogRklYTUUgCi0gKiBBbGwgb2YgdGhlIFBIWSBjb2RlIHJlYWxseSBzaG91bGQgYmUgZGV0YWNoZWQgZnJvbSB0aGUgTUFDIAotICogY29kZS4KKy8qCisgKiBib2FyZC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucworICoKKyAqIFBIWSBkZXRlY3Rpb24gYWxnb3JpdGhtCisgKgorICogSWYgQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHIGlzIHVuZGVmaW5lZCwgdGhlIFBIWSBzZXR1cCBpcworICogYXV0b2RldGVjdGVkOgorICoKKyAqIG1paV9wcm9iZSgpIGZpcnN0IHNlYXJjaGVzIHRoZSBjdXJyZW50IE1BQydzIE1JSSBidXMgZm9yIGEgUEhZLAorICogc2VsZWN0aW5nIHRoZSBmaXJzdCAob3IgbGFzdCwgaWYgQVUxWFhYX1BIWV9TRUFSQ0hfSElHSEVTVF9BRERSIGlzCisgKiBkZWZpbmVkKSBQSFkgYWRkcmVzcyBub3QgYWxyZWFkeSBjbGFpbWVkIGJ5IGFub3RoZXIgbmV0ZGV2LgorICoKKyAqIElmIG5vdGhpbmcgd2FzIGZvdW5kIHRoYXQgd2F5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgMm5kIGV0aGVybmV0CisgKiBjb250cm9sbGVyJ3MgUEhZIGFuZCBBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMCBpcyBkZWZpbmVkLCB0aGVuCisgKiB0aGUgZmlyc3QgTUlJIGJ1cyBpcyBzZWFyY2hlZCBhcyB3ZWxsIGZvciBhbiB1bmNsYWltZWQgUEhZOyB0aGlzIGlzCisgKiBuZWVkZWQgaW4gY2FzZSBvZiBhIGR1YWwtUEhZIGFjY2Vzc2libGUgb25seSB0aHJvdWdoIHRoZSBNQUMwJ3MgTUlJCisgKiBidXMuCisgKgorICogRmluYWxseSwgaWYgbm8gUEhZIGlzIGZvdW5kLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIGV0aGVybmV0CisgKiBjb250cm9sbGVyIGlzIG5vdCByZWdpc3RlcmVkIHRvIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4KICAqLwogCi0vKiBEZWZhdWx0IGFkdmVydGlzZSAqLwotI2RlZmluZSBHRU5NSUlfREVGQVVMVF9BRFZFUlRJU0UgXAotCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfCBcCi0JQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwgXAotCUFEVkVSVElTRURfQXV0b25lZworLyogYXV0b2RldGVjdGlvbiBkZWZhdWx0cyAqLworI3VuZGVmICBBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIKKyNkZWZpbmUgQVUxWFhYX1BIWTFfU0VBUkNIX09OX01BQzAKIAotI2RlZmluZSBHRU5NSUlfREVGQVVMVF9GRUFUVVJFUyBcCi0JU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfCBcCi0JU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8IFwKLQlTVVBQT1JURURfQXV0b25lZworLyogc3RhdGljIFBIWSBzZXR1cAorICoKKyAqIG1vc3QgYm9hcmRzIFBIWSBzZXR1cCBzaG91bGQgYmUgZGV0ZWN0YWJsZSBwcm9wZXJseSB3aXRoIHRoZQorICogYXV0b2RldGVjdGlvbiBhbGdvcml0aG0gaW4gbWlpX3Byb2JlKCksIGJ1dCBpbiBzb21lIGNhc2VzIChlLmcuIGlmCisgKiB5b3UgaGF2ZSBhIHN3aXRjaCBhdHRhY2hlZCwgb3Igd2FudCB0byB1c2UgdGhlIFBIWSdzIGludGVycnVwdAorICogbm90aWZpY2F0aW9uIGNhcGFiaWxpdGllcykgeW91IGNhbiBwcm92aWRlIGEgc3RhdGljIFBIWQorICogY29uZmlndXJhdGlvbiBoZXJlCisgKgorICogSVJRcyBtYXkgb25seSBiZSBzZXQsIGlmIGEgUEhZIGFkZHJlc3Mgd2FzIGNvbmZpZ3VyZWQKKyAqIElmIGEgUEhZIGFkZHJlc3MgaXMgZ2l2ZW4sIGFsc28gYSBidXMgaWQgaXMgcmVxdWlyZWQgdG8gYmUgc2V0CisgKgorICogcHM6IG1ha2Ugc3VyZSB0aGUgdXNlZCBpcnFzIGFyZSBjb25maWd1cmVkIHByb3Blcmx5IGluIHRoZSBib2FyZAorICogc3BlY2lmaWMgaXJxLW1hcAorICovCiAKLWludCBiY21fNTIwMV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlzMTYgZGF0YTsKLQkKLQkvKiBTdG9wIGF1dG8tbmVnb3RpYXRpb24gKi8KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBkYXRhICYgfk1JSV9DTlRMX0FVVE8pOworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQk9TUE9SVVMpCisvKgorICogTWljcmVsL0tlbmRpbiA1IHBvcnQgc3dpdGNoIGF0dGFjaGVkIHRvIE1BQzAsCisgKiBNQUMwIGlzIGFzc29jaWF0ZWQgd2l0aCBQSFkgYWRkcmVzcyA1ICg9PSBXQU4gcG9ydCkKKyAqIE1BQzEgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgUEhZLCBzaW5jZSBpdCdzIGNvbm5lY3RlZCBkaXJlY3RseQorICogdG8gdGhlIHN3aXRjaC4KKyAqIG5vIGludGVycnVwdHMgYXJlIHVzZWQKKyAqLworIyBkZWZpbmUgQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHCiAKLQkvKiBTZXQgYWR2ZXJ0aXNlbWVudCB0byAxMC8xMDAgYW5kIEhhbGYvRnVsbCBkdXBsZXgKLQkgKiAoZnVsbCBjYXBhYmlsaXRpZXMpICovCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYpOwotCWRhdGEgfD0gTUlJX05XQVlfVFggfCBNSUlfTldBWV9UWF9GRFggfCBNSUlfTldBWV9UX0ZEWCB8IE1JSV9OV0FZX1Q7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYsIGRhdGEpOwotCQotCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCWRhdGEgfD0gTUlJX0NOVExfUlNUX0FVVE8gfCBNSUlfQ05UTF9BVVRPOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEpOworIyBkZWZpbmUgQVUxWFhYX1BIWTBfQUREUiAgNQorIyBkZWZpbmUgQVUxWFhYX1BIWTBfQlVTSUQgMAorIyAgdW5kZWYgQVUxWFhYX1BIWTBfSVJRCiAKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgCi0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCXJldHVybiAwOwotfQotCi1pbnQgYmNtXzUyMDFfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsKLQkKLQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgbWlpX2NvbnRyb2wgfCBNSUlfQ05UTF9SRVNFVCk7Ci0JbWRlbGF5KDEpOwotCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgewotCQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JCWlmICgobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgPT0gMCkKLQkJCWJyZWFrOwotCQltZGVsYXkoMSk7Ci0JfQotCWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgUEhZIHJlc2V0IHRpbWVvdXQgIVxuIiwgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IAotYmNtXzUyMDFfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQotewotCXUxNiBtaWlfZGF0YTsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsKLQotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmNtXzUyMDFfc3RhdHVzIGVycm9yOiBOVUxMIGRldlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0KLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCWlmIChtaWlfZGF0YSAmIE1JSV9TVEFUX0xJTkspIHsKLQkJKmxpbmsgPSAxOwotCQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9BVVhfQ05UUkwpOwotCQlpZiAobWlpX2RhdGEgJiBNSUlfQVVYXzEwMCkgewotCQkJaWYgKG1paV9kYXRhICYgTUlJX0FVWF9GRFgpIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJfQotCQl9Ci0JCWVsc2UgIHsKLQkJCSpzcGVlZCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJfQotCi0JfQotCWVsc2UgewotCQkqbGluayA9IDA7Ci0JCSpzcGVlZCA9IDA7Ci0JCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfVU5LTk9XTjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBsc2lfODAyMjdfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygibHNpXzgwMjI3X2luaXRcbiIpOwotCi0JLyogcmVzdGFydCBhdXRvLW5lZ290aWF0aW9uICovCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwKLQkJICAgTUlJX0NOVExfRjEwMCB8IE1JSV9DTlRMX0FVVE8gfCBNSUlfQ05UTF9SU1RfQVVUTyk7IC8vIHwgTUlJX0NOVExfRkRYKTsKLQltZGVsYXkoMSk7Ci0KLQkvKiBzZXQgdXAgTEVEcyB0byBjb3JyZWN0IGRpc3BsYXkgKi8KLSNpZmRlZiBDT05GSUdfTUlQU19NVFgxCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCAxNywgMHhmZjgwKTsKLSNlbHNlCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCAxNywgMHhmZmMwKTsKKyMgIHVuZGVmIEFVMVhYWF9QSFkxX0FERFIKKyMgIHVuZGVmIEFVMVhYWF9QSFkxX0JVU0lECisjICB1bmRlZiBBVTFYWFhfUEhZMV9JUlEKICNlbmRpZgogCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCWR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCXJldHVybiAwOwotfQotCi1pbnQgbHNpXzgwMjI3X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlzMTYgbWlpX2NvbnRyb2wsIHRpbWVvdXQ7Ci0JCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKCJsc2lfODAyMjdfcmVzZXRcbiIpOwotCQlkdW1wX21paShkZXYsIHBoeV9hZGRyKTsKLQl9Ci0KLQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgbWlpX2NvbnRyb2wgfCBNSUlfQ05UTF9SRVNFVCk7Ci0JbWRlbGF5KDEpOwotCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgewotCQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JCWlmICgobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgPT0gMCkKLQkJCWJyZWFrOwotCQltZGVsYXkoMSk7Ci0JfQotCWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgUEhZIHJlc2V0IHRpbWVvdXQgIVxuIiwgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1sc2lfODAyMjdfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQotewotCXUxNiBtaWlfZGF0YTsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsKLQotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibHNpXzgwMjI3X3N0YXR1cyBlcnJvcjogTlVMTCBkZXZcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwotCi0JbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfU1RBVFVTKTsKLQlpZiAobWlpX2RhdGEgJiBNSUlfU1RBVF9MSU5LKSB7Ci0JCSpsaW5rID0gMTsKLQkJbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfTFNJX1BIWV9TVEFUKTsKLQkJaWYgKG1paV9kYXRhICYgTUlJX0xTSV9QSFlfU1RBVF9TUEQpIHsKLQkJCWlmIChtaWlfZGF0YSAmIE1JSV9MU0lfUEhZX1NUQVRfRkRYKSB7Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7Ci0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFRlg7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VUWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VUWDsKLQkJCX0KLQkJfQotCQllbHNlICB7Ci0JCQkqc3BlZWQgPSBJRl9QT1JUXzEwQkFTRVQ7Ci0JCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwQkFTRVQ7Ci0JCX0KLQotCX0KLQllbHNlIHsKLQkJKmxpbmsgPSAwOwotCQkqc3BlZWQgPSAwOwotCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05PV047Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgYW03OWM5MDFfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JcHJpbnRrKCJhbTc5YzkwMV9pbml0XG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGFtNzljOTAxX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlwcmludGsoImFtNzljOTAxX3Jlc2V0XG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IAotYW03OWM5MDFfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQotewotCXJldHVybiAwOwotfQotCi1pbnQgYW03OWM4NzRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JczE2IGRhdGE7Ci0KLQkvKiA3OWM4NzQgaGFzIHF1aXQgcmVzZW1ibGVkIGJpdCBhc3NpZ25tZW50cyB0byBCQ001MjAxICovCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiYW03OWM4NDdfaW5pdFxuIik7Ci0KLQkvKiBTdG9wIGF1dG8tbmVnb3RpYXRpb24gKi8KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBkYXRhICYgfk1JSV9DTlRMX0FVVE8pOwotCi0JLyogU2V0IGFkdmVydGlzZW1lbnQgdG8gMTAvMTAwIGFuZCBIYWxmL0Z1bGwgZHVwbGV4Ci0JICogKGZ1bGwgY2FwYWJpbGl0aWVzKSAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWKTsKLQlkYXRhIHw9IE1JSV9OV0FZX1RYIHwgTUlJX05XQVlfVFhfRkRYIHwgTUlJX05XQVlfVF9GRFggfCBNSUlfTldBWV9UOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWLCBkYXRhKTsKLQkKLQkvKiBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gKi8KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQlkYXRhIHw9IE1JSV9DTlRMX1JTVF9BVVRPIHwgTUlJX0NOVExfQVVUTzsKLQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIGR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCXJldHVybiAwOwotfQotCi1pbnQgYW03OWM4NzRfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsKLQkKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJhbTc5Yzg3NF9yZXNldFxuIik7Ci0KLQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgbWlpX2NvbnRyb2wgfCBNSUlfQ05UTF9SRVNFVCk7Ci0JbWRlbGF5KDEpOwotCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgewotCQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JCWlmICgobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgPT0gMCkKLQkJCWJyZWFrOwotCQltZGVsYXkoMSk7Ci0JfQotCWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgUEhZIHJlc2V0IHRpbWVvdXQgIVxuIiwgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IAotYW03OWM4NzRfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQotewotCXUxNiBtaWlfZGF0YTsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsKLQotCS8vIHByaW50aygiYW03OWM4NzRfc3RhdHVzXG4iKTsKLQlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgImFtNzljODc0X3N0YXR1cyBlcnJvcjogTlVMTCBkZXZcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0JbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfU1RBVFVTKTsKLQotCWlmIChtaWlfZGF0YSAmIE1JSV9TVEFUX0xJTkspIHsKLQkJKmxpbmsgPSAxOwotCQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9BTURfUEhZX1NUQVQpOwotCQlpZiAobWlpX2RhdGEgJiBNSUlfQU1EX1BIWV9TVEFUX1NQRCkgewotCQkJaWYgKG1paV9kYXRhICYgTUlJX0FNRF9QSFlfU1RBVF9GRFgpIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJKnNwZWVkID0gSUZfUE9SVF8xMEJBU0VUOwotCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOwotCQl9Ci0KLQl9Ci0JZWxzZSB7Ci0JCSpsaW5rID0gMDsKLQkJKnNwZWVkID0gMDsKLQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF9VTktOT1dOOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGx4dDk3MWFfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygibHh0OTcxYV9pbml0XG4iKTsKLQotCS8qIHJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsCi0JCSAgIE1JSV9DTlRMX0YxMDAgfCBNSUlfQ05UTF9BVVRPIHwgTUlJX0NOVExfUlNUX0FVVE8gfCBNSUlfQ05UTF9GRFgpOwotCi0JLyogc2V0IHVwIExFRHMgdG8gY29ycmVjdCBkaXNwbGF5ICovCi0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCAyMCwgMHgwNDIyKTsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlkdW1wX21paShkZXYsIHBoeV9hZGRyKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGx4dDk3MWFfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBtaWlfY29udHJvbCwgdGltZW91dDsKLQkKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgewotCQlwcmludGsoImx4dDk3MWFfcmVzZXRcbiIpOwotCQlkdW1wX21paShkZXYsIHBoeV9hZGRyKTsKLQl9Ci0KLQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgbWlpX2NvbnRyb2wgfCBNSUlfQ05UTF9SRVNFVCk7Ci0JbWRlbGF5KDEpOwotCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IC0tdGltZW91dCkgewotCQltaWlfY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JCWlmICgobWlpX2NvbnRyb2wgJiBNSUlfQ05UTF9SRVNFVCkgPT0gMCkKLQkJCWJyZWFrOwotCQltZGVsYXkoMSk7Ci0JfQotCWlmIChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgUEhZIHJlc2V0IHRpbWVvdXQgIVxuIiwgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1seHQ5NzFhX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIHUxNiAqbGluaywgdTE2ICpzcGVlZCkKLXsKLQl1MTYgbWlpX2RhdGE7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXA7Ci0KLQlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgImx4dDk3MWFfc3RhdHVzIGVycm9yOiBOVUxMIGRldlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7Ci0KLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCWlmIChtaWlfZGF0YSAmIE1JSV9TVEFUX0xJTkspIHsKLQkJKmxpbmsgPSAxOwotCQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9JTlRFTF9QSFlfU1RBVCk7Ci0JCWlmIChtaWlfZGF0YSAmIE1JSV9JTlRFTF9QSFlfU1RBVF9TUEQpIHsKLQkJCWlmIChtaWlfZGF0YSAmIE1JSV9JTlRFTF9QSFlfU1RBVF9GRFgpIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQkJCX0KLQkJCWVsc2UgewotCQkJCSpzcGVlZCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTAwQkFTRVRYOwotCQkJfQotCQl9Ci0JCWVsc2UgIHsKLQkJCSpzcGVlZCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJfQotCi0JfQotCWVsc2UgewotCQkqbGluayA9IDA7Ci0JCSpzcGVlZCA9IDA7Ci0JCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfVU5LTk9XTjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBrczg5OTVtX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBkYXRhOwotCQotLy8JcHJpbnRrKCJrczg5OTVtX2luaXRcbiIpOwotCS8qIFN0b3AgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEgJiB+TUlJX0NOVExfQVVUTyk7Ci0KLQkvKiBTZXQgYWR2ZXJ0aXNlbWVudCB0byAxMC8xMDAgYW5kIEhhbGYvRnVsbCBkdXBsZXgKLQkgKiAoZnVsbCBjYXBhYmlsaXRpZXMpICovCi0JZGF0YSA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYpOwotCWRhdGEgfD0gTUlJX05XQVlfVFggfCBNSUlfTldBWV9UWF9GRFggfCBNSUlfTldBWV9UX0ZEWCB8IE1JSV9OV0FZX1Q7Ci0JbWRpb193cml0ZShkZXYsIHBoeV9hZGRyLCBNSUlfQU5BRFYsIGRhdGEpOwotCQotCS8qIFJlc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wpOwotCWRhdGEgfD0gTUlJX0NOVExfUlNUX0FVVE8gfCBNSUlfQ05UTF9BVVRPOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIGR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBrczg5OTVtX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcikKLXsKLQlzMTYgbWlpX2NvbnRyb2wsIHRpbWVvdXQ7Ci0JCi0vLwlwcmludGsoImtzODk5NW1fcmVzZXRcbiIpOwotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsKLQltZGVsYXkoMSk7Ci0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7Ci0JCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9Ci0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQga3M4OTk1bV9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpCi17Ci0JdTE2IG1paV9kYXRhOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwOwotCi0JaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJrczg5OTVtX3N0YXR1cyBlcnJvcjogTlVMTCBkZXZcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwotCi0JbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfU1RBVFVTKTsKLQlpZiAobWlpX2RhdGEgJiBNSUlfU1RBVF9MSU5LKSB7Ci0JCSpsaW5rID0gMTsKLQkJbWlpX2RhdGEgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQVVYX0NOVFJMKTsKLQkJaWYgKG1paV9kYXRhICYgTUlJX0FVWF8xMDApIHsKLQkJCWlmIChtaWlfZGF0YSAmIE1JSV9BVVhfRkRYKSB7Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7Ci0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFRlg7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VUWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VUWDsKLQkJCX0KLQkJfQotCQllbHNlICB7CQkJCQkJCQkJCQkKLQkJCSpzcGVlZCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJfQotCi0JfQotCWVsc2UgewotCQkqbGluayA9IDA7Ci0JCSpzcGVlZCA9IDA7Ci0JCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfVU5LTk9XTjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotc21zY184M0MxODVfaW5pdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyKQotewotCXMxNiBkYXRhOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygic21zY184M0MxODVfaW5pdFxuIik7Ci0KLQkvKiBTdG9wIGF1dG8tbmVnb3RpYXRpb24gKi8KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBkYXRhICYgfk1JSV9DTlRMX0FVVE8pOwotCi0JLyogU2V0IGFkdmVydGlzZW1lbnQgdG8gMTAvMTAwIGFuZCBIYWxmL0Z1bGwgZHVwbGV4Ci0JICogKGZ1bGwgY2FwYWJpbGl0aWVzKSAqLwotCWRhdGEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWKTsKLQlkYXRhIHw9IE1JSV9OV0FZX1RYIHwgTUlJX05XQVlfVFhfRkRYIHwgTUlJX05XQVlfVF9GRFggfCBNSUlfTldBWV9UOwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWLCBkYXRhKTsKLQkKLQkvKiBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gKi8KLQlkYXRhID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQlkYXRhIHw9IE1JSV9DTlRMX1JTVF9BVVRPIHwgTUlJX0NOVExfQVVUTzsKLQotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgTUlJX0NPTlRST0wsIGRhdGEpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIGR1bXBfbWlpKGRldiwgcGh5X2FkZHIpOwotCXJldHVybiAwOwotfQotCi1pbnQKLXNtc2NfODNDMTg1X3Jlc2V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JczE2IG1paV9jb250cm9sLCB0aW1lb3V0OwotCQotCWlmIChhdTEwMDBfZGVidWcgPiA0KQotCQlwcmludGsoInNtc2NfODNDMTg1X3Jlc2V0XG4iKTsKLQotCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MLCBtaWlfY29udHJvbCB8IE1JSV9DTlRMX1JFU0VUKTsKLQltZGVsYXkoMSk7Ci0JZm9yICh0aW1lb3V0ID0gMTAwOyB0aW1lb3V0ID4gMDsgLS10aW1lb3V0KSB7Ci0JCW1paV9jb250cm9sID0gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJaWYgKChtaWlfY29udHJvbCAmIE1JSV9DTlRMX1JFU0VUKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9Ci0JaWYgKG1paV9jb250cm9sICYgTUlJX0NOVExfUkVTRVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBQSFkgcmVzZXQgdGltZW91dCAhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgCi1zbXNjXzgzQzE4NV9zdGF0dXMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgdTE2ICpsaW5rLCB1MTYgKnNwZWVkKQotewotCXUxNiBtaWlfZGF0YTsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsKLQotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic21zY184M0MxODVfc3RhdHVzIGVycm9yOiBOVUxMIGRldlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKLQltaWlfZGF0YSA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCi0JaWYgKG1paV9kYXRhICYgTUlJX1NUQVRfTElOSykgewotCQkqbGluayA9IDE7Ci0JCW1paV9kYXRhID0gbWRpb19yZWFkKGRldiwgYXVwLT5waHlfYWRkciwgMHgxZik7Ci0JCWlmIChtaWlfZGF0YSAmICgxPDwzKSkgewotCQkJaWYgKG1paV9kYXRhICYgKDE8PDQpKSB7Ci0JCQkJKnNwZWVkID0gSUZfUE9SVF8xMDBCQVNFRlg7Ci0JCQkJZGV2LT5pZl9wb3J0ID0gSUZfUE9SVF8xMDBCQVNFRlg7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VUWDsKLQkJCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VUWDsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCSpzcGVlZCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJCWRldi0+aWZfcG9ydCA9IElGX1BPUlRfMTBCQVNFVDsKLQkJfQotCX0KLQllbHNlIHsKLQkJKmxpbmsgPSAwOwotCQkqc3BlZWQgPSAwOwotCQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05PV047Ci0JfQotCXJldHVybiAwOwotfQotCi0KLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwotaW50IHN0dWJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JLy9wcmludGsoIlBIWSBzdHViX2luaXRcbiIpOwotCXJldHVybiAwOwotfQotCi1pbnQgc3R1Yl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIpCi17Ci0JLy9wcmludGsoIlBIWSBzdHViX3Jlc2V0XG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IAotc3R1Yl9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCB1MTYgKmxpbmssIHUxNiAqc3BlZWQpCi17Ci0JLy9wcmludGsoIlBIWSBzdHViX3N0YXR1c1xuIik7Ci0JKmxpbmsgPSAxOwotCS8qIGhtbW0sIHJldmlzaXQgKi8KLQkqc3BlZWQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQlkZXYtPmlmX3BvcnQgPSBJRl9QT1JUXzEwMEJBU0VGWDsKLQlyZXR1cm4gMDsKLX0KKyNpZiBkZWZpbmVkKEFVMVhYWF9QSFkwX0JVU0lEKSAmJiAoQVUxWFhYX1BIWTBfQlVTSUQgPiAwKQorIyBlcnJvciBNQUMwLWFzc29jaWF0ZWQgUEhZIGF0dGFjaGVkIDJuZCBNQUNzIE1JSSBidXMgbm90IHN1cHBvcnRlZCB5ZXQKICNlbmRpZgogCi1zdHJ1Y3QgcGh5X29wcyBiY21fNTIwMV9vcHMgPSB7Ci0JYmNtXzUyMDFfaW5pdCwKLQliY21fNTIwMV9yZXNldCwKLQliY21fNTIwMV9zdGF0dXMsCi19OwotCi1zdHJ1Y3QgcGh5X29wcyBhbTc5Yzg3NF9vcHMgPSB7Ci0JYW03OWM4NzRfaW5pdCwKLQlhbTc5Yzg3NF9yZXNldCwKLQlhbTc5Yzg3NF9zdGF0dXMsCi19OwotCi1zdHJ1Y3QgcGh5X29wcyBhbTc5YzkwMV9vcHMgPSB7Ci0JYW03OWM5MDFfaW5pdCwKLQlhbTc5YzkwMV9yZXNldCwKLQlhbTc5YzkwMV9zdGF0dXMsCi19OwotCi1zdHJ1Y3QgcGh5X29wcyBsc2lfODAyMjdfb3BzID0geyAKLQlsc2lfODAyMjdfaW5pdCwKLQlsc2lfODAyMjdfcmVzZXQsCi0JbHNpXzgwMjI3X3N0YXR1cywKLX07Ci0KLXN0cnVjdCBwaHlfb3BzIGx4dDk3MWFfb3BzID0geyAKLQlseHQ5NzFhX2luaXQsCi0JbHh0OTcxYV9yZXNldCwKLQlseHQ5NzFhX3N0YXR1cywKLX07Ci0KLXN0cnVjdCBwaHlfb3BzIGtzODk5NW1fb3BzID0gewotCWtzODk5NW1faW5pdCwKLQlrczg5OTVtX3Jlc2V0LAotCWtzODk5NW1fc3RhdHVzLAotfTsKLQotc3RydWN0IHBoeV9vcHMgc21zY184M0MxODVfb3BzID0gewotCXNtc2NfODNDMTg1X2luaXQsCi0Jc21zY184M0MxODVfcmVzZXQsCi0Jc21zY184M0MxODVfc3RhdHVzLAotfTsKLQotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi1zdHJ1Y3QgcGh5X29wcyBzdHViX29wcyA9IHsKLQlzdHViX2luaXQsCi0Jc3R1Yl9yZXNldCwKLQlzdHViX3N0YXR1cywKLX07Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBtaWlfY2hpcF9pbmZvIHsKLQljb25zdCBjaGFyICogbmFtZTsKLQl1MTYgcGh5X2lkMDsKLQl1MTYgcGh5X2lkMTsKLQlzdHJ1Y3QgcGh5X29wcyAqcGh5X29wczsJCi0JaW50IGR1YWxfcGh5OwotfSBtaWlfY2hpcF90YWJsZVtdID0gewotCXsiQnJvYWRjb20gQkNNNTIwMSAxMC8xMDAgQmFzZVQgUEhZIiwweDAwNDAsMHg2MjEyLCAmYmNtXzUyMDFfb3BzLDB9LAotCXsiQnJvYWRjb20gQkNNNTIyMSAxMC8xMDAgQmFzZVQgUEhZIiwweDAwNDAsMHg2MWU0LCAmYmNtXzUyMDFfb3BzLDB9LAotCXsiQnJvYWRjb20gQkNNNTIyMiAxMC8xMDAgQmFzZVQgUEhZIiwweDAwNDAsMHg2MzIyLCAmYmNtXzUyMDFfb3BzLDF9LAotCXsiTlMgRFA4Mzg0NyBQSFkiLCAweDIwMDAsIDB4NWMzMCwgJmJjbV81MjAxX29wcyAsMH0sCi0JeyJBTUQgNzlDOTAxIEhvbWVQTkEgUEhZIiwweDAwMDAsMHgzNWM4LCAmYW03OWM5MDFfb3BzLDB9LAotCXsiQU1EIDc5Qzg3NCAxMC8xMDAgQmFzZVQgUEhZIiwweDAwMjIsMHg1NjFiLCAmYW03OWM4NzRfb3BzLDB9LAotCXsiTFNJIDgwMjI3IDEwLzEwMCBCYXNlVCBQSFkiLDB4MDAxNiwweGY4NDAsICZsc2lfODAyMjdfb3BzLDB9LAotCXsiSW50ZWwgTFhUOTcxQSBEdWFsIFNwZWVkIFBIWSIsMHgwMDEzLDB4NzhlMiwgJmx4dDk3MWFfb3BzLDB9LAotCXsiS2VuZGluIEtTODk5NU0gMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDIyLDB4MTQ1MCwgJmtzODk5NW1fb3BzLDB9LAotCXsiU01TQyBMQU44M0MxODUgMTAvMTAwIEJhc2VUIFBIWSIsMHgwMDA3LDB4YzBhMywgJnNtc2NfODNDMTg1X29wcywwfSwKLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwotCXsiU3R1YiIsIDB4MTIzNCwgMHg1Njc4LCAmc3R1Yl9vcHMgfSwKLSNlbmRpZgotCXswLH0sCi19OwotCi1zdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnKQorLyoKKyAqIE1JSSBvcGVyYXRpb25zCisgKi8KK3N0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgaW50IHJlZykKIHsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwotCXZvbGF0aWxlIHUzMiAqbWlpX2NvbnRyb2xfcmVnOwotCXZvbGF0aWxlIHUzMiAqbWlpX2RhdGFfcmVnOworCXZvbGF0aWxlIHUzMiAqY29uc3QgbWlpX2NvbnRyb2xfcmVnID0gJmF1cC0+bWFjLT5taWlfY29udHJvbDsKKwl2b2xhdGlsZSB1MzIgKmNvbnN0IG1paV9kYXRhX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2RhdGE7CiAJdTMyIHRpbWVkb3V0ID0gMjA7CiAJdTMyIG1paV9jb250cm9sOwogCi0JI2lmZGVmIENPTkZJR19CQ001MjIyX0RVQUxfUEhZCi0JLyogRmlyc3QgdGltZSB3ZSBwcm9iZSwgaXQncyBmb3IgdGhlIG1hYzAgcGh5LgotCSAqIFNpbmNlIHdlIGhhdmVuJ3QgZGV0ZXJtaW5lZCB5ZXQgdGhhdCB3ZSBoYXZlIGEgZHVhbCBwaHksCi0JICogYXVwLT5taWktPm1paV9jb250cm9sX3JlZyB3b24ndCBiZSBzZXR1cCBhbmQgd2UnbGwKLQkgKiBkZWZhdWx0IHRvIHRoZSBlbHNlIHN0YXRlbWVudC4KLQkgKiBCeSB0aGUgdGltZSB3ZSBwcm9iZSBmb3IgdGhlIG1hYzEgcGh5LCB0aGUgbWlpX2NvbnRyb2xfcmVnCi0JICogd2lsbCBiZSBzZXR1cCB0byBiZSB0aGUgYWRkcmVzcyBvZiB0aGUgbWFjMCBwaHkgY29udHJvbCBzaW5jZQotCSAqIGJvdGggcGh5cyBhcmUgY29udHJvbGxlZCB0aHJvdWdoIG1hYzAuCi0JICovCi0JaWYgKGF1cC0+bWlpICYmIGF1cC0+bWlpLT5taWlfY29udHJvbF9yZWcpIHsKLQkJbWlpX2NvbnRyb2xfcmVnID0gYXVwLT5taWktPm1paV9jb250cm9sX3JlZzsKLQkJbWlpX2RhdGFfcmVnID0gYXVwLT5taWktPm1paV9kYXRhX3JlZzsKLQl9Ci0JZWxzZSBpZiAoYXVfbWFjc1swXS0+bWlpICYmIGF1X21hY3NbMF0tPm1paS0+bWlpX2NvbnRyb2xfcmVnKSB7Ci0JCS8qIGFzc3VtZSBib3RoIHBoeXMgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBtYWMwICovCi0JCW1paV9jb250cm9sX3JlZyA9IGF1X21hY3NbMF0tPm1paS0+bWlpX2NvbnRyb2xfcmVnOwotCQltaWlfZGF0YV9yZWcgPSBhdV9tYWNzWzBdLT5taWktPm1paV9kYXRhX3JlZzsKLQl9Ci0JZWxzZSAKLQkjZW5kaWYKLQl7Ci0JCS8qIGRlZmF1bHQgY29udHJvbCBhbmQgZGF0YSByZWcgYWRkcmVzc2VzICovCi0JCW1paV9jb250cm9sX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2NvbnRyb2w7Ci0JCW1paV9kYXRhX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2RhdGE7Ci0JfQotCiAJd2hpbGUgKCptaWlfY29udHJvbF9yZWcgJiBNQUNfTUlJX0JVU1kpIHsKIAkJbWRlbGF5KDEpOwogCQlpZiAoLS10aW1lZG91dCA9PSAwKSB7CkBAIC04MzUsNyArMjE1LDcgQEAKIAl9CiAKIAltaWlfY29udHJvbCA9IE1BQ19TRVRfTUlJX1NFTEVDVF9SRUcocmVnKSB8IAotCQlNQUNfU0VUX01JSV9TRUxFQ1RfUEhZKHBoeV9pZCkgfCBNQUNfTUlJX1JFQUQ7CisJCU1BQ19TRVRfTUlJX1NFTEVDVF9QSFkocGh5X2FkZHIpIHwgTUFDX01JSV9SRUFEOwogCiAJKm1paV9jb250cm9sX3JlZyA9IG1paV9jb250cm9sOwogCkBAIC04NTEsMzIgKzIzMSwxNCBAQAogCXJldHVybiAoaW50KSptaWlfZGF0YV9yZWc7CiB9CiAKLXN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZywgdTE2IHZhbHVlKQorc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIGludCByZWcsIHUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwotCXZvbGF0aWxlIHUzMiAqbWlpX2NvbnRyb2xfcmVnOwotCXZvbGF0aWxlIHUzMiAqbWlpX2RhdGFfcmVnOworCXZvbGF0aWxlIHUzMiAqY29uc3QgbWlpX2NvbnRyb2xfcmVnID0gJmF1cC0+bWFjLT5taWlfY29udHJvbDsKKwl2b2xhdGlsZSB1MzIgKmNvbnN0IG1paV9kYXRhX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2RhdGE7CiAJdTMyIHRpbWVkb3V0ID0gMjA7CiAJdTMyIG1paV9jb250cm9sOwogCi0JI2lmZGVmIENPTkZJR19CQ001MjIyX0RVQUxfUEhZCi0JaWYgKGF1cC0+bWlpICYmIGF1cC0+bWlpLT5taWlfY29udHJvbF9yZWcpIHsKLQkJbWlpX2NvbnRyb2xfcmVnID0gYXVwLT5taWktPm1paV9jb250cm9sX3JlZzsKLQkJbWlpX2RhdGFfcmVnID0gYXVwLT5taWktPm1paV9kYXRhX3JlZzsKLQl9Ci0JZWxzZSBpZiAoYXVfbWFjc1swXS0+bWlpICYmIGF1X21hY3NbMF0tPm1paS0+bWlpX2NvbnRyb2xfcmVnKSB7Ci0JCS8qIGFzc3VtZSBib3RoIHBoeXMgYXJlIGNvbnRyb2xsZWQgdGhyb3VnaCBtYWMwICovCi0JCW1paV9jb250cm9sX3JlZyA9IGF1X21hY3NbMF0tPm1paS0+bWlpX2NvbnRyb2xfcmVnOwotCQltaWlfZGF0YV9yZWcgPSBhdV9tYWNzWzBdLT5taWktPm1paV9kYXRhX3JlZzsKLQl9Ci0JZWxzZSAKLQkjZW5kaWYKLQl7Ci0JCS8qIGRlZmF1bHQgY29udHJvbCBhbmQgZGF0YSByZWcgYWRkcmVzc2VzICovCi0JCW1paV9jb250cm9sX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2NvbnRyb2w7Ci0JCW1paV9kYXRhX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2RhdGE7Ci0JfQotCiAJd2hpbGUgKCptaWlfY29udHJvbF9yZWcgJiBNQUNfTUlJX0JVU1kpIHsKIAkJbWRlbGF5KDEpOwogCQlpZiAoLS10aW1lZG91dCA9PSAwKSB7CkBAIC04ODcsMTY1ICsyNDksMTQ1IEBACiAJfQogCiAJbWlpX2NvbnRyb2wgPSBNQUNfU0VUX01JSV9TRUxFQ1RfUkVHKHJlZykgfCAKLQkJTUFDX1NFVF9NSUlfU0VMRUNUX1BIWShwaHlfaWQpIHwgTUFDX01JSV9XUklURTsKKwkJTUFDX1NFVF9NSUlfU0VMRUNUX1BIWShwaHlfYWRkcikgfCBNQUNfTUlJX1dSSVRFOwogCiAJKm1paV9kYXRhX3JlZyA9IHZhbHVlOwogCSptaWlfY29udHJvbF9yZWcgPSBtaWlfY29udHJvbDsKIH0KIAotCi1zdGF0aWMgdm9pZCBkdW1wX21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkKQorc3RhdGljIGludCBtZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtKQogewotCWludCBpLCB2YWw7CisJLyogV0FSTklORzogYnVzLT5waHlfbWFwW3BoeV9hZGRyXS5hdHRhY2hlZF9kZXYgPT0gZGV2IGRvZXMKKwkgKiBfTk9UXyBob2xkIChlLmcuIHdoZW4gUEhZIGlzIGFjY2Vzc2VkIHRocm91Z2ggb3RoZXIgTUFDJ3MgTUlJIGJ1cykgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqY29uc3QgZGV2ID0gYnVzLT5wcml2OwogCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlpZiAoKHZhbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9pZCwgaSkpID49IDApCi0JCQlwcmludGsoIiVzOiBNSUkgUmVnICVkPSV4XG4iLCBkZXYtPm5hbWUsIGksIHZhbCk7Ci0JfQotCWZvciAoaSA9IDE2OyBpIDwgMjU7IGkrKykgewotCQlpZiAoKHZhbCA9IG1kaW9fcmVhZChkZXYsIHBoeV9pZCwgaSkpID49IDApCi0JCQlwcmludGsoIiVzOiBNSUkgUmVnICVkPSV4XG4iLCBkZXYtPm5hbWUsIGksIHZhbCk7Ci0JfQorCWVuYWJsZV9tYWMoZGV2LCAwKTsgLyogbWFrZSBzdXJlIHRoZSBNQUMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKwkJCSAgICAgKiBtaWlfYnVzIGlzIGVuYWJsZWQgKi8KKwlyZXR1cm4gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIHJlZ251bSk7CiB9CiAKLXN0YXRpYyBpbnQgbWlpX3Byb2JlIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0sCisJCQkgdTE2IHZhbHVlKQogewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmNvbnN0IGRldiA9IGJ1cy0+cHJpdjsKKworCWVuYWJsZV9tYWMoZGV2LCAwKTsgLyogbWFrZSBzdXJlIHRoZSBNQUMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKwkJCSAgICAgKiBtaWlfYnVzIGlzIGVuYWJsZWQgKi8KKwltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIHJlZ251bSwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1kaW9idXNfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqY29uc3QgZGV2ID0gYnVzLT5wcml2OworCisJZW5hYmxlX21hYyhkZXYsIDApOyAvKiBtYWtlIHN1cmUgdGhlIE1BQyBhc3NvY2lhdGVkIHdpdGggdGhpcworCQkJICAgICAqIG1paV9idXMgaXMgZW5hYmxlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1paV9wcm9iZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBOVUxMOworCisjaWYgZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpCisJQlVHX09OKGF1cC0+bWFjX2lkIDwgMCB8fCBhdXAtPm1hY19pZCA+IDEpOworCisJaWYoYXVwLT5tYWNfaWQgPT0gMCkgeyAvKiBnZXQgUEhZMCAqLworIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkwX0FERFIpCisJCXBoeWRldiA9IGF1X21hY3NbQVUxWFhYX1BIWTBfQlVTSURdLT5taWlfYnVzLnBoeV9tYXBbQVUxWFhYX1BIWTBfQUREUl07CisjIGVsc2UKKwkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjolczogdXNpbmcgUEhZLWxlc3Mgc2V0dXBcbiIsCisJCQlkZXYtPm5hbWUpOworCQlyZXR1cm4gMDsKKyMgZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZMF9BRERSKSAqLworCX0gZWxzZSBpZiAoYXVwLT5tYWNfaWQgPT0gMSkgeyAvKiBnZXQgUEhZMSAqLworIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX0FERFIpCisJCXBoeWRldiA9IGF1X21hY3NbQVUxWFhYX1BIWTFfQlVTSURdLT5taWlfYnVzLnBoeV9tYXBbQVUxWFhYX1BIWTFfQUREUl07CisjIGVsc2UKKwkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjolczogdXNpbmcgUEhZLWxlc3Mgc2V0dXBcbiIsCisJCQlkZXYtPm5hbWUpOworCQlyZXR1cm4gMDsKKyMgZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZMV9BRERSKSAqLworCX0KKworI2Vsc2UgLyogZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpICovCiAJaW50IHBoeV9hZGRyOwotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi0JaW50IHBoeV9mb3VuZD0wOwotI2VuZGlmCiAKLQkvKiBzZWFyY2ggZm9yIHRvdGFsIG9mIDMyIHBvc3NpYmxlIG1paSBwaHkgYWRkcmVzc2VzICovCi0JZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgMzI7IHBoeV9hZGRyKyspIHsKLQkJdTE2IG1paV9zdGF0dXM7Ci0JCXUxNiBwaHlfaWQwLCBwaHlfaWQxOwotCQlpbnQgaTsKLQotCQkjaWZkZWYgQ09ORklHX0JDTTUyMjJfRFVBTF9QSFkKLQkJLyogTWFzayB0aGUgYWxyZWFkeSBmb3VuZCBwaHksIHRyeSBuZXh0IG9uZSAqLwotCQlpZiAoYXVfbWFjc1swXS0+bWlpICYmIGF1X21hY3NbMF0tPm1paS0+bWlpX2NvbnRyb2xfcmVnKSB7Ci0JCQlpZiAoYXVfbWFjc1swXS0+cGh5X2FkZHIgPT0gcGh5X2FkZHIpCi0JCQkJY29udGludWU7CisJLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBQSFkgb24gdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyAqLworCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykKKwkJaWYgKGF1cC0+bWlpX2J1cy5waHlfbWFwW3BoeV9hZGRyXSkgeworCQkJcGh5ZGV2ID0gYXVwLT5taWlfYnVzLnBoeV9tYXBbcGh5X2FkZHJdOworIyBpZiAhZGVmaW5lZChBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIpCisJCQlicmVhazsgLyogYnJlYWsgb3V0IHdpdGggZmlyc3Qgb25lIGZvdW5kICovCisjIGVuZGlmCiAJCX0KLQkJI2VuZGlmCiAKLQkJbWlpX3N0YXR1cyA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfU1RBVFVTKTsKLQkJaWYgKG1paV9zdGF0dXMgPT0gMHhmZmZmIHx8IG1paV9zdGF0dXMgPT0gMHgwMDAwKQotCQkJLyogdGhlIG1paSBpcyBub3QgYWNjZXNzYWJsZSwgdHJ5IG5leHQgb25lICovCi0JCQljb250aW51ZTsKKyMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMCkKKwkvKiB0cnkgaGFyZGVyIHRvIGZpbmQgYSBQSFkgKi8KKwlpZiAoIXBoeWRldiAmJiAoYXVwLT5tYWNfaWQgPT0gMSkpIHsKKwkJLyogbm8gUEhZIGZvdW5kLCBtYXliZSB3ZSBoYXZlIGEgZHVhbCBQSFk/ICovCisJCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6IG5vIFBIWSBmb3VuZCBvbiBNQUMxLCAiCisJCQkibGV0J3Mgc2VlIGlmIGl0J3MgYXR0YWNoZWQgdG8gTUFDMC4uLlxuIik7CiAKLQkJcGh5X2lkMCA9IG1kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCBNSUlfUEhZX0lEMCk7Ci0JCXBoeV9pZDEgPSBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgTUlJX1BIWV9JRDEpOworCQlCVUdfT04oIWF1X21hY3NbMF0pOwogCi0JCS8qIHNlYXJjaCBvdXIgbWlpIHRhYmxlIGZvciB0aGUgY3VycmVudCBtaWkgKi8gCi0JCWZvciAoaSA9IDA7IG1paV9jaGlwX3RhYmxlW2ldLnBoeV9pZDE7IGkrKykgewotCQkJaWYgKHBoeV9pZDAgPT0gbWlpX2NoaXBfdGFibGVbaV0ucGh5X2lkMCAmJgotCQkJICAgIHBoeV9pZDEgPT0gbWlpX2NoaXBfdGFibGVbaV0ucGh5X2lkMSkgewotCQkJCXN0cnVjdCBtaWlfcGh5ICogbWlpX3BoeSA9IGF1cC0+bWlpOworCQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIG5vbi1hdHRhY2hlZCBQSFkgb24KKwkJICogdGhlIE1BQzAgTUlJIGJ1cyAqLworCQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCBQSFlfTUFYX0FERFI7IHBoeV9hZGRyKyspIHsKKwkJCXN0cnVjdCBwaHlfZGV2aWNlICpjb25zdCB0bXBfcGh5ZGV2ID0KKwkJCQlhdV9tYWNzWzBdLT5taWlfYnVzLnBoeV9tYXBbcGh5X2FkZHJdOwogCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0IHBoeSBhZGRyZXNzICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG1paV9jaGlwX3RhYmxlW2ldLm5hbWUsIAotCQkJCSAgICAgICBwaHlfYWRkcik7Ci0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLQkJCQlwaHlfZm91bmQgPSAxOwotI2VuZGlmCi0JCQkJbWlpX3BoeS0+Y2hpcF9pbmZvID0gbWlpX2NoaXBfdGFibGUraTsKLQkJCQlhdXAtPnBoeV9hZGRyID0gcGh5X2FkZHI7Ci0JCQkJYXVwLT53YW50X2F1dG9uZWcgPSAxOwotCQkJCWF1cC0+cGh5X29wcyA9IG1paV9jaGlwX3RhYmxlW2ldLnBoeV9vcHM7Ci0JCQkJYXVwLT5waHlfb3BzLT5waHlfaW5pdChkZXYscGh5X2FkZHIpOworCQkJaWYgKCF0bXBfcGh5ZGV2KQorCQkJCWNvbnRpbnVlOyAvKiBubyBQSFkgaGVyZS4uLiAqLwogCi0JCQkJLy8gQ2hlY2sgZm9yIGR1YWwtcGh5IGFuZCB0aGVuIHN0b3JlIHJlcXVpcmVkIAotCQkJCS8vIHZhbHVlcyBhbmQgc2V0IGluZGljYXRvcnMuIFdlIG5lZWQgdG8gZG8gCi0JCQkJLy8gdGhpcyBub3cgc2luY2UgbWRpb197cmVhZCx3cml0ZX0gbmVlZCB0aGUgCi0JCQkJLy8gY29udHJvbCBhbmQgZGF0YSByZWdpc3RlciBhZGRyZXNzZXMuCi0JCQkJI2lmZGVmIENPTkZJR19CQ001MjIyX0RVQUxfUEhZCi0JCQkJaWYgKCBtaWlfY2hpcF90YWJsZVtpXS5kdWFsX3BoeSkgeworCQkJaWYgKHRtcF9waHlkZXYtPmF0dGFjaGVkX2RldikKKwkJCQljb250aW51ZTsgLyogYWxyZWFkeSBjbGFpbWVkIGJ5IE1BQzAgKi8KIAotCQkJCQkvKiBhc3N1bWUgYm90aCBwaHlzIGFyZSBjb250cm9sbGVkIAotCQkJCQkgKiB0aHJvdWdoIE1BQzAuIEJvYXJkIHNwZWNpZmljPyAqLwotCQkJCQkKLQkJCQkJLyogc2FuaXR5IGNoZWNrICovCi0JCQkJCWlmICghYXVfbWFjc1swXSB8fCAhYXVfbWFjc1swXS0+bWlpKQotCQkJCQkJcmV0dXJuIC0xOwotCQkJCQlhdXAtPm1paS0+bWlpX2NvbnRyb2xfcmVnID0gKHUzMiAqKQotCQkJCQkJJmF1X21hY3NbMF0tPm1hYy0+bWlpX2NvbnRyb2w7Ci0JCQkJCWF1cC0+bWlpLT5taWlfZGF0YV9yZWcgPSAodTMyICopCi0JCQkJCQkmYXVfbWFjc1swXS0+bWFjLT5taWlfZGF0YTsKLQkJCQl9Ci0JCQkJI2VuZGlmCi0JCQkJZ290byBmb3VuZDsKLQkJCX0KKwkJCXBoeWRldiA9IHRtcF9waHlkZXY7CisJCQlicmVhazsgLyogZm91bmQgaXQgKi8KIAkJfQogCX0KLWZvdW5kOgorIyBlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFkxX1NFQVJDSF9PVEhFUl9CVVMpICovCiAKLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwotCS8qIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgTWljcmVsL0tlbmRpbiA1IHBvcnQgc3dpdGNoCi0JICAgVGhlIHNlY29uZCBNQUMgZG9lc24ndCBzZWUgYSBQSFkgY29ubmVjdGVkLi4uIHNvIHdlIG5lZWQgdG8KLQkgICB0cmljayBpdCBpbnRvIHRoaW5raW5nIHdlIGhhdmUgb25lLgotCQkKLQkgICBJZiB0aGlzIGtlcm5lbCBpcyBydW4gb24gYW5vdGhlciBBdTE1MDAgZGV2ZWxvcG1lbnQgYm9hcmQKLQkgICB0aGUgc3R1YiB3aWxsIGJlIGZvdW5kIGFzIHdlbGwgYXMgdGhlIGFjdHVhbCBQSFkuIEhvd2V2ZXIsCi0JICAgdGhlIGxhc3QgZm91bmQgUEhZIHdpbGwgYmUgdXNlZC4uLiB1c3VhbGx5IGF0IEFkZHIgMzEgKERiMTUwMCkuCQotCSovCi0JaWYgKCAoIXBoeV9mb3VuZCkgKQotCXsKLQkJdTE2IHBoeV9pZDAsIHBoeV9pZDE7Ci0JCWludCBpOwotCi0JCXBoeV9pZDAgPSAweDEyMzQ7Ci0JCXBoeV9pZDEgPSAweDU2Nzg7Ci0KLQkJLyogc2VhcmNoIG91ciBtaWkgdGFibGUgZm9yIHRoZSBjdXJyZW50IG1paSAqLyAKLQkJZm9yIChpID0gMDsgbWlpX2NoaXBfdGFibGVbaV0ucGh5X2lkMTsgaSsrKSB7Ci0JCQlpZiAocGh5X2lkMCA9PSBtaWlfY2hpcF90YWJsZVtpXS5waHlfaWQwICYmCi0JCQkgICAgcGh5X2lkMSA9PSBtaWlfY2hpcF90YWJsZVtpXS5waHlfaWQxKSB7Ci0JCQkJc3RydWN0IG1paV9waHkgKiBtaWlfcGh5OwotCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0IHBoeSBhZGRyZXNzICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG1paV9jaGlwX3RhYmxlW2ldLm5hbWUsIAotCQkJCSAgICAgICBwaHlfYWRkcik7Ci0JCQkJbWlpX3BoeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWlfcGh5KSwgCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAobWlpX3BoeSkgewotCQkJCQltaWlfcGh5LT5jaGlwX2luZm8gPSBtaWlfY2hpcF90YWJsZStpOwotCQkJCQlhdXAtPnBoeV9hZGRyID0gcGh5X2FkZHI7Ci0JCQkJCW1paV9waHktPm5leHQgPSBhdXAtPm1paTsKLQkJCQkJYXVwLT5waHlfb3BzID0gCi0JCQkJCQltaWlfY2hpcF90YWJsZVtpXS5waHlfb3BzOwotCQkJCQlhdXAtPm1paSA9IG1paV9waHk7Ci0JCQkJCWF1cC0+cGh5X29wcy0+cGh5X2luaXQoZGV2LHBoeV9hZGRyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCAKLQkJCQkJCQlkZXYtPm5hbWUpOwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCQkJCW1paV9waHktPmNoaXBfaW5mbyA9IG1paV9jaGlwX3RhYmxlK2k7Ci0JCQkJYXVwLT5waHlfYWRkciA9IHBoeV9hZGRyOwotCQkJCWF1cC0+cGh5X29wcyA9IG1paV9jaGlwX3RhYmxlW2ldLnBoeV9vcHM7Ci0JCQkJYXVwLT5waHlfb3BzLT5waHlfaW5pdChkZXYscGh5X2FkZHIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCWlmIChhdXAtPm1hY19pZCA9PSAwKSB7Ci0JCS8qIHRoZSBCb3Nwb3J1cyBwaHkgcmVzcG9uZHMgdG8gYWRkcmVzc2VzIDAtNSBidXQgCi0JCSAqIDUgaXMgdGhlIGNvcnJlY3Qgb25lLgotCQkgKi8KLQkJYXVwLT5waHlfYWRkciA9IDU7Ci0JfQotI2VuZGlmCi0KLQlpZiAoYXVwLT5taWktPmNoaXBfaW5mbyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEF1MXggTm8ga25vd24gTUlJIHRyYW5zY2VpdmVycyBmb3VuZCFcbiIsCi0JCQkJZGV2LT5uYW1lKTsKKyNlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykgKi8KKwlpZiAoIXBoeWRldikgeworCQlwcmludGsgKEtFUk5fRVJSIERSVl9OQU1FICI6JXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBVc2luZyAlcyBhcyBkZWZhdWx0XG4iLCAKLQkJCWRldi0+bmFtZSwgYXVwLT5taWktPmNoaXBfaW5mby0+bmFtZSk7CisJLyogbm93IHdlIGFyZSBzdXBwb3NlZCB0byBoYXZlIGEgcHJvcGVyIHBoeWRldiwgdG8gYXR0YWNoIHRvLi4uICovCisJQlVHX09OKCFwaHlkZXYpOworCUJVR19PTihwaHlkZXYtPmF0dGFjaGVkX2Rldik7CisKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwgJmF1MTAwMF9hZGp1c3RfbGluaywgMCk7CisKKwlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CisJfQorCisJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KKwlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgorCQkJICAgICAgfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsCisJCQkgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCisJCQkgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCisJCQkgICAgICB8IFNVUFBPUlRFRF9BdXRvbmVnCisJCQkgICAgICAvKiB8IFNVUFBPUlRFRF9QYXVzZSB8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlICovCisJCQkgICAgICB8IFNVUFBPUlRFRF9NSUkKKwkJCSAgICAgIHwgU1VQUE9SVEVEX1RQKTsKKworCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPnN1cHBvcnRlZDsKKworCWF1cC0+b2xkX2xpbmsgPSAwOworCWF1cC0+b2xkX3NwZWVkID0gMDsKKwlhdXAtPm9sZF9kdXBsZXggPSAtMTsKKwlhdXAtPnBoeV9kZXYgPSBwaHlkZXY7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKKwkgICAgICAgIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA5NywzNSArNDM5LDM4IEBACiAJYXVfc3luY19kZWxheSgxMCk7CiB9CiAKLQotc3RhdGljIHZvaWQgcmVzZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBlbmFibGVfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZV9yZXNldCkKIHsKLQlpbnQgaTsKLQl1MzIgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwogCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIAotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXQgbWFjLCBhdXAgJXhcbiIsIAotCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGF1cC0+dGltZXIuZnVuY3Rpb24gPT0gJmF1MTAwMF90aW1lcikgey8qIGNoZWNrIGlmIHRpbWVyIGluaXR0ZWQgKi8KLQkJZGVsX3RpbWVyKCZhdXAtPnRpbWVyKTsKLQl9CiAKLQloYXJkX3N0b3AoZGV2KTsKLQkjaWZkZWYgQ09ORklHX0JDTTUyMjJfRFVBTF9QSFkKLQlpZiAoYXVwLT5tYWNfaWQgIT0gMCkgewotCSNlbmRpZgotCQkvKiBJZiBCQ001MjIyLCB3ZSBjYW4ndCBsZWF2ZSBNQUMwIGluIHJlc2V0IGJlY2F1c2UgdGhlbiAKLQkJICogd2UgY2FuJ3QgYWNjZXNzIHRoZSBkdWFsIHBoeSBmb3IgRVRIMSAqLworCWlmKGZvcmNlX3Jlc2V0IHx8ICghYXVwLT5tYWNfZW5hYmxlZCkpIHsKIAkJKmF1cC0+ZW5hYmxlID0gTUFDX0VOX0NMT0NLX0VOQUJMRTsKIAkJYXVfc3luY19kZWxheSgyKTsKLQkJKmF1cC0+ZW5hYmxlID0gMDsKKwkJKmF1cC0+ZW5hYmxlID0gKE1BQ19FTl9SRVNFVDAgfCBNQUNfRU5fUkVTRVQxIHwgTUFDX0VOX1JFU0VUMgorCQkJCXwgTUFDX0VOX0NMT0NLX0VOQUJMRSk7CiAJCWF1X3N5bmNfZGVsYXkoMik7Ci0JI2lmZGVmIENPTkZJR19CQ001MjIyX0RVQUxfUEhZCisKKwkJYXVwLT5tYWNfZW5hYmxlZCA9IDE7CiAJfQotCSNlbmRpZgorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X21hY191bmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJaW50IGk7CisKKwloYXJkX3N0b3AoZGV2KTsKKworCSphdXAtPmVuYWJsZSA9IE1BQ19FTl9DTE9DS19FTkFCTEU7CisJYXVfc3luY19kZWxheSgyKTsKKwkqYXVwLT5lbmFibGUgPSAwOworCWF1X3N5bmNfZGVsYXkoMik7CisKIAlhdXAtPnR4X2Z1bGwgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspIHsKIAkJLyogcmVzZXQgY29udHJvbCBiaXRzICovCkBAIC0xMTM1LDkgKzQ4MCwyNiBAQAogCQkvKiByZXNldCBjb250cm9sIGJpdHMgKi8KIAkJYXVwLT50eF9kbWFfcmluZ1tpXS0+YnVmZl9zdGF0ICY9IH4weGY7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJYXVwLT5tYWNfZW5hYmxlZCA9IDA7CisKIH0KIAorc3RhdGljIHZvaWQgcmVzZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICpjb25zdCBhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldCBtYWMsIGF1cCAleFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlyZXNldF9tYWNfdW5sb2NrZWQgKGRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKK30KIAogLyogCiAgKiBTZXR1cCB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgInJpbmdzIi4gIFRoZXNlIHBvaW50ZXJzIGFyZSB0aGUgYWRkcmVzc2VzCkBAIC0xMTYwLDEyICs1MjIsMjcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB7Ci0JaW50IHBvcnQ7CiAJdTMyIGJhc2VfYWRkcjsKIAl1MzIgbWFjZW5fYWRkcjsKIAlpbnQgaXJxOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci19IGlmbGlzdFsyXTsKK30gaWZsaXN0WzJdID0geworI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCisJe0FVMTAwMF9FVEgwX0JBU0UsIEFVMTAwMF9NQUMwX0VOQUJMRSwgQVUxMDAwX01BQzBfRE1BX0lOVH0sCisJe0FVMTAwMF9FVEgxX0JBU0UsIEFVMTAwMF9NQUMxX0VOQUJMRSwgQVUxMDAwX01BQzFfRE1BX0lOVH0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCisJe0FVMTEwMF9FVEgwX0JBU0UsIEFVMTEwMF9NQUMwX0VOQUJMRSwgQVUxMTAwX01BQzBfRE1BX0lOVH0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCisJe0FVMTUwMF9FVEgwX0JBU0UsIEFVMTUwMF9NQUMwX0VOQUJMRSwgQVUxNTAwX01BQzBfRE1BX0lOVH0sCisJe0FVMTUwMF9FVEgxX0JBU0UsIEFVMTUwMF9NQUMxX0VOQUJMRSwgQVUxNTAwX01BQzFfRE1BX0lOVH0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCisJe0FVMTU1MF9FVEgwX0JBU0UsIEFVMTU1MF9NQUMwX0VOQUJMRSwgQVUxNTUwX01BQzBfRE1BX0lOVH0sCisJe0FVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVH0KKyNlbmRpZgorfTsKIAogc3RhdGljIGludCBudW1faWZzOwogCkBAIC0xMTc2LDU4ICs1NTMsMTQgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYXUxMDAwX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwogCWludCBuaSA9IChpbnQpKChhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKShTWVNfUEZfTkkyKSkgPj4gNCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgaSwgZm91bmRfb25lID0gMDsKIAotCXN3aXRjaCAoYy0+Y3B1dHlwZSkgewotI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCi0JY2FzZSBDUFVfQVUxMDAwOgotCQludW1faWZzID0gMiAtIG5pOwotCQlpZmxpc3RbMF0uYmFzZV9hZGRyID0gQVUxMDAwX0VUSDBfQkFTRTsKLQkJaWZsaXN0WzFdLmJhc2VfYWRkciA9IEFVMTAwMF9FVEgxX0JBU0U7Ci0JCWlmbGlzdFswXS5tYWNlbl9hZGRyID0gQVUxMDAwX01BQzBfRU5BQkxFOwotCQlpZmxpc3RbMV0ubWFjZW5fYWRkciA9IEFVMTAwMF9NQUMxX0VOQUJMRTsKLQkJaWZsaXN0WzBdLmlycSA9IEFVMTAwMF9NQUMwX0RNQV9JTlQ7Ci0JCWlmbGlzdFsxXS5pcnEgPSBBVTEwMDBfTUFDMV9ETUFfSU5UOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCi0JY2FzZSBDUFVfQVUxMTAwOgotCQludW1faWZzID0gMSAtIG5pOwotCQlpZmxpc3RbMF0uYmFzZV9hZGRyID0gQVUxMTAwX0VUSDBfQkFTRTsKLQkJaWZsaXN0WzBdLm1hY2VuX2FkZHIgPSBBVTExMDBfTUFDMF9FTkFCTEU7Ci0JCWlmbGlzdFswXS5pcnEgPSBBVTExMDBfTUFDMF9ETUFfSU5UOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCi0JY2FzZSBDUFVfQVUxNTAwOgotCQludW1faWZzID0gMiAtIG5pOwotCQlpZmxpc3RbMF0uYmFzZV9hZGRyID0gQVUxNTAwX0VUSDBfQkFTRTsKLQkJaWZsaXN0WzFdLmJhc2VfYWRkciA9IEFVMTUwMF9FVEgxX0JBU0U7Ci0JCWlmbGlzdFswXS5tYWNlbl9hZGRyID0gQVUxNTAwX01BQzBfRU5BQkxFOwotCQlpZmxpc3RbMV0ubWFjZW5fYWRkciA9IEFVMTUwMF9NQUMxX0VOQUJMRTsKLQkJaWZsaXN0WzBdLmlycSA9IEFVMTUwMF9NQUMwX0RNQV9JTlQ7Ci0JCWlmbGlzdFsxXS5pcnEgPSBBVTE1MDBfTUFDMV9ETUFfSU5UOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCi0JY2FzZSBDUFVfQVUxNTUwOgotCQludW1faWZzID0gMiAtIG5pOwotCQlpZmxpc3RbMF0uYmFzZV9hZGRyID0gQVUxNTUwX0VUSDBfQkFTRTsKLQkJaWZsaXN0WzFdLmJhc2VfYWRkciA9IEFVMTU1MF9FVEgxX0JBU0U7Ci0JCWlmbGlzdFswXS5tYWNlbl9hZGRyID0gQVUxNTUwX01BQzBfRU5BQkxFOwotCQlpZmxpc3RbMV0ubWFjZW5fYWRkciA9IEFVMTU1MF9NQUMxX0VOQUJMRTsKLQkJaWZsaXN0WzBdLmlycSA9IEFVMTU1MF9NQUMwX0RNQV9JTlQ7Ci0JCWlmbGlzdFsxXS5pcnEgPSBBVTE1NTBfTUFDMV9ETUFfSU5UOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCW51bV9pZnMgPSAwOwotCX0KKwludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7CisKIAlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gYXUxMDAwX3Byb2JlKGlmbGlzdFtpXS5iYXNlX2FkZHIsIGlmbGlzdFtpXS5pcnEsIGkpOworCQlkZXYgPSBhdTEwMDBfcHJvYmUoaSk7CiAJCWlmbGlzdFtpXS5kZXYgPSBkZXY7CiAJCWlmIChkZXYpCiAJCQlmb3VuZF9vbmUrKzsKQEAgLTEyMzcsMTc4ICs1NzAsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdTEwMDBfc2V0dXBfYW5lZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWR2ZXJ0aXNlKQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsKLQl1MTYgY3RsLCBhZHY7Ci0KLQkvKiBTZXR1cCBzdGFuZGFyZCBhZHZlcnRpc2UgKi8KLQlhZHYgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQURWRVJUSVNFKTsKLQlhZHYgJj0gfihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFXzEwMEJBU0U0KTsKLQlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYpCi0JCWFkdiB8PSBBRFZFUlRJU0VfMTBIQUxGOwotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkKLQkJYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7Ci0JaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZikKLQkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOwotCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpCi0JCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKLQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0FEVkVSVElTRSwgYWR2KTsKLQotCS8qIFN0YXJ0L1Jlc3RhcnQgYW5lZyAqLwotCWN0bCA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKLQljdGwgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7Ci0JbWRpb193cml0ZShkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9CTUNSLCBjdGwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXUxMDAwX3NldHVwX2ZvcmNlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3BlZWQsIGludCBmZCkKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnByaXY7Ci0JdTE2IGN0bDsKLQotCWN0bCA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKLQljdGwgJj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMCB8IEJNQ1JfQU5FTkFCTEUpOwotCi0JLyogRmlyc3QgcmVzZXQgdGhlIFBIWSAqLwotCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgY3RsIHwgQk1DUl9SRVNFVCk7Ci0KLQkvKiBTZWxlY3Qgc3BlZWQgJiBkdXBsZXggKi8KLQlzd2l0Y2ggKHNwZWVkKSB7Ci0JCWNhc2UgU1BFRURfMTA6Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQljdGwgfD0gQk1DUl9TUEVFRDEwMDsKLQkJCWJyZWFrOwotCQljYXNlIFNQRUVEXzEwMDA6Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKGZkID09IERVUExFWF9GVUxMKQotCQljdGwgfD0gQk1DUl9GVUxMRFBMWDsKLQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0JNQ1IsIGN0bCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZAotYXUxMDAwX3N0YXJ0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5wcml2OwotCXUzMiBhZHZlcnRpc2U7Ci0JaW50IGF1dG9uZWc7Ci0JaW50IGZvcmNlZF9zcGVlZDsKLQlpbnQgZm9yY2VkX2R1cGxleDsKLQotCS8qIERlZmF1bHQgYWR2ZXJ0aXNlICovCi0JYWR2ZXJ0aXNlID0gR0VOTUlJX0RFRkFVTFRfQURWRVJUSVNFOwotCWF1dG9uZWcgPSBhdXAtPndhbnRfYXV0b25lZzsKLQlmb3JjZWRfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JZm9yY2VkX2R1cGxleCA9IERVUExFWF9GVUxMOwotCi0JLyogU2V0dXAgbGluayBwYXJhbWV0ZXJzICovCi0JaWYgKGNtZCkgewotCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7Ci0JCQlhZHZlcnRpc2UgPSBjbWQtPmFkdmVydGlzaW5nOwotCQkJYXV0b25lZyA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlhdXRvbmVnID0gMDsKLQotCQkJZm9yY2VkX3NwZWVkID0gY21kLT5zcGVlZDsKLQkJCWZvcmNlZF9kdXBsZXggPSBjbWQtPmR1cGxleDsKLQkJfQotCX0KLQotCS8qIENvbmZpZ3VyZSBQSFkgJiBzdGFydCBhbmVnICovCi0JYXVwLT53YW50X2F1dG9uZWcgPSBhdXRvbmVnOwotCWlmIChhdXRvbmVnKQotCQlhdTEwMDBfc2V0dXBfYW5lZyhkZXYsIGFkdmVydGlzZSk7Ci0JZWxzZQotCQlhdTEwMDBfc2V0dXBfZm9yY2VkKGRldiwgZm9yY2VkX3NwZWVkLCBmb3JjZWRfZHVwbGV4KTsKLQltb2RfdGltZXIoJmF1cC0+dGltZXIsIGppZmZpZXMgKyBIWik7Ci19CisvKgorICogZXRodG9vbCBvcGVyYXRpb25zCisgKi8KIAogc3RhdGljIGludCBhdTEwMDBfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsKLQl1MTYgbGluaywgc3BlZWQ7CiAKLQljbWQtPnN1cHBvcnRlZCA9IEdFTk1JSV9ERUZBVUxUX0ZFQVRVUkVTOwotCWNtZC0+YWR2ZXJ0aXNpbmcgPSBHRU5NSUlfREVGQVVMVF9BRFZFUlRJU0U7Ci0JY21kLT5wb3J0ID0gUE9SVF9NSUk7Ci0JY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7Ci0JY21kLT5waHlfYWRkcmVzcyA9IGF1cC0+cGh5X2FkZHI7Ci0Jc3Bpbl9sb2NrX2lycSgmYXVwLT5sb2NrKTsKLQljbWQtPmF1dG9uZWcgPSBhdXAtPndhbnRfYXV0b25lZzsKLQlhdXAtPnBoeV9vcHMtPnBoeV9zdGF0dXMoZGV2LCBhdXAtPnBoeV9hZGRyLCAmbGluaywgJnNwZWVkKTsKLQlpZiAoKHNwZWVkID09IElGX1BPUlRfMTAwQkFTRVRYKSB8fCAoc3BlZWQgPT0gSUZfUE9SVF8xMDBCQVNFRlgpKQotCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOwotCWVsc2UgaWYgKHNwZWVkID09IElGX1BPUlRfMTBCQVNFVCkKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOwotCWlmIChsaW5rICYmIChkZXYtPmlmX3BvcnQgPT0gSUZfUE9SVF8xMDBCQVNFRlgpKQotCQljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwotCWVsc2UKLQkJY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQlzcGluX3VubG9ja19pcnEoJmF1cC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJaWYgKGF1cC0+cGh5X2RldikKKwkJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQoYXVwLT5waHlfZGV2LCBjbWQpOworCisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgYXUxMDAwX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKLQkgc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopZGV2LT5wcml2OwotCSAgdW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IEdFTk1JSV9ERUZBVUxUX0ZFQVRVUkVTOwotCi0JIGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJIHJldHVybiAtRVBFUk07Ci0KLQkgaWYgKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSAmJiBjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQotCQkgcmV0dXJuIC1FSU5WQUw7Ci0JIGlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYgY21kLT5hZHZlcnRpc2luZyA9PSAwKQotCQkgcmV0dXJuIC1FSU5WQUw7Ci0JIGlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJiBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKLQkJIHJldHVybiAtRUlOVkFMOwotCSBpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkKLQkJIHN3aXRjaCAoY21kLT5zcGVlZCkgewotCQkgY2FzZSBTUEVFRF8xMDoKLQkJCSBpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYgJiYKLQkJCQkgKGZlYXR1cmVzICYgU1VQUE9SVEVEXzEwYmFzZVRfSGFsZikgPT0gMCkKLQkJCQkgcmV0dXJuIC1FSU5WQUw7Ci0JCQkgaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMICYmCi0JCQkJIChmZWF0dXJlcyAmIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwpID09IDApCi0JCQkJIHJldHVybiAtRUlOVkFMOwotCQkJIGJyZWFrOwotCQkgY2FzZSBTUEVFRF8xMDA6Ci0JCQkgaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGICYmCi0JCQkJIChmZWF0dXJlcyAmIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmKSA9PSAwKQotCQkJCSByZXR1cm4gLUVJTlZBTDsKLQkJCSBpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgJiYKLQkJCQkgKGZlYXR1cmVzICYgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwpID09IDApCi0JCQkJIHJldHVybiAtRUlOVkFMOwotCQkJIGJyZWFrOwotCQkgZGVmYXVsdDoKLQkJCSByZXR1cm4gLUVJTlZBTDsKLQkJIH0KLQkgZWxzZSBpZiAoKGZlYXR1cmVzICYgU1VQUE9SVEVEX0F1dG9uZWcpID09IDApCi0JCSByZXR1cm4gLUVJTlZBTDsKLQotCSBzcGluX2xvY2tfaXJxKCZhdXAtPmxvY2spOwotCSBhdTEwMDBfc3RhcnRfbGluayhkZXYsIGNtZCk7Ci0JIHNwaW5fdW5sb2NrX2lycSgmYXVwLT5sb2NrKTsKLQkgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXUxMDAwX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKilkZXYtPnByaXY7CiAKLQlpZiAoIWF1cC0+d2FudF9hdXRvbmVnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzcGluX2xvY2tfaXJxKCZhdXAtPmxvY2spOwotCWF1MTAwMF9zdGFydF9saW5rKGRldiwgTlVMTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZhdXAtPmxvY2spOwotCXJldHVybiAwOworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChhdXAtPnBoeV9kZXYpCisJCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KGF1cC0+cGh5X2RldiwgY21kKTsKKworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQyMywyMSArNjA5LDE0IEBACiAJaW5mby0+cmVnZHVtcF9sZW4gPSAwOwogfQogCi1zdGF0aWMgdTMyIGF1MTAwMF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiBuZXRpZl9jYXJyaWVyX29rKGRldik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXUxMDAwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBhdTEwMDBfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBhdTEwMDBfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyA9IGF1MTAwMF9nZXRfZHJ2aW5mbywKLQkubndheV9yZXNldCA9IGF1MTAwMF9ud2F5X3Jlc2V0LAotCS5nZXRfbGluayA9IGF1MTAwMF9nZXRfbGluaworCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiB9OwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKgotYXUxMDAwX3Byb2JlKHUzMiBpb2FkZHIsIGludCBpcnEsIGludCBwb3J0X251bSkKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIGF1MTAwMF9wcm9iZShpbnQgcG9ydF9udW0pCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZCA9IDA7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBOVUxMOwpAQCAtMTQ0NSwxMDYgKzYyNCwxMTUgQEAKIAlkYl9kZXN0X3QgKnBEQiwgKnBEQmZyZWU7CiAJY2hhciAqcG1hYywgKmFyZ3B0cjsKIAljaGFyIGV0aGFkZHJbNl07Ci0JaW50IGksIGVycjsKKwlpbnQgaXJxLCBpLCBlcnI7CisJdTMyIGJhc2UsIG1hY2VuOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oQ1BIWVNBRERSKGlvYWRkciksIE1BQ19JT1NJWkUsICJBdTF4MDAgRU5FVCIpKQorCWlmIChwb3J0X251bSA+PSBOVU1fRVRIX0lOVEVSRkFDRVMpCisgCQlyZXR1cm4gTlVMTDsKKworCWJhc2UgID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0uYmFzZV9hZGRyICk7CisJbWFjZW4gPSBDUEhZU0FERFIoaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyKTsKKwlpcnEgPSBpZmxpc3RbcG9ydF9udW1dLmlycTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKCBiYXNlLCBNQUNfSU9TSVpFLCAiQXUxeDAwIEVORVQiKSB8fAorCSAgICAhcmVxdWVzdF9tZW1fcmVnaW9uKG1hY2VuLCA0LCAiQXUxeDAwIEVORVQiKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAodmVyc2lvbl9wcmludGVkKysgPT0gMCkgCisJaWYgKHZlcnNpb25fcHJpbnRlZCsrID09IDApCiAJCXByaW50aygiJXMgdmVyc2lvbiAlcyAlc1xuIiwgRFJWX05BTUUsIERSVl9WRVJTSU9OLCBEUlZfQVVUSE9SKTsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewotCQlwcmludGsgKEtFUk5fRVJSICJhdTEwMDAgZXRoOiBhbGxvY19ldGhlcmRldiBmYWlsZWRcbiIpOyAgCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFsbG9jX2V0aGVyZGV2IGZhaWxlZFxuIiwgRFJWX05BTUUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkF1MXhfZXRoIENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlIGVyciAlZFxuIiwKLQkJCQllcnIpOworCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldikpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGVycm9yICVkXG4iLAorCQkJCURSVl9OQU1FLCBlcnIpOwogCQlmcmVlX25ldGRldihkZXYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlwcmludGsoIiVzOiBBdTF4IEV0aGVybmV0IGZvdW5kIGF0IDB4JXgsIGlycSAlZFxuIiwgCi0JCQlkZXYtPm5hbWUsIGlvYWRkciwgaXJxKTsKKwlwcmludGsoIiVzOiBBdTF4eDAgRXRoZXJuZXQgZm91bmQgYXQgMHgleCwgaXJxICVkXG4iLAorCQlkZXYtPm5hbWUsIGJhc2UsIGlycSk7CiAKIAlhdXAgPSBkZXYtPnByaXY7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgZGF0YSBidWZmZXJzICovCiAJLyogU25vb3Bpbmcgd29ya3MgZmluZSB3aXRoIGV0aCBvbiBhbGwgYXUxeHh4ICovCi0JYXVwLT52YWRkciA9ICh1MzIpZG1hX2FsbG9jX25vbmNvaGVyZW50KE5VTEwsCi0JCQlNQVhfQlVGX1NJWkUgKiAoTlVNX1RYX0JVRkZTK05VTV9SWF9CVUZGUyksCi0JCQkmYXVwLT5kbWFfYWRkciwKLQkJCTApOworCWF1cC0+dmFkZHIgPSAodTMyKWRtYV9hbGxvY19ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgorCQkJCQkJKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCisJCQkJCQkmYXVwLT5kbWFfYWRkciwJMCk7CiAJaWYgKCFhdXAtPnZhZGRyKSB7CiAJCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihDUEhZU0FERFIoaW9hZGRyKSwgTUFDX0lPU0laRSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbiggYmFzZSwgTUFDX0lPU0laRSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbiwgNCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIGF1cC0+bWFjIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIE1BQydzIHJlZ2lzdGVycyAqLwotCWF1cC0+bWFjID0gKHZvbGF0aWxlIG1hY19yZWdfdCAqKSgodW5zaWduZWQgbG9uZylpb2FkZHIpOworCWF1cC0+bWFjID0gKHZvbGF0aWxlIG1hY19yZWdfdCAqKWlmbGlzdFtwb3J0X251bV0uYmFzZV9hZGRyOworCiAJLyogU2V0dXAgc29tZSB2YXJpYWJsZXMgZm9yIHF1aWNrIHJlZ2lzdGVyIGFkZHJlc3MgYWNjZXNzICovCi0JaWYgKGlvYWRkciA9PSBpZmxpc3RbMF0uYmFzZV9hZGRyKQotCXsKLQkJLyogY2hlY2sgZW52IHZhcmlhYmxlcyBmaXJzdCAqLwotCQlpZiAoIWdldF9ldGhlcm5ldF9hZGRyKGV0aGFkZHIpKSB7IAorCWF1cC0+ZW5hYmxlID0gKHZvbGF0aWxlIHUzMiAqKWlmbGlzdFtwb3J0X251bV0ubWFjZW5fYWRkcjsKKwlhdXAtPm1hY19pZCA9IHBvcnRfbnVtOworCWF1X21hY3NbcG9ydF9udW1dID0gYXVwOworCisJaWYgKHBvcnRfbnVtID09IDApIHsKKwkJLyogQ2hlY2sgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmaXJzdCAqLworCQlpZiAoZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcikgPT0gMCkKIAkJCW1lbWNweShhdTEwMDBfbWFjX2FkZHIsIGV0aGFkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKLQkJfSBlbHNlIHsKKwkJZWxzZSB7CiAJCQkvKiBDaGVjayBjb21tYW5kIGxpbmUgKi8KIAkJCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQkJaWYgKChwbWFjID0gc3Ryc3RyKGFyZ3B0ciwgImV0aGFkZHI9IikpID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogTm8gbWFjIGFkZHJlc3MgZm91bmRcbiIsIAotCQkJCQkJZGV2LT5uYW1lKTsKLQkJCQkvKiB1c2UgdGhlIGhhcmQgY29kZWQgbWFjIGFkZHJlc3NlcyAqLwotCQkJfSBlbHNlIHsKKwkJCWlmICgocG1hYyA9IHN0cnN0cihhcmdwdHIsICJldGhhZGRyPSIpKSA9PSBOVUxMKQorCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBNQUMgYWRkcmVzcyBmb3VuZFxuIiwKKwkJCQkJCSBkZXYtPm5hbWUpOworCQkJCS8qIFVzZSB0aGUgaGFyZCBjb2RlZCBNQUMgYWRkcmVzc2VzICovCisJCQllbHNlIHsKIAkJCQlzdHIyZWFkZHIoZXRoYWRkciwgcG1hYyArIHN0cmxlbigiZXRoYWRkcj0iKSk7CiAJCQkJbWVtY3B5KGF1MTAwMF9tYWNfYWRkciwgZXRoYWRkciwgCi0JCQkJCQlzaXplb2YoYXUxMDAwX21hY19hZGRyKSk7CisJCQkJICAgICAgIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKIAkJCX0KIAkJfQotCQkJYXVwLT5lbmFibGUgPSAodm9sYXRpbGUgdTMyICopIAotCQkJCSgodW5zaWduZWQgbG9uZylpZmxpc3RbMF0ubWFjZW5fYWRkcik7Ci0JCW1lbWNweShkZXYtPmRldl9hZGRyLCBhdTEwMDBfbWFjX2FkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKKwogCQlzZXR1cF9od19yaW5ncyhhdXAsIE1BQzBfUlhfRE1BX0FERFIsIE1BQzBfVFhfRE1BX0FERFIpOwotCQlhdXAtPm1hY19pZCA9IDA7Ci0JCWF1X21hY3NbMF0gPSBhdXA7Ci0JfQotCQllbHNlCi0JaWYgKGlvYWRkciA9PSBpZmxpc3RbMV0uYmFzZV9hZGRyKQotCXsKLQkJCWF1cC0+ZW5hYmxlID0gKHZvbGF0aWxlIHUzMiAqKSAKLQkJCQkoKHVuc2lnbmVkIGxvbmcpaWZsaXN0WzFdLm1hY2VuX2FkZHIpOwotCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYXUxMDAwX21hY19hZGRyLCBzaXplb2YoYXUxMDAwX21hY19hZGRyKSk7Ci0JCWRldi0+ZGV2X2FkZHJbNF0gKz0gMHgxMDsKKwl9IGVsc2UgaWYgKHBvcnRfbnVtID09IDEpCiAJCXNldHVwX2h3X3JpbmdzKGF1cCwgTUFDMV9SWF9ETUFfQUREUiwgTUFDMV9UWF9ETUFfQUREUik7Ci0JCWF1cC0+bWFjX2lkID0gMTsKLQkJYXVfbWFjc1sxXSA9IGF1cDsKLQl9Ci0JZWxzZQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIGlvYWRkclxuIiwgZGV2LT5uYW1lKTsKLQl9CiAKLQkvKiBicmluZyB0aGUgZGV2aWNlIG91dCBvZiByZXNldCwgb3RoZXJ3aXNlIHByb2JpbmcgdGhlIG1paQotCSAqIHdpbGwgaGFuZyAqLwotCSphdXAtPmVuYWJsZSA9IE1BQ19FTl9DTE9DS19FTkFCTEU7Ci0JYXVfc3luY19kZWxheSgyKTsKLQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fUkVTRVQwIHwgTUFDX0VOX1JFU0VUMSB8IAotCQlNQUNfRU5fUkVTRVQyIHwgTUFDX0VOX0NMT0NLX0VOQUJMRTsKLQlhdV9zeW5jX2RlbGF5KDIpOworCS8qCisJICogQXNzaWduIHRvIHRoZSBFdGhlcm5ldCBwb3J0cyB0d28gY29uc2VjdXRpdmUgTUFDIGFkZHJlc3NlcworCSAqIHRvIG1hdGNoIHRob3NlIHRoYXQgYXJlIHByaW50ZWQgb24gdGhlaXIgc3RpY2tlcnMKKwkgKi8KKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYXUxMDAwX21hY19hZGRyLCBzaXplb2YoYXUxMDAwX21hY19hZGRyKSk7CisJZGV2LT5kZXZfYWRkcls1XSArPSBwb3J0X251bTsKIAotCWF1cC0+bWlpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1paV9waHkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWF1cC0+bWlpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIGRldi0+bmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JYXVwLT5taWktPm5leHQgPSBOVUxMOwotCWF1cC0+bWlpLT5jaGlwX2luZm8gPSBOVUxMOwotCWF1cC0+bWlpLT5zdGF0dXMgPSAwOwotCWF1cC0+bWlpLT5taWlfY29udHJvbF9yZWcgPSAwOwotCWF1cC0+bWlpLT5taWlfZGF0YV9yZWcgPSAwOworCSphdXAtPmVuYWJsZSA9IDA7CisJYXVwLT5tYWNfZW5hYmxlZCA9IDA7CisKKwlhdXAtPm1paV9idXMucHJpdiA9IGRldjsKKwlhdXAtPm1paV9idXMucmVhZCA9IG1kaW9idXNfcmVhZDsKKwlhdXAtPm1paV9idXMud3JpdGUgPSBtZGlvYnVzX3dyaXRlOworCWF1cC0+bWlpX2J1cy5yZXNldCA9IG1kaW9idXNfcmVzZXQ7CisJYXVwLT5taWlfYnVzLm5hbWUgPSAiYXUxMDAwX2V0aF9taWkiOworCWF1cC0+bWlpX2J1cy5pZCA9IGF1cC0+bWFjX2lkOworCWF1cC0+bWlpX2J1cy5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpKlBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJZm9yKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpCisJCWF1cC0+bWlpX2J1cy5pcnFbaV0gPSBQSFlfUE9MTDsKKworCS8qIGlmIGtub3duLCBzZXQgY29ycmVzcG9uZGluZyBQSFkgSVJRcyAqLworI2lmIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKQorIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkwX0lSUSkKKwlpZiAoQVUxWFhYX1BIWTBfQlVTSUQgPT0gYXVwLT5taWlfYnVzLmlkKQorCQlhdXAtPm1paV9idXMuaXJxW0FVMVhYWF9QSFkwX0FERFJdID0gQVUxWFhYX1BIWTBfSVJROworIyBlbmRpZgorIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX0lSUSkKKwlpZiAoQVUxWFhYX1BIWTFfQlVTSUQgPT0gYXVwLT5taWlfYnVzLmlkKQorCQlhdXAtPm1paV9idXMuaXJxW0FVMVhYWF9QSFkxX0FERFJdID0gQVUxWFhYX1BIWTFfSVJROworIyBlbmRpZgorI2VuZGlmCisJbWRpb2J1c19yZWdpc3RlcigmYXVwLT5taWlfYnVzKTsKIAogCWlmIChtaWlfcHJvYmUoZGV2KSAhPSAwKSB7CiAJCWdvdG8gZXJyX291dDsKQEAgLTE1ODEsNyArNzY5LDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmYXVwLT5sb2NrKTsKLQlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKKwlkZXYtPmJhc2VfYWRkciA9IGJhc2U7CiAJZGV2LT5pcnEgPSBpcnE7CiAJZGV2LT5vcGVuID0gYXUxMDAwX29wZW47CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhdTEwMDBfdHg7CkBAIC0xNTkwLDcgKzc3OCw2IEBACiAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X3J4X21vZGU7CiAJZGV2LT5kb19pb2N0bCA9ICZhdTEwMDBfaW9jdGw7CiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7Ci0JZGV2LT5zZXRfY29uZmlnID0gJmF1MTAwMF9zZXRfY29uZmlnOwogCWRldi0+dHhfdGltZW91dCA9IGF1MTAwMF90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBFVEhfVFhfVElNRU9VVDsKIApAQCAtMTYwNiw3ICs3OTMsNyBAQAogCS8qIGhlcmUgd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBkZXYgcGx1cyBhdXAtPiByZWdpc3RlciBhZGRyZXNzZXMKIAkgKiBzbyB3ZSBjYW4gcmVzZXQgdGhlIG1hYyBwcm9wZXJseS4qLwogCXJlc2V0X21hYyhkZXYpOwotCWtmcmVlKGF1cC0+bWlpKTsKKwogCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspIHsKIAkJaWYgKGF1cC0+cnhfZGJfaW51c2VbaV0pCiAJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnJ4X2RiX2ludXNlW2ldKTsKQEAgLTE2MTUsMTMgKzgwMiwxMiBAQAogCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtpXSkKIAkJCVJlbGVhc2VEQihhdXAsIGF1cC0+dHhfZGJfaW51c2VbaV0pOwogCX0KLQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLAotCQkJTUFYX0JVRl9TSVpFICogKE5VTV9UWF9CVUZGUytOVU1fUlhfQlVGRlMpLAotCQkJKHZvaWQgKilhdXAtPnZhZGRyLAotCQkJYXVwLT5kbWFfYWRkcik7CisJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICogKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCisJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlmcmVlX25ldGRldihkZXYpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihDUEhZU0FERFIoaW9hZGRyKSwgTUFDX0lPU0laRSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKCBiYXNlLCBNQUNfSU9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4sIDQpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNjQwLDE5ICs4MjYsMTQgQEAKIAl1MzIgZmxhZ3M7CiAJaW50IGk7CiAJdTMyIGNvbnRyb2w7Ci0JdTE2IGxpbmssIHNwZWVkOwogCiAJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIAogCQlwcmludGsoIiVzOiBhdTEwMDBfaW5pdFxuIiwgZGV2LT5uYW1lKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQogCS8qIGJyaW5nIHRoZSBkZXZpY2Ugb3V0IG9mIHJlc2V0ICovCi0JKmF1cC0+ZW5hYmxlID0gTUFDX0VOX0NMT0NLX0VOQUJMRTsKLSAgICAgICAgYXVfc3luY19kZWxheSgyKTsKLQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fUkVTRVQwIHwgTUFDX0VOX1JFU0VUMSB8IAotCQlNQUNfRU5fUkVTRVQyIHwgTUFDX0VOX0NMT0NLX0VOQUJMRTsKLQlhdV9zeW5jX2RlbGF5KDIwKTsKKwllbmFibGVfbWFjKGRldiwgMSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CiAKIAlhdXAtPm1hYy0+Y29udHJvbCA9IDA7CiAJYXVwLT50eF9oZWFkID0gKGF1cC0+dHhfZG1hX3JpbmdbMF0tPmJ1ZmZfc3RhdCAmIDB4QykgPj4gMjsKQEAgLTE2NjgsMTIgKzg0OSwxNiBAQAogCX0KIAlhdV9zeW5jKCk7CiAKLQlhdXAtPnBoeV9vcHMtPnBoeV9zdGF0dXMoZGV2LCBhdXAtPnBoeV9hZGRyLCAmbGluaywgJnNwZWVkKTsKLQljb250cm9sID0gTUFDX0RJU0FCTEVfUlhfT1dOIHwgTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7CisJY29udHJvbCA9IE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFOwogI2lmbmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KIAljb250cm9sIHw9IE1BQ19CSUdfRU5ESUFOOwogI2VuZGlmCi0JaWYgKGxpbmsgJiYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkpIHsKKwlpZiAoYXVwLT5waHlfZGV2KSB7CisJCWlmIChhdXAtPnBoeV9kZXYtPmxpbmsgJiYgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkKKwkJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOworCQllbHNlCisJCQljb250cm9sIHw9IE1BQ19ESVNBQkxFX1JYX09XTjsKKwl9IGVsc2UgeyAvKiBQSFktbGVzcyBvcCwgYXNzdW1lIGZ1bGwtZHVwbGV4ICovCiAJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwogCX0KIApAQCAtMTY4NSw1NyArODcwLDg0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF1MTAwMF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZAorYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKLQl1bnNpZ25lZCBjaGFyIGlmX3BvcnQ7Ci0JdTE2IGxpbmssIHNwZWVkOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBhdXAtPnBoeV9kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghZGV2KSB7Ci0JCS8qIGZhdGFsIGVycm9yLCBkb24ndCByZXN0YXJ0IHRoZSB0aW1lciAqLwotCQlwcmludGsoS0VSTl9FUlIgImF1MTAwMF90aW1lciBlcnJvcjogTlVMTCBkZXZcbiIpOwotCQlyZXR1cm47CisJaW50IHN0YXR1c19jaGFuZ2UgPSAwOworCisJQlVHX09OKCFhdXAtPnBoeV9kZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHBoeWRldi0+bGluayAmJiAoYXVwLT5vbGRfc3BlZWQgIT0gcGh5ZGV2LT5zcGVlZCkpIHsKKwkJLy8gc3BlZWQgY2hhbmdlZAorCisJCXN3aXRjaChwaHlkZXYtPnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTA6CisJCWNhc2UgU1BFRURfMTAwOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBTcGVlZCAoJWQpIGlzIG5vdCAxMC8xMDAgPz8/XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCk7CisJCQlicmVhazsKKwkJfQorCisJCWF1cC0+b2xkX3NwZWVkID0gcGh5ZGV2LT5zcGVlZDsKKworCQlzdGF0dXNfY2hhbmdlID0gMTsKIAl9CiAKLQlpZl9wb3J0ID0gZGV2LT5pZl9wb3J0OwotCWlmIChhdXAtPnBoeV9vcHMtPnBoeV9zdGF0dXMoZGV2LCBhdXAtPnBoeV9hZGRyLCAmbGluaywgJnNwZWVkKSA9PSAwKSB7Ci0JCWlmIChsaW5rKSB7Ci0JCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cFxuIiwgZGV2LT5uYW1lKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJCWRldi0+aWZfcG9ydCA9IDA7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKLQkJCX0KLQkJfQotCX0KKwlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9kdXBsZXggIT0gcGh5ZGV2LT5kdXBsZXgpKSB7CisJCS8vIGR1cGxleCBtb2RlIGNoYW5nZWQKIAotCWlmIChsaW5rICYmIChkZXYtPmlmX3BvcnQgIT0gaWZfcG9ydCkgJiYgCi0JCQkoZGV2LT5pZl9wb3J0ICE9IElGX1BPUlRfVU5LTk9XTikpIHsKKwkJLyogc3dpdGNoaW5nIGR1cGxleCBtb2RlIHJlcXVpcmVzIHRvIGRpc2FibGUgcnggYW5kIHR4ISAqLwogCQloYXJkX3N0b3AoZGV2KTsKLQkJaWYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGdvaW5nIHRvIGZ1bGwgZHVwbGV4XG4iLCAKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsKLQkJCWF1X3N5bmNfZGVsYXkoMSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX0ZVTExfRFVQTEVYOwotCQkJYXVfc3luY19kZWxheSgxKTsKLQkJfQorCisJCWlmIChEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCkKKwkJCWF1cC0+bWFjLT5jb250cm9sID0gKChhdXAtPm1hYy0+Y29udHJvbAorCQkJCQkgICAgIHwgTUFDX0ZVTExfRFVQTEVYKQorCQkJCQkgICAgICYgfk1BQ19ESVNBQkxFX1JYX09XTik7CisJCWVsc2UKKwkJCWF1cC0+bWFjLT5jb250cm9sID0gKChhdXAtPm1hYy0+Y29udHJvbAorCQkJCQkgICAgICAmIH5NQUNfRlVMTF9EVVBMRVgpCisJCQkJCSAgICAgfCBNQUNfRElTQUJMRV9SWF9PV04pOworCQlhdV9zeW5jX2RlbGF5KDEpOworCiAJCWVuYWJsZV9yeF90eChkZXYpOworCQlhdXAtPm9sZF9kdXBsZXggPSBwaHlkZXYtPmR1cGxleDsKKworCQlzdGF0dXNfY2hhbmdlID0gMTsKIAl9CiAKLQlhdXAtPnRpbWVyLmV4cGlyZXMgPSBSVU5fQVQoKDEqSFopKTsgCi0JYXVwLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotCWF1cC0+dGltZXIuZnVuY3Rpb24gPSAmYXUxMDAwX3RpbWVyOyAvKiB0aW1lciBoYW5kbGVyICovCi0JYWRkX3RpbWVyKCZhdXAtPnRpbWVyKTsKKwlpZihwaHlkZXYtPmxpbmsgIT0gYXVwLT5vbGRfbGluaykgeworCQkvLyBsaW5rIHN0YXRlIGNoYW5nZWQKIAorCQlpZiAocGh5ZGV2LT5saW5rKSAvLyBsaW5rIHdlbnQgdXAKKwkJCW5ldGlmX3NjaGVkdWxlKGRldik7CisJCWVsc2UgeyAvLyBsaW5rIHdlbnQgZG93bgorCQkJYXVwLT5vbGRfc3BlZWQgPSAwOworCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7CisJCX0KKworCQlhdXAtPm9sZF9saW5rID0gcGh5ZGV2LT5saW5rOworCQlzdGF0dXNfY2hhbmdlID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzdGF0dXNfY2hhbmdlKSB7CisJCWlmIChwaHlkZXYtPmxpbmspCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCAoJWQvJXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKKwkJCSAgICAgICBEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJfQogfQogCiBzdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNzQ2LDI1ICs5NTgsMjYgQEAKIAlpZiAoYXUxMDAwX2RlYnVnID4gNCkKIAkJcHJpbnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CiAKKwlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmYXUxMDAwX2ludGVycnVwdCwgMCwKKwkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKIAlpZiAoKHJldHZhbCA9IGF1MTAwMF9pbml0KGRldikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAotCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZhdTEwMDBfaW50ZXJydXB0LCAwLCAKLQkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwgCi0JCQkJZGV2LT5uYW1lLCBkZXYtPmlycSk7Ci0JCXJldHVybiByZXR2YWw7CisJaWYgKGF1cC0+cGh5X2RldikgeworCQkvKiBjYXVzZSB0aGUgUEhZIHN0YXRlIG1hY2hpbmUgdG8gc2NoZWR1bGUgYSBsaW5rIHN0YXRlIGNoZWNrICovCisJCWF1cC0+cGh5X2Rldi0+c3RhdGUgPSBQSFlfQ0hBTkdFTElOSzsKKwkJcGh5X3N0YXJ0KGF1cC0+cGh5X2Rldik7CiAJfQogCi0JaW5pdF90aW1lcigmYXVwLT50aW1lcik7IC8qIHVzZWQgaW4gaW9jdGwoKSAqLwotCWF1cC0+dGltZXIuZXhwaXJlcyA9IFJVTl9BVCgoMypIWikpOyAKLQlhdXAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7Ci0JYXVwLT50aW1lci5mdW5jdGlvbiA9ICZhdTEwMDBfdGltZXI7IC8qIHRpbWVyIGhhbmRsZXIgKi8KLQlhZGRfdGltZXIoJmF1cC0+dGltZXIpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKIAlpZiAoYXUxMDAwX2RlYnVnID4gNCkKIAkJcHJpbnRrKCIlczogb3BlbjogSW5pdGlhbGl6YXRpb24gZG9uZS5cbiIsIGRldi0+bmFtZSk7CkBAIC0xNzc0LDE2ICs5ODcsMTkgQEAKIAogc3RhdGljIGludCBhdTEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1MzIgZmxhZ3M7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CiAKIAlpZiAoYXUxMDAwX2RlYnVnID4gNCkKIAkJcHJpbnRrKCIlczogY2xvc2U6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOwogCi0JcmVzZXRfbWFjKGRldik7CisJaWYgKGF1cC0+cGh5X2RldikKKwkJcGh5X3N0b3AoYXVwLT5waHlfZGV2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQkKKworCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKKwogCS8qIHN0b3AgdGhlIGRldmljZSAqLwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtMTgwNSwyMSArMTAyMSwxOCBAQAogCQlpZiAoZGV2KSB7CiAJCQlhdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCQlrZnJlZShhdXAtPm1paSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgTlVNX1JYX0RNQTsgaisrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgTlVNX1JYX0RNQTsgaisrKQogCQkJCWlmIChhdXAtPnJ4X2RiX2ludXNlW2pdKQogCQkJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnJ4X2RiX2ludXNlW2pdKTsKLQkJCX0KLQkJCWZvciAoaiA9IDA7IGogPCBOVU1fVFhfRE1BOyBqKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBOVU1fVFhfRE1BOyBqKyspCiAJCQkJaWYgKGF1cC0+dHhfZGJfaW51c2Vbal0pCiAJCQkJCVJlbGVhc2VEQihhdXAsIGF1cC0+dHhfZGJfaW51c2Vbal0pOwotCQkJfQotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwKLQkJCQkJTUFYX0JVRl9TSVpFICogKE5VTV9UWF9CVUZGUytOVU1fUlhfQlVGRlMpLAotCQkJCQkodm9pZCAqKWF1cC0+dmFkZHIsCi0JCQkJCWF1cC0+ZG1hX2FkZHIpOworIAkJCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqCisgCQkJCQkgICAgIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAorIAkJCQkJICAgICAodm9pZCAqKWF1cC0+dmFkZHIsIGF1cC0+ZG1hX2FkZHIpOworIAkJCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTUFDX0lPU0laRSk7CisgCQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpZmxpc3RbaV0ubWFjZW5fYWRkciksIDQpOwogCQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihDUEhZU0FERFIoaWZsaXN0W2ldLmJhc2VfYWRkciksIE1BQ19JT1NJWkUpOwogCQl9CiAJfQogfQpAQCAtMTgzMCw3ICsxMDQzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmYXVwLT5zdGF0czsKIAogCWlmIChzdGF0dXMgJiBUWF9GUkFNRV9BQk9SVEVEKSB7Ci0JCWlmIChkZXYtPmlmX3BvcnQgPT0gSUZfUE9SVF8xMDBCQVNFRlgpIHsKKwkJaWYgKCFhdXAtPnBoeV9kZXYgfHwgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkgewogCQkJaWYgKHN0YXR1cyAmIChUWF9KQUJfVElNRU9VVCB8IFRYX1VOREVSUlVOKSkgewogCQkJCS8qIGFueSBvdGhlciB0eCBlcnJvcnMgYXJlIG9ubHkgdmFsaWQKIAkJCQkgKiBpbiBoYWxmIGR1cGxleCBtb2RlICovCkBAIC0yMTA0LDEyNiArMTMxNywxNSBAQAogCX0KIH0KIAotCiBzdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKWRldi0+cHJpdjsKLQl1MTYgKmRhdGEgPSAodTE2ICopJnJxLT5pZnJfaWZydTsKIAotCXN3aXRjaChjbWQpIHsgCi0JCWNhc2UgU0lPQ0RFVlBSSVZBVEU6CS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgUEhZIGluIHVzZS4gKi8KLQkJY2FzZSBTSU9DR01JSVBIWToKLQkJICAgICAgICBpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7Ci0JCQlkYXRhWzBdID0gYXVwLT5waHlfYWRkcjsKLQkJY2FzZSBTSU9DREVWUFJJVkFURSsxOgkvKiBSZWFkIHRoZSBzcGVjaWZpZWQgTUlJIHJlZ2lzdGVyLiAqLwotCQljYXNlIFNJT0NHTUlJUkVHOgotCQkJZGF0YVszXSA9ICBtZGlvX3JlYWQoZGV2LCBkYXRhWzBdLCBkYXRhWzFdKTsgCi0JCQlyZXR1cm4gMDsKLQkJY2FzZSBTSU9DREVWUFJJVkFURSsyOgkvKiBXcml0ZSB0aGUgc3BlY2lmaWVkIE1JSSByZWdpc3RlciAqLwotCQljYXNlIFNJT0NTTUlJUkVHOiAKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJbWRpb193cml0ZShkZXYsIGRhdGFbMF0sIGRhdGFbMV0sZGF0YVsyXSk7Ci0JCQlyZXR1cm4gMDsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHJldHVybiAtRUlOVkFMOwogCi19CisJaWYgKCFhdXAtPnBoeV9kZXYpIHJldHVybiAtRUlOVkFMOyAvLyBQSFkgbm90IGNvbnRyb2xsYWJsZQogCi0KLXN0YXRpYyBpbnQgYXUxMDAwX3NldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKLQl1MTYgY29udHJvbDsKLQotCWlmIChhdTEwMDBfZGVidWcgPiA0KSAgewotCQlwcmludGsoIiVzOiBzZXRfY29uZmlnIGNhbGxlZDogZGV2LT5pZl9wb3J0ICVkIG1hcC0+cG9ydCAleFxuIiwgCi0JCQkJZGV2LT5uYW1lLCBkZXYtPmlmX3BvcnQsIG1hcC0+cG9ydCk7Ci0JfQotCi0Jc3dpdGNoKG1hcC0+cG9ydCl7Ci0JCWNhc2UgSUZfUE9SVF9VTktOT1dOOiAvKiB1c2UgYXV0byBoZXJlICovICAgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29uZmlnIHBoeSBmb3IgYW5lZ1xuIiwgCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQlkZXYtPmlmX3BvcnQgPSBtYXAtPnBvcnQ7Ci0JCQkvKiBMaW5rIERvd246IHRoZSB0aW1lciB3aWxsIGJyaW5nIGl0IHVwICovCi0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQotCQkJLyogcmVhZCBjdXJyZW50IGNvbnRyb2wgKi8KLQkJCWNvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JCQljb250cm9sICY9IH4oTUlJX0NOVExfRkRYIHwgTUlJX0NOVExfRjEwMCk7Ci0KLQkJCS8qIGVuYWJsZSBhdXRvIG5lZ290aWF0aW9uIGFuZCByZXNldCB0aGUgbmVnb3RpYXRpb24gKi8KLQkJCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgCi0JCQkJCWNvbnRyb2wgfCBNSUlfQ05UTF9BVVRPIHwgCi0JCQkJCU1JSV9DTlRMX1JTVF9BVVRPKTsKLQotCQkJYnJlYWs7Ci0gICAgCi0JCWNhc2UgSUZfUE9SVF8xMEJBU0VUOiAvKiAxMEJhc2VUICovICAgICAgICAgCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogY29uZmlnIHBoeSBmb3IgMTBCYXNlVFxuIiwgCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQlkZXYtPmlmX3BvcnQgPSBtYXAtPnBvcnQ7Ci0JCi0JCQkvKiBMaW5rIERvd246IHRoZSB0aW1lciB3aWxsIGJyaW5nIGl0IHVwICovCi0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCi0JCQkvKiBzZXQgU3BlZWQgdG8gMTBNYnBzLCBIYWxmIER1cGxleCAqLwotCQkJY29udHJvbCA9IG1kaW9fcmVhZChkZXYsIGF1cC0+cGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLQkJCWNvbnRyb2wgJj0gfihNSUlfQ05UTF9GMTAwIHwgTUlJX0NOVExfQVVUTyB8IAotCQkJCQlNSUlfQ05UTF9GRFgpOwotCQotCQkJLyogZGlzYWJsZSBhdXRvIG5lZ290aWF0aW9uIGFuZCBmb3JjZSAxME0vSEQgbW9kZSovCi0JCQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wsIGNvbnRyb2wpOwotCQkJYnJlYWs7Ci0gICAgCi0JCWNhc2UgSUZfUE9SVF8xMDBCQVNFVDogLyogMTAwQmFzZVQgKi8KLQkJY2FzZSBJRl9QT1JUXzEwMEJBU0VUWDogLyogMTAwQmFzZVR4ICovIAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbmZpZyBwaHkgZm9yIDEwMEJhc2VUWFxuIiwgCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQlkZXYtPmlmX3BvcnQgPSBtYXAtPnBvcnQ7Ci0JCi0JCQkvKiBMaW5rIERvd246IHRoZSB0aW1lciB3aWxsIGJyaW5nIGl0IHVwICovCi0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQotCQkJLyogc2V0IFNwZWVkIHRvIDEwME1icHMsIEhhbGYgRHVwbGV4ICovCi0JCQkvKiBkaXNhYmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIGVuYWJsZSAxMDBNQml0IE1vZGUgKi8KLQkJCWNvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JCQljb250cm9sICY9IH4oTUlJX0NOVExfQVVUTyB8IE1JSV9DTlRMX0ZEWCk7Ci0JCQljb250cm9sIHw9IE1JSV9DTlRMX0YxMDA7Ci0JCQltZGlvX3dyaXRlKGRldiwgYXVwLT5waHlfYWRkciwgTUlJX0NPTlRST0wsIGNvbnRyb2wpOwotCQkJYnJlYWs7Ci0gICAgCi0JCWNhc2UgSUZfUE9SVF8xMDBCQVNFRlg6IC8qIDEwMEJhc2VGeCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvbmZpZyBwaHkgZm9yIDEwMEJhc2VGWFxuIiwgCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQlkZXYtPmlmX3BvcnQgPSBtYXAtPnBvcnQ7Ci0JCi0JCQkvKiBMaW5rIERvd246IHRoZSB0aW1lciB3aWxsIGJyaW5nIGl0IHVwICovCi0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQotCQkJLyogc2V0IFNwZWVkIHRvIDEwME1icHMsIEZ1bGwgRHVwbGV4ICovCi0JCQkvKiBkaXNhYmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIGVuYWJsZSAxMDBNQml0IE1vZGUgKi8KLQkJCWNvbnRyb2wgPSBtZGlvX3JlYWQoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJPTCk7Ci0JCQljb250cm9sICY9IH5NSUlfQ05UTF9BVVRPOwotCQkJY29udHJvbCB8PSAgTUlJX0NOVExfRjEwMCB8IE1JSV9DTlRMX0ZEWDsKLQkJCW1kaW9fd3JpdGUoZGV2LCBhdXAtPnBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgY29udHJvbCk7Ci0JCQlicmVhazsKLQkJY2FzZSBJRl9QT1JUXzEwQkFTRTI6IC8qIDEwQmFzZTIgKi8KLQkJY2FzZSBJRl9QT1JUX0FVSTogLyogQVVJICovCi0JCS8qIFRoZXNlIE1vZGVzIGFyZSBub3Qgc3VwcG9ydGVkIChhcmUgdGhleT8pKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IDEwQmFzZTIvQVVJIG5vdCBzdXBwb3J0ZWQiLCAKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJCWJyZWFrOwotICAgIAotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBtZWRpYSBzZWxlY3RlZCIsIAotCQkJCQlkZXYtPm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBwaHlfbWlpX2lvY3RsKGF1cC0+cGh5X2RldiwgaWZfbWlpKHJxKSwgY21kKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphdTEwMDBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmggYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKaW5kZXggN2Y5MzI2ZS4uNDFjMmY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaApAQCAtNDAsMTIwICs0MCw2IEBACiAKICNkZWZpbmUgTVVMVElDQVNUX0ZJTFRFUl9MSU1JVCA2NAogCi0vKiBGSVhNRSAKLSAqIFRoZSBQSFkgZGVmaW5lcyBzaG91bGQgYmUgaW4gYSBzZXBhcmF0ZSBmaWxlLgotICovCi0KLS8qIE1JSSByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lCU1JSV9DT05UUk9MIDB4MDAwMAotI2RlZmluZSBNSUlfU1RBVFVTICAweDAwMDEKLSNkZWZpbmUgTUlJX1BIWV9JRDAgMHgwMDAyCi0jZGVmaW5lCU1JSV9QSFlfSUQxIDB4MDAwMwotI2RlZmluZSBNSUlfQU5BRFYgICAweDAwMDQKLSNkZWZpbmUgTUlJX0FOTFBBUiAgMHgwMDA1Ci0jZGVmaW5lIE1JSV9BRVhQICAgIDB4MDAwNgotI2RlZmluZSBNSUlfQU5FWFQgICAweDAwMDcKLSNkZWZpbmUgTUlJX0xTSV9QSFlfQ09ORklHIDB4MDAxMQotLyogU3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9MU0lfUEhZX1NUQVQgICAweDAwMTIKLSNkZWZpbmUgTUlJX0FNRF9QSFlfU1RBVCAgIE1JSV9MU0lfUEhZX1NUQVQKLSNkZWZpbmUgTUlJX0lOVEVMX1BIWV9TVEFUIDB4MDAxMQotCi0jZGVmaW5lIE1JSV9BVVhfQ05UUkwgIDB4MDAxOAotLyogbWlpIHJlZ2lzdGVycyBzcGVjaWZpYyB0byBBTUQgNzlDOTAxICovCi0jZGVmaW5lCU1JSV9TVEFUVVNfU1VNTUFSWSA9IDB4MDAxOAotCi0vKiBNSUkgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMuICovCi0jZGVmaW5lCU1JSV9DTlRMX0ZEWCAgICAgIDB4MDEwMAotI2RlZmluZSBNSUlfQ05UTF9SU1RfQVVUTyAweDAyMDAKLSNkZWZpbmUJTUlJX0NOVExfSVNPTEFURSAgMHgwNDAwCi0jZGVmaW5lIE1JSV9DTlRMX1BXUkRXTiAgIDB4MDgwMAotI2RlZmluZQlNSUlfQ05UTF9BVVRPICAgICAweDEwMDAKLSNkZWZpbmUgTUlJX0NOVExfRjEwMCAgICAgMHgyMDAwCi0jZGVmaW5lCU1JSV9DTlRMX0xQQksgICAgIDB4NDAwMAotI2RlZmluZSBNSUlfQ05UTF9SRVNFVCAgICAweDgwMDAKLQotLyogTUlJIFN0YXR1cyByZWdpc3RlciBiaXQgICovCi0jZGVmaW5lCU1JSV9TVEFUX0VYVCAgICAgICAgMHgwMDAxIAotI2RlZmluZSBNSUlfU1RBVF9KQUIgICAgICAgIDB4MDAwMgotI2RlZmluZQlNSUlfU1RBVF9MSU5LICAgICAgIDB4MDAwNAotI2RlZmluZSBNSUlfU1RBVF9DQU5fQVVUTyAgIDB4MDAwOAotI2RlZmluZQlNSUlfU1RBVF9GQVVMVCAgICAgIDB4MDAxMCAKLSNkZWZpbmUgTUlJX1NUQVRfQVVUT19ET05FICAweDAwMjAKLSNkZWZpbmUJTUlJX1NUQVRfQ0FOX1QgICAgICAweDA4MDAKLSNkZWZpbmUgTUlJX1NUQVRfQ0FOX1RfRkRYICAweDEwMDAKLSNkZWZpbmUJTUlJX1NUQVRfQ0FOX1RYICAgICAweDIwMDAgCi0jZGVmaW5lIE1JSV9TVEFUX0NBTl9UWF9GRFggMHg0MDAwCi0jZGVmaW5lCU1JSV9TVEFUX0NBTl9UNCAgICAgMHg4MDAwCi0KLQotI2RlZmluZQkJTUlJX0lEMV9PVUlfTE8JCTB4RkMwMAkvKiBsb3cgYml0cyBvZiBPVUkgbWFzayAqLwotI2RlZmluZQkJTUlJX0lEMV9NT0RFTAkJMHgwM0YwCS8qIG1vZGVsIG51bWJlciAqLwotI2RlZmluZQkJTUlJX0lEMV9SRVYJCTB4MDAwRgkvKiBtb2RlbCBudW1iZXIgKi8KLQotLyogTUlJIE5XQVkgUmVnaXN0ZXIgQml0cyAuLi4KLSAgIHZhbGlkIGZvciB0aGUgQU5BUiAoQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50KSBhbmQKLSAgIEFOTFBBUiAoQXV0by1OZWdvdGlhdGlvbiBMaW5rIFBhcnRuZXIpIHJlZ2lzdGVycyAqLwotI2RlZmluZQlNSUlfTldBWV9OT0RFX1NFTCAweDAwMWYKLSNkZWZpbmUgTUlJX05XQVlfQ1NNQV9DRCAgMHgwMDAxCi0jZGVmaW5lCU1JSV9OV0FZX1QJICAweDAwMjAKLSNkZWZpbmUgTUlJX05XQVlfVF9GRFggICAgMHgwMDQwCi0jZGVmaW5lCU1JSV9OV0FZX1RYICAgICAgIDB4MDA4MAotI2RlZmluZSBNSUlfTldBWV9UWF9GRFggICAweDAxMDAKLSNkZWZpbmUJTUlJX05XQVlfVDQgICAgICAgMHgwMjAwIAotI2RlZmluZSBNSUlfTldBWV9QQVVTRSAgICAweDA0MDAgCi0jZGVmaW5lCU1JSV9OV0FZX1JGICAgICAgIDB4MjAwMCAvKiBSZW1vdGUgRmF1bHQgKi8KLSNkZWZpbmUgTUlJX05XQVlfQUNLICAgICAgMHg0MDAwIC8qIFJlbW90ZSBBY2tub3dsZWRnZSAqLwotI2RlZmluZQlNSUlfTldBWV9OUCAgICAgICAweDgwMDAgLyogTmV4dCBQYWdlIChFbmFibGUpICovCi0KLS8qIG1paSBzdHNvdXQgcmVnaXN0ZXIgYml0cyAqLwotI2RlZmluZQlNSUlfU1RTT1VUX0xJTktfRkFJTCAweDQwMDAKLSNkZWZpbmUJTUlJX1NUU09VVF9TUEQgICAgICAgMHgwMDgwCi0jZGVmaW5lIE1JSV9TVFNPVVRfRFBMWCAgICAgIDB4MDA0MAotCi0vKiBtaWkgc3RzaWNzIHJlZ2lzdGVyIGJpdHMgKi8KLSNkZWZpbmUJTUlJX1NUU0lDU19TUEQgICAgICAgMHg4MDAwCi0jZGVmaW5lIE1JSV9TVFNJQ1NfRFBMWCAgICAgIDB4NDAwMAotI2RlZmluZQlNSUlfU1RTSUNTX0xJTktTVFMgICAweDAwMDEKLQotLyogbWlpIHN0c3N1bSByZWdpc3RlciBiaXRzICovCi0jZGVmaW5lCU1JSV9TVFNTVU1fTElOSyAgMHgwMDA4Ci0jZGVmaW5lIE1JSV9TVFNTVU1fRFBMWCAgMHgwMDA0Ci0jZGVmaW5lCU1JSV9TVFNTVU1fQVVUTyAgMHgwMDAyCi0jZGVmaW5lIE1JSV9TVFNTVU1fU1BEICAgMHgwMDAxCi0KLS8qIGxzaSBwaHkgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9MU0lfUEhZX1NUQVRfRkRYCTB4MDA0MAotI2RlZmluZSBNSUlfTFNJX1BIWV9TVEFUX1NQRAkweDAwODAKLQotLyogYW1kIHBoeSBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0FNRF9QSFlfU1RBVF9GRFgJMHgwODAwCi0jZGVmaW5lIE1JSV9BTURfUEhZX1NUQVRfU1BECTB4MDQwMAotCi0vKiBpbnRlbCBwaHkgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9JTlRFTF9QSFlfU1RBVF9GRFgJMHgwMjAwCi0jZGVmaW5lIE1JSV9JTlRFTF9QSFlfU1RBVF9TUEQJMHg0MDAwCi0KLS8qIEF1eGlsbGlhcnkgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX0FVWF9GRFggICAgICAweDAwMDEKLSNkZWZpbmUgTUlJX0FVWF8xMDAgICAgICAweDAwMDIKLSNkZWZpbmUgTUlJX0FVWF9GMTAwICAgICAweDAwMDQKLSNkZWZpbmUgTUlJX0FVWF9BTkVHICAgICAweDAwMDgKLQotdHlwZWRlZiBzdHJ1Y3QgbWlpX3BoeSB7Ci0Jc3RydWN0IG1paV9waHkgKiBuZXh0OwotCXN0cnVjdCBtaWlfY2hpcF9pbmZvICogY2hpcF9pbmZvOwotCXUxNiBzdGF0dXM7Ci0JdTMyICptaWlfY29udHJvbF9yZWc7Ci0JdTMyICptaWlfZGF0YV9yZWc7Ci19IG1paV9waHlfdDsKLQotc3RydWN0IHBoeV9vcHMgewotCWludCAoKnBoeV9pbml0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKLQlpbnQgKCpwaHlfcmVzZXQpIChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwotCWludCAoKnBoeV9zdGF0dXMpIChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIHUxNiAqLCB1MTYgKik7Ci19OwotCiAvKiAKICAqIERhdGEgQnVmZmVyIERlc2NyaXB0b3IuIERhdGEgYnVmZmVycyBtdXN0IGJlIGFsaWduZWQgb24gMzIgYnl0ZSAKICAqIGJvdW5kYXJ5IGZvciBib3RoLCByZWNlaXZlIGFuZCB0cmFuc21pdC4KQEAgLTIwMCw3ICs4Niw2IEBACiAKIAogc3RydWN0IGF1MTAwMF9wcml2YXRlIHsKLQkKIAlkYl9kZXN0X3QgKnBEQmZyZWU7CiAJZGJfZGVzdF90IGRiW05VTV9SWF9CVUZGUytOVU1fVFhfQlVGRlNdOwogCXZvbGF0aWxlIHJ4X2RtYV90ICpyeF9kbWFfcmluZ1tOVU1fUlhfRE1BXTsKQEAgLTIxMyw4ICs5OCwxNSBAQAogCXUzMiB0eF9mdWxsOwogCiAJaW50IG1hY19pZDsKLQltaWlfcGh5X3QgKm1paTsKLQlzdHJ1Y3QgcGh5X29wcyAqcGh5X29wczsKKworCWludCBtYWNfZW5hYmxlZDsgICAgICAgLyogd2hldGhlciBNQUMgaXMgY3VycmVudGx5IGVuYWJsZWQgYW5kIHJ1bm5pbmcgKHJlcS4gZm9yIG1kaW8pICovCisKKwlpbnQgb2xkX2xpbms7ICAgICAgICAgIC8qIHVzZWQgYnkgYXUxMDAwX2FkanVzdF9saW5rICovCisJaW50IG9sZF9zcGVlZDsKKwlpbnQgb2xkX2R1cGxleDsKKworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2OworCXN0cnVjdCBtaWlfYnVzIG1paV9idXM7CiAJCiAJLyogVGhlc2UgdmFyaWFibGVzIGFyZSBqdXN0IGZvciBxdWljayBhY2Nlc3MgdG8gY2VydGFpbiByZWdzIGFkZHJlc3Nlcy4gKi8KIAl2b2xhdGlsZSBtYWNfcmVnX3QgKm1hYzsgIC8qIG1hYyByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgKi8gICAKQEAgLTIyMywxNCArMTE1LDYgQEAKIAl1MzIgdmFkZHI7ICAgICAgICAgICAgICAgIC8qIHZpcnR1YWwgYWRkcmVzcyBvZiByeC90eCBidWZmZXJzICAgKi8KIAlkbWFfYWRkcl90IGRtYV9hZGRyOyAgICAgIC8qIGRtYSBhZGRyZXNzIG9mIHJ4L3R4IGJ1ZmZlcnMgICAgICAgKi8KIAotCXU4ICpoYXNoX3RhYmxlOwotCXUzMiBoYXNoX21vZGU7Ci0JdTMyIGludHJfd29ya19kb25lOyAvKiBudW1iZXIgb2YgUnggYW5kIFR4IHBrdHMgcHJvY2Vzc2VkIGluIHRoZSBpc3IgKi8KLQlpbnQgcGh5X2FkZHI7ICAgICAgICAgIC8qIHBoeSBhZGRyZXNzICovCi0JdTMyIG9wdGlvbnM7ICAgICAgICAgICAvKiBVc2VyLXNldHRhYmxlIG1pc2MuIGRyaXZlciBvcHRpb25zLiAqLwotCXUzMiBkcnZfZmxhZ3M7Ci0JaW50IHdhbnRfYXV0b25lZzsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlzcGlubG9ja190IGxvY2s7ICAgICAgIC8qIFNlcmlhbGlzZSBhY2Nlc3MgdG8gZGV2aWNlICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDU0MTYxYWUuLjcwMmQ1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgpAQCAtNDksMTQgKzUwLDE1IEBACiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvemxpYi5oPgogCiAjaW5jbHVkZSAiYm54Mi5oIgogI2luY2x1ZGUgImJueDJfZncuaCIKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJibngyIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjQuNDAiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWF5IDIyLCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC40MiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKdW5lIDEyLCAyMDA2IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtMTgyMCw3ICsxODIyLDcgQEAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYnAtPmRldik7CiAKIAkJaWYgKChsZW4gPiAoYnAtPmRldi0+bXR1ICsgRVRIX0hMRU4pKSAmJgotCQkJKGh0b25zKHNrYi0+cHJvdG9jb2wpICE9IDB4ODEwMCkpIHsKKwkJCShudG9ocyhza2ItPnByb3RvY29sKSAhPSAweDgxMDApKSB7CiAKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCQlnb3RvIG5leHRfcng7CkBAIC0yMDA5LDcgKzIwMTEsNyBAQAogCXJldHVybiAxOwogfQogCi0vKiBDYWxsZWQgd2l0aCBydG5sX2xvY2sgZnJvbSB2bGFuIGZ1bmN0aW9ucyBhbmQgYWxzbyBkZXYtPnhtaXRfbG9jaworLyogQ2FsbGVkIHdpdGggcnRubF9sb2NrIGZyb20gdmxhbiBmdW5jdGlvbnMgYW5kIGFsc28gbmV0aWZfdHhfbG9jawogICogZnJvbSBzZXRfbXVsdGljYXN0LgogICovCiBzdGF0aWMgdm9pZApAQCAtMjA4Myw2ICsyMDg1LDkyIEBACiAJc3Bpbl91bmxvY2tfYmgoJmJwLT5waHlfbG9jayk7CiB9CiAKKyNkZWZpbmUgRldfQlVGX1NJWkUJMHg4MDAwCisKK3N0YXRpYyBpbnQKK2JueDJfZ3VuemlwX2luaXQoc3RydWN0IGJueDIgKmJwKQoreworCWlmICgoYnAtPmd1bnppcF9idWYgPSB2bWFsbG9jKEZXX0JVRl9TSVpFKSkgPT0gTlVMTCkKKwkJZ290byBndW56aXBfbm9tZW0xOworCisJaWYgKChicC0+c3RybSA9IGttYWxsb2Moc2l6ZW9mKCpicC0+c3RybSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlnb3RvIGd1bnppcF9ub21lbTI7CisKKwlicC0+c3RybS0+d29ya3NwYWNlID0ga21hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnAtPnN0cm0tPndvcmtzcGFjZSA9PSBOVUxMKQorCQlnb3RvIGd1bnppcF9ub21lbTM7CisKKwlyZXR1cm4gMDsKKworZ3VuemlwX25vbWVtMzoKKwlrZnJlZShicC0+c3RybSk7CisJYnAtPnN0cm0gPSBOVUxMOworCitndW56aXBfbm9tZW0yOgorCXZmcmVlKGJwLT5ndW56aXBfYnVmKTsKKwlicC0+Z3VuemlwX2J1ZiA9IE5VTEw7CisKK2d1bnppcF9ub21lbTE6CisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IENhbm5vdCBhbGxvY2F0ZSBmaXJtd2FyZSBidWZmZXIgZm9yICIKKwkJCSAgICAidW5jb21wcmVzc2lvbi5cbiIsIGJwLT5kZXYtPm5hbWUpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZAorYm54Ml9ndW56aXBfZW5kKHN0cnVjdCBibngyICpicCkKK3sKKwlrZnJlZShicC0+c3RybS0+d29ya3NwYWNlKTsKKworCWtmcmVlKGJwLT5zdHJtKTsKKwlicC0+c3RybSA9IE5VTEw7CisKKwlpZiAoYnAtPmd1bnppcF9idWYpIHsKKwkJdmZyZWUoYnAtPmd1bnppcF9idWYpOworCQlicC0+Z3VuemlwX2J1ZiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50CitibngyX2d1bnppcChzdHJ1Y3QgYm54MiAqYnAsIHU4ICp6YnVmLCBpbnQgbGVuLCB2b2lkICoqb3V0YnVmLCBpbnQgKm91dGxlbikKK3sKKwlpbnQgbiwgcmM7CisKKwkvKiBjaGVjayBnemlwIGhlYWRlciAqLworCWlmICgoemJ1ZlswXSAhPSAweDFmKSB8fCAoemJ1ZlsxXSAhPSAweDhiKSB8fCAoemJ1ZlsyXSAhPSBaX0RFRkxBVEVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluID0gMTA7CisKKyNkZWZpbmUgRk5BTUUJMHg4CisJaWYgKHpidWZbM10gJiBGTkFNRSkKKwkJd2hpbGUgKCh6YnVmW24rK10gIT0gMCkgJiYgKG4gPCBsZW4pKTsKKworCWJwLT5zdHJtLT5uZXh0X2luID0gemJ1ZiArIG47CisJYnAtPnN0cm0tPmF2YWlsX2luID0gbGVuIC0gbjsKKwlicC0+c3RybS0+bmV4dF9vdXQgPSBicC0+Z3VuemlwX2J1ZjsKKwlicC0+c3RybS0+YXZhaWxfb3V0ID0gRldfQlVGX1NJWkU7CisKKwlyYyA9IHpsaWJfaW5mbGF0ZUluaXQyKGJwLT5zdHJtLCAtTUFYX1dCSVRTKTsKKwlpZiAocmMgIT0gWl9PSykKKwkJcmV0dXJuIHJjOworCisJcmMgPSB6bGliX2luZmxhdGUoYnAtPnN0cm0sIFpfRklOSVNIKTsKKworCSpvdXRsZW4gPSBGV19CVUZfU0laRSAtIGJwLT5zdHJtLT5hdmFpbF9vdXQ7CisJKm91dGJ1ZiA9IGJwLT5ndW56aXBfYnVmOworCisJaWYgKChyYyAhPSBaX09LKSAmJiAocmMgIT0gWl9TVFJFQU1fRU5EKSkKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEZpcm13YXJlIGRlY29tcHJlc3Npb24gZXJyb3I6ICVzXG4iLAorCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPnN0cm0tPm1zZyk7CisKKwl6bGliX2luZmxhdGVFbmQoYnAtPnN0cm0pOworCisJaWYgKHJjID09IFpfU1RSRUFNX0VORCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyB2b2lkCiBsb2FkX3J2MnBfZncoc3RydWN0IGJueDIgKmJwLCB1MzIgKnJ2MnBfY29kZSwgdTMyIHJ2MnBfY29kZV9sZW4sCiAJdTMyIHJ2MnBfcHJvYykKQEAgLTIwOTIsOSArMjE4MCw5IEBACiAKIAogCWZvciAoaSA9IDA7IGkgPCBydjJwX2NvZGVfbGVuOyBpICs9IDgpIHsKLQkJUkVHX1dSKGJwLCBCTlgyX1JWMlBfSU5TVFJfSElHSCwgKnJ2MnBfY29kZSk7CisJCVJFR19XUihicCwgQk5YMl9SVjJQX0lOU1RSX0hJR0gsIGNwdV90b19sZTMyKCpydjJwX2NvZGUpKTsKIAkJcnYycF9jb2RlKys7Ci0JCVJFR19XUihicCwgQk5YMl9SVjJQX0lOU1RSX0xPVywgKnJ2MnBfY29kZSk7CisJCVJFR19XUihicCwgQk5YMl9SVjJQX0lOU1RSX0xPVywgY3B1X3RvX2xlMzIoKnJ2MnBfY29kZSkpOwogCQlydjJwX2NvZGUrKzsKIAogCQlpZiAocnYycF9wcm9jID09IFJWMlBfUFJPQzEpIHsKQEAgLTIxMzQsNyArMjIyMiw3IEBACiAJCWludCBqOwogCiAJCWZvciAoaiA9IDA7IGogPCAoZnctPnRleHRfbGVuIC8gNCk7IGorKywgb2Zmc2V0ICs9IDQpIHsKLQkJCVJFR19XUl9JTkQoYnAsIG9mZnNldCwgZnctPnRleHRbal0pOworCQkJUkVHX1dSX0lORChicCwgb2Zmc2V0LCBjcHVfdG9fbGUzMihmdy0+dGV4dFtqXSkpOwogCSAgICAgICAgfQogCX0KIApAQCAtMjE5MCwxNSArMjI3OCwzMiBAQAogCVJFR19XUl9JTkQoYnAsIGNwdV9yZWctPm1vZGUsIHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBibngyX2luaXRfY3B1cyhzdHJ1Y3QgYm54MiAqYnApCiB7CiAJc3RydWN0IGNwdV9yZWcgY3B1X3JlZzsKIAlzdHJ1Y3QgZndfaW5mbyBmdzsKKwlpbnQgcmMgPSAwOworCXZvaWQgKnRleHQ7CisJdTMyIHRleHRfbGVuOworCisJaWYgKChyYyA9IGJueDJfZ3VuemlwX2luaXQoYnApKSAhPSAwKQorCQlyZXR1cm4gcmM7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBSVjJQIHByb2Nlc3Nvci4gKi8KLQlsb2FkX3J2MnBfZncoYnAsIGJueDJfcnYycF9wcm9jMSwgc2l6ZW9mKGJueDJfcnYycF9wcm9jMSksIFJWMlBfUFJPQzEpOwotCWxvYWRfcnYycF9mdyhicCwgYm54Ml9ydjJwX3Byb2MyLCBzaXplb2YoYm54Ml9ydjJwX3Byb2MyKSwgUlYyUF9QUk9DMik7CisJcmMgPSBibngyX2d1bnppcChicCwgYm54Ml9ydjJwX3Byb2MxLCBzaXplb2YoYm54Ml9ydjJwX3Byb2MxKSwgJnRleHQsCisJCQkgJnRleHRfbGVuKTsKKwlpZiAocmMpCisJCWdvdG8gaW5pdF9jcHVfZXJyOworCisJbG9hZF9ydjJwX2Z3KGJwLCB0ZXh0LCB0ZXh0X2xlbiwgUlYyUF9QUk9DMSk7CisKKwlyYyA9IGJueDJfZ3VuemlwKGJwLCBibngyX3J2MnBfcHJvYzIsIHNpemVvZihibngyX3J2MnBfcHJvYzIpLCAmdGV4dCwKKwkJCSAmdGV4dF9sZW4pOworCWlmIChyYykKKwkJZ290byBpbml0X2NwdV9lcnI7CisKKwlsb2FkX3J2MnBfZncoYnAsIHRleHQsIHRleHRfbGVuLCBSVjJQX1BST0MyKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIFJYIFByb2Nlc3Nvci4gKi8KIAljcHVfcmVnLm1vZGUgPSBCTlgyX1JYUF9DUFVfTU9ERTsKQEAgLTIyMjIsNyArMjMyNywxMyBAQAogCWZ3LnRleHRfYWRkciA9IGJueDJfUlhQX2IwNkZ3VGV4dEFkZHI7CiAJZncudGV4dF9sZW4gPSBibngyX1JYUF9iMDZGd1RleHRMZW47CiAJZncudGV4dF9pbmRleCA9IDA7Ci0JZncudGV4dCA9IGJueDJfUlhQX2IwNkZ3VGV4dDsKKworCXJjID0gYm54Ml9ndW56aXAoYnAsIGJueDJfUlhQX2IwNkZ3VGV4dCwgc2l6ZW9mKGJueDJfUlhQX2IwNkZ3VGV4dCksCisJCQkgJnRleHQsICZ0ZXh0X2xlbik7CisJaWYgKHJjKQorCQlnb3RvIGluaXRfY3B1X2VycjsKKworCWZ3LnRleHQgPSB0ZXh0OwogCiAJZncuZGF0YV9hZGRyID0gYm54Ml9SWFBfYjA2RndEYXRhQWRkcjsKIAlmdy5kYXRhX2xlbiA9IGJueDJfUlhQX2IwNkZ3RGF0YUxlbjsKQEAgLTIyNjgsNyArMjM3OSwxMyBAQAogCWZ3LnRleHRfYWRkciA9IGJueDJfVFhQX2IwNkZ3VGV4dEFkZHI7CiAJZncudGV4dF9sZW4gPSBibngyX1RYUF9iMDZGd1RleHRMZW47CiAJZncudGV4dF9pbmRleCA9IDA7Ci0JZncudGV4dCA9IGJueDJfVFhQX2IwNkZ3VGV4dDsKKworCXJjID0gYm54Ml9ndW56aXAoYnAsIGJueDJfVFhQX2IwNkZ3VGV4dCwgc2l6ZW9mKGJueDJfVFhQX2IwNkZ3VGV4dCksCisJCQkgJnRleHQsICZ0ZXh0X2xlbik7CisJaWYgKHJjKQorCQlnb3RvIGluaXRfY3B1X2VycjsKKworCWZ3LnRleHQgPSB0ZXh0OwogCiAJZncuZGF0YV9hZGRyID0gYm54Ml9UWFBfYjA2RndEYXRhQWRkcjsKIAlmdy5kYXRhX2xlbiA9IGJueDJfVFhQX2IwNkZ3RGF0YUxlbjsKQEAgLTIzMTQsNyArMjQzMSwxMyBAQAogCWZ3LnRleHRfYWRkciA9IGJueDJfVFBBVF9iMDZGd1RleHRBZGRyOwogCWZ3LnRleHRfbGVuID0gYm54Ml9UUEFUX2IwNkZ3VGV4dExlbjsKIAlmdy50ZXh0X2luZGV4ID0gMDsKLQlmdy50ZXh0ID0gYm54Ml9UUEFUX2IwNkZ3VGV4dDsKKworCXJjID0gYm54Ml9ndW56aXAoYnAsIGJueDJfVFBBVF9iMDZGd1RleHQsIHNpemVvZihibngyX1RQQVRfYjA2RndUZXh0KSwKKwkJCSAmdGV4dCwgJnRleHRfbGVuKTsKKwlpZiAocmMpCisJCWdvdG8gaW5pdF9jcHVfZXJyOworCisJZncudGV4dCA9IHRleHQ7CiAKIAlmdy5kYXRhX2FkZHIgPSBibngyX1RQQVRfYjA2RndEYXRhQWRkcjsKIAlmdy5kYXRhX2xlbiA9IGJueDJfVFBBVF9iMDZGd0RhdGFMZW47CkBAIC0yMzYwLDcgKzI0ODMsMTMgQEAKIAlmdy50ZXh0X2FkZHIgPSBibngyX0NPTV9iMDZGd1RleHRBZGRyOwogCWZ3LnRleHRfbGVuID0gYm54Ml9DT01fYjA2RndUZXh0TGVuOwogCWZ3LnRleHRfaW5kZXggPSAwOwotCWZ3LnRleHQgPSBibngyX0NPTV9iMDZGd1RleHQ7CisKKwlyYyA9IGJueDJfZ3VuemlwKGJwLCBibngyX0NPTV9iMDZGd1RleHQsIHNpemVvZihibngyX0NPTV9iMDZGd1RleHQpLAorCQkJICZ0ZXh0LCAmdGV4dF9sZW4pOworCWlmIChyYykKKwkJZ290byBpbml0X2NwdV9lcnI7CisKKwlmdy50ZXh0ID0gdGV4dDsKIAogCWZ3LmRhdGFfYWRkciA9IGJueDJfQ09NX2IwNkZ3RGF0YUFkZHI7CiAJZncuZGF0YV9sZW4gPSBibngyX0NPTV9iMDZGd0RhdGFMZW47CkBAIC0yMzg0LDYgKzI1MTMsOSBAQAogCiAJbG9hZF9jcHVfZncoYnAsICZjcHVfcmVnLCAmZncpOwogCitpbml0X2NwdV9lcnI6CisJYm54Ml9ndW56aXBfZW5kKGJwKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTMyNTYsNyArMzM4OCw5IEBACiAJICogY29udGV4dCBibG9jayBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIGVuYWJsZWQuICovCiAJYm54Ml9pbml0X2NvbnRleHQoYnApOwogCi0JYm54Ml9pbml0X2NwdXMoYnApOworCWlmICgocmMgPSBibngyX2luaXRfY3B1cyhicCkpICE9IDApCisJCXJldHVybiByYzsKKwogCWJueDJfaW5pdF9udnJhbShicCk7CiAKIAlibngyX3NldF9tYWNfYWRkcihicCk7CkBAIC0zNTU2LDcgKzM2OTAsOSBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JYm54Ml9pbml0X2NoaXAoYnApOworCWlmICgocmMgPSBibngyX2luaXRfY2hpcChicCkpICE9IDApCisJCXJldHVybiByYzsKKwogCWJueDJfaW5pdF90eF9yaW5nKGJwKTsKIAlibngyX2luaXRfcnhfcmluZyhicCk7CiAJcmV0dXJuIDA7CkBAIC00MDM0LDYgKzQxNzAsOCBAQAogCW1zZyA9ICh1MzIpICsrYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXE7CiAJUkVHX1dSX0lORChicCwgYnAtPnNobWVtX2Jhc2UgKyBCTlgyX0RSVl9QVUxTRV9NQiwgbXNnKTsKIAorCWJwLT5zdGF0c19ibGstPnN0YXRfRndSeERyb3AgPSBSRUdfUkRfSU5EKGJwLCBCTlgyX0ZXX1JYX0RST1BfQ09VTlQpOworCiAJaWYgKChicC0+cGh5X2ZsYWdzICYgUEhZX1NFUkRFU19GTEFHKSAmJgogCSAgICAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDYpKSB7CiAKQEAgLTQyNTIsNyArNDM5MCw3IEBACiB9CiAjZW5kaWYKIAotLyogQ2FsbGVkIHdpdGggZGV2LT54bWl0X2xvY2suCisvKiBDYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrLgogICogaGFyZF9zdGFydF94bWl0IGlzIHBzZXVkby1sb2NrbGVzcyAtIGEgbG9jayBpcyBvbmx5IHJlcXVpcmVkIHdoZW4KICAqIHRoZSB0eCBxdWV1ZSBpcyBmdWxsLiBUaGlzIHdheSwgd2UgZ2V0IHRoZSBiZW5lZml0IG9mIGxvY2tsZXNzCiAgKiBvcGVyYXRpb25zIG1vc3Qgb2YgdGhlIHRpbWUgd2l0aG91dCB0aGUgY29tcGxleGl0aWVzIHRvIGhhbmRsZQpAQCAtNDMxMCw3ICs0NDQ4LDcgQEAKIAkJaXBfdGNwX2xlbiA9IChza2ItPm5oLmlwaC0+aWhsIDw8IDIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCiAJCXNrYi0+bmguaXBoLT5jaGVjayA9IDA7Ci0JCXNrYi0+bmguaXBoLT50b3RfbGVuID0gbnRvaHMobXNzICsgaXBfdGNwX2xlbiArIHRjcF9vcHRfbGVuKTsKKwkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSBodG9ucyhtc3MgKyBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pOwogCQlza2ItPmgudGgtPmNoZWNrID0KIAkJCX5jc3VtX3RjcHVkcF9tYWdpYyhza2ItPm5oLmlwaC0+c2FkZHIsCiAJCQkJCSAgICBza2ItPm5oLmlwaC0+ZGFkZHIsCkBAIC00NTA0LDYgKzQ2NDIsMTAgQEAKIAkJbmV0X3N0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyArCiAJCW5ldF9zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnM7CiAKKwluZXRfc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPQorCQkodW5zaWduZWQgbG9uZykgKHN0YXRzX2Jsay0+c3RhdF9JZkluTUJVRkRpc2NhcmRzICsKKwkJc3RhdHNfYmxrLT5zdGF0X0Z3UnhEcm9wKTsKKwogCXJldHVybiBuZXRfc3RhdHM7CiB9CiAKQEAgLTQ5ODYsNyArNTEyOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgQk5YMl9OVU1fU1RBVFMgNDUKKyNkZWZpbmUgQk5YMl9OVU1fU1RBVFMgNDYKIAogc3RhdGljIHN0cnVjdCB7CiAJY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTUwMzYsNiArNTE3OCw3IEBACiAJeyAicnhfbWFjX2N0cmxfZnJhbWVzIiB9LAogCXsgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCiAJeyAicnhfZGlzY2FyZHMiIH0sCisJeyAicnhfZndfZGlzY2FyZHMiIH0sCiB9OwogCiAjZGVmaW5lIFNUQVRTX09GRlNFVDMyKG9mZnNldF9uYW1lKSAob2Zmc2V0b2Yoc3RydWN0IHN0YXRpc3RpY3NfYmxvY2ssIG9mZnNldF9uYW1lKSAvIDQpCkBAIC01MDg2LDYgKzUyMjksNyBAQAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfTWFjQ29udHJvbEZyYW1lc1JlY2VpdmVkKSwgICAgICAgICAgICAgICAgICAgIAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbkZyYW1lc0wyRmlsdGVyRGlzY2FyZHMpLCAgICAgICAgICAgICAgICAgIAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbk1CVUZEaXNjYXJkcyksICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRndSeERyb3ApLAogfTsKIAogLyogc3RhdF9JZkhDSW5CYWRPY3RldHMgYW5kIHN0YXRfRG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzIGFyZQpAQCAtNTA5Niw3ICs1MjQwLDcgQEAKIAk0LDAsNCw0LDQsNCw0LDQsNCw0LAogCTQsNCw0LDQsNCw0LDQsNCw0LDQsCiAJNCw0LDQsNCw0LDQsNCw0LDQsNCwKLQk0LDQsNCw0LDQsCisJNCw0LDQsNCw0LDQsCiB9OwogCiBzdGF0aWMgdTggYm54Ml81NzA4X3N0YXRzX2xlbl9hcnJbQk5YMl9OVU1fU1RBVFNdID0gewpAQCAtNTEwNCw3ICs1MjQ4LDcgQEAKIAk0LDQsNCw0LDQsNCw0LDQsNCw0LAogCTQsNCw0LDQsNCw0LDQsNCw0LDQsCiAJNCw0LDQsNCw0LDQsNCw0LDQsNCwKLQk0LDQsNCw0LDQsCisJNCw0LDQsNCw0LDQsCiB9OwogCiAjZGVmaW5lIEJOWDJfTlVNX1RFU1RTIDYKQEAgLTU2MzQsNyArNTc3OCw5IEBACiAJCX0KIAl9CiAKLQlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDgpCisJaWYgKChDSElQX0lEKGJwKSA9PSBDSElQX0lEXzU3MDhfQTApIHx8CisJICAgIChDSElQX0lEKGJwKSA9PSBDSElQX0lEXzU3MDhfQjApIHx8CisJICAgIChDSElQX0lEKGJwKSA9PSBDSElQX0lEXzU3MDhfQjEpKQogCQlicC0+ZmxhZ3MgfD0gTk9fV09MX0ZMQUc7CiAKIAlpZiAoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA2X0EwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggYjg3OTI1ZjYuLjU4NDVlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyLmgKQEAgLTIzMSw2ICsyMzEsNyBAQAogCXUzMiBzdGF0X0dlblN0YXQxMzsKIAl1MzIgc3RhdF9HZW5TdGF0MTQ7CiAJdTMyIHN0YXRfR2VuU3RhdDE1OworCXUzMiBzdGF0X0Z3UnhEcm9wOwogfTsKIAogCkBAIC0zNDgxLDYgKzM0ODIsOCBAQAogCiAjZGVmaW5lIEJOWDJfQ09NX1NDUkFUQ0gJCQkJMHgwMDEyMDAwMAogCisjZGVmaW5lIEJOWDJfRldfUlhfRFJPUF9DT1VOVAkJCQkgMHgwMDEyMDA4NAorCiAKIC8qCiAgKiAgY3BfcmVnIGRlZmluaXRpb24KQEAgLTM3NDcsNyArMzc1MCwxMiBAQAogI2RlZmluZSBETUFfUkVBRF9DSEFOUwk1CiAjZGVmaW5lIERNQV9XUklURV9DSEFOUwkzCiAKLSNkZWZpbmUgQkNNX1BBR0VfQklUUwkxMgorLyogVXNlIENQVSBuYXRpdmUgcGFnZSBzaXplIHVwIHRvIDE2SyBmb3IgdGhlIHJpbmcgc2l6ZXMuICAqLworI2lmIChQQUdFX1NISUZUID4gMTQpCisjZGVmaW5lIEJDTV9QQUdFX0JJVFMJMTQKKyNlbHNlCisjZGVmaW5lIEJDTV9QQUdFX0JJVFMJUEFHRV9TSElGVAorI2VuZGlmCiAjZGVmaW5lIEJDTV9QQUdFX1NJWkUJKDEgPDwgQkNNX1BBR0VfQklUUykKIAogI2RlZmluZSBUWF9ERVNDX0NOVCAgKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHR4X2JkKSkKQEAgLTM3NzAsNyArMzc3OCw3IEBACiAKICNkZWZpbmUgUlhfUklOR19JRFgoeCkgKCh4KSAmIGJwLT5yeF9tYXhfcmluZ19pZHgpCiAKLSNkZWZpbmUgUlhfUklORyh4KSAoKCh4KSAmIH5NQVhfUlhfREVTQ19DTlQpID4+IDgpCisjZGVmaW5lIFJYX1JJTkcoeCkgKCgoeCkgJiB+TUFYX1JYX0RFU0NfQ05UKSA+PiAoQkNNX1BBR0VfQklUUyAtIDQpKQogI2RlZmluZSBSWF9JRFgoeCkgKCh4KSAmIE1BWF9SWF9ERVNDX0NOVCkKIAogLyogQ29udGV4dCBzaXplLiAqLwpAQCAtNDA0OCw2ICs0MDU2LDkgQEAKIAl1MzIJCQlmbGFzaF9zaXplOwogCiAJaW50CQkJc3RhdHVzX3N0YXRzX3NpemU7CisKKwlzdHJ1Y3Qgel9zdHJlYW1fcwkqc3RybTsKKwl2b2lkCQkJKmd1bnppcF9idWY7CiB9OwogCiBzdGF0aWMgdTMyIGJueDJfcmVnX3JkX2luZChzdHJ1Y3QgYm54MiAqYnAsIHUzMiBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Ml9mdy5oIGIvZHJpdmVycy9uZXQvYm54Ml9mdy5oCmluZGV4IDgxNTg5NzQuLjJkNzUzZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJfZncuaAorKysgYi9kcml2ZXJzL25ldC9ibngyX2Z3LmgKQEAgLTcsNyArNyw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBleGNlcHQgYXMgbm90ZWQgYmVsb3cuCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgMjAwNiBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQogICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwpAQCAtMjgsOTQzICsyOCw2NDEgQEAKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9DT01fYjA2RndCc3NMZW4gPSAweDg4Owogc3RhdGljIGNvbnN0IHUzMiBibngyX0NPTV9iMDZGd1Nic3NBZGRyID0gMHgwODAwNTg0MDsKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9DT01fYjA2RndTYnNzTGVuID0gMHgxYzsKLXN0YXRpYyB1MzIgYm54Ml9DT01fYjA2RndUZXh0WygweDU3YmMvNCkgKyAxXSA9IHsKLQkweDBhMDAwMjJkLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDYzNmY2ZDIwLCAweDMyMmUzNTJlLAotCTB4MzgwMDAwMDAsIDB4MDIwNTA4MDIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMzIsCi0JMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDEwLCAweDAwMDAwM2U4LCAweDAwMDBlYTYwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAyLCAweDAwMDAwMDIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDEwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDBkLCAweDNjMDIwODAwLCAweDI0NDI1ODQwLAotCTB4M2MwMzA4MDAsIDB4MjQ2MzU4ZTgsIDB4YWM0MDAwMDAsIDB4MDA0MzIwMmIsIDB4MTQ4MGZmZmQsIDB4MjQ0MjAwMDQsCi0JMHgzYzFkMDgwMCwgMHgzN2JkN2ZmYywgMHgwM2EwZjAyMSwgMHgzYzEwMDgwMCwgMHgyNjEwMDhiNCwgMHgzYzFjMDgwMCwKLQkweDI3OWM1ODQwLCAweDBlMDAwMmY3LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDI3YmRmZmU4LCAweDNjMWE4MDAwLAotCTB4M2MwMjAwMDgsIDB4MDM0MmQ4MjUsIDB4M2MwMzYwMTAsIDB4YWZiZjAwMTAsIDB4OGM2NTUwMDAsIDB4M2MwMjA4MDAsCi0JMHgyNDQ3MGYzMCwgMHgzYzA0MDgwMCwgMHgyNDg2NTg2MCwgMHgyNDAyZmY3ZiwgMHgwMGEyMjgyNCwgMHgzNGE1MzgwYywKLQkweGFjNjU1MDAwLCAweDAwMDAyODIxLCAweDI0MDIwMDM3LCAweDI0MDMwYzgwLCAweGFmNDIwMDA4LCAweGFmNDMwMDI0LAotCTB4YWNjNzAwMDAsIDB4MjRhNTAwMDEsIDB4MmNhMjAwMTYsIDB4MTQ0MGZmZmMsIDB4MjRjNjAwMDQsIDB4MjQ4NDU4NjAsCi0JMHgzYzAyMDgwMCwgMHgyNDQyMGYzYywgMHgzYzAzMDgwMCwgMHgyNDYzMGUyYywgMHhhYzgyMDAwNCwgMHgzYzAyMDgwMCwKLQkweDI0NDIwYTJjLCAweDNjMDUwODAwLCAweDI0YTUxMjY4LCAweGFjODIwMDBjLCAweDNjMDIwODAwLCAweDI0NDI0M2RjLAotCTB4YWM4MzAwMDgsIDB4M2MwMzA4MDAsIDB4MjQ2MzM2OTgsIDB4YWM4MjAwMTQsIDB4M2MwMjA4MDAsIDB4MjQ0MjNjMjQsCi0JMHhhYzgzMDAxOCwgMHhhYzgzMDAxYywgMHgzYzAzMDgwMCwgMHgyNDYzMGY0NCwgMHhhYzgyMDAyNCwgMHgzYzAyMDgwMCwKLQkweDI0NDI0M2FjLCAweGFjODMwMDJjLCAweDNjMDMwODAwLCAweDI0NjM0M2NjLCAweGFjODIwMDMwLCAweDNjMDIwODAwLAotCTB4MjQ0MjQyZjAsIDB4YWM4MzAwMzQsIDB4M2MwMzA4MDAsIDB4MjQ2MzNkNzgsIDB4YWM4MjAwM2MsIDB4M2MwMjA4MDAsCi0JMHgyNDQyMGZkNCwgMHhhYzg1MDAxMCwgMHhhYzg1MDAyMCwgMHhhYzgzMDA0MCwgMHgwZTAwMTBiNywgMHhhYzgyMDA1MCwKLQkweDhmYmYwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDI3YmRmZmUwLCAweGFmYjAwMDEwLCAweDI3NTAwMTAwLAotCTB4YWZiZjAwMTgsIDB4YWZiMTAwMTQsIDB4OTIwMzAwMGIsIDB4MjQwMjAwMDMsIDB4MTQ2MjAwNWIsIDB4OTYxMTAwMDgsCi0JMHgzMjIyMDAwMSwgMHgxMDQwMDAwOSwgMHgyNzQzMDA4MCwgMHg4ZTAyMDAwMCwgMHg5NjA0MDAxNCwgMHgwMDAyMTFjMiwKLQkweDAwMDIxMDQwLCAweDAwNjIxODIxLCAweGE0NjQwMDAwLCAweDBhMDAwMmQwLCAweDNjMDIwODAwLCAweDNjMDIwODAwLAotCTB4OGM0MzAwMjAsIDB4MTA2MDAwMmEsIDB4M2MwMzA4MDAsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OTc0MjAxMDgsCi0JMHg4Zjg1MDAxOCwgMHg5NzQzMDEwYywgMHgzMDQyMDAzZSwgMHgwMDAyMTQwMCwgMHgwMDYyMTgyNSwgMHhhY2EzMDAwMCwKLQkweDhmODQwMDE4LCAweDhmNDIwMTAwLCAweGFjODIwMDA0LCAweDk3NDMwMTE2LCAweDk3NDIwMTBlLCAweDhmODQwMDE4LAotCTB4MDAwMzFjMDAsIDB4MDA0MzEwMjUsIDB4YWM4MjAwMDgsIDB4OTc0MzAxMTAsIDB4OTc0NDAxMTIsIDB4OGY4NTAwMTgsCi0JMHgwMDAzMWMwMCwgMHgwMDgzMjAyNSwgMHhhY2E0MDAwYywgMHg5NzQyMDExNCwgMHg4Zjg0MDAxOCwgMHgzMDQyZmZmZiwKLQkweGFjODIwMDEwLCAweDhmODMwMDE4LCAweGFjNjAwMDE0LCAweDhmODIwMDE4LCAweDNjMDMwODAwLCAweGFjNDAwMDE4LAotCTB4OTQ2MjU4Y2UsIDB4OGY4NDAwMTgsIDB4M2MwMzIwMDAsIDB4MDA0MzEwMjUsIDB4YWM4MjAwMWMsIDB4MGUwMDE0Y2MsCi0JMHgyNDA0MDAwMSwgMHgzYzAzMDgwMCwgMHg4YzYyMDA0MCwgMHgyNDQyMDAwMSwgMHhhYzYyMDA0MCwgMHgzYzAyMDgwMCwKLQkweDhjNDMwMDQ0LCAweDMyMjQwMDA0LCAweDI0NjMwMDAxLCAweDEwODAwMDE3LCAweGFjNDMwMDQ0LCAweDhmNDIwMmI4LAotCTB4MDQ0MzAwMDcsIDB4OGUwMjAwMjAsIDB4M2MwNDA4MDAsIDB4OGM4MzAwNjAsIDB4MjQwMjAwMDEsIDB4MjQ2MzAwMDEsCi0JMHgwYTAwMDJmMiwgMHhhYzgzMDA2MCwgMHgzYzA2MDgwMCwgMHg4Y2M0MDA1YywgMHhhZjQyMDI4MCwgMHg5NjAzMDAxNiwKLQkweDAwMDAxMDIxLCAweGE3NDMwMjg0LCAweDhlMDUwMDA0LCAweDI0ODQwMDAxLCAweDNjMDMxMDAwLCAweGFmNDUwMjg4LAotCTB4YWY0MzAyYjgsIDB4MGEwMDAyZjIsIDB4YWNjNDAwNWMsIDB4MzIyMjAwMDIsIDB4MGEwMDAyZjIsIDB4MDAwMjEwMmIsCi0JMHgzYzAyNjAwMCwgMHhhYzQwMDgwOCwgMHgwMDAwMDAwZCwgMHgwMDAwMTAyMSwgMHg4ZmJmMDAxOCwgMHg4ZmIxMDAxNCwKLQkweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDIwLCAweDI3YmRmZmM4LCAweGFmYmYwMDM0LCAweGFmYmUwMDMwLAotCTB4YWZiNzAwMmMsIDB4YWZiNjAwMjgsIDB4YWZiNTAwMjQsIDB4YWZiNDAwMjAsIDB4YWZiMzAwMWMsIDB4YWZiMjAwMTgsCi0JMHhhZmIxMDAxNCwgMHgwZTAwMDI0NCwgMHhhZmIwMDAxMCwgMHgzYzE3MDgwMCwgMHgzYzE2MDgwMCwgMHgyNDExMDAyMCwKLQkweDI0MTUwMDMwLCAweDI3OTQwMDBjLCAweDI3OTMwMDA4LCAweDNjMTI0MDAwLCAweDNjMWUwODAwLCAweDhmODIwMDA0LAotCTB4M2MwNDA4MDAsIDB4OGM4MzAwMjAsIDB4MTA0MzAwMDUsIDB4OGVlMjAwYTQsIDB4YWY4MzAwMDQsIDB4MGUwMDE1OTMsCi0JMHgwMDAwMDAwMCwgMHg4ZWUyMDBhNCwgMHg4ZWMzMDBhMCwgMHgxMDQzMDAwNCwgMHgyNmM0MDBhMCwgMHg5NDgyMDAwMiwKLQkweGE3NDIwMDllLCAweGFlZTMwMGE0LCAweDhmNTAwMDAwLCAweDMyMDIwMDA3LCAweDEwNDBmZmVlLCAweDMyMDIwMDAxLAotCTB4MTA0MDAwMmMsIDB4MzIwMjAwMDIsIDB4OGY0MjAxMDAsIDB4YWY0MjAwMjAsIDB4OGY0MzAxMDQsIDB4YWY0MzAwYTgsCi0JMHg5MzQyMDEwYiwgMHg5MzYzMDAwMCwgMHgzMDYzMDBmZiwgMHgxMDcxMDAwNSwgMHgzMDQ0MDBmZiwgMHgxMDc1MDAwNiwKLQkweDJjODIwMDE2LCAweDBhMDAwMzMzLCAweDAwMDAwMDAwLCAweGFmOTQwMDAwLCAweDBhMDAwMzM0LCAweDJjODIwMDE2LAotCTB4YWY5MzAwMDAsIDB4MGEwMDAzMzQsIDB4MDAwMDAwMDAsIDB4YWY4MDAwMDAsIDB4MTQ0MDAwMDUsIDB4MDAwNDE4ODAsCi0JMHgwZTAwMDNjYywgMHgwMDAwMDAwMCwgMHgwYTAwMDM0MCwgMHgwMDAwMDAwMCwgMHgzYzAyMDgwMCwgMHgyNDQyNTg2MCwKLQkweDAwNjIxODIxLCAweDhjNjIwMDAwLCAweDAwNDBmODA5LCAweDAwMDAwMDAwLCAweDEwNDAwMDA1LCAweDNjMDMwODAwLAotCTB4OGY0MjAxMDQsIDB4M2MwMTYwMjAsIDB4YWMyMjAwMTQsIDB4M2MwMzA4MDAsIDB4OGM2MjAwMzQsIDB4YWY1MjAxMzgsCi0JMHgyNDQyMDAwMSwgMHhhYzYyMDAzNCwgMHgzMjAyMDAwMiwgMHgxMDQwMDAxYSwgMHgzMjAyMDAwNCwgMHg4ZjQyMDE0MCwKLQkweGFmNDIwMDIwLCAweDkzNjMwMDAwLCAweDMwNjMwMGZmLCAweDEwNzEwMDA1LCAweDAwMDAwMDAwLCAweDEwNzUwMDA2LAotCTB4MDAwMDAwMDAsIDB4MGEwMDAzNWQsIDB4MDAwMDAwMDAsIDB4YWY5NDAwMDAsIDB4MGEwMDAzNWUsIDB4MDAwMDAwMDAsCi0JMHhhZjkzMDAwMCwgMHgwYTAwMDM1ZSwgMHgwMDAwMDAwMCwgMHhhZjgwMDAwMCwgMHgwZTAwMGM3YiwgMHgwMDAwMDAwMCwKLQkweDNjMDQwODAwLCAweDhjODIwMDM4LCAweGFmNTIwMTc4LCAweDI0NDIwMDAxLCAweGFjODIwMDM4LCAweDMyMDIwMDA0LAotCTB4MTA0MGZmYTQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxODAsIDB4YWY0MjAwMjAsIDB4OTM2MzAwMDAsIDB4MzA2MzAwZmYsCi0JMHgxMDcxMDAwNSwgMHgwMDAwMDAwMCwgMHgxMDc1MDAwNiwgMHgwMDAwMDAwMCwgMHgwYTAwMDM3OCwgMHgwMDAwMDAwMCwKLQkweGFmOTQwMDAwLCAweDBhMDAwMzc5LCAweDAwMDAwMDAwLCAweGFmOTMwMDAwLCAweDBhMDAwMzc5LCAweDAwMDAwMDAwLAotCTB4YWY4MDAwMDAsIDB4OGY0MzAxODAsIDB4MjQwMjBmMDAsIDB4MTQ2MjAwMDUsIDB4MDAwMDAwMDAsIDB4OGY0MjAxODgsCi0JMHhhNzQyMDA5YywgMHgwYTAwMDM4NywgMHg4ZmMyMDAzYywgMHg5MzYyMDAwMCwgMHgxNDUxMDAwNCwgMHg4ZmMyMDAzYywKLQkweDBlMDAwYmFkLCAweDAwMDAwMDAwLCAweDhmYzIwMDNjLCAweGFmNTIwMWI4LCAweDI0NDIwMDAxLCAweDBhMDAwMzBiLAotCTB4YWZjMjAwM2MsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTAsIDB4OTc0MjAxMDgsIDB4MjQwMzMwMDAsIDB4MzA0NDcwMDAsCi0JMHgxMDgzMDAxNiwgMHgyODgyMzAwMSwgMHgxMDQwMDAwNywgMHgyNDAyNDAwMCwgMHgxMDgwMDAwYiwgMHgyNDAyMjAwMCwKLQkweDEwODIwMDBjLCAweDAwMDAwMDAwLCAweDBhMDAwM2IzLCAweDAwMDAwMDAwLCAweDEwODIwMDEwLCAweDI0MDI1MDAwLAotCTB4MTA4MjAwMTIsIDB4MDAwMDAwMDAsIDB4MGEwMDAzYjMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MGEwMDAzYjUsCi0JMHgwMDAwMTAyMSwgMHgwZTAwMDQ0MiwgMHgwMDAwMDAwMCwgMHgwYTAwMDNiNiwgMHg4ZmJmMDAxMCwgMHgwZTAwMDQxYSwKLQkweDAwMDAwMDAwLCAweDBhMDAwM2I1LCAweDAwMDAxMDIxLCAweDBlMDAwNjY5LCAweDAwMDAwMDAwLCAweDBhMDAwM2I1LAotCTB4MDAwMDEwMjEsIDB4MGUwMDE0NjcsIDB4MDAwMDAwMDAsIDB4MGEwMDAzYjUsIDB4MDAwMDEwMjEsIDB4MDAwMDAwMGQsCi0JMHgwMDAwMTAyMSwgMHg4ZmJmMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHg5MzYyMDAwMCwgMHgyNDAzMDAyMCwKLQkweDMwNDQwMGZmLCAweDEwODMwMDA1LCAweDI0MDIwMDMwLCAweDEwODIwMDA3LCAweDAwMDAwMDAwLCAweDBhMDAwM2M5LAotCTB4MDAwMDAwMDAsIDB4Mjc4MjAwMGMsIDB4YWY4MjAwMDAsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4Mjc4MjAwMDgsCi0JMHhhZjgyMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHhhZjgwMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDBkLCAweDAzZTAwMDA4LCAweDAwMDAxMDIxLCAweDAzZTAwMDA4LCAweDAwMDAxMDIxLCAweDI3NDQwMTAwLAotCTB4OTQ4MzAwMDgsIDB4MzA2MjAwMDQsIDB4MTA0MDAwMTcsIDB4MzA2MjAwMDIsIDB4OGY0MjAyYjgsIDB4MDQ0MzAwMDcsCi0JMHg4YzgyMDAyMCwgMHgzYzA0MDgwMCwgMHg4YzgzMDA2MCwgMHgyNDAyMDAwMSwgMHgyNDYzMDAwMSwgMHgwM2UwMDAwOCwKLQkweGFjODMwMDYwLCAweGFmNDIwMjgwLCAweDk0ODMwMDE2LCAweDNjMDYwODAwLCAweGE3NDMwMjg0LCAweDhjODUwMDA0LAotCTB4OGNjNDAwNWMsIDB4MDAwMDEwMjEsIDB4M2MwMzEwMDAsIDB4MjQ4NDAwMDEsIDB4YWY0NTAyODgsIDB4YWY0MzAyYjgsCi0JMHgwM2UwMDAwOCwgMHhhY2M0MDA1YywgMHgxNDQwMDAwMywgMHgzYzA0MDgwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMTAyMSwKLQkweDhjODMwMDg0LCAweDI0MDIwMDAxLCAweDI0NjMwMDAxLCAweDAzZTAwMDA4LCAweGFjODMwMDg0LCAweDI3NDUwMTAwLAotCTB4M2MwNDA4MDAsIDB4OGM4MjAwODgsIDB4OTRhMzAwMGMsIDB4MjQ0MjAwMDEsIDB4MDA3YTE4MjEsIDB4YWM4MjAwODgsCi0JMHg4Y2E0MDAxOCwgMHg5MDY2NDAwMCwgMHhhZjQ0MDAzOCwgMHg4Y2EyMDAxYywgMHgyNDAzZmZmOCwgMHgwMDA2MzYwMCwKLQkweDAwNDMxMDI0LCAweDM0NDIwMDA0LCAweDNjMDMwMDA1LCAweGFmNDIwMDNjLCAweGFmNDMwMDMwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4YWY0NjA0MDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgzYzAyMDAwNiwgMHgzNDQyMDAwMSwgMHhhZjQyMDAzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDhmNDIwMDAwLCAweDMwNDIwMDEwLCAweDEwNDBmZmZkLCAweDAwMDAxMDIxLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MjdiZGZmZTgsIDB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsIDB4MTA2MDAwMWUsCi0JMHhhZmJmMDAxNCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAxOCwgMHg4ZTAyMDAxOCwgMHhhYzYyMDAwMCwKLQkweDhmODQwMDE4LCAweDk2MDIwMDBjLCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LAotCTB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTQsIDB4OGY4NDAwMTgsCi0JMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHhhYzgzMDAxOCwgMHg5NjAyMDAwOCwgMHgzYzAzMDgwMCwgMHg5NDY0NThjZSwKLQkweDhmODUwMDE4LCAweDAwMDIxNDAwLCAweDAwNDQxMDI1LCAweDI0MDQwMDAxLCAweDBlMDAxNGNjLCAweGFjYTIwMDFjLAotCTB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MjdiZGZmZTgsIDB4YWZiMDAwMTAsCi0JMHgyNzUwMDEwMCwgMHhhZmJmMDAxNCwgMHg5MjAyMDAwOSwgMHgxNDQwMDAwMywgMHgzYzAyMDgwMCwgMHgwYTAwMDQ2YywKLQkweDI0MDIwMDAxLCAweDhjNDMwMDIwLCAweDEwNjAwMDFmLCAweDAwMDAxMDIxLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4OGY4MzAwMTgsIDB4OGUwMjAwMTgsIDB4YWM2MjAwMDAsIDB4OGY4NDAwMTgsIDB4OTYwMjAwMGMsIDB4YWM4MjAwMDQsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwKLQkweDhmODIwMDE4LCAweGFjNDAwMDE0LCAweDhmODQwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweGFjODMwMDE4LAotCTB4OTYwMjAwMDgsIDB4M2MwMzA4MDAsIDB4OTQ2NDU4Y2UsIDB4OGY4NTAwMTgsIDB4MDAwMjE0MDAsIDB4MDA0NDEwMjUsCi0JMHgyNDA0MDAwMSwgMHgwZTAwMTRjYywgMHhhY2EyMDAxYywgMHgwMDAwMTAyMSwgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwKLQkweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDNjMGIwODAwLCAweDhkNjgwOGIwLCAweDNjMDcwODAwLCAweDI0ZTcwMGIwLAotCTB4MDAwODQ5MDAsIDB4MDEyNzE4MjEsIDB4YWM2NDAwMDAsIDB4OTM2MjAwMDUsIDB4OTc2NjAwMDgsIDB4MDBlOTUwMjEsCi0JMHg5MzYzMDAyMywgMHg5MzY0MDAzZiwgMHgyNTA4MDAwMSwgMHgwMDAyMTYwMCwgMHgwMDA2MzQwMCwgMHgwMDQ2MTAyNSwKLQkweDAwMDMxYTAwLCAweDAwNDMxMDI1LCAweDAwODIyMDI1LCAweGFkNDQwMDA0LCAweDkzNjIwMDdlLCAweDkzNjYwMDdmLAotCTB4OGY2MzAxNzgsIDB4OTM2NDAwN2EsIDB4MDAwMjE2MDAsIDB4MDAwNjM0MDAsIDB4MDA0NjEwMjUsIDB4MDAwMzFhMDAsCi0JMHgwMDQzMTAyNSwgMHgwMDgyMjAyNSwgMHhhZDQ0MDAwOCwgMHg5MzYyMDA4MCwgMHg5MzYzMDA3ZCwgMHgzMTA4MDA3ZiwKLQkweDAxNDAzODIxLCAweGFkNjgwOGIwLCAweDAwMDIxNjAwLCAweDAwMDMxYzAwLCAweDAwNDMxMDI1LCAweDAwNDUxMDI1LAotCTB4MDNlMDAwMDgsIDB4YWNlMjAwMGMsIDB4MjdiZGZmYjgsIDB4YWZiMzAwMmMsIDB4MDAwMDk4MjEsIDB4YWZiZTAwNDAsCi0JMHgwMDAwZjAyMSwgMHhhZmI1MDAzNCwgMHgyNzU1MDEwMCwgMHhhZmJmMDA0NCwgMHhhZmI3MDAzYywgMHhhZmI2MDAzOCwKLQkweGFmYjQwMDMwLCAweGFmYjIwMDI4LCAweGFmYjEwMDI0LCAweGFmYjAwMDIwLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LAotCTB4OTZhMjAwMDgsIDB4OGY1NDAxMDAsIDB4OGViMTAwMTgsIDB4MzA0MjAwMDEsIDB4MTA0MDAwMzcsIDB4MDJhMGI4MjEsCi0JMHg4ZjYzMDA1NCwgMHgyNjIyZmZmZiwgMHgwMDQzMTAyMywgMHgxODQwMDAwNiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwKLQkweDAwMDAwMDAwLCAweDI0MDAwMTVjLCAweDBhMDAwNGU1LCAweDAwMDAyMDIxLCAweDhmNjIwMDRjLCAweDAyMjIxMDIzLAotCTB4MTg0MDAwMjgsIDB4MDAwMDIwMjEsIDB4OTM2NTAxMjAsIDB4OTM2NDAxMjEsIDB4M2MwMzA4MDAsIDB4OGM2MjAwOGMsCi0JMHgzMDg0MDBmZiwgMHgyNDQyMDAwMSwgMHgzMGE1MDBmZiwgMHgwMDgwMzgyMSwgMHgxNDg1MDAwYiwgMHhhYzYyMDA4YywKLQkweDNjMDQwODAwLCAweDhjODMwMDkwLCAweDI0NjMwMDAxLCAweGFjODMwMDkwLCAweDkzNjIwMTIyLCAweDMwNDIwMDAxLAotCTB4MDAwMjEwMjMsIDB4MzA0MjAwMDUsIDB4MGEwMDA0ZTUsIDB4MzQ0NDAwMDQsIDB4Mjc2NjAxMDAsIDB4MDAwNDEwODAsCi0JMHgwMGMyMTAyMSwgMHg4YzQzMDAwMCwgMHgwMjIzMTgyMywgMHgwNDYwMDAwNCwgMHgyNDgyMDAwMSwgMHgzMDQ0MDAwNywKLQkweDE0ODVmZmY5LCAweDAwMDQxMDgwLCAweDEwODcwMDA3LCAweDNjMDMwODAwLCAweGEzNjQwMTIxLCAweDhjNjIwMDk0LAotCTB4MjQwNDAwMDUsIDB4MjQ0MjAwMDEsIDB4MGEwMDA0ZTUsIDB4YWM2MjAwOTQsIDB4MjQwNDAwMDQsIDB4MDA4MDk4MjEsCi0JMHg5MzYyMDAzZiwgMHgzMDQ0MDBmZiwgMHgzODgzMDAxNiwgMHgyYzYzMDAwMSwgMHgzODgyMDAxMCwgMHgyYzQyMDAwMSwKLQkweDAwNjIxODI1LCAweDE0NjAwMDBjLCAweDI0MDIwMDAxLCAweDM4ODMwMDA4LCAweDJjNjMwMDAxLCAweDM4ODIwMDE0LAotCTB4MmM0MjAwMDEsIDB4MDA2MjE4MjUsIDB4MTQ2MDAwMDUsIDB4MjQwMjAwMDEsIDB4MjQwMjAwMTIsIDB4MTQ4MjAwMDIsCi0JMHgwMDAwMTAyMSwgMHgyNDAyMDAwMSwgMHgxMDQwMDAwOSwgMHgwMDAwMDAwMCwgMHg4ZWEyMDAyMCwgMHg4ZjYzMDA0MCwKLQkweDAwNDBiMDIxLCAweDAwNDMxMDIzLCAweDVjNDAwMDEwLCAweDhmNzYwMDQwLCAweDBhMDAwNTExLCAweDAwMDAwMDAwLAotCTB4OTM0MzAxMGIsIDB4MjQwMjAwMDQsIDB4MTQ2MjAwMGEsIDB4OGViNjAwMjAsIDB4OGY2MzAwNDAsIDB4M2MwMjEwMDAsCi0JMHgwMDc2MTgyMywgMHgwMDQzMTAyYSwgMHgxMDQwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwKLQkweDI0MDAwMmZhLCAweDkzNDMwMTBiLCAweDI0MDIwMDA0LCAweDU0NjIwMDBiLCAweDk2YTIwMDA4LCAweDI0MDIwMDAxLAotCTB4YWZhMjAwMTAsIDB4OTZhMjAwMDgsIDB4MjQwMzAwMDEsIDB4YWZhMzAwMTgsIDB4OGViMjAwMWMsIDB4MzY3MzAwMDIsCi0JMHgzMDQyMDAyMCwgMHgwYTAwMDUyNiwgMHhhZmEyMDAxNCwgMHgzNjczMDA4MCwgMHgzMDQyMDAwMiwgMHgxMDQwMDAwMywKLQkweGFmYTAwMDE4LCAweDBhMDAwNTI2LCAweDhlYjIwMDFjLCAweDhlYjIwMDE0LCAweDI0MDJmZmZiLCAweDAyNjI4MDI0LAotCTB4MTIwMDAwMmEsIDB4M2MwMzA4MDAsIDB4OGM2MjAwMzAsIDB4MDIwMjEwMjQsIDB4MTA0MDAwMjYsIDB4M2MwMjA4MDAsCi0JMHg4YzQzMDAyMCwgMHgxMDYwMDAyNCwgMHgzMjYyMDAwNCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAxOCwKLQkweDhmNDIwMTAwLCAweGFjNjIwMDAwLCAweDhmODQwMDE4LCAweDAyNDAxODIxLCAweDMyNjIwMDAyLCAweGFjOTAwMDA0LAotCTB4OGY4NDAwMTgsIDB4NTQ0MDAwMDEsIDB4MDJjMDE4MjEsIDB4YWM4MzAwMDgsIDB4OGY4MzAwMTgsIDB4OGVlMjAwMjAsCi0JMHhhYzYyMDAwYywgMHg4Zjg0MDAxOCwgMHg4ZjYyMDA0MCwgMHhhYzgyMDAxMCwgMHg4ZjgzMDAxOCwgMHg4ZWUyMDAxOCwKLQkweGFjNjIwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLAotCTB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTAsIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsCi0JMHhhY2EzMDAxYywgMHgzMjYyMDAwNCwgMHgxMDQwMDA2MywgMHgwMDAwMzgyMSwgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwKLQkweDNjMDM4MDAwLCAweDAyODIxMDI1LCAweGEzNjAwMDdjLCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwMjMsIDB4MzA0MjAwODAsIDB4MTA0MDAwMTEsIDB4MDAwMDAwMDAsCi0JMHg4ZjY1MDA1YywgMHg4ZjYzMDA0YywgMHg5NzY0MDAzYywgMHg4ZjYyMDA2NCwgMHgwMGEzMjgyMywgMHgwMDg1MjgyMSwKLQkweDAwYTIxMDJiLCAweDU0NDAwMDA2LCAweDNjMDIzZmZmLCAweDkzNjIwMDIzLCAweDMwNDIwMDdmLCAweGEzNjIwMDIzLAotCTB4YWY3MTAwNjQsIDB4M2MwMjNmZmYsIDB4MGEwMDA1ODAsIDB4MzQ0MmZmZmYsIDB4OGY2MjAwNWMsIDB4MDIyMjEwMjMsCi0JMHgwNDQwMDAxMSwgMHgwMDAwMDAwMCwgMHg4ZjY1MDA1YywgMHg4ZjYzMDA2NCwgMHg5NzY0MDAzYywgMHgzYzAyM2ZmZiwKLQkweDM0NDJmZmZmLCAweGFmNzEwMDY0LCAweDAwYTMyODIzLCAweDAwODUyODIxLCAweDAwNDUxMDJiLCAweDEwNDAwMDA0LAotCTB4MDIyNTEwMjEsIDB4M2MwNTNmZmYsIDB4MzRhNWZmZmYsIDB4MDIyNTEwMjEsIDB4YWY2MjAwNWMsIDB4MjQwNzAwMDEsCi0JMHhhZjcxMDA0YywgMHg4ZjYyMDA1NCwgMHgxNjIyMDAwNSwgMHgwMDAwMDAwMCwgMHg5MzYyMDAyMywgMHgzMDQyMDA0MCwKLQkweDEwNDAwMDE3LCAweDI0MDIwMDAxLCAweDk3NjIwMDZhLCAweDAwMDIyODgwLCAweDUwYTAwMDAxLCAweDI0MDUwMDAxLAotCTB4OTc2MzAwNjgsIDB4OTM2NDAwODEsIDB4M2MwMjA4MDAsIDB4OGM0NjAwNGMsIDB4MDA2NTI4MjEsIDB4MDA4NTI4MDQsCi0JMHgwMGM1MTAyYiwgMHg1NDQwMDAwMSwgMHgwMGEwMzAyMSwgMHgzYzAyMDgwMCwgMHg4YzQ0MDA1MCwgMHgwMGM0MTgyYiwKLQkweDU0NjAwMDAxLCAweDAwYzAyMDIxLCAweDhmNDIwMDc0LCAweDI0MDNmZmZlLCAweDAwODMyODI0LCAweDAwYTIxMDIxLAotCTB4YWY2MjAwMGMsIDB4OTM2MjAwODIsIDB4MzA0MjAwODAsIDB4NTA0MDAwMDEsIDB4YTM2MDAwODEsIDB4M2MwMjgwMDAsCi0JMHgzNDQyMDAwMSwgMHgwMjgyMTAyNSwgMHhhZjQyMDAyMCwgMHg5MzYzMDA3ZSwgMHg5MzYyMDA3YSwgMHgxMDYyMDAwNCwKLQkweDAwMDAwMDAwLCAweDBlMDAxM2M0LCAweDAwMDAwMDAwLCAweDAwNDAzODIxLCAweDU0ZTAwMDAxLCAweDI0MWUwMDAxLAotCTB4OGY3MDAwNDAsIDB4OGY2MjAwNDAsIDB4MTQ1MjAwMDMsIDB4MDA1MjEwMjMsIDB4MGEwMDA1YmYsIDB4MDAwMDEwMjEsCi0JMHgyODQyMDAwMSwgMHgxMDQwMDA0MSwgMHg4ZmEyMDAxMCwgMHgwZTAwMGZhZSwgMHgwMjQwMjAyMSwgMHhhZjcyMDA0MCwKLQkweDkzNjIwMDNlLCAweDMwNDIwMDAxLCAweDE0NDAwMDBiLCAweDNjMDI5MDAwLCAweDkzNjIwMDIyLCAweDI0NDIwMDAxLAotCTB4YTM2MjAwMjIsIDB4OTM2MzAwMjIsIDB4M2MwMjA4MDAsIDB4OGM0NDAwOTgsIDB4MDA2NDE4MmIsIDB4MTQ2MDAwMjcsCi0JMHgzYzAyMDgwMCwgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwgMHgwMjgyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwKLQkweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLAotCTB4MzQ0MjAwMDEsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsIDB4MDI4MzE4MjUsIDB4YWY0MzAwMjAsCi0JMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMjgwMjAyMSwgMHgwZTAwMDQ3MCwgMHgyNDA1MDI3MywgMHgwYTAwMDVmMiwKLQkweDI0MDUwMDAxLCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweDNjMDMxMDAwLAotCTB4YWY1NDAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsIDB4MjQwNTAwMDEsIDB4MjQwMjAwMDEsIDB4YTc2MjAwMTIsCi0JMHhhMzYwMDAyMiwgMHgwYTAwMDVmZSwgMHgyY2EyMDAwMSwgMHg5NzQzMDA3YSwgMHg5NDQ0MDAyYSwgMHgwMDAwMjgyMSwKLQkweDAwNjQxODIxLCAweDMwNjNmZmZlLCAweGE3NjMwMDEyLCAweDJjYTIwMDAxLCAweDAwMDIxMDIzLCAweDAzYzJmMDI0LAotCTB4OGZhMjAwMTAsIDB4MTA0MDAwMDQsIDB4OGZhMzAwMTQsIDB4MGUwMDEzYzEsIDB4MDAwMDAwMDAsIDB4OGZhMzAwMTQsCi0JMHgxMDYwMDAwMywgMHgwMDAwMDAwMCwgMHgwZTAwMTBlYiwgMHgwMDAwMDAwMCwgMHgxM2MwMDAxZiwgMHgzYzAyOTAwMCwKLQkweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsCi0JMHgzNDYzMDAwMSwgMHgwMjgzMTgyNSwgMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMjgwMjAyMSwKLQkweDBlMDAwNDcwLCAweDI0MDUwMzZjLCAweDBhMDAwNjJiLCAweDhmYTIwMDE4LCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsIDB4YWY1NDAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsCi0JMHg4ZmEyMDAxOCwgMHg1MDQwMDAyZiwgMHg5NmEyMDAwOCwgMHg4ZjYyMDA0OCwgMHg4ZjYzMDAyNCwgMHgwMDc2MTgyMSwKLQkweGFmNjMwMDQ4LCAweDk3NjQwMDNjLCAweDAwNTAxMDIzLCAweDAwNDQxMDJiLCAweDEwNDAwMDI1LCAweDNjMDI5MDAwLAotCTB4MzQ0MjAwMDEsIDB4M2MwNDA4MDAsIDB4OGM4MzAwODAsIDB4OGY0NTAxMDAsIDB4M2MwNjgwMDAsIDB4MjQ2MzAwMDEsCi0JMHgwMGEyMTAyNSwgMHhhYzgzMDA4MCwgMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwgMHgwMDQ2MTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweDM0NDIwMDA0LCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LAotCTB4MzQ2MzAwMDEsIDB4MDBhMzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDBhMDIwMjEsCi0JMHgwZTAwMDQ3MCwgMHgyNDA1MDM4YSwgMHgwYTAwMDY1YiwgMHg5NmEyMDAwOCwgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwKLQkweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNDUwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LAotCTB4OTZhMjAwMDgsIDB4OGZiZjAwNDQsIDB4OGZiZTAwNDAsIDB4OGZiNzAwM2MsIDB4OGZiNjAwMzgsIDB4OGZiNTAwMzQsCi0JMHg4ZmI0MDAzMCwgMHg4ZmIzMDAyYywgMHg4ZmIyMDAyOCwgMHg4ZmIxMDAyNCwgMHg4ZmIwMDAyMCwgMHgwMDAyMTA0MiwKLQkweDMwNDIwMDAxLCAweDAzZTAwMDA4LCAweDI3YmQwMDQ4LCAweDI3YmRmZmUwLCAweGFmYmYwMDE4LCAweDk3NDIwMTA4LAotCTB4MjQwMzAwMTksIDB4MzA0NDAwZmYsIDB4MTA4MzAwNjUsIDB4Mjg4MjAwMWEsIDB4MTA0MDAwMWEsIDB4Mjg4MjAwMGEsCi0JMHgxMDQwMDAwZiwgMHgyODgyMDAwOCwgMHgxMDQwMDA0MCwgMHgyNDAyMDAwMSwgMHgxMDgyMDAzYSwgMHgyODgyMDAwMiwKLQkweDUwNDAwMDA1LCAweDI0MDIwMDA2LCAweDEwODAwMDMyLCAweDNjMDI2MDAwLCAweDBhMDAwNmZiLCAweDAwMDAwMDAwLAotCTB4MTA4MjAwM2QsIDB4MDAwMDAwMDAsIDB4MGEwMDA2ZmIsIDB4MDAwMDAwMDAsIDB4MjQwMjAwMGIsIDB4MTA4MjAwNDQsCi0JMHgyODgyMDAwYiwgMHgxNDQwMDA0YiwgMHgyNDAyMDAwZSwgMHgxMDgyMDA0NSwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmYiwKLQkweDAwMDAwMDAwLCAweDI0MDIwMDIwLCAweDEwODIwMDYyLCAweDI4ODIwMDIxLCAweDEwNDAwMDBlLCAweDI0MDIwMDFjLAotCTB4MTA4MjAwNGMsIDB4Mjg4MjAwMWQsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMWIsIDB4MTA4MjAwNDMsIDB4MDAwMDAwMDAsCi0JMHgwYTAwMDZmYiwgMHgwMDAwMDAwMCwgMHgyNDAyMDAxZiwgMHgxMDgyMDA1MCwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmYiwKLQkweDAwMDAwMDAwLCAweDI0MDIwMGMxLCAweDEwODIwMDQyLCAweDI4ODIwMGMyLCAweDEwNDAwMDA1LCAweDI0MDIwMDgwLAotCTB4MTA4MjAwMjEsIDB4MDAwMDAwMDAsIDB4MGEwMDA2ZmIsIDB4MDAwMDAwMDAsIDB4MjQwMjAwYzIsIDB4MTA4MjAwM2QsCi0JMHgyNDAyMDBjOSwgMHg1MDgyMDA0OSwgMHhhZmEwMDAxMCwgMHgwYTAwMDZmYiwgMHgwMDAwMDAwMCwgMHgwZTAwMTE2MywKLQkweGFjNDAwODA4LCAweDBhMDAwNmZkLCAweDhmYmYwMDE4LCAweDNjMDI2MDAwLCAweDhjNDQ0NDQ4LCAweDNjMDMwODAwLAotCTB4YWM2NDAwNjQsIDB4MGUwMDExNjMsIDB4MDAwMDAwMDAsIDB4M2MwMjYwMDAsIDB4OGM0NDQ0NDgsIDB4M2MwMzA4MDAsCi0JMHgwYTAwMDZmYywgMHhhYzY0MDA2OCwgMHg4ZjQ0MDEwMCwgMHgwZTAwMDZmZiwgMHgwMDAwMDAwMCwgMHgzYzAyNjAwMCwKLQkweDhjNDQ0NDQ4LCAweDNjMDMwODAwLCAweDBhMDAwNmZjLCAweGFjNjQwMDZjLCAweDBlMDAxMTkxLCAweDAwMDAwMDAwLAotCTB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsIDB4OGY0NDAxMDAsIDB4MGUwMDExYmIsIDB4MDAwMDAwMDAsIDB4MGEwMDA2ZmQsCi0JMHg4ZmJmMDAxOCwgMHgwZTAwMTIwMiwgMHgwMDAwMDAwMCwgMHgwYTAwMDZmZCwgMHg4ZmJmMDAxOCwgMHgwMDAwMDAwZCwKLQkweDBhMDAwNmZkLCAweDhmYmYwMDE4LCAweDBlMDAwODI2LCAweDAwMDAwMDAwLCAweDBhMDAwNmZkLCAweDhmYmYwMDE4LAotCTB4OGY0NDAxMDAsIDB4MGUwMDEyNjQsIDB4MDAwMDAwMDAsIDB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsIDB4MGUwMDEzNGUsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMDZmZCwgMHg4ZmJmMDAxOCwgMHgwZTAwMDg3YywgMHgyNzQ0MDEwMCwgMHgwYTAwMDZmZCwKLQkweDhmYmYwMDE4LCAweDhmNjQwMDQwLCAweDBlMDAwZmFlLCAweDAwMDAwMDAwLCAweDBhMDAwNmZkLCAweDhmYmYwMDE4LAotCTB4OGY0NDAxMDAsIDB4MGUwMDEwNTksIDB4MDAwMDAwMDAsIDB4MGEwMDA2ZmQsIDB4OGZiZjAwMTgsIDB4MGUwMDE0MTcsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMDZmZCwgMHg4ZmJmMDAxOCwgMHhhZmEwMDAxNCwgMHg4ZjQ0MDEwMCwgMHg4ZjQ1MDExOCwKLQkweDhmNDYwMTFjLCAweDBlMDAxNDM5LCAweDhmNDcwMTIwLCAweDBhMDAwNmZkLCAweDhmYmYwMDE4LCAweDAwMDAwMDBkLAotCTB4OGZiZjAwMTgsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTAsIDB4OTc0MjAxMGMsCi0JMHgxNDQwMDA1ZSwgMHgwMDgwMzgyMSwgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwgMHgwMGUyMTAyNSwgMHhhZjQyMDAyMCwKLQkweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDIzLAotCTB4MzA0MjAwMTAsIDB4MTQ0MDAwMjYsIDB4M2MwMzA4MDAsIDB4OGY2MzAwNzQsIDB4M2MwMjdmZmYsIDB4MzQ0MmZmZmYsCi0JMHgwMDYyMTgyNCwgMHhhZjYzMDA3NCwgMHg5MzYyMDAwNSwgMHgzNDQyMDAwMSwgMHhhMzYyMDAwNSwgMHg4ZjYzMDA0YywKLQkweDhmNjIwMDU0LCAweDEwNjIwMDIxLCAweDI0MDQwMDAxLCAweDk3NjIwMDZhLCAweDAwMDIyODgwLCAweDUwYTAwMDAxLAotCTB4MjQwNTAwMDEsIDB4OTc2MzAwNjgsIDB4OTM2NDAwODEsIDB4M2MwMjA4MDAsIDB4OGM0NjAwNGMsIDB4MDA2NTI4MjEsCi0JMHgwMDg1MjgwNCwgMHgwMGM1MTAyYiwgMHg1NDQwMDAwMSwgMHgwMGEwMzAyMSwgMHgzYzAyMDgwMCwgMHg4YzQ0MDA1MCwKLQkweDAwYzQxODJiLCAweDU0NjAwMDAxLCAweDAwYzAyMDIxLCAweDhmNDIwMDc0LCAweDI0MDNmZmZlLCAweDAwODMyODI0LAotCTB4MDBhMjEwMjEsIDB4YWY2MjAwMGMsIDB4MGEwMDA3M2QsIDB4MjQwNDAwMDEsIDB4OGM2MjAwYTgsIDB4MDAwMDIwMjEsCi0JMHgyNDQyMDAwMSwgMHhhYzYyMDBhOCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDQ0ZCwgMHgzYzAyODAwMCwKLQkweDM0NDIwMDAxLCAweDAwZTIxMDI1LCAweGFmNDIwMDIwLCAweDEwODAwMDFmLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4MDBlMjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwKLQkweDAwZTMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAwZTAyMDIxLCAweDBlMDAwNDcwLAotCTB4MjQwNTA0NTUsIDB4MGEwMDA3NjEsIDB4MDAwMDAwMDAsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjQ3MDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHgwZTAwMTE2MywKLQkweDAwMDAwMDAwLCAweDhmYmYwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDI3YmRmZmQ4LCAweGFmYmYwMDI0LAotCTB4YWZiNDAwMjAsIDB4YWZiMzAwMWMsIDB4YWZiMjAwMTgsIDB4YWZiMTAwMTQsIDB4YWZiMDAwMTAsIDB4OTM2MzAwMDUsCi0JMHgwMDgwOTgyMSwgMHgyNDAyMDAzMCwgMHgzMDYzMDAzMCwgMHgxNDYyMDBhYywgMHgwMGEwYTAyMSwgMHgzYzAyMDgwMCwKLQkweDhjNDMwMDIwLCAweDEwNjAwMGE2LCAweDAwMDAwMDAwLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODMwMDE4LAotCTB4YWM3MzAwMDAsIDB4OTM2MjAwYzQsIDB4MzA0MjAwMDIsIDB4MTA0MDAwMDQsIDB4MjQwMjAwMDEsIDB4OGY4MzAwMTgsCi0JMHgwYTAwMDc4NCwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAxOCwgMHgyNDAyMDAwMywgMHhhYzYyMDAwNCwgMHg4ZjYyMDBkYywKLQkweDhmNjMwMDQwLCAweDAwNDMxMDIzLCAweDE4NDAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLAotCTB4MjQwMDA1MDksIDB4OGY4NDAwMTgsIDB4OGY2MjAwZGMsIDB4YWM4MjAwMDgsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMGMsCi0JMHg4ZjgyMDAxOCwgMHhhYzQwMDAxMCwgMHg4ZjgzMDAxOCwgMHg4ZjYyMDA0YywgMHgzYzEwMDgwMCwgMHhhYzYyMDAxNCwKLQkweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI2MTI1OGMwLCAweDAwMDAyMDIxLCAweGFjYTMwMDE4LAotCTB4OTY0MjAwMGUsIDB4OGY4NTAwMTgsIDB4M2MwMzQwMTAsIDB4MDA0MzEwMjUsIDB4MGUwMDE0Y2MsIDB4YWNhMjAwMWMsCi0JMHg4ZjgzMDAxOCwgMHhhYzczMDAwMCwgMHg5MzYyMDAzZSwgMHg5MzYzMDAzZiwgMHg4Zjg0MDAxOCwgMHgwMDAyMTIwMCwKLQkweDAwNjIxODI1LCAweGFjODMwMDA0LCAweDkzNjIwMDgxLCAweDkzNjMwMDgyLCAweDhmODQwMDE4LCAweDAwMDIxNjAwLAotCTB4MDAwMzFjMDAsIDB4MDA0MzEwMjUsIDB4YWM4MjAwMDgsIDB4OGY4MzAwMTgsIDB4OGY2MjAwNDAsIDB4YWM2MjAwMGMsCi0JMHg4Zjg0MDAxOCwgMHg4ZjYyMDA0OCwgMHhhYzgyMDAxMCwgMHg4ZjcxMDA0YywgMHg4ZjgyMDAxOCwgMHhhYzUxMDAxNCwKLQkweDhmNjIwMDUwLCAweDhmODUwMDE4LCAweDAwNDAxODIxLCAweDAyMjIxMDIzLCAweDVjNDAwMDAxLCAweDAyMjAxODIxLAotCTB4MDAwMDIwMjEsIDB4YWNhMzAwMTgsIDB4OTY0MjAwMGUsIDB4OGY4NTAwMTgsIDB4M2MwM2MwMGIsIDB4MDA0MzEwMjUsCi0JMHgwZTAwMTRjYywgMHhhY2EyMDAxYywgMHg4ZjYyMDA1NCwgMHg4Zjg0MDAxOCwgMHgwMDQwMTgyMSwgMHgwMjIyMTAyMywKLQkweDVjNDAwMDAxLCAweDAyMjAxODIxLCAweGFjODMwMDAwLCAweDhmODQwMDE4LCAweDhmNjMwMDU4LCAweGFjODMwMDA0LAotCTB4OTM2MjAwMjMsIDB4MzA0MjAwMTAsIDB4MTA0MDAwMDQsIDB4MDAwMDAwMDAsIDB4OGY4MzAwMTgsIDB4MGEwMDA3ZGQsCi0JMHg4ZjYyMDE0OCwgMHg4ZjgzMDAxOCwgMHg4ZjYyMDA1YywgMHhhYzYyMDAwOCwgMHg4ZjgzMDAxOCwgMHg4ZjYyMDA2MCwKLQkweGFjNjIwMDBjLCAweDhmODQwMDE4LCAweDhmNjIwMDY0LCAweGFjODIwMDEwLCAweDk3NjMwMDY4LCAweDk3NjIwMDZhLAotCTB4OGY4NDAwMTgsIDB4MDAwMzFjMDAsIDB4MDA0MzEwMjUsIDB4YWM4MjAwMTQsIDB4OGY4NTAwMTgsIDB4MDAwMDIwMjEsCi0JMHgyNDAyZmZmZiwgMHgyNjAzNThjMCwgMHhhY2EyMDAxOCwgMHg5NDYyMDAwZSwgMHg4Zjg1MDAxOCwgMHgzYzAzYzAwYywKLQkweDAwNDMxMDI1LCAweDBlMDAxNGNjLCAweGFjYTIwMDFjLCAweDhmODQwMDE4LCAweDhmNjMwMDE4LCAweGFjODMwMDAwLAotCTB4OTM2MjAwYzQsIDB4MzA0MjAwMDIsIDB4MTA0MDAwMDYsIDB4MDAwMDAwMDAsIDB4OTc2MjAwYzgsIDB4OGY4MzAwMTgsCi0JMHgzMDQyZmZmZiwgMHgwYTAwMDgwMywgMHhhYzYyMDAwNCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwNCwgMHg4ZjgzMDAxOCwKLQkweDhmNjIwMDZjLCAweGFjNjIwMDA4LCAweDhmODQwMDE4LCAweDhmNjIwMGRjLCAweGFjODIwMDBjLCAweDhmODMwMDE4LAotCTB4YWM2MDAwMTAsIDB4OTM2MjAwMDUsIDB4OGY4MzAwMTgsIDB4MDAwMjE2MDAsIDB4MDA1NDEwMjUsIDB4YWM2MjAwMTQsCi0JMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgyNjAyNThjMCwgMHhhY2EzMDAxOCwKLQkweDk0NDMwMDBlLCAweDhmODUwMDE4LCAweDNjMDI0MDBkLCAweDAwNjIxODI1LCAweDBlMDAxNGNjLCAweGFjYTMwMDFjLAotCTB4MGUwMDEyMmUsIDB4MDI2MDIwMjEsIDB4OGZiZjAwMjQsIDB4OGZiNDAwMjAsIDB4OGZiMzAwMWMsIDB4OGZiMjAwMTgsCi0JMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgyN2JkZmZlMCwgMHhhZmIwMDAxMCwKLQkweDI3NTAwMTAwLCAweGFmYmYwMDE4LCAweGFmYjEwMDE0LCAweDk2MDMwMDBjLCAweDI0MDIwMGMxLCAweDU0NjIwMDI0LAotCTB4OGUwNDAwMDAsIDB4M2MwMjkwMDAsIDB4OGY0NTAxMDAsIDB4MzQ0MjAwMDEsIDB4M2MwMzgwMDAsIDB4MDBhMjEwMjUsCi0JMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwKLQkweDNjMDM4MDAwLCAweDM0NDIwMDA0LCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLCAweDAwYTMxODI1LAotCTB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDBhMDIwMjEsIDB4MGUwMDA0NzAsIDB4MjQwNTA1YjIsCi0JMHgwYTAwMDg3OCwgMHg4ZmJmMDAxOCwgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwKLQkweDNjMDMxMDAwLCAweGFmNDUwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDBhMDAwODc4LCAweDhmYmYwMDE4LAotCTB4OGY2NTAwNGMsIDB4MjQwNjAwMDEsIDB4MGUwMDEyYTMsIDB4MjQwNzA1YmUsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsCi0JMHg5NjExMDAwYywgMHgxMDYwMDAxZCwgMHg4ZTEwMDAwMCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwKLQkweGFjNTAwMDAwLCAweDhmODQwMDE4LCAweDAwMTExNDAwLCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LAotCTB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsIDB4OGY4NDAwMTgsIDB4MjQwMjA1YzEsCi0JMHhhYzgyMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwKLQkweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LCAweDNjMDI0MDE5LCAweDAwNjIxODI1LCAweDBlMDAxNGNjLAotCTB4YWNhMzAwMWMsIDB4OGZiZjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsCi0JMHgyN2JkZmZiMCwgMHhhZmI1MDAzYywgMHgwMDAwYTgyMSwgMHhhZmJlMDA0OCwgMHgwMDAwZjAyMSwgMHhhZmI3MDA0NCwKLQkweDAwMDBiODIxLCAweGFmYjMwMDM0LCAweDAwMDA5ODIxLCAweGFmYjYwMDQwLCAweDAwODBiMDIxLCAweGFmYmYwMDRjLAotCTB4YWZiNDAwMzgsIDB4YWZiMjAwMzAsIDB4YWZiMTAwMmMsIDB4YWZiMDAwMjgsIDB4YWZhMDAwMTAsIDB4OGY2MjAwNDAsCi0JMHg4ZWMzMDAxNCwgMHg5NmQxMDAwYywgMHgwMDQzMTAyMywgMHgwNDQxMDAyNSwgMHg4ZWQ0MDAwMCwgMHgzMjIyMDQwMSwKLQkweDEwNDAwMzBjLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLAotCTB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsCi0JMHgzNDQyMDAwNCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwgMHgwMjgzMTgyNSwgMHhhZjQzMDAyMCwKLQkweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAyODAyMDIxLCAweDBlMDAwNDcwLCAweDI0MDUwNjY0LCAweDBhMDAwYmEyLAotCTB4OGZiZjAwNGMsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsCi0JMHhhZjU0MDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHgwYTAwMGJhMiwgMHg4ZmJmMDA0YywgMHgzMjIyMDAxMCwKLQkweDEwNDAwMDZiLCAweDAwMDAzMDIxLCAweDkzNjIwMDNmLCAweDkyYzYwMDBmLCAweDMwNDUwMGZmLCAweDI0YzNmZmY4LAotCTB4MmM2MjAwMGYsIDB4MTA0MDAwNTcsIDB4M2MwMjA4MDAsIDB4MjQ0MjU3YzAsIDB4MDAwMzE4ODAsIDB4MDA2MjE4MjEsCi0JMHg4YzY0MDAwMCwgMHgwMDgwMDAwOCwgMHgwMDAwMDAwMCwgMHgzOGEyMDAxMiwgMHgwYTAwMDkyNCwgMHgwMDAyYTgyYiwKLQkweDI0MDIwMDBlLCAweDE0YTIwMDA0LCAweDI0MDIwMDBjLCAweDI0MTUwMDAxLCAweDBhMDAwOTI0LCAweDI0MDYwMDEwLAotCTB4MTBhMjAwNDksIDB4MzhhMzAwMTAsIDB4MmM2MzAwMDEsIDB4MzhhMjAwMTYsIDB4MmM0MjAwMDEsIDB4MDA2MjE4MjUsCi0JMHgxNDYwMDA0ZCwgMHgwMDAwYTgyMSwgMHgyNDAyMDAxNCwgMHgxMGEyMDA0YSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwKLQkweDAwMDAwMDAwLCAweDI0MDAwNjljLCAweDBhMDAwOTI0LCAweDAwMDBhODIxLCAweDI0MDIwMDE2LCAweDE0YTIwMDA1LAotCTB4MjQwMjAwMGMsIDB4MjQxNTAwMDEsIDB4MjQwNjAwMTAsIDB4MGEwMDA5MjQsIDB4MzIzMWZmZmQsIDB4MTBhMjAwMzIsCi0JMHgzOGEzMDAxMCwgMHgyYzYzMDAwMSwgMHgzOGEyMDAwZSwgMHgyYzQyMDAwMSwgMHgwMDYyMTgyNSwgMHgxNDYwMDAzNiwKLQkweDAwMDBhODIxLCAweDI0MDIwMDE0LCAweDE0YTIwMDAzLCAweDI0MTUwMDAxLCAweDBhMDAwOTI0LCAweDI0MDYwMDEyLAotCTB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDA2YmMsIDB4MGEwMDA5MjQsIDB4MDAwMGE4MjEsIDB4MjQwMjAwMGUsCi0JMHgxNGEyMDAwNCwgMHgyNDAyMDAxNiwgMHgyNDE1MDAwMSwgMHgwYTAwMDkyNCwgMHgzMjMxZmZmYiwgMHgxNGEyMDAwNCwKLQkweDI0MDIwMDE0LCAweDI0MTUwMDAxLCAweDBhMDAwOTI0LCAweDMyMzFmZmZkLCAweDU0YTIwMDEzLCAweDkyYzIwMDBlLAotCTB4MjQxNTAwMDEsIDB4MjQwNjAwMTIsIDB4MGEwMDA5MjQsIDB4MzIzMWZmZmQsIDB4MjQwMjAwMGMsIDB4NTRhMjAwMGMsCi0JMHg5MmMyMDAwZSwgMHg5MmMzMDAwZSwgMHgyNDAyMDAwYSwgMHgxMDYyMDAwNSwgMHgyNDE1MDAwMSwgMHgwMDAwMDAwZCwKLQkweDAwMDAwMDAwLCAweDI0MDAwNmU4LCAweDI0MTUwMDAxLCAweDBhMDAwOTI0LCAweDI0MDYwMDE0LCAweDkyYzIwMDBlLAotCTB4MTRhMjAwMDMsIDB4MDAwMDAwMDAsIDB4MGEwMDA5MjQsIDB4MjQxNTAwMDEsIDB4MTBhNmZmYzEsIDB4MjQwMjAwMTIsCi0JMHgxMGEyMDAwNSwgMHgwMDAwYTgyMSwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDcwNCwgMHgwMDAwYTgyMSwKLQkweDEyYTAwMDIyLCAweDMyMjIwMDA0LCAweDEwNDAwMDAyLCAweDI0MDIwMDAxLCAweGFmYTIwMDEwLCAweDMyMjMwMTAyLAotCTB4MjQwMjAwMDIsIDB4MTQ2MjAwMGYsIDB4MDAwMDAwMDAsIDB4OTJjMjAwMGEsIDB4MzA0MjAwMjAsIDB4MTQ0MDAwMGIsCi0JMHgwMDAwMDAwMCwgMHg4ZjYzMDA0OCwgMHg4ZjYyMDA0MCwgMHgxNDYyMDAwNCwgMHgwMDAwMDAwMCwgMHg4ZjYyMDA0OCwKLQkweDI0NDIwMDAxLCAweGFmNjIwMDQ4LCAweDhmNjIwMDQwLCAweDI0NDIwMDAxLCAweGFmNjIwMDQwLCAweGEzNjYwMDNmLAotCTB4MzhjMzAwMTIsIDB4MmM2MzAwMDEsIDB4MzhjMjAwMTAsIDB4MmM0MjAwMDEsIDB4MDA2MjE4MjUsIDB4MTA2MDAwMDUsCi0JMHgzYzAzMDgwMCwgMHg4YzYyMDA3NCwgMHgyNDQyMDAwMSwgMHgwZTAwMTQwZCwgMHhhYzYyMDA3NCwgMHgzMjIyMDA0MCwKLQkweDMyMjMwMDIwLCAweGFmYTMwMDIwLCAweDMyMjMwMDgwLCAweGFmYTMwMDI0LCAweDMyMjMwMDAxLCAweGFmYTMwMDE4LAotCTB4MzIyMzAwMDgsIDB4YWZhMzAwMWMsIDB4MzIyMzAxMDAsIDB4MTA0MDAwYzQsIDB4YWZhMzAwMTQsIDB4OGVjNjAwMTAsCi0JMHg4ZjYzMDA1NCwgMHgyNGMyZmZmZiwgMHgwMDQzMTAyMywgMHgxODQwMDAwNiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwKLQkweDAwMDAwMDAwLCAweDI0MDAwMTVjLCAweDBhMDAwOTg5LCAweDAwMDA5MDIxLCAweDhmNjIwMDRjLCAweDAwYzIxMDIzLAotCTB4MTg0MDAwMjgsIDB4MDAwMDkwMjEsIDB4OTM2NTAxMjAsIDB4OTM2NDAxMjEsIDB4M2MwMzA4MDAsIDB4OGM2MjAwOGMsCi0JMHgzMDg0MDBmZiwgMHgyNDQyMDAwMSwgMHgzMGE1MDBmZiwgMHgwMDgwNDAyMSwgMHgxNDg1MDAwYiwgMHhhYzYyMDA4YywKLQkweDNjMDQwODAwLCAweDhjODMwMDkwLCAweDI0NjMwMDAxLCAweGFjODMwMDkwLCAweDkzNjIwMTIyLCAweDMwNDIwMDAxLAotCTB4MDAwMjEwMjMsIDB4MzA0MjAwMDUsIDB4MGEwMDA5ODksIDB4MzQ1MjAwMDQsIDB4Mjc2NzAxMDAsIDB4MDAwNDEwODAsCi0JMHgwMGUyMTAyMSwgMHg4YzQzMDAwMCwgMHgwMGMzMTgyMywgMHgwNDYwMDAwNCwgMHgyNDgyMDAwMSwgMHgzMDQ0MDAwNywKLQkweDE0ODVmZmY5LCAweDAwMDQxMDgwLCAweDEwODgwMDA3LCAweDNjMDMwODAwLCAweGEzNjQwMTIxLCAweDhjNjIwMDk0LAotCTB4MjQxMjAwMDUsIDB4MjQ0MjAwMDEsIDB4MGEwMDA5ODksIDB4YWM2MjAwOTQsIDB4MjQxMjAwMDQsIDB4MzI0MjAwMDEsCi0JMHgxMDQwMDAyMSwgMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwgMHg4ZWQwMDAwMCwgMHgxMDYwMDAxYywgMHg4ZWQzMDAxMCwKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTAwMDAwLCAweDhmODQwMDE4LCAweDI0MDIwMDAxLAotCTB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzUzMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwKLQkweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LCAweDNjMDI0MDEwLAotCTB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4MjQxMzAwMDEsIDB4MzI0MjAwMDQsIDB4MTA0MDAwNjgsCi0JMHgwMDAwMzgyMSwgMHgzYzAyOTAwMCwgMHg4ZWM2MDAxMCwgMHgzNDQyMDAwMSwgMHgzYzAzODAwMCwgMHgwMjgyMTAyNSwKLQkweGEzNjAwMDdjLCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLAotCTB4OTM2MjAwMjMsIDB4MzA0MjAwODAsIDB4MTA0MDAwMTEsIDB4MDAwMDAwMDAsIDB4OGY2NTAwNWMsIDB4OGY2MzAwNGMsCi0JMHg5NzY0MDAzYywgMHg4ZjYyMDA2NCwgMHgwMGEzMjgyMywgMHgwMDg1MjgyMSwgMHgwMGEyMTAyYiwgMHg1NDQwMDAwNiwKLQkweDNjMDIzZmZmLCAweDkzNjIwMDIzLCAweDMwNDIwMDdmLCAweGEzNjIwMDIzLCAweGFmNjYwMDY0LCAweDNjMDIzZmZmLAotCTB4MGEwMDA5ZGEsIDB4MzQ0MmZmZmYsIDB4OGY2MjAwNWMsIDB4MDBjMjEwMjMsIDB4MDQ0MDAwMTEsIDB4MDAwMDAwMDAsCi0JMHg4ZjY1MDA1YywgMHg4ZjYzMDA2NCwgMHg5NzY0MDAzYywgMHgzYzAyM2ZmZiwgMHgzNDQyZmZmZiwgMHhhZjY2MDA2NCwKLQkweDAwYTMyODIzLCAweDAwODUyODIxLCAweDAwNDUxMDJiLCAweDEwNDAwMDA0LCAweDAwYzUxMDIxLCAweDNjMDUzZmZmLAotCTB4MzRhNWZmZmYsIDB4MDBjNTEwMjEsIDB4YWY2MjAwNWMsIDB4MjQwNzAwMDEsIDB4YWY2NjAwNGMsIDB4OGZhMjAwMTAsCi0JMHgxMDQwMDAwMywgMHgwMDAwMDAwMCwgMHhhZjY2MDA1MCwgMHhhZjY2MDA1NCwgMHg4ZjYyMDA1NCwgMHgxNGMyMDAwNSwKLQkweDAwMDAwMDAwLCAweDkzNjIwMDIzLCAweDMwNDIwMDQwLCAweDEwNDAwMDE3LCAweDI0MDIwMDAxLCAweDk3NjIwMDZhLAotCTB4MDAwMjI4ODAsIDB4NTBhMDAwMDEsIDB4MjQwNTAwMDEsIDB4OTc2MzAwNjgsIDB4OTM2NDAwODEsIDB4M2MwMjA4MDAsCi0JMHg4YzQ2MDA0YywgMHgwMDY1MjgyMSwgMHgwMDg1MjgwNCwgMHgwMGM1MTAyYiwgMHg1NDQwMDAwMSwgMHgwMGEwMzAyMSwKLQkweDNjMDIwODAwLCAweDhjNDQwMDUwLCAweDAwYzQxODJiLCAweDU0NjAwMDAxLCAweDAwYzAyMDIxLCAweDhmNDIwMDc0LAotCTB4MjQwM2ZmZmUsIDB4MDA4MzI4MjQsIDB4MDBhMjEwMjEsIDB4YWY2MjAwMGMsIDB4OTM2MjAwODIsIDB4MzA0MjAwODAsCi0JMHg1MDQwMDAwMSwgMHhhMzYwMDA4MSwgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHgwMjgyMTAyNSwgMHhhZjQyMDAyMCwKLQkweDkzNjMwMDdlLCAweDkzNjIwMDdhLCAweDEwNjIwMDA1LCAweDAwZTBiODIxLCAweDBlMDAxM2M0LCAweDAwMDAwMDAwLAotCTB4MDA0MDM4MjEsIDB4MDBlMGI4MjEsIDB4OGZhMzAwMjAsIDB4MTA2MDAwMDksIDB4OGZhMjAwMTAsIDB4OGVjMjAwMTgsCi0JMHhhZjYyMDAxOCwgMHg4ZWMzMDAxYywgMHhhZjYzMDAxYywgMHg4ZWMyMDAyMCwgMHgyNDE3MDAwMSwgMHhhZjYyMDA1OCwKLQkweDhmYTIwMDEwLCAweDEwNDAwMDU3LCAweDhmYTMwMDI0LCAweDkzNjIwMDIzLCAweDMwNDIwMDQwLCAweDEwNDAwMDUzLAotCTB4MDAwMDAwMDAsIDB4MTY2MDAwMjEsIDB4M2MxMjA4MDAsIDB4OGU0MjAwMjAsIDB4OGY3MDAwNGMsIDB4MTA0MDAwMWUsCi0JMHgyNDEzMDAwMSwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzU0MDAwMCwgMHg4Zjg0MDAxOCwKLQkweDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM1MDAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsCi0JMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwKLQkweDNjMDI0MDEwLCAweDAwNjIxODI1LCAweGFjYTMwMDFjLCAweDBlMDAxNGNjLCAweDI0MTMwMDAxLCAweDhlNDIwMDIwLAotCTB4MTA0MDAwMWMsIDB4OGVkMDAwMDAsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1MDAwMDAsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwNCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwOCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwYywKLQkweDhmODIwMDE4LCAweGFjNDAwMDEwLCAweDhmODMwMDE4LCAweDI0MDIwNzk4LCAweGFjNjIwMDE0LCAweDhmODUwMDE4LAotCTB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsCi0JMHg4Zjg1MDAxOCwgMHgzYzAyNDAxOSwgMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHgzYzAyOTAwMCwKLQkweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MjQwMjAwMDEsIDB4YWY2MjAwMGMsIDB4OTM2MzAwMjMsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMjgyMTAyNSwgMHgzMDYzMDBiZiwgMHhhMzYzMDAyMywgMHhhZjQyMDAyMCwgMHg4ZmEzMDAyNCwgMHgxMDYwMDAxMiwKLQkweDhmYTMwMDE4LCAweDkzNjIwMDdjLCAweDI0NDIwMDAxLCAweGEzNjIwMDdjLCAweDkzNjMwMDdlLCAweDkzNjIwMDdhLAotCTB4MTQ2MjAwMGIsIDB4OGZhMzAwMTgsIDB4OTM2MjAwN2MsIDB4M2MwMzA4MDAsIDB4OGM2NDAwMjQsIDB4MDA0NDEwMmIsCi0JMHgxNDQwMDAwNSwgMHg4ZmEzMDAxOCwgMHgwZTAwMTNjNCwgMHgwMDAwMDAwMCwgMHgwMmUyYjgyNSwgMHg4ZmEzMDAxOCwKLQkweDMwNjJmZmZmLCAweDEwNDAwMDAzLCAweDMyMjIwMjAwLCAweDBhMDAwYTk0LCAweDI0MWUwMDA0LCAweDEwNDAwMDAzLAotCTB4MDAwMDAwMDAsIDB4MjQxZTAwNDAsIDB4MjQxNzAwMDEsIDB4MTJhMDAwZDAsIDB4MzIyMjAwMDIsIDB4MTA0MDAwY2YsCi0JMHg4ZmEyMDAxYywgMHg5MmMyMDAwYSwgMHgzMDQyMDAwMiwgMHg1MDQwMDAzYiwgMHg5MmMyMDAwYSwgMHg5MzYyMDAyMywKLQkweDMwNDIwMDA4LCAweDU0NDAwMDM3LCAweDkyYzIwMDBhLCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDEwNjAwMDIzLAotCTB4M2MwMjkwMDAsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4NDAwMTgsIDB4OGVjMzAwMDAsIDB4YWM4MzAwMDAsCi0JMHg5MmMyMDAwYSwgMHg4ZjgzMDAxOCwgMHgwMDAyMTYwMCwgMHhhYzYyMDAwNCwgMHg4Zjg0MDAxOCwgMHg4ZjYyMDA0MCwKLQkweGFjODIwMDA4LCAweDhmODUwMDE4LCAweDhmNjMwMDRjLCAweGFjYTMwMDBjLCAweDkzNjIwMDNmLCAweDhmODQwMDE4LAotCTB4MzA0MjAwZmYsIDB4YWM4MjAwMTAsIDB4OGY4MzAwMTgsIDB4M2MwMjYwMDAsIDB4YWM2MDAwMTQsIDB4OGY4NTAwMTgsCi0JMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwKLQkweDNjMDI0MDFhLCAweDAwNjIxODI1LCAweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4MDI4MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg5MzYzMDAyMywgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHgwMjgyMTAyNSwgMHgzNDYzMDAwOCwKLQkweGEzNjMwMDIzLCAweGFmNDIwMDIwLCAweDkyYzIwMDBhLCAweDMwNDIwMDIwLCAweDEwNDAwMDhlLCAweDhmYTIwMDFjLAotCTB4OTM2MjAwMjMsIDB4MzA0MjAwMDEsIDB4MTQ0MDAwMzUsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MTA2MDAwMjMsCi0JMHgzYzAyOTAwMCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4Zjg0MDAxOCwgMHg4ZWMzMDAwMCwgMHhhYzgzMDAwMCwKLQkweDkyYzIwMDBhLCAweDhmODMwMDE4LCAweDAwMDIxNjAwLCAweGFjNjIwMDA0LCAweDhmODQwMDE4LCAweDhmNjIwMDQwLAotCTB4YWM4MjAwMDgsIDB4OGY4NTAwMTgsIDB4OGY2MzAwNGMsIDB4YWNhMzAwMGMsIDB4OTM2MjAwM2YsIDB4OGY4NDAwMTgsCi0JMHgzMDQyMDBmZiwgMHhhYzgyMDAxMCwgMHg4ZjgzMDAxOCwgMHgzYzAyNjAwMCwgMHhhYzYwMDAxNCwgMHg4Zjg1MDAxOCwKLQkweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LAotCTB4M2MwMjQwMWEsIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMjgyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDkzNjMwMDIzLCAweDNjMDI4MDAwLCAweDM0NDIwMDAxLCAweDAyODIxMDI1LCAweDM0NjMwMDAxLAotCTB4YTM2MzAwMjMsIDB4YWY0MjAwMjAsIDB4OTM2MjAwMjMsIDB4MzA0MjAwNDAsIDB4MTA0MDAwNTIsIDB4OGZhMjAwMWMsCi0JMHgxNjYwMDAyMCwgMHgzYzEyMDgwMCwgMHg4ZTQyMDAyMCwgMHg4ZjcwMDA0YywgMHgxMDQwMDAzYywgMHgzYzAyOTAwMCwKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTQwMDAwLCAweDhmODQwMDE4LCAweDI0MDIwMDAxLAotCTB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwKLQkweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LCAweDNjMDI0MDEwLAotCTB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4OGU0MjAwMjAsIDB4MTA0MDAwMWUsIDB4M2MwMjkwMDAsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzU0MDAwMCwgMHg4Zjg0MDAxOCwgMHgzYzAyMDA4ZCwKLQkweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LAotCTB4YWM2MDAwMTAsIDB4OGY4NDAwMTgsIDB4MjQwMjA3ZWUsIDB4YWM4MjAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsCi0JMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwKLQkweDNjMDI0MDE5LCAweDAwNjIxODI1LCAweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4MDI4MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg5MzYzMDAyMywgMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHgwMjgyMTAyNSwgMHgzMDYzMDBiZiwKLQkweGEzNjMwMDIzLCAweGFmNDIwMDIwLCAweDhmYTIwMDFjLCAweDEwNDAwMDBlLCAweDhmYTIwMDE0LCAweDkyYzIwMDBhLAotCTB4YTM2MjAwODIsIDB4NTdjMDAwMDUsIDB4MzdkZTAwMDgsIDB4OGZhMzAwMTQsIDB4MTA2MDAwMDQsIDB4MDAwMDAwMDAsCi0JMHgzN2RlMDAwOCwgMHgwYTAwMGI3NSwgMHgyNDE3MDAwMSwgMHgwZTAwMTJjZiwgMHgwMjgwMjAyMSwgMHg4ZmEyMDAxNCwKLQkweDEwNDAwMDAzLCAweDAwMDAwMDAwLCAweDM3ZGUwMDEwLCAweDI0MTcwMDAxLCAweDEyZTAwMDIwLCAweDNjMDI5MDAwLAotCTB4MzQ0MjAwMDEsIDB4MDI4MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHgwM2MyMTAyNSwgMHhhMzYyMDA3ZCwKLQkweDhmNjQwMDc0LCAweDM0NjMwMDAxLCAweDAyODMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLAotCTB4MDI4MDIwMjEsIDB4MGUwMDA0NzAsIDB4MjQwNTA4MmEsIDB4MGEwMDBiOWIsIDB4MDAwMDAwMDAsIDB4OGY0MjAxZjgsCi0JMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjU0MDFjMCwgMHhhMzQyMDFjNCwKLQkweGFmNDMwMWY4LCAweDkzNjMwMDNmLCAweDI0MDIwMDEyLCAweDE0NjIwMDA0LCAweDhmYmYwMDRjLCAweDBlMDAxNDBkLAotCTB4MDAwMDAwMDAsIDB4OGZiZjAwNGMsIDB4OGZiZTAwNDgsIDB4OGZiNzAwNDQsIDB4OGZiNjAwNDAsIDB4OGZiNTAwM2MsCi0JMHg4ZmI0MDAzOCwgMHg4ZmIzMDAzNCwgMHg4ZmIyMDAzMCwgMHg4ZmIxMDAyYywgMHg4ZmIwMDAyOCwgMHgwM2UwMDAwOCwKLQkweDI3YmQwMDUwLCAweDI3YmRmZmU4LCAweGFmYmYwMDE0LCAweGFmYjAwMDEwLCAweDhmNTAwMTgwLCAweDk3NDIwMTg0LAotCTB4MzA0MjAyMDAsIDB4MTQ0MDAwMTUsIDB4MDAwMDAwMDAsIDB4OGY0MzAxODgsIDB4M2MwMmZmMDAsIDB4MDA2MjE4MjQsCi0JMHgzYzAyMDIwMCwgMHgxMDYyMDAzMSwgMHgwMDQzMTAyYiwgMHgxNDQwMDAwNywgMHgzYzAyMDMwMCwgMHgxMDYwMDAwYiwKLQkweDNjMDIwMTAwLCAweDEwNjIwMDBkLCAweDAwMDAwMDAwLCAweDBhMDAwYzJjLCAweDAwMDAwMDAwLCAweDEwNjIwMDI3LAotCTB4M2MwMjA0MDAsIDB4MTA2MjAwM2UsIDB4MDIwMDIwMjEsIDB4MGEwMDBjMmMsIDB4MDAwMDAwMDAsIDB4MGUwMDBjMzEsCi0JMHgwMjAwMjAyMSwgMHgwYTAwMGMyZSwgMHg4ZmJmMDAxNCwgMHg5MzYyMDAwNSwgMHgzMDQyMDAyMCwgMHgxNDQwMDA1ZSwKLQkweDhmYmYwMDE0LCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAyMDIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLAotCTB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwMDUsIDB4M2MwMzgwMDAsCi0JMHgzNDYzMDAwMSwgMHgwMjAzMTgyNSwgMHgzNDQyMDAyMCwgMHhhMzYyMDAwNSwgMHhhZjQzMDAyMCwgMHg5MzYyMDAwNSwKLQkweDMwNDIwMDIwLCAweDE0NDAwMDAzLCAweDAyMDAyMDIxLCAweDAwMDAwMDBkLCAweDAyMDAyMDIxLCAweDBlMDAwNzY2LAotCTB4MjQwNTU4NTQsIDB4MGEwMDBjMmUsIDB4OGZiZjAwMTQsIDB4OTM2MjAwMDUsIDB4MzA0MjAwMDEsIDB4MTA0MDAwM2YsCi0JMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwgMHgwMjAyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDIzLCAweDM0NDIwMDA0LCAweGEzNjIwMDIzLAotCTB4OTM2MzAwMDUsIDB4M2MwNDgwMDAsIDB4M2MwMjA4MDAsIDB4MzA2MzAwZmUsIDB4YTM2MzAwMDUsIDB4OGM0MzAwMjAsCi0JMHgzNDg0MDAwMSwgMHgwMjA0MjAyNSwgMHgwYTAwMGMwYSwgMHhhZjQ0MDAyMCwgMHgwMDAwMjgyMSwgMHgwMDAwMzAyMSwKLQkweDBlMDAwZmIxLCAweDI0MDcwOGQ5LCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDEwNjAwMDIzLCAweDhmYmYwMDE0LAotCTB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1MDAwMDAsIDB4OTM2MzAwODIsIDB4OTM2MjAwM2YsCi0JMHg4Zjg0MDAxOCwgMHgwMDAzMWEwMCwgMHgwMDQzMTAyNSwgMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwKLQkweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LCAweGFjNjAwMDEwLCAweDhmODIwMDE4LCAweGFjNDAwMDE0LAotCTB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsIDB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsCi0JMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwgMHgzYzAyNDAwYSwgMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywKLQkweDBhMDAwYzJlLCAweDhmYmYwMDE0LCAweDAwMDAwMDBkLCAweDhmYmYwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LAotCTB4MjdiZDAwMTgsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTAsIDB4OGY0MjAxODgsIDB4MDA4MDMwMjEsIDB4OTM2NDAwMDAsCi0JMHgyNDAzMDAyMCwgMHgwMDAyMTQwMiwgMHgxMDgzMDAwOCwgMHgzMDQ1MDBmZiwgMHgzYzAzNjAxOCwgMHg4YzYyNTAwMCwKLQkweDM0NDIwNDAwLCAweGFjNjI1MDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwOTU1LCAweDkzNjMwMDNmLAotCTB4MjQwMjAwMTIsIDB4MTQ2MjAwMjMsIDB4M2MwMjkwMDAsIDB4MzQ0MjAwMDEsIDB4M2MwMzgwMDAsIDB4MDBjMjEwMjUsCi0JMHhhZjY1MDE3OCwgMHhhMzY1MDA3YSwgMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLAotCTB4MDBjMzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsIDB4M2MwMzgwMDAsIDB4MDBjMDIwMjEsIDB4MGUwMDA0NzAsCi0JMHgyNDA1MDk2MywgMHgwYTAwMGM3OSwgMHg4ZmJmMDAxMCwgMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNDYwMWMwLCAweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDBhMDAwYzc5LAotCTB4OGZiZjAwMTAsIDB4OTM2MjAwN2UsIDB4MTQ0NTAwMGUsIDB4MDAwMDAwMDAsIDB4OGY2MjAxNzgsIDB4MTA0NTAwMGIsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAwMCwgMHhhZjY1MDE3OCwgMHg4ZjY2MDE3OCwgMHg4ZjQ0MDE4MCwgMHg4ZjY1MDA0YywKLQkweDhjNDMwMDAwLCAweDAwNjBmODA5LCAweDMwYzYwMGZmLCAweDBhMDAwYzc5LCAweDhmYmYwMDEwLCAweGFmNjUwMTc4LAotCTB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTAsIDB4OTM2MzAwMDAsCi0JMHgyNDAyMDAyMCwgMHgxMDYyMDAwNSwgMHgwMDAwMDAwMCwgMHg5MzYzMDAwMCwgMHgyNDAyMDAzMCwgMHgxNDYyMDA0ZCwKLQkweDhmYmYwMDEwLCAweDkzNDIwMTQ4LCAweDI0NDRmZmZmLCAweDJjODMwMDA1LCAweDEwNjAwMDQ3LCAweDNjMDIwODAwLAotCTB4MjQ0MjU4MDAsIDB4MDAwNDE4ODAsIDB4MDA2MjE4MjEsIDB4OGM2NDAwMDAsIDB4MDA4MDAwMDgsIDB4MDAwMDAwMDAsCi0JMHg4ZjQzMDE0NCwgMHg4ZjYyMDAwYywgMHgxNDYyMDAwNiwgMHgyNDAyMDAwMSwgMHhhZjYyMDAwYywgMHgwZTAwMGQ1OSwKLQkweDAwMDAwMDAwLCAweDBhMDAwY2QxLCAweDhmYmYwMDEwLCAweDhmNjIwMDBjLCAweDBhMDAwY2NhLCAweDAwMDAwMDAwLAotCTB4OTc2MzAwMTAsIDB4OGY0MjAxNDQsIDB4MTQ0MzAwMDYsIDB4MjQwMjAwMDEsIDB4YTc2MjAwMTAsIDB4MGUwMDEzN2EsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMGNkMSwgMHg4ZmJmMDAxMCwgMHg5NzYyMDAxMCwgMHgwYTAwMGNjYSwgMHgwMDAwMDAwMCwKLQkweDk3NjMwMDEyLCAweDhmNDIwMTQ0LCAweDE0NDMwMDA2LCAweDI0MDIwMDAxLCAweGE3NjIwMDEyLCAweDBlMDAxMzk1LAotCTB4MDAwMDAwMDAsIDB4MGEwMDBjZDEsIDB4OGZiZjAwMTAsIDB4OTc2MjAwMTIsIDB4MGEwMDBjY2EsIDB4MDAwMDAwMDAsCi0JMHg5NzYzMDAxNCwgMHg4ZjQyMDE0NCwgMHgxNDQzMDAwNiwgMHgyNDAyMDAwMSwgMHhhNzYyMDAxNCwgMHgwZTAwMTNiYiwKLQkweDAwMDAwMDAwLCAweDBhMDAwY2QxLCAweDhmYmYwMDEwLCAweDk3NjIwMDE0LCAweDBhMDAwY2NhLCAweDAwMDAwMDAwLAotCTB4OTc2MzAwMTYsIDB4OGY0MjAxNDQsIDB4MTQ0MzAwMDYsIDB4MjQwMjAwMDEsIDB4YTc2MjAwMTYsIDB4MGUwMDEzYmUsCi0JMHgwMDAwMDAwMCwgMHgwYTAwMGNkMSwgMHg4ZmJmMDAxMCwgMHg5NzYyMDAxNiwgMHgxNDQwMDAwNiwgMHg4ZmJmMDAxMCwKLQkweDNjMDMwODAwLCAweDhjNjIwMDcwLCAweDI0NDIwMDAxLCAweGFjNjIwMDcwLCAweDhmYmYwMDEwLCAweDAzZTAwMDA4LAotCTB4MjdiZDAwMTgsIDB4MjdiZGZmZTAsIDB4M2MwMjkwMDAsIDB4YWZiZjAwMWMsIDB4YWZiMjAwMTgsIDB4YWZiMTAwMTQsCi0JMHhhZmIwMDAxMCwgMHg4ZjUwMDE0MCwgMHgzNDQyMDAwMSwgMHgzYzAzODAwMCwgMHgwMjAyMTAyNSwgMHhhZjQyMDAyMCwKLQkweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDEyLCAweDI0MDMwMDgwLCAweGEzNjIwMDNmLAotCTB4YTM2MzAwODIsIDB4OTM2MjAwMjMsIDB4MzA0MjAwNDAsIDB4MTA0MDAwMDcsIDB4MDAwMDg4MjEsIDB4OTM2MjAwMjMsCi0JMHgyNDExMDAwMSwgMHgzMDQyMDBiZiwgMHhhMzYyMDAyMywgMHgwYTAwMGNmMCwgMHgzYzAyODAwMCwgMHgzYzAyODAwMCwKLQkweDM0NDIwMDAxLCAweDNjMDM5MDAwLCAweDM0NjMwMDAxLCAweDNjMDQ4MDAwLCAweDAyMDIxMDI1LCAweDAyMDMxODI1LAotCTB4YWY0MjAwMjAsIDB4YWY0MzAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0NDEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsCi0JMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHgzNDQyMDAyMCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwKLQkweDAyMDMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAyMDAyMDIxLCAweDBlMDAwNDcwLAotCTB4MjQwNTBhNjMsIDB4MGEwMDBkMTMsIDB4MDAwMDAwMDAsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjUwMDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHgxMjIwMDAzZiwKLQkweDNjMTIwODAwLCAweDhlNDIwMDIwLCAweDhmNzEwMDRjLCAweDEwNDAwMDNjLCAweDhmYmYwMDFjLCAweDBlMDAxNDhlLAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWM1MDAwMDAsIDB4OGY4NDAwMTgsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwKLQkweDhmODIwMDE4LCAweGFjNTEwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLAotCTB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTAsIDB4MDA2MjE4MjUsCi0JMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg4ZTQyMDAyMCwgMHgxMDQwMDAxZSwgMHg4ZmJmMDAxYywgMHgwZTAwMTQ4ZSwKLQkweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTAwMDAwLCAweDhmODQwMDE4LCAweDNjMDIwMDhkLCAweGFjODIwMDA0LAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsCi0JMHg4Zjg0MDAxOCwgMHgyNDAyMGE2YSwgMHhhYzgyMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwKLQkweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LCAweDNjMDI0MDE5LAotCTB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4OGZiZjAwMWMsIDB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsCi0JMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxMCwgMHg5MzYyMDA4MSwKLQkweDNjMDMwODAwLCAweDhjNjQwMDQ4LCAweDAwNDQxMDJiLCAweDE0NDAwMDA1LCAweDAwMDAwMDAwLCAweDBlMDAwY2QzLAotCTB4MDAwMDAwMDAsIDB4MGEwMDBkYTQsIDB4OGZiZjAwMTAsIDB4OTM2MjAwODEsIDB4MjQ0MjAwMDEsIDB4MGUwMDEzYzQsCi0JMHhhMzYyMDA4MSwgMHg5NzYzMDA2YSwgMHgwMDAzMjg4MCwgMHgxNGEwMDAwMiwgMHgwMDQwMzgyMSwgMHgyNDA1MDAwMSwKLQkweDk3NjMwMDY4LCAweDkzNjQwMDgxLCAweDNjMDIwODAwLCAweDhjNDYwMDRjLCAweDAwNjUyODIxLCAweDAwODUyODA0LAotCTB4MDBjNTEwMmIsIDB4NTQ0MDAwMDEsIDB4MDBhMDMwMjEsIDB4M2MwMjA4MDAsIDB4OGM0NDAwNTAsIDB4MDBjNDE4MmIsCi0JMHg1NDYwMDAwMSwgMHgwMGMwMjAyMSwgMHg4ZjQyMDA3NCwgMHgyNDAzZmZmZSwgMHgwMDgzMjgyNCwgMHgwMGEyMTAyMSwKLQkweGFmNjIwMDBjLCAweDEwZTAwMDIxLCAweDNjMDI5MDAwLCAweDhmNDUwMTQwLCAweDM0NDIwMDAxLCAweDNjMDM4MDAwLAotCTB4MDBhMjEwMjUsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsCi0JMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHgzNDQyMDAwNCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwKLQkweDAwYTMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAwYTAyMDIxLCAweDBlMDAwNDcwLAotCTB4MjQwNTBhOTIsIDB4MGEwMDBkYTQsIDB4OGZiZjAwMTAsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjQ1MDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHg4ZmJmMDAxMCwKLQkweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDI3YmRmZmQ4LCAweGFmYjMwMDFjLCAweDI3NTMwMTAwLCAweGFmYmYwMDI0LAotCTB4YWZiNDAwMjAsIDB4YWZiMjAwMTgsIDB4YWZiMTAwMTQsIDB4YWZiMDAwMTAsIDB4OTY2MjAwMDgsIDB4M2MxNDA4MDAsCi0JMHg4ZjUyMDEwMCwgMHgzMDQyMDAwMSwgMHgxMDQwMDBkYSwgMHgwMDAwMDAwMCwgMHg4ZTcwMDAxOCwgMHg4ZjYzMDA1NCwKLQkweDI2MDJmZmZmLCAweDAwNDMxMDIzLCAweDE4NDAwMDA2LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLAotCTB4MjQwMDAxNWMsIDB4MGEwMDBkZWEsIDB4MDAwMDg4MjEsIDB4OGY2MjAwNGMsIDB4MDIwMjEwMjMsIDB4MTg0MDAwMjgsCi0JMHgwMDAwODgyMSwgMHg5MzY1MDEyMCwgMHg5MzY0MDEyMSwgMHgzYzAzMDgwMCwgMHg4YzYyMDA4YywgMHgzMDg0MDBmZiwKLQkweDI0NDIwMDAxLCAweDMwYTUwMGZmLCAweDAwODAzODIxLCAweDE0ODUwMDBiLCAweGFjNjIwMDhjLCAweDNjMDQwODAwLAotCTB4OGM4MzAwOTAsIDB4MjQ2MzAwMDEsIDB4YWM4MzAwOTAsIDB4OTM2MjAxMjIsIDB4MzA0MjAwMDEsIDB4MDAwMjEwMjMsCi0JMHgzMDQyMDAwNSwgMHgwYTAwMGRlYSwgMHgzNDUxMDAwNCwgMHgyNzY2MDEwMCwgMHgwMDA0MTA4MCwgMHgwMGMyMTAyMSwKLQkweDhjNDMwMDAwLCAweDAyMDMxODIzLCAweDA0NjAwMDA0LCAweDI0ODIwMDAxLCAweDMwNDQwMDA3LCAweDE0ODVmZmY5LAotCTB4MDAwNDEwODAsIDB4MTA4NzAwMDcsIDB4M2MwMzA4MDAsIDB4YTM2NDAxMjEsIDB4OGM2MjAwOTQsIDB4MjQxMTAwMDUsCi0JMHgyNDQyMDAwMSwgMHgwYTAwMGRlYSwgMHhhYzYyMDA5NCwgMHgyNDExMDAwNCwgMHgzMjIyMDAwMSwgMHgxMDQwMDAxZSwKLQkweDhlODIwMDIwLCAweDEwNDAwMDFkLCAweDMyMjIwMDA0LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LAotCTB4YWM1MjAwMDAsIDB4OGY4NDAwMTgsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsCi0JMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAxNCwKLQkweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLCAweDNjMDIwODAwLCAweGFjYTMwMDE4LAotCTB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTAsIDB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsCi0JMHgzMjIyMDAwNCwgMHgxMDQwMDA4MSwgMHgwMDAwMzgyMSwgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwgMHgzYzAzODAwMCwKLQkweDAyNDIxMDI1LCAweGEzNjAwMDdjLCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OTM2MjAwMjMsIDB4MzA0MjAwODAsIDB4MTA0MDAwMTEsIDB4MDAwMDAwMDAsIDB4OGY2NTAwNWMsCi0JMHg4ZjYzMDA0YywgMHg5NzY0MDAzYywgMHg4ZjYyMDA2NCwgMHgwMGEzMjgyMywgMHgwMDg1MjgyMSwgMHgwMGEyMTAyYiwKLQkweDU0NDAwMDA2LCAweDNjMDIzZmZmLCAweDkzNjIwMDIzLCAweDMwNDIwMDdmLCAweGEzNjIwMDIzLCAweGFmNzAwMDY0LAotCTB4M2MwMjNmZmYsIDB4MGEwMDBlMzcsIDB4MzQ0MmZmZmYsIDB4OGY2MjAwNWMsIDB4MDIwMjEwMjMsIDB4MDQ0MDAwMTEsCi0JMHgwMDAwMDAwMCwgMHg4ZjY1MDA1YywgMHg4ZjYzMDA2NCwgMHg5NzY0MDAzYywgMHgzYzAyM2ZmZiwgMHgzNDQyZmZmZiwKLQkweGFmNzAwMDY0LCAweDAwYTMyODIzLCAweDAwODUyODIxLCAweDAwNDUxMDJiLCAweDEwNDAwMDA0LCAweDAyMDUxMDIxLAotCTB4M2MwNTNmZmYsIDB4MzRhNWZmZmYsIDB4MDIwNTEwMjEsIDB4YWY2MjAwNWMsIDB4MjQwNzAwMDEsIDB4YWY3MDAwNGMsCi0JMHg4ZjYyMDA1NCwgMHgxNjAyMDAwNSwgMHgwMDAwMDAwMCwgMHg5MzYyMDAyMywgMHgzMDQyMDA0MCwgMHgxMDQwMDAxNywKLQkweDI0MDIwMDAxLCAweDk3NjIwMDZhLCAweDAwMDIyODgwLCAweDUwYTAwMDAxLCAweDI0MDUwMDAxLCAweDk3NjMwMDY4LAotCTB4OTM2NDAwODEsIDB4M2MwMjA4MDAsIDB4OGM0NjAwNGMsIDB4MDA2NTI4MjEsIDB4MDA4NTI4MDQsIDB4MDBjNTEwMmIsCi0JMHg1NDQwMDAwMSwgMHgwMGEwMzAyMSwgMHgzYzAyMDgwMCwgMHg4YzQ0MDA1MCwgMHgwMGM0MTgyYiwgMHg1NDYwMDAwMSwKLQkweDAwYzAyMDIxLCAweDhmNDIwMDc0LCAweDI0MDNmZmZlLCAweDAwODMyODI0LCAweDAwYTIxMDIxLCAweGFmNjIwMDBjLAotCTB4OTM2MjAwODIsIDB4MzA0MjAwODAsIDB4NTA0MDAwMDEsIDB4YTM2MDAwODEsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsCi0JMHgwMjQyMTAyNSwgMHhhZjQyMDAyMCwgMHg5MzYzMDA3ZSwgMHg5MzYyMDA3YSwgMHgxMDYyMDAwNCwgMHgwMDAwMDAwMCwKLQkweDBlMDAxM2M0LCAweDAwMDAwMDAwLCAweDAwNDAzODIxLCAweDEwZTAwMDFmLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4MDI0MjEwMjUsIDB4YWY0MjAwMjAsIDB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHhhMzYyMDA3ZCwgMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwKLQkweDAyNDMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LCAweDNjMDM4MDAwLCAweDAyNDAyMDIxLCAweDBlMDAwNDcwLAotCTB4MjQwNTBiM2QsIDB4MGEwMDBlOGQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxZjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjUyMDFjMCwgMHhhMzQyMDFjNCwgMHhhZjQzMDFmOCwgMHg5MzQyMDEwYiwKLQkweDkzNDMwMTBiLCAweDhlODIwMDIwLCAweDI3NTAwMTAwLCAweDM4NjMwMDA2LCAweDEwNDAwMDI5LCAweDJjNzEwMDAxLAotCTB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4MzAwMTgsIDB4OGUwMjAwMDAsIDB4YWM2MjAwMDAsIDB4OGY4NDAwMTgsCi0JMHg5NjAyMDAwOCwgMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwgMHg4ZTAyMDAxNCwgMHhhYzYyMDAwOCwgMHg4Zjg1MDAxOCwKLQkweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweGFjYTMwMDBjLCAweDhmODQwMDE4LCAweDk2MDIwMDEyLCAweGFjODIwMDEwLAotCTB4OGY4NTAwMTgsIDB4OGUwMzAwMjAsIDB4YWNhMzAwMTQsIDB4OTYwMjAwMGMsIDB4OTYwMzAwMGUsIDB4OGY4NDAwMTgsCi0JMHgwMDAyMTQwMCwgMHgwMDQzMTAyNSwgMHhhYzgyMDAxOCwgMHgxMjIwMDAwNSwgMHgzYzAyMDgwMCwgMHg5NDQzNThjZSwKLQkweDhmODQwMDE4LCAweDBhMDAwZWI4LCAweDNjMDI0MDEzLCAweDk0NDM1OGNlLCAweDhmODQwMDE4LCAweDNjMDI0MDE0LAotCTB4MDA2MjE4MjUsIDB4YWM4MzAwMWMsIDB4MGUwMDE0Y2MsIDB4MjQwNDAwMDEsIDB4OGU3MDAwMTQsIDB4OGY2MjAwNDAsCi0JMHgxNDUwMDAwMywgMHgwMDUwMTAyMywgMHgwYTAwMGVjMywgMHgwMDAwMTAyMSwgMHgyODQyMDAwMSwgMHgxMDQwMDAzYSwKLQkweDAwMDAwMDAwLCAweDBlMDAwZmFlLCAweDAyMDAyMDIxLCAweGFmNzAwMDQwLCAweDkzNjIwMDNlLCAweDMwNDIwMDAxLAotCTB4MTQ0MDAwMGIsIDB4M2MwMjkwMDAsIDB4OTM2MjAwMjIsIDB4MjQ0MjAwMDEsIDB4YTM2MjAwMjIsIDB4OTM2MzAwMjIsCi0JMHgzYzAyMDgwMCwgMHg4YzQ0MDA5OCwgMHgwMDY0MTgyYiwgMHgxNDYwMDAyNSwgMHgzYzAyMDgwMCwgMHgzYzAyOTAwMCwKLQkweDM0NDIwMDAxLCAweDAyNDIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsIDB4MzQ0MjAwMDEsIDB4YTM2MjAwN2QsCi0JMHg4ZjY0MDA3NCwgMHgzNDYzMDAwMSwgMHgwMjQzMTgyNSwgMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwKLQkweDAyNDAyMDIxLCAweDBlMDAwNDcwLCAweDI0MDUwMjczLCAweDBhMDAwZWY2LCAweDI0MDIwMDAxLCAweDhmNDIwMWY4LAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsIDB4YWY1MjAxYzAsIDB4YTM0MjAxYzQsCi0JMHhhZjQzMDFmOCwgMHgyNDAyMDAwMSwgMHhhNzYyMDAxMiwgMHgwYTAwMGVmZSwgMHhhMzYwMDAyMiwgMHg5NzQzMDA3YSwKLQkweDk0NDQwMDJhLCAweDAwNjQxODIxLCAweDMwNjNmZmZlLCAweGE3NjMwMDEyLCAweDk3NDIwMTA4LCAweDhmYmYwMDI0LAotCTB4OGZiNDAwMjAsIDB4OGZiMzAwMWMsIDB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MDAwMjEwNDIsCi0JMHgzMDQyMDAwMSwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgyN2JkZmZlMCwgMHhhZmIyMDAxOCwgMHgzYzEyMDgwMCwKLQkweDhlNDIwMDIwLCAweGFmYjAwMDEwLCAweDI3NTAwMTAwLCAweGFmYmYwMDFjLCAweDEwNDAwMDQ2LCAweGFmYjEwMDE0LAotCTB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4NDAwMTgsIDB4OGUwMjAwMDAsIDB4YWM4MjAwMDAsIDB4OTM2MzAwYjEsCi0JMHg5MzYyMDBjNSwgMHg4Zjg1MDAxOCwgMHgwMDAzMWUwMCwgMHgwMDAyMTQwMCwgMHgzNDQyMDEwMCwgMHgwMDYyMTgyNSwKLQkweGFjYTMwMDA0LCAweDhmODQwMDE4LCAweDhlMDIwMDFjLCAweGFjODIwMDA4LCAweDhmODMwMDE4LCAweDhmNjIwMDQ4LAotCTB4YWM2MjAwMGMsIDB4OGY4NDAwMTgsIDB4OTYwMjAwMTIsIDB4YWM4MjAwMTAsIDB4OGY4MzAwMTgsIDB4OGY2MjAwNDAsCi0JMHgyNDA0MDAwMSwgMHhhYzYyMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHgzYzAyMDgwMCwKLQkweDI0NTE1OGMwLCAweGFjYTMwMDE4LCAweDk2MjMwMDBlLCAweDhmODUwMDE4LCAweDNjMDI0MDE2LCAweDAwNjIxODI1LAotCTB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4OTYwMzAwMDgsIDB4MzA2MzAwMTAsIDB4MTA2MDAwMWMsIDB4OGU0MjAwMjAsCi0JMHgxMDQwMDAxYSwgMHg4ZTEwMDAwMCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAwMCwKLQkweDhmODMwMDE4LCAweGFjNjAwMDA0LCAweDhmODIwMDE4LCAweGFjNDAwMDA4LCAweDhmODMwMDE4LCAweGFjNjAwMDBjLAotCTB4OGY4MjAwMTgsIDB4YWM0MDAwMTAsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMzYwMDAsCi0JMHg4YzYzNDQ0OCwgMHgyNDA0MDAwMSwgMHhhY2EzMDAxOCwgMHg5NjIyMDAwZSwgMHg4Zjg1MDAxOCwgMHgzYzAzNDAxNSwKLQkweDAwNDMxMDI1LCAweDBlMDAxNGNjLCAweGFjYTIwMDFjLCAweDAwMDAxMDIxLCAweDhmYmYwMDFjLCAweDhmYjIwMDE4LAotCTB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZTAsIDB4YWZiMjAwMTgsCi0JMHgzYzEyMDgwMCwgMHg4ZTQyMDAyMCwgMHhhZmIwMDAxMCwgMHgyNzUwMDEwMCwgMHhhZmJmMDAxYywgMHgxMDQwMDA0MSwKLQkweGFmYjEwMDE0LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODMwMDE4LCAweDhlMDIwMDAwLCAweGFjNjIwMDAwLAotCTB4OGY4NDAwMTgsIDB4MjQwMjAxMDAsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsIDB4OGUwMjAwMWMsIDB4YWM2MjAwMDgsCi0JMHg4Zjg0MDAxOCwgMHg4ZTAyMDAxOCwgMHhhYzgyMDAwYywgMHg4ZjgzMDAxOCwgMHg5NjAyMDAxMiwgMHhhYzYyMDAxMCwKLQkweDhmODQwMDE4LCAweDk2MDIwMDA4LCAweGFjODIwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LAotCTB4MjQwNDAwMDEsIDB4M2MwMjA4MDAsIDB4MjQ1MTU4YzAsIDB4YWNhMzAwMTgsIDB4OTYyMzAwMGUsIDB4OGY4NTAwMTgsCi0JMHgzYzAyNDAxNywgMHgwMDYyMTgyNSwgMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg5NjAzMDAwOCwgMHgzMDYzMDAxMCwKLQkweDEwNjAwMDFjLCAweDhlNDIwMDIwLCAweDEwNDAwMDFhLCAweDhlMTAwMDAwLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4OGY4MjAwMTgsIDB4YWM1MDAwMDAsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDQsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMDgsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwYywgMHg4ZjgyMDAxOCwgMHhhYzQwMDAxMCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxNCwKLQkweDhmODUwMDE4LCAweDNjMDM2MDAwLCAweDhjNjM0NDQ4LCAweDI0MDQwMDAxLCAweGFjYTMwMDE4LCAweDk2MjIwMDBlLAotCTB4OGY4NTAwMTgsIDB4M2MwMzQwMTUsIDB4MDA0MzEwMjUsIDB4MGUwMDE0Y2MsIDB4YWNhMjAwMWMsIDB4MDAwMDEwMjEsCi0JMHg4ZmJmMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwKLQkweDI3YmRmZmYwLCAweDAzZTAwMDA4LCAweDI3YmQwMDEwLCAweDI3YmRmZmQwLCAweGFmYjEwMDE0LCAweDAwODA4ODIxLAotCTB4YWZiNDAwMjAsIDB4MDBjMGEwMjEsIDB4YWZiZjAwMjgsIDB4YWZiNTAwMjQsIDB4YWZiMzAwMWMsIDB4YWZiMjAwMTgsCi0JMHhhZmIwMDAxMCwgMHg5MzYyMDAyMywgMHgwMGUwYTgyMSwgMHgzMDQyMDA0MCwgMHgxMDQwMDAzZSwgMHgzMGIzZmZmZiwKLQkweDNjMTIwODAwLCAweDhlNDIwMDIwLCAweDEwNDAwMDNhLCAweDhmNzAwMDRjLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4OGY4MjAwMTgsIDB4YWM1MTAwMDAsIDB4OGY4NDAwMTgsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4OGY4MzAwMTgsCi0JMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwgMHhhYzYwMDAxMCwgMHg4ZjgyMDAxOCwKLQkweDI0MDQwMDAxLCAweGFjNTAwMDE0LCAweDhmODUwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LCAweDNjMDIwODAwLAotCTB4MjQ1MDU4YzAsIDB4YWNhMzAwMTgsIDB4OTYwMzAwMGUsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMTAsIDB4MDA2MjE4MjUsCi0JMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg4ZTQzMDAyMCwgMHgxMDYwMDAxYiwgMHgwMDAwMDAwMCwgMHgwZTAwMTQ4ZSwKLQkweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTEwMDAwLCAweDhmODQwMDE4LCAweDNjMDIwMDhkLCAweGFjODIwMDA0LAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsCi0JMHg4ZjgyMDAxOCwgMHhhYzU1MDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAzNjAwMCwgMHg4YzYzNDQ0OCwgMHgyNDA0MDAwMSwKLQkweGFjYTMwMDE4LCAweDk2MDIwMDBlLCAweDhmODUwMDE4LCAweDNjMDM0MDE5LCAweDAwNDMxMDI1LCAweDBlMDAxNGNjLAotCTB4YWNhMjAwMWMsIDB4OTM2MjAwMjMsIDB4MzA0MjAwMjAsIDB4MTQ0MDAwMDMsIDB4M2MxMjA4MDAsIDB4MTI4MDAwM2YsCi0JMHgzYzAyOTAwMCwgMHg4ZTQyMDAyMCwgMHg4ZjcwMDA0YywgMHgxMDQwMDAzYiwgMHgzYzAyOTAwMCwgMHgwZTAwMTQ4ZSwKLQkweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNTEwMDAwLCAweDhmODQwMDE4LCAweDI0MDIwMDAxLCAweGFjODIwMDA0LAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsCi0JMHg4ZjgyMDAxOCwgMHgyNDA0MDAwMSwgMHhhYzUwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwKLQkweDNjMDIwODAwLCAweDI0NTA1OGMwLCAweGFjYTMwMDE4LCAweDk2MDMwMDBlLCAweDhmODUwMDE4LCAweDNjMDI0MDEwLAotCTB4MDA2MjE4MjUsIDB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4OGU0MzAwMjAsIDB4MTA2MDAwMWMsIDB4M2MwMjkwMDAsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUxMDAwMCwgMHg4Zjg0MDAxOCwgMHgwMDEzMTQwMCwKLQkweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNzUwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LAotCTB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMzYwMDAsIDB4OGM2MzQ0NDgsCi0JMHgyNDA0MDAwMSwgMHhhY2EzMDAxOCwgMHg5NjAyMDAwZSwgMHg4Zjg1MDAxOCwgMHgzYzAzNDAxYiwgMHgwMDQzMTAyNSwKLQkweDBlMDAxNGNjLCAweGFjYTIwMDFjLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAyMjIxMDI1LCAweGFmNDIwMDIwLAotCTB4M2MwMzgwMDAsIDB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MzAwMjMsCi0JMHgzYzAyODAwMCwgMHgzNDQyMDAwMSwgMHgwMjIyMTAyNSwgMHg4ZmJmMDAyOCwgMHg4ZmI1MDAyNCwgMHg4ZmI0MDAyMCwKLQkweDhmYjMwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAweDMwNjMwMDlmLCAweGEzNjMwMDIzLAotCTB4YWY0MjAwMjAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMzAsIDB4MjdiZGZmZTAsIDB4YWZiMTAwMTQsIDB4Mjc1MTAxMDAsCi0JMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwgMHhhZmIwMDAxMCwgMHgwMDgwODAyMSwgMHgwMjAyMTAyNSwgMHgzYzAzODAwMCwKLQkweGFmYmYwMDE4LCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLAotCTB4YTc2MDAwMDgsIDB4OGY2MzAwNWMsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsIDB4YWY2MzAxNDgsIDB4OGY2NDAwNTAsCi0JMHgwMjAyMTAyNSwgMHgzYzAzOTAwMCwgMHhhZjY0MDE3YywgMHhhZjQyMDAyMCwgMHg4ZjQ1MDEwMCwgMHgzNDYzMDAwMSwKLQkweDNjMDQ4MDAwLCAweDAwYTMxODI1LCAweGFmNDMwMDIwLCAweDhmNDIwMDIwLCAweDAwNDQxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsIDB4MzQ0MjAwMDEsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsCi0JMHgzNDYzMDAwMSwgMHgwMGEzMTgyNSwgMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMGEwMjAyMSwKLQkweDBlMDAwNDcwLCAweDI0MDUwZGU1LCAweDBhMDAxMDkzLCAweDNjMDIwODAwLCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4M2MwMzEwMDAsIDB4YWY0NTAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsCi0JMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwgMHgxMDYwMDAxZSwgMHg4ZmJmMDAxOCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwKLQkweDhmODMwMDE4LCAweGFjNzAwMDAwLCAweDk2MjIwMDBjLCAweDhmODQwMDE4LCAweDAwMDIxNDAwLCAweGFjODIwMDA0LAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsCi0JMHg4ZjgyMDAxOCwgMHhhYzQwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwKLQkweDNjMDIwODAwLCAweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LCAweDNjMDI0MDFmLCAweDAwNjIxODI1LAotCTB4MGUwMDE0Y2MsIDB4YWNhMzAwMWMsIDB4OGZiZjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsCi0JMHgyN2JkMDAyMCwgMHgzYzAyMDgwMCwgMHgyNDQyNGMzYywgMHhhZjgyMDAwYywgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDI3YmRmZmU4LCAweGFmYjAwMDEwLCAweDI3NTAwMTAwLCAweGFmYmYwMDE0LCAweDhlMDIwMDFjLCAweDE0NDAwMDAzLAotCTB4M2MwMjA4MDAsIDB4MDAwMDAwMGQsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsIDB4MTA2MDAwMjAsIDB4MDAwMDEwMjEsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAxOCwgMHg4ZTAyMDAwMCwgMHhhYzYyMDAwMCwgMHg4Zjg0MDAxOCwKLQkweDhlMDIwMDFjLCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODQwMDE4LCAweDhlMDIwMDE4LAotCTB4YWM4MjAwMGMsIDB4OGY4NTAwMTgsIDB4OTYwMjAwMTIsIDB4YWNhMjAwMTAsIDB4OGY4MzAwMTgsIDB4M2MwMjYwMDAsCi0JMHhhYzYwMDAxNCwgMHg4Zjg0MDAxOCwgMHg4YzQzNDQ0OCwgMHgzYzAyMDgwMCwgMHhhYzgzMDAxOCwgMHg5NDQzNThjZSwKLQkweDhmODQwMDE4LCAweDNjMDI0MDEyLCAweDAwNjIxODI1LCAweGFjODMwMDFjLCAweDBlMDAxNGNjLCAweDI0MDQwMDAxLAotCTB4MDAwMDEwMjEsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwMjA4MDAsCi0JMHg5NzQzMDA3OCwgMHg5NDQ0MDAyZSwgMHgwMDAwMTAyMSwgMHgwMDY0MTgyMSwgMHgzMDYzZmZmZSwgMHgwM2UwMDAwOCwKLQkweGE3NjMwMDEwLCAweDI3YmRmZmYwLCAweDAwMDAxMDIxLCAweDAzZTAwMDA4LCAweDI3YmQwMDEwLCAweDhmNDIwMTAwLAotCTB4MzQ0MjAwMDEsIDB4YWY0MjAwYTQsIDB4MDNlMDAwMDgsIDB4MDAwMDEwMjEsIDB4MjdiZGZmZTAsIDB4YWZiZjAwMTgsCi0JMHhhZmIxMDAxNCwgMHhhZmIwMDAxMCwgMHg5MzYyMDA3ZSwgMHgzMGQwMDBmZiwgMHgxNjAyMDAzMSwgMHgwMDgwODgyMSwKLQkweDhmNjIwMTc4LCAweDE2MDIwMDJlLCAweDAwMDAwMDAwLCAweDkzNjIwMDdmLCAweDE2MDIwMDJiLCAweDAwMDAwMDAwLAotCTB4OTM2MjAwN2EsIDB4MTYwMjAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDA5ZDIsCi0JMHgwZTAwMTNlNiwgMHgwMDAwMDAwMCwgMHgzYzAzOTAwMCwgMHgzNDYzMDAwMSwgMHgzYzA0ODAwMCwgMHgwMjIzMTgyNSwKLQkweGEzNzAwMDdhLCAweGFmNDMwMDIwLCAweDhmNDIwMDIwLCAweDAwNDQxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLAotCTB4OTM2MjAwN2QsIDB4M2MwMzgwMDAsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsIDB4MDIyMzE4MjUsCi0JMHhhZjQzMDAyMCwgMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMjIwMjAyMSwgMHgwZTAwMDQ3MCwgMHgyNDA1MDlkZCwKLQkweDBhMDAxMTM4LCAweDhmYmYwMDE4LCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLAotCTB4M2MwMzEwMDAsIDB4YWY1MTAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsIDB4MGEwMDExMzgsIDB4OGZiZjAwMTgsCi0JMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDllMiwgMHg4ZmJmMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwKLQkweDAzZTAwMDA4LCAweDI3YmQwMDIwLCAweDI3YmRmZmU4LCAweDMwYTUwMGZmLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLAotCTB4MDA4MDM4MjEsIDB4MDBlMjEwMjUsIDB4M2MwMzgwMDAsIDB4YWZiZjAwMTAsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsCi0JMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5MzYyMDA3ZCwgMHgzYzAzODAwMCwgMHgwMGEyMTAyNSwKLQkweGEzNjIwMDdkLCAweDhmNjQwMDc0LCAweDM0NjMwMDAxLCAweDAwZTMxODI1LCAweGFmNDMwMDIwLCAweDA0ODEwMDA2LAotCTB4M2MwMzgwMDAsIDB4MDBlMDIwMjEsIDB4MGUwMDA0NzAsIDB4MDBjMDI4MjEsIDB4MGEwMDExNjEsIDB4OGZiZjAwMTAsCi0JMHg4ZjQyMDFmOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjQ3MDFjMCwKLQkweGEzNDIwMWM0LCAweGFmNDMwMWY4LCAweDhmYmYwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDNjMDIwODAwLAotCTB4OGM0MzAwMjAsIDB4MjdiZGZmZTgsIDB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsIDB4MTA2MDAwMjQsIDB4YWZiZjAwMTQsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgzMDAxOCwgMHg4ZTAyMDAwMCwgMHhhYzYyMDAwMCwgMHg4Zjg0MDAxOCwKLQkweDhlMDIwMDA0LCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweDhlMDIwMDE4LCAweGFjNjIwMDA4LCAweDhmODQwMDE4LAotCTB4OGUwMzAwMWMsIDB4YWM4MzAwMGMsIDB4OTYwMjAwMGMsIDB4OTIwMzAwMGEsIDB4OGY4NDAwMTgsIDB4MDAwMjE0MDAsCi0JMHgwMDQzMTAyNSwgMHhhYzgyMDAxMCwgMHg4ZjgzMDAxOCwgMHgzYzAyNjAwMCwgMHhhYzYwMDAxNCwgMHg4Zjg0MDAxOCwKLQkweDhjNDM0NDQ4LCAweGFjODMwMDE4LCAweDk2MDIwMDA4LCAweDNjMDMwODAwLCAweDk0NjQ1OGNlLCAweDhmODUwMDE4LAotCTB4MDAwMjE0MDAsIDB4MDA0NDEwMjUsIDB4MjQwNDAwMDEsIDB4MGUwMDE0Y2MsIDB4YWNhMjAwMWMsIDB4OGZiZjAwMTQsCi0JMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwgMHgyN2JkZmZlOCwKLQkweGFmYjAwMDEwLCAweDI3NTAwMTAwLCAweDEwNjAwMDIwLCAweGFmYmYwMDE0LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4OGY4MjAwMTgsIDB4YWM0MDAwMDAsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMDQsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMDgsCi0JMHg4ZjgzMDAxOCwgMHhhYzYwMDAwYywgMHg5NjAyMDAwYywgMHg5NjAzMDAwZSwgMHg4Zjg0MDAxOCwgMHgwMDAyMTQwMCwKLQkweDAwNDMxMDI1LCAweGFjODIwMDEwLCAweDhmODMwMDE4LCAweDNjMDI2MDAwLCAweGFjNjAwMDE0LCAweDhmODQwMDE4LAotCTB4OGM0MzQ0NDgsIDB4YWM4MzAwMTgsIDB4OTYwMjAwMDgsIDB4M2MwMzA4MDAsIDB4OTQ2NDU4Y2UsIDB4OGY4NTAwMTgsCi0JMHgwMDAyMTQwMCwgMHgwMDQ0MTAyNSwgMHgyNDA0MDAwMSwgMHgwZTAwMTRjYywgMHhhY2EyMDAxYywgMHg4ZmJmMDAxNCwKLQkweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDI3YmRmZmU4LCAweGFmYjAwMDEwLCAweDI3NTAwMTAwLAotCTB4YWZiZjAwMTQsIDB4OTYwMjAwMGMsIDB4MTA0MDAwMjQsIDB4MDA4MDI4MjEsIDB4M2MwMjA4MDAsIDB4OGM0MzAwMjAsCi0JMHgxMDYwMDAzYSwgMHg4ZmJmMDAxNCwgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4Zjg0MDAxOCwgMHg4ZTAzMDAwMCwKLQkweGFjODMwMDAwLCAweDk2MDIwMDBjLCAweDhmODQwMDE4LCAweDAwMDIxNDAwLCAweGFjODIwMDA0LCAweDhmODMwMDE4LAotCTB4YWM2MDAwMDgsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMGMsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsCi0JMHhhYzQwMDAxNCwgMHg4Zjg1MDAxOCwgMHgzYzAyNjAwMCwgMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwKLQkweGFjYTMwMDE4LCAweDk0NDM1OGNlLCAweDhmODUwMDE4LCAweDNjMDI0MDBiLCAweDAwNjIxODI1LCAweDBlMDAxNGNjLAotCTB4YWNhMzAwMWMsIDB4MGEwMDExZmYsIDB4OGZiZjAwMTQsIDB4OTM2MjAwMDUsIDB4MzA0MjAwMTAsIDB4MTQ0MDAwMTUsCi0JMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwgMHgwMGEyMTAyNSwgMHhhZjQyMDAyMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDAyMCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDNjMDM4MDAwLCAweDkzNjIwMDA1LCAweDM0NjMwMDAxLAotCTB4MDBhMDIwMjEsIDB4MDBhMzE4MjUsIDB4MjQwNTU4NTIsIDB4MzQ0MjAwMTAsIDB4YTM2MjAwMDUsIDB4MGUwMDA3NjYsCi0JMHhhZjQzMDAyMCwgMHgwYTAwMTFmZiwgMHg4ZmJmMDAxNCwgMHgwMDAwMDAwZCwgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwKLQkweDAzZTAwMDA4LCAweDI3YmQwMDE4LCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDI3YmRmZmU4LCAweGFmYjAwMDEwLAotCTB4Mjc1MDAxMDAsIDB4MTA2MDAwMjIsIDB4YWZiZjAwMTQsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsIDB4OGY4NDAwMTgsCi0JMHg4ZTAyMDAwNCwgMHhhYzgyMDAwMCwgMHg5NjAzMDAwYywgMHg5NzYyMDAyYywgMHg4Zjg0MDAxOCwgMHgwMDAzMWMwMCwKLQkweDAwNDMxMDI1LCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTQsIDB4OGY4NTAwMTgsIDB4M2MwMjYwMDAsCi0JMHg4YzQzNDQ0OCwgMHgyNDA0MDAwMSwgMHgzYzAyMDgwMCwgMHhhY2EzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg1MDAxOCwKLQkweDNjMDI0MDBlLCAweDAwNjIxODI1LCAweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDBlMDAxMjJlLCAweDhlMDQwMDAwLAotCTB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwMzgwMDAsIDB4OGY0MjAyNzgsCi0JMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHgzYzAzMTAwMCwgMHhhZjQ0MDI0MCwgMHhhMzQyMDI0NCwKLQkweDAzZTAwMDA4LCAweGFmNDMwMjc4LCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDI3YmRmZmUwLCAweGFmYjEwMDE0LAotCTB4MDA4MDg4MjEsIDB4YWZiMjAwMTgsIDB4MDBjMDkwMjEsIDB4YWZiMDAwMTAsIDB4MzBiMGZmZmYsIDB4MTA2MDAwMWMsCi0JMHhhZmJmMDAxYywgMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUxMDAwMCwgMHg4Zjg0MDAxOCwKLQkweDAwMTAxNDAwLCAweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLAotCTB4OGY4MzAwMTgsIDB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM1MjAwMTQsIDB4OGY4NDAwMTgsIDB4M2MwMjYwMDAsCi0JMHg4YzQzNDQ0OCwgMHgzYzAyMDgwMCwgMHhhYzgzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg0MDAxOCwgMHgzYzAyNDAxOSwKLQkweDAwNjIxODI1LCAweGFjODMwMDFjLCAweDBlMDAxNGNjLCAweDI0MDQwMDAxLCAweDhmYmYwMDFjLCAweDhmYjIwMDE4LAotCTB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZTgsIDB4Mjc0NTAxMDAsCi0JMHhhZmJmMDAxMCwgMHg5NGEzMDAwYywgMHgyNDAyMDBjMSwgMHgxNDYyMDAzMSwgMHgwMDgwMzAyMSwgMHgzYzAyOTAwMCwKLQkweDM0NDIwMDAxLCAweDAwYzIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LAotCTB4MTQ0MGZmZmQsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsIDB4M2MwNDkwMDAsIDB4MzQ4NDAwMDEsIDB4M2MwNTgwMDAsCi0JMHgyNDAzMDAxMiwgMHgwMGMyMTAyNSwgMHgwMGM0MjAyNSwgMHhhMzYzMDAzZiwgMHhhZjQyMDAyMCwgMHhhZjQ0MDAyMCwKLQkweDhmNDIwMDIwLCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLAotCTB4MzQ0MjAwMjAsIDB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsIDB4MDBjMzE4MjUsIDB4YWY0MzAwMjAsCi0JMHgwNDgxMDAwNiwgMHgzYzAzODAwMCwgMHgwMGMwMjAyMSwgMHgwZTAwMDQ3MCwgMHgyNDA1MDkwNiwgMHgwYTAwMTJhMSwKLQkweDhmYmYwMDEwLCAweDhmNDIwMWY4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweDNjMDMxMDAwLAotCTB4YWY0NjAxYzAsIDB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsIDB4MGEwMDEyYTEsIDB4OGZiZjAwMTAsIDB4MDBjMDIwMjEsCi0JMHg5NGE1MDAwYywgMHgyNDA2MDAwMSwgMHgwZTAwMGZiMSwgMHgyNDA3MDkwZSwgMHg4ZmJmMDAxMCwgMHgwM2UwMDAwOCwKLQkweDI3YmQwMDE4LCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDI3YmRmZmUwLCAweGFmYjAwMDEwLCAweDAwODA4MDIxLAotCTB4YWZiMjAwMTgsIDB4MDBhMDkwMjEsIDB4YWZiMTAwMTQsIDB4MzBkMTAwZmYsIDB4MTA2MDAwMWMsIDB4YWZiZjAwMWMsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUwMDAwMCwgMHg4Zjg0MDAxOCwgMHgyNDAyMDAwMSwKLQkweGFjODIwMDA0LCAweDhmODMwMDE4LCAweGFjNjAwMDA4LCAweDhmODIwMDE4LCAweGFjNDAwMDBjLCAweDhmODMwMDE4LAotCTB4YWM2MDAwMTAsIDB4OGY4MjAwMTgsIDB4YWM1MjAwMTQsIDB4OGY4NDAwMTgsIDB4M2MwMjYwMDAsIDB4OGM0MzQ0NDgsCi0JMHgzYzAyMDgwMCwgMHhhYzgzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg0MDAxOCwgMHgzYzAyNDAxMCwgMHgwMDYyMTgyNSwKLQkweGFjODMwMDFjLCAweDBlMDAxNGNjLCAweDAyMjAyMDIxLCAweDhmYmYwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LAotCTB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTQsIDB4YWZiMDAwMTAsCi0JMHg5MzYyMDAwNSwgMHgzMDQyMDAwMSwgMHgxMDQwMDAzNiwgMHgwMDgwODAyMSwgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwKLQkweDAyMDIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OTM2MjAwMjMsIDB4MzQ0MjAwMDQsIDB4YTM2MjAwMjMsIDB4OTM2MzAwMDUsIDB4M2MwNDgwMDAsCi0JMHgzYzAyMDgwMCwgMHgzMDYzMDBmZSwgMHhhMzYzMDAwNSwgMHg4YzQzMDAyMCwgMHgzNDg0MDAwMSwgMHgwMjA0MjAyNSwKLQkweGFmNDQwMDIwLCAweDEwNjAwMDIwLCAweDhmYmYwMDE0LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LAotCTB4YWM1MDAwMDAsIDB4OTM2MzAwODIsIDB4OTM2MjAwM2YsIDB4OGY4NDAwMTgsIDB4MDAwMzFhMDAsIDB4MDA0MzEwMjUsCi0JMHhhYzgyMDAwNCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwOCwgMHg4ZjgyMDAxOCwgMHhhYzQwMDAwYywgMHg4ZjgzMDAxOCwKLQkweGFjNjAwMDEwLCAweDhmODIwMDE4LCAweGFjNDAwMDE0LCAweDhmODQwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LAotCTB4M2MwMjA4MDAsIDB4YWM4MzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NDAwMTgsIDB4M2MwMjQwMGEsIDB4MDA2MjE4MjUsCi0JMHhhYzgzMDAxYywgMHgwZTAwMTRjYywgMHgyNDA0MDAwMSwgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwKLQkweDI3YmQwMDE4LCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDI3YmRmZmUwLCAweGFmYjEwMDE0LCAweDAwODA4ODIxLAotCTB4YWZiMjAwMTgsIDB4MDBhMDkwMjEsIDB4YWZiMDAwMTAsIDB4MzBkMDAwZmYsIDB4MTA2MDAwMmYsIDB4YWZiZjAwMWMsCi0JMHgwZTAwMTQ4ZSwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxOCwgMHhhYzUxMDAwMCwgMHg4ZjgzMDAxOCwgMHhhYzcwMDAwNCwKLQkweDhmODIwMDE4LCAweGFjNTIwMDA4LCAweDhmODMwMDE4LCAweGFjNjAwMDBjLCAweDhmODIwMDE4LCAweGFjNDAwMDEwLAotCTB4OTc2MzAwNmEsIDB4MDAwMzI4ODAsIDB4NTBhMDAwMDEsIDB4MjQwNTAwMDEsIDB4OTc2MzAwNjgsIDB4OTM2NDAwODEsCi0JMHgzYzAyMDgwMCwgMHg4YzQ2MDA0YywgMHgwMDY1MjgyMSwgMHgwMDg1MjgwNCwgMHgwMGM1MTAyYiwgMHg1NDQwMDAwMSwKLQkweDAwYTAzMDIxLCAweDNjMDIwODAwLCAweDhjNDQwMDUwLCAweDAwYzQxODJiLCAweDU0NjAwMDAxLCAweDAwYzAyMDIxLAotCTB4OGY4MzAwMTgsIDB4MjQwMmZmZmUsIDB4MDA4MjI4MjQsIDB4M2MwMjYwMDAsIDB4YWM2NTAwMTQsIDB4OGY4NDAwMTgsCi0JMHg4YzQzNDQ0OCwgMHgzYzAyMDgwMCwgMHhhYzgzMDAxOCwgMHg5NDQzNThjZSwgMHg4Zjg0MDAxOCwgMHgzYzAyNDAxMSwKLQkweDAwNjIxODI1LCAweGFjODMwMDFjLCAweDBlMDAxNGNjLCAweDI0MDQwMDAxLCAweDhmYmYwMDFjLCAweDhmYjIwMDE4LAotCTB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTQsCi0JMHhhZmIwMDAxMCwgMHg4ZjQ0MDEwMCwgMHgyNzUwMDEwMCwgMHg4ZjY1MDA1MCwgMHgwZTAwMTBmYywgMHg5MjA2MDAxYiwKLQkweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDEwNjAwMDFkLCAweDhlMTAwMDE4LCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4OGY4NDAwMTgsIDB4OGY0MjAxMDAsIDB4YWM4MjAwMDAsIDB4OGY4MzAwMTgsIDB4YWM3MDAwMDQsIDB4OGY4NDAwMTgsCi0JMHg4ZjYyMDA1MCwgMHhhYzgyMDAwOCwgMHg4ZjgzMDAxOCwgMHhhYzYwMDAwYywgMHg4ZjgyMDAxOCwgMHhhYzQwMDAxMCwKLQkweDhmODMwMDE4LCAweDNjMDI2MDAwLCAweGFjNjAwMDE0LCAweDhmODUwMDE4LCAweDhjNDM0NDQ4LCAweDI0MDQwMDAxLAotCTB4M2MwMjA4MDAsIDB4YWNhMzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NTAwMTgsIDB4M2MwMjQwMWMsIDB4MDA2MjE4MjUsCi0JMHgwZTAwMTRjYywgMHhhY2EzMDAxYywgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwKLQkweDhmNDMwMjM4LCAweDNjMDIwODAwLCAweDA0NjEwMDEzLCAweDhjNDQwMDljLCAweDI0MDZmZmZlLCAweDNjMDUwODAwLAotCTB4M2MwMzgwMDAsIDB4MjQ4NGZmZmYsIDB4MTQ4MDAwMDksIDB4MDAwMDAwMDAsIDB4OTc0MjAwNzgsIDB4OGNhMzAwN2MsCi0JMHgyNDQyMDAwMSwgMHgwMDQ2MTAyNCwgMHgyNDYzMDAwMSwgMHhhNzYyMDAxMCwgMHgwM2UwMDAwOCwgMHhhY2EzMDA3YywKLQkweDhmNDIwMjM4LCAweDAwNDMxMDI0LCAweDE0NDBmZmYzLCAweDI0ODRmZmZmLCAweDhmNDIwMTQwLCAweDNjMDMxMDAwLAotCTB4YWY0MjAyMDAsIDB4MDNlMDAwMDgsIDB4YWY0MzAyMzgsIDB4MjdiZGZmZTgsIDB4M2MwMjkwMDAsIDB4YWZiZjAwMTAsCi0JMHg4ZjQ1MDE0MCwgMHgzNDQyMDAwMSwgMHgzYzAzODAwMCwgMHgwMGEyMTAyNSwgMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDkzNjIwMDdkLCAweDNjMDM4MDAwLCAweDM0NDIwMDAxLAotCTB4YTM2MjAwN2QsIDB4OGY2NDAwNzQsIDB4MzQ2MzAwMDEsIDB4MDBhMzE4MjUsIDB4YWY0MzAwMjAsIDB4MDQ4MTAwMDYsCi0JMHgzYzAzODAwMCwgMHgwMGEwMjAyMSwgMHgwZTAwMDQ3MCwgMHgyNDA1MGFjNywgMHgwYTAwMTNiOSwgMHg4ZmJmMDAxMCwKLQkweDhmNDIwMWY4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweDNjMDMxMDAwLCAweGFmNDUwMWMwLAotCTB4YTM0MjAxYzQsIDB4YWY0MzAxZjgsIDB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MDAwMDAwMGQsCi0JMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgyNDAyMDAwMSwKLQkweDAzZTAwMDA4LCAweGE3NjIwMDEwLCAweDkzNjIwMDNmLCAweDMwNDQwMGZmLCAweDM4ODMwMDBlLCAweDJjNjMwMDAxLAotCTB4Mzg4MjAwMTAsIDB4MmM0MjAwMDEsIDB4MDA2MjE4MjUsIDB4MTQ2MDAwMDMsIDB4MjQwMjAwMTIsIDB4MTQ4MjAwMDMsCi0JMHgwMDAwMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMTAyMSwgMHg5MzYzMDA3ZSwgMHg5MzYyMDA3YSwgMHgxNDYyMDAwNiwKLQkweDAwMDAwMDAwLCAweDkzNjMwMDdlLCAweDI0MDIwMDAxLCAweDI0NjMwMDAxLCAweDAzZTAwMDA4LCAweGEzNjMwMDdlLAotCTB4OTM2MjAwN2UsIDB4OGY2MzAxNzgsIDB4MzA0MjAwZmYsIDB4MTQ0MzAwMDYsIDB4MDAwMDAwMDAsIDB4OTM2MzAwMGIsCi0JMHgyNDAyMDAwMSwgMHgyNDYzMDAwMSwgMHgwM2UwMDAwOCwgMHhhMzYzMDAwYiwgMHgwM2UwMDAwOCwgMHgwMDAwMTAyMSwKLQkweDkzNjIwMDBiLCAweDEwNDAwMDIzLCAweDAwMDAxMDIxLCAweGEzNjAwMDBiLCAweDkzNjIwMDNmLCAweDMwNDQwMGZmLAotCTB4Mzg4MzAwMGUsIDB4MmM2MzAwMDEsIDB4Mzg4MjAwMTAsIDB4MmM0MjAwMDEsIDB4MDA2MjE4MjUsIDB4MTQ2MDAwMTcsCi0JMHgwMDAwMTgyMSwgMHgyNDAyMDAxMiwgMHgxMDgyMDAxNCwgMHgwMDAwMDAwMCwgMHg5MzYzMDA3ZSwgMHg5MzYyMDA3YSwKLQkweDE0NjIwMDA3LCAweDAwMDAwMDAwLCAweDkzNjIwMDdlLCAweDI0MDMwMDAxLCAweDI0NDIwMDAxLCAweGEzNjIwMDdlLAotCTB4MDNlMDAwMDgsIDB4MDA2MDEwMjEsIDB4OTM2MjAwN2UsIDB4OGY2MzAxNzgsIDB4MzA0MjAwZmYsIDB4MTQ0MzAwMDUsCi0JMHgwMDAwMTgyMSwgMHg5MzYyMDAwYiwgMHgyNDAzMDAwMSwgMHgyNDQyMDAwMSwgMHhhMzYyMDAwYiwgMHgwM2UwMDAwOCwKLQkweDAwNjAxMDIxLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDI0MDQwMDAxLCAweGFmNjQwMDBjLCAweDhmNjMwMGRjLAotCTB4OGY2MjAwY2MsIDB4NTA2MjAwMDEsIDB4YTc2NDAwMTAsIDB4YTc2NDAwMTIsIDB4YTc2NDAwMTQsIDB4MDNlMDAwMDgsCi0JMHhhNzY0MDAxNiwgMHgzYzAyMDgwMCwgMHg4YzQzMDAyMCwgMHgyN2JkZmZlOCwgMHgxMDYwMDAxYiwgMHhhZmJmMDAxMCwKLQkweDBlMDAxNDhlLCAweDAwMDAwMDAwLCAweDhmODIwMDE4LCAweGFjNDAwMDAwLCAweDhmODMwMDE4LCAweGFjNjAwMDA0LAotCTB4OGY4MjAwMTgsIDB4YWM0MDAwMDgsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMGMsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTAsCi0JMHg4ZjgzMDAxOCwgMHgzYzAyNjAwMCwgMHhhYzYwMDAxNCwgMHg4Zjg0MDAxOCwgMHg4YzQzNDQ0OCwgMHgzYzAyMDgwMCwKLQkweGFjODMwMDE4LCAweDk0NDM1OGNlLCAweDhmODQwMDE4LCAweDNjMDI0MDIwLCAweDAwNjIxODI1LCAweGFjODMwMDFjLAotCTB4MGUwMDE0Y2MsIDB4MjQwNDAwMDEsIDB4OGZiZjAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwMjA4MDAsCi0JMHg4YzQzMDAyMCwgMHgyN2JkZmZlMCwgMHhhZmIwMDAxMCwgMHgwMGEwODAyMSwgMHhhZmIxMDAxNCwgMHgwMGMwODgyMSwKLQkweGFmYjIwMDE4LCAweDAwZTA5MDIxLCAweDEwNjAwMDFlLCAweGFmYmYwMDFjLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4OGY4NDAwMTgsIDB4OGY0MjAxMDAsIDB4YWM4MjAwMDAsIDB4OGY4MzAwMTgsIDB4YWM3MDAwMDQsIDB4OGY4MjAwMTgsCi0JMHhhYzUxMDAwOCwgMHg4ZjgzMDAxOCwgMHhhYzcyMDAwYywgMHg4Zjg0MDAxOCwgMHg4ZmEyMDAzMCwgMHhhYzgyMDAxMCwKLQkweDhmODMwMDE4LCAweDhmYTIwMDM0LCAweGFjNjIwMDE0LCAweDhmODQwMDE4LCAweDNjMDI2MDAwLCAweDhjNDM0NDQ4LAotCTB4M2MwMjA4MDAsIDB4YWM4MzAwMTgsIDB4OTQ0MzU4Y2UsIDB4OGY4NDAwMTgsIDB4M2MwMjQwYzksIDB4MDA2MjE4MjUsCi0JMHhhYzgzMDAxYywgMHgwZTAwMTRjYywgMHgyNDA0MDAwMSwgMHg4ZmJmMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwKLQkweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDIwLCAweDNjMDIwODAwLCAweDhjNDMwMDIwLCAweDI3YmRmZmU4LAotCTB4YWZiMDAwMTAsIDB4Mjc1MDAxMDAsIDB4MTA2MDAwMWQsIDB4YWZiZjAwMTQsIDB4MGUwMDE0OGUsIDB4MDAwMDAwMDAsCi0JMHg4ZjgzMDAxOCwgMHg4ZTAyMDAwNCwgMHhhYzYyMDAwMCwgMHg4Zjg0MDAxOCwgMHg4ZTAyMDAxOCwgMHhhYzgyMDAwNCwKLQkweDhmODUwMDE4LCAweDhlMDIwMDAwLCAweGFjYTIwMDA4LCAweDhmODMwMDE4LCAweGFjNjAwMDBjLCAweDhmODIwMDE4LAotCTB4YWM0MDAwMTAsIDB4OGY4MzAwMTgsIDB4YWM2MDAwMTQsIDB4OGY4MjAwMTgsIDB4YWM0MDAwMTgsIDB4OTYwMzAwMDgsCi0JMHgzYzAyMDgwMCwgMHg5NDQ0NThjZSwgMHg4Zjg1MDAxOCwgMHgwMDAzMWMwMCwgMHgwMDY0MTgyNSwgMHgyNDA0MDAwMSwKLQkweDBlMDAxNGNjLCAweGFjYTMwMDFjLCAweDhmYmYwMDE0LCAweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LAotCTB4M2MwNjA4MDAsIDB4MjRjNTU4YzAsIDB4M2MwMjAwMGEsIDB4MDM0MjE4MjEsIDB4OTQ2NDAwMDYsIDB4OTRhMjAwMGEsCi0JMHgwMDQ0MTAyMywgMHgwMDAyMTQwMCwgMHgwMDAyMWMwMywgMHgwNDYxMDAwNiwgMHhhNGE0MDAwNiwgMHgwMDAwMDAwZCwKLQkweDAwMDAwMDAwLCAweDI0MDAwMDVhLCAweDBhMDAxNGEzLCAweDI0MDIwMDAxLCAweDhmODIwMDE0LCAweDAwNjIxMDJiLAotCTB4MTQ0MDAwMDIsIDB4MDAwMDEwMjEsIDB4MjQwMjAwMDEsIDB4MzA0MjAwZmYsIDB4MTA0MDAwMWMsIDB4Mjc0YTA0MDAsCi0JMHgzYzA3MDAwYSwgMHgzYzAyMDgwMCwgMHgyNDQ1NThjMCwgMHg5NGE5MDAwYSwgMHg4Zjg4MDAxNCwgMHgwMzQ3MTAyMSwKLQkweDk0NDMwMDA2LCAweDAwNDAyMDIxLCAweGE0YTMwMDA2LCAweDk0ODIwMDA2LCAweGE0YTIwMDA2LCAweDAxMjIxMDIzLAotCTB4MDAwMjE0MDAsIDB4MDAwMjE0MDMsIDB4MDQ0MTAwMDYsIDB4MDA0ODEwMmIsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsCi0JMHgyNDAwMDA1YSwgMHgwYTAwMTRiZSwgMHgyNDAyMDAwMSwgMHgxNDQwMDAwMiwgMHgwMDAwMTAyMSwgMHgyNDAyMDAwMSwKLQkweDMwNDIwMGZmLCAweDE0NDBmZmVjLCAweDAzNDcxMDIxLCAweDI0YzQ1OGMwLCAweDhjODIwMDEwLCAweGFmNDIwMDM4LAotCTB4OGM4MzAwMTQsIDB4M2MwMjAwMDUsIDB4YWY0MzAwM2MsIDB4YWY0MjAwMzAsIDB4YWY4MDAwMTAsIDB4YWY4YTAwMTgsCi0JMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgyN2JkZmZlMCwgMHg4ZjgyMDAxMCwgMHg4Zjg1MDAxOCwgMHgzYzA3MDgwMCwKLQkweDI0ZTg1OGMwLCAweGFmYmYwMDFjLCAweGFmYjIwMDE4LCAweGFmYjEwMDE0LCAweGFmYjAwMDEwLCAweDk1MDMwMDBhLAotCTB4OGQwNjAwMTQsIDB4MDAwMDkwMjEsIDB4MzA5MDAwZmYsIDB4MDBlMDg4MjEsIDB4MjQ0MjAwMDEsIDB4MjRhNTAwMjAsCi0JMHgyNDYzMDAwMSwgMHhhZjgyMDAxMCwgMHhhZjg1MDAxOCwgMHhhNTAzMDAwYSwgMHgyNGMzMDAyMCwgMHgzYzAyODAwMCwKLQkweDA0YzEwMDA3LCAweGFkMDMwMDE0LCAweDAwNjIxMDI0LCAweDE0NDAwMDA1LCAweDI2MjI1OGMwLCAweDhkMDIwMDEwLAotCTB4MjQ0MjAwMDEsIDB4YWQwMjAwMTAsIDB4MjYyMjU4YzAsIDB4OTQ0NDAwMGEsIDB4OTQ0NTAwMTgsIDB4MDAxMDEwMmIsCi0JMHgwMGE0MTgyNiwgMHgyYzYzMDAwMSwgMHgwMDYyMTgyNSwgMHgxMDYwMDAxYywgMHgzYzAzMDAwNiwgMHg4ZjgyMDAxMCwKLQkweDI0MTIwMDAxLCAweDAwMDIxMTQwLCAweDAwNDMxMDI1LCAweGFmNDIwMDMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4Mjc0NTA0MDAsIDB4OGY0MjAwMDAsIDB4MzA0MjAwMTAsIDB4MTA0MGZmZmQsIDB4MjYyMjU4YzAsCi0JMHg5NDQ0MDAwYSwgMHg5NDQzMDAxOCwgMHhhZjgwMDAxMCwgMHhhZjg1MDAxOCwgMHgxNDgzMDAxMiwgMHgyNjI3NThjMCwKLQkweDBlMDAxNTVhLCAweDAwMDAwMDAwLCAweDE2MDAwMDBlLCAweDI2Mjc1OGMwLCAweDBlMDAxNDhlLCAweDAwMDAwMDAwLAotCTB4MGEwMDE1MTcsIDB4MjYyNzU4YzAsIDB4MDAwNDFjMDAsIDB4MDAwMzFjMDMsIDB4MDAwNTE0MDAsIDB4MDAwMjE0MDMsCi0JMHgwMDYyMTgyMywgMHgxODYwMDAwMiwgMHgzYzAyNjAwMCwgMHhhYzQwMDgwOCwgMHgyNjI3NThjMCwgMHg5NGUyMDAwZSwKLQkweDk0ZTMwMDBjLCAweDI0NDIwMDAxLCAweGE0ZTIwMDBlLCAweDMwNDJmZmZmLCAweDUwNDMwMDAxLCAweGE0ZTAwMDBlLAotCTB4MTIwMDAwMDUsIDB4M2MwMjAwMGEsIDB4OTRlMjAwMGEsIDB4YTc0MjAwYTIsIDB4MGEwMDE1NTQsIDB4MDI0MDEwMjEsCi0JMHgwMzQyMTgyMSwgMHg5NDY0MDAwNiwgMHg5NGUyMDAwYSwgMHgwMDQ0MTAyMywgMHgwMDAyMTQwMCwgMHgwMDAyMWMwMywKLQkweDA0NjEwMDA2LCAweGE0ZTQwMDA2LCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMDVhLCAweDBhMDAxNTM2LAotCTB4MjQwMjAwMDEsIDB4OGY4MjAwMTQsIDB4MDA2MjEwMmIsIDB4MTQ0MDAwMDIsIDB4MDAwMDEwMjEsIDB4MjQwMjAwMDEsCi0JMHgzMDQyMDBmZiwgMHgxMDQwMDAxYiwgMHgzYzAyMDgwMCwgMHgzYzA2MDAwYSwgMHgyNDQ1NThjMCwgMHg5NGE4MDAwYSwKLQkweDhmODcwMDE0LCAweDAzNDYxMDIxLCAweDk0NDMwMDA2LCAweDAwNDAyMDIxLCAweGE0YTMwMDA2LCAweDk0ODIwMDA2LAotCTB4YTRhMjAwMDYsIDB4MDEwMjEwMjMsIDB4MDAwMjE0MDAsIDB4MDAwMjE0MDMsIDB4MDQ0MTAwMDYsIDB4MDA0NzEwMmIsCi0JMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDA1YSwgMHgwYTAwMTU1MCwgMHgyNDAyMDAwMSwgMHgxNDQwMDAwMiwKLQkweDAwMDAxMDIxLCAweDI0MDIwMDAxLCAweDMwNDIwMGZmLCAweDE0NDBmZmVjLCAweDAzNDYxMDIxLCAweDAyNDAxMDIxLAotCTB4OGZiZjAwMWMsIDB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMjAsCi0JMHgzYzAyMDgwMCwgMHgyNDQ1NThjMCwgMHg5NGEzMDAxYSwgMHg4Y2E0MDAyNCwgMHgwMDQwMzAyMSwgMHgwMDAzMThjMCwKLQkweDAwODMyMDIxLCAweGFmNDQwMDNjLCAweDhjYTIwMDIwLCAweGFmNDIwMDM4LCAweDNjMDIwMDUwLCAweDM0NDIwMDA4LAotCTB4YWY0MjAwMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4OGY0MjAwMDAsIDB4MzA0MjAwMjAsCi0JMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg4ZjQzMDQwMCwgMHgyNGM2NThjMCwgMHhhY2MzMDAxMCwgMHg4ZjQyMDQwNCwKLQkweDNjMDMwMDIwLCAweGFjYzIwMDE0LCAweGFmNDMwMDMwLCAweDk0YzQwMDE4LCAweDk0YzMwMDFjLCAweDk0YzIwMDFhLAotCTB4OTRjNTAwMWUsIDB4MDA4MzIwMjEsIDB4MjQ0MjAwMDEsIDB4YTRjMjAwMWEsIDB4MzA0MmZmZmYsIDB4MTQ0NTAwMDIsCi0JMHhhNGM0MDAxOCwgMHhhNGMwMDAxYSwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxMCwgMHgzYzAzMDAwNiwKLQkweDAwMDIxMTQwLCAweDAwNDMxMDI1LCAweGFmNDIwMDMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4Mjc0MzA0MDAsIDB4OGY0MjAwMDAsIDB4MzA0MjAwMTAsIDB4MTA0MGZmZmQsIDB4MDAwMDAwMDAsIDB4YWY4MDAwMTAsCi0JMHhhZjgzMDAxOCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgyN2JkZmZlOCwgMHhhZmIwMDAxMCwgMHgzYzEwMDgwMCwKLQkweDI2MTA1OGMwLCAweDNjMDUwMDBhLCAweDAyMDAyMDIxLCAweDAzNDUyODIxLCAweGFmYmYwMDE0LCAweDBlMDAxNWIwLAotCTB4MjQwNjAwMGEsIDB4OTYwMjAwMDIsIDB4OTYwMzAwMWUsIDB4MzA0MjAwMGYsIDB4MjQ0MjAwMDMsIDB4MDA0MzE4MDQsCi0JMHgyNDAyN2ZmZiwgMHgwMDQzMTAyYiwgMHhhZjgzMDAxNCwgMHgxMDQwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwKLQkweDAwMDAwMDAwLCAweDI0MDAwMDQzLCAweDBlMDAxNTVhLCAweDAwMDAwMDAwLCAweDhmYmYwMDE0LCAweDhmYjAwMDEwLAotCTB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MTBjMDAwMDcsIDB4MDAwMDAwMDAsIDB4OGNhMjAwMDAsIDB4MjRjNmZmZmYsCi0JMHgyNGE1MDAwNCwgMHhhYzgyMDAwMCwgMHgxNGMwZmZmYiwgMHgyNDg0MDAwNCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDBhMDAxNWMxLCAweDAwYTAxMDIxLCAweGFjODYwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI0ODQwMDA0LAotCTB4MDBhMDEwMjEsIDB4MTQ0MGZmZmEsIDB4MjRhNWZmZmYsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4M2MwMzYwMDAsCi0JMHg4YzY0MmI3YywgMHgzYzAzNjAxMCwgMHg4YzY1NTNmYywgMHgwMDA0MTU4MiwgMHgwMDA0MjMwMiwgMHgzMDg0MDNmZiwKLQkweDAwMDUyZDgyLCAweDAwNDQxMDI2LCAweDAwMDIxMDJiLCAweDAwMDUyODJiLCAweDAwNDUxMDI1LCAweDE0NDAwMDBkLAotCTB4M2MwMjAwNTAsIDB4MzQ0MjAwMDQsIDB4YWY0MDAwMzgsIDB4YWY0MDAwM2MsIDB4YWY0MjAwMzAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAyMCwgMHgxMDQwZmZmZCwgMHgzYzAyMDAyMCwgMHhhZjQyMDAzMCwKLQkweDAwMDAwMDBkLCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDNjMDIwMDUwLCAweDM0NDIwMDA0LCAweGFmNDQwMDM4LAotCTB4YWY0NTAwM2MsIDB4YWY0MjAwMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4OGY0MjAwMDAsIDB4MzA0MjAwMjAsCi0JMHgxMDQwZmZmZCwgMHgzYzAyMDAyMCwgMHhhZjQyMDAzMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH07CitzdGF0aWMgdTggYm54Ml9DT01fYjA2RndUZXh0W10gPSB7CisJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHgwOSwgMHg4MywgMHg0MSwgMHg0NCwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGVjLCAweDViLCAweDdkLCAweDZjLAorCTB4NWIsIDB4ZDcsIDB4NzUsIDB4M2YsIDB4ZWYsIDB4ZjEsIDB4NTEsIDB4N2EsIDB4OTYsIDB4NjgsIDB4ZjksIDB4OTksCisJMHg3ZSwgMHg5NiwgMHg1OSwgMHg0ZiwgMHhiMSwgMHg0OSwgMHhmMSwgMHhjOSwgMHhkMiwgMHg2MiwgMHgyZCwgMHg2MywKKwkweDM0LCAweDM1LCAweGQxLCAweDNhLCAweDI2LCAweDY2LCAweDQ4LCAweGRhLCAweDcxLCAweDM2LCAweDY3LCAweGEwLAorCTB4MWQsIDB4MDUsIDB4NTEsIDB4NTEsIDB4YWYsIDB4ZDAsIDB4NDgsIDB4ZDksIDB4Y2QsIDB4YjIsIDB4MGMsIDB4NzMsCisJMHg5NiwgMHhiNCwgMHg3MCwgMHhiYywgMHhiNCwgMHhhMSwgMHgyNSwgMHg3OSwgMHhmNSwgMHgwNiwgMHg0NSwgMHhjZiwKKwkweGIzLCAweDM0LCAweDM5LCAweGMwLCAweDgyLCAweDQxLCAweDEwLCAweDlkLCAweDNhLCAweDdmLCAweDMwLCAweGE1LAorCTB4ZWQsIDB4N2MsIDB4MTksIDB4ZTgsIDB4MTIsIDB4MjksIDB4YjIsIDB4OTMsIDB4YjUsIDB4NDMsIDB4ZDAsIDB4YTYsCisJMHg2OCwgMHhmZiwgMHhlOCwgMHg4YSwgMHg2ZSwgMHgzMCwgMHg1MiwgMHgwYywgMHhmMywgMHgzYSwgMHhhMCwgMHgzMCwKKwkweGZhLCAweGM3LCAweGU2LCAweDJkLCAweDFmLCAweGRjLCAweGVmLCAweGRjLCAweDc3LCAweDFmLCAweGY5LCAweDQ4LAorCTB4NTEsIDB4OTYsIDB4MWMsIDB4MzQsIDB4NWQsIDB4YjcsIDB4OTksIDB4ODAsIDB4ZjAsIDB4ZGUsIDB4YmQsIDB4ZjcsCisJMHhiYywgMHg3YiwgMHhjZiwgMHgzZCwgMHhkZiwgMHhlNywgMHhkYywgMHhhYiwgMHg1ZiwgMHg1MywgMHhhOSwgMHg4NSwKKwkweGU0LCAweDZmLCAweDJkLCAweGZlLCAweGMyLCAweDdmLCAweGY0LCAweGM3LCAweGI5LCAweGRiLCAweDNlLCAweDdkLAorCTB4NWIsIDB4MWYsIDB4NWUsIDB4MDcsIDB4NTQsIDB4ZGQsIDB4YWYsIDB4NzIsIDB4YmYsIDB4MGYsIDB4N2YsIDB4MjYsCisJMHhmZSwgMHhmYSwgMHhlNCwgMHg3YiwgMHhhMywgMHg5ZiwgMHg4MSwgMHhiZiwgMHgyYiwgMHgxOCwgMHgxYywgMHhmZSwKKwkweDA5LCAweDkxLCAweGIyLCAweDBjLCAweDhjLCAweGY3LCAweDU3LCAweDJlLCAweDVmLCAweDdmLCAweDljLCAweDE3LAorCTB4MGUsIDB4YWYsIDB4NjIsIDB4OWUsIDB4OWIsIDB4YmYsIDB4OWIsIDB4YmYsIDB4OWIsIDB4YmYsIDB4OWIsIDB4YmYsCisJMHg5YiwgMHhiZiwgMHg5YiwgMHhiZiwgMHg5YiwgMHhiZiwgMHhmZiwgMHgzZiwgMHgzZiwgMHg5ZiwgMHgxMywgMHg3MiwKKwkweDg4LCAweDk4LCAweDg1LCAweGZmLCAweDQ4LCAweDU3LCAweGUzLCAweDg5LCAweGExLCAweGE0LCAweDQ1LCAweGJhLAorCTB4MmYsIDB4N2UsIDB4NjUsIDB4MjgsIDB4NjcsIDB4MTEsIDB4MjUsIDB4OGEsIDB4ZGIsIDB4YzMsIDB4MjksIDB4ZmEsCisJMHhiMCwgMHg5YywgMHgzNywgMHgzNSwgMHhlMiwgMHhmZSwgMHg1YiwgMHhlMiwgMHgxZiwgMHgzYywgMHhmZCwgMHhmYSwKKwkweDlkLCAweDkxLCAweGFiLCAweGIzLCAweDNlLCAweGQyLCAweDhkLCAweGY4LCAweGNiLCAweGJhLCAweGIxLCAweDhkLAorCTB4ZjQsIDB4MGUsIDB4N2MsIDB4ZjMsIDB4NWMsIDB4ZjcsIDB4N2YsIDB4YTgsIDB4ZDQsIDB4ZTYsIDB4Y2UsIDB4NzUsCisJMHhhNSwgMHhmYywgMHg3YSwgMHgzNywgMHhlNSwgMHgzNywgMHhjNywgMHg3NSwgMHg1MiwgMHhlMywgMHg1ZCwgMHgzZiwKKwkweDQ4LCAweGZhLCAweDhjLCAweDYxLCAweDVmLCAweGRjLCAweGEwLCAweGY5LCAweDEyLCAweDY1LCAweDBlLCAweDRjLAorCTB4ZjAsIDB4MWEsIDB4YjEsIDB4NzUsIDB4ZjcsIDB4NjIsIDB4MmUsIDB4MmQsIDB4M2UsIDB4M2MsIDB4ZjQsIDB4NjcsCisJMHhkNiwgMHhkMywgMHg2NSwgMHhkNSwgMHhiMiwgMHg3YSwgMHhlNiwgMHgyOCwgMHgzMCwgMHhmMCwgMHg3YywgMHgzZiwKKwkweGM2LCAweDhiLCAweDkxLCAweDFlLCAweGEyLCAweDNiLCAweDQ5LCAweGI1LCAweGYyLCAweDAxLCAweDlmLCAweGE1LAorCTB4NTMsIDB4YjIsIDB4NjQsIDB4NTEsIDB4YWEsIDB4NDQsIDB4ZjQsIDB4NzcsIDB4NDUsIDB4ODUsIDB4OWUsIDB4YjcsCisJMHhkYSwgMHg2OSwgMHhhZSwgMHhmNywgMHg4MywgMHg3MiwgMHgwMiwgMHhiOCwgMHhiYywgMHg2ZCwgMHgwZCwgMHgwZiwKKwkweDhkLCAweDViLCAweDNjLCAweDU3LCAweDdjLCAweDlkLCAweDgzLCAweDZmLCAweDZmLCAweDViLCAweGNlLCAweGQyLAorCTB4NjgsIDB4YjQsIDB4YzgsIDB4N2QsIDB4YmQsIDB4MmQsIDB4ZGMsIDB4ZTcsIDB4OGYsIDB4M2YsIDB4MWMsIDB4N2MsCisJMHhkZSwgMHgwYSwgMHhjOCwgMHhiZSwgMHgxZiwgMHhhNSwgMHg5MiwgMHg5OCwgMHg2ZiwgMHhhYywgMHhjOCwgMHhiMCwKKwkweGNmLCAweGRlLCAweDkxLCAweGIzLCAweDRjLCAweGQ5LCAweDZmLCAweGM1LCAweDkzLCAweDU2LCAweDA4LCAweGZkLAorCTB4MWQsIDB4NzIsIDB4MmMsIDB4YmQsIDB4MmUsIDB4NjcsIDB4NTksIDB4NzIsIDB4YWMsIDB4ODgsIDB4NmYsIDB4N2EsCisJMHg2NSwgMHhmZiwgMHgzYiwgMHhhOSwgMHg5YywgMHgxNSwgMHg5MywgMHhmZCwgMHg1NywgMHg5MywgMHg0OSwgMHhhYiwKKwkweDVmLCAweGY2LCAweDFmLCAweGJlLCAweDJiLCAweDY3LCAweGM1LCAweDY1LCAweGZmLCAweGY3LCAweDgxLCAweDhiLAorCTB4NDEsIDB4YzcsIDB4OGEsIDB4NjEsIDB4ZmMsIDB4MjUsIDB4MzAsIDB4ZmUsIDB4OWEsIDB4NDEsIDB4NmQsIDB4MTksCisJMHg4YywgMHg2MSwgMHhlZiwgMHhiNiwgMHg0ZSwgMHg5NywgMHg3ZCwgMHgyMSwgMHg3YSwgMHhiZCwgMHhmYiwgMHgzMiwKKwkweDY4LCAweDYzLCAweGQwLCAweGQ5LCAweDEyLCAweDI5LCAweDk5LCAweGVlLCAweDEwLCAweDY4LCAweDYyLCAweGQyLAorCTB4YjksIDB4NTIsIDB4MmIsIDB4ZjksIDB4NGUsIDB4ZmEsIDB4YjAsIDB4ZTcsIDB4Y2YsIDB4NTEsIDB4ZDYsIDB4ZDQsCisJMHg2OSwgMHhmZCwgMHg4YywgMHg0MiwgMHg5ZCwgMHg3ZCwgMHg2YiwgMHgyOCwgMHg2MSwgMHhlNCwgMHgyOSwgMHhkNSwKKwkweDhkLCAweDI4LCAweDZlLCAweGQyLCAweDI0LCAweDZkLCAweDY2LCAweDcxLCAweGJkLCAweDhhLCAweDFlLCAweDk1LAorCTB4MjIsIDB4YTEsIDB4MmMsIDB4MjgsIDB4M2MsIDB4NzIsIDB4ZmEsIDB4NWQsIDB4OGUsIDB4MzksIDB4YjEsIDB4MjYsCisJMHhmZiwgMHg4NSwgMHgyOSwgMHgzNSwgMHg3MSwgMHgyYiwgMHgwZCwgMHgxYiwgMHg4YywgMHgwZiwgMHg4MCwgMHgwNSwKKwkweDFmLCAweDc0LCAweDI1LCAweDc5LCAweDJhLCAweDQ0LCAweGM3LCAweGVjLCAweDgwLCAweDkyLCAweDNhLCAweDc1LAorCTB4MzcsIDB4MjUsIDB4NjMsIDB4NjQsIDB4YWEsIDB4ZDQsIDB4MjUsIDB4YmUsIDB4MmQsIDB4MTQsIDB4NDMsIDB4MzQsCisJMHg2ZSwgMHg5MywgMHg5MiwgMHhiNCwgMHg5OSwgMHg1ZSwgMHhlZCwgMHgxOCwgMHg2ZiwgMHgxMywgMHhiMCwgMHhlOCwKKwkweGViLCAweGYwLCAweDUxLCAweDk3LCAweDkxLCAweDIyLCAweDlkLCAweDcxLCAweDQ2LCAweDdmLCAweDUwLCAweDQ5LAorCTB4OGIsIDB4MzksIDB4NDQsIDB4N2YsIDB4NzgsIDB4OGMsIDB4MDIsIDB4NzQsIDB4YmEsIDB4NjgsIDB4NGEsIDB4ZDgsCisJMHg3MiwgMHgzOSwgMHgxOSwgMHgzMywgMHgwMCwgMHgwNywgMHhkYSwgMHhkOSwgMHgyNiwgMHgwZCwgMHhlMywgMHgzOSwKKwkweDZhLCAweGYzLCAweGZhLCAweDIxLCAweGM4LCAweGNjLCAweGI3LCAweDg3LCAweGIyLCAweGQzLCAweDYyLCAweGJlLAorCTB4YjAsIDB4MmYsIDB4Y2UsIDB4ZjMsIDB4NzUsIDB4MDAsIDB4ZWUsIDB4MWQsIDB4ZTAsIDB4YTUsIDB4OTAsIDB4MjYsCisJMHg3OCwgMHg5NSwgMHhhMCwgMHhlYywgMHg4NCwgMHgwMiwgMHg3OSwgMHhjMiwgMHg1MywgMHhkMCwgMHgyZCwgMHgwZCwKKwkweGZjLCAweDM1LCAweGIyLCAweGZhLCAweDE0LCAweGNhLCAweDU5LCAweDliLCAweDI4LCAweDZmLCAweGEwLCAweDVkLAorCTB4YmMsIDB4YTAsIDB4MjYsIDB4ZWQsIDB4NjYsIDB4NGEsIDB4NjksIDB4NjEsIDB4ZWMsIDB4NWYsIDB4YzgsIDB4MGEsCisJMHg4ZCwgMHhlMSwgMHgxYiwgMHhkNSwgMHg2MiwgMHg5OCwgMHg5ZiwgMHg2MSwgMHhlZiwgMHhjMywgMHg4MiwgMHhmZSwKKwkweDRkLCAweGYxLCAweGZkLCAweDc0LCAweDY5LCAweDIyLCAweGFmLCAweDI2LCAweDRiLCAweGVkLCAweGU0LCAweDliLAorCTB4ODksIDB4NDAsIDB4OWEsIDB4YzcsIDB4ZDUsIDB4ZDQsIDB4MTksIDB4OGQsIDB4ZmMsIDB4OTMsIDB4MGEsIDB4NDEsCisJMHgzZSwgMHgwYywgMHg1ZiwgMHhmYywgMHhiOCwgMHhiYSwgMHhiMywgMHg3NCwgMHg0MSwgMHg0ZCwgMHg5NSwgMHhmOCwKKwkweDFiLCAweGMwLCAweDE2LCAweDU1LCAweGQwLCAweDk2LCAweGRmLCAweGI3LCAweDgzLCAweDk2LCAweDM0LCAweGFjLAorCTB4YzYsIDB4NzUsIDB4M2QsIDB4NTEsIDB4NjQsIDB4OTksIDB4ZTUsIDB4NmYsIDB4YzEsIDB4MGYsIDB4ZWMsIDB4ZTUsCisJMHg5YywgMHgwZCwgMHhmZSwgMHgwOCwgMHg3ZSwgMHg4NSwgMHhjMSwgMHhhZiwgMHg2ZiwgMHg4MiwgMHg1ZiwgMHhmZCwKKwkweGUwLCAweDUzLCAweDhjLCAweGRlLCAweDI4LCAweGY1LCAweGQyLCAweDZiLCAweGE1LCAweDFlLCAweDdhLCAweDE1LAorCTB4MzIsIDB4ZjksIDB4NGEsIDB4MjksIDB4NGMsIDB4MmYsIDB4OTcsIDB4M2EsIDB4ZTgsIDB4YTUsIDB4NTIsIDB4ODgsCisJMHhjZSwgMHgwYiwgMHgxZSwgMHhhNiwgMHgyMSwgMHhmZiwgMHg4MiwgMHhhZiwgMHhmYSwgMHgyNiwgMHhmMCwgMHhhNCwKKwkweDFkLCAweDNjLCAweDU5LCAweDBmLCAweDc5LCAweGQ5LCAweDA4LCAweGY5LCAweDliLCAweGVlLCAweGQ2LCAweDY5LAorCTB4YWEsIDB4OWIsIDB4MTIsIDB4NDEsIDB4ZjQsIDB4NmYsIDB4ODksIDB4NmIsIDB4ODIsIDB4NGUsIDB4MWEsIDB4YzYsCisJMHhjNywgMHgyNiwgMHhmYywgMHg5NCwgMHgzMiwgMHg0ZSwgMHhkMywgMHg3YiwgMHg5MywgMHgxYSwgMHg4ZCwgMHg5NSwKKwkweGE2LCAweDM2LCAweDNhLCAweDdjLCAweGUzLCAweGY2LCAweDJjLCAweDVkLCAweDQ0LCAweDVmLCAweGNhLCAweDk4LAorCTB4YTUsIDB4NGIsIDB4ZGIsIDB4NTQsIDB4MWEsIDB4OWQsIDB4ZmUsIDB4MWIsIDB4NGEsIDB4OWUsIDB4MzksIDB4NGQsCisJMHgzZiwgMHhmZSwgMHgzYSwgMHg1MSwgMHgwNiwgMHgzNCwgMHg1MSwgMHhmYiwgMHg3ZSwgMHg1YSwgMHg0ZSwgMHgxOCwKKwkweGEwLCAweDQ1LCAweDVmLCAweGFmLCAweDkwLCAweDA4LCAweGI1LCAweDhmLCAweDc5LCAweDE5LCAweDg2LCAweGFlLAorCTB4NjgsIDB4NGEsIDB4Y2EsIDB4N2UsIDB4MDEsIDB4ZmEsIDB4ZDIsIDB4YWEsIDB4MjQsIDB4YTcsIDB4ODgsIDB4NzIsCisJMHg1MywgMHg2NSwgMHhjYSwgMHhjNSwgMHhmYywgMHhmNCwgMHg5OCwgMHg1MSwgMHhhNiwgMHg3NCwgMHhhYywgMHg4OSwKKwkweGJlLCAweDY4LCAweGI0LCAweGQzLCAweDY4LCAweGVmLCAweDZmLCAweGY4LCAweGRjLCAweDVjLCAweDY1LCAweGJhLAorCTB4ZDQsIDB4OGYsIDB4NzcsIDB4ZWUsIDB4MjMsIDB4OWEsIDB4MTIsIDB4ZWYsIDB4NGUsIDB4N2YsIDB4YmUsIDB4ZTQsCisJMHhhNywgMHg4NCwgMHg5OSwgMHgwZiwgMHg2OSwgMHhmNCwgMHg4ZSwgMHhjZiwgMHhjMSwgMHgyOSwgMHhlMSwgMHg4ZSwKKwkweDgxLCAweDU3LCAweGMzLCAweGIwLCAweDBmLCAweDhlLCAweDBjLCAweDY2LCAweDI3LCAweGQ2LCAweDVjLCAweDRiLAorCTB4ODgsIDB4NmUsIDB4YzAsIDB4MGIsIDB4ZDksIDB4ZDMsIDB4MTgsIDB4OGYsIDB4NjEsIDB4MjUsIDB4NmUsIDB4NTIsCisJMHhhNywgMHhkMCwgMHg4ZCwgMHg3ZSwgMHhjMCwgMHgwYywgMHgyOCwgMHhmYiwgMHg0YSwgMHhjYywgMHg2YiwgMHhiYywKKwkweDE3LCAweDE5LCAweGQ3LCAweGNkLCAweDgwLCAweGQ1LCAweGYwLCAweDRjLCAweDQ4LCAweDljLCAweGJkLCAweDc4LAorCTB4ZjIsIDB4NWMsIDB4OGMsIDB4MjcsIDB4M2YsIDB4N2YsIDB4Y2YsIDB4ODMsIDB4ZTcsIDB4ZTcsIDB4MmIsIDB4ZWYsCisJMHg1MywgMHg5ZSwgMHhmNywgMHg3YywgMHhlOSwgMHg0ZiwgMHgwMywgMHgwZSwgMHg3ZSwgMHg0YywgMHhjZiwgMHgwMSwKKwkweDFhLCAweDlkLCAweDM4LCAweDJjLCAweGQ3LCAweGMyLCAweDdiLCAweDkxLCAweGQ3LCAweDM4LCAweDBkLCAweDNhLAorCTB4MDksIDB4YzgsIDB4MTUsIDB4ZDYsIDB4M2EsIDB4ZWMsIDB4NTksIDB4ZWIsIDB4NDksIDB4Y2YsIDB4NWEsIDB4NGYsCisJMHg3YSwgMHhkNiwgMHhjYSwgMHg4MywgMHhiNiwgMHhiNCwgMHg0ZSwgMHhiNSwgMHhmYywgMHhkMCwgMHg1MSwgMHhlZSwKKwkweDM5LCAweDhlLCAweDM5LCAweDlmLCAweDAzLCAweDVmLCAweGJlLCAweDBhLCAweDk4LCAweDM4LCAweDJkLCAweGRhLAorCTB4YTAsIDB4YzcsIDB4OTQsIDB4NDYsIDB4N2IsIDB4NGQsIDB4N2UsIDB4N2YsIDB4YjEsIDB4ZDUsIDB4YzEsIDB4OGIsCisJMHhkZiwgMHgyZiwgMHg0OCwgMHg5YywgMHg1YSwgMHgxZCwgMHhiOCwgMHhkMiwgMHgxNSwgMHhhMSwgMHhmZiwgMHhmMywKKwkweDI1LCAweGQ2LCAweDRmLCAweDhhLCAweGY5LCAweDJjLCAweDNhLCAweDk0LCAweDhlLCAweGI1LCAweGQzLCAweDk4LAorCTB4YTEsIDB4YzQsIDB4NDYsIDB4N2IsIDB4OWEsIDB4OTksIDB4OGUsIDB4MDksIDB4ZDUsIDB4NmEsIDB4ODUsIDB4MGUsCisJMHg1MCwgMHg1OCwgMHg2NSwgMHhkYiwgMHgyNSwgMHhmMCwgMHg3YiwgMHg0OSwgMHhlMiwgMHg2MSwgMHg3MCwgMHgzYiwKKwkweGEzLCAweDVhLCAweGMxLCAweGJhLCAweDdlLCAweDk2LCAweGRmLCAweDU3LCAweGYwLCAweGNlLCAweDMyLCAweDljLAorCTB4ZDQsIDB4OWMsIDB4YjUsIDB4NWYsIDB4NDUsIDB4OWIsIDB4ZWQsIDB4Y2UsIDB4NjYsIDB4ZDksIDB4NzYsIDB4YzcsCisJMHhmZiwgMHhhMCwgMHhhOSwgMHhiNiwgMHhmZCwgMHgwNSwgMHhiMywgMHhiNiwgMHhlZCwgMHhlYSwgMHg4MiwgMHhkNywKKwkweDY2LCAweGYxLCAweGRlLCAweGMyLCAweGU0LCAweGIzLCAweDU4LCAweDhlLCAweGZjLCAweGMwLCAweDM1LCAweDA2LAorCTB4M2QsIDB4NmMsIDB4OTYsIDB4MzgsIDB4N2MsIDB4NGIsIDB4ZTIsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MzcsIDB4NWEsCisJMHhlMiwgMHg2ZiwgMHgwNCwgMHg0YiwgMHhlYSwgMHhkYSwgMHg0YywgMHg0MywgMHhmNywgMHg3ZCwgMHhhZCwgMHgxOCwKKwkweGJmLCAweGVjLCAweGUzLCAweDc1LCAweGRjLCAweDI3LCAweDI5LCAweDY5LCAweGU4LCAweGM5LCAweGQ4LCAweGI0LAorCTB4NDYsIDB4ZDksIDB4ZDgsIDB4MjYsIDB4MjEsIDB4ZDcsIDB4ZDksIDB4NTgsIDB4ZDUsIDB4MDYsIDB4OGMsIDB4NGUsCisJMHhkNCwgMHhkYiwgMHgwMCwgMHhmZSwgMHg4ZSwgMHg2ZCwgMHg4MCwgMHhhMywgMHhmYiwgMHg2MywgMHhkMywgMHg2YywKKwkweDBiLCAweDFjLCAweGRkLCAweDNmLCAweDM2LCAweGMxLCAweDM2LCAweDQxLCAweGNjLCAweDA5LCAweGZkLCAweDY3LAorCTB4M2IsIDB4ZTAsIDB4ZGEsIDB4MDAsIDB4ZmUsIDB4ODYsIDB4NmQsIDB4ODAsIDB4MGYsIDB4ZjIsIDB4Y2QsIDB4ZjMsCisJMHhiOSwgMHg2YiwgMHg4ZiwgMHhkNywgMHhjZCwgMHgzYiwgMHhjZSwgMHhiNiwgMHg0NSwgMHhkOSwgMHhkOSwgMHhjZCwKKwkweDMwLCAweGM3LCAweGIxLCAweDc2LCAweDgwLCAweDBhLCAweGQzLCAweGNjLCAweGMzLCAweDQ4LCAweGU4LCAweDA4LAorCTB4MWQsIDB4MTcsIDB4MzYsIDB4ZWYsIDB4ZjQsIDB4MDQsIDB4MjUsIDB4MGUsIDB4OWUsIDB4MTgsIDB4YTAsIDB4MzQsCisJMHg2YywgMHhjMCwgMHhkYywgMHhjNCwgMHhiNSwgMHgzMiwgMHhmOCwgMHg3OCwgMHg0NywgMHgxMywgMHg1OSwgMHhiMCwKKwkweDc1LCAweGYwLCAweDkzLCAweGZkLCAweDdlLCAweGYyLCAweGM1LCAweGUzLCAweDkwLCAweGI3LCAweDk4LCAweGYwLAorCTB4NWQsIDB4ZDUsIDB4OWYsIDB4YTYsIDB4ZWQsIDB4YWEsIDB4NjksIDB4MzcsIDB4YzEsIDB4M2YsIDB4NjIsIDB4ZGUsCisJMHhmZSwgMHg5OCwgMHg5MCwgMHg0ZCwgMHhlZiwgMHgyZiwgMHgwOSwgMHgxYiwgMHg5NCwgMHg4YywgMHg3ZCwgMHgwOCwKKwkweGY5LCAweDc1LCAweDY5LCAweGU0LCAweGVhLCAweDFmLCAweGRiLCAweGZhLCAweDJiLCAweDFlLCAweDFmLCAweGIyLAorCTB4MDUsIDB4NzYsIDB4ZGYsIDB4ODQsIDB4M2MsIDB4YjksIDB4NzYsIDB4OWYsIDB4ZWQsIDB4NzEsIDB4ODgsIDB4NmQsCisJMHgyNiwgMHhmNCwgMHg4ZCwgMHg2ZCwgMHg3MCwgMHg4MCwgMHhkNCwgMHgxOSwgMHg0ZCwgMHhkYSwgMHg2OSwgMHg1ZCwKKwkweGRhLCAweGU5LCAweDAwLCAweDZjLCAweDM0LCAweGI3LCAweDBkLCAweGQ5LCAweDM2LCAweDQ1LCAweDFiLCAweGY2LAorCTB4MWEsIDB4ZjYsIDB4NzAsIDB4NzcsIDB4M2EsIDB4MzUsIDB4YzEsIDB4ZmUsIDB4MTAsIDB4YmUsIDB4N2IsIDB4ODYsCisJMHg3NSwgMHhmOCwgMHhkYiwgMHg0MywgMHgyMywgMHhkMywgMHhjMiwgMHgwNywgMHhiMCwgMHhmZiwgMHg4MCwgMHg2NSwKKwkweDY2LCAweDFiLCAweGNlLCAweGI2LCAweDFjLCAweGZiLCAweDJlLCAweDYyLCAweGRkLCAweDhhLCAweGFkLCAweDY0LAorCTB4MzksIDB4ZjEsIDB4ZTIsIDB4YzUsIDB4MzgsIDB4YWQsIDB4MjEsIDB4ZjUsIDB4YTQsIDB4NDMsIDB4NmIsIDB4MzUsCisJMHhmZSwgMHhhOCwgMHg0NiwgMHgyZCwgMHg0YywgMHg2MywgMHhjNiwgMHg3ZiwgMHgyYiwgMHg3MCwgMHhlNiwgMHg3ZCwKKwkweGZkLCAweDRmLCAweGUwLCAweGNjLCAweGViLCAweGQ2LCAweGUzLCAweDRkLCAweDdhLCAweDZiLCAweGZjLCAweGFjLAorCTB4ZmUsIDB4ZjAsIDB4MzMsIDB4YTQsIDB4MzcsIDB4YzcsIDB4Y2YsIDB4ZDIsIDB4YmYsIDB4NTgsIDB4NzQsIDB4OWYsCisJMHgwZSwgMHgzZiwgMHhkYiwgMHhhZCwgMHhjMCwgMHhjZiwgMHgxNiwgMHhhMSwgMHhlZiwgMHg1MywgMHgzYSwgMHgxZCwKKwkweDNjLCAweDE1LCAweGM5LCAweGZjLCAweDJiLCAweDQ1LCAweDYxLCAweDNmLCAweDc2LCAweGQwLCAweGM4LCAweDk0LAorCTB4NDIsIDB4N2EsIDB4MTcsIDB4YjUsIDB4YzMsIDB4N2YsIDB4ZjQsIDB4MzcsIDB4NjEsIDB4ZmUsIDB4NWQsIDB4NDQsCisJMHg5YiwgMHgxZCwgMHhiZiwgMHhkOSwgMHgxNSwgMHgxZSwgMHgwNSwgMHhmZiwgMHhkMywgMHgyZiwgMHg3ZSwgMHgwNSwKKwkweGRmLCAweDNjLCAweDRkLCAweDA3LCAweGE3LCAweDBlLCAweDJiLCAweDM5LCAweGZiLCAweDA4LCAweGUwLCAweDk3LAorCTB4ODMsIDB4ZDUsIDB4MDEsIDB4OWIsIDB4MDcsIDB4ZWMsIDB4OTcsIDB4MzEsIDB4ZWYsIDB4ZDMsIDB4YTQsIDB4ZGYsCisJMHgxZSwgMHgxOSwgMHg0OCwgMHgyOCwgMHhjMCwgMHhlMywgMHg0NSwgMHgwMSwgMHgyZiwgMHg3ZCwgMHg3MSwgMHg5NywKKwkweGIxLCAweDUzLCAweGYwLCAweDNmLCAweDQwLCAweGVmLCAweDE1LCAweDJmLCAweDgwLCAweGJlLCAweGJkLCAweGYwLAorCTB4MzksIDB4OTEsIDB4NjcsIDB4NjEsIDB4OTMsIDB4ZTEsIDB4OGYsIDB4MjIsIDB4NTcsIDB4MzEsIDB4MmQsIDB4N2MsCisJMHgxMSwgMHgyOSwgMHgwZiwgMHg3NiwgMHhhNywgMHg0MSwgMHhlZiwgMHgzOCwgMHhmYywgMHhkMywgMHgwMCwgMHhmYywKKwkweDUzLCAweDBjLCAweGJlLCAweGE5LCAweDA3LCAweDdlLCAweGM5LCAweDgyLCAweDVmLCAweDBhLCAweDgzLCAweDFmLAorCTB4MDYsIDB4Y2QsIDB4YzIsIDB4NDcsIDB4Y2QsIDB4NDIsIDB4ZmUsIDB4ZTcsIDB4NjYsIDB4NDgsIDB4MTksIDB4MDQsCisJMHhhZCwgMHhjZiwgMHhjMSwgMHgzZiwgMHgyNiwgMHg2MywgMHg3NywgMHg0MiwgMHhjZiwgMHgyMiwgMHgxNywgMHg2NiwKKwkweGQ1LCAweDQxLCAweGNhLCAweGMxLCAweDlmLCAweDc3LCAweDZlLCAweDhiLCAweDYyLCAweGJkLCAweDI2LCAweDRhLAorCTB4ODQsIDB4NWMsIDB4MWQsIDB4ZTUsIDB4ZGYsIDB4N2UsIDB4ODUsIDB4YWMsIDB4N2YsIDB4MDYsIDB4ZWYsIDB4MjIsCisJMHg2MSwgMHhhMiwgMHgzZCwgMHg5NCwgMHhiNSwgMHhhMywgMHg0NiwgMHhhNywgMHhkYSwgMHgwMywgMHgxOCwgMHg2ZSwKKwkweDg3LCAweDk1LCAweDAzLCAweDUzLCAweDExLCAweDA1LCAweGZiLCAweDAzLCAweGNkLCAweDI3LCAweDYwLCAweGViLAorCTB4Y2IsIDB4MzQsIDB4MWUsIDB4NjMsIDB4M2QsIDB4MjksIDB4ZDMsIDB4ZjMsIDB4YjEsIDB4YzgsIDB4NDAsIDB4OWUsCisJMHg1YSwgMHhlOSwgMHg5OCwgMHgzOSwgMHgyMSwgMHg3YywgMHhiYywgMHgxNiwgMHgzZiwgMHgyMSwgMHg3NCwgMHgyYywKKwkweDY3LCAweGUxLCAweDU5LCAweGVjLCAweDU0LCAweGIyLCAweDUzLCAweGJjLCAweDdlLCAweDE0LCAweDVhLCAweGVlLAorCTB4YzcsIDB4OTMsIDB4ZTcsIDB4MDcsIDB4ZGQsIDB4ZmEsIDB4NDksIDB4MzksIDB4ZDgsIDB4OWQsIDB4ODcsIDB4NzcsCisJMHg4OCwgMHgxOCwgMHg4YiwgMHg1OCwgMHgzOSwgMHgzNSwgMHgxMSwgMHgwZCwgMHg0NSwgMHg1NSwgMHg4ZCwgMHg4NiwKKwkweDM1LCAweDg1LCAweDQ2LCAweDYxLCAweDZmLCAweGQyLCAweGIxLCAweGZmLCAweDJjLCAweDFmLCAweDMzLCAweDc5LAorCTB4YmMsIDB4OTksIDB4YmUsIDB4MmEsIDB4ZmMsIDB4MGQsIDB4ZDYsIDB4MmUsIDB4NGMsIDB4NjMsIDB4NWQsIDB4M2YsCisJMHhmOCwgMHhjYiwgMHhlYiwgMHhmMiwgMHgzYywgMHg2OCwgMHhjMywgMHhmNiwgMHg2YiwgMHg1NiwgMHhlNCwgMHhkOSwKKwkweDNjLCAweGVkLCAweDAwLCAweDZkLCAweGQ5LCAweDY2LCAweGMxLCAweDNlLCAweDBjLCAweDYwLCAweGVkLCAweDVlLAorCTB4ZDgsIDB4NGYsIDB4M2MsIDB4OTMsIDB4YmQsIDB4MWMsIDB4MDcsIDB4MDUsIDB4NjgsIDB4ZDgsIDB4NjQsIDB4NzksCisJMHhkNCwgMHhlNSwgMHg5OCwgMHhlOSwgMHgxOSwgMHhmMywgMHhjYiwgMHhiMSwgMHgyMCwgMHhmZSwgMHhlMCwgMHg3ZiwKKwkweDRkLCAweDk2LCAweDE5LCAweDZlLCAweDczLCAweDRjLCAweGM2LCAweDM0LCAweDA5LCAweGQzLCAweGRjLCAweDY0LAorCTB4MDIsIDB4MzQsIDB4OGIsIDB4OWMsIDB4NGQsIDB4MTAsIDB4ZDMsIDB4MGMsIDB4NDYsIDB4N2IsIDB4N2YsIDB4ODIsCisJMHhiZSwgMHg2NCwgMHhhZiwgMHhmNywgMHgzYiwgMHhiNiwgMHhiMCwgMHg1NSwgMHg0OSwgMHhjMSwgMHgxNywgMHhhOCwKKwkweDU2LCAweDBiLCAweDdjLCAweDQ1LCAweDk4LCAweDVlLCAweDE1LCAweGIwLCAweDY0LCAweGE4LCAweGYxLCAweDY4LAorCTB4ZTgsIDB4NGIsIDB4NzQsIDB4YWIsIDB4YjAsIDB4MTEsIDB4MDksIDB4YzMsIDB4NGIsIDB4ZTMsIDB4ZmYsIDB4NTIsCisJMHhjOSwgMHg3MiwgMHhiZiwgMHg2OSwgMHhhNSwgMHhlYywgMHgyMCwgMHhmMywgMHg4OSwgMHhkNywgMHgzMywgMHg2OCwKKwkweGFlLCAweGU0LCAweGJjLCAweGZiLCAweDEwLCAweGEzLCAweDE2LCAweDYwLCAweDZiLCAweGNlLCAweDRmLCAweGFhLAorCTB4ZjQsIDB4ZjgsIDB4MWQsIDB4ZjAsIDB4NjUsIDB4YjEsIDB4NmQsIDB4NTgsIDB4Y2IsIDB4YzQsIDB4NzgsIDB4MWUsCisJMHg2ZCwgMHgxNSwgMHg2ZCwgMHhlOCwgMHg5OSwgMHgxMSwgMHgwMiwgMHg4ZiwgMHhiOSwgMHg5ZiwgMHhlMSwgMHg0YywKKwkweGZjLCAweGJkLCAweGNmLCAweGIxLCAweDc1LCAweDNlLCAweGFiLCAweGRlLCAweDRhLCAweDE0LCAweDY0LCAweDdhLAorCTB4YzUsIDB4NDAsIDB4MmIsIDB4Y2IsIDB4NTAsIDB4ZDUsIDB4NmQsIDB4YzIsIDB4NWYsIDB4M2IsIDB4YjYsIDB4YzQsCisJMHg4MiwgMHgyZSwgMHhjMiwgMHhlNiwgMHhmNiwgMHg3OSwgMHg3NSwgMHg5MSwgMHhlMywgMHgwOSwgMHg1NywgMHgxNywKKwkweDIzLCAweGExLCAweDg0LCAweDBhLCAweDViLCAweGRjLCAweGE3LCAweGQxLCAweDA5LCAweGQxLCAweDU2LCAweDI4LAorCTB4MzEsIDB4MTgsIDB4MDksIDB4MmQsIDB4YTgsIDB4MWMsIDB4NGIsIDB4MzMsIDB4NmMsIDB4MTgsIDB4ZjEsIDB4NGEsCisJMHg0MCwgMHhjMiwgMHgyMiwgMHg5ZSwgMHhiMywgMHhkZCwgMHg5OCwgMHgzMCwgMHg4NCwgMHg3ZSwgMHg1MywgMHhmNCwKKwkweDFmLCAweGFiLCAweGU4LCAweGE4LCAweDEzLCAweGZmLCAweGE5LCAweDg4LCAweDExLCAweDBiLCAweDg4LCAweDExLAorCTB4NTMsIDB4NDIsIDB4NDcsIDB4OGQsIDB4MDQsIDB4NzIsIDB4MDQsIDB4ZDAsIDB4ZGMsIDB4ZDEsIDB4Y2YsIDB4NDIsCisJMHg5MSwgMHg3MSwgMHhjOSwgMHhiMSwgMHg1YywgMHgwZSwgMHgwMCwgMHg5OSwgMHgxMywgMHg4ZSwgMHg3ZCwgMHhhNCwKKwkweDNjLCAweGM3LCAweDkxLCAweGEzLCAweGVhLCAweDUzLCAweDM0LCAweDVjLCAweDYwLCAweDNmLCAweDhlLCAweDNmLAorCTB4OWIsIDB4NmQsIDB4MmQsIDB4ZWMsIDB4YTMsIDB4ZjAsIDB4YzUsIDB4NTEsIDB4ZjAsIDB4MzksIDB4MGYsIDB4MWEsCisJMHhhYywgMHg5NywgMHg3NCwgMHhkZCwgMHg0ZiwgMHgwNywgMHhlYywgMHgzZCwgMHhhMCwgMHg3OSwgMHg5YywgMHg0NiwKKwkweDRlLCAweDhkLCAweGIwLCAweGNjLCAweGY2LCAweDE0LCAweDI4LCAweGQyLCAweDczLCAweDhjLCAweGI2LCAweDFiLAorCTB4NzMsIDB4MmMsIDB4ZGYsIDB4ODMsIDB4ZTUsIDB4MWQsIDB4ZTAsIDB4ODUsIDB4ZDAsIDB4NTEsIDB4YzgsIDB4MjAsCisJMHg2NSwgMHgwYiwgMHgyMywgMHhmNCwgMHg1OCwgMHg4OSwgMHhmYiwgMHhmMiwgMHhhMCwgMHgxZCwgMHhlMiwgMHhkYSwKKwkweGZlLCAweGZkLCAweDUyLCAweGNlLCAweDMxLCAweDlmLCAweGU2LCAweGNlLCAweDM3LCAweDIyLCAweGU3LCAweDYzLAorCTB4MzgsIDB4ODYsIDB4ZTEsIDB4NmYsIDB4YWEsIDB4ZjMsIDB4ZWUsIDB4MTQsIDB4M2MsIDB4OGQsIDB4MTgsIDB4NWQsCisJMHg2YSwgMHg3OSwgMHg4NywgMHgxZiwgMHhlMywgMHhjZiwgMHhmNywgMHhmMywgMHgzYiwgMHhlNiwgMHg4MSwgMHhlZiwKKwkweDZmLCAweGI2LCAweGY2LCAweDAwLCAweDc2LCAweDEwLCAweDczLCAweGZhLCAweGE5LCAweGIzLCAweGRkLCAweGM1LAorCTB4MzcsIDB4ODEsIDB4YjUsIDB4ZDksIDB4Y2YsIDB4MzEsIDB4OWYsIDB4MWYsIDB4YTEsIDB4ZWMsIDB4YTksIDB4N2MsCisJMHg4ZiwgMHgwYSwgMHgxOSwgMHg5YiwgMHhjZCwgMHgyOCwgMHhlNCwgMHhiNywgMHgxZSwgMHhhNiwgMHhkYywgMHhhOSwKKwkweGEzLCAweDZjLCAweDM3LCAweDQwLCAweGFiLCAweDNkLCAweGI0LCAweDZiLCAweDIyLCAweGQyLCAweDczLCAweDgwLAorCTB4MzQsIDB4YjEsIDB4Y2UsIDB4NWIsIDB4MjQsIDB4ZTgsIDB4MWYsIDB4OWIsIDB4MTUsIDB4YmUsIDB4MjAsIDB4NDMsCisJMHhlOSwgMHg4OSwgMHhlZCwgMHhhMSwgMHg0YiwgMHhlOCwgMHgxYiwgMHgxZSwgMHg4YywgMHg4NCwgMHgxNywgMHhlOCwKKwkweDA5LCAweGQwLCAweGU1LCAweDIzLCAweGY4LCAweDIyLCAweGFiLCAweDY3LCAweDBjLCAweDNhLCAweDg0LCAweDljLAorCTB4MGEsIDB4ZWIsIDB4OGYsIDB4NGEsIDB4ZGEsIDB4ZTAsIDB4YmIsIDB4Y2MsIDB4NTEsIDB4ZDAsIDB4OGYsIDB4ZjIsCisJMHgwZSwgMHg0ZCwgMHg5OSwgMHg5ZSwgMHg0YywgMHhjYiwgMHhhZiwgMHhjMCwgMHhmNiwgMHgxYywgMHgxMSwgMHhiMSwKKwkweDRiLCAweDU2LCAweGQwLCAweGVlLCAweGQyLCAweDA2LCAweDQ3LCAweDBlLCAweDYwLCAweDhiLCAweDMwLCAweGVmLAorCTB4ZTUsIDB4NDEsIDB4ODUsIDB4YjYsIDB4MjAsIDB4NGUsIDB4M2YsIDB4MjQsIDB4NzgsIDB4ZWIsIDB4YTMsIDB4N2QsCisJMHg2NiwgMHhkNCwgMHhkOCwgMHg0NywgMHhmMywgMHg3ZSwgMHgyNywgMHg1NiwgMHhjMCwgMHgzYywgMHgzZCwgMHhmNywKKwkweDYwLCAweDBmLCAweDkwLCAweDUzLCAweGZiLCAweGViLCAweGViLCAweGE4LCAweDJkLCAweDEyLCAweDRlLCAweGE4LAorCTB4MDksIDB4ZmEsIDB4OTMsIDB4ZDIsIDB4ZGQsIDB4ZTQsIDB4ZTgsIDB4NzcsIDB4MmIsIDB4ZGIsIDB4N2UsIDB4ZjAsCisJMHhiMCwgMHhkMywgMHg2OSwgMHg1YiwgMHg3OCwgMHgxNiwgMHgzYSwgMHhiMSwgMHgxZSwgMHhlMywgMHhmZSwgMHhhYywKKwkweGMwLCAweDdkLCAweDg0LCAweGJhLCAweGExLCAweDZiLCAweDIyLCAweDhmLCAweDM5LCAweDUxLCAweDhiLCAweDE3LAorCTB4ZjMsIDB4YmMsIDB4OWUsIDB4Y2YsIDB4NWYsIDB4YzYsIDB4M2MsIDB4ZGMsIDB4Y2YsIDB4NzAsIDB4NzgsIDB4MmYsCisJMHgzYywgMHg0MSwgMHgyMywgMHg5MCwgMHhjNywgMHg1YywgMHg3ZiwgMHg1NywgMHg2OCwgMHgwYywgMHhkZiwgMHhhNCwKKwkweDRhLCAweDRkLCAweDc0LCAweDU0LCAweGUzLCAweGYxLCAweDQ4LCAweDM4LCAweGFmLCAweDFlLCAweDQyLCAweGRjLAorCTB4ZjMsIDB4YjgsIDB4ZWEsIDB4YjcsIDB4N2UsIDB4ZTYsIDB4NjcsIDB4YmYsIDB4ZTMsIDB4YjcsIDB4YWUsIDB4MjksCisJMHhkNSwgMHhiOSwgMHgxMCwgMHg4NywgMHg4YSwgMHhkYywgMHg2MCwgMHg0MSwgMHgxOSwgMHgyYywgMHg1ZCwgMHg1MiwKKwkweDkyLCAweDg1LCAweDZiLCAweDRhLCAweGFhLCAweGM0LCAweDMwLCAweDhlLCAweGNlLCAweDY3LCAweGNmLCAweDc0LAorCTB4ODIsIDB4NGUsIDB4MWYsIDB4ODksIDB4ZWYsIDB4ZTYsIDB4N2EsIDB4OGYsIDB4NTAsIDB4ZWEsIDB4ZDQsIDB4YWQsCisJMHg5NCwgMHg5ZSwgMHhlNiwgMHhiYywgMHgzNCwgMHgwMiwgMHg3YywgMHgzZiwgMHgyYSwgMHhlNywgMHg2MiwgMHg0MSwKKwkweGNhLCAweDlkLCAweGUxLCAweDMxLCAweGI2LCAweDVmLCAweGQ2LCAweGQ1LCAweDQ1LCAweDFmLCAweGVmLCAweDlmLAorCTB4ZjksIDB4NmYsIDB4NTIsIDB4YzEsIDB4N2UsIDB4NTMsIDB4ZDIsIDB4OGYsIDB4ZGYsIDB4N2QsIDB4OWMsIDB4OTMsCisJMHhlMSwgMHhmNywgMHg2ZiwgMHg4NiwgMHhkMywgMHhiNywgMHg5NSwgMHgxNiwgMHgzNiwgMHhkYywgMHhjOCwgMHgzZSwKKwkweDU3LCAweGIzLCAweGM3LCAweDQ3LCAweDdkLCAweDdlLCAweDZiLCAweDdiLCAweDEzLCAweGI1LCAweDg0LCAweDgwLAorCTB4YzMsIDB4NGEsIDB4N2IsIDB4NjQsIDB4OTgsIDB4NWYsIDB4ODcsIDB4MWMsIDB4YjAsIDB4NGQsIDB4ZDksIDB4MGQsCisJMHg3ZSwgMHg1YSwgMHg2YywgMHhjMywgMHg2MCwgMHg5MywgMHg3NiwgMHg1MywgMHhhZSwgMHhjNCwgMHhiMiwgMHgxZCwKKwkweDM1LCAweDMyLCAweDkwLCAweGIxLCAweDM0LCAweDc1LCAweGIxLCAweDFlLCAweGI5LCAweGJhLCAweDA3LCAweGRiLAorCTB4OWQsIDB4ODcsIDB4ZWQsIDB4NDYsIDB4M2MsIDB4NjQsIDB4NTMsIDB4YmUsIDB4MjksIDB4Y2UsIDB4MzYsIDB4YmMsCisJMHgwYiwgMHhiMiwgMHg4NSwgMHhiZSwgMHg2MiwgMHg1NSwgMHgxNywgMHg3NywgMHgyZCwgMHhjMSwgMHg1ZCwgMHg1YiwKKwkweGMyLCAweGEzLCAweDAyLCAweGQ1LCAweGUyLCAweDNmLCAweDRiLCAweDhjLCAweGZmLCAweDVmLCAweDAwLCAweGZmLAorCTB4Y2YsIDB4MDEsIDB4N2YsIDB4YzYsIDB4YTksIDB4MzEsIDB4ZmUsIDB4M2IsIDB4MmIsIDB4ZjgsIDB4MzMsIDB4MGMsCisJMHhmYywgMHgxYywgMHg2NCwgMHhmMSwgMHgwZCwgMHhlOCwgMHhlMiwgMHg2YiwgMHgzNiwgMHg3YywgMHg5ZCwgMHgwZCwKKwkweGZmLCAweDY3LCAweGMzLCAweGRmLCAweGQ5LCAweGYwLCAweDhiLCAweDM2LCAweDdjLCAweDFlLCAweGY2LCAweDc0LAorCTB4MGUsIDB4MzYsIDB4ZTksIDB4YWMsIDB4OWQsIDB4MzQsIDB4NTgsIDB4OWYsIDB4OTIsIDB4MzEsIDB4ZjYsIDB4OWQsCisJMHhiYiwgMHg2NSwgMHhkZSwgMHgxZCwgMHg5MiwgMHg3MSwgMHhmNywgMHhhNywgMHg2NCwgMHgyYywgMHg3YiwgMHgwMCwKKwkweGIxLCAweGVjLCAweDY2LCAweDFhLCAweGVkLCAweGUxLCAweDljLCAweGE0LCAweDA1LCAweGNmLCAweDc1LCAweDc4LAorCTB4MjIsIDB4NmUsIDB4ZWQsIDB4NDksIDB4NDgsIDB4YmQsIDB4ZmMsIDB4MGMsIDB4NjIsIDB4NWMsIDB4ZDgsIDB4ZmYsCisJMHgxZSwgMHhlNCwgMHgzNywgMHgxOSwgMHhjNCwgMHg2YSwgMHg1NiwgMHgxZiwgMHhjNywgMHhlNSwgMHhiMCwgMHg2NSwKKwkweGVmLCAweDM3LCAweDM5LCAweDc2LCAweGZlLCAweDJlLCAweDE5LCAweDAzLCAweGJiLCAweGVkLCAweDU2LCAweGMwLAorCTB4YTQsIDB4ZDEsIDB4ZDcsIDB4OGEsIDB4NmYsIDB4N2UsIDB4MDcsIDB4YjIsIDB4ZGYsIDB4ODYsIDB4ZjYsIDB4Y2UsCisJMHgzYSwgMHgxOCwgMHhlNCwgMHhiMywgMHg1NiwgMHgxNiwgMHg3ZCwgMHgxMSwgMHhjMCwgMHhiNCwgMHg2MSwgMHg5ZCwKKwkweDBlLCAweGI0LCAweGY3LCAweGEwLCAweDdkLCAweDhiLCAweGIzLCAweDhlLCAweGYxLCAweDJiLCAweDY4LCAweGE3LAorCTB4ZWEsIDB4YmUsIDB4ZDksIDB4OGEsIDB4YmUsIDB4NGMsIDB4NWQsIDB4ZGYsIDB4OWIsIDB4ZTgsIDB4NGIsIDB4YTIsCisJMHg2ZiwgMHg1MSwgMHg3ZSwgMHg5NywgMHg0NywgMHgzYiwgMHg1MiwgMHgwNywgMHhiMywgMHg4OCwgMHgzZSwgMHhjNiwKKwkweGYxLCAweDViLCAweDc4LCAweGRlLCAweDQ3LCAweGEzLCAweDE5LCAweDhlLCAweDAzLCAweGRjLCAweGIxLCAweGRjLAorCTB4N2EsIDB4NmEsIDB4ZTMsIDB4ZGMsIDB4ZjcsIDB4NDMsIDB4MjEsIDB4M2IsIDB4ZjMsIDB4ZDIsIDB4NDYsIDB4YTcsCisJMHgyNywgMHhkOCwgMHg0ZiwgMHg4YywgMHgyMCwgMHhlZSwgMHhlMSwgMHg3MSwgMHhlMSwgMHg5YywgMHgzYywgMHhmZCwKKwkweDFmLCAweDAwLCAweGY2LCAweDYxLCAweDhjLCAweDIxLCAweDU2LCAweGI3LCAweGNiLCAweDRkLCAweDhkLCAweGM3LAorCTB4MWYsIDB4YzUsIDB4ZjgsIDB4NWYsIDB4Y2EsIDB4NmYsIDB4MmIsIDB4NzMsIDB4MDMsIDB4ZmUsIDB4MWIsIDB4NzUsCisJMHg3ZCwgMHg2YSwgMHhiMCwgMHhiNiwgMHhiZCwgMHhkNiwgMHhmMywgMHhiZSwgMHg0ZCwgMHg1ZiwgMHhmYSwgMHhmZCwKKwkweDQ4LCAweDFkLCAweGZjLCAweGVmLCAweDZlLCAweGE4LCAweDZkLCAweDNmLCAweGM1LCAweGRmLCAweDIwLCAweDg3LAorCTB4NzAsIDB4ZGIsIDB4MDksIDB4YzgsIDB4MWQsIDB4ZGIsIDB4YTQsIDB4ZmEsIDB4NzksIDB4M2UsIDB4NmIsIDB4ZDQsCisJMHhmNiwgMHg2ZCwgMHgzMiwgMHg2YiwgMHhkYiwgMHgxYywgMHgyNywgMHgzMSwgMHg1YywgMHgwOCwgMHhmMiwgMHhkZSwKKwkweGExLCAweGVjLCAweGIyLCAweDdmLCAweDEzLCAweGUzLCAweDYxLCAweGU1LCAweDVlLCAweGRiLCAweDhiLCAweDY3LAorCTB4NDgsIDB4ZTYsIDB4NDYsIDB4ZTEsIDB4NGEsIDB4Y2MsIDB4M2IsIDB4NWYsIDB4MGEsIDB4NDAsIDB4YWUsIDB4M2UsCisJMHgwZiwgMHg5ZSwgMHg3MywgMHhkYywgMHg1MywgMHhkNSwgMHhmMSwgMHhmNywgMHg2OCwgMHgzOSwgMHgxZCwgMHg2NywKKwkweDFmLCAweGMwLCAweDMxLCAweGZlLCAweDM2LCAweDExLCAweDFmLCAweGZiLCAweGUyLCAweDRmLCAweDcwLCAweDBjLAorCTB4ZjYsIDB4YjQsIDB4ZTMsIDB4NWIsIDB4MmMsIDB4ZjgsIDB4NDMsIDB4YjQsIDB4NGIsIDB4N2UsIDB4YzcsIDB4NmUsCisJMHgyMiwgMHg5ZiwgMHhjOCwgMHgxNiwgMHhkOCwgMHg5ZiwgMHhiMSwgMHgwZiwgMHg4OSwgMHhjMCwgMHg0ZSwgMHhiMywKKwkweDFmLCAweGZkLCAweDI0LCAweDdkLCAweGM2LCAweDVkLCAweGNkLCAweDZjLCAweGZiLCAweDM0LCAweGViLCAweDA1LAorCTB4YzQsIDB4MGIsIDB4MWMsIDB4ZTcsIDB4YjEsIDB4ZWQsIDB4YzYsIDB4N2IsIDB4ZDEsIDB4OGQsIDB4NTcsIDB4ZWUsCisJMHhkNywgMHhjOCwgMHhhYSwgMHhmYSwgMHgxMSwgMHg2NywgMHg4ZiwgMHg1YiwgMHg1OSwgMHgzNywgMHg1NiwgMHhiMSwKKwkweGVmLCAweGM2LCAweGI2LCAweGVkLCAweGM3LCAweDc1LCAweGI2LCAweGUxLCAweGIyLCAweGIwLCAweDBkLCAweDBmLAorCTB4NmEsIDB4N2UsIDB4ZWIsIDB4ZjcsIDB4OWIsIDB4MWQsIDB4NzksIDB4NmQsIDB4NmMsIDB4MWIsIDB4ZWUsIDB4YWQsCisJMHhkOCwgMHgwNiwgMHg1NywgMHg1ZSwgMHhiZCwgMHg3OSwgMHhlYiwgMHgwZiwgMHhjMCwgMHgxYiwgMHgwYiwgMHhiYywKKwkweGE5LCAweGFmLCAweGQ1LCAweDcwLCAweDhlLCAweGUyLCAweDg3LCAweDFmLCAweGUyLCAweDE4LCAweDkxLCAweDczLAorCTB4ZDksIDB4MTgsIDB4ZTUsIDB4NjIsIDB4NDUsIDB4YzQsIDB4NmEsIDB4OTEsIDB4ZDksIDB4ZDksIDB4NGEsIDB4OGUsCisJMHhmNSwgMHgzNSwgMHg2OSwgMHhiYiwgMHg2YiwgMHhlMiwgMHgyMiwgMHg3YSwgMHhiYywgMHg3OCwgMHgwOSwgMHhmOCwKKwkweDczLCAweGJjLCAweGE1LCAweDQ5LCAweDFiLCAweGMxLCAweGZkLCAweGUzLCAweDEyLCAweDQ3LCAweDdlLCAweGU3LAorCTB4M2EsIDB4MWUsIDB4N2MsIDB4NjksIDB4ZjEsIDB4NDcsIDB4ZTAsIDB4MTUsIDB4YzcsIDB4N2QsIDB4NTEsIDB4MjcsCisJMHhkZSwgMHhhYiwgMHg4OSwgMHhhOSwgMHhkNywgMHhmOCwgMHhjOSwgMHhlMiwgMHg3OCwgMHg4OSwgMHg2MSwgMHg3NCwKKwkweDE5LCAweDJmLCAweDA1LCAweDY0LCAweDVlLCAweDYzLCAweGM4LCAweDNjLCAweDg3LCAweDYzLCAweDZkLCAweGFlLAorCTB4YjEsIDB4ZDYsIDB4YzcsIDB4NTAsIDB4MGIsIDB4NDMsIDB4YzEsIDB4NmQsIDB4Y2MsIDB4MTMsIDB4OGUsIDB4YTEsCisJMHhkYSwgMHgyOCwgMHgzOSwgMHhlMywgMHhjNCwgMHg1MCwgMHg0ZSwgMHg5ZCwgMHhjZCwgMHhjZCwgMHg3MSwgMHg1YywKKwkweDVjLCAweGQ5LCAweDBmLCAweGVmLCAweGMwLCAweDNlLCAweDQ1LCAweDllLCAweDE0LCAweDc0LCAweGVhLCAweDdmLAorCTB4MWEsIDB4ZWMsIDB4ZjYsIDB4NTEsIDB4ZjQsIDB4OGYsIDB4YmEsIDB4ZmQsIDB4OWUsIDB4NWMsIDB4YzMsIDB4YzUsCisJMHg4NSwgMHg3ZCwgMHhiZCwgMHgxYiwgMHhkMywgMHhlZCwgMHg5NiwgMHgzMSwgMHgxZCwgMHg2MiwgMHgxOCwgMHhkYiwKKwkweGM5LCAweGJiLCAweGY2LCAweDE2LCAweDMzLCAweGU4LCAweGUzLCAweDc1LCAweDExLCAweDFiLCAweDEyLCAweGM3LAorCTB4NDksIDB4OTAsIDB4YWYsIDB4ZmQsIDB4OTEsIDB4NTAsIDB4NTgsIDB4YWQsIDB4YzcsIDB4YWIsIDB4NzUsIDB4YTEsCisJMHgxNiwgMHhhZiwgMHg0MSwgMHhmMSwgMHhkZCwgMHhmOCwgMHg5MiwgMHhlZiwgMHg0OCwgMHhjNCwgMHg5MiwgMHhlMywKKwkweGY2LCAweDEwLCAweGU4LCAweGM1LCAweGY4LCAweGI5LCAweGJhLCAweGUxLCAweGM2LCAweGM5LCAweDhjLCAweGQzLAorCTB4M2YsIDB4ODIsIDB4YzYsIDB4YmIsIDB4MTUsIDB4ZmUsIDB4N2UsIDB4Y2MsIDB4ZGUsIDB4MmYsIDB4ZTgsIDB4OTYsCisJMHgxNSwgMHhiOCwgMHgwZSwgMHg3YiwgMHg3MCwgMHgxZCwgMHg5MSwgMHhiOCwgMHhiMiwgMHgyZSwgMHhiMCwgMHg3ZSwKKwkweDc4LCAweDZiLCAweDlhLCAweGE2LCAweGQ4LCAweDFiLCAweDcwLCAweDBlLCAweGYzLCAweGI5LCAweGI5LCAweDZhLAorCTB4MmQsIDB4MGMsIDB4ZjksIDB4YjYsIDB4YzEsIDB4MWYsIDB4MDIsIDB4ZDcsIDB4YWMsIDB4ODgsIDB4NDMsIDB4MDMsCisJMHgwYiwgMHhmNSwgMHgzNCwgMHgxYywgMHhjNywgMHg1YSwgMHg4OCwgMHhkYiwgMHg4MSwgMHg4ZiwgMHhjYiwgMHhmMywKKwkweDI2LCAweDg5LCAweGNmLCAweDM3LCAweGM1LCAweGRjLCAweDYzLCAweGEyLCAweDA2LCAweGVhLCAweGQzLCAweDM5LAorCTB4NzcsIDB4YzksIDB4MGEsIDB4ZGUsIDB4NjksIDB4OTIsIDB4NzcsIDB4OGYsIDB4NTYsIDB4ZjAsIDB4NzMsIDB4NzgsCisJMHgxYywgMHg5MCwgMHg3NCwgMHhlNSwgMHhkYywgMHg5NSwgMHg3NSwgMHg1YSwgMHhmMCwgMHhhNywgMHg5ZCwgMHg3MywKKwkweGQzLCAweDQxLCAweDZhLCAweDE0LCAweDIzLCAweDJmLCAweDBjLCAweGE5LCAweGRiLCAweDFjLCAweDNhLCAweDNhLAorCTB4MzEsIDB4ZjIsIDB4ZGEsIDB4YmEsIDB4MTgsIDB4ZjksIDB4YjYsIDB4MjAsIDB4YzcsIDB4NWEsIDB4YzMsIDB4NTAsCisJMHg4MiwgMHg3OSwgMHhmOCwgMHhiYSwgMHg5NywgMHg2ZCwgMHhjOCwgMHgzNiwgMHg3MCwgMHgzZCwgMHg1ZiwgMHg1MywKKwkweGJiLCAweGVjLCAweDU5LCAweGE2LCAweGQ2LCAweDFjLCAweDIwLCAweGRmLCAweDBjLCAweGZiLCAweDBlLCAweDBiLAorCTB4NzksIDB4MDYsIDB4OTEsIDB4MzYsIDB4YzksIDB4M2EsIDB4Y2IsIDB4YmUsIDB4YmQsIDB4MWEsIDB4NjcsIDB4Y2YsCisJMHg1MSwgMHhhMywgMHgxOCwgMHhmYiwgMHg0NiwgMHhmZCwgMHhmYSwgMHg3OSwgMHhiZiwgMHhkZiwgMHgzYSwgMHhhYywKKwkweDNiLCAweDM2LCAweDczLCAweDI1LCAweGJmLCAweGVlLCAweGMyLCAweGVkLCAweDQxLCAweDljLCAweGFkLCAweDUwLAorCTB4OTMsIDB4NTUsIDB4YzAsIDB4ZmUsIDB4ZGUsIDB4ZjAsIDB4MzcsIDB4NWIsIDB4YWUsIDB4MmUsIDB4MDYsIDB4NjgsCisJMHhmZCwgMHhjYywgMHgyZCwgMHg0MiwgMHgxZiwgMHg4ZCwgMHhjOSwgMHhhYSwgMHgzZSwgMHg4ZSwgMHg4MiwgMHgzNywKKwkweDE5LCAweGE3LCAweDA2LCAweDYwLCAweGFlLCAweGE3LCAweGViLCAweGQ3LCAweDBiLCAweGM2LCAweGVkLCAweDM3LAorCTB4ZmQsIDB4YWEsIDB4ZTUsIDB4Y2EsIDB4YzAsIDB4ZjUsIDB4ZjIsIDB4OTEsIDB4NGYsIDB4ZDUsIDB4ZDEsIDB4YmEsCisJMHg1MSwgMHg0ZCwgMHhmOCwgMHgyYywgMHhlOCwgMHgxYSwgMHg0NywgMHhkZSwgMHgxZCwgMHg3OSwgMHg4MSwgMHgxMCwKKwkweDNiLCAweDM5LCAweDc5LCAweDc4LCAweDFhLCAweGI5LCAweDc3LCAweGU0LCAweDAyLCAweGU3LCAweGUzLCAweDZlLAorCTB4N2UsIDB4ZmUsIDB4NmEsIDB4MjksIDB4NzIsIDB4MzYsIDB4OGYsIDB4OWMsIDB4NzksIDB4MWUsIDB4MzksIDB4ZjksCisJMHhjYiwgMHhjOCwgMHhjOSwgMHhjZiwgMHg5NywgMHg3YSwgMHg0MSwgMHhmZiwgMHgxZSwgMHg5OSwgMHg4ZiwgMHhiMywKKwkweDhlLCAweDk5LCAweDc0LCAweDExLCAweGI5LCAweGQzLCAweDc3LCAweDY3LCAweGQ4LCAweDQ2LCAweDc0LCAweGQxLAorCTB4M2QsIDB4YzgsIDB4MzUsIDB4YmUsIDB4M2YsIDB4YTksIDB4NjgsIDB4OWQsIDB4N2QsIDB4MDEsIDB4NWYsIDB4YzIsCisJMHhiOCwgMHg5MSwgMHgzOCwgMHg3MSwgMHgyOSwgMHg0ZiwgMHgxYSwgMHhjNywgMHg4YSwgMHgyMywgMHg0ZCwgMHg3ZSwKKwkweDZiLCAweGFlLCAweDk1LCAweDVhLCAweGY2LCAweDJjLCAweGNiLCAweDkzLCAweDZhLCAweGFjLCAweGU4LCAweGMyLAorCTB4MTksIDB4ZDQsIDB4ZDksIDB4ZjcsIDB4ODcsIDB4OWMsIDB4ZGIsIDB4YzQsIDB4NDgsIDB4ZTQsIDB4ZDMsIDB4ZWIsCisJMHhlOCwgMHhlZCwgMHg5MywgMHg2NSwgMHhkYSwgMHgxOSwgMHhiYiwgMHg1NiwgMHhiZSwgMHg2OCwgMHhhZCwgMHhhMywKKwkweDZjLCAweGVmLCAweDQzLCAweDMyLCAweDk3LCAweDVjLCAweDc4LCAweDI4LCAweDY5LCAweGU1LCAweDQzLCAweDNlLAorCTB4ZjcsIDB4N2MsIDB4NjIsIDB4NDIsIDB4NDcsIDB4ODQsIDB4YzgsIDB4YmYsIDB4MjAsIDB4Y2QsIDB4MGQsIDB4MjAsCisJMHg3MSwgMHg2ZSwgMHhkOSwgMHhmZSwgMHgwMiwgMHgxZiwgMHgxMCwgMHhiMSwgMHg2ZCwgMHg5YywgMHgzMywgMHgwMywKKwkweGEyLCAweGQ2LCAweGI2LCAweGQxLCAweGUyLCAweDdlLCAweDAzLCAweGZjLCAweGJlLCAweDhmLCAweGU2LCAweDkwLAorCTB4NDMsIDB4MTQsIDB4NDQsIDB4MWUsIDB4ZGUsIDB4MGUsIDB4NzgsIDB4MzcsIDB4MGYsIDB4YmYsIDB4MWYsIDB4YjksCisJMHgwMSwgMHhkMywgMHhkOCwgMHgwNCwgMHhmYywgMHg2ZiwgMHgwMywgMHhjNiwgMHg2YiwgMHg0MywgMHg5ZiwgMHg2YiwKKwkweDIyLCAweGYxLCAweDNkLCAweDhmLCAweGI3LCAweDEzLCAweGQ3LCAweDY1LCAweGFiLCAweGYzLCAweGYyLCAweDljLAorCTB4M2MsIDB4ZjYsIDB4NjEsIDB4ZjksIDB4ZjYsIDB4YmUsIDB4M2UsIDB4Y2YsIDB4ZGMsIDB4NmQsIDB4OWUsIDB4YjksCisJMHhlZiwgMHhmMCwgMHhjYywgMHhlZCwgMHhjMywgMHhiNywgMHgyZSwgMHgzZSwgMHg0MSwgMHg3YywgMHhlYiwgMHhhZSwKKwkweGYxLCAweGI3LCAweDllLCAweDM1LCAweDVjLCAweGRjLCAweGRiLCAweDNkLCAweGI4LCAweGJmLCAweDhmLCAweGY5LAorCTB4YjksIDB4Y2YsIDB4ZjQsIDB4ZjQsIDB4ZjEsIDB4OWEsIDB4MWIsIDB4NjgsIDB4NmUsIDB4YjAsIDB4OGQsIDB4MTYsCisJMHg0ZiwgMHg3MiwgMHg1ZiwgMHhkMCwgMHg4MywgMHgwYiwgMHhlMywgMHgxNywgMHg5MCwgMHg2MywgMHg2ZCwgMHg3NCwKKwkweGYxLCAweDY0LCAweDhiLCAweGMwLCAweDliLCAweGZkLCAweGY5LCAweGM2LCAweGNhLCAweDlhLCAweDU3LCAweGIwLAorCTB4YTYsIDB4M2IsIDB4OTcsIDB4ODksIDB4NmYsIDB4MTksIDB4OTYsIDB4ZjEsIDB4ZTMsIDB4MzEsIDB4ZWUsIDB4ZTMsCisJMHhiMSwgMHgzNywgMHhjYiwgMHg1ZiwgMHgzMywgMHg4MiwgMHhjZSwgMHg5ZSwgMHgwZCwgMHhjNiwgMHhjZCwgMHhmZCwKKwkweDU2LCAweDZiLCAweDI2LCAweDhiLCAweGRiLCAweDlkLCAweDM0LCAweDFiLCAweGQ0LCAweGMwLCAweDM3LCAweDU1LAorCTB4ZmEsIDB4MjgsIDB4YWUsIDB4MjMsIDB4YTgsIDB4NGEsIDB4YjQsIDB4OGYsIDB4ZjksIDB4YmMsIDB4NGUsIDB4ZDYsCisJMHhhZiwgMHg1YiwgMHgzMCwgMHg2ZiwgMHhkOCwgMHhjZCwgMHhkMSwgMHg4OCwgMHhlNSwgMHgzOCwgMHgyNywgMHhlYywKKwkweGJlLCAweDI2LCAweGM3LCAweGQ5LCAweGVlLCAweGIzLCAweGRmLCAweGM3LCAweDUzLCAweGM4LCAweGFhLCAweDNjLAorCTB4YWYsIDB4MjksIDB4ZWQsIDB4YTAsIDB4ODMsIDB4NTAsIDB4Y2YsIDB4OGIsIDB4YjIsIDB4OWUsIDB4YjIsIDB4ZTgsCisJMHhhZCwgMHg5OSwgMHgxOCwgMHg0ZSwgMHgxYywgMHhlMywgMHg5YywgMHhlZCwgMHhhYywgMHg4NSwgMHhmZSwgMHhlMCwKKwkweGJkLCAweDk4LCAweDAwLCAweDFlLCAweDYxLCAweDhhLCAweGUyLCAweGFmLCAweDUwLCAweGNhLCAweGUzLCAweDY5LAorCTB4ZTEsIDB4YTksIDB4ZTAsIDB4YzksIDB4ZjUsIDB4MGMsIDB4MWQsIDB4NGYsIDB4ZTgsIDB4MTgsIDB4ZWMsIDB4NTMsCisJMHhiNCwgMHhlZiwgMHg5MiwgMHg5MywgMHgzZiwgMHg0MSwgMHgzNywgMHhkZSwgMHg5ZSwgMHg3NCwgMHhlYSwgMHg1MSwKKwkweDhiLCAweGQ2LCAweDcyLCAweGY1LCAweGE4LCAweDNmLCAweDY3LCAweDllLCAweDljLCAweDcwLCAweGViLCAweDUxLAorCTB4OGIsIDB4MjQsIDB4ZWEsIDB4NTEsIDB4MjcsIDB4NTYsIDB4YTgsIDB4NDcsIDB4MjUsIDB4NTYsIDB4NWYsIDB4OGYsCisJMHhlMiwgMHhmOSwgMHgzNSwgMHhkYSwgMHhkNywgMHg0ZiwgMHhjYSwgMHgxNywgMHg2NCwgMHgzZCwgMHhlYSwgMHgzZCwKKwkweDcyLCAweGVhLCAweDUxLCAweDE3LCAweGE5LCAweDcxLCAweDNkLCAweGVhLCAweDc4LCAweDVkLCAweDNkLCAweDJhLAorCTB4MjgsIDB4ZWEsIDB4NTEsIDB4M2MsIDB4OGYsIDB4NTMsIDB4OGYsIDB4MTIsIDB4ZWQsIDB4YmUsIDB4ODgsIDB4YTcsCisJMHhlZSwgMHg0MiwgMHhmNCwgMHhlZSwgMHg2NCwgMHgwNywgMHg2OCwgMHg2NiwgMHhkMCwgMHhmNywgMHgxYSwgMHhkYSwKKwkweDM0LCAweDQ1LCAweGM4LCAweGRiLCAweDRhLCAweDM1LCAweGQwLCAweDA3LCAweDZlLCAweGI4LCAweGJlLCAweGEyLAorCTB4ZDAsIDB4MDYsIDB4Y2MsIDB4OWIsIDB4ZWMsIDB4N2IsIDB4ZDgsIDB4NTMsIDB4NjMsIDB4NjEsIDB4OWEsIDB4ZmYsCisJMHg2MiwgMHhlYSwgMHgyYywgMHgwNywgMHg0NSwgMHg5ZCwgMHhlNSwgMHg4NywgMHg2YiwgMHhiYywgMHg3NSwgMHg5NiwKKwkweDQ1LCAweGJhLCAweDdlLCAweDlkLCAweGU1LCAweDYwLCAweDgzLCAweDNhLCAweGNiLCAweDViLCAweDU0LCAweGFkLAorCTB4YjMsIDB4YmMsIDB4NDUsIDB4ZDUsIDB4M2EsIDB4Y2IsIDB4YzEsIDB4MTIsIDB4ZTcsIDB4ZTIsIDB4M2UsIDB4ODksCisJMHg1ZiwgMHgwNiwgMHhlZCwgMHg0MSwgMHhmMSwgMHhjNywgMHhiNSwgMHg5NywgMHhjNSwgMHhjYSwgMHgxZSwgMHg3ZSwKKwkweGQ5LCAweDZhLCAweDJmLCAweDZjLCAweDAzLCAweDIyLCAweDE3LCAweDJlLCAweGQ3LCAweGQ0LCAweDVlLCAweGI4LAorCTB4MGQsIDB4OWQsIDB4YjEsIDB4ZDcsIDB4MDgsIDB4MTksIDB4OTksIDB4ODMsIDB4N2YsIDB4NWYsIDB4OWMsIDB4MGMsCisJMHg2MSwgMHhjZSwgMHgwZSwgMHhmOCwgMHg4YywgMHgwZSwgMHhlNCwgMHgwNiwgMHg2MSwgMHhiNCwgMHgxNSwgMHhkYSwKKwkweDY0LCAweDBkLCAweGExLCAweDhmLCAweGM3LCAweGQ5LCAweDBlLCAweDQzLCAweGI3LCAweDZjLCAweDc3LCAweDdmLAorCTB4MGYsIDB4NDgsIDB4MWEsIDB4NDQsIDB4NjgsIDB4YjgsIDB4OWQsIDB4ZjQsIDB4MjAsIDB4ZmIsIDB4OGUsIDB4YzksCisJMHgzZCwgMHg3NCwgMHhjOCwgMHhkZSwgMHgyMiwgMHhmNiwgMHhiZCwgMHhjMSwgMHhhYSwgMHg5NSwgMHhiOSwgMHhjMSwKKwkweDFiLCAweDkwLCAweGI5LCAweGNjLCAweGFhLCAweDY1LCAweDhlLCAweGU1LCAweGNkLCAweDM5LCAweGY3LCAweGRkLAorCTB4NjAsIDB4ZjEsIDB4ZmEsIDB4MWQsIDB4MDIsIDB4YTcsIDB4NzcsIDB4MWIsIDB4YzgsIDB4ZmIsIDB4MTgsIDB4ZWMsCisJMHg4ZSwgMHgzMywgMHhiZiwgMHgyZSwgMHhkNywgMHhhYiwgMHg4ZiwgMHg4NywgMHg5ZiwgMHg2ZCwgMHg2NiwgMHhmZiwKKwkweGJkLCAweDcyLCAweDNkLCAweGIxLCAweGRlLCAweDdmLCAweGFmLCAweGU0LCAweDQ3LCAweDE1LCAweDYxLCAweDkzLAorCTB4YjMsIDB4MjUsIDB4YWUsIDB4ZWQsIDB4N2IsIDB4ZjksIDB4MzMsIDB4OGYsIDB4OWMsIDB4MDAsIDB4N2QsIDB4NDIsCisJMHgwZiwgMHg5OCwgMHhhZSwgMHg0MSwgMHhmMCwgMHgwMSwgMHhlYiwgMHhkOCwgMHg0ZiwgMHhjOSwgMHg1YSwgMHgxNiwKKwkweDllLCAweDA1LCAweDk3LCAweDdmLCAweGFkLCAweGIwLCAweDk5LCAweGVlLCAweDE4LCAweGRiLCAweDAxLCAweDBiLAorCTB4ZmUsIDB4OGYsIDB4ZWIsIDB4MjgsIDB4N2MsIDB4OGUsIDB4Y2EsIDB4ZmQsIDB4MmUsIDB4NWYsIDB4YmIsIDB4MmUsCisJMHhiYywgMHhhNywgMHg3MiwgMHhiYiwgMHg1YywgMHhjZSwgMHg4YSwgMHg3YSwgMHgyZCwgMHhhOSwgMHg5ZCwgMHg3ZCwKKwkweGQzLCAweDJkLCAweDZjLCAweDZiLCAweGI2LCAweDU4LCAweGFlLCAweGNjLCAweDI2LCAweGYwLCAweGNlLCAweDdjLAorCTB4N2QsIDB4MTcsIDB4MzYsIDB4OWMsIDB4Y2YsIDB4YWEsIDB4YmYsIDB4MjMsIDB4NmEsIDB4MDQsIDB4NzMsIDB4MzYsCisJMHhkYiwgMHg2YiwgMHg4ZSwgMHg0MSwgMHg3ZiwgMHgwYiwgMHhiMiwgMHhjNCwgMHhlZiwgMHg1MSwgMHg3MSwgMHgyZSwKKwkweDIxLCAweDZhLCAweGY4LCAweDgzLCAweGRjLCAweDc2LCAweGVkLCAweDRhLCAweDk0LCAweGVkLCAweDMwLCAweGY2LAorCTB4NWMsIDB4YTUsIDB4MzEsIDB4ZTIsIDB4MjMsIDB4YzgsIDB4MGMsIDB4YzcsIDB4YjEsIDB4MGMsIDB4ZTcsIDB4YzYsCisJMHg5ZSwgMHg5YSwgMHhhNywgMHg2NiwgMHhhYiwgMHhjYiwgMHhiOCwgMHg4OCwgMHg3NSwgMHgzOSwgMHgwMCwgMHg5YSwKKwkweGVkLCAweDEwLCAweDMxLCAweGVhLCAweGI4LCAweDVkLCAweGE2LCAweGVhLCAweDE5LCAweDNmLCAweGQzLCAweGRjLAorCTB4MzksIDB4ZTcsIDB4M2YsIDB4NjYsIDB4MmYsIDB4NDcsIDB4ZmIsIDB4Y2QsIDB4MzcsIDB4NDgsIDB4N2IsIDB4NDcsCisJMHgxZiwgMHg2YiwgMHhlOSwgMHhhZSwgMHgyMywgMHg3ZSwgMHg3MSwgMHhlOSwgMHhlZSwgMHhmYSwgMHhhOCwgMHg0OSwKKwkweDQ5LCAweDgzLCAweGE4LCAweGFjLCAweDJiLCAweDdlLCAweDVhLCAweDllLCAweDI5LCAweGZkLCAweDVmLCAweGQ4LAorCTB4YWYsIDB4ZTIsIDB4ZDksIDB4YWYsIDB4YWIsIDB4YmIsIDB4ZmIsIDB4ZTQsIDB4N2UsIDB4YzMsIDB4NzUsIDB4YmEsCisJMHgxYiwgMHg5NywgMHg3NSwgMHhiOSwgMHg1ZiwgMHg4NCwgMHhlZSwgMHhiYSwgMHg3YiwgMHhlMiwgMHhiNSwgMHhiNywKKwkweDVjLCAweDY3LCAweGRkLCAweDY3LCAweDQ4LCAweDhkLCAweGFmLCAweDE0LCAweDdiLCAweGZmLCAweGI0LCAweGY5LAorCTB4ZTMsIDB4YzUsIDB4ZGUsIDB4MWYsIDB4ODcsIDB4OWUsIDB4NWUsIDB4YmQsIDB4NjUsIDB4MWEsIDB4YjYsIDB4ODksCisJMHhiOCwgMHhjMiwgMHhkMSwgMHgxZiwgMHhkOCwgMHhlMywgMHg4MiwgMHg5ZiwgMHgxNiwgMHgxZSwgMHhkMiwgMHhlOSwKKwkweDlmLCAweGVlLCAweGU0LCAweGZhLCAweGFjLCAweDI2LCAweDczLCAweDdjLCAweDZlLCAweDdmLCAweGIxLCAweDk1LAorCTB4NjMsIDB4YWIsIDB4NGQsIDB4ZDYsIDB4NzcsIDB4NDQsIDB4NmUsIDB4OTUsIDB4NTcsIDB4NGQsIDB4OGYsIDB4MWYsCisJMHgzMSwgMHgzMCwgMHhjZSwgMHg2MywgMHg2MSwgMHhiYSwgMHgxYywgMHhiYywgMHg5MSwgMHhiOCwgMHhiYywgMHhjYiwKKwkweDU4LCAweGY0LCAweGFkLCAweDI2LCAweDJlLCAweGJmLCAweDU1LCAweGY3LCAweDViLCAweDdmLCAweGRkLCAweDdhLAorCTB4YmQsIDB4M2EsIDB4NDcsIDB4MzUsIDB4MmUsIDB4ZTcsIDB4N2MsIDB4M2UsIDB4ZTgsIDB4ZDQsIDB4MTgsIDB4NGMsCisJMHg4ZSwgMHhjZiwgMHhkNywgMHg0YSwgMHg5ZSwgMHhmMCwgMHgzYiwgMHg3MiwgMHgxMSwgMHgxYiwgMHg3OSwgMHgwOCwKKwkweDY0LCAweGZjLCAweDU1LCAweGM4LCAweGNhLCAweDJiLCAweDM2LCAweGYyLCAweDBlLCAweDFiLCAweGY5LCAweDg4LAorCTB4OGQsIDB4ZGMsIDB4YzMsIDB4NDYsIDB4ZWUsIDB4NjEsIDB4ZjcsIDB4YzgsIDB4MWMsIDB4MjYsIDB4MjMsIDB4ZWIsCisJMHg1NiwgMHg3YywgMHg0NiwgMHhjYiwgMHhmOSwgMHg2MSwgMHg1ZSwgMHhjOSwgMHhkOCwgMHhlMywgMHg3YywgMHgxZiwKKwkweDQxLCAweDRkLCAweGM2LCAweDM2LCAweGNhLCAweDc4LCAweGYwLCAweDM4LCAweGRmLCAweDc3LCAweDI4LCAweGFiLAorCTB4NzEsIDB4YWUsIDB4NDUsIDB4OTEsIDB4YWEsIDB4YzYsIDB4NmYsIDB4ODcsIDB4OGYsIDB4ZGEsIDB4MGUsIDB4YmMsCisJMHg5YSwgMHg3OSwgMHhkYywgMHhhNywgMHhjNiwgMHg1YiwgMHg5OSwgMHg3NiwgMHg4YSwgMHgxYSwgMHg1ZiwgMHgyYiwKKwkweGNmLCAweDBkLCAweDdhLCAweDAzLCAweDBlLCAweGZlLCAweGRkLCAweGRjLCAweGQ2LCAweGQ0LCAweGY4LCAweGRkLAorCTB4ZWMsIDB4ZDMsIDB4YzIsIDB4YTQsIDB4YmEsIDB4ZmQsIDB4YjcsIDB4MDcsIDB4OTgsIDB4YWUsIDB4YTQsIDB4ZGUsCisJMHgxNiwgMHhlMCwgMHhiOCwgMHg3NiwgMHhkZSwgMHhmNiwgMHg4YiwgMHgzYiwgMHgwNSwgMHhjOSwgMHgxOCwgMHhkNywKKwkweGNjLCAweGI4LCAweDVkLCAweGE1LCAweGFiLCAweGJhLCAweDJjLCAweDVkLCAweGZkLCAweDk1LCAweGZhLCAweDNmLAorCTB4ZDMsIDB4ZDIsIDB4YzcsIDB4NzAsIDB4YTIsIDB4MzYsIDB4YzYsIDB4MzQsIDB4NzUsIDB4ZTcsIDB4ZTMsIDB4ZjMsCisJMHg2NiwgMHg1ZSwgMHg0NywgMHhkYywgMHg2MywgMHhjMCwgMHhmMywgMHg2MCwgMHgzMywgMHhiNSwgMHgwZCwgMHgwZSwKKwkweGY5LCAweDJkLCAweGVmLCAweGJhLCAweDZjLCAweDQzLCAweDc2LCAweDkwLCAweDM3LCAweGM3LCAweDVhLCAweDdlLAorCTB4Y2QsIDB4YTgsIDB4MzgsIDB4MWIsIDB4NDksIDB4ZjYsIDB4NDcsIDB4ODUsIDB4ZWMsIDB4YjAsIDB4YWMsIDB4NjksCisJMHhlMiwgMHhjZSwgMHhkNSwgMHg0NywgMHhlMiwgMHgxZSwgMHgwOSwgMHhjYiwgMHgxOSwgMHhjYiwgMHhmMiwgMHg3OCwKKwkweDdmLCAweDU3LCAweDU4LCAweDUzLCAweDViLCAweGIwLCAweDQ2LCAweDk4LCAweGQyLCAweDI1LCAweDcxLCAweDU2LAorCTB4ODAsIDB4N2MsIDB4ZTksIDB4ZGMsIDB4M2EsIDB4NmEsIDB4ZmIsIDB4MDcsIDB4YmQsIDB4OWEsIDB4YzcsIDB4NDYsCisJMHg5ZCwgMHhiMywgMHg3YSwgMHhiYiwgMHhkZSwgMHhmZiwgMHg4ZCwgMHg4YSwgMHg3MywgMHg2NSwgMHhjNywgMHgwNiwKKwkweGI5LCAweGU3LCAweGMzLCAweGFiLCAweDNiLCAweGZmLCAweGJlLCAweGJlLCAweDNlLCAweGI1LCAweGQ0LCAweGQ3LAorCTB4MGQsIDB4MjQsIDB4MGQsIDB4OTgsIDB4MzYsIDB4OGQsIDB4Y2YsIDB4ZWUsIDB4ZTcsIDB4NGIsIDB4N2MsIDB4YWYsCisJMHgyNSwgMHgxMiwgMHhlMywgMHhkYywgMHg2ZCwgMHg0NCwgMHhkYywgMHhmOSwgMHg1MCwgMHgyMSwgMHg4NSwgMHgzYSwKKwkweDhkLCAweDE5LCAweDljLCAweGYzLCAweDg1LCAweDg2LCAweDdkLCAweDcxLCAweGNhLCAweDY0LCAweDI3LCAweDQ4LAorCTB4NDMsIDB4YWMsIDB4OTgsIDB4YTksIDB4ZDYsIDB4MDMsIDB4MWYsIDB4NWMsIDB4NDMsIDB4OTYsIDB4MmIsIDB4OTcsCisJMHg1MSwgMHhjZSwgMHgxZiwgMHg2YSwgMHhjZSwgMHhlZCwgMHgxNiwgMHhlOSwgMHhiMCwgMHg3MiwgMHhhMCwgMHg3NCwKKwkweDg0LCAweDBlLCAweDM0LCAweDhjLCAweDI5LCAweDFiLCAweGQ3LCAweDAzLCAweDJmLCAweGQ2LCAweGQ1LCAweDE0LAorCTB4MTYsIDB4NDQsIDB4NGQsIDB4MjEsIDB4YjcsIDB4YzYsIDB4NmYsIDB4M2QsIDB4MTksIDB4NzAsIDB4ZWUsIDB4YjUsCisJMHgzNCwgMHhkNiwgMHg5MywgMHg1ZCwgMHgxNSwgMHgzZCwgMHg3MSwgMHhlMSwgMHhmOCwgMHgyYywgMHhiZSwgMHg4ZCwKKwkweDc2LCAweDhhLCAweGI1LCAweDBlLCAweDJiLCAweDU5LCAweGJiLCAweDk1LCAweDc2LCAweDFhLCAweDBlLCAweGQ2LAorCTB4YTMsIDB4MzYsIDB4ZTMsIDB4NzUsIDB4NTgsIDB4MzksIDB4NjgsIDB4ZTcsIDB4OTUsIDB4YjQsIDB4YTgsIDB4M2QsCisJMHg3MCwgMHg4YywgMHhiZiwgMHhlNiwgMHhkYSwgMHgzMCwgMHg5NSwgMHhlOSwgMHhlZCwgMHg5OCwgMHhmYiwgMHgzZCwKKwkweGMzLCAweDc4LCAweDZiLCAweDhhLCAweDJlLCAweDlkLCAweGY4LCAweDJlLCAweDUxLCAweDU4LCAweGU2LCAweDZmLAorCTB4Y2UsIDB4N2MsIDB4YjksIDB4MjksIDB4YWUsIDB4MjUsIDB4ZGUsIDB4OGYsIDB4ZmQsIDB4MzMsIDB4ZmMsIDB4NmUsCisJMHgyNSwgMHgzOSwgMHg1NSwgMHgyZSwgMHhhNywgMHgzMSwgMHgzZSwgMHhkNiwgMHg3YiwgMHhhZiwgMHhjOCwgMHg4ZCwKKwkweGQ0LCAweDM4LCAweDBkLCAweDcxLCAweDhlLCAweGFjLCAweDJkLCAweGM5LCAweDkxLCAweGQzLCAweGQwLCAweDM1LAorCTB4YzQsIDB4MjAsIDB4NzYsIDB4MTMsIDB4YmUsIDB4NzUsIDB4ZTMsIDB4OTEsIDB4Y2YsIDB4YWUsIDB4NzUsIDB4NjQsCisJMHhlNCwgMHhiYiwgMHgxMiwgMHgwZiwgMHgxZSwgMHhmZiwgMHhmYiwgMHg4MCwgMHg3YiwgMHgwZiwgMHgyOCwgMHg3NywKKwkweDJhLCAweDhkLCAweGZkLCAweDM3LCAweDUxLCAweGNhLCAweDc0LCAweGYyLCAweGJiLCAweGVjLCAweDk5LCAweDIzLAorCTB4MWIsIDB4NmEsIDB4ZTEsIDB4ZDEsIDB4NzcsIDB4Y2EsIDB4ODUsIDB4MGYsIDB4ZDYsIDB4YzEsIDB4ZjMsIDB4MTksCisJMHhkNywgMHg1ZiwgMHhkNSwgMHhjMSwgMHgwNywgMHgzZCwgMHhmMCwgMHg2NiwgMHgxZCwgMHgzYywgMHhlMiwgMHhhZSwKKwkweDMzLCAweGRmLCAweGE4LCAweDgzLCAweDM3LCAweDNkLCAweGYwLCAweGVkLCAweDc1LCAweGYwLCAweGVkLCAweDgwLAorCTB4N2YsIDB4YTMsIDB4MGUsIDB4MWUsIDB4N2QsIDB4YTcsIDB4OTAsIDB4MTMsIDB4MDgsIDB4ZGEsIDB4NzAsIDB4OGMsCisJMHg3NCwgMHg0OCwgMHhlNiwgMHg4OSwgMHg3OCwgMHgyZSwgMHhiOSwgMHgxZiwgMHhjOSwgMHhmMiwgMHhkMywgMHgwMSwKKwkweDFhLCAweDdiLCAweGViLCAweGI1LCAweDA5LCAweGQ4LCAweGE4LCAweGFhLCAweDRjLCAweDM5LCAweGZhLCAweGVhLAorCTB4OTUsIDB4MjUsIDB4OTYsIDB4YmQsIDB4M2MsIDB4ZTQsIDB4MTUsIDB4N2EsIDB4NTQsIDB4ODAsIDB4M2UsIDB4MTUsCisJMHg1YywgMHg1ZiwgMHhjYSwgMHg3NywgMHhhYSwgMHgyMiwgMHhjNywgMHgxZCwgMHgzZCwgMHg1NiwgMHg2OCwgMHhiZCwKKwkweDM1LCAweDJmLCAweDczLCAweDkxLCAweGFiLCAweDhjLCAweDNiLCAweGZjLCAweDg2LCAweGViLCAweDNiLCAweGU4LAorCTB4ODQsIDB4NjMsIDB4NTcsIDB4NTgsIDB4YmYsIDB4NzksIDB4N2UsIDB4NjksIDB4NWYsIDB4NGEsIDB4MmMsIDB4ODcsCisJMHhjZSwgMHgzYSwgMHhlOSwgMHgyNSwgMHgzMiwgMHgxYiwgMHg1ZSwgMHg1MiwgMHg3NywgMHhmMSwgMHhkNSwgMHhkOSwKKwkweDc3LCAweDEyLCAweGY2LCAweDNkLCAweGQ3LCAweGUyLCAweGI3LCAweDM2LCAweGFjLCAweGJkLCAweDllLCAweDdkLAorCTB4Y2YsIDB4NzgsIDB4ZWMsIDB4N2IsIDB4MzgsIDB4NTgsIDB4ZjUsIDB4ZjksIDB4OGYsIDB4MDksIDB4OWYsIDB4ZGYsCisJMHhkMSwgMHhjMCwgMHg2NiwgMHhhYywgMHhkZSwgMHhlNywgMHhlZiwgMHhmZCwgMHhkOCwgMHgzZSwgMHg3ZiwgMHhiOSwKKwkweDc1LCAweDU3LCAweGUzLCAweGYzLCAweDFmLCAweDY5LCAweGY5LCAweDc4LCAweDNlLCAweDlmLCAweGQ3LCAweGFjLAorCTB4YWYsIDB4NjUsIDB4N2EsIDB4Y2YsIDB4NTksIDB4OGUsIDB4Y2EsIDB4MTgsIDB4N2IsIDB4YjcsIDB4MjcsIDB4YzYsCisJMHg2NiwgMHhmYywgMHhiZSwgMHgyNywgMHhlZiwgMHgwMiwgMHg5ZSwgMHg1ZSwgMHhlYiwgMHhjOCwgMHhkYiwgMHg1MSwKKwkweDE5LCAweGE3LCAweDczLCAweGVjLCAweDhkLCAweGY3LCAweGMyLCAweDIzLCAweDkwLCAweGQxLCAweDdjLCAweDhmLAorCTB4OGYsIDB4NTQsIDB4OWEsIDB4MzUsIDB4OWQsIDB4YjMsIDB4ZWQsIDB4OWYsIDB4NmYsIDB4YWUsIDB4MTcsIDB4YTEsCisJMHhjYiwgMHhjMiwgMHg5ZiwgMHgyNCwgMHgzZSwgMHg4MSwgMHg1YSwgMHhlYSwgMHg0OSwgMHhjOCwgMHg4ZiwgMHhiYiwKKwkweGFmLCAweDk1LCAweDZhLCAweGE5LCAweGY1LCAweGU3LCAweDFmLCAweDdjLCAweGVlLCAweDQxLCAweGNhLCAweDAzLAorCTB4OTUsIDB4NzMsIDB4MTAsIDB4YWYsIDB4NGUsIDB4ZTksIDB4OTQsIDB4OWQsIDB4MjEsIDB4ZGQsIDB4OGMsIDB4OTMsCisJMHhiMiwgMHg4ZiwgMHg3MSwgMHg4ZSwgMHhmZCwgMHhiMCwgMHg1MiwgMHg2ZiwgMHgzZiwgMHgyNCwgMHg2YiwgMHgzMCwKKwkweGVhLCAweGIyLCAweDc3LCAweDgyLCAweDdlLCAweDAyLCAweDdjLCAweDU4LCAweGFmLCAweDljLCAweDFhLCAweDhjLAorCTB4ZWEsIDB4ZGMsIDB4MDksIDB4M2EsIDB4ZmUsIDB4ZjMsIDB4YmIsIDB4MTMsIDB4YzQsIDB4ZjMsIDB4NmIsIDB4YjQsCisJMHhiNywgMHhjMSwgMHg5ZCwgMHgyMCwgMHhkZiwgMHgyYSwgMHhlZiwgMHgwNCwgMHhhZCwgMHgxNywgMHgzNSwgMHgxOCwKKwkweDllLCAweGM3LCAweGE5LCAweGMxLCAweDcwLCAweGJiLCAweGIzLCAweDhmLCAweGU1LCAweDNhLCAweDRjLCAweGEzLAorCTB4OTMsIDB4YjcsIDB4ODgsIDB4N2IsIDB4YTgsIDB4OWQsIDB4N2QsIDB4YjUsIDB4ZjIsIDB4YmQsIDB4ZWYsIDB4MTMsCisJMHg4ZCwgMHhhNSwgMHg3OSwgMHhiZCwgMHhhMywgMHgwZCwgMHhlZiwgMHhiNiwgMHgyNCwgMHgzZiwgMHhjMSwgMHg5YSwKKwkweGNiLCAweDIxLCAweDUxLCAweDczLCAweGI5LCAweGIzLCAweGNkLCAweDViLCAweDczLCAweDUxLCAweDU3LCAweGI4LAorCTB4ZGIsIDB4NzIsIDB4YTgsIDB4NDEsIDB4Y2QsIDB4YzUsIDB4ZWYsIDB4YjksIDB4ZGIsIDB4ZTIsIDB4ZjcsIDB4ZGMsCisJMHg2ZCwgMHgzOSwgMHgyNCwgMHhlYiwgMHgyYiwgMHhlYSwgMHgyZiwgMHhkMSwgMHhkZCwgMHg5NiwgMHhlNCwgMHg4YSwKKwkweDc3LCAweDViLCAweGI2LCAweDRhLCAweDdkLCAweGY1LCAweGMyLCAweGFmLCAweGZlLCAweGJjLCAweDMyLCAweDU1LAorCTB4NjcsIDB4ZTcsIDB4MTMsIDB4YzIsIDB4Y2UsIDB4ZGYsIDB4ZDUsIDB4ZWEsIDB4YjcsIDB4OWUsIDB4NjksIDB4YmIsCisJMHg5ZSwgMHg5ZCwgMHhkZiwgMHg1NywgMHhkMSwgMHg1MywgMHhiZSwgMHhhMywgMHhjZCwgMHg3NywgMHhiZSwgMHg1OCwKKwkweDE2LCAweGY5LCAweDdjLCAweGE2LCAweDg5LCAweDcyLCAweDAzLCAweGJmLCAweDJhLCAweDY4LCAweGY2LCAweDU4LAorCTB4NmYsIDB4ZWQsIDB4OTksIDB4NjMsIDB4ZjUsIDB4NWUsIDB4YTQsIDB4ZWUsIDB4YjksIDB4MTcsIDB4NjksIDB4YTIsCisJMHg1ZiwgMHhhZiwgMHhhYiwgMHg4NywgMHgwNCwgMHhlNCwgMHhkZCwgMHg3ZSwgMHhmOCwgMHhjMiwgMHgxOSwgMHg0MywKKwkweGRhLCAweDVlLCAweGM0LCAweDcwLCAweDk4LCAweGFlLCAweDUwLCAweGU0LCAweDNiLCAweDk1LCAweDZkLCAweGU0LAorCTB4OWIsIDB4NzEsIDB4Y2UsIDB4NGIsIDB4NTQsIDB4MTEsIDB4NjMsIDB4NDIsIDB4OGUsIDB4OGIsIDB4N2UsIDB4ZTEsCisJMHg2ZiwgMHhkNCwgMHhiOCwgMHgyMywgMHhiMywgMHhlMywgMHhmNiwgMHgwNSwgMHhlMCwgMHhiZiwgMHgyMSwgMHg1MSwKKwkweDZkLCAweDliLCAweDk1LCAweDVhLCAweGNlLCAweDU4LCAweGU1LCAweDBlLCAweGJmLCAweDA5LCAweGZiLCAweGUwLAorCTB4ZGMsIDB4MDcsIDB4Y2EsIDB4OTgsIDB4N2MsIDB4NjcsIDB4ZTQsIDB4NjIsIDB4NWIsIDB4ZjUsIDB4M2UsIDB4ZDAsCisJMHg2NywgMHhhNCwgMHg5YywgMHgzYSwgMHhmNywgMHg4MSwgMHg0OCwgMHg0ZCwgMHg0MCwgMHgzZSwgMHg2ZSwgMHhlNCwKKwkweDNlLCAweDUwLCAweGQ3LCAweDkyLCAweGZiLCAweDQwLCAweDJiLCAweGYzLCAweDY2LCAweGU5LCAweDdkLCAweGEwLAorCTB4YzYsIDB4ZmMsIDB4ZTEsIDB4ZmIsIDB4NDAsIDB4ZmYsIDB4ZGUsIDB4ZTYsIDB4ZGMsIDB4NDMsIDB4NWQsIDB4ODksCisJMHgzZiwgMHg2ZSwgMHg5YywgMHhmNCwgMHgxMSwgMHhlMCwgMHhmOSwgMHgzZSwgMHg1MCwgMHhlNSwgMHgxZSwgMHg5MCwKKwkweGU3LCAweDBlLCAweDEwLCAweGRmLCAweDI1LCAweDU5LCAweGVlLCAweDBjLCAweGNlLCAweDdiLCAweGZmLCAweGE0LAorCTB4YTcsIDB4NzIsIDB4ZmYsIDB4ZTQsIDB4N2MsIDB4YzksIDB4ZjUsIDB4ZWQsIDB4ZWUsIDB4YjksIDB4MWMsIDB4YzcsCisJMHgzOSwgMHhiYiwgMHg0NCwgMHg4ZSwgMHg3YSwgMHhhZSwgMHg1NCwgMHg1YiwgMHhjMywgMHg2MCwgMHhiZSwgMHg4ZiwKKwkweDE2LCAweGNmLCAweDgxLCAweDNlLCAweDZmLCAweDg5LCAweGRjLCAweDAwLCAweDdjLCAweGRlLCAweGUyLCAweDIzLAorCTB4ZTYsIDB4MWQsIDB4MjksIDB4YTAsIDB4OGIsIDB4MzgsIDB4Y2IsIDB4NzUsIDB4ZjgsIDB4ZGQsIDB4MjEsIDB4NjQsCisJMHhjMSwgMHg5MSwgMHg4YiwgMHhkZCwgMHg5ZSwgMHhmMywgMHhkMCwgMHhhYSwgMHgxYywgMHgzOCwgMHg2NywgMHhiYSwKKwkweDBlLCAweGVmLCAweDZhLCAweDY1LCAweDQ2LCAweDljLCAweGRkLCAweDBjLCAweGVkLCAweGI1LCAweDljLCAweGYzLAorCTB4YzYsIDB4YTgsIDB4MzgsIDB4YjcsIDB4NmQsIDB4YWYsIDB4YjMsIDB4NWIsIDB4M2EsIDB4ZTQsIDB4MDYsIDB4MzEsCisJMHg2NywgMHg4YywgMHhlYiwgMHhkNSwgMHg4YywgMHhmYiwgMHg2NiwgMHhjMSwgMHhlMywgMHg0NiwgMHg2NywgMHg3MSwKKwkweDJiLCAweGQ3LCAweGYxLCAweGRjLCAweDlhLCAweDBhLCAweDIxLCAweDk3LCAweGQ4LCAweDlkLCAweGNlLCAweDA5LAorCTB4YmIsIDB4ZTksIDB4YWMsIDB4ZGQsIDB4MjksIDB4ZDYsIDB4ZGUsIDB4NTgsIDB4NzcsIDB4OTYsIDB4Y2QsIDB4NzIsCisJMHhiNSwgMHg1YywgMHg0YywgMHg3MCwgMHgzZCwgMHg5YSwgMHhkZSwgMHhiMywgMHg4NCwgMHhhNiwgMHhiNSwgMHhiYSwKKwkweDg0LCAweGRjLCAweGI1LCAweDYyLCAweGUzLCAweDNiLCAweDJhLCAweGJhLCAweDM0LCAweDJlLCAweGVlLCAweDIxLAorCTB4YmIsIDB4ZTcsIDB4YjUsIDB4MGUsIDB4ZmQsIDB4YWEsIDB4YmEsIDB4YjcsIDB4NWMsIDB4M2MsIDB4NTMsIDB4NGYsCisJMHhiZiwgMHg0ZCwgMHhmZiwgMHg0YiwgMHhlOCwgMHg3NywgMHgxNSwgMHhmNCwgMHhlMywgMHg3NywgMHgwMywgMHhlZiwKKwkweGVmLCAweDhhLCAweDdhLCAweGMwLCAweGI5LCAweDUyLCAweGU0LCAweDc4LCAweDllLCAweDM4LCAweDRlLCAweDg4LAorCTB4Y2MsIDB4MmUsIDB4NTAsIDB4MGYsIDB4ZTgsIDB4YzgsIDB4ZmYsIDB4ZWIsIDB4ZTIsIDB4ZGUsIDB4OWQsIDB4NjAsCisJMHhmYSwgMHhiMiwgMHg3ZCwgMHg4ZiwgMHhiYywgMHg3MCwgMHg5OSwgMHhkOCwgMHhjNiwgMHhkZiwgMHg4ZCwgMHg3ZCwKKwkweDk0LCAweGNiLCAweDJmLCAweGM1LCAweDVjLCAweGZhLCAweGIzLCAweGVlLCAweDczLCAweDlkLCAweGFhLCAweDc2LAorCTB4NWYsIDB4N2IsIDB4NTcsIDB4ZWQsIDB4NTMsIDB4MWQsIDB4ZjksIDB4Y2MsIDB4MzQsIDB4OTAsIDB4Y2YsIDB4OGMsCisJMHhkYywgMHhhMywgMHg2ZiwgMHhhNiwgMHg3MSwgMHhiYywgMHg5YSwgMHg5YSwgMHhmYywgMHhlZiwgMHg1ZSwgMHhhZSwKKwkweDI2LCAweGI2LCAweDhkLCAweDIyLCAweDBhLCAweGJmLCAweGFjLCAweGQ3LCAweDRlLCAweGUzLCAweGE0LCAweDYxLAorCTB4OTMsIDB4M2EsIDB4YWQsIDB4NjksIDB4ZDIsIDB4NjAsIDB4YzcsIDB4NGIsIDB4MTIsIDB4MjksIDB4YTUsIDB4YTQsCisJMHg1MiwgMHg1NSwgMHg0NSwgMHg2MCwgMHhhOSwgMHgyMSwgMHg0ZSwgMHhkYSwgMHgwYSwgMHg3MSwgMHg3MCwgMHgwYiwKKwkweDQ4LCAweDUxLCAweGM1LCAweDIxLCAweDRkLCAweGQzLCAweDdiLCAweDg1LCAweDg0LCAweDU0LCAweGExLCAweDhhLAorCTB4NDYsIDB4NGUsIDB4MDIsIDB4MTUsIDB4NGEsIDB4ZTUsIDB4MGEsIDB4OTYsIDB4NzIsIDB4NDEsIDB4YTIsIDB4ZDgsCisJMHg4ZSwgMHgwMiwgMHg1MiwgMHgyYSwgMHhmNywgMHhjYSwgMHg4NSwgMHhiYSwgMHhiZiwgMHgwOCwgMHg4OSwgMHgwMywKKwkweDcwLCAweDA2LCAweDI5LCAweDJhLCAweDNmLCAweGUyLCAweGMwLCAweDhkLCAweDFiLCAweDU0LCAweDVkLCAweGRlLAorCTB4MzcsIDB4YjMsIDB4NjMsIDB4YWYsIDB4NzcsIDB4ZDcsIDB4OGUsIDB4MDMsIDB4MTEsIDB4MDcsIDB4MjcsIDB4YmIsCisJMHhmNiwgMHhjYywgMHhjZSwgMHhlYywgMHhjYywgMHgzNywgMHg2ZiwgMHhiZSwgMHhmNywgMHgzNywgMHhmZCwgMHhiZSwKKwkweDc4LCAweDhkLCAweDVhLCAweGRiLCAweDViLCAweGYzLCAweDU1LCAweGVjLCAweGU3LCAweGFmLCAweDM3LCAweDE4LAorCTB4NTcsIDB4ZWQsIDB4YmEsIDB4ZTQsIDB4YTksIDB4ZjUsIDB4ZTMsIDB4OWEsIDB4NzIsIDB4ZDksIDB4MWIsIDB4ZjAsCisJMHhmZSwgMHhjNywgMHg2OCwgMHg1MSwgMHhkOCwgMHg4NiwgMHg5NCwgMHhhZCwgMHhlZSwgMHhjNSwgMHg0MCwgMHg5YiwKKwkweGQ5LCAweGZmLCAweDMzLCAweDE2LCAweDAzLCAweDNlLCAweDliLCAweDY4LCAweGFkLCAweDZkLCAweDhhLCAweGVkLAorCTB4NzEsIDB4ZDksIDB4MTYsIDB4ZGUsIDB4ZGEsIDB4YzIsIDB4YjYsIDB4MTAsIDB4M2MsIDB4MTYsIDB4ZmQsIDB4OWUsCisJMHhiMSwgMHhhOCwgMHhjOSwgMHhlYSwgMHhhMSwgMHgxNiwgMHhlZCwgMHg3NCwgMHg4OCwgMHgyMSwgMHhiZiwgMHg5ZCwKKwkweDY3LCAweDZjLCAweDA1LCAweGNhLCAweGNlLCAweDRmLCAweDVkLCAweDM2LCAweDNjLCAweGUwLCAweDczLCAweGRjLAorCTB4NTksIDB4ZWIsIDB4YzAsIDB4MjcsIDB4YjUsIDB4OWQsIDB4MWEsIDB4NTEsIDB4ZWQsIDB4MDEsIDB4OGYsIDB4YzksCisJMHhjNSwgMHg0NSwgMHg4MiwgMHhiZSwgMHg4NiwgMHgzNiwgMHhlMywgMHg4MiwgMHhlMywgMHhmYSwgMHgzOSwgMHgxNCwKKwkweDhmLCAweGYxLCAweGZhLCAweDFiLCAweDg4LCAweGU1LCAweDcwLCAweGRhLCAweDNmLCAweGQ5LCAweDc2LCAweGFlLAorCTB4OWMsIDB4ZTUsIDB4YmQsIDB4NDIsIDB4ZDQsIDB4NjMsIDB4YmQsIDB4ZWYsIDB4NTIsIDB4ZGIsIDB4ODIsIDB4YTgsCisJMHgyNywgMHhlMywgMHgyMCwgMHgxYywgMHgxZCwgMHhkMCwgMHhlMSwgMHhlMiwgMHg4ZCwgMHg3NCwgMHgzZiwgMHhmZiwKKwkweDllLCAweDEzLCAweGNjLCAweGRkLCAweDdmLCAweGRkLCAweDFkLCAweDM2LCAweDNmLCAweDM0LCAweDY0LCAweGFlLAorCTB4ZGUsIDB4NTYsIDB4ZGMsIDB4NWQsIDB4ZDksIDB4ODksIDB4MDYsIDB4ODUsIDB4YWYsIDB4YzEsIDB4YWQsIDB4N2IsCisJMHg0MSwgMHg3NiwgMHg1ZCwgMHhlMCwgMHgzZCwgMHg3YywgMHhhOCwgMHhiYSwgMHg3ZiwgMHhlZiwgMHg4NCwgMHg3ZCwKKwkweGU4LCAweDk5LCAweDE2LCAweDYyLCAweDFkLCAweDQ0LCAweDhlLCAweGU1LCAweDJiLCAweDUzLCAweGM4LCAweDQ1LAorCTB4YWEsIDB4ZTYsIDB4ZWYsIDB4NzgsIDB4ZjMsIDB4M2MsIDB4MjAsIDB4M2YsIDB4NTUsIDB4OWUsIDB4ODcsIDB4Y2EsCisJMHgyMywgMHhjNSwgMHg3YiwgMHgyNCwgMHgwMiwgMHhmMiwgMHgzYywgMHhkYywgMHgzMiwgMHgxOCwgMHhmNSwgMHhlYSwKKwkweGRmLCAweGMzLCAweDJkLCAweDdmLCAweDU3LCAweDFjLCAweGY5LCAweDViLCAweGYwLCAweGQ4LCAweGUzLCAweDk3LAorCTB4ZjMsIDB4NmEsIDB4MmQsIDB4MjAsIDB4ZTcsIDB4NDMsIDB4ZjEsIDB4OTQsIDB4ZGUsIDB4MDAsIDB4OWUsIDB4MTIsCisJMHg5YywgMHhlYiwgMHhhMSwgMHhhNSwgMHgyZiwgMHhmMiwgMHg1ZSwgMHg3ZSwgMHgwOCwgMHg3YiwgMHhiOSwgMHg1MSwKKwkweDhiLCAweGU5LCAweDk1LCAweDcyLCAweGYwLCAweGRjLCAweDNhLCAweDY0LCAweGEyLCAweGNhLCAweGI5LCAweDgxLAorCTB4NWMsIDB4NDQsIDB4MmMsIDB4M2MsIDB4ZTYsIDB4YmEsIDB4ZTQsIDB4NjAsIDB4MTEsIDB4YmYsIDB4YTksIDB4NTgsCisJMHg1MiwgMHhhNSwgMHg0NywgMHhiZCwgMHgyMywgMHhmMiwgMHgwYywgMHhiZSwgMHgxYiwgMHgzZiwgMHhjYywgMHgxYywKKwkweDE4LCAweGYyLCAweDEzLCAweDc2LCAweGE2LCAweDQzLCAweDBlLCAweDFmLCAweGJlLCAweGNjLCAweGJmLCAweDhkLAorCTB4MzksIDB4ZDcsIDB4OTIsIDB4OGIsIDB4Y2EsIDB4NmIsIDB4YTUsIDB4NGIsIDB4ZmQsIDB4ZDAsIDB4NDEsIDB4ZTYsCisJMHg2ZiwgMHgwZSwgMHgyZiwgMHhhZCwgMHhiMywgMHg0MSwgMHhjNCwgMHg1MywgMHhkYSwgMHhkYiwgMHg3NCwgMHhhMSwKKwkweGQ4LCAweDBjLCAweDgzLCAweGY1LCAweGY4LCAweDRiLCAweDc5LCAweDM4LCAweDRmLCAweDQyLCAweDcwLCAweDllLAorCTB4OWYsIDB4M2EsIDB4YzIsIDB4ZTYsIDB4NDQsIDB4NGYsIDB4YjMsIDB4MzgsIDB4OWMsIDB4NTMsIDB4NTUsIDB4ZmMsCisJMHhhOSwgMHg3MiwgMHhhYSwgMHg2ZiwgMHg4ZiwgMHgzYSwgMHgxMCwgMHhhNywgMHhlNiwgMHhjNywgMHgwNCwgMHhlNiwKKwkweDFmLCAweGZhLCAweDljLCAweDVhLCAweDg3LCAweGQwLCAweGViLCAweDEwLCAweGYzLCAweDg3LCAweDc2LCAweDhkLAorCTB4MDYsIDB4NmIsIDB4YjAsIDB4NjYsIDB4MTMsIDB4MmYsIDB4NTAsIDB4MmIsIDB4YjEsIDB4N2YsIDB4YzksIDB4ZDEsCisJMHgwYSwgMHg5ZCwgMHhlZCwgMHg2OSwgMHhhNiwgMHhmMywgMHg5ZSwgMHgwOCwgMHhkNCwgMHg3OSwgMHg4MywgMHg3MiwKKwkweGE0LCAweGNjLCAweDgwLCAweDFjLCAweDI5LCAweDM3LCAweDBlLCAweDc1LCAweDE3LCAweDBlLCAweGUzLCAweDJlLAorCTB4MmUsIDB4MzAsIDB4YzAsIDB4ZGMsIDB4YjksIDB4OGIsIDB4ZjEsIDB4MDQsIDB4ZWUsIDB4MWMsIDB4YTUsIDB4ZDAsCisJMHgwNywgMHg2ZSwgMHhlZSwgMHhlYywgMHhmNywgMHgxMywgMHg0OSwgMHg1YywgMHhmZSwgMHhkYiwgMHhkYywgMHhhOSwKKwkweGEwLCAweDdlLCAweDI3LCAweDdjLCAweGZkLCAweDg2LCAweDFjLCAweDlmLCAweDZjLCAweGM4LCAweDEzLCAweDgyLAorCTB4MzgsIDB4ZmUsIDB4NGUsIDB4ZjcsIDB4ZDMsIDB4YmIsIDB4ZjYsIDB4ZDEsIDB4YTYsIDB4MDksIDB4ZmQsIDB4NzAsCisJMHg3NCwgMHhiMSwgMHhiYSwgMHhlZSwgMHg1ZiwgMHhmMCwgMHhkOSwgMHhiOSwgMHhjMSwgMHg2NywgMHg0MywgMHhjMiwKKwkweDI3LCAweGQ3LCAweDI1LCAweGY2LCAweDkwLCAweDlkLCAweDkzLCAweDYxLCAweDlkLCAweDFlLCAweDE5LCAweDY2LAorCTB4ZjcsIDB4ZDQsIDB4ZWMsIDB4ZmMsIDB4ODgsIDB4MjEsIDB4ZWMsIDB4NzMsIDB4NzQsIDB4MGUsIDB4YjksIDB4ZWYsCisJMHgxNCwgMHgxYSwgMHhjNiwgMHhhNSwgMHhlMiwgMHgzYiwgMHhlOSwgMHgxYiwgMHgzOCwgMHg3NywgMHgwNCwgMHhiMiwKKwkweDFiLCAweGYyLCAweGZjLCAweGY0LCAweDZjLCAweGQ4LCAweDM0LCAweDFjLCAweDFmLCAweDAzLCAweGZjLCAweDA4LAorCTB4YzAsIDB4YTksIDB4N2EsIDB4N2UsIDB4OTAsIDB4MGQsIDB4M2QsIDB4NjgsIDB4MGUsIDB4ODcsIDB4N2MsIDB4NzMsCisJMHgyOCwgMHhmMSwgMHgwNiwgMHg2ZSwgMHg4ZiwgMHg1OCwgMHhiYywgMHg4MywgMHg5ZSwgMHgzOCwgMHhjNSwgMHg5ZCwKKwkweDE4LCAweDkzLCAweGVlLCAweDgwLCAweDc4LCAweDQxLCAweGM0LCAweGZhLCAweGY5LCAweGZhLCAweGNiLCAweGVmLAorCTB4N2MsIDB4NTEsIDB4ZjMsIDB4YWYsIDB4YWQsIDB4NDksIDB4NmQsIDB4YmEsIDB4M2MsIDB4YWQsIDB4NGQsIDB4MTUsCisJMHg1MSwgMHhlZSwgMHhhMiwgMHg1NiwgMHhkYiwgMHg5NywgMHgzNiwgMHg1ZCwgMHgxYywgMHgxMSwgMHg3YywgMHgzMCwKKwkweDc5LCAweGFkLCAweDQyLCAweDc4LCAweDRmLCAweGRiLCAweGJlLCAweDI1LCAweGI4LCAweGVkLCAweDgwLCAweDBmLAorCTB4YWIsIDB4OGEsIDB4NzMsIDB4MTgsIDB4MmQsIDB4YmMsIDB4OTcsIDB4YjQsIDB4YmQsIDB4YjgsIDB4YjksIDB4OGUsCisJMHg1YiwgMHhiZSwgMHgzZiwgMHgxZCwgMHgyMCwgMHhkZiwgMHg5YiwgMHhkOSwgMHgwYSwgMHg5MSwgMHhiZiwgMHgyOSwKKwkweGUyLCAweGIyLCAweGE5LCAweDY4LCAweDIxLCAweGRlLCAweGYxLCAweDMwLCAweGUyLCAweDdiLCAweGUxLCAweGQ3LAorCTB4YTgsIDB4NjIsIDB4ZTEsIDB4NmUsIDB4MzAsIDB4MTYsIDB4YWEsIDB4ZjYsIDB4NjAsIDB4MWQsIDB4YjksIDB4YTMsCisJMHgyYywgMHg4YiwgMHhjMywgMHhlOSwgMHg1ZSwgMHgwYSwgMHg5OSwgMHgyOCwgMHhmZiwgMHg2YywgMHhlMiwgMHgzZSwKKwkweDFkLCAweDczLCAweDc4LCAweDA5LCAweGZjLCAweDNjLCAweGIyLCAweGRlLCAweDRjLCAweDBiLCAweDc2LCAweGUxLAorCTB4NjAsIDB4N2YsIDB4NDYsIDB4ODQsIDB4NjUsIDB4ZjMsIDB4NjcsIDB4YmQsIDB4YWQsIDB4ZjksIDB4MzMsIDB4NTQsCisJMHgzOSwgMHhkNCwgMHhlZCwgMHhhMiwgMHgzNSwgMHgwYiwgMHg3MSwgMHg5MiwgMHhmMCwgMHgyZiwgMHg3NSwgMHg3NywKKwkweGI0LCAweDliLCAweDQxLCAweGYyLCAweDRmLCAweGM1LCAweDdlLCAweDgyLCAweDFmLCAweGM5LCAweGI5LCAweGJhLAorCTB4NDEsIDB4OTgsIDB4M2IsIDB4OWIsIDB4YmUsIDB4NmYsIDB4MzAsIDB4NTcsIDB4ZGIsIDB4YjEsIDB4MjksIDB4MzcsCisJMHg5ZiwgMHgyYiwgMHhjMywgMHgzMywgMHg1NywgMHhkOCwgMHg4YiwgMHg5YSwgMHhjZCwgMHg5NSwgMHhmMiwgMHg0MywKKwkweDJhLCAweGRmLCAweGRjLCAweDUxLCAweGM4LCAweDkzLCAweDQ1LCAweGY3LCAweDVjLCAweGVkLCAweDhjLCAweDdmLAorCTB4NGUsIDB4Y2UsIDB4ZDksIDB4NGUsIDB4ZmIsIDB4ZTAsIDB4MWEsIDB4OGYsIDB4NDMsIDB4MzQsIDB4ZDAsIDB4NzYsCisJMHgxMiwgMHgyYywgMHgzMywgMHhmYywgMHg2YiwgMHhlYiwgMHg4NiwgMHg1YywgMHg1YiwgMHhjYywgMHgyYiwgMHg5ZSwKKwkweDZmLCAweGI4LCAweGI2LCAweGIwLCAweDBmLCAweDVjLCAweDcwLCAweGY2LCAweDgxLCAweGQzLCAweDNlLCAweDdkLAorCTB4NTEsIDB4ZDksIDB4YmMsIDB4ZmYsIDB4YWIsIDB4ZWQsIDB4MGQsIDB4Y2YsIDB4N2QsIDB4MjIsIDB4Y2UsIDB4ZTksCisJMHhjOCwgMHg5MSwgMHhkYywgMHg0NywgMHhjZSwgMHgzNywgMHhlNCwgMHg2MSwgMHgzZCwgMHhkYiwgMHg1YywgMHhhNywKKwkweDZhLCAweGVlLCAweDkxLCAweDczLCAweDAxLCAweDc5LCAweDk5LCAweGE1LCAweGYzLCAweGY5LCAweGM3LCAweDA2LAorCTB4NzUsIDB4ZjcsIDB4NTMsIDB4YTQsIDB4MWEsIDB4ZDMsIDB4NzIsIDB4NDAsIDB4ZjAsIDB4NjEsIDB4YjcsIDB4YmUsCisJMHhiYywgMHhlYywgMHhlNCwgMHgyOCwgMHhlNiwgMHg1YywgMHg2MywgMHhiMCwgMHg5YywgMHhjZiwgMHgzNiwgMHg4OSwKKwkweGE3LCAweDZmLCAweDI1LCAweDllLCAweDYzLCAweGMwLCAweDIzLCAweDM3LCAweGJkLCAweDczLCAweDM1LCAweGExLAorCTB4NjUsIDB4ZjIsIDB4YTgsIDB4YjMsIDB4ODcsIDB4Y2UsIDB4ZWEsIDB4OWYsIDB4ZjAsIDB4MTgsIDB4M2QsIDB4YjEsCisJMHgyMywgMHhlMiwgMHg5YywgMHgxMSwgMHhlMCwgMHhkMiwgMHhiNiwgMHg5NywgMHhjZCwgMHgwZSwgMHg1YSwgMHg5NCwKKwkweDdlLCAweDQ2LCAweDlhLCAweGZhLCAweGY4LCAweDEyLCAweDE1LCAweDg1LCAweDdmLCAweDBiLCAweGI5LCAweDUxLAorCTB4YjAsIDB4NzEsIDB4YzMsIDB4NDcsIDB4ODcsIDB4ZTcsIDB4ZjAsIDB4ZjcsIDB4MWIsIDB4MTMsIDB4OGUsIDB4Y2MsCisJMHhmZCwgMHg5MywgMHgzMSwgMHg4YywgMHg3YSwgMHgzOCwgMHgwYiwgMHgwMSwgMHhlYiwgMHg5ZCwgMHgzNCwgMHhjOSwKKwkweDMxLCAweGI5LCAweDFkLCAweDcxLCAweDRlLCAweDgwLCAweDhjLCAweGNkLCAweGJiLCAweDVkLCAweGRlLCAweDhlLAorCTB4NGYsIDB4YTEsIDB4NTUsIDB4YmQsIDB4ZTQsIDB4ZWIsIDB4NjgsIDB4ZDgsIDB4ZmMsIDB4NzIsIDB4Y2YsIDB4ZjYsCisJMHg3ZCwgMHgwYSwgMHgyYSwgMHg3NywgMHg1ZiwgMHg3MSwgMHg1OCwgMHg3NSwgMHgyZCwgMHg3MywgMHg2OSwgMHhjMSwKKwkweDk5LCAweGU3LCAweGQ3LCAweDU1LCAweGRlLCAweDZkLCAweDc3LCAweDQwLCAweGRlLCAweDZkLCAweDg4LCAweGU2LAorCTB4ODQsIDB4YWYsIDB4MmUsIDB4NDQsIDB4MzksIDB4NDcsIDB4MzcsIDB4OTMsIDB4OWMsIDB4NWEsIDB4ZDksIDB4NmEsCisJMHgyMywgMHg0ZSwgMHhmYywgMHgyOSwgMHhlZSwgMHhkZCwgMHgzOSwgMHhmOSwgMHg3YywgMHg1ZiwgMHgwNCwgMHhjZiwKKwkweDQ2LCAweDRlLCAweGI1LCAweDJkLCAweDYyLCAweGYxLCAweDMzLCAweGEyLCAweDVjLCAweGE3LCAweGE3LCAweDFjLAorCTB4ZGYsIDB4MTcsIDB4ZDUsIDB4MzMsIDB4M2IsIDB4YjksIDB4N2MsIDB4OGEsIDB4NjQsIDB4MGUsIDB4N2QsIDB4MjcsCisJMHhjZCwgMHgxNSwgMHg5YiwgMHhmNSwgMHg2YiwgMHgxZiwgMHhlMiwgMHg4MSwgMHhlMywgMHhmMCwgMHg5NSwgMHgwYSwKKwkweGJmLCAweDk1LCAweGExLCAweGZhLCAweDgwLCAweDNlLCAweGI1LCAweDU3LCAweGZiLCAweDA0LCAweGY5LCAweDE0LAorCTB4MTIsIDB4N2UsIDB4MDUsIDB4YmUsIDB4NzYsIDB4ZGEsIDB4OTksIDB4MjMsIDB4NzcsIDB4YmYsIDB4YzIsIDB4ZGMsCisJMHgyZiwgMHgzYywgMHhhNywgMHhkMywgMHg1NSwgMHhiNiwgMHhkMywgMHg1NSwgMHhiNiwgMHgzNiwgMHg1ZSwgMHgzYSwKKwkweGViLCAweDU0LCAweDBiLCAweGU1LCAweDFmLCAweDU5LCAweDJmLCAweGZkLCAweDU2LCAweGQ4LCAweGU2LCAweGU2LAorCTB4YjMsIDB4MDYsIDB4MmQsIDB4YWMsIDB4ZjcsIDB4ZjIsIDB4MjcsIDB4YzYsIDB4MWYsIDB4OTQsIDB4ZGIsIDB4Y2IsCisJMHhmZiwgMHhkZCwgMHg5YywgMHhhMiwgMHg1ZiwgMHhjNCwgMHgwMiwgMHhiNiwgMHhjZSwgMHgwNywgMHg4MywgMHhmMSwKKwkweDFmLCAweGJjLCAweDZlLCAweDEzLCAweDAxLCAweGViLCAweGI2LCAweGY5LCAweGJlLCAweDIyLCAweGY3LCAweDkzLAorCTB4ZTQsIDB4OTUsIDB4OGEsIDB4MjMsIDB4YWYsIDB4MzYsIDB4NjksIDB4ZDAsIDB4MjcsIDB4YTcsIDB4ODIsIDB4ZDYsCisJMHgyOSwgMHhmYSwgMHg3OCwgMHhjYSwgMHhlOSwgMHhlMywgMHg5YiwgMHhhMiwgMHgzZiwgMHhlMywgMHg1NCwgMHhhOCwKKwkweGU2LCAweDBkLCAweDFmLCAweGUxLCAweGViLCAweDk4LCAweGIyLCAweGQxLCAweDM1LCAweDkwLCAweGFiLCAweGRmLAorCTB4NmMsIDB4NDMsIDB4YzYsIDB4MDQsIDB4NzEsIDB4YjIsIDB4MDMsIDB4MDEsIDB4ZmEsIDB4ODAsIDB4ZWUsIDB4ZDIsCisJMHgwNywgMHhlMiwgMHg1NSwgMHg3ZCwgMHg2MCwgMHg0NSwgMHhlOCwgMHgwOSwgMHhiYiwgMHgxYywgMHgxZCwgMHgzNCwKKwkweGQ4LCAweDE2LCAweDk3LCAweGNiLCAweGUzLCAweGNjLCAweDFiLCAweGQ4LCAweGY4LCAweGE0LCAweDFkLCAweDdkLAorCTB4ZGEsIDB4YWEsIDB4OWUsIDB4OTksIDB4YzMsIDB4YmEsIDB4NjUsIDB4OGQsIDB4NGIsIDB4ZmIsIDB4ZTUsIDB4MDksCisJMHhjZSwgMHhhYywgMHhhOCwgMHhjYywgMHgzZSwgMHgzMCwgMHhhMywgMHhhNCwgMHhhNSwgMHg5MywgMHhmMSwgMHhhOSwKKwkweDUwLCAweDg0LCAweDE2LCAweGFjLCAweDI4LCAweDE1LCAweGFjLCAweDE0LCAweDczLCAweDcwLCAweGYwLCAweGUzLAorCTB4ZDAsIDB4ODAsIDB4NDYsIDB4MTEsIDB4OTYsIDB4MzUsIDB4MTEsIDB4MmEsIDB4OTUsIDB4OTQsIDB4NGUsIDB4NzYsCisJMHg4NiwgMHhjOCwgMHgyYywgMHhjNiwgMHhhNCwgMHgwZCwgMHg5YiwgMHg3MSwgMHg5YSwgMHgxZiwgMHgzMywgMHhlNiwKKwkweDQ5LCAweDQzLCAweGNjLCAweDhiLCAweDkzLCAweGEzLCAweDBlLCAweDBjLCAweDhhLCAweDM4LCAweDRiLCAweGZkLAorCTB4ZTUsIDB4OTEsIDB4MjgsIDB4YjUsIDB4YTcsIDB4YTUsIDB4Y2QsIDB4NjgsIDB4ODYsIDB4ZGIsIDB4ZjgsIDB4YzIsCisJMHg4YSwgMHhkMSwgMHg5NSwgMHg3YywgMHhkMiwgMHgzOCwgMHhjMSwgMHhlZCwgMHg2NCwgMHhhYywgMHg2NCwgMHg2MiwKKwkweDkyLCAweDlmLCAweDVkLCAweDJjLCAweDQ1LCAweDI4LCAweDY3LCAweDQ1LCAweGE4LCAweDUwLCAweDRhLCAweDE5LAorCTB4NDMsIDB4NmQsIDB4YTIsIDB4Y2QsIDB4MTgsIDB4ZGEsIDB4N2MsIDB4NDksIDB4MWYsIDB4MzMsIDB4NGUsIDB4OTIsCisJMHhiYiwgMHhjZCwgMHhhZiwgMHg5YywgMHgzNiwgMHhiZCwgMHg2ZCwgMHhmZCwgMHg2MSwgMHhlMywgMHhmZSwgMHg0NCwKKwkweGE4LCAweDMyLCAweDdiLCAweDlmLCAweGYxLCAweDkyLCAweDViLCAweDlkLCAweDYwLCAweGQ5LCAweDE0LCAweDEzLAorCTB4NjcsIDB4ZGIsIDB4NjgsIDB4ZTksIDB4MzQsIDB4Y2IsIDB4MWQsIDB4OWMsIDB4NmQsIDB4NjEsIDB4ZDAsIDB4NjIsCisJMHgzOSwgMHg0ZSwgMHhlZiwgMHg1NywgMHhlZCwgMHgwNywgMHgxMiwgMHg0MywgMHgzOSwgMHg5MSwgMHg0MywgMHg4NCwKKwkweDMzLCAweDE3LCAweDJhLCAweGIzLCAweGJmLCAweDliLCAweDVlLCAweDdmLCAweDNmLCAweGViLCAweDViLCAweDFmLAorCTB4YzUsIDB4MjgsIDB4NzIsIDB4MTUsIDB4NzEsIDB4ZGQsIDB4MzYsIDB4NWQsIDB4MWIsIDB4NGYsIDB4NWUsIDB4ZDksCisJMHgxNCwgMHg3OSwgMHg2OCwgMHgwOSwgMHg1YSwgMHgzMywgMHhhNSwgMHgzYywgMHhjZCwgMHg3MSwgMHhmOSwgMHgxNSwKKwkweDk0LCAweDViLCAweDRiLCAweGQwLCAweDNkLCAweDkxLCAweDhmLCAweGQ2LCAweDRlLCAweDc3LCAweGY0LCAweDE4LAorCTB4ODUsIDB4NmUsIDB4OWEsIDB4YzYsIDB4YmMsIDB4ZjAsIDB4MGIsIDB4NTcsIDB4NjYsIDB4ODcsIDB4ODYsIDB4MGQsCisJMHhkMiwgMHhhZSwgMHhhMiwgMHgxZSwgMHhmZiwgMHhiZiwgMHg4OSwgMHhmYiwgMHgyOCwgMHg2MSwgMHg3ZSwgMHg2NiwKKwkweGFjLCAweDMxLCAweDVlLCAweDQ5LCAweGMzLCAweGYxLCAweDEyLCAweDY0LCAweGYzLCAweDQxLCAweDg5LCAweGE1LAorCTB4MzksIDB4MjMsIDB4NDIsIDB4ZDAsIDB4NWYsIDB4NjEsIDB4N2IsIDB4ZWIsIDB4MzUsIDB4MjcsIDB4N2IsIDB4YTQsCisJMHhmZSwgMHhlNCwgMHgzYiwgMHg5YiwgMHg0MywgMHg5ZiwgMHgxOSwgMHg3MSwgMHg5ZiwgMHhjZiwgMHg1MSwgMHg3YiwKKwkweDY2LCAweGM2LCAweDkyLCAweGVmLCAweGI5LCAweDUyLCAweGVlLCAweGE1LCAweDI1LCAweDZlLCAweDdiLCAweDY0LAorCTB4ZjgsIDB4OGMsIDB4NzMsIDB4YTYsIDB4MGYsIDB4ZmYsIDB4ZDksIDB4OGIsIDB4N2IsIDB4ODUsIDB4YjcsIDB4N2QsCisJMHg3ZCwgMHgxNCwgMHhjNSwgMHgzZCwgMHgwZCwgMHhlOCwgMHgzYywgMHhjNywgMHhiMCwgMHhlOSwgMHg4NywgMHhjNSwKKwkweGI4LCAweGE3LCAweGUyLCAweDk4LCAweGNiLCAweGI5LCAweGI4LCAweDNhLCAweDk3LCAweDA4LCAweDY1LCAweGJhLAorCTB4ZTksIDB4OTEsIDB4ZDUsIDB4NDUsIDB4M2YsIDB4OGIsIDB4ZjMsIDB4NDcsIDB4ZjgsIDB4YmEsIDB4ODQsIDB4OWMsCisJMHhhMywgMHgzNiwgMHhjYSwgMHg2NCwgMHhiYiwgMHg2OSwgMHhiMywgMHgxNCwgMHg2NiwgMHg3MSwgMHgwNSwgMHhlYywKKwkweDQ0LCAweGI5LCAweDRjLCAweDgxLCAweGE2LCAweGQ2LCAweDVmLCAweGViLCAweDgzLCAweDFmLCAweDY2LCAweDUyLAorCTB4YWIsIDB4NjEsIDB4ZTksIDB4NTEsIDB4MDAsIDB4OTYsIDB4N2UsIDB4YTksIDB4YzMsIDB4ZDIsIDB4ZDEsIDB4YmUsCisJMHhlNiwgMHg1OCwgMHhlYSwgMHg3NywgMHg2MiwgMHhkNiwgMHhhMywgMHgxNCwgMHg3MSwgMHg3MCwgMHhmNCwgMHgzOSwKKwkweGUzLCAweGU4LCAweDNkLCAweGM2LCAweGQxLCAweGYxLCAweDA2LCAweDM4LCAweGQyLCAweDNjLCAweDM4LCAweDNhLAorCTB4NTEsIDB4ODcsIDB4YTMsIDB4NmMsIDB4NWYsIDB4MzMsIDB4MWMsIDB4MWQsIDB4MGYsIDB4YTEsIDB4ZmYsIDB4Y2QsCisJMHhkNiwgMHgzMiwgMHhmYSwgMHhiMCwgMHg5ZiwgMHgzOSwgMHhiZCwgMHg0OSwgMHhhNSwgMHhkNSwgMHhlNCwgMHhmOCwKKwkweDI0LCAweDU1LCAweDkwLCAweDczLCAweDkyLCAweDU4LCAweGEyLCAweGI0LCAweGUwLCAweDc2LCAweDA1LCAweDgxLAorCTB4YmYsIDB4MmMsIDB4OGYsIDB4YzksIDB4YWUsIDB4MDYsIDB4ZTcsIDB4YWEsIDB4MjQsIDB4OWMsIDB4NzksIDB4OTMsCisJMHg3MywgMHg5OSwgMHhjOSwgMHg1NywgMHg2NiwgMHgxZiwgMHgzMiwgMHgzNiwgMHhlZSwgMHg2ZCwgMHhlOCwgMHgzYSwKKwkweDdlLCAweDBiLCAweGIxLCAweDhjLCAweGJjLCAweGJiLCAweDgxLCAweDczLCAweDViLCAweGUyLCAweDc0LCAweGRmLAorCTB4MWEsIDB4YTAsIDB4N2IsIDB4ZDYsIDB4N2UsIDB4YmEsIDB4NmIsIDB4MGQsIDB4ZDIsIDB4MDMsIDB4MGIsIDB4NmQsCisJMHg2MCwgMHgwZSwgMHhmOCwgMHg1ZSwgMHhjYywgMHg4MSwgMHg0NiwgMHgzMywgMHgzMSwgMHgyZSwgMHg1MywgMHhkYSwKKwkweDRmLCAweDk1LCAweDkyLCAweGMyLCAweDM1LCAweGIwLCAweDAzLCAweDBjLCAweDM1LCAweGM2LCAweDRlLCAweGE2LAorCTB4MGUsIDB4M2IsIDB4YjIsIDB4MGUsIDB4MzAsIDB4YjMsIDB4ZTQsIDB4YjcsIDB4YWQsIDB4ZWQsIDB4MzIsIDB4ZjgsCisJMHg1ZCwgMHgwZCwgMHhjNiwgMHg1NiwgMHg1OCwgMHhjNCwgMHg5MSwgMHgyNCwgMHg0NywgMHg2NywgMHg0MiwgMHg5MCwKKwkweDU5LCAweGI3LCAweDE4LCAweDUzLCAweDNjLCAweDE3LCAweDNjLCAweDdlLCAweGRhLCAweGY1LCAweDQxLCAweDk2LAorCTB4MzksIDB4NGYsIDB4MDksIDB4MWIsIDB4ZjQsIDB4OTQsIDB4YTksIDB4YzcsIDB4MzMsIDB4NjQsIDB4NWYsIDB4ZDYsCisJMHhjYywgMHgzMSwgMHg5MSwgMHhlYiwgMHhiNiwgMHg1NCwgMHhmNiwgMHg5ZSwgMHgzMSwgMHg5MSwgMHhlMSwgMHhiMSwKKwkweDU3LCAweDc4LCAweGY0LCAweGNhLCAweGExLCAweDc2LCAweGFhLCAweDM4LCAweDMxLCAweDRjLCAweDg1LCAweDU1LAorCTB4ZGIsIDB4N2UsIDB4YzgsIDB4ZmMsIDB4N2YsIDB4Y2QsIDB4ODQsIDB4Y2MsIDB4ZmUsIDB4ZGIsIDB4YWUsIDB4YzQsCisJMHg3NCwgMHg1YSwgMHgzNiwgMHg1NSwgMHhkZiwgMHhlZSwgMHgwOCwgMHg3YywgMHgzMSwgMHg0NywgMHhhNCwgMHg3NywKKwkweDM3LCAweGFhLCAweGFmLCAweGM0LCAweGJmLCAweGUzLCAweGJiLCAweGJmLCAweDA0LCAweDk3LCAweDU5LCAweGFiLAorCTB4OTYsIDB4ODUsIDB4ZWQsIDB4ZjgsIDB4ZDIsIDB4ZDgsIDB4YzIsIDB4MmEsIDB4Y2UsIDB4N2UsIDB4N2IsIDB4ZmMsCisJMHhlYSwgMHhmOSwgMHhkNSwgMHg1YywgMHgxZiwgMHg0YiwgMHhkOCwgMHg5NCwgMHg0ZSwgMHg3NiwgMHg2OCwgMHg3OSwKKwkweDNjLCAweGY3LCAweDVjLCAweDk4LCAweDg2LCAweDE5LCAweDk3LCAweDM4LCAweDgzLCAweDZiLCAweDZjLCAweDM0LAorCTB4MmMsIDB4Y2UsIDB4MzgsIDB4ZDksIDB4Y2QsIDB4NzgsIDB4YzgsIDB4MGEsIDB4M2IsIDB4ZmQsIDB4ZDQsIDB4OTEsCisJMHgwOSwgMHg5YSwgMHgyYywgMHhhNywgMHhmOSwgMHg1MywgMHgzZiwgMHg3ZSwgMHhiNSwgMHhiOSwgMHhlMywgMHhlMSwKKwkweDQ4LCAweGUzLCAweDM3LCAweDM3LCAweGZmLCAweGE4LCAweGQ1LCAweDlkLCAweGU2LCAweGJhLCAweDMzLCAweDViLAorCTB4ZDYsIDB4NTUsIDB4ZTcsIDB4MTIsIDB4ZmQsIDB4MDMsIDB4NjksIDB4YWUsIDB4MWIsIDB4YTMsIDB4YmMsIDB4NTcsCisJMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgdTMyIGJueDJfQ09NX2IwNkZ3RGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9Owogc3RhdGljIHUzMiBibngyX0NPTV9iMDZGd1JvZGF0YVsoMHg1OC80KSArIDFdID0gewpAQCAtOTg5LDk1MiArNjg3LDM2OCBAQAogc3RhdGljIGludCBibngyX1JYUF9iMDZGd0Jzc0xlbiA9IDB4MTNhNDsKIHN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndTYnNzQWRkciA9IDB4MDgwMDU4ZTA7CiBzdGF0aWMgaW50IGJueDJfUlhQX2IwNkZ3U2Jzc0xlbiA9IDB4MWM7Ci1zdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3VGV4dFsoMHg1ODhjLzQpICsgMV0gPSB7Ci0JMHgwYTAwMGM2MSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHg3Mjc4NzAyMCwgMHgzMjJlMzYyZSwKLQkweDMxMDAwMDAwLCAweDAyMDYwMTAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwKLQkweDNjMDIwODAwLCAweDI0NDI1OGUwLCAweDNjMDMwODAwLCAweDI0NjM2Y2E0LCAweGFjNDAwMDAwLCAweDAwNDMyMDJiLAotCTB4MTQ4MGZmZmQsIDB4MjQ0MjAwMDQsIDB4M2MxZDA4MDAsIDB4MzdiZDdmZmMsIDB4MDNhMGYwMjEsIDB4M2MxMDA4MDAsCi0JMHgyNjEwMzE4NCwgMHgzYzFjMDgwMCwgMHgyNzljNThlMCwgMHgwZTAwMTA0YSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwKLQkweDI3YmRmZmU4LCAweGFmYjAwMDEwLCAweGFmYmYwMDE0LCAweDBlMDAwZjFkLCAweDAwODA4MDIxLCAweDE0NDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMTAsIDB4MTA0MDAwMDUsIDB4MDAwMDAwMDAsIDB4OTc0MzAxMWMsIDB4OTc0MjAxMWUsCi0JMHgwYTAwMGM4OSwgMHgwMDAyMTQwMCwgMHg5NzQzMDExZSwgMHg5NzQyMDExYywgMHgwMDAyMTQwMCwgMHgwMDYyMTgyNSwKLQkweGFmODMwMDA0LCAweDhmODQwMDA4LCAweDNjMDIwMDIwLCAweDM0NDI0MDAwLCAweDAwODIxODI0LCAweDU0NjIwMDA0LAotCTB4M2MwMjAwMjAsIDB4OGY4MjAwMTQsIDB4MGEwMDBjOWEsIDB4MzQ0MjEwMDAsIDB4MzQ0MjgwMDAsIDB4MDA4MjE4MjQsCi0JMHgxNDYyMDAwNCwgMHgwMDAwMDAwMCwgMHg4ZjgyMDAxNCwgMHgzNDQyODAwMCwgMHhhZjgyMDAxNCwgMHg4ZjgyMDAwOCwKLQkweDk3NDMwMTBjLCAweDAwNDAzMDIxLCAweDMwNDIxMDAwLCAweDEwNDAwMDEwLCAweDMwNjlmZmZmLCAweDMwYzIwMDIwLAotCTB4MTQ0MDAwMGUsIDB4MjQwNzAwMDUsIDB4M2MwMjEwMDAsIDB4MDBjMjEwMjQsIDB4MTA0MDAwMDksIDB4M2MwMzBkZmYsCi0JMHgzNDYzZmZmZiwgMHgzYzAyMGUwMCwgMHgwMGMyMTAyNCwgMHgwMDYyMTgyYiwgMHg1MDYwMDAwNCwgMHgyNDA3MDAwMSwKLQkweDBhMDAwY2IyLCAweDNjMDIwODAwLCAweDI0MDcwMDAxLCAweDNjMDIwODAwLCAweDhjNDMwMDM0LCAweDE0NjAwMDFkLAotCTB4MDA0MDU4MjEsIDB4OGY4MjAwMTQsIDB4MzA0MjQwMDAsIDB4MTQ0MDAwMWEsIDB4M2MwMjAwMDEsIDB4M2MwMjFmMDEsCi0JMHgwMGMyNDAyNCwgMHgzYzAzMTAwMCwgMHgxNTAzMDAxNSwgMHgzYzAyMDAwMSwgMHgzMTIyMDIwMCwgMHgxNDQwMDAxMiwKLQkweDNjMDIwMDAxLCAweDk3NDQwMTBlLCAweDI0MDIwMDAzLCAweGEzNDIwMThiLCAweDk3ODUwMDE2LCAweDI0MDIwMDAyLAotCTB4MzRlMzAwMDIsIDB4YWY0MDAxODAsIDB4YTc0MjAxOGMsIDB4YTc0MzAxODgsIDB4MjQ4NDAwMDQsIDB4MzBhNWJmZmYsCi0JMHhhNzQ0MDE4ZSwgMHhhNzQ1MDFhNiwgMHhhZjQ4MDFiOCwgMHgwYTAwMGYxOSwgMHgwMDAwMTAyMSwgMHgzYzAyMDAwMSwKLQkweDAwYzIxMDI0LCAweDEwNDAwMDJmLCAweDAwMDAwMDAwLCAweDk3NDIwMTBlLCAweDNjMDM4MDAwLCAweDMwNDZmZmZmLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsIDB4OTc4NDAwMGEsCi0JMHg4Zjg1MDAwNCwgMHg4Zjg3MDAxNCwgMHgyNDAyMDA4MCwgMHgyNDAzMDAwMiwgMHhhZjQyMDE4MCwgMHgyNDAyMDAwMywKLQkweGE3NDMwMThjLCAweGE3NDYwMThlLCAweGE3NDIwMTg4LCAweDMwZTI4MDAwLCAweGE3NDQwMTkwLCAweDEwNDAwMDBjLAotCTB4YWY0NTAxYTgsIDB4OTM0MjAxMTYsIDB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsIDB4MjQ0MjQwMDQsIDB4OGM0MzAwMDAsCi0JMHgzMDYzZmZmZiwgMHgxNDYwMDAwNCwgMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwgMHgwMGUyMTAyNCwgMHhhZjgyMDAxNCwKLQkweDk3ODIwMDE2LCAweDk3NDMwMTBjLCAweDhmNDQwMTA0LCAweDMwNDJiZmZmLCAweDAwMDMxYzAwLCAweDMwODRmZmZmLAotCTB4MDA2NDE4MjUsIDB4YTc0MjAxYTYsIDB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsIDB4MGEwMDBmMTksCi0JMHgwMDAwMTAyMSwgMHg4ZjgyMDAxNCwgMHgzMDQzNDAwMCwgMHgxMDYwMDAxNiwgMHgwMDQwNDAyMSwgMHgzYzAyMGYwMCwKLQkweDAwYzIxMDI0LCAweDE0NDAwMDEyLCAweDAwMDAwMDAwLCAweDkzNDIwMTE2LCAweDM0NDI0MDAwLCAweDAzNDIxODIxLAotCTB4OTQ2NTAwMDIsIDB4MmNhMjEzODksIDB4MTA0MDAwMGIsIDB4M2MwMjA4MDAsIDB4MjQ0MjU5MDAsIDB4MDAwNTE5NDIsCi0JMHgwMDAzMTg4MCwgMHgwMDYyMTgyMSwgMHgzMGE1MDAxZiwgMHg4YzY0MDAwMCwgMHgyNDAyMDAwMSwgMHgwMGEyMTAwNCwKLQkweDAwODIyMDI0LCAweDAyMDQ4MDI1LCAweDEyMDAwMDMwLCAweDNjMDIxMDAwLCAweDk3NDIwMTBlLCAweDM0ZTgwMDAyLAotCTB4M2MwMzgwMDAsIDB4MjQ0MjAwMDQsIDB4MzA0NmZmZmYsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMywgMHhhMzQyMDE4YiwgMHg5Nzg0MDAwYSwgMHg4Zjg1MDAwNCwgMHg4Zjg3MDAxNCwgMHgyNDAyMDE4MCwKLQkweDI0MDMwMDAyLCAweGFmNDIwMTgwLCAweGE3NDMwMThjLCAweGE3NDYwMThlLCAweGE3NDgwMTg4LCAweDMwZTI4MDAwLAotCTB4YTc0NDAxOTAsIDB4MTA0MDAwMGMsIDB4YWY0NTAxYTgsIDB4OTM0MjAxMTYsIDB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsCi0JMHgyNDQyNDAwNCwgMHg4YzQzMDAwMCwgMHgzMDYzZmZmZiwgMHgxNDYwMDAwNCwgMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwKLQkweDAwZTIxMDI0LCAweGFmODIwMDE0LCAweDk3ODIwMDE2LCAweDk3NDMwMTBjLCAweDhmNDQwMTA0LCAweDMwNDJiZmZmLAotCTB4MDAwMzFjMDAsIDB4MzA4NGZmZmYsIDB4MDA2NDE4MjUsIDB4YTc0MjAxYTYsIDB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsCi0JMHhhZjQyMDFiOCwgMHgwYTAwMGYxOSwgMHgwMDAwMTAyMSwgMHgwMGMyMTAyNCwgMHgxMDQwMDBjMCwgMHgzYzAyMDgwMCwKLQkweDhjNDMwMDMwLCAweDEwNjAwMDM3LCAweDMxMDI0MDAwLCAweDEwNDAwMDM1LCAweDNjMDMwZjAwLCAweDAwYzMxODI0LAotCTB4M2MwMjAxMDAsIDB4MDA0MzEwMmIsIDB4MTQ0MDAwMzEsIDB4M2MwMzA4MDAsIDB4OTc0MjAxMGUsIDB4MzRlODAwMDIsCi0JMHgzYzAzODAwMCwgMHgyNDQyMDAwNCwgMHgzMDQ2ZmZmZiwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDI0MDIwMDAzLCAweGEzNDIwMThiLCAweDk3ODQwMDBhLCAweDhmODUwMDA0LCAweDhmODcwMDE0LCAweDI0MDIwMDgwLAotCTB4MjQwMzAwMDIsIDB4YWY0MjAxODAsIDB4YTc0MzAxOGMsIDB4YTc0NjAxOGUsIDB4YTc0ODAxODgsIDB4MzBlMjgwMDAsCi0JMHhhNzQ0MDE5MCwgMHgxMDQwMDAwYywgMHhhZjQ1MDFhOCwgMHg5MzQyMDExNiwgMHgzMDQyMDBmYywgMHgwMDVhMTAyMSwKLQkweDI0NDI0MDA0LCAweDhjNDMwMDAwLCAweDMwNjNmZmZmLCAweDE0NjAwMDA0LCAweDNjMDJmZmZmLCAweDM0NDI3ZmZmLAotCTB4MDBlMjEwMjQsIDB4YWY4MjAwMTQsIDB4OTc4MjAwMTYsIDB4OTc0MzAxMGMsIDB4OGY0NDAxMDQsIDB4MzA0MmJmZmYsCi0JMHgwMDAzMWMwMCwgMHgzMDg0ZmZmZiwgMHgwMDY0MTgyNSwgMHhhNzQyMDFhNiwgMHhhZjQzMDFhYywgMHgzYzAyMTAwMCwKLQkweGFmNDIwMWI4LCAweDBhMDAwZjE5LCAweDAwMDAxMDIxLCAweDNjMDMwODAwLCAweDhjNjIwMDI0LCAweDMwNDIwMDA4LAotCTB4MTA0MDAwMzUsIDB4MzRlYTAwMDIsIDB4M2MwMjBmMDAsIDB4MDBjMjEwMjQsIDB4MTQ0MDAwMzIsIDB4OGQ2MjAwMzQsCi0JMHgzMTIyMDIwMCwgMHgxMDQwMDAyZiwgMHg4ZDYyMDAzNCwgMHg5NzQyMDEwZSwgMHgzMGU4ZmZmYiwgMHgzYzAzODAwMCwKLQkweDI0NDIwMDA0LCAweDMwNDZmZmZmLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAzLAotCTB4YTM0MjAxOGIsIDB4OTc4NDAwMGEsIDB4OGY4NTAwMDQsIDB4OGY4NzAwMTQsIDB4MjQwMjAxODAsIDB4MjQwMzAwMDIsCi0JMHhhZjQyMDE4MCwgMHhhNzQzMDE4YywgMHhhNzQ2MDE4ZSwgMHhhNzQ4MDE4OCwgMHgzMGUyODAwMCwgMHhhNzQ0MDE5MCwKLQkweDEwNDAwMDBjLCAweGFmNDUwMWE4LCAweDkzNDIwMTE2LCAweDMwNDIwMGZjLCAweDAwNWExMDIxLCAweDI0NDI0MDA0LAotCTB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsIDB4MTQ2MDAwMDQsIDB4M2MwMmZmZmYsIDB4MzQ0MjdmZmYsIDB4MDBlMjEwMjQsCi0JMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwgMHg5NzQzMDEwYywgMHg4ZjQ0MDEwNCwgMHgzMDQyYmZmZiwgMHgwMDAzMWMwMCwKLQkweDMwODRmZmZmLCAweDAwNjQxODI1LCAweGE3NDIwMWE2LCAweGFmNDMwMWFjLCAweDNjMDIxMDAwLCAweGFmNDIwMWI4LAotCTB4OGQ2MjAwMzQsIDB4OGY4NjAwMDgsIDB4MTA0MDAwMTIsIDB4MzBjMjAxMDAsIDB4MTA0MDAwMTAsIDB4M2MwMjBmMDAsCi0JMHgwMGMyMTAyNCwgMHgzYzAzMDIwMCwgMHgxMDQzMDAwYywgMHgzYzAyMDgwMCwgMHg4YzQzMDAzOCwgMHg4Zjg0MDAwNCwKLQkweDNjMDIwODAwLCAweDI0NDIwMDNjLCAweDI0NjNmZmZmLCAweDAwODMyMDI0LCAweDAwODIyMDIxLCAweDkwODMwMDAwLAotCTB4MjQ2MzAwMDQsIDB4MGEwMDBkZTEsIDB4MDAwMzI5YzAsIDB4MDAwMDAwMDAsIDB4MDAwNjE2MDIsIDB4MzA0MjAwMGYsCi0JMHgwMDAyMjljMCwgMHgzYzA0ZmMwMCwgMHgwMDQ0MTAyMSwgMHgzYzAzMDMwMCwgMHgwMDYyMTgyYiwgMHg1MDYwMDAwMSwKLQkweDI0MDUwODAwLCAweDk3NDIwMTBlLCAweDMxNDhmZmZmLCAweDNjMDM4MDAwLCAweDI0NDIwMDA0LCAweDMwNDZmZmZmLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsIDB4OTc4MzAwMGEsCi0JMHg4Zjg0MDAwNCwgMHg4Zjg3MDAxNCwgMHgyNDAyMDAwMiwgMHhhZjQ1MDE4MCwgMHhhNzQyMDE4YywgMHhhNzQ2MDE4ZSwKLQkweGE3NDgwMTg4LCAweDMwZTI4MDAwLCAweGE3NDMwMTkwLCAweDEwNDAwMDBjLCAweGFmNDQwMWE4LCAweDkzNDIwMTE2LAotCTB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsIDB4MjQ0MjQwMDQsIDB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsIDB4MTQ2MDAwMDQsCi0JMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwgMHgwMGUyMTAyNCwgMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwgMHg5NzQzMDEwYywKLQkweDhmNDQwMTA0LCAweDMwNDJiZmZmLCAweDAwMDMxYzAwLCAweDMwODRmZmZmLCAweDAwNjQxODI1LCAweGE3NDIwMWE2LAotCTB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsIDB4MGEwMDBmMTksIDB4MDAwMDEwMjEsIDB4OGY0MjQwMDAsCi0JMHgzMDQyMDEwMCwgMHgxMDQwMDBkNSwgMHgzYzAyMDgwMCwgMHg4YzQ0MDAyNCwgMHgyNDAzMDAwMSwgMHgxNDgzMDAyZiwKLQkweDAwNDA1MDIxLCAweDk3NDIwMTBlLCAweDM0ZTcwMDAyLCAweDNjMDM4MDAwLCAweDI0NDIwMDA0LCAweDMwNDVmZmZmLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsIDB4OTc4MzAwMGEsCi0JMHg4Zjg0MDAwNCwgMHg4Zjg2MDAxNCwgMHgyNDAyMDAwMiwgMHhhZjQwMDE4MCwgMHhhNzQyMDE4YywgMHhhNzQ1MDE4ZSwKLQkweGE3NDcwMTg4LCAweDMwYzI4MDAwLCAweGE3NDMwMTkwLCAweDEwNDAwMDBjLCAweGFmNDQwMWE4LCAweDkzNDIwMTE2LAotCTB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsIDB4MjQ0MjQwMDQsIDB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsIDB4MTQ2MDAwMDQsCi0JMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwgMHgwMGMyMTAyNCwgMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwgMHg5NzQzMDEwYywKLQkweDhmNDQwMTA0LCAweDMwNDJiZmZmLCAweDAwMDMxYzAwLCAweDMwODRmZmZmLCAweDAwNjQxODI1LCAweGE3NDIwMWE2LAotCTB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsIDB4MGEwMDBmMTksIDB4MDAwMDEwMjEsIDB4MzA4MjAwMDEsCi0JMHgxMDQwMDAyZSwgMHgzMGViMDAwNCwgMHg5NzQyMDEwZSwgMHgzMGU5ZmZmYiwgMHgzYzAzODAwMCwgMHgyNDQyMDAwNCwKLQkweDMwNDVmZmZmLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAzLCAweGEzNDIwMThiLAotCTB4OTc4MzAwMGEsIDB4OGY4NDAwMDQsIDB4OGY4NjAwMTQsIDB4MjQwMjAwMDIsIDB4YWY0MDAxODAsIDB4YTc0MjAxOGMsCi0JMHhhNzQ1MDE4ZSwgMHhhNzQ3MDE4OCwgMHgzMGMyODAwMCwgMHhhNzQzMDE5MCwgMHgxMDQwMDAwYywgMHhhZjQ0MDFhOCwKLQkweDkzNDIwMTE2LCAweDMwNDIwMGZjLCAweDAwNWExMDIxLCAweDI0NDI0MDA0LCAweDhjNDMwMDAwLCAweDMwNjNmZmZmLAotCTB4MTQ2MDAwMDQsIDB4M2MwMmZmZmYsIDB4MzQ0MjdmZmYsIDB4MDBjMjEwMjQsIDB4YWY4MjAwMTQsIDB4OTc4MjAwMTYsCi0JMHg5NzQzMDEwYywgMHg4ZjQ0MDEwNCwgMHgzMDQyYmZmZiwgMHgwMDAzMWMwMCwgMHgzMDg0ZmZmZiwgMHgwMDY0MTgyNSwKLQkweGE3NDIwMWE2LCAweGFmNDMwMWFjLCAweDNjMDIxMDAwLCAweGFmNDIwMWI4LCAweDMxMjdmZmZmLCAweDhkNDIwMDI0LAotCTB4MzA0MjAwMDQsIDB4MTA0MDAwMzAsIDB4OGQ0MjAwMjQsIDB4OTc0MjAxMGUsIDB4MzBlOWZmZmIsIDB4M2MwMzgwMDAsCi0JMHgyNDQyMDAwNCwgMHgzMDQ2ZmZmZiwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMywKLQkweGEzNDIwMThiLCAweDk3ODQwMDBhLCAweDhmODUwMDA0LCAweDhmODgwMDE0LCAweDI0MDIwMTAwLCAweDI0MDMwMDAyLAotCTB4YWY0MjAxODAsIDB4YTc0MzAxOGMsIDB4YTc0NjAxOGUsIDB4YTc0NzAxODgsIDB4MzEwMjgwMDAsIDB4YTc0NDAxOTAsCi0JMHgxMDQwMDAwYywgMHhhZjQ1MDFhOCwgMHg5MzQyMDExNiwgMHgzMDQyMDBmYywgMHgwMDVhMTAyMSwgMHgyNDQyNDAwNCwKLQkweDhjNDMwMDAwLCAweDMwNjNmZmZmLCAweDE0NjAwMDA0LCAweDNjMDJmZmZmLCAweDM0NDI3ZmZmLCAweDAxMDIxMDI0LAotCTB4YWY4MjAwMTQsIDB4OTc4MjAwMTYsIDB4OTc0MzAxMGMsIDB4OGY0NDAxMDQsIDB4MzA0MmJmZmYsIDB4MDAwMzFjMDAsCi0JMHgzMDg0ZmZmZiwgMHgwMDY0MTgyNSwgMHhhNzQyMDFhNiwgMHhhZjQzMDFhYywgMHgzYzAyMTAwMCwgMHhhZjQyMDFiOCwKLQkweDMxMjdmZmZmLCAweDhkNDIwMDI0LCAweDMwNDIwMDA4LCAweDEwNDAwMDJkLCAweDAwMDAwMDAwLCAweDk3NDIwMTBlLAotCTB4M2MwMzgwMDAsIDB4MjQ0MjAwMDQsIDB4MzA0NmZmZmYsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMywgMHhhMzQyMDE4YiwgMHg5Nzg0MDAwYSwgMHg4Zjg1MDAwNCwgMHg4Zjg4MDAxNCwgMHgyNDAyMDE4MCwKLQkweDI0MDMwMDAyLCAweGFmNDIwMTgwLCAweGE3NDMwMThjLCAweGE3NDYwMThlLCAweGE3NDcwMTg4LCAweDMxMDI4MDAwLAotCTB4YTc0NDAxOTAsIDB4MTA0MDAwMGMsIDB4YWY0NTAxYTgsIDB4OTM0MjAxMTYsIDB4MzA0MjAwZmMsIDB4MDA1YTEwMjEsCi0JMHgyNDQyNDAwNCwgMHg4YzQzMDAwMCwgMHgzMDYzZmZmZiwgMHgxNDYwMDAwNCwgMHgzYzAyZmZmZiwgMHgzNDQyN2ZmZiwKLQkweDAxMDIxMDI0LCAweGFmODIwMDE0LCAweDk3ODIwMDE2LCAweDk3NDMwMTBjLCAweDhmNDQwMTA0LCAweDMwNDJiZmZmLAotCTB4MDAwMzFjMDAsIDB4MzA4NGZmZmYsIDB4MDA2NDE4MjUsIDB4YTc0MjAxYTYsIDB4YWY0MzAxYWMsIDB4M2MwMjEwMDAsCi0JMHhhZjQyMDFiOCwgMHgxNTYwMDA0MSwgMHgwMDAwMTAyMSwgMHgyNzQ0MDE4MCwgMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIyMDAwLCAweDI0MDMwMDAyLCAweGE0ODIwMDA4LCAweGEwODMwMDBiLAotCTB4YTQ4MDAwMTAsIDB4M2MwMjEwMDAsIDB4YWY0MjAxYjgsIDB4MGEwMDBmMTksIDB4MDAwMDEwMjEsIDB4M2MwMzA4MDAsCi0JMHg4YzYyMDAyNCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAyZSwgMHgwMDAwMTAyMSwgMHg5NzQyMDEwZSwgMHgzNGU3MDAwMiwKLQkweDNjMDM4MDAwLCAweDI0NDIwMDA0LCAweDMwNDVmZmZmLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MjQwMjAwMDMsIDB4YTM0MjAxOGIsIDB4OTc4MzAwMGEsIDB4OGY4NDAwMDQsIDB4OGY4NjAwMTQsIDB4MjQwMjAwMDIsCi0JMHhhZjQwMDE4MCwgMHhhNzQyMDE4YywgMHhhNzQ1MDE4ZSwgMHhhNzQ3MDE4OCwgMHgzMGMyODAwMCwgMHhhNzQzMDE5MCwKLQkweDEwNDAwMDBjLCAweGFmNDQwMWE4LCAweDkzNDIwMTE2LCAweDMwNDIwMGZjLCAweDAwNWExMDIxLCAweDI0NDI0MDA0LAotCTB4OGM0MzAwMDAsIDB4MzA2M2ZmZmYsIDB4MTQ2MDAwMDQsIDB4M2MwMmZmZmYsIDB4MzQ0MjdmZmYsIDB4MDBjMjEwMjQsCi0JMHhhZjgyMDAxNCwgMHg5NzgyMDAxNiwgMHg5NzQzMDEwYywgMHg4ZjQ0MDEwNCwgMHgzMDQyYmZmZiwgMHgwMDAzMWMwMCwKLQkweDMwODRmZmZmLCAweDAwNjQxODI1LCAweGE3NDIwMWE2LCAweGFmNDMwMWFjLCAweDNjMDIxMDAwLCAweGFmNDIwMWI4LAotCTB4MDAwMDEwMjEsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4OGY0YjAwNzAsCi0JMHg5MzQyMDExMiwgMHg4Zjg0MDAwOCwgMHgwMDAyMjg4MiwgMHgzMDgyMDEwMCwgMHgxNDQwMDAwMywgMHgyNGEzMDAwMywKLQkweDAzZTAwMDA4LCAweDAwMDAxMDIxLCAweDMwODI0MDAwLCAweDEwNDAwMDEwLCAweDI3NDI0MDAwLCAweDAwMDMxODgwLAotCTB4MDA0MzEwMjEsIDB4OGM0NzAwMDAsIDB4MjRhMzAwMDQsIDB4MDAwMzE4ODAsIDB4Mjc0MjQwMDAsIDB4MDA0MzEwMjEsCi0JMHg4YzQ5MDAwMCwgMHg5MzQzMDExNiwgMHgyNzQyNDAwMCwgMHgzMDYzMDBmYywgMHgwMDQzMTAyMSwgMHg4YzRhMDAwMCwKLQkweDBhMDAwZjQ1LCAweDNjMDMwODAwLCAweDMwODIyMDAwLCAweDEwNDBmZmVhLCAweDAwMDMxODgwLCAweDI3NDI0MDAwLAotCTB4MDA0MzEwMjEsIDB4OGM0NzAwMDAsIDB4MjRhMzAwMDQsIDB4MDAwMzE4ODAsIDB4Mjc0MjQwMDAsIDB4MDA0MzEwMjEsCi0JMHg4YzQ5MDAwMCwgMHgwMDAwNTAyMSwgMHgzYzAzMDgwMCwgMHgyNDY4MDEwMCwgMHgwMDA3MTYwMiwgMHgwMDAyMTA4MCwKLQkweDAwNDgxMDIxLCAweDhjNDYwMDAwLCAweDAwMDcxYjgyLCAweDMwNjMwM2ZjLCAweDAxMDMxODIxLCAweDhjNjQwNDAwLAotCTB4MDAwNzExODIsIDB4MzA0MjAzZmMsIDB4MDEwMjEwMjEsIDB4OGM0NTA4MDAsIDB4MzBlMzAwZmYsIDB4MDAwMzE4ODAsCi0JMHgwMTAzMTgyMSwgMHgwMDA5MTYwMiwgMHgwMDAyMTA4MCwgMHgwMTAyMTAyMSwgMHgwMGM0MzAyNiwgMHg4YzY0MGMwMCwKLQkweDhjNDMxMDAwLCAweDAwYzUzMDI2LCAweDAwMDkxMzgyLCAweDMwNDIwM2ZjLCAweDAxMDIxMDIxLCAweDhjNDUxNDAwLAotCTB4MzEyMjAwZmYsIDB4MDAwMjEwODAsIDB4MDEwMjEwMjEsIDB4MDBjNDMwMjYsIDB4MDBjMzMwMjYsIDB4MDAwOTE5ODIsCi0JMHgzMDYzMDNmYywgMHgwMTAzMTgyMSwgMHg4YzY0MTgwMCwgMHg4YzQzMWMwMCwgMHgwMGM1MzAyNiwgMHgwMGM0MzAyNiwKLQkweDExNDAwMDE1LCAweDAwYzMzMDI2LCAweDAwMGExNjAyLCAweDAwMDIxMDgwLCAweDAxMDIxMDIxLCAweDhjNDMyMDAwLAotCTB4MDAwYTEzODIsIDB4MzA0MjAzZmMsIDB4MDEwMjEwMjEsIDB4OGM0NTI0MDAsIDB4MzE0MjAwZmYsIDB4MDAwMjEwODAsCi0JMHgwMTAyMTAyMSwgMHgwMGMzMzAyNiwgMHgwMDBhMTk4MiwgMHgzMDYzMDNmYywgMHgwMTAzMTgyMSwgMHg4YzY0MjgwMCwKLQkweDhjNDMyYzAwLCAweDAwYzUzMDI2LCAweDAwYzQzMDI2LCAweDAwYzMzMDI2LCAweDhmNDMwMDcwLCAweDNjMDUwODAwLAotCTB4OGNhNDMxMDAsIDB4MmM4MjAwMjAsIDB4MTA0MDAwMDgsIDB4MDA2YjU4MjMsIDB4M2MwMjA4MDAsIDB4MjQ0MjMxMDQsCi0JMHgwMDA0MTg4MCwgMHgwMDYyMTgyMSwgMHgyNDgyMDAwMSwgMHhhYzZiMDAwMCwgMHhhY2EyMzEwMCwgMHhhZjg2MDAwNCwKLQkweDAzZTAwMDA4LCAweDI0MDIwMDAxLCAweDI3YmRmZmU4LCAweGFmYmYwMDEwLCAweDhmNDYwMTI4LCAweDhmODQwMDEwLAotCTB4YWY0NjAwMjAsIDB4OGY0NTAxMDQsIDB4OGY0MjAxMDAsIDB4MjQwMzA4MDAsIDB4YWY4NTAwMDgsIDB4YWY4MjAwMTQsCi0JMHhhZjQzMDFiOCwgMHgxMDgwMDAwYSwgMHgzYzAyMDgwMCwgMHg4YzQzMDAzNCwgMHgxMDYwMDAwNywgMHgzMGEyMjAwMCwKLQkweDEwNDAwMDA1LCAweDM0YTMwMTAwLCAweDhmODIwMDBjLCAweGFmODMwMDA4LCAweDI0NDIwMDAxLCAweGFmODIwMDBjLAotCTB4M2MwMjA4MDAsIDB4OGM0MzAwYzAsIDB4MTA2MDAwMDYsIDB4M2MwMzA4MDAsIDB4OGM2MjAwYzQsIDB4MjQwNDAwMDEsCi0JMHgyNDQyMDAwMSwgMHgwYTAwMGZkNSwgMHhhYzYyMDBjNCwgMHg4ZjgyMDAwOCwgMHgzYzAzMDAxMCwgMHgwMDQzMTAyNCwKLQkweDE0NDAwMDA5LCAweDNjMDIwMDFmLCAweDNjMDMwODAwLCAweDhjNjIwMDIwLCAweDAwMDAyMDIxLCAweDI0NDIwMDAxLAotCTB4MGUwMDBjNzgsIDB4YWM2MjAwMjAsIDB4MGEwMDBmZDUsIDB4MDA0MDIwMjEsIDB4MzQ0MmZmMDAsIDB4MTRjMjAwMDksCi0JMHgyNDAzYmZmZiwgMHgzYzAzMDgwMCwgMHg4YzYyMDAyMCwgMHgyNDA0MDAwMSwgMHgyNDQyMDAwMSwgMHgwZTAwMGM3OCwKLQkweGFjNjIwMDIwLCAweDBhMDAwZmQ1LCAweDAwNDAyMDIxLCAweDhmODIwMDE0LCAweDAwNDMxMDI0LCAweDE0NDAwMDA2LAotCTB4MDAwMDAwMDAsIDB4YWY0MDAwNDgsIDB4MGUwMDExYTksIDB4YWY0MDAwNDAsIDB4MGEwMDBmZDUsIDB4MDA0MDIwMjEsCi0JMHgwZTAwMTU2MywgMHgwMDAwMDAwMCwgMHgwMDQwMjAyMSwgMHgxMDgwMDAwNSwgMHgzYzAyNDAwMCwgMHg4ZjQzMDEyNCwKLQkweDNjMDI2MDIwLCAweGFjNDMwMDE0LCAweDNjMDI0MDAwLCAweGFmNDIwMTM4LCAweDAwMDAwMDAwLCAweDhmYmYwMDEwLAotCTB4MDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4MjdiZGZmZTAsIDB4YWZiZjAwMTgsIDB4YWZiMTAwMTQsIDB4YWZiMDAwMTAsCi0JMHg4ZjQyMDE0MCwgMHhhZjQyMDAyMCwgMHg4ZjQzMDE0OCwgMHgzYzAyNzAwMCwgMHgwMDYyMTgyNCwgMHgzYzAyMzAwMCwKLQkweDEwNjIwMDIxLCAweDAwNDMxMDJiLCAweDE0NDAwMDA2LCAweDNjMDI0MDAwLCAweDNjMDIyMDAwLCAweDEwNjIwMDA5LAotCTB4M2MwMjQwMDAsIDB4MGEwMDEwNDAsIDB4MDAwMDAwMDAsIDB4MTA2MjAwNDUsIDB4M2MwMjUwMDAsIDB4MTA2MjAwNDcsCi0JMHgzYzAyNDAwMCwgMHgwYTAwMTA0MCwgMHgwMDAwMDAwMCwgMHgyNzQ0MDE4MCwgMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDhmNDIwMTQ4LCAweDI0MDMwMDAyLCAweGEwODMwMDBiLAotCTB4MDAwMjE0MDIsIDB4YTQ4MjAwMDgsIDB4OGY0MzAxNDgsIDB4YTQ4MzAwMTAsIDB4OGY0MjAxNDQsIDB4M2MwMzEwMDAsCi0JMHhhYzgyMDAyNCwgMHhhZjQzMDFiOCwgMHgwYTAwMTA0MCwgMHgzYzAyNDAwMCwgMHg4ZjQyMDE0OCwgMHgyNDAzMDAwMiwKLQkweDMwNDRmZmZmLCAweDAwMDIxNDAyLCAweDMwNTAwMGZmLCAweDEyMDMwMDBjLCAweDI3NTEwMTgwLCAweDJhMDIwMDAzLAotCTB4MTA0MDAwMDUsIDB4MjQwMjAwMDMsIDB4MDYwMDAwMWQsIDB4MzYwNTMwMDAsIDB4MGEwMDEwMjcsIDB4M2MwMzgwMDAsCi0JMHgxMjAyMDAwNywgMHgwMDAwMDAwMCwgMHgwYTAwMTAzNCwgMHgwMDAwMDAwMCwgMHgwZTAwMTEyYywgMHgwMDAwMDAwMCwKLQkweDBhMDAxMDI1LCAweDAwNDAyMDIxLCAweDBlMDAxMTNlLCAweDAwMDAwMDAwLCAweDAwNDAyMDIxLCAweDM2MDUzMDAwLAotCTB4M2MwMzgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDIsIDB4YTYyNTAwMDgsCi0JMHhhMjIyMDAwYiwgMHhhNjI0MDAxMCwgMHg4ZjQyMDE0NCwgMHgzYzAzMTAwMCwgMHhhZTIyMDAyNCwgMHhhZjQzMDFiOCwKLQkweDBhMDAxMDQwLCAweDNjMDI0MDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMmJmLCAweDBhMDAxMDQwLAotCTB4M2MwMjQwMDAsIDB4MGUwMDE0NDEsIDB4MDAwMDAwMDAsIDB4MGEwMDEwNDAsIDB4M2MwMjQwMDAsIDB4MGUwMDE1ZWEsCi0JMHgwMDAwMDAwMCwgMHgzYzAyNDAwMCwgMHhhZjQyMDE3OCwgMHgwMDAwMDAwMCwgMHg4ZmJmMDAxOCwgMHg4ZmIxMDAxNCwKLQkweDhmYjAwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDIwLCAweDI0MDIwODAwLCAweDAzZTAwMDA4LCAweGFmNDIwMWI4LAotCTB4MjdiZGZmZTgsIDB4M2MwNDYwMGMsIDB4YWZiZjAwMTQsIDB4YWZiMDAwMTAsIDB4OGM4MjUwMDAsIDB4M2MxYTgwMDAsCi0JMHgyNDAzZmY3ZiwgMHgzYzEwNjAwMCwgMHgwMDQzMTAyNCwgMHgzNDQyMzgwYywgMHgyNDAzMDAwMywgMHhhYzgyNTAwMCwKLQkweDNjMDIwMDA4LCAweGFmNDMwMDA4LCAweDhlMDQwODA4LCAweDAzNDJkODI1LCAweDhlMDIwODA4LCAweDNjMDMwODAwLAotCTB4YWM2MDAwMjAsIDB4MzA4NGZmZjAsIDB4MmM4NDAwMDEsIDB4MzA0MmZmZjAsIDB4Mzg0MjAwMTAsIDB4MmM0MjAwMDEsCi0JMHhhZjg0MDAxMCwgMHhhZjgyMDAwMCwgMHgwZTAwMTYwYywgMHgwMDAwMDAwMCwgMHgwZTAwMTU2MSwgMHgwMDAwMDAwMCwKLQkweDNjMDIwNDAwLCAweDM0NDIwMDBjLCAweDNjMDNmZmZmLCAweDM0NjMwODA2LCAweGFlMDIxOTQ4LCAweGFlMDMxOTRjLAotCTB4OGUwMjE5ODAsIDB4MzQ0MjAyMDAsIDB4YWUwMjE5ODAsIDB4OGY1MDAwMDAsIDB4MzIwMjAwMDMsIDB4MTA0MGZmZmQsCi0JMHgzMjAyMDAwMSwgMHgxMDQwMDAwNCwgMHgzMjAyMDAwMiwgMHgwZTAwMGY5MiwgMHgwMDAwMDAwMCwgMHgzMjAyMDAwMiwKLQkweDEwNDBmZmY2LCAweDAwMDAwMDAwLCAweDBlMDAwZmUwLCAweDAwMDAwMDAwLCAweDBhMDAxMDcxLCAweDAwMDAwMDAwLAotCTB4MjdiZGZmZTgsIDB4M2MwNDYwMGMsIDB4YWZiZjAwMTQsIDB4YWZiMDAwMTAsIDB4OGM4MjUwMDAsIDB4M2MxYTgwMDAsCi0JMHgyNDAzZmY3ZiwgMHgzYzEwNjAwMCwgMHgwMDQzMTAyNCwgMHgzNDQyMzgwYywgMHgyNDAzMDAwMywgMHhhYzgyNTAwMCwKLQkweDNjMDIwMDA4LCAweGFmNDMwMDA4LCAweDhlMDQwODA4LCAweDAzNDJkODI1LCAweDhlMDIwODA4LCAweDNjMDMwODAwLAotCTB4YWM2MDAwMjAsIDB4MzA4NGZmZjAsIDB4MmM4NDAwMDEsIDB4MzA0MmZmZjAsIDB4Mzg0MjAwMTAsIDB4MmM0MjAwMDEsCi0JMHhhZjg0MDAxMCwgMHhhZjgyMDAwMCwgMHgwZTAwMTYwYywgMHgwMDAwMDAwMCwgMHgwZTAwMTU2MSwgMHgwMDAwMDAwMCwKLQkweDNjMDIwNDAwLCAweDM0NDIwMDBjLCAweDNjMDNmZmZmLCAweDM0NjMwODA2LCAweGFlMDIxOTQ4LCAweGFlMDMxOTRjLAotCTB4OGUwMjE5ODAsIDB4OGZiZjAwMTQsIDB4MzQ0MjAyMDAsIDB4YWUwMjE5ODAsIDB4OGZiMDAwMTAsIDB4MDNlMDAwMDgsCi0JMHgyN2JkMDAxOCwgMHgwMDgwNDgyMSwgMHgzMGE1ZmZmZiwgMHgzMGM2ZmZmZiwgMHgzMGU3ZmZmZiwgMHgzYzAzODAwMCwKLQkweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAzLCAweGEzNDIwMThiLCAweDk3ODMwMDBhLAotCTB4OGY4NDAwMDQsIDB4OGY4ODAwMTQsIDB4YWY0OTAxODAsIDB4YTc0NTAxOGMsIDB4YTc0NjAxOGUsIDB4YTc0NzAxODgsCi0JMHgzMTAyODAwMCwgMHhhNzQzMDE5MCwgMHgxMDQwMDAwYywgMHhhZjQ0MDFhOCwgMHg5MzQyMDExNiwgMHgzMDQyMDBmYywKLQkweDAwNWExMDIxLCAweDI0NDI0MDA0LCAweDhjNDMwMDAwLCAweDMwNjNmZmZmLCAweDE0NjAwMDA0LCAweDNjMDJmZmZmLAotCTB4MzQ0MjdmZmYsIDB4MDEwMjEwMjQsIDB4YWY4MjAwMTQsIDB4OTc4MjAwMTYsIDB4OTc0MzAxMGMsIDB4OGY0NDAxMDQsCi0JMHgzMDQyYmZmZiwgMHgwMDAzMWMwMCwgMHgzMDg0ZmZmZiwgMHgwMDY0MTgyNSwgMHhhNzQyMDFhNiwgMHhhZjQzMDFhYywKLQkweDNjMDIxMDAwLCAweGFmNDIwMWI4LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDI3NDQwMTgwLCAweDNjMDM4MDAwLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjIwMDAsIDB4MjQwMzAwMDIsIDB4YTQ4MjAwMDgsCi0JMHhhMDgzMDAwYiwgMHhhNDgwMDAxMCwgMHgzYzAyMTAwMCwgMHhhZjQyMDFiOCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDI3NDQwMTgwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLAotCTB4OGY0MjAxNDgsIDB4MjQwMzAwMDIsIDB4YTA4MzAwMGIsIDB4MDAwMjE0MDIsIDB4YTQ4MjAwMDgsIDB4OGY0MzAxNDgsCi0JMHhhNDgzMDAxMCwgMHg4ZjQyMDE0NCwgMHgzYzAzMTAwMCwgMHhhYzgyMDAyNCwgMHgwM2UwMDAwOCwgMHhhZjQzMDFiOCwKLQkweDI3YmRmZmUwLCAweGFmYmYwMDE4LCAweGFmYjEwMDE0LCAweGFmYjAwMDEwLCAweDhmNDIwMTQ4LCAweDI0MDMwMDAyLAotCTB4MzA0NGZmZmYsIDB4MDAwMjE0MDIsIDB4MzA1MDAwZmYsIDB4MTIwMzAwMGMsIDB4Mjc1MTAxODAsIDB4MmEwMjAwMDMsCi0JMHgxMDQwMDAwNSwgMHgyNDAyMDAwMywgMHgwNjAwMDAxZCwgMHgzNjA1MzAwMCwgMHgwYTAwMTExNywgMHgzYzAzODAwMCwKLQkweDEyMDIwMDA3LCAweDAwMDAwMDAwLCAweDBhMDAxMTI0LCAweDAwMDAwMDAwLCAweDBlMDAxMTJjLCAweDAwMDAwMDAwLAotCTB4MGEwMDExMTUsIDB4MDA0MDIwMjEsIDB4MGUwMDExM2UsIDB4MDAwMDAwMDAsIDB4MDA0MDIwMjEsIDB4MzYwNTMwMDAsCi0JMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwgMHhhNjI1MDAwOCwKLQkweGEyMjIwMDBiLCAweGE2MjQwMDEwLCAweDhmNDIwMTQ0LCAweDNjMDMxMDAwLCAweGFlMjIwMDI0LCAweGFmNDMwMWI4LAotCTB4MGEwMDExMjgsIDB4OGZiZjAwMTgsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAyYmYsIDB4OGZiZjAwMTgsCi0JMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgzMDg0ZmZmZiwgMHgyYzgyMTM4OSwKLQkweDEwNDAwMDBkLCAweDAwMDAxMDIxLCAweDNjMDMwODAwLCAweDI0NjM1OTAwLCAweDAwMDQyOTQyLCAweDAwMDUyODgwLAotCTB4MDBhMzI4MjEsIDB4MzA4NjAwMWYsIDB4OGNhNDAwMDAsIDB4MjQwMzAwMDEsIDB4MDBjMzE4MDQsIDB4MDA4MzIwMjUsCi0JMHgwM2UwMDAwOCwgMHhhY2E0MDAwMCwgMHgwM2UwMDAwOCwgMHgyNDAyMDA5MSwgMHgzMDg0ZmZmZiwgMHgyYzgyMTM4OSwKLQkweDEwNDAwMDBlLCAweDAwMDAxMDIxLCAweDNjMDMwODAwLCAweDI0NjM1OTAwLCAweDAwMDQyOTQyLCAweDAwMDUyODgwLAotCTB4MDBhMzI4MjEsIDB4MzA4NjAwMWYsIDB4MjQwMzAwMDEsIDB4OGNhNDAwMDAsIDB4MDBjMzE4MDQsIDB4MDAwMzE4MjcsCi0JMHgwMDgzMjAyNCwgMHgwM2UwMDAwOCwgMHhhY2E0MDAwMCwgMHgwM2UwMDAwOCwgMHgyNDAyMDA5MSwgMHg5NDgyMDAwYywKLQkweDI0ODcwMDE0LCAweDAwMDIxMzAyLCAweDAwMDIxMDgwLCAweDAwODI0MDIxLCAweDAwZTgxODJiLCAweDEwNjAwMDRmLAotCTB4MDAwMDAwMDAsIDB4OTBlMzAwMDAsIDB4MmM2MjAwMDksIDB4MTA0MDAwNDcsIDB4M2MwMjA4MDAsIDB4MjQ0MjU4OTAsCi0JMHgwMDAzMTg4MCwgMHgwMDYyMTgyMSwgMHg4YzY0MDAwMCwgMHgwMDgwMDAwOCwgMHgwMDAwMDAwMCwgMHgwYTAwMTFhNCwKLQkweDI0ZTcwMDAxLCAweDkwZTMwMDAxLCAweDI0MDIwMDBhLCAweDU0NjIwMDI0LCAweDAxMDAzODIxLCAweDAxMDcxMDIzLAotCTB4MmM0MjAwMGEsIDB4NTQ0MDAwMjAsIDB4MDEwMDM4MjEsIDB4M2MwNTA4MDAsIDB4OGNhMjZjOTgsIDB4MjRlNzAwMDIsCi0JMHgzNDQyMDEwMCwgMHhhY2EyNmM5OCwgMHg5MGUzMDAwMCwgMHg5MGUyMDAwMSwgMHg5MGU0MDAwMiwgMHg5MGU2MDAwMywKLQkweDI0ZTcwMDA0LCAweDI0YTU2Yzk4LCAweDAwMDMxZTAwLCAweDAwMDIxNDAwLCAweDAwNjIxODI1LCAweDAwMDQyMjAwLAotCTB4MDA2NDE4MjUsIDB4MDA2NjE4MjUsIDB4YWNhMzAwMDQsIDB4OTBlMjAwMDAsIDB4OTBlMzAwMDEsIDB4OTBlNDAwMDIsCi0JMHg5MGU2MDAwMywgMHgyNGU3MDAwNCwgMHgwMDAyMTYwMCwgMHgwMDAzMWMwMCwgMHgwMDQzMTAyNSwgMHgwMDA0MjIwMCwKLQkweDAwNDQxMDI1LCAweDAwNDYxMDI1LCAweDBhMDAxMWE0LCAweGFjYTIwMDA4LCAweDkwZTMwMDAxLCAweDI0MDIwMDA0LAotCTB4MTA2MjAwMGUsIDB4MDA2MDEwMjEsIDB4MGEwMDExOWUsIDB4MDEwMDEwMjEsIDB4OTBlMzAwMDEsIDB4MjQwMjAwMDMsCi0JMHgxMDYyMDAwOCwgMHgwMDYwMTAyMSwgMHgwYTAwMTE5ZSwgMHgwMTAwMTAyMSwgMHg5MGUzMDAwMSwgMHgyNDAyMDAwMiwKLQkweDE0NjIwMDAzLCAweDAxMDAxMDIxLCAweDAwNjAxMDIxLCAweDAwZTIxMDIxLCAweDBhMDAxMWE0LCAweDAwNDAzODIxLAotCTB4OTBlMjAwMDEsIDB4MGEwMDExYTQsIDB4MDBlMjM4MjEsIDB4MDEwMDM4MjEsIDB4MDBlODEwMmIsIDB4NTQ0MGZmYjQsCi0JMHg5MGUzMDAwMCwgMHgwM2UwMDAwOCwgMHgyNDAyMDAwMSwgMHgyN2JkZmY5MCwgMHgzYzAzMDgwMCwgMHhhZmJmMDA2YywKLQkweGFmYmUwMDY4LCAweGFmYjcwMDY0LCAweGFmYjYwMDYwLCAweGFmYjUwMDVjLCAweGFmYjQwMDU4LCAweGFmYjMwMDU0LAotCTB4YWZiMjAwNTAsIDB4YWZiMTAwNGMsIDB4YWZiMDAwNDgsIDB4YWM2MDZjOTgsIDB4OTM2MjAwMjMsIDB4MzA0MjAwMTAsCi0JMHgxNDQwMDI3YywgMHgyNDAyMDAwMSwgMHg5MzQyMDExNiwgMHg5MzYzMDAwNSwgMHgzNDQyNDAwMCwgMHgzMDYzMDAwMSwKLQkweDE0NjAwMDA1LCAweDAzNDJiMDIxLCAweDBlMDAxNWUwLCAweDAwMDAwMDAwLCAweDBhMDAxNDM2LCAweDhmYmYwMDZjLAotCTB4OTM0MjAxMTIsIDB4OGY0MzAxMDQsIDB4M2MwNDAwMjAsIDB4MzQ0MjQwMDAsIDB4MDA2NDE4MjQsIDB4MTA2MDAwMTIsCi0JMHgwMzQyMjgyMSwgMHgyNzQ1MDE4MCwgMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwKLQkweDAwMDAwMDAwLCAweDhmNDIwMTI4LCAweGFjYTIwMDAwLCAweDhmNjQwMDQwLCAweDI0MDMwMDA4LCAweDI0MDI0MGMxLAotCTB4YTRhMjAwMDgsIDB4MjQwMjAwMDIsIDB4YTBhMjAwMGIsIDB4M2MwMjEwMDAsIDB4MGEwMDExZjEsIDB4YTBhMzAwMGEsCi0JMHg4ZjQyMDEwNCwgMHgzYzAzMDA0MCwgMHgwMDQzMTAyNCwgMHgxMDQwMDAxZCwgMHgzYzAzODAwMCwgMHgyNzQ1MDE4MCwKLQkweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDhmNDIwMTI4LCAweGFjYTIwMDAwLAotCTB4OGY2NDAwNDAsIDB4MjQwMzAwMTAsIDB4MjQwMjQwYzEsIDB4YTRhMjAwMDgsIDB4MjQwMjAwMDIsIDB4YTBhMzAwMGEsCi0JMHgyNDAzMDAwOCwgMHhhMGEyMDAwYiwgMHgzYzAyMTAwMCwgMHhhNGEzMDAxMCwgMHhhMGEwMDAxMiwgMHhhMGEwMDAxMywKLQkweGFjYTAwMDE0LCAweGFjYTAwMDI0LCAweGFjYTAwMDI4LCAweGFjYTAwMDJjLCAweGFjYTQwMDE4LCAweDBlMDAxNWUwLAotCTB4YWY0MjAxYjgsIDB4MGEwMDE0MzYsIDB4OGZiZjAwNmMsIDB4OGY4MjAwMDAsIDB4MTA0MDAwMTYsIDB4MDAwMDAwMDAsCi0JMHg4ZjQyMDEwNCwgMHgzYzAzMDAwMSwgMHgwMDQzMTAyNCwgMHgxMDQwMDAxMSwgMHgwMDAwMDAwMCwgMHg4Y2EzMDAwYywKLQkweDhmNjIwMDMwLCAweDE0NjIwMjJkLCAweDI0MDIwMDAxLCAweDhjYTMwMDEwLCAweDhmNjIwMDJjLCAweDE0NjIwMjI5LAotCTB4MjQwMjAwMDEsIDB4OTc2MzAwM2EsIDB4OTZjMjAwMDAsIDB4MTQ0MzAyMjUsIDB4MjQwMjAwMDEsIDB4OTc2MzAwMzgsCi0JMHg5NmMyMDAwMiwgMHgxNDQzMDIyMSwgMHgyNDAyMDAwMSwgMHhhZjQwMDA0OCwgMHhhZjQwMDA1NCwgMHhhZjQwMDA0MCwKLQkweDhmNzQwMDQwLCAweDhmNjUwMDQ4LCAweDAwYjQzMDIzLCAweDA0YzEwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDAxYWYsIDB4OTc0MjAxMWEsIDB4MzA1MmZmZmYsIDB4MTI0MDAwMDQsIDB4OGVkMzAwMDQsCi0JMHgwMjcyMTAyMSwgMHgwYTAwMTIyOCwgMHgyNDUxZmZmZiwgMHgwMjYwODgyMSwgMHg5MmQ3MDAwZCwgMHhhN2EwMDAyMCwKLQkweGEzYTAwMDFhLCAweGFmYTAwMDI4LCAweDkzNjIwMDNmLCAweDMyZTMwMDA0LCAweDEwNjAwMDNhLCAweDMwNTAwMGZmLAotCTB4MjQwNDAwMTIsIDB4MTYwNDAwMDYsIDB4MjQwMjAwMDEsIDB4M2MwNDA4MDAsIDB4OGM4MzAwMjgsIDB4MjQ2MzAwMDEsCi0JMHgwYTAwMTMyOCwgMHhhYzgzMDAyOCwgMHg4ZjYyMDA0NCwgMHgxNjYyMDAxMCwgMHgyN2E2MDAxMCwgMHgyNzQ1MDE4MCwKLQkweDNjMDM4MDAwLCAweDI0MDIwMDFhLCAweGE3YTIwMDIwLCAweDI0MDIwMDIwLCAweGFmYjQwMDI4LCAweGEzYjAwMDIyLAotCTB4YTNhNDAwMjMsIDB4YTNhMjAwMWEsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsCi0JMHgwYTAwMTMwZCwgMHgwMDAwMDAwMCwgMHg4ZjYyMDA0NCwgMHgwMjYyMTAyMywgMHgwNDQwMDAxYSwgMHgwMjY1MTAyMywKLQkweDA0NDEwMGQ5LCAweDI0MDIwMDAxLCAweDNjMDIwODAwLCAweDhjNDMwMGQ4LCAweDEwNjAwMDA0LCAweDI0MDIwMDAxLAotCTB4YTdhMjAwMjAsIDB4MGEwMDEyNWUsIDB4YWZiNDAwMjgsIDB4MjQwMjAwMWEsIDB4YTdhMjAwMjAsIDB4MjQwMjAwMjAsCi0JMHhhZmI0MDAyOCwgMHhhM2IwMDAyMiwgMHhhM2E0MDAyMywgMHhhM2EyMDAxYSwgMHgyN2E2MDAxMCwgMHgyNzQ1MDE4MCwKLQkweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDBhMDAxMzBkLAotCTB4MDAwMDAwMDAsIDB4MGEwMDEzMjgsIDB4MjQwMjAwMDEsIDB4MDI5M2YwMjMsIDB4MWJjMDAwMTYsIDB4MDI1ZTEwMmEsCi0JMHg1NDQwMDAwNywgMHgzMmY3MDBmZSwgMHg1N2QyMDAwZiwgMHgwMjdlOTgyMSwgMHgzMmUyMDAwMSwgMHg1NDQwMDAwYywKLQkweDAyN2U5ODIxLCAweDMyZjcwMGZlLCAweDAyNDBmMDIxLCAweDNjMDQwODAwLCAweDhjODMwMGM4LCAweDAwMDA5MDIxLAotCTB4MjQwMjAwMDEsIDB4YTdhMjAwMjAsIDB4YWZiNDAwMjgsIDB4MjQ2MzAwMDEsIDB4MGEwMDEyODIsIDB4YWM4MzAwYzgsCi0JMHgwMjVlMTAyMywgMHgwYTAwMTI4MiwgMHgzMDUyZmZmZiwgMHgwMDAwZjAyMSwgMHgyNGEyZmZmZiwgMHgwMjIyMTgyMywKLQkweDE4NjAwMDFmLCAweDAwNzIxMDJhLCAweDU0NDAwMDE5LCAweDAwYTA4ODIxLCAweDk3YTIwMDIwLCAweDNjMDQwODAwLAotCTB4OGM4MzAwY2MsIDB4YWZiNDAwMjgsIDB4MzQ0MjAwMDEsIDB4MjQ2MzAwMDEsIDB4YTdhMjAwMjAsIDB4MDI3NDEwMjYsCi0JMHgyYzQyMDAwMSwgMHhhYzgzMDBjYywgMHgyY2MzMDAwMSwgMHgwMDQzMTAyNCwgMHgxNDQwMDAwYSwgMHgwMjQwMTgyMSwKLQkweDI3YTYwMDEwLCAweDI3NDUwMTgwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4MGEwMDEzMGQsIDB4MDAwMDAwMDAsIDB4MDBhMDg4MjEsIDB4MDI0MzEwMjMsIDB4MzA1MmZmZmYsCi0JMHgwYTAwMTJhZSwgMHgzMmY3MDBmNiwgMHgwMjc0MTAyMywgMHgxODQwMDAwOCwgMHg5N2EyMDAyMCwgMHgzYzA0MDgwMCwKLQkweDhjODMwMGQ0LCAweGFmYjMwMDI4LCAweDM0NDIwNDAwLCAweDI0NjMwMDAxLCAweGE3YTIwMDIwLCAweGFjODMwMGQ0LAotCTB4MzJlMjAwMDIsIDB4MTA0MDAwMWMsIDB4MzJlMjAwMTAsIDB4OGY2MjAwNDQsIDB4MTY2MjAwMGQsIDB4MjdhNjAwMTAsCi0JMHg5N2EyMDAyMCwgMHgyNzQ1MDE4MCwgMHgzYzAzODAwMCwgMHhhZmI0MDAyOCwgMHgzNDQyMDAwMSwgMHhhN2EyMDAyMCwKLQkweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDBhMDAxMzBkLCAweDAwMDAwMDAwLAotCTB4OTdhMjAwMjAsIDB4Mjc0NTAxODAsIDB4M2MwMzgwMDAsIDB4YWZiNDAwMjgsIDB4MzQ0MjAwMDEsIDB4YTdhMjAwMjAsCi0JMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHgwYTAwMTMwZCwgMHgwMDAwMDAwMCwKLQkweDU0NDAwMDAzLCAweDhlZDUwMDA4LCAweDBhMDAxMzI4LCAweDI0MDIwMDAxLCAweDhmNjMwMDU0LCAweDI2YTJmZmZmLAotCTB4MDA0MzEwMjMsIDB4MTg0MDAwMTEsIDB4MjdhNjAwMTAsIDB4OTdhMjAwMjAsIDB4M2MwNDA4MDAsIDB4OGM4MzAwZDAsCi0JMHgyNzQ1MDE4MCwgMHgzYzA3ODAwMCwgMHhhZmI0MDAyOCwgMHgzNDQyMDAwMSwgMHgyNDYzMDAwMSwgMHhhN2EyMDAyMCwKLQkweGFjODMwMGQwLCAweDhmNDIwMWI4LCAweDAwNDcxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDBhMDAxMzBkLAotCTB4MDAwMDAwMDAsIDB4MzJlMjAwMjAsIDB4MTA0MDAwMTEsIDB4MDAwMDAwMDAsIDB4OTZjMjAwMTIsIDB4MDA1MjEwMmIsCi0JMHgxMDQwMDAwOCwgMHg5N2EyMDAyMCwgMHg5NmQyMDAxMiwgMHgxMjQwMDAwMywgMHgwMjcyMTAyMSwgMHgwYTAwMTJmMiwKLQkweDI0NTFmZmZmLCAweDAyNjA4ODIxLCAweDk3YTIwMDIwLCAweDkzYTMwMDFhLCAweDM0NDIwMDA4LCAweDM0NjMwMDA0LAotCTB4YTdhMjAwMjAsIDB4YTNhMzAwMWEsIDB4OGY0MjAxMDQsIDB4M2MwMzAwODAsIDB4MDA0MzEwMjQsIDB4MTA0MDAwMzcsCi0JMHgzYTAzMDAwYSwgMHgwZTAwMTE1MSwgMHgwMmMwMjAyMSwgMHgyNDAzMDAwMiwgMHgxNDQzMDAyYiwgMHgzYzAzMDgwMCwKLQkweDI3YTYwMDEwLCAweDk3YTIwMDIwLCAweDI3NDUwMTgwLCAweDNjMDM4MDAwLCAweGFmYjQwMDI4LCAweDM0NDIwMDAxLAotCTB4YTdhMjAwMjAsIDB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxMjgsCi0JMHhhY2EyMDAwMCwgMHg4Y2MzMDAxOCwgMHgyNDAyNDBjMSwgMHhhNGEyMDAwOCwgMHhhY2EzMDAxOCwgMHg5MGM0MDAwYSwKLQkweDI0MDIwMDAyLCAweGEwYTIwMDBiLCAweGEwYTQwMDBhLCAweDk0YzIwMDEwLCAweGE0YTIwMDEwLCAweDkwYzMwMDEyLAotCTB4YTBhMzAwMTIsIDB4OTBjMjAwMTMsIDB4YTBhMjAwMTMsIDB4OGNjMzAwMTQsIDB4YWNhMzAwMTQsIDB4OGNjMjAwMjQsCi0JMHhhY2EyMDAyNCwgMHg4Y2MzMDAyOCwgMHhhY2EzMDAyOCwgMHg4Y2M0MDAyYywgMHgyNDAyMDAwMSwgMHgzYzAzMTAwMCwKLQkweGFjYTQwMDJjLCAweGFmNDMwMWI4LCAweGFmNDAwMDQ0LCAweGFmNDAwMDUwLCAweDBhMDAxNDM2LCAweDhmYmYwMDZjLAotCTB4OGM2MjZjOTgsIDB4MzA0MjAxMDAsIDB4MTA0MDAwMDMsIDB4MjQ2MzZjOTgsIDB4OGM2MjAwMDQsIDB4YWY2MjAxN2MsCi0JMHgzYTAzMDAwYSwgMHgyYzYzMDAwMSwgMHgzYTAyMDAwYywgMHgyYzQyMDAwMSwgMHgwMDYyMTgyNSwgMHgxNDYwMDAwMywKLQkweDI0MDIwMDBlLCAweDU2MDIwMDMwLCAweDAwMDA5MDIxLCAweDUyNDAwMDA4LCAweDk2YzQwMDBlLCAweDEyNDAwMDA0LAotCTB4YTdiMjAwNDAsIDB4MDI3MjEwMjEsIDB4MGEwMDEzNDMsIDB4MjQ1MWZmZmYsIDB4MDI2MDg4MjEsIDB4OTZjNDAwMGUsCi0JMHg5MzYzMDAzNSwgMHg4ZjYyMDA0YywgMHgwMDY0MjAwNCwgMHgwMDk1MjAyMSwgMHgwMDgyMTAyMywgMHgxODQwMDAxNSwKLQkweDAwMDAwMDAwLCAweDhmNjIwMDE4LCAweDAyNjIxMDIzLCAweDFjNDAwMDE1LCAweDk3YTIwMDIwLCAweDhmNjIwMDE4LAotCTB4MTY2MjAwMWMsIDB4MDAwMDAwMDAsIDB4OGY2MjAwMWMsIDB4MDJhMjEwMjMsIDB4MWM0MDAwMGUsIDB4OTdhMjAwMjAsCi0JMHg4ZjYyMDAxYywgMHgxNmEyMDAxNSwgMHgwMDAwMDAwMCwgMHg4ZjYyMDA1OCwgMHgwMDgyMTAyMywgMHgxODQwMDAxMSwKLQkweDk3YTIwMDIwLCAweDBhMDAxMzY0LCAweGFmYjEwMDI4LCAweDhmNjIwMDU4LCAweDAwODIxMDIzLCAweDA0NDEwMDBiLAotCTB4OTdhMjAwMjAsIDB4YWZiMTAwMjgsIDB4YWZiMzAwMzQsIDB4YWZiNTAwMzgsIDB4YWZhNDAwM2MsIDB4MzQ0MjAwMjAsCi0JMHgwYTAwMTM2ZCwgMHhhN2EyMDAyMCwgMHgwMjgwOTgyMSwgMHgwMjYwODgyMSwgMHg4ZjY0MDA1OCwgMHg4ZjYyMDA0YywKLQkweDAyYTIxMDIzLCAweDE4NDAwMDA5LCAweDAwMDAwMDAwLCAweDhmNjIwMDU0LCAweDAyYTIxMDIzLCAweDFjNDAwMDA1LAotCTB4OTdhMjAwMjAsIDB4YWZiMTAwMjgsIDB4YWZiNTAwMjQsIDB4MGEwMDEzODUsIDB4MzQ0MjAwNDAsIDB4OTc0MjAxMWEsCi0JMHgxNDQwMDAwYywgMHgyNDAyMDAxNCwgMHg4ZjYyMDA1OCwgMHgxNDgyMDAwOSwgMHgyNDAyMDAxNCwgMHg4ZjYzMDA0YywKLQkweDhmNjIwMDU0LCAweDEwNjIwMDA0LCAweDk3YTIwMDIwLCAweGFmYjEwMDI4LCAweDM0NDIwMDgwLCAweGE3YTIwMDIwLAotCTB4MjQwMjAwMTQsIDB4MTIwMjAwMGEsIDB4MmEwMjAwMTUsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMGMsIDB4MTIwMjAwMDYsCi0JMHgzMmUyMDAwMSwgMHgwYTAwMTNjNiwgMHgwMDAwMDAwMCwgMHgyNDAyMDAxNiwgMHgxNjAyMDAzNSwgMHgzMmUyMDAwMSwKLQkweDhmNjIwMDg0LCAweDI0NDIwMDAxLCAweDE2YTIwMDMxLCAweDMyZTIwMDAxLCAweDI0MDIwMDE0LCAweDEyMDIwMDIxLAotCTB4MmEwMjAwMTUsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMGMsIDB4MTIwMjAwMDgsIDB4MzJlMjAwMDEsIDB4MGEwMDEzYzYsCi0JMHgwMDAwMDAwMCwgMHgyNDAyMDAxNiwgMHgxMjAyMDAwYywgMHgzMmUyMDAwMSwgMHgwYTAwMTNjNiwgMHgwMDAwMDAwMCwKLQkweDk3YTMwMDIwLCAweDI0MDIwMDBlLCAweGFmYjEwMDI4LCAweGEzYjAwMDIyLCAweGEzYTIwMDIzLCAweGFmYjUwMDI0LAotCTB4MzQ2MzAwNTQsIDB4MGEwMDEzYzUsIDB4YTdhMzAwMjAsIDB4OTdhMjAwMjAsIDB4OTNhNDAwMWEsIDB4MjQwMzAwMTAsCi0JMHhhZmIxMDAyOCwgMHhhM2IwMDAyMiwgMHhhM2EzMDAyMywgMHhhZmI1MDAyNCwgMHgzNDQyMDA1ZCwgMHgzNDg0MDAwMiwKLQkweGE3YTIwMDIwLCAweDBhMDAxM2M1LCAweGEzYTQwMDFhLCAweDk3YTIwMDIwLCAweDI0MDMwMDEyLCAweGEzYTMwMDIzLAotCTB4OTNhMzAwMWEsIDB4YWZiMTAwMjgsIDB4YTNiMDAwMjIsIDB4YWZiNTAwMjQsIDB4MzA0MmZmZmUsIDB4MzQ0MjAwNWMsCi0JMHgzNDYzMDAwMiwgMHhhN2EyMDAyMCwgMHhhM2EzMDAxYSwgMHgzMmUyMDAwMSwgMHgxMDQwMDAzMCwgMHgyNDAyMDAwYywKLQkweDEyMDIwMDEzLCAweDJhMDIwMDBkLCAweDEwNDAwMDA1LCAweDI0MDIwMDBhLCAweDEyMDIwMDA4LCAweDk3YTIwMDIwLAotCTB4MGEwMDEzZjgsIDB4MzJlMjAwMDksIDB4MjQwMjAwMGUsIDB4MTIwMjAwMWIsIDB4MzJlMjAwMDksIDB4MGEwMDEzZjksCi0JMHgwMDAyMTAyYiwgMHg5M2E0MDAxYSwgMHgyNDAzMDAwOCwgMHhhZmIxMDAyOCwgMHhhM2IwMDAyMiwgMHhhM2EzMDAyMywKLQkweDBhMDAxM2Y0LCAweDM0NDIwMDEzLCAweDk3YTMwMDIwLCAweDMwNjIwMDA0LCAweDE0NDAwMDA1LCAweDkzYTIwMDFhLAotCTB4MzQ2MzAwMWIsIDB4YTdhMzAwMjAsIDB4MGEwMDEzZTcsIDB4MjQwMzAwMTYsIDB4MzQ2MzAwMWIsIDB4YTdhMzAwMjAsCi0JMHgyNDAzMDAxMCwgMHhhZmIxMDAyOCwgMHhhM2IwMDAyMiwgMHhhM2EzMDAyMywgMHgzNDQyMDAwMiwgMHgwYTAwMTNmNywKLQkweGEzYTIwMDFhLCAweDk3YTIwMDIwLCAweDkzYTQwMDFhLCAweDI0MDMwMDEwLCAweGFmYjEwMDI4LCAweGEzYjAwMDIyLAotCTB4YTNhMzAwMjMsIDB4MzQ0MjAwMWIsIDB4MzQ4NDAwMDIsIDB4YTdhMjAwMjAsIDB4YTNhNDAwMWEsIDB4MzJlMjAwMDksCi0JMHgwMDAyMTAyYiwgMHgwMDAyMTAyMywgMHgzMDQyMDAwNywgMHgxMjQwMDAxNSwgMHgzNDQ1MDAwMywgMHg4ZjgyMDAxOCwKLQkweDI0MDMwODAwLCAweDI3NDQwMTgwLCAweDI0NDIwMDAxLCAweGFmODIwMDE4LCAweDI0MDIwMDA0LCAweGFmNDMwMWI4LAotCTB4YTQ4NTAwMDgsIDB4YTA4MjAwMGIsIDB4OTM0MzAxMjAsIDB4MDAwMDMwMjEsIDB4M2MwMjEwMDAsIDB4YTQ5MjAwMGUsCi0JMHhhYzk1MDAyNCwgMHhhYzkzMDAyOCwgMHgwMDdlMTgyMSwgMHhhNDgzMDAwYywgMHhhZjQyMDFiOCwgMHgwYTAwMTQxMywKLQkweDk3YTIwMDIwLCAweDI0MDYwMDAxLCAweDk3YTIwMDIwLCAweDEwNDAwMDIwLCAweDI3NDUwMTgwLCAweDNjMDM4MDAwLAotCTB4OGY0MjAxYjgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY0MjAxMjgsIDB4YWNhMjAwMDAsCi0JMHg4ZmEzMDAyOCwgMHgyNDAyNDBjMSwgMHhhNGEyMDAwOCwgMHhhY2EzMDAxOCwgMHg5M2E0MDAxYSwgMHgyNDAyMDAwMiwKLQkweGEwYTIwMDBiLCAweGEwYTQwMDBhLCAweDk3YTIwMDIwLCAweGE0YTIwMDEwLCAweDkzYTMwMDIyLCAweGEwYTMwMDEyLAotCTB4OTNhMjAwMjMsIDB4YTBhMjAwMTMsIDB4OGZhMzAwMjQsIDB4YWNhMzAwMTQsIDB4OGZhMjAwMzQsIDB4YWNhMjAwMjQsCi0JMHg4ZmEzMDAzOCwgMHhhY2EzMDAyOCwgMHg4ZmEyMDAzYywgMHgzYzAzMTAwMCwgMHhhY2EyMDAyYywgMHhhZjQzMDFiOCwKLQkweDAwYzAxMDIxLCAweDhmYmYwMDZjLCAweDhmYmUwMDY4LCAweDhmYjcwMDY0LCAweDhmYjYwMDYwLCAweDhmYjUwMDVjLAotCTB4OGZiNDAwNTgsIDB4OGZiMzAwNTQsIDB4OGZiMjAwNTAsIDB4OGZiMTAwNGMsIDB4OGZiMDAwNDgsIDB4MDNlMDAwMDgsCi0JMHgyN2JkMDA3MCwgMHg4ZjQ3MDE0MCwgMHg4ZjQ2MDE0OCwgMHgzYzAyODAwMCwgMHgwMGMyNDAyNCwgMHgwMDA2MmMwMiwKLQkweDMwYTMwMGZmLCAweDI0MDIwMDE5LCAweDEwNjIwMGU3LCAweDI3NDQwMTgwLCAweDI4NjIwMDFhLCAweDEwNDAwMDFmLAotCTB4MjQwMjAwMDgsIDB4MTA2MjAwYmUsIDB4Mjg2MjAwMDksIDB4MTA0MDAwMGQsIDB4MjQwMjAwMDEsIDB4MTA2MjAwNDYsCi0JMHgyODYyMDAwMiwgMHg1MDQwMDAwNSwgMHgyNDAyMDAwNiwgMHgxMDYwMDAyZSwgMHgwMGEwMTgyMSwgMHgwYTAwMTU1ZSwKLQkweDAwMDAwMDAwLCAweDEwNjIwMDViLCAweDAwYTAxODIxLCAweDBhMDAxNTVlLCAweDAwMDAwMDAwLCAweDI0MDIwMDBiLAotCTB4MTA2MjAwODQsIDB4Mjg2MjAwMGMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDksIDB4MTA2MjAwYmMsIDB4MDAwNjFjMDIsCi0JMHgwYTAwMTU1ZSwgMHgwMDAwMDAwMCwgMHgyNDAyMDAwZSwgMHgxMDYyMDBiNywgMHgwMDA2MWMwMiwgMHgwYTAwMTU1ZSwKLQkweDAwMDAwMDAwLCAweDI4NjIwMDIxLCAweDEwNDAwMDA5LCAweDI4NjIwMDFmLCAweDEwNDAwMGMxLCAweDI0MDIwMDFiLAotCTB4MTA2MjAwYmYsIDB4MjQwMjAwMWMsIDB4MTA2MjAwOWEsIDB4MDAwNjFjMDIsIDB4MGEwMDE1NWUsIDB4MDAwMDAwMDAsCi0JMHgyNDAyMDBjMiwgMHgxMDYyMDBjYSwgMHgyODYyMDBjMywgMHgxMDQwMDAwNSwgMHgyNDAyMDA4MCwgMHgxMDYyMDA1YSwKLQkweDAwYTAxODIxLCAweDBhMDAxNTVlLCAweDAwMDAwMDAwLCAweDI0MDIwMGM5LCAweDEwNjIwMGNkLCAweDMwYzVmZmZmLAotCTB4MGEwMDE1NWUsIDB4MDAwMDAwMDAsIDB4M2MwNTgwMDAsIDB4OGY0MjAxYjgsIDB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsCi0JMHgyNDAyMDAwMSwgMHhhNDgzMDAwOCwgMHgyNDAzMDAwMiwgMHhhYzg3MDAwMCwgMHhhYzgwMDAwNCwgMHhhMDgyMDAwYSwKLQkweGEwODMwMDBiLCAweGE0ODYwMDEwLCAweDhmNDMwMTQ0LCAweDNjMDIxMDAwLCAweGFjODAwMDI4LCAweGFjODMwMDI0LAotCTB4M2MwMzYwMDAsIDB4YWY0MjAxYjgsIDB4MDNlMDAwMDgsIDB4YWM2MDA4MDgsIDB4MTEwMDAwMDksIDB4MDBhMDE4MjEsCi0JMHgzYzAyMDgwMCwgMHgyNDAzMDAwMiwgMHhhMDQzNmM4OCwgMHgyNDQyNmM4OCwgMHhhYzQ3MDAwOCwgMHg4ZjQzMDE0NCwKLQkweDAzZTAwMDA4LCAweGFjNDMwMDA0LCAweDNjMDU4MDAwLCAweDhmNDIwMWI4LCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLAotCTB4MjQwMjAwMDIsIDB4YWM4MDAwMDAsIDB4YWM4NzAwMDQsIDB4YTQ4MzAwMDgsIDB4YTA4MjAwMGEsIDB4YTA4MjAwMGIsCi0JMHhhNDg2MDAxMCwgMHhhYzgwMDAyNCwgMHg4ZjQyMDE0NCwgMHgzYzAzMTAwMCwgMHhhYzgyMDAyOCwgMHgzYzAyNjAwMCwKLQkweGFmNDMwMWI4LCAweDAzZTAwMDA4LCAweGFjNDAwODA4LCAweDNjMDgwODAwLCAweDNjMDU4MDAwLCAweDhmNDIwMWI4LAotCTB4MDA0NTEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4YWM4NzAwMDAsIDB4OTEwMjZjODgsIDB4MDAwMDI4MjEsCi0JMHgxMDQwMDAwMiwgMHgyNTA3NmM4OCwgMHg4Y2U1MDAwOCwgMHhhYzg1MDAwNCwgMHhhNDgzMDAwOCwgMHg5MTAzNmM4OCwKLQkweDI0MDIwMDAyLCAweGEwODIwMDBiLCAweGE0ODYwMDEwLCAweDM0NjMwMDAxLCAweGEwODMwMDBhLCAweDhmNDIwMTQ0LAotCTB4YWM4MjAwMjQsIDB4OTEwMzZjODgsIDB4MTA2MDAwMDIsIDB4MDAwMDEwMjEsIDB4OGNlMjAwMDQsIDB4YWM4MjAwMjgsCi0JMHgzYzAyMTAwMCwgMHhhZjQyMDFiOCwgMHgzYzAyNjAwMCwgMHhhMTAwNmM4OCwgMHgwM2UwMDAwOCwgMHhhYzQwMDgwOCwKLQkweDNjMDU4MDAwLCAweDhmNDIwMWI4LCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLCAweGEwODIwMDBiLAotCTB4YTQ4MzAwMDgsIDB4YTQ4NjAwMTAsIDB4OGY0MjAxNDQsIDB4M2MwMzEwMDAsIDB4YTQ4MjAwMTIsIDB4MDNlMDAwMDgsCi0JMHhhZjQzMDFiOCwgMHgzMGMyZmZmZiwgMHgxNDQwMDAyOCwgMHgwMDA2MWMwMiwgMHg5MzYyMDAwNSwgMHgzMDQyMDAwNCwKLQkweDE0NDAwMDIwLCAweDNjMDI5MDAwLCAweDM0NDIwMDAxLCAweDAwZTIxMDI1LCAweGFmNDIwMDIwLCAweDNjMDM4MDAwLAotCTB4OGY0MjAwMjAsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTM2MjAwMDUsIDB4M2MwMzgwMDAsCi0JMHgzNDYzMDAwMSwgMHgwMGUzMTgyNSwgMHgzNDQyMDAwNCwgMHhhMzYyMDAwNSwgMHhhZjQzMDAyMCwgMHg5MzYyMDAwNSwKLQkweDMwNDIwMDA0LCAweDE0NDAwMDAzLCAweDNjMDM4MDAwLCAweDAwMDAwMDBkLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LAotCTB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4MjQwMjAwMDUsIDB4M2MwMzEwMDAsIDB4YWM4NzAwMDAsIDB4YTA4MjAwMGIsCi0JMHhhZjQzMDFiOCwgMHgwYTAwMTUwZCwgMHgwMDA2MWMwMiwgMHgwMDAwMDAwZCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDAwMDYxYzAyLCAweDNjMDU4MDAwLCAweDhmNDIwMWI4LCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAxLAotCTB4YTQ4MzAwMDgsIDB4MjQwMzAwMDIsIDB4YWM4NzAwMDAsIDB4YWM4MDAwMDQsIDB4YTA4MjAwMGEsIDB4YTA4MzAwMGIsCi0JMHhhNDg2MDAxMCwgMHg4ZjQzMDE0NCwgMHgzYzAyMTAwMCwgMHhhYzgwMDAyOCwgMHhhYzgzMDAyNCwgMHgwM2UwMDAwOCwKLQkweGFmNDIwMWI4LCAweDNjMDU4MDAwLCAweDhmNDIwMWI4LCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLAotCTB4YWM4MDAwMDAsIDB4YWM4NzAwMDQsIDB4YTQ4MzAwMDgsIDB4YTA4MjAwMGEsIDB4YTA4MjAwMGIsIDB4YTQ4NjAwMTAsCi0JMHhhYzgwMDAyNCwgMHg4ZjQyMDE0NCwgMHgzYzAzMTAwMCwgMHhhYzgyMDAyOCwgMHgwM2UwMDAwOCwgMHhhZjQzMDFiOCwKLQkweDAwMDYxYzAyLCAweDNjMDU4MDAwLCAweDhmNDIwMWI4LCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAxLAotCTB4YTQ4MzAwMDgsIDB4MjQwMzAwMDIsIDB4YTA4MjAwMGEsIDB4M2MwMjEwMDAsIDB4YWM4NzAwMDAsIDB4YWM4MDAwMDQsCi0JMHhhMDgzMDAwYiwgMHhhNDg2MDAxMCwgMHhhYzgwMDAyNCwgMHhhYzgwMDAyOCwgMHgwM2UwMDAwOCwgMHhhZjQyMDFiOCwKLQkweDAwYTAxODIxLCAweDNjMDU4MDAwLCAweDhmNDIwMWI4LCAweDAwNDUxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLAotCTB4YWM4NzAwMDAsIDB4YWM4MDAwMDQsIDB4YTQ4MzAwMDgsIDB4YTA4MDAwMGEsIDB4MGEwMDE1MTgsIDB4YTA4MjAwMGIsCi0JMHg4ZjQ0MDE0NCwgMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwMiwKLQkweDI0MDM0MGM5LCAweGFmNDcwMTgwLCAweGEzNDIwMThiLCAweDNjMDIxMDAwLCAweGE3NDMwMTg4LCAweGFmNDQwMWE0LAotCTB4YWY0NTAxYTgsIDB4YWY0MDAxYWMsIDB4MDNlMDAwMDgsIDB4YWY0MjAxYjgsIDB4MDAwMDAwMGQsIDB4MDNlMDAwMDgsCi0JMHgwMDAwMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHg4ZjQyMDEwMCwgMHgzMDQyMDAzZSwgMHgxNDQwMDAxMSwKLQkweDI0MDIwMDAxLCAweGFmNDAwMDQ4LCAweDhmNDIwMTAwLCAweDMwNDIwN2MwLCAweDEwNDAwMDA1LCAweDAwMDAwMDAwLAotCTB4YWY0MDAwNGMsIDB4YWY0MDAwNTAsIDB4MDNlMDAwMDgsIDB4MjQwMjAwMDEsIDB4YWY0MDAwNTQsIDB4YWY0MDAwNDAsCi0JMHg4ZjQyMDEwMCwgMHgzMDQyMzgwMCwgMHg1NDQwMDAwMSwgMHhhZjQwMDA0NCwgMHgyNDAyMDAwMSwgMHgwM2UwMDAwOCwKLQkweDAwMDAwMDAwLCAweDNjMDM4MDAwLCAweDhmNDIwMWI4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwMDAyLAotCTB4MjQwMzQwYzksIDB4YWY0NDAxODAsIDB4YTM0MjAxOGIsIDB4M2MwMjEwMDAsIDB4YTc0MzAxODgsIDB4YWY0NTAxYTQsCi0JMHhhZjQ2MDFhOCwgMHhhZjQ3MDFhYywgMHgwM2UwMDAwOCwgMHhhZjQyMDFiOCwgMHgzYzAyOTAwMCwgMHgzNDQyMDAwMSwKLQkweDAwODIyMDI1LCAweGFmNDQwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMDIwLCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsIDB4MDA4MjIwMjUsCi0JMHgwM2UwMDAwOCwgMHhhZjQ0MDAyMCwgMHgzMDg2MDBmZiwgMHgyNzQ1MDE4MCwgMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwKLQkweDAwNDMxMDI0LCAweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDhmNDIwMTI4LCAweGFjYTIwMDAwLCAweDhmNjQwMDQwLAotCTB4MjQwMzAwMDgsIDB4MjQwMjQwYzEsIDB4YTRhMjAwMDgsIDB4MjQwMjAwMDIsIDB4YTBhMjAwMGIsIDB4M2MwMjEwMDAsCi0JMHhhMGE2MDAwYSwgMHhhNGEzMDAxMCwgMHhhMGEwMDAxMiwgMHhhMGEwMDAxMywgMHhhY2EwMDAxNCwgMHhhY2EwMDAyNCwKLQkweGFjYTAwMDI4LCAweGFjYTAwMDJjLCAweGFjYTQwMDE4LCAweDAzZTAwMDA4LCAweGFmNDIwMWI4LCAweDI0MDIwMDAxLAotCTB4YWNjNDAwMDAsIDB4MDNlMDAwMDgsIDB4YTRlNTAwMDAsIDB4MjQwMjAwMDEsIDB4YWY0MDAwNDQsIDB4MDNlMDAwMDgsCi0JMHhhZjQwMDA1MCwgMHgwMDgwMzAyMSwgMHgyNzQ1MDE4MCwgMHgzYzAzODAwMCwgMHg4ZjQyMDFiOCwgMHgwMDQzMTAyNCwKLQkweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDhmNDIwMTI4LCAweGFjYTIwMDAwLCAweDhjYzMwMDE4LCAweDI0MDI0MGMxLAotCTB4YTRhMjAwMDgsIDB4YWNhMzAwMTgsIDB4OTBjNDAwMGEsIDB4MjQwMjAwMDIsIDB4YTBhMjAwMGIsIDB4YTBhNDAwMGEsCi0JMHg5NGMyMDAxMCwgMHhhNGEyMDAxMCwgMHg5MGMzMDAxMiwgMHhhMGEzMDAxMiwgMHg5MGMyMDAxMywgMHhhMGEyMDAxMywKLQkweDhjYzMwMDE0LCAweGFjYTMwMDE0LCAweDhjYzIwMDI0LCAweGFjYTIwMDI0LCAweDhjYzMwMDI4LCAweGFjYTMwMDI4LAotCTB4OGNjMjAwMmMsIDB4M2MwMzEwMDAsIDB4YWNhMjAwMmMsIDB4MjQwMjAwMDEsIDB4YWY0MzAxYjgsIDB4YWY0MDAwNDQsCi0JMHgwM2UwMDAwOCwgMHhhZjQwMDA1MCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxMCwgMHgwZTAwMTA0NywgMHgwMDAwMDAwMCwKLQkweDAwMDAyMDIxLCAweDBlMDAwYzc4LCAweGFmNDAwMTgwLCAweDhmYmYwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LAotCTB4OGY0NjAxNDgsIDB4Mjc0NTAxODAsIDB4M2MwMzgwMDAsIDB4MDAwNjE0MDIsIDB4MzA0NzAwZmYsIDB4OGY0MjAxYjgsCi0JMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg4ZjQ0MDE0MCwgMHgwMDA2MTIwMiwgMHgzMDQyMDBmZiwKLQkweDAwMDYxYzAyLCAweGFjYTIwMDA0LCAweDI0MDIwMDAyLCAweGE0YTMwMDA4LCAweDMwYzMwMGZmLCAweGEwYTIwMDBiLAotCTB4YWNhMzAwMjQsIDB4MTBlMDAwMGEsIDB4YWNhNDAwMDAsIDB4MjhlMjAwMDQsIDB4MTQ0MDAwMDUsIDB4MjQwMjAwMDEsCi0JMHgyNDAyMDAwNSwgMHg1NGUyMDAwNSwgMHhhMGEwMDAwYSwgMHgyNDAyMDAwMSwgMHgwYTAwMTYwOSwgMHhhMGEyMDAwYSwKLQkweGEwYTAwMDBhLCAweDNjMDIxMDAwLCAweDAzZTAwMDA4LCAweGFmNDIwMWI4LCAweDAzZTAwMDA4LCAweDAwMDAxMDIxLAotCTB4MTBjMDAwMDcsIDB4MDAwMDAwMDAsIDB4OGNhMjAwMDAsIDB4MjRjNmZmZmYsIDB4MjRhNTAwMDQsIDB4YWM4MjAwMDAsCi0JMHgxNGMwZmZmYiwgMHgyNDg0MDAwNCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwYTAwMTYxZiwgMHgwMGEwMTAyMSwKLQkweGFjODYwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI0ODQwMDA0LCAweDAwYTAxMDIxLCAweDE0NDBmZmZhLAotCTB4MjRhNWZmZmYsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfTsgCitzdGF0aWMgdTggYm54Ml9SWFBfYjA2RndUZXh0W10gPSB7CisJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHgwNywgMHg4NywgMHg0MSwgMHg0NCwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGVkLCAweDVjLCAweDVkLCAweDZjLAorCTB4MWMsIDB4ZDcsIDB4NzUsIDB4M2UsIDB4ZjMsIDB4NDMsIDB4NzEsIDB4NDksIDB4OTEsIDB4ZDQsIDB4NzAsIDB4YjksCisJMHg2MiwgMHg1NywgMHgxMiwgMHg2NSwgMHhlZCwgMHg4YSwgMHg0MywgMHg3MSwgMHg2ZCwgMHgzMSwgMHhjZSwgMHg1MCwKKwkweDU4LCAweGRiLCAweDgyLCAweGIxLCAweDQ4LCAweGM3LCAweGIzLCAweGE0LCAweGM4LCAweDI0LCAweDAyLCAweDQyLAorCTB4MWIsIDB4NDIsIDB4YWIsIDB4YTQsIDB4YTksIDB4YzEsIDB4OTAsIDB4NzIsIDB4OTEsIDB4MjIsIDB4MmMsIDB4YTAsCisJMHgxYSwgMHg3OSwgMHhmMCwgMHg0MywgMHgxMCwgMHgyZiwgMHg1NiwgMHgzZiwgMHhhNiwgMHhkMSwgMHg4ZCwgMHg5NiwKKwkweGI2LCAweDFjLCAweDUzLCAweDA4LCAweDgyLCAweDgyLCAweGU1LCAweDUyLCAweDUyLCAweDBiLCAweDJjLCAweGI0LAorCTB4OTYsIDB4ZWQsIDB4MzYsIDB4N2UsIDB4YTgsIDB4MjMsIDB4OWEsIDB4OTIsIDB4OGQsIDB4YTYsIDB4NjgsIDB4ODEsCisJMHgyMiwgMHhhZCwgMHhkMSwgMHhmNCwgMHg0ZCwgMHg5NSwgMHg5YSwgMHg0YSwgMHg3NSwgMHg1ZiwgMHhkNCwgMHhhMiwKKwkweDQ4LCAweGRhLCAweDQ2LCAweGNkLCAweGY0LCAweGZiLCAweGVlLCAweGNjLCAweDg4LCAweGQ0LCAweDlhLCAweGIyLAorCTB4MmMsIDB4M2IsIDB4MGQsIDB4NjIsIDB4NzQsIDB4MGUsIDB4MzAsIDB4ZDgsIDB4YjksIDB4N2YsIDB4ZTcsIDB4ZWYsCisJMHg5ZSwgMHg3MywgMHhlZSwgMHgzOSwgMHg3NywgMHgyOCwgMHg3ZCwgMHhhNSwgMHg0MywgMHhkYSwgMHgyNSwgMHg4NCwKKwkweDRlLCAweDNjLCAweDk5LCAweGMzLCAweGNmLCAweDNjLCAweGZkLCAweGUwLCAweGMzLCAweDBmLCAweGVlLCAweGMxLAorCTB4ZWIsIDB4YjAsIDB4YTEsIDB4NmQsIDB4ZDAsIDB4YTMsIDB4ZmUsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsCisJMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwKKwkweDg4LCAweDIxLCAweDg2LCAweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LCAweDE4LCAweDYyLCAweDg4LCAweDIxLAorCTB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsCisJMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwKKwkweDIxLCAweDg2LCAweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LCAweGZmLCAweGVmLCAweDYwLCAweDg4LCAweDU4LAorCTB4ZmMsIDB4ZWQsIDB4MGMsIDB4MWYsIDB4NDksIDB4ZTgsIDB4ODUsIDB4Y2IsIDB4MDcsIDB4M2QsIDB4NWIsIDB4MTIsCisJMHg0NiwgMHg2MSwgMHg2OSwgMHg2NiwgMHhkYSwgMHgxNiwgMHg3MSwgMHhlYiwgMHhiYiwgMHgzMywgMHg0NSwgMHhmOSwKKwkweDFmLCAweGJmLCAweDk0LCAweDMyLCAweDg1LCAweGZkLCAweGRiLCAweDBiLCAweDM3LCAweDlmLCAweDdkLCAweGYzLAorCTB4OTEsIDB4ZWMsIDB4OGQsIDB4MDUsIDB4NDMsIDB4MTIsIDB4NTYsIDB4ZTEsIDB4ZTgsIDB4YjAsIDB4YjUsIDB4NGIsCisJMHgxMiwgMHg3ZCwgMHg1OCwgMHhmMywgMHhkZCwgMHhjMSwgMHhjZiwgMHg1OSwgMHhkMiwgMHgxNSwgMHhlMSwgMHhiYSwKKwkweGVlLCAweGJmLCAweDM5LCAweDY4LCAweGM5LCAweDJiLCAweDhkLCAweDk0LCAweDVjLCAweDY4LCAweDZjLCAweGRmLAorCTB4MjQsIDB4NWQsIDB4ZDksIDB4NTIsIDB4MDksIDB4ZmQsIDB4NmUsIDB4OGEsIDB4ZTMsIDB4OTYsIDB4OTQsIDB4YWIsCisJMHgyZCwgMHhlMiwgMHgyYSwgMHhiYSwgMHg3ZCwgMHg1YSwgMHg3MSwgMHhmZSwgMHgzZSwgMHhjZCwgMHg5YiwgMHg3ZiwKKwkweDllLCAweGZmLCAweDFlLCAweDI0LCAweGE1LCAweGNiLCAweDdkLCAweDY4LCAweGY3LCAweGExLCAweGNkLCAweGY3LAorCTB4ODEsIDB4ZjQsIDB4OTQsIDB4OTgsIDB4NzIsIDB4YTQsIDB4OTEsIDB4OTAsIDB4YTMsIDB4ZDUsIDB4OGMsIDB4ZTgsCisJMHgwNSwgMHg3MSwgMHhiZCwgMHhiYywgMHg5ZCwgMHgyZSwgMHhhMywgMHg2ZiwgMHhlYSwgMHgwMCwgMHhkYiwgMHgyOSwKKwkweGUwLCAweGY5LCAweDBlLCAweGQ3LCAweDU5LCAweDVlLCAweDVlLCAweDRhLCAweGI3LCAweGM2LCAweDE0LCAweDBkLAorCTB4OGUsIDB4YjEsIDB4MGYsIDB4YmYsIDB4NTgsIDB4NWYsIDB4YWUsIDB4NzYsIDB4MDAsIDB4NmYsIDB4ZDYsIDB4NzEsCisJMHg0MSwgMHhkYywgMHg3MywgMHgyYywgMHhkMCwgMHhmNiwgMHhmZCwgMHhkZiwgMHg3NSwgMHgzMiwgMHhiMiwgMHhlMiwKKwkweDc0LCAweDgxLCAweGE3LCAweDE2LCAweDY5LCAweGI1LCAweGM1LCAweGQyLCAweDBiLCAweGI2LCAweGI1LCAweDIyLAorCTB4NmQsIDB4MWMsIDB4ZWIsIDB4MzQsIDB4MGEsIDB4YmUsIDB4M2YsIDB4OWQsIDB4OTcsIDB4YWUsIDB4YTAsIDB4NmYsCisJMHhiNywgMHhlMiwgMHg2MywgMHg3MiwgMHg0MiwgMHhjMywgMHhiYywgMHg1NywgMHg0OSwgMHgwZiwgMHgzYSwgMHhlMiwKKwkweDNiLCAweDdmLCAweGYzLCAweDUyLCAweGFjLCAweDZjLCAweDk3LCAweGM5LCAweDU0LCAweGY2LCAweGEwLCAweDFiLAorCTB4ZDAsIDB4NzQsIDB4M2QsIDB4NjcsIDB4MmIsIDB4NzAsIDB4NmEsIDB4ZTAsIDB4NGYsIDB4ZGIsIDB4ODEsIDB4ZjUsCisJMHhlZSwgMHgwYSwgMHg2OCwgMHgxYSwgMHg4NSwgMHhjZCwgMHg2MiwgMHg2YywgMHg2NiwgMHg5ZiwgMHhlOCwgMHgzYiwKKwkweDg3LCAweDkzLCAweGUxLCAweDc4LCAweDk3LCAweDM2LCAweDMyLCAweDZmLCAweDg4LCAweDZlLCAweGZmLCAweDgxLAorCTB4ZTYsIDB4ZDUsIDB4N2EsIDB4ZTUsIDB4ZDgsIDB4YmMsIDB4OGUsIDB4NzcsIDB4NWQsIDB4YWUsIDB4ZTYsIDB4NGIsCisJMHg5YSwgMHhkYiwgMHhhOCwgMHg2OCwgMHhkZSwgMHhkOSwgMHg1OSwgMHhhZCwgMHg3OCwgMHhkNiwgMHg5NCwgMHhhMywKKwkweGI2LCAweDdmLCAweGUxLCAweGI0LCAweDczLCAweDQyLCAweDFiLCAweDM5LCAweDdiLCAweDQ2LCAweDFiLCAweDNkLAorCTB4ZmIsIDB4ODYsIDB4MzYsIDB4ZGUsIDB4ZDgsIDB4YjIsIDB4NDksIDB4ZGEsIDB4YjMsIDB4ZDAsIDB4MWUsIDB4NzEsCisJMHg5MCwgMHhiZiwgMHg0ZiwgMHg4NywgMHhiYSwgMHhlYywgMHhhMiwgMHhkZSwgMHg0YSwgMHhlNCwgMHg3ZCwgMHg5ZiwKKwkweGYzLCAweDg2LCAweGU2LCAweDU1LCAweDZkLCAweDhiLCAweGZiLCAweGU2LCAweGE2LCAweDIyLCAweDFhLCAweGVkLAorCTB4NzIsIDB4NzQsIDB4ZGUsIDB4OTQsIDB4NjMsIDB4ZDUsIDB4OTQsIDB4M2MsIDB4NTcsIDB4MmQsIDB4MjksIDB4NWEsCisJMHg4NiwgMHg1ZCwgMHhkMiwgMHhiYywgMHgwNiwgMHhjNywgMHgyYiwgMHhhMCwgMHg3NSwgMHg0MiwgMHhkYiwgMHgwNywKKwkweDlhLCAweGRlLCAweDU5LCAweDI5LCAweDVkLCAweDcxLCAweGU2LCAweDQwLCAweGFmLCAweDAzLCAweDc4LCAweGZmLAorCTB4NTgsIDB4MWIsIDB4NmQsIDB4ZjQsIDB4NmEsIDB4ZGUsIDB4YzksIDB4OWIsIDB4ZTIsIDB4MzksIDB4NTksIDB4ZWIsCisJMHg0YiwgMHg2MiwgMHhiYSwgMHhiMCwgMHgwMSwgMHhjOCwgMHgwYywgMHhmZCwgMHgzOCwgMHhkMCwgMHg0OSwgMHhjYSwKKwkweGY3LCAweGY1LCAweDgyLCAweGZmLCAweDJjLCAweDc0LCAweDZmLCAweDVkLCAweGExLCAweGZjLCAweDhkLCAweDVlLAorCTB4MjksIDB4Y2YsIDB4NTMsIDB4ZDcsIDB4YTYsIDB4MzYsIDB4NTIsIDB4ZjUsIDB4MmYsIDB4NzgsIDB4OGUsIDB4ZjQsCisJMHgxOSwgMHhlMiwgMHhmYiwgMHg0NywgMHg5ZCwgMHg4MSwgMHhmNCwgMHgyMSwgMHgzOSwgMHgwMywgMHhkYywgMHg3NSwKKwkweGFkLCAweGQ4LCAweGEwLCAweGFlLCAweGMxLCAweGRmLCAweDJkLCAweDM5LCAweDAyLCAweGJkLCAweDE1LCAweDlkLAorCTB4NWUsIDB4OTksIDB4YjQsIDB4YjIsIDB4MmUsIDB4ZjYsIDB4NjgsIDB4NTMsIDB4MjAsIDB4NTcsIDB4MzIsIDB4YjQsCisJMHgxNywgMHhkMiwgMHhlNywgMHhkZSwgMHg2NywgMHhkMywgMHg5ZSwgMHhhMSwgMHhjYiwgMHg1MywgMHgyZiwgMHgzZCwKKwkweGRmLCAweGIzLCAweDM4LCAweGI0LCAweDkxLCAweDMyLCAweDQzLCAweGZmLCAweGYyLCAweDQ1LCAweGNmLCAweGY2LAorCTB4YjYsIDB4YjQsIDB4NDgsIDB4MjksIDB4NmQsIDB4NDgsIDB4MTYsIDB4ZmIsIDB4YjQsIDB4NDMsIDB4NGUsIDB4M2IsCisJMHgyMiwgMHg4NywgMHgyYSwgMHhkMCwgMHg4ZCwgMHg2ZCwgMHg1YSwgMHg4YiwgMHg2MiwgMHg2NywgMHhjYSwgMHgzMiwKKwkweDUwLCAweDMyLCAweDc1LCAweDc0LCAweDI2LCAweDQ5LCAweDk3LCAweDNhLCAweGQyLCAweGU1LCAweDdhLCAweDllLAorCTB4N2EsIDB4YTIsIDB4M2QsIDB4N2YsIDB4MjgsIDB4NWQsIDB4NjksIDB4YWIsIDB4YmEsIDB4NWEsIDB4ZDUsIDB4ZDMsCisJMHhmOCwgMHgyZiwgMHg1ZCwgMHg0ZiwgMHhkNCwgMHhjOSwgMHg3MiwgMHgyOCwgMHhiNywgMHgwMywgMHhkYywgMHg4ZiwKKwkweDQwLCAweDVmLCAweGUyLCAweGVhLCAweGMzLCAweDBmLCAweGIxLCAweDZmLCAweDkzLCAweDUxLCAweGIwLCAweGQzLAorCTB4MTcsIDB4NjEsIDB4MTQsIDB4N2EsIDB4NjEsIDB4MzcsIDB4NjQsIDB4MTksIDB4YTYsIDB4ZWUsIDB4ZTAsIDB4YzMsCisJMHgxZiwgMHg0OSwgMHg1ZSwgMHhmOSwgMHhkNSwgMHg5MCwgMHg5NywgMHhmYywgMHhkYiwgMHgzMiwgMHg1NSwgMHg0OSwKKwkweDgwLCAweDA2LCAweDY1LCAweGQ0LCAweGU1LCAweGJkLCAweDdjLCAweDY0LCAweDFiLCAweDdiLCAweDIwLCAweDVmLAorCTB4NWUsIDB4YTYsIDB4YmUsIDB4NDUsIDB4N2YsIDB4YTIsIDB4ZmQsIDB4ZjMsIDB4OWQsIDB4YjIsIDB4ZmUsIDB4Y2MsCisJMHhiZiwgMHhlZSwgMHg3YywgMHg5MiwgMHhmNiwgMHg5NiwgMHg3YywgMHgyNywgMHhlNCwgMHg3OCwgMHgzNSwgMHhjOSwKKwkweDNkLCAweGQ0LCAweDU2LCAweDU0LCAweDZjLCAweDhhLCAweDY0LCAweDE0LCAweGRkLCAweDI4LCAweDc0LCAweDQ4LAorCTB4NTEsIDB4ZWQsIDB4ZjcsIDB4NWUsIDB4ZDAsIDB4NDMsIDB4MmMsIDB4YTgsIDB4ZjIsIDB4YmQsIDB4YTAsIDB4NjQsCisJMHg5YiwgMHhiNiwgMHhlZCwgMHhjYywgMHgxMSwgMHhjOSwgMHhjMiwgMHhiZSwgMHg0NSwgMHg4ZSwgMHhjYywgMHg5OSwKKwkweDMyLCAweDZkLCAweGZmLCAweDYzLCAweGE3LCAweGI0LCAweDJmLCAweGRmLCAweDZmLCAweGE4LCAweGI4LCAweGFlLAorCTB4ZjcsIDB4NmUsIDB4OTAsIDB4NGQsIDB4ZTAsIDB4NzcsIDB4ZjksIDB4N2UsIDB4NWQsIDB4ZTQsIDB4YTYsIDB4NTksCisJMHhjOCwgMHg1YSwgMHgyMywgMHgwOCwgMHhmNiwgMHg0NiwgMHg4MSwgMHhiMSwgMHg0YywgMHg0MywgMHgyYywgMHg5MywKKwkweDQ0LCAweDhiLCAweDRkLCAweDdkLCAweGY5LCAweGZlLCAweGY4LCAweGYwLCAweGRkLCAweGY1LCAweDc1LCAweDY0LAorCTB4OWUsIDB4YjQsIDB4YTksIDB4MmYsIDB4YzYsIDB4YTgsIDB4MTIsIDB4ZjQsIDB4YzEsIDB4ZjgsIDB4NzQsIDB4YmIsCisJMHhhZSwgMHg4YSwgMHhhMSwgMHhhZSwgMHg0NiwgMHhmZSwgMHhlZiwgMHhlZCwgMHhjMiwgMHhmNSwgMHhhYSwgMHhhMiwKKwkweDc5LCAweGNlLCAweGJiLCAweGExLCAweDJmLCAweGQ4LCAweDMyLCAweDAyLCAweDdmLCAweDM3LCAweGVjLCAweDRmLAorCTB4Y2IsIDB4OTEsIDB4NTQsIDB4NzYsIDB4YzIsIDB4OTUsIDB4YzAsIDB4ZTYsIDB4YWYsIDB4YWQsIDB4YjEsIDB4ZjksCisJMHhkMSwgMHhiYiwgMHhjOCwgMHg3NSwgMHgzYywgMHg5NCwgMHhjYiwgMHgwZCwgMHhlNSwgMHgxYSwgMHg4NSwgMHg1YywKKwkweDYzLCAweDkwLCAweDZiLCAweGU1LCAweDIzLCAweGM4LCAweGI1LCAweGYyLCAweDkxLCAweGU1LCAweGQyLCAweGE0LAorCTB4ZWMsIDB4M2MsIDB4MDgsIDB4NWEsIDB4YTYsIDB4ZmMsIDB4YWIsIDB4MTMsIDB4ZDgsIDB4ZjIsIDB4YmYsIDB4MzgsCisJMHg5ZiwgMHgxNCwgMHgxOSwgMHg3YywgMHg3ZiwgMHg3MCwgMHhkOCwgMHgxNiwgMHhlZiwgMHg1YiwgMHhlMCwgMHhkNSwKKwkweDcxLCAweDQwLCAweDhiLCAweGVmLCAweGVmLCAweDk3LCAweGUxLCAweDZlLCAweGZlLCAweDM4LCAweDhiLCAweDdkLAorCTB4NWQsIDB4Y2YsIDB4MWYsIDB4MjksIDB4ODcsIDB4M2UsIDB4N2MsIDB4ZWYsIDB4ZmUsIDB4YTgsIDB4NmIsIDB4MWYsCisJMHg1NSwgMHgwZSwgMHhjNiwgMHg5YywgMHg0ZiwgMHgzNSwgMHg5ZCwgMHhhYiwgMHgxZiwgMHg1NiwgMHg4NiwgMHhmNSwKKwkweDYzLCAweGNhLCAweDJmLCAweDRmLCAweDg2LCAweGM3LCAweDY0LCAweDcyLCAweDMzLCAweGVkLCAweGE5LCAweGE0LAorCTB4OGQsIDB4MGMsIDB4OTIsIDB4ZWYsIDB4YjUsIDB4ZmMsIDB4NGEsIDB4MjYsIDB4ZTAsIDB4MGQsIDB4MzksIDB4ZDEsCisJMHhkMiwgMHg0NiwgMHgzOSwgMHhiMiwgMHg2MCwgMHg0OSwgMHg2OSwgMHhlOSwgMHg0ZSwgMHg3MSwgMHg1NywgMHgwMywKKwkweDZmLCAweGI0LCAweDQ3LCAweGY2LCAweDdkLCAweGQyLCAweDdjLCAweDJhLCAweGM4LCAweDJiLCAweDJlLCAweDU0LAorCTB4OTEsIDB4ODMsIDB4NTYsIDB4MTMsIDB4NzIsIDB4ZDksIDB4NDgsIDB4Y2IsIDB4OWIsIDB4ODMsIDB4ODcsIDB4ZTUsCisJMHhmMywgMHhkNSwgMHgyNCwgMHhlOCwgMHgzMSwgMHg5ZiwgMHgyYywgMHhlNywgMHgxMCwgMHgxNywgMHhiNSwgMHhiMiwKKwkweDYzLCAweDA4LCAweDc5LCAweGFmLCAweGQ5LCAweDljLCAweDEzLCAweGM0LCAweDk2LCAweDcyLCAweDEwLCAweDgzLAorCTB4NWQsIDB4NmYsIDB4NTAsIDB4ZTUsIDB4MTQsIDB4OTAsIDB4NGYsIDB4NjQsIDB4MGMsIDB4YjEsIDB4YjcsIDB4NjYsCisJMHhiMywgMHhjZCwgMHhmZSwgMHhhMCwgMHhlZiwgMHhiMywgMHg5NSwgMHg1ZSwgMHhhZCwgMHhjOCwgMHhiYywgMHg2NCwKKwkweGYwLCAweGE2LCAweDRjLCAweDNiLCAweDQxLCAweGRmLCAweGU3LCAweDJhLCAweGEzLCAweDliLCAweDk4LCAweDFmLAorCTB4MWEsIDB4MDUsIDB4YzksIDB4OTQsIDB4OWQsIDB4ZjcsIDB4N2MsIDB4ZDcsIDB4YmEsIDB4N2QsIDB4Y2QsIDB4ZmEsCisJMHg3OCwgMHhiMiwgMHgxMywgMHg4MSwgMHhjZSwgMHg0NSwgMHhmYiwgMHhhYSwgMHhhZCwgMHhmNywgMHhiNiwgMHg0YSwKKwkweDA5LCAweDI3LCAweDVkLCAweGQ2LCAweDFhLCAweDQ3LCAweGU3LCAweGJlLCAweDRhLCAweDc5LCAweDViLCAweGFiLAorCTB4ZGMsIDB4MzQsIDB4ODAsIDB4M2YsIDB4NmQsIDB4NjgsIDB4NjIsIDB4MWUsIDB4YWEsIDB4OTQsIDB4YmIsIDB4ZDksCisJMHhhNiwgMHhiZSwgMHg3NCwgMHg0ZCwgMHgxMiwgMHhhMywgMHgxNSwgMHg1ZiwgMHhhZSwgMHgzYSwgMHg0MSwgMHhlZSwKKwkweDYzLCAweDY4LCAweDdhLCAweDZmLCAweDViLCAweGI4LCAweDU2LCAweGQ3LCAweDc2LCAweDM5LCAweDk3LCAweDQ0LAorCTB4M2EsIDB4MGUsIDB4NTUsIDB4YzQsIDB4MmEsIDB4NTYsIDB4NzYsIDB4MzksIDB4NmYsIDB4NGIsIDB4YjksIDB4YTcsCisJMHg2ZCwgMHg3NSwgMHg1ZCwgMHg4YSwgMHhlYiwgMHg3NiwgMHgwZSwgMHhhZiwgMHg5ZCwgMHhiYiwgMHhjYiwgMHhiOSwKKwkweDI4LCAweGU1LCAweDJkLCAweDZkLCAweGFiLCAweGI0LCAweGQyLCAweDU4LCAweGRiLCAweDE3LCAweGFjLCAweGU1LAorCTB4ZjgsIDB4NjYsIDB4NzEsIDB4YmIsIDB4MzksIDB4NDcsIDB4ZWYsIDB4NmQsIDB4YmYsIDB4NDUsIDB4NDMsIDB4MzIsCisJMHhjNSwgMHg0YSwgMHhiOSwgMHhhNywgMHg3ZCwgMHgxNSwgMHhhZiwgMHg0ZCwgMHhiYywgMHhkZSwgMHgxYSwgMHhiYywKKwkweGM0LCAweGQ5LCAweGJlLCAweDhhLCAweDMzLCAweDA3LCAweDljLCAweDQzLCAweGFiLCAweDM4LCAweDM5LCAweDdlLAorCTB4NTgsIDB4OGEsIDB4MzgsIDB4ZDMsIDB4NWEsIDB4MGEsIDB4MzIsIDB4YmMsIDB4NTQsIDB4YzksIDB4NDgsIDB4NzksCisJMHgyOCwgMHgwMSwgMHhkZCwgMHhmNywgMHgxZiwgMHhmYywgMHg5YSwgMHhhYSwgMHg0MywgMHhjYywgMHg2MSwgMHgwZiwKKwkweGJhLCAweDMyLCAweDU1LCAweDVlLCAweDg3LCAweGQ4LCAweDA4LCAweGRiLCAweGY4LCAweDVhLCAweDVkLCAweDg2LAorCTB4MTcsIDB4ZWIsIDB4YTYsIDB4MWMsIDB4NmYsIDB4NzAsIDB4YmYsIDB4OTgsIDB4ZTMsIDB4MDUsIDB4NzUsIDB4YzYsCisJMHg4NSwgMHg0NiwgMHg0ZSwgMHhkYiwgMHg4NywgMHhiZCwgMHg2NiwgMHg5ZCwgMHhiMCwgMHhhZiwgMHg2MSwgMHg2YSwKKwkweGEzLCAweDNjLCAweDFmLCAweDgwLCAweDk3LCAweDc2LCAweDdlLCAweGFjLCAweDQxLCAweGRiLCAweDc5LCAweDAzLAorCTB4YjYsIDB4NDEsIDB4Y2UsIDB4YTMsIDB4OWMsIDB4YmQsIDB4OTUsIDB4YjksIDB4NTMsIDB4NjYsIDB4ZDEsIDB4NTEsCisJMHg3NSwgMHg4OCwgMHg1NiwgMHhjYiwgMHg3NywgMHgyMCwgMHgwNywgMHg0ZCwgMHhhMCwgMHhkNiwgMHg4MCwgMHhjZCwKKwkweGRiLCAweDc4LCAweDZmLCAweDcwLCAweGRlLCAweDMyLCAweGU2LCAweDZkLCAweGUwLCAweDNjLCAweGVjLCAweGNkLAorCTB4MjUsIDB4ZTUsIDB4MGYsIDB4YTYsIDB4Y2QsIDB4ZjEsIDB4NzcsIDB4YjEsIDB4YzcsIDB4NjgsIDB4ZDcsIDB4NTksCisJMHg1NywgMHg1OCwgMHgwMiwgMHg1ZiwgMHhjMSwgMHgzZSwgMHhhMiwgMHg2ZSwgMHg0OCwgMHhlZCwgMHg2MCwgMHg3ZSwKKwkweDhmLCAweGI5LCAweDE5LCAweGNjLCAweGNkLCAweDY2LCAweDE4LCAweGNmLCAweDNkLCAweGZiLCAweDk5LCAweDBlLAorCTB4ZTksIDB4NDIsIDB4YmIsIDB4Y2UsIDB4MzUsIDB4ZDksIDB4MGMsIDB4NzIsIDB4NWIsIDB4ZGYsIDB4Y2IsIDB4YjcsCisJMHhjOSwgMHg0YSwgMHhjYSwgMHhiZiwgMHg2MCwgMHhkOCwgMHhkMSwgMHhkYywgMHgwOCwgMHg2ZiwgMHhmMywgMHg1YywKKwkweGU2LCAweGM1LCAweGM0LCAweGJkLCAweDIxLCAweGNjLCAweDgzLCAweGM3LCAweGM1LCAweDZkLCAweGZjLCAweDQ5LAorCTB4YjcsIDB4NzQsIDB4YjksIDB4ZjgsIDB4OGQsIDB4ZTYsIDB4NGMsIDB4NmYsIDB4MGUsIDB4NmEsIDB4MmUsIDB4YmUsCisJMHhiNywgMHg1MCwgMHgzZSwgMHgxNywgMHhlNywgMHhhMSwgMHg1NiwgMHhhYywgMHg2NiwgMHgyNiwgMHg1OSwgMHgxZiwKKwkweDE1LCAweGViLCAweDZjLCAweGVmLCAweDg1LCAweDNmLCAweDA0LCAweDc1LCAweGQ3LCAweDg1LCAweDViLCAweGJlLAorCTB4NzAsIDB4MTksIDB4N2EsIDB4NGIsIDB4NDMsIDB4NmYsIDB4MjksIDB4MzksIDB4ZGYsIDB4NjAsIDB4OWQsIDB4ZTYsCisJMHg0MiwgMHg1ZiwgMHgxOSwgMHhmMSwgMHgxYSwgMHhlMywgMHg1OCwgMHgyYiwgMHg4NywgMHg4MSwgMHgwMywgMHgzYSwKKwkweDE3LCAweDQ3LCAweDJmLCAweDY0LCAweDY1LCAweGNhLCAweGRhLCAweDFkLCAweGYxLCAweDAwLCAweDVjLCAweDg4LAorCTB4MWYsIDB4ODUsIDB4MzYsIDB4ZjQsIDB4ZjEsIDB4MWQsIDB4OWEsIDB4NTMsIDB4ZmYsIDB4ODYsIDB4N2YsIDB4OTQsCisJMHhlZCwgMHgwOSwgMHhiZCwgMHgzMCwgMHhkNiwgMHhkNCwgMHhiZiwgMHg2ZSwgMHhmYywgMHhhMSwgMHgxYywgMHg2OCwKKwkweDMzLCAweDA2LCAweDMxLCAweGZlLCAweGU4LCAweGE4LCAweGYzLCAweDE4LCAweDhiLCAweDQ4LCAweGQ3LCAweDkyLAorCTB4MjMsIDB4NGIsIDB4MjMsIDB4ZGMsIDB4MzcsIDB4OGIsIDB4ZjEsIDB4YTcsIDB4NWMsIDB4ZTcsIDB4OWUsIDB4MjksCisJMHg1YywgMHhjMCwgMHgxOSwgMHhhZCwgMHhmMSwgMHhmZCwgMHgxMSwgMHg4NywgMHg2YiwgMHg3YywgMHg5OSwgMHg3MCwKKwkweDNhLCAweGM0LCAweDQ4LCAweDk2LCAweGI0LCAweGM3LCAweDA3LCAweDExLCAweDdiLCAweDFlLCAweGUwLCAweDNlLAorCTB4MzIsIDB4MDYsIDB4NmQsIDB4MTcsIDB4YjAsIDB4ZWEsIDB4YjQsIDB4M2MsIDB4M2MsIDB4YzgsIDB4NzUsIDB4YTAsCisJMHhkZCwgMHgyYSwgMHg3YSwgMHg5MiwgMHgzNCwgMHhmMywgMHgyMSwgMHg0ZiwgMHg0MywgMHhkZCwgMHg4MSwgMHhiZSwKKwkweDA2LCAweGFjLCAweDQwLCAweDdmLCAweDlmLCAweGU5LCAweDVlLCAweGQ1LCAweDFmLCAweGQ3LCAweDM1LCAweGYzLAorCTB4Y2IsIDB4MTgsIDB4OTYsIDB4OTAsIDB4ODEsIDB4MzMsIDB4MWIsIDB4NjUsIDB4ZTcsIDB4YTIsIDB4MjUsIDB4ZjYsCisJMHg5OSwgMHg1NSwgMHhmZSwgMHg3NiwgMHg5ZSwgMHg1YiwgMHhjYiwgMHg1ZiwgMHhmNCwgMHg3ZiwgMHgxNSwgMHg1YywKKwkweGQwLCAweGM1LCAweDhlLCAweGZhLCAweDFlLCAweDRiLCAweDA1LCAweGI4LCAweGEzLCAweGY2LCAweDdiLCAweGUxLAorCTB4NWUsIDB4ZjEsIDB4ZmQsIDB4OTksIDB4NzAsIDB4NGYsIDB4YjAsIDB4MDcsIDB4ODgsIDB4OTUsIDB4ZTcsIDB4NmYsCisJMHhjNSwgMHhhOSwgMHgwYywgMHhmNiwgMHgwNiwgMHhiNiwgMHhhNywgMHhlMiwgMHgxMSwgMHhlMywgMHgxOCwgMHhlZCwKKwkweGJiLCAweDYzLCAweGQyLCAweDJjLCAweGIwLCAweDhlLCAweGU2LCAweDNlLCAweGM5LCAweDQ0LCAweGI5LCAweDIyLAorCTB4YTUsIDB4YWQsIDB4ODUsIDB4NjcsIDB4N2QsIDB4ZDgsIDB4Y2YsIDB4YTQsIDB4YTUsIDB4NmMsIDB4YWYsIDB4NjMsCisJMHhhZiwgMHg5NywgMHgzNywgMHhhMCwgMHgxYiwgMHg4YywgMHhjMSwgMHgyNiwgMHhmNSwgMHg0MiwgMHg0MiwgMHg4YSwKKwkweDhkLCAweDQ0LCAweGMyLCAweDNjLCAweDMxLCAweGYwLCAweDIzLCAweGNmLCAweDQ4LCAweDI0LCAweGY0LCAweDEzLAorCTB4ODEsIDB4OWQsIDB4NGQsIDB4ZDYsIDB4NmYsIDB4MjAsIDB4NTYsIDB4NmEsIDB4NzIsIDB4NzQsIDB4ZTgsIDB4ODYsCisJMHhjZiwgMHgxYSwgMHhkOCwgMHhkYiwgMHgwYiwgMHg5YiwgMHgxYiwgMHg4MiwgMHhjZiwgMHg4MCwgMHg4ZiwgMHg3MiwKKwkweGEzLCAweGEzLCAweDM3LCAweGUwLCAweGVkLCAweDJiLCAweDExLCAweDhmLCAweGE2LCAweDhlLCAweGRjLCAweGQzLAorCTB4Y2IsIDB4ZmIsIDB4YmUsIDB4NTEsIDB4ZDgsIDB4OTAsIDB4OTgsIDB4Y2UsIDB4OGYsIDB4NmYsIDB4ZDEsIDB4Y2YsCisJMHhlZCwgMHhkZiwgMHg2MiwgMHg5YywgMHgyYiwgMHg2ZCwgMHgwMSwgMHgzZSwgMHhkZCwgMHhjYiwgMHhlMywgMHhmNywKKwkweDljLCAweGM4LCAweDQ0LCAweDE1LCAweDNhLCAweGRmLCAweDAzLCAweDNkLCAweDU5LCAweGYwLCAweGM1LCAweDNkLAorCTB4YTYsIDB4Y2EsIDB4ZDEsIDB4ZjUsIDB4M2QsIDB4MmYsIDB4NmUsIDB4MGEsIDB4NzAsIDB4ZjAsIDB4ZmQsIDB4MjcsCisJMHg3ZSwgMHg3MCwgMHg4NiwgMHg1ZSwgMHgwZSwgMHhmYiwgMHg3ZSwgMHgzZiwgMHhkYywgMHg4NywgMHg1ZiwgMHg0NSwKKwkweGI5LCAweDc4LCAweDVlLCAweDQ0LCAweGIyLCAweGFkLCAweDNkLCAweDM3LCAweGIyLCAweGUzLCAweDI1LCAweDljLAorCTB4MzMsIDB4YTcsIDB4MWQsIDB4ZGYsIDB4N2YsIDB4MDcsIDB4Y2YsIDB4MzUsIDB4YTcsIDB4ZDksIDB4NDYsIDB4ZGUsCisJMHg3ZiwgMHhmNiwgMHgzMSwgMHgwNywgMHhmOCwgMHgyYywgMHhjZSwgMHhiZCwgMHhkMSwgMHhhNiwgMHhiMywgMHhmZiwKKwkweDVlLCAweGNmLCAweGJkLCAweDdiLCAweDNmLCAweGZiLCAweGM5LCAweGYzLCAweDFkLCAweDdkLCAweGVmLCAweDAzLAorCTB4Y2UsIDB4ZmUsIDB4MGYsIDB4NWMsIDB4NzcsIDB4MGYsIDB4M2UsIDB4MWIsIDB4ZDgsIDB4NmQsIDB4YjEsIDB4ZDEsCisJMHgxYywgMHg1ZiwgMHhlZSwgMHhkNSwgMHg3ZiwgMHg3ZiwgMHhhZCwgMHhmYiwgMHg3NiwgMHhmZiwgMHhiNSwgMHhiYiwKKwkweDZmLCAweGY3LCAweGRmLCAweGNkLCAweGRkLCAweGJmLCAweDE4LCAweGZmLCAweGNkLCAweDAxLCAweDBmLCAweDdkLAorCTB4NzAsIDB4YWQsIDB4ZmYsIDB4YWUsIDB4ZTcsIDB4OTMsIDB4ZDQsIDB4ZjcsIDB4ZjMsIDB4M2QsIDB4ZTUsIDB4YTEsCisJMHhjZSwgMHgzMCwgMHgxZiwgMHg1MiwgMHhlNywgMHhmNSwgMHgxNywgMHhhNywgMHg2ZCwgMHhlZiwgMHg3ZSwgMHg1MywKKwkweDRhLCAweGI5LCAweDE2LCAweGM5LCAweGU2LCAweDZhLCAweGIyLCAweDQzLCAweDhlLCAweDNiLCAweDIyLCAweDRiLAorCTB4YWEsIDB4MTYsIDB4MzEsIDB4NTEsIDB4OGIsIDB4MGYsIDB4YTAsIDB4M2UsIDB4MGIsIDB4ZjQsIDB4YmEsIDB4YTQsCisJMHhmNCwgMHhmMiwgMHgwMiwgMHg3OCwgMHg4OSwgMHhmMCwgMHg3NCwgMHhkZCwgMHgwNSwgMHgwZiwgMHg3MSwgMHgxMCwKKwkweDE3LCAweGYxLCAweDBjLCAweGUyLCAweDdjLCAweGI3LCAweGQ3LCAweGMxLCAweDg1LCAweDczLCAweGVhLCAweDI1LAorCTB4ZDQsIDB4NjQsIDB4YjYsIDB4ZGUsIDB4YTMsIDB4MDcsIDB4NjcsIDB4YjIsIDB4NWIsIDB4OTYsIDB4ZGQsIDB4ZTksCisJMHhlYiwgMHhmMiwgMHgwNSwgMHg5ZSwgMHg1OSwgMHgwYSwgMHhhZSwgMHhjZSwgMHgyMSwgMHg1NiwgMHgwZiwgMHg4ZCwKKwkweDg1LCAweDc1LCAweGQyLCAweGRjLCAweDQxLCAweGNmLCAweDhlLCAweGVlLCAweDQ5LCAweDc4LCAweDQ3LCAweDkyLAorCTB4OTAsIDB4OTIsIDB4OWEsIDB4YjUsIDB4MDQsIDB4MWQsIDB4NjgsIDB4NzIsIDB4MGQsIDB4NjcsIDB4ZDAsIDB4ZDUsCisJMHhiOSwgMHg3NiwgMHhlMCwgMHg0NSwgMHhlZSwgMHg3NywgMHgyMCwgMHhiYiwgMHg1NywgMHhiNCwgMHg3ZSwgMHhhYiwKKwkweDU1LCAweDZiLCAweDg3LCAweDJmLCAweDY1LCAweGM0LCAweDU1LCAweDZkLCAweDllLCAweGQzLCAweGE3LCAweDY2LAorCTB4MTYsIDB4MmIsIDB4YzgsIDB4MDMsIDB4NmQsIDB4OWMsIDB4YWYsIDB4NzksIDB4YmMsIDB4ZDcsIDB4NDksIDB4NDMsCisJMHg5MywgMHgyYiwgMHg3MywgMHhiYSwgMHhmYywgMHhkMywgMHg5YywgMHgyMSwgMHhmZiwgMHg4YywgMHgzYSwgMHhmNCwKKwkweDlhLCAweDdkLCAweDZhLCAweGU2LCAweGI0LCAweDJkLCAweGY3LCAweDgxLCAweGQ1LCAweGYwLCAweDBlLCAweDRmLAorCTB4NzYsIDB4OWEsIDB4NDIsIDB4NWIsIDB4MWQsIDB4NDgsIDB4ZmYsIDB4OGUsIDB4MjAsIDB4ZmYsIDB4YzEsIDB4OWEsCisJMHgyYiwgMHg3MywgMHhhNCwgMHhiNSwgMHg3NiwgMHg4ZCwgMHhmNCwgMHgyMiwgMHgxZiwgMHg4MywgMHg1ZCwgMHgwZiwKKwkweDMwLCAweDI3LCAweGUyLCAweDdjLCAweGQ0LCAweGFiLCAweDAzLCAweGQ2LCAweDNlLCAweGM1LCAweDViLCAweDQyLAorCTB4MTYsIDB4ZWIsIDB4OWMsIDB4NmYsIDB4ODIsIDB4YjcsIDB4MmUsIDB4OWMsIDB4MzEsIDB4NTksIDB4NmIsIDB4NTIsCisJMHhmZSwgMHhiMCwgMHg1YiwgMHhlNSwgMHhhYSwgMHgxYSwgMHhmYiwgMHgwZCwgMHhiNSwgMHhjNywgMHhlZiwgMHhlZiwKKwkweGU3LCAweGRlLCAweDFiLCAweDMyLCAweDk1LCAweDYyLCAweDliLCAweDYzLCAweDU5LCAweGQ0LCAweDljLCAweGM0LAorCTB4OTcsIDB4ZGQsIDB4ZWIsIDB4MGEsIDB4NzksIDB4MGUsIDB4ZGUsIDB4YWYsIDB4MDgsIDB4NjUsIDB4ZGIsIDB4NmQsCisJMHg1ZCwgMHg5NywgMHhkNywgMHg3ZCwgMHhmNywgMHgwMCwgMHhlNSwgMHg4OSwgMHg3MiwgMHg4YiwgMHgzOSwgMHg5ZiwKKwkweGIxLCAweGQ4LCAweDI4LCAweGNjLCAweGMwLCAweDhlLCAweGJmLCAweDJhLCAweGRmLCAweDZmLCAweDFjLCAweDkyLAorCTB4ZWYsIDB4MzUsIDB4MjYsIDB4ZTUsIDB4Y2YsIDB4MWEsIDB4NWYsIDB4OTYsIDB4M2YsIDB4NmQsIDB4MWMsIDB4OTQsCisJMHhkNywgMHgxYiwgMHgwNywgMHhlNCwgMHhiNSwgMHhjNiwgMHg4NCwgMHhiYywgMHhkYSwgMHhkOCwgMHgwZiwgMHgxYiwKKwkweDFmLCAweDg3LCAweDhkLCAweDlmLCAweDlhLCAweDk5LCAweGFjLCAweGY3LCAweGNiLCAweGQ0LCAweDQ5LCAweGM0LAorCTB4MjAsIDB4ZTcsIDB4MWIsIDB4YmEsIDB4YmEsIDB4ZTMsIDB4YjMsIDB4ZTksIDB4ZTcsIDB4MmQsIDB4MzIsIDB4YWQsCisJMHhlZSwgMHhhZiwgMHgzNCwgMHhlNCwgMHg4OSwgMHgyZCwgMHhiYywgMHgyYiwgMHg3YywgMHhjNSwgMHgzMywgMHgyZSwKKwkweDg3LCAweGYxLCAweGU4LCAweGUxLCAweDk0LCAweGI0LCAweDAzLCAweGJmLCAweGNhLCAweDRiLCAweDRkLCAweDllLAorCTB4ZGIsIDB4NjIsIDB4ODYsIDB4ZjcsIDB4OWMsIDB4ODcsIDB4MjQsIDB4YzksIDB4ZmIsIDB4YjAsIDB4OWMsIDB4NjcsCisJMHhhMCwgMHhkZSwgMHg1ZSwgMHhkNywgMHgyNywgMHg3MywgMHhiNCwgMHg2NSwgMHhlOCwgMHhjNiwgMHg5NSwgMHg0MywKKwkweGIwLCAweDUzLCAweGMzLCAweDdlLCAweGNiLCAweGE1LCAweDFlLCAweDE2LCAweDk3LCAweDI4LCAweGY3LCAweDQ2LAorCTB4NTksIDB4NWMsIDB4YTAsIDB4NmYsIDB4ZmYsIDB4MWIsIDB4NjQsIDB4NmMsIDB4OTcsIDB4ZGEsIDB4ODIsIDB4ODksCisJMHhiOSwgMHg2ZSwgMHg5OCwgMHhhYiwgMHg2YywgMHhhNywgMHgzZCwgMHgwMCwgMHgxZiwgMHhmMSwgMHg3ZSwgMHgxMCwKKwkweDRlLCAweGFiLCAweDA5LCAweDI3LCAweGYxLCAweDI0LCAweDU0LCAweDBjLCAweDA4LCAweDcwLCAweDViLCAweDUyLAorCTB4NWIsIDB4NGEsIDB4Y2EsIDB4YzIsIDB4NDIsIDB4MGYsIDB4OWUsIDB4OTQsIDB4MmMsIDB4ZDQsIDB4NmQsIDB4M2MsCisJMHgzOSwgMHgzYywgMHg0MywgMHg3OCwgMHhkMiwgMHhiMCwgMHg1MywgMHhjYSwgMHhjOCwgMHhkOCwgMHgxMiwgMHhjOSwKKwkweDg4LCAweDc4LCAweDVjLCAweGVkLCAweDBkLCAweDZiLCAweDJhLCAweGYyLCAweGEzLCAweDg1LCAweGZjLCAweDc0LAorCTB4ODcsIDB4N2QsIDB4MWQsIDB4NTIsIDB4YWIsIDB4MzgsIDB4MzIsIDB4NTUsIDB4ZmQsIDB4OTQsIDB4M2UsIDB4YTUsCisJMHg3NCwgMHgwNywgMHhmYywgMHg5NSwgMHgyMSwgMHhiNCwgMHhlZiwgMHgwZiwgMHhkYiwgMHg4ZiwgMHhjYSwgMHhmNCwKKwkweGJjLCAweGM4LCAweGNhLCAweGNiLCAweDAzLCAweDdhLCAweDUxLCAweGI1LCAweGY3LCAweGEyLCAweGFkLCAweGEzLAorCTB4OWQsIDB4MGQsIDB4ZGIsIDB4Y2MsIDB4OGYsIDB4MGUsIDB4ZTAsIDB4NzEsIDB4ZDUsIDB4ZjMsIDB4ZjUsIDB4ZWEsCisJMHhiOCwgMHgzYywgMHg1NSwgMHhlZCwgMHg3NywgMHg1ZSwgMHg4NywgMHhjZCwgMHhiZCwgMHg2NSwgMHg0NiwgMHhmNywKKwkweGQyLCAweDA0LCAweDI0LCAweDc5LCAweGY2LCAweDU2LCAweDc1LCAweGY3LCAweGYxLCAweDA0LCAweGUyLCAweGFkLAorCTB4OWIsIDB4MzQsIDB4ZTUsIDB4NmYsIDB4NGYsIDB4NjQsIDB4YWQsIDB4YTcsIDB4ZjUsIDB4NWMsIDB4NTIsIDB4ZGEsCisJMHg3ZCwgMHhmZiwgMHg3MSwgMHgzYiwgMHgzYiwgMHgzYiwgMHhhOSwgMHg3NywgMHhjYSwgMHhkZiwgMHhiZiwgMHg5OCwKKwkweDkxLCAweDg1LCAweGIzLCAweDViLCAweDY1LCAweGExLCAweDA2LCAweDk5LCAweDFhLCAweGJmLCAweDhlLCAweDdkLAorCTB4MzUsIDB4ZTUsIDB4ZWEsIDB4OWUsIDB4NDcsIDB4YjEsIDB4MjcsIDB4OGMsIDB4NWQsIDB4NDksIDB4ZTQsIDB4NmMsCisJMHgxYiwgMHhjNCwgMHhlYywgMHgyNSwgMHg1ZCwgMHg0OSwgMHg5OCwgMHg4NSwgMHg5YywgMHgxYywgMHg4MSwgMHhkZiwKKwkweDRmLCAweGRiLCAweGI5LCAweDFlLCAweDY5LCAweGM3LCAweDdiLCAweDdkLCAweDA0LCAweDdjLCAweDViLCAweDMyLAorCTB4ZDUsIDB4NmIsIDB4YzksIDB4OTksIDB4YzEsIDB4NjgsIDB4ZmYsIDB4YjYsIDB4NjIsIDB4NmUsIDB4NDYsIDB4MTYsCisJMHhjZiwgMHg2NiwgMHhmMCwgMHg5YiwgMHg4MywgMHhmZCwgMHhlYywgMHg5NCwgMHg1NywgMHg2YSwgMHhmZCwgMHhiMiwKKwkweDU0LCAweGRiLCAweDJhLCAweDhiLCAweGI1LCAweGU2LCAweDdkLCAweGU4LCAweGVjLCAweDA5LCAweGUyLCAweDFkLAorCTB4ZjEsIDB4ZjQsIDB4NWIsIDB4NTMsIDB4ZmEsIDB4NTYsIDB4NzEsIDB4Y2QsIDB4N2UsIDB4ZWIsIDB4MjksIDB4ZmQsCisJMHgxZiwgMHhlNCwgMHgzMSwgMHgzMywgMHhhMCwgMHhhOSwgMHgxNywgMHg3ZSwgMHhhNCwgMHhlZSwgMHg4NCwgMHgyNiwKKwkweDc5LCAweGY2LCAweDJhLCAweGJjLCAweDRmLCAweDI2LCAweDQ5LCAweGZiLCAweGY1LCAweGM2LCAweDA3LCAweGQxLAorCTB4NTksIDB4Y2IsIDB4Y2YsIDB4OWQsIDB4NjgsIDB4NTIsIDB4MDYsIDB4ZTIsIDB4ZWMsIDB4YmYsIDB4NzEsIDB4NTIsCisJMHhlZiwgMHg5NSwgMHhlNSwgMHg2ZCwgMHgwZiwgMHg1OCwgMHg0ZiwgMHhlYSwgMHhhZCwgMHg4OCwgMHgwMSwgMHgzZiwKKwkweDk3LCAweDlmLCAweGVlLCAweGQ5LCAweDI0LCAweDNmLCAweGZjLCAweGNkLCAweGVjLCAweGE5LCAweDZmLCAweDIyLAorCTB4ZDksIDB4YmYsIDB4YjIsIDB4YTcsIDB4ODMsIDB4NzEsIDB4MDEsIDB4ZWYsIDB4ZWMsIDB4Y2YsIDB4ZGUsIDB4NzAsCisJMHg3NSwgMHhlYSwgMHhlMSwgMHgyZiwgMHhhMCwgMHg4NywgMHhlYywgMHg5YywgMHhiYSwgMHg5YiwgMHg1NiwgMHgzYywKKwkweDkwLCAweDNlLCAweGY1LCAweDUyLCAweDA2LCAweDZmLCAweDE4LCAweGFiLCAweGY3LCAweDAzLCAweDU3LCAweDU5LAorCTB4ZTksIDB4ZjksIDB4MDksIDB4MjcsIDB4N2IsIDB4MDMsIDB4ZTksIDB4YjAsIDB4YmYsIDB4NjgsIDB4ZjcsIDB4YTcsCisJMHg3NywgMHhlYSwgMHgzYiwgMHg2NCwgMHgzMiwgMHhmZCwgMHg4MCwgMHhmNSwgMHhiNCwgMHg2YywgMHgyMSwgMHhjZSwKKwkweGQ5LCAweDA1LCAweGMxLCAweGRhLCAweDc5LCAweGUyLCAweGZiLCAweDJiLCAweGUwLCAweDBiLCAweDcwLCAweDI4LAorCTB4ZmYsIDB4NTEsIDB4MzgsIDB4NzcsIDB4NTksIDB4NWYsIDB4ZDcsIDB4NzksIDB4YzYsIDB4NjMsIDB4MGMsIDB4NzEsCisJMHhlMSwgMHhlMiwgMHgxMCwgMHg2NSwgMHg0MCwgMHg4MiwgMHg5NSwgMHhjYSwgMHhhNiwgMHg1ZCwgMHhmZCwgMHhjMywKKwkweGM4LCAweDQ3LCAweGZjLCAweGZkLCAweDU2LCAweDUxLCAweDI3LCAweDBmLCAweGU3LCAweGMwLCAweGNiLCAweDRmLAorCTB4YzAsIDB4N2YsIDB4M2YsIDB4NzAsIDB4YTIsIDB4ZjYsIDB4NDgsIDB4NDcsIDB4NzQsIDB4ZmYsIDB4NGUsIDB4ZDEsCisJMHg3ZCwgMHhhZCwgMHgyMSwgMHhlNiwgMHgyYSwgMHg1ZCwgMHhmNCwgMHhkNSwgMHg3NSwgMHhjOCwgMHhkZCwgMHgwNywKKwkweDdiLCAweGI1LCAweGYwLCAweGNiLCAweGJkLCAweGU5LCAweDBjLCAweGY3LCAweDk4LCAweGViLCAweDIyLCAweGJhLAorCTB4MTEsIDB4YmYsIDB4NWMsIDB4NzMsIDB4MjcsIDB4MWUsIDB4ZWUsIDB4NzUsIDB4M2UsIDB4ZWEsIDB4ZDQsIDB4MDMsCisJMHgwOSwgMHg3OSwgMHhmNywgMHg0NCwgMHhiNCwgMHgzNywgMHgwNywgMHg2NCwgMHhiYSwgMHgwYSwgMHhkZCwgMHhlZCwKKwkweGVhLCAweDBmLCAweGZjLCAweDI3LCAweDFkLCAweGYxLCAweDQwLCAweGRlLCAweGZmLCAweDA2LCAweGJjLCAweDA3LAorCTB4YjgsIDB4NWIsIDB4MGIsIDB4Y2QsIDB4YmEsIDB4YzMsIDB4NTgsIDB4M2QsIDB4YTAsIDB4MzEsIDB4YjYsIDB4MGUsCisJMHg0ZiwgMHg1NywgMHhmNiwgMHg0NCwgMHhiZSwgMHg5OCwgMHg4NCwgMHg1ZiwgMHhlZCwgMHhiNiwgMHg5ZSwgMHgxMCwKKwkweGQ2LCAweDYzLCAweGM0LCAweDliLCAweDk0LCAweDFmLCAweGJlLCAweDBjLCAweDFlLCAweDkyLCAweGY0LCAweDkzLAorCTB4N2YsIDB4NWYsIDB4ZTMsIDB4MjcsIDB4MWMsIDB4ZGIsIDB4MmEsIDB4MzUsIDB4ZDQsIDB4ZDQsIDB4NWUsIDB4ZGUsCisJMHg5NCwgMHg2OSwgMHgyNSwgMHgwMywgMHhkYSwgMHgzNSwgMHhmYSwgMHg3NywgMHgyOSwgMHhmNCwgMHhlZiwgMHg0NywKKwkweDgwLCAweGEzLCAweDVkLCAweDhjLCAweDQ3LCAweDFmLCAweGM3LCAweDU5LCAweDlkLCAweGNkLCAweDJjLCAweGViLAorCTB4Y2MsIDB4MDMsIDB4NzYsIDB4NGIsIDB4NTEsIDB4ZGQsIDB4NGYsIDB4ZGYsIDB4OGIsIDB4ZWUsIDB4YTIsIDB4ZDgsCisJMHg5NCwgMHg5NiwgMHg4YiwgMHg5NSwgMHgyOCwgMHgyZSwgMHhhNSwgMHg3MSwgMHg5ZSwgMHhiNCwgMHhjYiwgMHhhNSwKKwkweGI5LCAweDI4LCAweGU2LCAweGI1LCAweGNiLCAweDEyLCAweGYyLCAweDlhLCAweDk1LCAweDk3LCAweDJjLCAweDhjLAorCTB4MjUsIDB4ZTUsIDB4ZTIsIDB4NWMsIDB4MTIsIDB4MzEsIDB4YWIsIDB4NDcsIDB4NTYsIDB4ZTYsIDB4N2EsIDB4MzAsCisJMHg5NiwgMHhjMiwgMHhiYSwgMHgxNCwgMHhlNiwgMHhkYiwgMHhiMiwgMHg1MiwgMHhiMSwgMHg4MSwgMHgyNywgMHg4NywKKwkweDc2LCAweDBlLCAweGVkLCAweDIxLCAweGI5LCAweGE0LCAweGJlLCAweDE3LCAweDMwLCAweDJmLCAweDE4LCAweDQyLAorCTB4ZGMsIDB4NjIsIDB4NWUsIDB4MzAsIDB4ODIsIDB4MTgsIDB4MzIsIDB4ODEsIDB4MjcsIDB4OGEsIDB4NWQsIDB4YTcsCisJMHg2NiwgMHhhNiwgMHgyYSwgMHhiYywgMHg3MywgMHg4NCwgMHgwZSwgMHhhYywgMHg1MywgMHgzMywgMHhkMywgMHhiNiwKKwkweDg5LCAweGJhLCAweGVkLCAweDFiLCAweGRhLCAweDU0LCAweDgzLCAweDcyLCAweDQxLCAweGI3LCAweDQzLCAweDFkLAorCTB4YTIsIDB4M2YsIDB4NGEsIDB4OWIsIDB4ZTQsIDB4NzksIDB4NjcsIDB4MjAsIDB4YzYsIDB4NzcsIDB4MDEsIDB4OWYsCisJMHgyMywgMHhmYSwgMHg2ZiwgMHhkMCwgMHgxNywgMHhhMCwgMHhjMywgMHgyNywgMHhiYSwgMHhlNCwgMHhkMiwgMHhjYiwKKwkweDhjLCAweDM1LCAweGFlLCAweGJjLCAweDdhLCAweDk2LCAweDNhLCAweDJjLCAweGY2LCAweGFjLCAweGVhLCAweDkwLAorCTB4NjMsIDB4MGYsIDB4ZTEsIDB4OGMsIDB4ZDgsIDB4MGYsIDB4N2IsIDB4MzIsIDB4MzMsIDB4ODcsIDB4OTAsIDB4Y2IsCisJMHg3YywgMHgxYiwgMHhmNiwgMHg1OSwgMHg2NiwgMHhjZCwgMHg5ZCwgMHgwZSwgMHg2YSwgMHg4NCwgMHgyMCwgMHgwNiwKKwkweGEwLCAweGRkLCAweDQ3LCAweDVkLCAweGIxLCAweGRkLCAweDA3LCAweGJiLCAweGUzLCAweDU4LCAweDlmLCAweDFhLAorCTB4NWIsIDB4MDQsIDB4OGUsIDB4NjAsIDB4OGMsIDB4ZWQsIDB4Y2QsIDB4YjIsIDB4YTgsIDB4YzYsIDB4MGUsIDB4YWEsCisJMHhiMSwgMHhiMiwgMHhiMiwgMHgwZiwgMHg4ZSwgMHgxZCwgMHg1MiwgMHhiMSwgMHhlOSwgMHg3YywgMHgyMywgMHhlYSwKKwkweGRmLCAweDg4LCAweDU4LCAweGMyLCAweDdlLCAweGY2LCAweGU1LCAweDYxLCAweGViLCAweDdiLCAweDcxLCAweGFlLAorCTB4MTUsIDB4NjQsIDB4YTksIDB4ODEsIDB4M2EsIDB4MzAsIDB4ZmYsIDB4N2IsIDB4OTgsIDB4Y2IsIDB4M2QsIDB4YzgsCisJMHg5ZSwgMHgyYSwgMHhlOSwgMHhlNCwgMHhmMSwgMHgyMCwgMHhjZSwgMHg4MywgMHhmZCwgMHgyMSwgMHhhZCwgMHhiNiwKKwkweDkwLCAweGFmLCAweDAzLCAweDYxLCAweGJiLCAweDI1LCAweGE0LCAweDRkLCAweDNjLCAweDM2LCAweDcwLCAweDFjLAorCTB4YzMsIDB4NWEsIDB4MTcsIDB4MzgsIDB4MTgsIDB4NjMsIDB4MTEsIDB4MjMsIDB4NTIsIDB4MjksIDB4ZTgsIDB4ODIsCisJMHgzNCwgMHhkYiwgMHhhNCwgMHhhYywgMHhkZSwgMHhmNywgMHhjMywgMHg3NiwgMHhiOSwgMHgxNiwgMHgzYSwgMHhiNCwKKwkweGEyLCAweDc1LCAweGE1LCAweDcwLCAweGNmLCAweDUzLCAweGVhLCAweDljLCAweGQxLCAweDkzLCAweDliLCAweGMzLAorCTB4OWMsIDB4MTAsIDB4N2EsIDB4NDUsIDB4OWMsIDB4ZDUsIDB4OTMsIDB4OGMsIDB4MzcsIDB4ZWYsIDB4ODQsIDB4NzYsCisJMHhkYSwgMHg4YiwgMHhiZSwgMHg4NywgMHg0NCwgMHhlZiwgMHg2NSwgMHhkZiwgMHg1MSwgMHhlMCwgMHg2MSwgMHhlZCwKKwkweDNjLCAweDBjLCAweDk5LCAweGQ5LCAweGU2LCAweGZhLCAweDZjLCAweGQzLCAweGZhLCAweGM0LCAweDNhLCAweGViLAorCTB4M2IsIDB4OWEsIDB4ZmEsIDB4MzIsIDB4NTIsIDB4OWIsIDB4ZWYsIDB4NTIsIDB4ZjEsIDB4ZjIsIDB4N2MsIDB4MTgsCisJMHgyZiwgMHgxNywgMHg2YiwgMHg5NCwgMHgwNSwgMHg3ZSwgMHg5NiwgMHg3ZiwgMHg1YiwgMHhlOSwgMHhhMiwgMHg3NiwKKwkweDM2LCAweGIwLCAweGY1LCAweGE1LCAweDkzLCAweDNjLCAweDE3LCAweDU3LCAweGU3LCAweGQ1LCAweGQ0LCAweGJjLAorCTB4ZGYsIDB4MDYsIDB4ZmYsIDB4YmEsIDB4MWMsIDB4NTUsIDB4MzIsIDB4NzAsIDB4M2UsIDB4ZTYsIDB4ZDUsIDB4MDIsCisJMHhiZiwgMHgzMSwgMHg2YywgMHhjZSwgMHhhMSwgMHg4ZiwgMHg0NCwgMHg2YiwgMHgzOCwgMHhmZiwgMHhlNywgMHhhOCwKKwkweDU1LCAweGJlLCAweGFjLCAweGQ2LCAweGFjLCAweGZhLCAweDBjLCAweGY5LCAweDcxLCAweDQyLCAweDllLCAweDdiLAorCTB4YzAsIDB4NWYsIDB4NjcsIDB4MjgsIDB4NDMsIDB4N2IsIDB4MjgsIDB4MDMsIDB4ZjEsIDB4ZmQsIDB4MjcsIDB4NzAsCisJMHhiNywgMHg2MSwgMHgxZSwgMHg3OSwgMHhkZCwgMHg4NiwgMHgzZSwgMHhiZSwgMHhmZiwgMHgxNywgMHhmYSwgMHg3NiwKKwkweDIzLCAweGZmLCAweDIzLCAweDZmLCAweDg5LCAweDI2LCAweGRlLCAweGZlLCAweDAzLCAweDYzLCAweDNkLCAweDRhLAorCTB4YjcsIDB4MzUsIDB4ZDQsIDB4MjYsIDB4NTMsIDB4YmMsIDB4ZWYsIDB4NDgsIDB4ZTEsIDB4MWMsIDB4MzgsIDB4YjksCisJMHg0ZCwgMHhkMSwgMHhhZCwgMHg5ZCwgMHhiZCwgMHg4NiwgMHhmMSwgMHg1ZSwgMHhhYywgMHg4OSwgMHhkYSwgMHhjZCwKKwkweGIyLCAweGU5LCAweDU4LCAweGZiLCAweDUzLCAweDI1LCAweGNmLCAweDYyLCAweGVkLCAweDRlLCAweGYyLCAweDZmLAorCTB4NWIsIDB4MjMsIDB4M2IsIDB4ZTUsIDB4MjYsIDB4NGYsIDB4ZTQsIDB4YTcsIDB4MWYsIDB4NGYsIDB4MmIsIDB4NzIsCisJMHgyMSwgMHhkOCwgMHg2ZCwgMHhkMiwgMHg5MCwgMHhkMSwgMHg3YywgMHg5YSwgMHhkZiwgMHhmOSwgMHgxMiwgMHhiYywKKwkweDE3LCAweDFkLCAweDE5LCAweGU0LCAweDllLCAweGExLCAweGRkLCAweDYwLCAweDRlLCAweDQ3LCAweDdmLCAweDRiLAorCTB4YzgsIDB4MzEsIDB4ZDQsIDB4MjQsIDB4ZTUsIDB4ODUsIDB4OGMsIDB4NTYsIDB4M2MsIDB4OTksIDB4NDUsIDB4MTYsCisJMHhhZCwgMHhiZSwgMHhkNSwgMHhjOSwgMHg4YiwgMHg0YiwgMHhiNiwgMHg3YywgMHgxYiwgMHg3ZSwgMHg3YSwgMHhiMiwKKwkweDllLCAweDRkLCAweDdmLCAweDEzLCAweGY5LCAweGMxLCAweDkxLCAweDI1LCAweGU2LCAweDEzLCAweDNkLCAweDI5LAorCTB4NjUsIDB4OWIsIDB4ZjMsIDB4OWEsIDB4NmMsIDB4NjAsIDB4NGMsIDB4OWIsIDB4NDcsIDB4N2UsIDB4NmEsIDB4ZGQsCisJMHgyZCwgMHg0NywgMHg4MiwgMHg5ZiwgMHg1NywgMHhkNywgMHhjNiwgMHgwYywgMHhjYSwgMHhiMSwgMHgzNiwgMHg2NiwKKwkweDEwLCAweDBmLCAweDYzLCAweGM2LCAweDRlLCAweGVjLCAweDEzLCAweDYzLCAweDA2LCAweGY2LCAweGZmLCAweDI0LAorCTB4NjMsIDB4ODYsIDB4OGQsIDB4NzUsIDB4OGMsIDB4MTksIDB4NzksIDB4NTksIDB4YWMsIDB4MzIsIDB4NjYsIDB4ZWMsCisJMHg0NSwgMHg5YiwgMHgzMSwgMHhhMywgMHg4MCwgMHg3NiwgMHgxMCwgMHgyZiwgMHgxNiwgMHg1NSwgMHhiYywgMHhjOCwKKwkweDVhLCAweGNiLCAweGMyLCAweDM4LCAweDgxLCAweDNjLCAweGIxLCAweDhhLCAweDNjLCAweGIxLCAweDhhLCAweDNjLAorCTB4YjEsIDB4OGEsIDB4M2MsIDB4YjEsIDB4OGEsIDB4M2MsIDB4MTEsIDB4YjYsIDB4ZmUsIDB4NWEsIDB4MTUsIDB4NzksCisJMHgyMiwgMHhmYywgMHhlNywgMHgzYywgMHg3MiwgMHg5MiwgMHhhMCwgMHhhNiwgMHgzOCwgMHg4YywgMHg5YSwgMHhjMiwKKwkweGQ1LCAweGM2LCAweGFhLCAweGUzLCAweGRhLCAweGJlLCAweDJhLCAweDZhLCAweDQzLCAweGY1LCAweDlkLCAweDU4LAorCTB4MWYsIDB4ZGEsIDB4ODAsIDB4YmEsIDB4YTgsIDB4ZTYsIDB4NmMsIDB4MDEsIDB4NWYsIDB4ZDcsIDB4ZTAsIDB4MWIsCisJMHhkNCwgMHhkMywgMHg1NiwgMHg5OSwgMHhjYSwgMHhlZCwgMHg4MCwgMHg3YywgMHhkOCwgMHg3ZiwgMHhmYiwgMHhmYiwKKwkweGU4LCAweDQzLCAweDNlLCAweDlmLCAweDYzLCAweDBkLCAweGMyLCAweDc4LCAweGI1LCAweDBmLCAweDZkLCAweDFkLAorCTB4NmQsIDB4ZWMsIDB4ZTksIDB4MDQsIDB4N2MsIDB4YzQsIDB4N2UsIDB4OTAsIDB4ZjksIDB4NjIsIDB4N2EsIDB4NDEsCisJMHg5ZSwgMHhkYywgMHgxYywgMHhkOCwgMHhmNCwgMHg2ZiwgMHgzMSwgMHgyNywgMHg1ZSwgMHhkMywgMHhkZSwgMHg4OCwKKwkweDM5LCAweGYwLCAweDE3LCAweGQ4LCAweDk3LCAweDVhLCAweDAzLCAweDVjLCAweGJhLCAweGZkLCAweGU3LCAweGM0LAorCTB4ZDEsIDB4YjcsIDB4ZTEsIDB4ZDYsIDB4MWMsIDB4ZGEsIDB4ZDUsIDB4ZjcsIDB4OWEsIDB4ZmEsIDB4YjIsIDB4OTgsCisJMHhjZiwgMHhlZiwgMHhlMiwgMHgzYiwgMHhmMCwgMHhmYiwgMHgxNiwgMHg3ZSwgMHg2MSwgMHg3NywgMHhmNiwgMHgwNSwKKwkweGNjLCAweGU5LCAweGMzLCAweGVmLCAweDc3LCAweDlhLCAweGU2LCAweDQyLCAweDBhLCAweGZiLCAweDJmLCAweGQxLAorCTB4NzcsIDB4MzEsIDB4YTQsIDB4YzEsIDB4NmYsIDB4ODksIDB4NWYsIDB4NmEsIDB4ZTIsIDB4ZTMsIDB4MDcsIDB4ZTgsCisJMHhmYiwgMHg2YiwgMHhmNCwgMHhmOSwgMHhmZSwgMHhkYiwgMHg0ZSwgMHhkNCwgMHgyNywgMHhhNSwgMHg5NiwgMHg3MCwKKwkweGVmLCAweDQ2LCAweGQ1LCAweGRlLCAweDY5LCAweGNhLCAweGU2LCAweDhmLCAweDJjLCAweGU5LCAweGFhLCAweDBlLAorCTB4N2EsIDB4YWUsIDB4OGUsIDB4ZWEsIDB4MDgsIDB4NzEsIDB4YmUsIDB4YmMsIDB4MTAsIDB4ZDQsIDB4YWQsIDB4YzcsCisJMHg1MSwgMHg3MywgMHgxNiwgMHhhYiwgMHhiNCwgMHg5MSwgMHgxYywgMHhmYSwgMHg2ZCwgMHg5YywgMHg2OSwgMHgzMiwKKwkweDY5LCAweGRjLCAweGFhLCAweDYzLCAweDEzLCAweDg5LCAweGM5LCAweDdhLCAweDliLCAweDQ4LCAweDM3LCAweDY5LAorCTB4MzIsIDB4NGYsIDB4MjIsIDB4OGUsIDB4ZDksIDB4OTksIDB4ZTIsIDB4YzIsIDB4ZWMsIDB4OGMsIDB4MDcsIDB4OWMsCisJMHg2MywgMHg3NSwgMHhhZSwgMHhlNSwgMHgzYywgMHg5MywgMHhmNywgMHg2MywgMHg0ZCwgMHg3NCwgMHg2OSwgMHgxMywKKwkweDYwLCAweDA2LCAweGY0LCAweDllLCAweGFiLCAweDkzLCAweDdlLCAweDQwLCAweGIzLCAweGFjLCAweDY4LCAweGRhLAorCTB4ZTgsIDB4OGYsIDB4ZWEsIDB4YzcsIDB4MWMsIDB4NmEsIDB4NWQsIDB4OTksIDB4NjQsIDB4ZWQsIDB4NWMsIDB4MGMsCisJMHg2OSwgMHhiYSwgMHg3NSwgMHg0OSwgMHgyNCwgMHgwYSwgMHhjZCwgMHhmOCwgMHg4MiwgMHg4YywgMHhmMywgMHhiOSwKKwkweGZhLCAweGVjLCAweDhjLCAweGZlLCAweDQyLCAweDM2LCAweGM3LCAweDNiLCAweDExLCAweGQ3LCAweDlhLCAweDlkLAorCTB4NjksIDB4MWQsIDB4NDgsIDB4YzgsIDB4OGYsIDB4OTEsIDB4YmIsIDB4MWQsIDB4NTMsIDB4MzQsIDB4NjYsIDB4NjcsCisJMHg4YywgMHgxNywgMHgwMiwgMHg1YiwgMHgwYywgMHhlOCwgMHhlMCwgMHgzYywgMHhjOSwgMHhiNywgMHg0MywgMHg0ZSwKKwkweGQyLCAweDYyLCAweDRkLCAweDFkLCAweDhjLCAweDRmLCAweGFhLCAweDdhLCAweGQxLCAweDk0LCAweDJiLCAweDE1LAorCTB4NDUsIDB4M2IsIDB4YWMsIDB4ZGIsIDB4YzksIDB4YzMsIDB4ZWMsIDB4OGMsIDB4ZmMsIDB4ZDEsIDB4MmQsIDB4MWUsCisJMHhkNiwgMHg5MSwgMHg4NywgMHg3OCwgMHg0OSwgMHgyNywgMHhkMCwgMHg1YiwgMHhjMCwgMHg3ZiwgMHgxMiwgMHhmNSwKKwkweDdiLCAweDU0LCAweGFiLCAweGZiLCAweGZlLCAweDhhLCAweDkzLCAweDQzLCAweDVjLCAweGUwLCAweDNlLCAweGI2LAorCTB4YTgsIDB4M2MsIDB4ZDcsIDB4NzMsIDB4MzIsIDB4YmMsIDB4ZWYsIDB4OWIsIDB4ZTMsIDB4ZGYsIDB4MzksIDB4NzgsCisJMHhmOSwgMHgwMSwgMHhkNCwgMHg0ZCwgMHhiYywgMHgxYiwgMHhhNCwgMHg3ZiwgMHhlMSwgMHhmNywgMHgzNiwgMHhmZiwKKwkweGUyLCAweDdjLCAweGY2LCAweDkzLCAweGU3LCAweDgxLCAweGY0LCAweDU1LCAweGYwLCAweGU3LCAweGU1LCAweGQxLAorCTB4ODcsIDB4NTgsIDB4NTEsIDB4NmMsIDB4NDQsIDB4YjgsIDB4NzgsIDB4YzcsIDB4Y2UsIDB4MzksIDB4MmEsIDB4ZmYsCisJMHg2ZSwgMHhmMiwgMHhkMSwgMHg5NiwgMHhmMCwgMHhkYywgMHhhNSwgMHg4ZSwgMHhjOCwgMHgyNywgMHhmOSwgMHhlOSwKKwkweDg0LCAweDRkLCAweDkwLCAweDE3LCAweGNlLCAweDhmLCAweGVlLCAweDI1LCAweGQ4LCAweGZlLCAweGI4LCAweDM2LAorCTB4MTIsIDB4ZGQsIDB4YTksIDB4N2QsIDB4OWMsIDB4M2QsIDB4OGYsIDB4NzQsIDB4NzYsIDB4MzcsIDB4N2UsIDB4ODgsCisJMHg4MywgMHhiNCwgMHgyMywgMHhiZSwgMHgyMiwgMHg5ZSwgMHg4OCwgMHg4ZiwgMHhmYywgMHg0NCwgMHhiYywgMHgyOCwKKwkweDFiLCAweDVkLCAweDk3LCAweDlmLCAweDYwLCAweDVkLCAweGMwLCAweDRmLCAweDY5LCAweDIxLCAweDBkLCAweDlkLAorCTB4OTAsIDB4YTcsIDB4MTEsIDB4NmQsIDB4YTQsIDB4YmEsIDB4ZGUsIDB4MWQsIDB4YzcsIDB4MGYsIDB4NWMsIDB4YzYsCisJMHhkNSwgMHhiMSwgMHgwNiwgMHhlZiwgMHhhMSwgMHg0OCwgMHg5NywgMHg3ZiwgMHgzYiwgMHhiMiwgMHhhNCwgMHg4ZCwKKwkweDM0LCAweGY4LCAweDlkLCAweGE5LCAweGFlLCAweGI5LCAweDhkLCAweDg4LCAweGRlLCAweDVhLCAweDlkLCAweDQ2LAorCTB4YmYsIDB4YmMsIDB4MmIsIDB4ZmYsIDB4MGMsIDB4ZjYsIDB4YTksIDB4M2IsIDB4ZjgsIDB4YmIsIDB4MTQsIDB4NTUsCisJMHg0NywgMHhiMSwgMHg2ZiwgMHhiOSwgMHhkNSwgMHg3MywgMHhhMiwgMHhiZiwgMHhkMywgMHhkOSwgMHgxZiwgMHhlNiwKKwkweDQzLCAweDUxLCAweDZkLCAweDFjLCAweGQ1LCAweDU5LCAweGVhLCAweDllLCAweDdkLCAweGFmLCAweGU3LCAweDY4LAorCTB4YzgsIDB4NGYsIDB4OTksIDB4MzMsIDB4MDUsIDB4M2EsIDB4MDgsIDB4ZjEsIDB4ZGUsIDB4OTEsIDB4Y2YsIDB4OTEsCisJMHgyNiwgMHgzZSwgMHg0NywgMHhjMSwgMHhlNywgMHgzZSwgMHhmMCwgMHgzOSwgMHg3NiwgMHg4YiwgMHhjZiwgMHg1YiwKKwkweGI2LCAweDk3LCAweDI5LCAweGMzLCAweGY2LCAweDQ2LCAweGQ2LCAweGI1LCAweGJkLCAweDU1LCAweDNhLCAweGFiLAorCTB4NzMsIDB4ODMsIDB4ZmIsIDB4OWEsIDB4OTEsIDB4ODYsIDB4MmYsIDB4YzcsIDB4OWQsIDB4OGYsIDB4NTMsIDB4MzcsCisJMHhiNywgMHhjYiwgMHg5OSwgMHg4NSwgMHhiYiwgMHhkNSwgMHhiNywgMHgxMSwgMHhhZiwgMHgyYSwgMHg3NywgMHg5NCwKKwkweDRiLCAweGY1LCAweDgwLCAweDlmLCAweDFmLCAweDJmLCAweGIxLCAweDNkLCAweDEyLCAweGVhLCAweDhhLCAweDNhLAorCTB4Y2IsIDB4M2EsIDB4MjUsIDB4YjksIDB4MWIsIDB4MmYsIDB4YmYsIDB4ZjgsIDB4OWMsIDB4NzYsIDB4YTUsIDB4MTIsCisJMHg5ZCwgMHg0ZiwgMHg1YSwgMHg3OCwgMHhjNiwgMHhhZSwgMHhlNSwgMHgyOSwgMHhmYSwgMHg2ZSwgMHgzMiwgMHg2NiwKKwkweDQ1LCAweGY3LCAweDY3LCAweDIyLCAweGZjLCAweGZlLCAweGMwLCAweGVmLCAweDc1LCAweDZiLCAweGJmLCAweDEzLAorCTB4ZjAsIDB4N2MsIDB4OGEsIDB4NzgsIDB4ZDcsIDB4NTMsIDB4M2MsIDB4OWYsIDB4YzYsIDB4OWMsIDB4NjYsIDB4MTksCisJMHg1YywgMHhkOCwgMHhhNCwgMHg5ZSwgMHhlNCwgMHg5OCwgMHhlNywgMHhkMCwgMHgyZiwgMHg0YywgMHhkMCwgMHgwYywKKwkweGVlLCAweGRkLCAweDZhLCAweDRiLCAweGJlLCAweDVjLCAweDc0LCAweDM2LCAweDA2LCAweGU3LCAweDI4LCAweDY0LAorCTB4YmEsIDB4NmMsIDB4ZjEsIDB4ZmUsIDB4MGEsIDB4MzEsIDB4OGMsIDB4NjcsIDB4ODMsIDB4YjIsIDB4YjUsIDB4MTYsCisJMHhmNSwgMHg1YywgMHgzOSwgMHhkMCwgMHgwZSwgMHgxZCwgMHhiMywgMHhkZCwgMHhkNiwgMHhjYiwgMHhmYiwgMHgwYSwKKwkweGNhLCAweGJjLCAweGEwLCAweGY2LCAweDIxLCAweGQyLCAweDcxLCAweGY0LCAweDdkLCAweGFlLCAweDU1LCAweDk2LAorCTB4YzMsIDB4YmIsIDB4YWQsIDB4YzUsIDB4OGEsIDB4ZWYsIDB4YmYsIDB4ODMsIDB4M2MsIDB4ZmMsIDB4MzQsIDB4NzQsCisJMHg1ZiwgMHhhZSwgMHhmZiwgMHhjYywgMHg1ZiwgMHg0ZSwgMHhmMSwgMHg2ZiwgMHhhNSwgMHgyMiwgMHg5YiwgMHhkOCwKKwkweGQxLCAweGNiLCAweDdiLCAweDIwLCAweGY4LCAweDk2LCAweDFjLCAweGFmLCAweDg3LCAweDY1LCAweGJmLCAweDcwLAorCTB4OWMsIDB4N2QsIDB4ZmYsIDB4MGQsIDB4YmUsIDB4N2QsIDB4ZmYsIDB4ZjQsIDB4YWEsIDB4OWQsIDB4MDIsIDB4ZmUsCisJMHgxNywgMHgzMywgMHhlMSwgMHg5YiwgMHhkZCwgMHg5MCwgMHg1OCwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3RGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9Owogc3RhdGljIHUzMiBibngyX1JYUF9iMDZGd1JvZGF0YVsoMHgyOC80KSArIDFdID0gewpAQCAtMTk0MywzODcgKzEwNTcsMjY0IEBACiBzdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3QnNzWygweDEzYTQvNCkgKyAxXSA9IHsgMHgwIH07CiBzdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3U2Jzc1soMHgxYy80KSArIDFdID0geyAweDAgfTsKIAotc3RhdGljIHUzMiBibngyX3J2MnBfcHJvYzFbXSA9IHsKLQkweDAwMDAwMDA4LCAweGFjMDAwMDAxLCAweDAwMDAwMDBjLCAweDJmODAwMDAxLCAweDAwMDAwMDEwLCAweDIxM2YwMDA0LAotCTB4MDAwMDAwMTAsIDB4MjBiZjAwMmMsIDB4MDAwMDAwMTAsIDB4MjAzZjAxNDMsIDB4MDAwMDAwMTgsIDB4ODAwMGZmZmQsCi0JMHgwMDAwMDAxMCwgMHhiMWI4YjAxNywgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgwM2Q4MDAwMCwKLQkweDAwMDAwMDAwLCAweDJjMzgwMDAwLCAweDAwMDAwMDA4LCAweDJjODAwMDAwLCAweDAwMDAwMDA4LCAweDJkMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxMDgsIDB4MDAwMDAwMDgsIDB4MDIwMDAwMDIsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwZiwgMHg0MmUwMDAxYywgMHgwMDAwMDAxMCwgMHg5MTg0MGEwOCwKLQkweDAwMDAwMDA4LCAweDJjODAwMGIwLCAweDAwMDAwMDA4LCAweDJkMDAwMDA4LCAweDAwMDAwMDA4LCAweDJkODAwMTUwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMTAsIDB4MmM2MjAwMDIsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAxMiwgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMiwKLQkweDAwMDAwMDAwLCAweDJjMDcwMDAwLCAweDAwMDAwMDE4LCAweDgwMDBmZmU2LCAweDAwMDAwMDA4LCAweDAyMDAwMDAyLAotCTB4MDAwMDAwMGYsIDB4NDJlMDAwMWMsIDB4MDAwMDAwMTAsIDB4OTE4NDBhMDgsIDB4MDAwMDAwMDgsIDB4MmM4MDAwYjAsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDAwOCwgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwgMHgwMDAwMDAwOCwgMHgyZDgwMDEwOCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDA0LAotCTB4MDAwMDAwMGMsIDB4MWY4MDAwMDIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZmZDksCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMiwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMiwgMHgwMDAwMDAwMCwgMHgyYWRmMDAwMCwKLQkweDAwMDAwMDA4LCAweDJhMDAwMDA1LCAweDAwMDAwMDE4LCAweDgwMDBmZmQ0LCAweDAwMDAwMDA4LCAweDAyMjQwMDMwLAotCTB4MDAwMDAwMTgsIDB4MDAwNDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMTUsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMTcsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAxYiwgMHgwMDAwMDAxOCwgMHg4MDAwMDA0YywgMHgwMDAwMDAxOCwgMHg4MDAwMDA4YywKLQkweDAwMDAwMDE4LCAweDgwMDAwMDBmLCAweDAwMDAwMDE4LCAweDgwMDAwMDBlLCAweDAwMDAwMDE4LCAweDgwMDAwMDBkLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwMGMsIDB4MDAwMDAwMTgsIDB4ODAwMDAwYzIsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMGEsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAwOSwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwOCwgMHgwMDAwMDAxOCwgMHg4MDAwMDBmZCwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDA2LCAweDAwMDAwMDE4LCAweDgwMDAwMDA1LCAweDAwMDAwMDE4LCAweDgwMDAwMGZmLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAxMDQsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMDIsIDB4MDAwMDAwMTgsIDB4ODAwMDAwOTgsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAwMCwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDE4LCAweDgwMDBmZmJhLCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLAotCTB4MDAwMDAwMGMsIDB4MWY4MDAwMDEsIDB4MDAwMDAwMDgsIDB4MmEwMDAwMDIsIDB4MDAwMDAwMTgsIDB4ODAwMGZmYjUsCi0JMHgwMDAwMDAxMCwgMHhiMWEwYjAxMiwgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgyYzIwMDAwMCwKLQkweDAwMDAwMDA4LCAweDJjODAwMDAwLCAweDAwMDAwMDA4LCAweDJkMDAwMDAwLCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmQ4MDAxMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsCi0JMHgwMDAwMDAwZiwgMHg0NzYwMDAwOCwgMHgwMDAwMDAwZiwgMHgwNjBlMDAwMSwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwKLQkweDAwMDAwMDAwLCAweDBmNTgwMDAwLCAweDAwMDAwMDAwLCAweDBhNjQwMDAwLCAweDAwMDAwMDAwLCAweDBhZTUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGI2NjAwMDAsIDB4MDAwMDAwMDAsIDB4MGQ2MTAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMTMsCi0JMHgwMDAwMDAwZiwgMHg0NzYwMDAwOCwgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwOCwgMHgyYzgwMDAwMCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDAwLCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTFjLAotCTB4MDAwMDAwMGYsIDB4MDYwZTAwMDEsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDAsIDB4MGY1ODAwMDAsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTY0MDAwMCwgMHgwMDAwMDAwMCwgMHgwYWU1MDAwMCwKLQkweDAwMDAwMDAwLCAweDBiNjYwMDAwLCAweDAwMDAwMDAwLCAweDBkNjEwMDAwLCAweDAwMDAwMDAwLCAweDAyNjIwMDAwLAotCTB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsIDB4MDAwMDAwMDAsIDB4MzA5YTAwMDAsIDB4MDAwMDAwMDAsIDB4MzEwNDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYzk2MTgwMCwgMHgwMDAwMDAwOSwgMHgwYzk5ZmZmZiwgMHgwMDAwMDAwNCwgMHhjYzk5MzQwMCwKLQkweDAwMDAwMDEwLCAweGIxOTYzMjAyLCAweDAwMDAwMDA4LCAweDBmODAwMDAwLCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLAotCTB4MDAwMDAwMTAsIDB4MDAyMjAwMDIsIDB4MDAwMDAwMGMsIDB4Mjk1MjAwMDEsIDB4MDAwMDAwMGMsIDB4Mjk1MjAwMDAsCi0JMHgwMDAwMDAwOCwgMHgyMjAwMDAwMSwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwgMHgwMDAwMDAwMCwgMHgyYWRmMDAwMCwKLQkweDAwMDAwMDA4LCAweDJhMDAwMDAzLCAweDAwMDAwMDE4LCAweDgwMDBmZjgzLCAweDAwMDAwMDEwLCAweGIxYTBiMDFkLAotCTB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsIDB4MDAwMDAwMDAsIDB4MmMyMDAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwYjAsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDAwOCwgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwgMHgwMDAwMDAwOCwgMHgyZDgwMDE1MCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDIwNWYwMDAwLCAweDAwMDAwMDA4LCAweDJjODAwMDAwLAotCTB4MDAwMDAwMDgsIDB4MmQwMDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAxMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwZiwgMHg0NzYwMDAwOCwgMHgwMDAwMDAwMCwgMHgwNjBlMDAwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDAwLCAweDBmNTgwMDAwLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGE2NDAwMDAsIDB4MDAwMDAwMDAsIDB4MGFlNTAwMDAsIDB4MDAwMDAwMDAsIDB4MGI2NzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwZDYyMDAwMCwgMHgwMDAwMDAwMCwgMHgwY2U3MTgwMCwgMHgwMDAwMDAwOSwgMHgwYzk5ZmZmZiwKLQkweDAwMDAwMDA0LCAweGNjOTkzNDAwLCAweDAwMDAwMDEwLCAweGIxOTYzMjIwLCAweDAwMDAwMDA4LCAweDBmODAwMDAwLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwMWUsIDB4MDAwMDAwMGYsIDB4NDc2MDAwMDgsIDB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsCi0JMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwgMHgwMDAwMDAwOCwgMHgyZDAwMDAwOCwgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwKLQkweDAwMDAwMDA4LCAweDJkODAwMTJjLCAweDAwMDAwMDBmLCAweDA2MGUwMDAxLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGY1ODAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMDAsIDB4MGE2NDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYWU1MDAwMCwgMHgwMDAwMDAwMCwgMHgwYjY3MDAwMCwgMHgwMDAwMDAwMCwgMHgwZDYyMDAwMCwKLQkweDAwMDAwMDAwLCAweDAyNjMwMDAwLCAweDAwMDAwMDBmLCAweDQ3NjIwMDEwLCAweDAwMDAwMDAwLCAweDBjZTcxODAwLAotCTB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsIDB4MDAwMDAwMDAsIDB4MzExYTAwMDAsIDB4MDAwMDAwMDAsIDB4MzE4NDAwMDAsCi0JMHgwMDAwMDAwYiwgMHhjMjAwMDBmZiwgMHgwMDAwMDAwMiwgMHg0MjA0MDAwMCwgMHgwMDAwMDAwMSwgMHgzMTYyMDgwMCwKLQkweDAwMDAwMDBmLCAweDAyMGUwMDEwLCAweDAwMDAwMDAyLCAweDMxNjIwODAwLCAweDAwMDAwMDA5LCAweDBjOTlmZmZmLAotCTB4MDAwMDAwMDQsIDB4Y2M5OTM0MDAsIDB4MDAwMDAwMTAsIDB4YjE5NjMyMDIsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwgMHgwMDAwMDAwYywgMHg2MTQyMDAwNiwKLQkweDAwMDAwMDA4LCAweDIyMDAwMDA4LCAweDAwMDAwMDAwLCAweDJhZGYwMDAwLCAweDAwMDAwMDA4LCAweDJhMDAwMDA0LAotCTB4MDAwMDAwMTgsIDB4ODAwMGZmNDIsIDB4MDAwMDAwMDgsIDB4MmM4MDAwYjAsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMDgsCi0JMHgwMDAwMDAxMCwgMHg5MWEwYjAwOCwgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwgMHgwMDAwMDAwYywgMHgzMTYyMDAxOCwKLQkweDAwMDAwMDA4LCAweDJkODAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLAotCTB4MDAwMDAwMDgsIDB4YWMwMDAwMDEsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMGUsIDB4MDAwMDAwMDAsIDB4MDM4MGIwMDAsCi0JMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgyYzAwNDAwMCwgMHgwMDAwMDAxMCwgMHg5MWQ0MDAwMCwKLQkweDAwMDAwMDA4LCAweDJkODAwMTAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDkxZGUwMDAwLAotCTB4MDAwMDAwMGMsIDB4MzE2MjAwMTgsIDB4MDAwMDAwMDgsIDB4MmQ4MDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwYiwgMHgyZmRmMDAwMiwgMHgwMDAwMDAwMCwgMHgyYzAwMGUwMCwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDBjLCAweDFmODAwMDAxLCAweDAwMDAwMDA4LCAweDJhMDAwMDA3LAotCTB4MDAwMDAwMTgsIDB4ODAwMGZmMjcsIDB4MDAwMDAwMTAsIDB4YjFhMGIwMTYsIDB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsCi0JMHgwMDAwMDAwMCwgMHgwM2Q4MDAwMCwgMHgwMDAwMDAwMCwgMHgyYzIwMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDA4LCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTUwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1ZjAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwMDAsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDAwMCwgMHgwMDAwMDAwOCwgMHgyZDgwMDEwOCwgMHgwMDAwMDAwOCwgMHgwNzAwMDAwMSwKLQkweDAwMDAwMDEwLCAweGI1ZGUxYzAwLCAweDAwMDAwMDEwLCAweDJjNjIwMDAyLCAweDAwMDAwMDE4LCAweDgwMDAwMDBhLAotCTB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsIDB4MDAwMDAwMDAsIDB4MmMwNzAwMDAsIDB4MDAwMDAwMGMsIDB4MWY4MDAwMDEsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmYxMSwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwKLQkweDAwMDAwMDA4LCAweDJkMDAwMDA4LCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTA4LAotCTB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsIDB4MDAwMDAwMGMsIDB4MWY4MDAwMDEsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyYWRmMDAwMCwgMHgwMDAwMDAwOCwgMHgyYTAwMDAwYSwgMHgwMDAwMDAxOCwgMHg4MDAwZmYwNywKLQkweDAwMDAwMDAwLCAweDgyMjY1NjAwLCAweDAwMDAwMDBmLCAweDQ3MjIwMDA4LCAweDAwMDAwMDA5LCAweDA3MGUwMDBmLAotCTB4MDAwMDAwMDgsIDB4MDcwZTAwMDgsIDB4MDAwMDAwMDgsIDB4MDI4MDAwMDEsIDB4MDAwMDAwMDcsIDB4MDI4NTFjMDAsCi0JMHgwMDAwMDAwOCwgMHg4Mjg1MDAwMSwgMHgwMDAwMDAwMCwgMHgwMjg0MGEwMCwgMHgwMDAwMDAwNywgMHg0Mjg1MWMwMCwKLQkweDAwMDAwMDAzLCAweGMzYWE1MjAwLCAweDAwMDAwMDAwLCAweDAzYjEwZTAwLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLAotCTB4MDAwMDAwMGYsIDB4MGYyODAwMDcsIDB4MDAwMDAwMDcsIDB4NGIwNzFjMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwZiwgMHgwYTk2MDAwMywgMHgwMDAwMDAwMCwgMHgwYTk1NWMwMCwgMHgwMDAwMDAwMCwgMHg0YTAwNWEwMCwKLQkweDAwMDAwMDAwLCAweDBjOTYwYTAwLCAweDAwMDAwMDA5LCAweDBjOTlmZmZmLCAweDAwMDAwMDA4LCAweDBkMDBmZmZmLAotCTB4MDAwMDAwMTAsIDB4YjE5NjMyMDIsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDUsIDB4MDAwMDAwMTAsIDB4MDAyMjAwMjAsCi0JMHgwMDAwMDAwMCwgMHgwMmE3MDAwMCwgMHgwMDAwMDAxMCwgMHhiMTg1MDAwMiwgMHgwMDAwMDAwOCwgMHg4Mjg1MDIwMCwKLQkweDAwMDAwMDAwLCAweDAyMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzYTYwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDRlLAotCTB4MDAwMDAwMDAsIDB4MDcyYjAwMDAsIDB4MDAwMDAwMDEsIDB4ODc4YzFjMDAsIDB4MDAwMDAwMDAsIDB4ODcwZTFlMDAsCi0JMHgwMDAwMDAwMCwgMHg4NjBjMWUwMCwgMHgwMDAwMDAwMCwgMHgwMzA2MWUwMCwgMHgwMDAwMDAxMCwgMHhiMThlMDAwMywKLQkweDAwMDAwMDE4LCAweDgwMDAwMDQ3LCAweDAwMDAwMDE4LCAweDgwMDBmZmZhLCAweDAwMDAwMDEwLCAweDkxOGMwMDAzLAotCTB4MDAwMDAwMTAsIDB4YjE4NzAwMDIsIDB4MDAwMDAwMTgsIDB4ODAwMDAwNDMsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAwMCwgMHgyYTg2MDAwMCwgMHgwMDAwMDAwMCwgMHgyMzBjMDAwMCwKLQkweDAwMDAwMDAwLCAweDJiMDcwMDAwLCAweDAwMDAwMDEwLCAweGIxODcwMDBlLCAweDAwMDAwMDA4LCAweDJhMDAwMDA4LAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwM2IsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsIDB4MDAwMDAwMDAsIDB4MjhkMThjMDAsCi0JMHgwMDAwMDAwMCwgMHgyYTg2MDAwMCwgMHgwMDAwMDAwMCwgMHgyMzBjMDAwMCwgMHgwMDAwMDAwMCwgMHgyYjA3MDAwMCwKLQkweDAwMDAwMDE4LCAweDgwMDBmZmY4LCAweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLAotCTB4MDAwMDAwMDAsIDB4MmFhYjAwMDAsIDB4MDAwMDAwMDAsIDB4YTMyNjU2MDAsIDB4MDAwMDAwMDAsIDB4MmIwMDAwMDAsCi0JMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwgMHgwMDAwMDAwOCwgMHgyYTAwMDAwOCwgMHgwMDAwMDAxOCwgMHg4MDAwZmVjOCwKLQkweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDBjLCAweDFmODAwMDAxLAotCTB4MDAwMDAwMDgsIDB4MmEwMDAwMDksIDB4MDAwMDAwMTgsIDB4ODAwMGZlYzMsIDB4MDAwMDAwMTAsIDB4OTFkNDAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAwYywgMHgxZjgwMDAwMSwgMHgwMDAwMDAwMCwgMHgyOTQyMDAwMCwKLQkweDAwMDAwMDA4LCAweDJhMDAwMDAyLCAweDAwMDAwMDE4LCAweDgwMDBmZWJkLCAweDAwMDAwMDE4LCAweDgwMDBmZWJjLAotCTB4MDAwMDAwMTAsIDB4YjFiY2IwMTYsIDB4MDAwMDAwMGIsIDB4MmZkZjAwMDIsIDB4MDAwMDAwMDAsIDB4MDNkODAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyYzNjMDAwMCwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwgMHgwMDAwMDAwOCwgMHgyZDAwMDAwOCwKLQkweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MjA1ZjAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwMDAsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMDAsCi0JMHgwMDAwMDAwOCwgMHgyZDgwMDEwOCwgMHgwMDAwMDAwOCwgMHgwNzAwMDAwMSwgMHgwMDAwMDAxMCwgMHhiNWRlMWMwMCwKLQkweDAwMDAwMDEwLCAweDJjNjIwMDAyLCAweDAwMDAwMDE4LCAweDgwMDAwMDBhLCAweDAwMDAwMDBiLCAweDJmZGYwMDAyLAotCTB4MDAwMDAwMDAsIDB4MmMwNzAwMDAsIDB4MDAwMDAwMGMsIDB4MWY4MDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwZmVhNiwgMHgwMDAwMDAwOCwgMHgyYzgwMDBiMCwgMHgwMDAwMDAwOCwgMHgyZDAwMDAwOCwKLQkweDAwMDAwMDEwLCAweDkxZDQwMDAwLCAweDAwMDAwMDA4LCAweDJkODAwMTA4LCAweDAwMDAwMDBjLCAweDI5ODAwMDAwLAotCTB4MDAwMDAwMGMsIDB4MWY4MDAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMDAsIDB4MmFkZjAwMDAsCi0JMHgwMDAwMDAwOCwgMHgyYTAwMDAwNiwgMHgwMDAwMDAxOCwgMHg4MDAwZmU5YywgMHgwMDAwMDAwOCwgMHgwMzA1MDAwNCwKLQkweDAwMDAwMDA2LCAweDgzMDQwYzAwLCAweDAwMDAwMDA4LCAweDAyODUwMjAwLCAweDAwMDAwMDAwLCAweDg2MDUwYzAwLAotCTB4MDAwMDAwMDEsIDB4ODYwYzBlMDAsIDB4MDAwMDAwMDgsIDB4MDIwNDAwMDQsIDB4MDAwMDAwMDAsIDB4MDIwNDE4MDAsCi0JMHgwMDAwMDAwMCwgMHg4Mzg3MTgwMCwgMHgwMDAwMDAxOCwgMHgwMDAyMDAwMCB9Oworc3RhdGljIHU4IGJueDJfcnYycF9wcm9jMVtdID0geworCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4NWUsIDB4ZDAsIDB4NDEsIDB4NDQsIDB4MDAsIDB4MDMsIDB4NzQsIDB4NjUsCisJMHg3MywgMHg3NCwgMHgzMSwgMHgyZSwgMHg2MiwgMHg2OSwgMHg2ZSwgMHgwMCwgMHhjNSwgMHg1NiwgMHhjZiwgMHg2YiwKKwkweDEzLCAweDUxLCAweDEwLCAweDllLCAweGVjLCAweDZlLCAweGIyLCAweGRiLCAweDc0LCAweGJiLCAweDFiLCAweDJiLAorCTB4ZGEsIDB4YTAsIDB4YjEsIDB4OGQsIDB4NTEsIDB4NmEsIDB4N2YsIDB4YTQsIDB4YjQsIDB4MTEsIDB4MGYsIDB4ODIsCisJMHg0MiwgMHgyNSwgMHgzZCwgMHgwNCwgMHg1NCwgMHg0NCwgMHg3YSwgMHgyOCwgMHgyMiwgMHg4MiwgMHgzNiwgMHg4YSwKKwkweGZlLCAweDFiLCAweGExLCAweDNmLCAweGQyLCAweDRiLCAweDEwLCAweDdhLCAweGIwLCAweDU4LCAweGYxLCAweDUwLAorCTB4MTAsIDB4MmEsIDB4NjgsIDB4MGYsIDB4YzksIDB4YTEsIDB4MjAsIDB4NTIsIDB4MTEsIDB4ZGEsIDB4OGIsIDB4MDcsCisJMHgyZiwgMHg0MiwgMHgwZiwgMHg3YSwgMHg2OSwgMHhiZCwgMHhhOCwgMHhmZiwgMHg4MiwgMHgwOCwgMHg0ZCwgMHg3YywKKwkweDZmLCAweDY2LCAweDllLCAweGVlLCAweDZlLCAweGIyLCAweDRkLCAweDE1LCAweGMxLCAweDg1LCAweGY2LCAweGUzLAorCTB4YmQsIDB4OWQsIDB4NzksIDB4MzMsIDB4ZjMsIDB4Y2QsIDB4MzcsIDB4ZmIsIDB4NjIsIDB4MDEsIDB4NDAsIDB4MDQsCisJMHg2MCwgMHhjZCwgMHg0NiwgMHgyYywgMHg4ZCwgMHgyNiwgMHgwNCwgMHgxYSwgMHgzMCwgMHg3ZSwgMHg1MiwgMHg2MiwKKwkweDE2LCAweGRlLCAweGE2LCAweDI1LCAweDRlLCAweDQ0LCAweGM2LCAweGQzLCAweDQ5LCAweDgxLCAweDdiLCAweDBkLAorCTB4MjgsIDB4YzksIDB4NzUsIDB4NGYsIDB4ZjUsIDB4NTUsIDB4YWQsIDB4NTMsIDB4YTAsIDB4MDYsIDB4YmIsIDB4YTMsCisJMHg4MCwgMHhjZiwgMHg0NywgMHg5ZCwgMHhmMCwgMHg3YywgMHhkNiwgMHg0MiwgMHgyYywgMHgzMSwgMHhjMiwgMHg0OCwKKwkweDAyLCAweDYxLCAweDdiLCAweDUxLCAweGFlLCAweGFkLCAweDQ4LCAweDY5LCAweGM0LCAweDQyLCAweDNmLCAweGQwLAorCTB4NjgsIDB4N2YsIDB4NjcsIDB4ZDEsIDB4MTUsIDB4ZmYsIDB4NTMsIDB4ZjAsIDB4MzksIDB4MmYsIDB4ZDcsIDB4NTYsCisJMHg3YywgMHgwZSwgMHhlZCwgMHhhYSwgMHhlYywgMHgyZiwgMHhmZSwgMHhkMCwgMHhmZSwgMHhiYSwgMHhmMCwgMHgwMywKKwkweDdlLCAweDk0LCAweDVmLCAweDAyLCAweGNmLCAweDI5LCAweDY2LCAweDY1LCAweDVlLCAweGRkLCAweDIyLCAweGEwLAorCTB4Y2EsIDB4YzcsIDB4NDYsIDB4MmMsIDB4ZjUsIDB4OTEsIDB4YjUsIDB4ODksIDB4ZWYsIDB4YmYsIDB4OGEsIDB4YmMsCisJMHg1NSwgMHhkYywgMHg3NiwgMHhmMSwgMHg4MiwgMHhmOSwgMHgwNiwgMHhlMywgMHgyNiwgMHg5MSwgMHgxZiwgMHgyOCwKKwkweGY5LCAweGUzLCAweDAwLCAweGM4LCAweGZkLCAweDRmLCAweDhkLCAweDVmLCAweGZiLCAweDgzLCAweGZlLCAweGY3LAorCTB4YmIsIDB4NDMsIDB4ZjIsIDB4YmMsIDB4MjgsIDB4YzAsIDB4OTAsIDB4YjQsIDB4ZGIsIDB4ZTYsIDB4N2MsIDB4YzYsCisJMHhlMCwgMHhiNCwgMHg5NiwgMHhjNCwgMHhmNywgMHgwNiwgMHhmYSwgMHgxZiwgMHgxMSwgMHhlNywgMHg0YSwgMHhlYywKKwkweDYxLCAweDNjLCAweGNlLCAweDc4LCAweDk1LCAweGIxLCAweGMyLCAweGU4LCAweDMyLCAweDNhLCAweDhjLCAweDVkLAorCTB4OGMsIDB4MzYsIDB4ZTMsIDB4MjYsIDB4NjMsIDB4OWMsIDB4YjEsIDB4ODMsIDB4ZDEsIDB4NjIsIDB4ZGMsIDB4NjMsCisJMHg4YywgMHgzMSwgMHg0NiwgMHgxOSwgMHgxYiwgMHg4YywgMHg0NiwgMHg4NCwgMHg1MCwgMHhlMywgMHhmNSwgMHg2MywKKwkweDQ2LCAweGUwLCAweGJhLCAweDIzLCAweDgxLCAweGJhLCAweDVmLCAweGIzLCAweDJlLCAweDI0LCAweDZmLCAweGZjLAorCTB4N2UsIDB4NTAsIDB4ZDksIDB4MzEsIDB4ZWYsIDB4NTgsIDB4ZjcsIDB4M2EsIDB4ZGIsIDB4NzUsIDB4NTcsIDB4NTcsCisJMHgwMiwgMHhmYSwgMHg0OSwgMHhlZiwgMHhhYiwgMHg5YiwgMHg1NCwgMHg4YiwgMHgzZSwgMHhiOCwgMHg1OCwgMHhjZiwKKwkweDlkLCAweDgyLCAweDhiLCAweDcxLCAweDljLCAweDE4LCAweGVkLCAweGFiLCAweGI0LCAweDZlLCAweGI4LCAweDg0LAorCTB4ZjcsIDB4ZTIsIDB4ODQsIDB4NWYsIDB4MTgsIDB4ZWYsIDB4NzcsIDB4MTIsIDB4NGUsIDB4NzcsIDB4YzksIDB4N2MsCisJMHgwZSwgMHg4YiwgMHg4MCwgMHhlYSwgMHgxYywgMHg5NSwgMHg0ZiwgMHhiYiwgMHgzYywgMHhjMiwgMHhlMiwgMHhhOSwKKwkweGJjLCAweGRhLCAweGM1LCAweDI1LCAweDJjLCAweDZhLCAweGZlLCAweGZhLCAweDlmLCAweDhjLCAweDExLCAweDFhLAorCTB4MzksIDB4MjIsIDB4NzUsIDB4YzksIDB4MTYsIDB4M2QsIDB4ODMsIDB4NDYsIDB4NjMsIDB4ZDksIDB4MzYsIDB4ZTQsCisJMHhmYSwgMHhkYywgMHhmMiwgMHg3YiwgMHhkNCwgMHhmYiwgMHhkOSwgMHhhNSwgMHgxYSwgMHhlNywgMHhlNywgMHgyYSwKKwkweDllLCAweDY5LCAweDBlLCAweDMyLCAweDQwLCAweGViLCAweDQ5LCAweGU0LCAweDFkLCAweDA0LCAweDVhLCAweGI4LAorCTB4ODYsIDB4OGMsIDB4YmYsIDB4NWYsIDB4YTQsIDB4NDMsIDB4OWQsIDB4ZmIsIDB4MzEsIDB4Y2IsIDB4ZmQsIDB4MzgsCisJMHgxMSwgMHhkMiwgMHg4ZiwgMHhiMCwgMHhiOSwgMHg2OCwgMHg5ZSwgMHhjNywgMHhkYiwgMHhlOSwgMHgyMCwgMHg2ZiwKKwkweDYxLCAweGYzLCAweGEzLCAweGY4LCAweGE2LCAweGRkLCAweDNmLCAweGU1LCAweGYxLCAweDAxLCAweGYzLCAweDU4LAorCTB4MjQsIDB4MWUsIDB4OTMsIDB4ZGYsIDB4NWEsIDB4ZjIsIDB4OTQsIDB4ZjYsIDB4ZjAsIDB4MjQsIDB4ZWIsIDB4ZWMsCisJMHgwZCwgMHhlOSwgMHg3MywgMHg1OCwgMHg3ZCwgMHhkOSwgMHhiZiwgMHhlZSwgMHg3MywgMHgyMCwgMHgzZiwgMHhiOCwKKwkweDhiLCAweGRmLCAweDliLCAweDA0LCAweDE0LCAweDBiLCAweDJhLCAweDVmLCAweDNmLCAweGNmLCAweGM3LCAweGE4LAorCTB4ZGYsIDB4MzAsIDB4OTcsIDB4OTMsIDB4ZmIsIDB4NjIsIDB4ZmUsIDB4MzYsIDB4MzUsIDB4NWMsIDB4MWIsIDB4ZjksCisJMHg4OCwgMHgwNCwgMHhhYiwgMHg5OCwgMHgyMywgMHg3ZiwgMHg0NywgMHhkMywgMHg3OCwgMHg3ZCwgMHg1MCwgMHg1ZCwKKwkweGE4LCAweGJlLCAweDRiLCAweDhjLCAweDQxLCAweDdlLCAweDlhLCAweGViLCAweGNjLCAweDUwLCAweDNjLCAweGQyLAorCTB4ODEsIDB4YzEsIDB4M2EsIDB4YzgsIDB4ZjMsIDB4ZjcsIDB4MjgsIDB4YzgsIDB4ODcsIDB4NTUsIDB4NWQsIDB4NTksCisJMHhmNCwgMHhjZSwgMHg3NSwgMHgxMiwgMHg4YSwgMHgzOSwgMHhkMiwgMHg1NSwgMHg3MywgMHg1ZiwgMHg1OSwgMHg2ZiwKKwkweDZiLCAweGVhLCAweGJiLCAweDg0LCAweGRiLCAweGQ1LCAweDkyLCAweGVlLCAweGFiLCAweGY3LCAweDEyLCAweDY0LAorCTB4YmQsIDB4M2MsIDB4NDcsIDB4NWEsIDB4ZTgsIDB4YTMsIDB4NWQsIDB4MWMsIDB4ZGYsIDB4NzksIDB4MGUsIDB4NjQsCisJMHg1YiwgMHg3ZCwgMHg2ZiwgMHg0YywgMHhhZSwgMHhlYiwgMHgwYywgMHhlYiwgMHhmYiwgMHg2OCwgMHg5MywgMHhiZSwKKwkweGQ1LCAweDdkLCAweGY1LCAweGVmLCAweDc0LCAweGNlLCAweGY1LCAweDliLCAweDY4LCAweDk3LCAweGRhLCAweDU5LAorCTB4ZjcsIDB4ZGUsIDB4NGYsIDB4NzEsIDB4Y2YsIDB4ZmQsIDB4NDQsIDB4NmUsIDB4YTYsIDB4Y2EsIDB4YmIsIDB4Y2YsCisJMHg3YiwgMHhhZiwgMHgxYywgMHgwYSwgMHhlOSwgMHg4MywgMHhmNywgMHgzZSwgMHgwYSwgMHhkNiwgMHhlYiwgMHhkNywKKwkweDIzLCAweGY1LCAweDM1LCAweGNlLCAweGY1LCAweDliLCAweDBkLCAweGVlLCAweGMzLCAweDU0LCAweGZmLCAweDBjLAorCTB4ZTksIDB4M2YsIDB4NTMsIDB4OTAsIDB4ZmEsIDB4NzEsIDB4YzEsIDB4MzEsIDB4ZTksIDB4N2MsIDB4NDIsIDB4NzEsCisJMHg4ZSwgMHg2NiwgMHg2MiwgMHhkZSwgMHhmMywgMHgxYSwgMHhhZCwgMHhlNywgMHg2NywgMHhkMCwgMHgyZiwgMHgzZSwKKwkweGE3LCAweGY2LCAweGYzLCAweDQ4LCAweGQ4LCAweGU0LCAweDhiLCAweDJkLCAweGUyLCAweGJkLCAweGE2LCAweGFiLAorCTB4YjksIDB4NzAsIDB4OTEsIDB4ZWYsIDB4MDEsIDB4OTcsIDB4ZWMsIDB4Y2MsIDB4MmIsIDB4OGEsIDB4MmYsIDB4YjksCisJMHhhZiwgMHhjMywgMHgxMiwgMHhjZCwgMHhjNSwgMHhhZCwgMHg0NywgMHg4NCwgMHgzNywgMHhlMSwgMHgzMiwgMHg5ZCwKKwkweGZiLCAweGZiLCAweGZiLCAweDY2LCAweDIxLCAweDQyLCAweDk3LCAweDU3LCAweGM3LCAweDUxLCAweGExLCAweDYzLAorCTB4OWMsIDB4NjMsIDB4MjUsIDB4NTcsIDB4NzgsIDB4YWUsIDB4MTEsIDB4OWYsIDB4ZjMsIDB4YTQsIDB4NzMsIDB4OGQsCisJMHhmMywgMHhjMywgMHhhYiwgMHg0NSwgMHgzZSwgMHhhYiwgMHhiYSwgMHhhYywgMHhmNywgMHg5YSwgMHhkMiwgMHgxZCwKKwkweDBjLCAweDliLCAweDM4LCAweDNmLCAweGE5LCAweGNhLCAweDAyLCAweDJlLCAweDdiLCAweDFkLCAweDQ2LCAweGJiLAorCTB4NGMsIDB4MTgsIDB4YzMsIDB4ZmMsIDB4NzUsIDB4NzgsIDB4NTgsIDB4OTMsIDB4N2UsIDB4MDUsIDB4YmUsIDB4ZGYsCisJMHg3ZSwgMHhiMCwgMHg1ZSwgMHg3NCwgMHhhOCwgMHhmMCwgMHhlZiwgMHg4YiwgMHgwNSwgMHg3YywgMHgzZiwgMHgwMSwKKwkweGNkLCAweGY3LCAweDFiLCAweGM1LCAweDI5LCAweDBmLCAweDExLCAweGRhLCAweGE3LCAweGI4LCAweGFmLCAweGMzLAorCTB4ZDIsIDB4Y2UsIDB4MTEsIDB4N2UsIDB4ZGMsIDB4M2YsIDB4ZWMsIDB4YzMsIDB4MDUsIDB4OGYsIDB4M2YsIDB4NDIsCisJMHhlNSwgMHhjMywgMHg0MCwgMHg5OCwgMHhiZiwgMHhiNCwgMHhmZiwgMHhkZSwgMHhlMiwgMHgzZSwgMHhhNSwgMHhmNywKKwkweDJmLCAweGM5LCAweDdlLCAweGFhLCAweGZmLCAweDE5LCAweGQ3LCAweDNmLCAweGVjLCAweGQ1LCAweGJkLCAweDhhLAorCTB4ZjcsIDB4YWUsIDB4YmUsIDB4ZmYsIDB4N2QsIDB4ZGMsIDB4YzEsIDB4NzYsIDB4NWIsIDB4ZmIsIDB4ZDgsIDB4ZDEsCisJMHhmMSwgMHhmOSwgMHg0MSwgMHhlZiwgMHhmZCwgMHhmZCwgMHhhNiwgMHg0ZSwgMHgzYywgMHg2ZCwgMHhkNCwgMHhkNSwKKwkweDVjLCAweDZkLCAweDg0LCAweGNjLCAweGQ1LCAweGM1LCAweGZmLCAweDNhLCAweDU3LCAweDEwLCAweDk4LCAweGFiLAorCTB4ZDUsIDB4ZmEsIDB4YzEsIDB4ZTYsIDB4MGEsIDB4YjgsIDB4N2UsIDB4MDgsIDB4OTksIDB4YWIsIDB4MTgsIDB4ZjMsCisJMHhmMCwgMHg5NCwgMHhjZiwgMHgzMywgMHgyMCwgMHhhYSwgMHhjNywgMHhiMCwgMHg3ZCwgMHhjNiwgMHgyYywgMHhlYiwKKwkweDkyLCAweGY0LCAweDY4LCAweDQ3LCAweGNiLCAweGE4LCAweDNmLCAweGM3LCAweDJlLCAweDkzLCAweDlkLCAweDQxLAorCTB4ZmIsIDB4NDksIDB4ODUsIDB4MGIsIDB4YjMsIDB4ZjQsIDB4N2IsIDB4NGEsIDB4ODMsIDB4OWYsIDB4OTQsIDB4MTUsCisJMHgxMiwgMHgzZCwgMHg4MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCi1zdGF0aWMgdTMyIGJueDJfcnYycF9wcm9jMltdID0gewotCTB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsIDB4MDAwMDAwMTAsIDB4YjFkNDAwMDAsIDB4MDAwMDAwMDgsIDB4MDI1NDAwMDMsCi0JMHgwMDAwMDAxOCwgMHgwMDA0MDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwYSwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwYSwKLQkweDAwMDAwMDE4LCAweDgwMDAwMDBlLCAweDAwMDAwMDE4LCAweDgwMDAwMDU2LCAweDAwMDAwMDE4LCAweDgwMDAwMWI5LAotCTB4MDAwMDAwMTgsIDB4ODAwMDAxZTEsIDB4MDAwMDAwMTgsIDB4ODAwMDAxOWIsIDB4MDAwMDAwMTgsIDB4ODAwMDAxZjksCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDE5ZiwgMHgwMDAwMDAxOCwgMHg4MDAwMDFhNiwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwMCwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDAwLCAweDJhMDAwMDAwLCAweDAwMDAwMDBjLCAweDI5ODAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZmZWUsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDEsCi0JMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwMCwgMHgyZjgwYWEwMCwKLQkweDAwMDAwMDAwLCAweDJhMDAwMDAwLCAweDAwMDAwMDAwLCAweDBkNjEwMDAwLCAweDAwMDAwMDAwLCAweDAzNjIwMDAwLAotCTB4MDAwMDAwMDAsIDB4MmM0MDAwMDAsIDB4MDAwMDAwMDAsIDB4MDI2MzhjMDAsIDB4MDAwMDAwMDAsIDB4MjY0NjAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwMDQyMDAwMiwgMHgwMDAwMDAwOCwgMHgwMjA0MDAxMiwgMHgwMDAwMDAxMCwgMHhiOTA2MDgzNiwKLQkweDAwMDAwMDAwLCAweDBmNTgwMDAwLCAweDAwMDAwMDAwLCAweDBhNjQwMDAwLCAweDAwMDAwMDAwLCAweDBhZTUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGI2NjAwMDAsIDB4MDAwMDAwMDAsIDB4MGMwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MGI4MDAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwMDQyMDAwOSwgMHgwMDAwMDAwOCwgMHgwY2M2MDAxMiwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMywKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwOWYwMDAwLCAweDAwMDAwMDA4LCAweDI3MTEwMDEyLAotCTB4MDAwMDAwMDAsIDB4NjY5MDAwMDAsIDB4MDAwMDAwMDgsIDB4YTMxYjAwMTIsIDB4MDAwMDAwMTgsIDB4ODAwMDAwMDgsCi0JMHgwMDAwMDAwMCwgMHgwY2M2MDAwMCwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDEwLCAweDAwOWYwMDAwLCAweDAwMDAwMDAwLCAweDI3MTEwMDAwLCAweDAwMDAwMDAwLCAweDY2OTAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjMxYjAwMDAsIDB4MDAwMDAwMTAsIDB4YjE5NzMyMGUsIDB4MDAwMDAwMDAsIDB4MjU5NjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMjFiMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwMywKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAwLCAweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDAwLCAweDIyYzUwODAwLAotCTB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsIDB4MDAwMDAwMDAsIDB4MjcwMDIyMDAsIDB4MDAwMDAwMDAsIDB4MjY4MDIwMDAsCi0JMHgwMDAwMDAwMCwgMHgyMzFiMDAwMCwgMHgwMDAwMDAwYywgMHg2OTUyMDAwMSwgMHgwMDAwMDAxOCwgMHg4MDAwZmZmMywKLQkweDAwMDAwMDEwLCAweDAxMTMwMDAyLCAweDAwMDAwMDEwLCAweGIxOTgwMDAzLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLAotCTB4MDAwMDAwMDgsIDB4MGY4MDAwMDQsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDMsIDB4MDAwMDAwMDgsIDB4MmM4MDAwMGMsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDAwYywgMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwgMHgwMDAwMDAwMCwgMHgyNTk2MDAwMCwKLQkweDAwMDAwMDBjLCAweDI5ODAwMDAwLCAweDAwMDAwMDAwLCAweDMyMTQwMDAwLCAweDAwMDAwMDAwLCAweDMyOTUwMDAwLAotCTB4MDAwMDAwMDAsIDB4MzMxNjAwMDAsIDB4MDAwMDAwMDAsIDB4MzFlMzJlMDAsIDB4MDAwMDAwMDgsIDB4MmQ4MDAwMTAsCi0JMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmZhYywgMHgwMDAwMDAwMCwgMHgyMzAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDI1ZTYwMDAwLCAweDAwMDAwMDA4LCAweDIyMDAwMDBiLCAweDAwMDAwMDBjLCAweDY5NTIwMDAwLAotCTB4MDAwMDAwMGMsIDB4Mjk4MDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZmYTUsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwMCwgMHgyZmQ1MDAwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDAwLCAweDAyNzAwMDAwLCAweDAwMDAwMDAwLCAweDBkNjIwMDAwLAotCTB4MDAwMDAwMDAsIDB4YmI2MzA4MDAsIDB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsIDB4MDAwMDAwMDksIDB4MDc2MDAwZmYsCi0JMHgwMDAwMDAwZiwgMHgyYzBlMDAwNywgMHgwMDAwMDAwOCwgMHgyYzgwMDAwMCwgMHgwMDAwMDAwOCwgMHgyZDAwMDA2NCwKLQkweDAwMDAwMDA4LCAweDJkODAwMTFjLCAweDAwMDAwMDA5LCAweDA2NDIwMDAyLCAweDAwMDAwMDBjLCAweDYxNDIwMDAxLAotCTB4MDAwMDAwMDAsIDB4MGY0MDAwMDAsIDB4MDAwMDAwMDAsIDB4MDJkMDhjMDAsIDB4MDAwMDAwMDAsIDB4MjMwMDAwMDAsCi0JMHgwMDAwMDAwNCwgMHg4MjZkYTAwMCwgMHgwMDAwMDAwMCwgMHg4MzA0YTAwMCwgMHgwMDAwMDAwMCwgMHgyMmM1MGMwMCwKLQkweDAwMDAwMDAwLCAweDAzNzYwMDAwLCAweDAwMDAwMDA0LCAweDgzODYwYTAwLCAweDAwMDAwMDAwLCAweDgzODcwYzAwLAotCTB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMDAsIDB4MDM3YzAwMDAsIDB4MDAwMDAwMDAsIDB4ODM3YjBjMDAsCi0JMHgwMDAwMDAwMSwgMHg4MzA2MGUwMCwgMHgwMDAwMDAwMCwgMHg4Mzg3MGMwMCwgMHgwMDAwMDAwMCwgMHg4Mjg1MGUwMCwKLQkweDAwMDAwMDEwLCAweGIxODYwMDE2LCAweDAwMDAwMDBmLCAweDQ3NjEwMDE4LCAweDAwMDAwMDAwLCAweDA2OGUwMDAwLAotCTB4MDAwMDAwMGYsIDB4NDc2NzAwMTAsIDB4MDAwMDAwMGYsIDB4NDdlMjAwMTAsIDB4MDAwMDAwMDAsIDB4ODcwZTFlMDAsCi0JMHgwMDAwMDAxMCwgMHhiNzBlMWExMCwgMHgwMDAwMDAxMCwgMHgwY2U3MDAwZSwgMHgwMDAwMDAwOCwgMHgyMjAwMDAwOSwKLQkweDAwMDAwMDAwLCAweDI4NmQwMDAwLCAweDAwMDAwMDBmLCAweDY1NjgwMDEwLCAweDAwMDAwMDAzLCAweGY2NmM5NDAwLAotCTB4MDAwMDAwMTAsIDB4Yjk3MmEwMDMsIDB4MDAwMDAwMGMsIDB4NzNlNzAwMTksIDB4MDAwMDAwMGMsIDB4MjE0MjAwMDQsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDIzZiwgMHgwMDAwMDAwMCwgMHgzN2VkMDAwMCwgMHgwMDAwMDAwYywgMHg3M2U3MDAxYSwKLQkweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDA4LCAweDIyMDAwMDA4LCAweDAwMDAwMDBjLCAweDYxNDIwMDA0LAotCTB4MDAwMDAwMDAsIDB4MDJmNjAwMDAsIDB4MDAwMDAwMDQsIDB4ODI4NDBhMDAsIDB4MDAwMDAwMTAsIDB4YjE4NDBhMmIsCi0JMHgwMDAwMDAxMCwgMHgyZDY3MDAwYSwgMHgwMDAwMDAxMCwgMHhiOTZkMDgwNCwgMHgwMDAwMDAwNCwgMHhiNmVkMGEwMCwKLQkweDAwMDAwMDAwLCAweDM3ZWQwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDI5LCAweDAwMDAwMDBjLCAweDYxNDIwMDAwLAotCTB4MDAwMDAwMDAsIDB4MzcwNDAwMDAsIDB4MDAwMDAwMDAsIDB4Mzc4NTAwMDAsIDB4MDAwMDAwMGMsIDB4MzNlNzAwMWEsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAyNCwgMHgwMDAwMDAxMCwgMHhiOTZkMDgwOSwgMHgwMDAwMDAwNCwgMHhiNmVkMGEwMCwKLQkweDAwMDAwMDAwLCAweDAzNmQwMDAwLCAweDAwMDAwMDA0LCAweGI3NmUwYzAwLCAweDAwMDAwMDEwLCAweDkxZWUwYzFmLAotCTB4MDAwMDAwMGMsIDB4NzNlNzAwMWEsIDB4MDAwMDAwMDQsIDB4YjZlZjBjMDAsIDB4MDAwMDAwMDAsIDB4MzdlZDAwMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAxYiwgMHgwMDAwMDAwYywgMHg2MTQyMDAwMCwgMHgwMDAwMDAxMCwgMHhiN2VlMGEwNSwKLQkweDAwMDAwMDEwLCAweGI5NmYwODE1LCAweDAwMDAwMDAzLCAweGI3NmUwODAwLCAweDAwMDAwMDA0LCAweGI3ZWYwYTAwLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwMTUsIDB4MDAwMDAwMTAsIDB4MGNlNzAwMGMsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDksCi0JMHgwMDAwMDAwMCwgMHgyODZkMDAwMCwgMHgwMDAwMDAwZiwgMHg2NTY4MDAxMCwgMHgwMDAwMDAwMywgMHhmNjZjOTQwMCwKLQkweDAwMDAwMDEwLCAweGI5NzJhMDAzLCAweDAwMDAwMDBjLCAweDczZTcwMDE5LCAweDAwMDAwMDBjLCAweDIxNDIwMDA0LAotCTB4MDAwMDAwMTgsIDB4ODAwMDAyMTUsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDgsCi0JMHgwMDAwMDAwYywgMHg2MTQyMDAwNCwgMHgwMDAwMDAwMCwgMHgzNzA0MDAwMCwgMHgwMDAwMDAwMCwgMHgzNzg1MDAwMCwKLQkweDAwMDAwMDAwLCAweDAzNmQwMDAwLCAweDAwMDAwMDAzLCAweGI4ZjEwYzAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDA0LAotCTB4MDAwMDAwMDAsIDB4MDI4NDAwMDAsIDB4MDAwMDAwMDIsIDB4MjE0MjE4MDAsIDB4MDAwMDAwMGMsIDB4NjE0MjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyODZkMDAwMCwgMHgwMDAwMDAwZiwgMHg2NWVkMDAxMCwgMHgwMDAwMDAwOSwgMHgyNjZkZmZmZiwKLQkweDAwMDAwMDAwLCAweDIzMDAwMDAwLCAweDAwMDAwMDEwLCAweGIxODQwYTNkLCAweDAwMDAwMDEwLCAweDAxNDIwMDAyLAotCTB4MDAwMDAwMDQsIDB4YjhmMTBhMDAsIDB4MDAwMDAwMDMsIDB4ODM3NjBhMDAsIDB4MDAwMDAwMTAsIDB4YjgwNDBjMzksCi0JMHgwMDAwMDAxMCwgMHhiN2U2MDgwYSwgMHgwMDAwMDAwMCwgMHgwYTY0MDAwMCwgMHgwMDAwMDAwMCwgMHgwYWU1MDAwMCwKLQkweDAwMDAwMDA5LCAweDBjNjhmZmZmLCAweDAwMDAwMDA5LCAweDBiNjdmZmZmLCAweDAwMDAwMDAwLCAweDBiZTYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGM4NDAwMDAsIDB4MDAwMDAwMTAsIDB4YjE5NzMyMGMsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDIsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAwYSwgMHgwMDAwMDAwMCwgMHgwYTZhMDAwMCwgMHgwMDAwMDAwMCwgMHgwYWViMDAwMCwKLQkweDAwMDAwMDAwLCAweDBjMDAwMDAwLCAweDAwMDAwMDA5LCAweDBiNmNmZmZmLCAweDAwMDAwMDAwLCAweDBiZTkwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGM4NDAwMDAsIDB4MDAwMDAwMTAsIDB4YjE5NzMyMDMsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDIsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAwMSwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwMCwgMHgwYzg2MDAwMCwKLQkweDAwMDAwMDAwLCAweDA2OTgwMDAwLCAweDAwMDAwMDA4LCAweDBmODAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsIDB4MDAwMDAwMTAsIDB4YjE5NzMyMTAsIDB4MDAwMDAwMDAsIDB4MjMxYjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMjA0MzYwMCwgMHgwMDAwMDAwMywgMHg4Mzg0YTAwMCwgMHgwMDAwMDAwZiwgMHg2NTg3MDAxMCwKLQkweDAwMDAwMDA5LCAweDI2MDdmZmZmLCAweDAwMDAwMDAwLCAweDI3MTExYTAwLCAweDAwMDAwMDAwLCAweDY2OTAwMDAwLAotCTB4MDAwMDAwMGMsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAxZGUsIDB4MDAwMDAwMDAsIDB4MDY5ODAwMDAsCi0JMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAwMCwgMHgyMmM1OGMwMCwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwKLQkweDAwMDAwMDA4LCAweDBmODAwMDAzLCAweDAwMDAwMDE4LCAweDgwMDBmZmYwLCAweDAwMDAwMDAwLCAweDAyMDQzNjAwLAotCTB4MDAwMDAwMDAsIDB4MjMxYjAwMDAsIDB4MDAwMDAwMDMsIDB4ODM4NGEwMDAsIDB4MDAwMDAwMGYsIDB4NjU4NzAwMTAsCi0JMHgwMDAwMDAwOSwgMHgyNjA3ZmZmZiwgMHgwMDAwMDAwMCwgMHgyNzExMWEwMCwgMHgwMDAwMDAwMCwgMHg2NjkwMDAwMCwKLQkweDAwMDAwMDBjLCAweDI5MDAwMDAwLCAweDAwMDAwMDEwLCAweDkxODQwYTAyLCAweDAwMDAwMDAyLCAweDIxNDIxODAwLAotCTB4MDAwMDAwMDAsIDB4MzIxNDAwMDAsIDB4MDAwMDAwMDAsIDB4MzI5NTAwMDAsIDB4MDAwMDAwMDUsIDB4NzNlNzJjMDAsCi0JMHgwMDAwMDAwNSwgMHg3NDY4MzAwMCwgMHgwMDAwMDAwMCwgMHgzMzE3MDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDEzOCwKLQkweDAwMDAwMDEwLCAweDkxYzYwMDA0LCAweDAwMDAwMDA4LCAweDA3MDAwMDA0LCAweDAwMDAwMDEwLCAweGIxYzQxYzAyLAotCTB4MDAwMDAwMTAsIDB4OTE4NDBhMDQsIDB4MDAwMDAwMTgsIDB4ODAwMDAxYzMsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyMmM1OGMwMCwgMHgwMDAwMDAxMCwgMHhiMTg0MGE4ZSwgMHgwMDAwMDAwYywgMHgyMTQyMDAwNiwKLQkweDAwMDAwMDEwLCAweDBjZTcwMDFhLCAweDAwMDAwMDBmLCAweDQzNjgwMDEwLCAweDAwMDAwMDAwLCAweDAzZjMwYzAwLAotCTB4MDAwMDAwMTAsIDB4OTE4NzA4NTAsIDB4MDAwMDAwMGYsIDB4NDZlYzAwMTAsIDB4MDAwMDAwMTAsIDB4YjY4ZDBjNGUsCi0JMHgwMDAwMDAwMCwgMHg4MzhkMGMwMCwgMHgwMDAwMDAwMCwgMHhhMzA1MDgwMCwgMHgwMDAwMDAwMSwgMHhhMzQ2MGUwMCwKLQkweDAwMDAwMDAwLCAweDAyMDQ4YzAwLCAweDAwMDAwMDEwLCAweDkxODQwYTAyLCAweDAwMDAwMDAyLCAweDIxNDIxODAwLAotCTB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDgsIDB4MDAwMDAwMDMsIDB4ODM4NGEwMDAsCi0JMHgwMDAwMDAwZiwgMHg2NTg3MDAxMCwgMHgwMDAwMDAwOSwgMHgyNjA3ZmZmZiwgMHgwMDAwMDAwMCwgMHgyNzc1MGMwMCwKLQkweDAwMDAwMDAwLCAweDY2ZjQwMDAwLCAweDAwMDAwMDBjLCAweDI5MDAwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMWFhLAotCTB4MDAwMDAwMDAsIDB4MDMwNjhjMDAsIDB4MDAwMDAwMDMsIDB4ZjQ2ODBjMDAsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyMmM1OGMwMCwgMHgwMDAwMDAxOCwgMHg4MDAwZmZlNSwgMHgwMDAwMDAwMCwgMHgzOTc2MDAwMCwKLQkweDAwMDAwMDAwLCAweDM5ODQwMDAwLCAweDAwMDAwMDBjLCAweDMzZTcwMDE5LCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDMxZTAwMDAsIDB4MDAwMDAwMDAsIDB4MDc2MGZlMDAsIDB4MDAwMDAwMGYsIDB4MGYwZTAwMDcsCi0JMHgwMDAwMDAwMCwgMHg4Mzg1MDgwMCwgMHgwMDAwMDAwMCwgMHgwYTdkMDAwMCwgMHgwMDAwMDAwMCwgMHgwYWZlMDAwMCwKLQkweDAwMDAwMDAwLCAweDBiN2YwMDAwLCAweDAwMDAwMDAwLCAweDBkN2EwMDAwLCAweDAwMDAwMDAwLCAweDBjMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGJmYzAwMDAsIDB4MDAwMDAwMDAsIDB4MGM5NzBlMDAsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDMsCi0JMHgwMDAwMDAwZiwgMHg0NzY3MDAxMCwgMHgwMDAwMDAwOCwgMHgwNzBlMDAwMSwgMHgwMDAwMDAwYiwgMHhjMzgwMDBmZiwKLQkweDAwMDAwMDAyLCAweDQzODcwMDAwLCAweDAwMDAwMDAxLCAweDMzZTcwZTAwLCAweDAwMDAwMDBmLCAweDAzOGUwMDEwLAotCTB4MDAwMDAwMDIsIDB4MzNlNzBlMDAsIDB4MDAwMDAwMDAsIDB4MjhmMzAwMDAsIDB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMjA0MzYwMCwgMHgwMDAwMDAxMCwgMHg5MTg0MGEwMiwgMHgwMDAwMDAwMiwgMHgyMTQyMTgwMCwKLQkweDAwMDAwMDA4LCAweDIyMDAwMDA2LCAweDAwMDAwMDAwLCAweDIzMWIwMDAwLCAweDAwMDAwMDAwLCAweDIzZmYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjQxYjAwMDAsIDB4MDAwMDAwMDMsIDB4ODM4NGEwMDAsIDB4MDAwMDAwMGYsIDB4NjU4NzAwMTAsCi0JMHgwMDAwMDAwOSwgMHgyNjA3ZmZmZiwgMHgwMDAwMDAwMCwgMHgyNzExMDAwMCwgMHgwMDAwMDAwMCwgMHgyNjkwMDAwMCwKLQkweDAwMDAwMDBjLCAweDI5MDAwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMTdlLCAweDAwMDAwMDAzLCAweGY0NjgzNjAwLAotCTB4MDAwMDAwMDAsIDB4M2ExMDAwMDAsIDB4MDAwMDAwMDAsIDB4M2E5MTAwMDAsIDB4MDAwMDAwMDMsIDB4ZjY2YzI0MDAsCi0JMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAxMCwgMHhiMTkyMzYwNCwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwNCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwOWYwMDAwLCAweDAwMDAwMDAwLCAweDNlMTcwMDAwLAotCTB4MDAwMDAwMDAsIDB4M2U5NDAwMDAsIDB4MDAwMDAwMDAsIDB4M2YxNTAwMDAsIDB4MDAwMDAwMDAsIDB4M2Y5NjAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwMCwgMHgwZjA2MDAwMCwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwKLQkweDAwMDAwMDAwLCAweDIyYzUzNjAwLCAweDAwMDAwMDE4LCAweDgwMDBmZmFjLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDMxZTAwMDAsIDB4MDAwMDAwMDAsIDB4ODM4NTA4MDAsIDB4MDAwMDAwMDksIDB4MDc2MDAwZmYsCi0JMHgwMDAwMDAwZiwgMHgwZjBlMDAwNywgMHgwMDAwMDAwMCwgMHgwYzAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTdkMDAwMCwKLQkweDAwMDAwMDAwLCAweDBhZmUwMDAwLCAweDAwMDAwMDAwLCAweDBiN2YwMDAwLCAweDAwMDAwMDAwLCAweDBkN2EwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGJmYzAwMDAsIDB4MDAwMDAwMDAsIDB4MGM5NzBlMDAsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDMsCi0JMHgwMDAwMDAwZiwgMHg0NzY3MDAxMCwgMHgwMDAwMDAwOCwgMHgwNzBlMDAwMSwgMHgwMDAwMDAwYiwgMHhjMzgwMDBmZiwKLQkweDAwMDAwMDAyLCAweDQzODcwMDAwLCAweDAwMDAwMDAxLCAweDMzZTcwZTAwLCAweDAwMDAwMDBmLCAweDAzOGUwMDEwLAotCTB4MDAwMDAwMDIsIDB4MzNlNzBlMDAsIDB4MDAwMDAwMDAsIDB4Mzk4NDAwMDAsIDB4MDAwMDAwMDMsIDB4Yjk3MjA4MDAsCi0JMHgwMDAwMDAwMCwgMHgyOGYzMDAwMCwgMHgwMDAwMDAwZiwgMHg2NTY4MDAxMCwgMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwKLQkweDAwMDAwMDAwLCAweDAyMDQzNjAwLCAweDAwMDAwMDEwLCAweDkxODQwYTAyLCAweDAwMDAwMDAyLCAweDIxNDIxODAwLAotCTB4MDAwMDAwMDgsIDB4MjIwMDAwMDcsIDB4MDAwMDAwMDAsIDB4MjMxYjAwMDAsIDB4MDAwMDAwMDAsIDB4MjNmZjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyNDFiMDAwMCwgMHgwMDAwMDAwMywgMHg4Mzg0YTAwMCwgMHgwMDAwMDAwZiwgMHg2NTg3MDAxMCwKLQkweDAwMDAwMDA5LCAweDI2MDdmZmZmLCAweDAwMDAwMDAwLCAweDI3MTEwMDAwLCAweDAwMDAwMDAwLCAweDI2OTAwMDAwLAotCTB4MDAwMDAwMGMsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAxNDUsIDB4MDAwMDAwMDMsIDB4ZjQ2ODM2MDAsCi0JMHgwMDAwMDAwMCwgMHgzYTEwMDAwMCwgMHgwMDAwMDAwMCwgMHgzYTkxMDAwMCwgMHgwMDAwMDAwMywgMHhmNjZjMjQwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDEwLCAweGIxOTIzNjA0LCAweDAwMDAwMDA4LCAweDBmODAwMDA0LAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsIDB4MDAwMDAwMDAsIDB4M2UxNzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgzZTk0MDAwMCwgMHgwMDAwMDAwMCwgMHgzZjE1MDAwMCwgMHgwMDAwMDAwMCwgMHgzZjk2MDAwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDAwLCAweDBmMDYwMDAwLCAweDAwMDAwMDEwLCAweDIwNTMwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjJjNTM2MDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZmNzMsIDB4MDAwMDAwMTAsIDB4MGNlNzAwMDUsCi0JMHgwMDAwMDAwOCwgMHgyYzgwMDAwYywgMHgwMDAwMDAwOCwgMHgyZDAwMDA3MCwgMHgwMDAwMDAwOCwgMHgyZDgwMDAxMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDIwNWYwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMTFkLAotCTB4MDAwMDAwMDAsIDB4MmMxZTAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwYjgsIDB4MDAwMDAwMDgsIDB4MmQwMDAwMTAsCi0JMHgwMDAwMDAwOCwgMHgyZDgwMDA0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwKLQkweDAwMDAwMDE4LCAweDgwMDBmZTVkLCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLCAweDAwMDAwMDAwLCAweDJhMDAwMDAwLAotCTB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsIDB4MDAwMDAwMDAsIDB4MGYwMDgwMDAsIDB4MDAwMDAwMDgsIDB4MGY4MDAwMDcsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDAwNiwgMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAwMCwgMHgyYTAwMDAwMCwKLQkweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDBmLCAweDBmNDcwMDA3LCAweDAwMDAwMDA4LCAweDBmODAwMDA4LAotCTB4MDAwMDAwMTgsIDB4ODAwMDAxMTksIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZlNGYsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwgMHgwMDAwMDAwMCwgMHgyZmQ1MDAwMCwKLQkweDAwMDAwMDAwLCAweDJhMDAwMDAwLCAweDAwMDAwMDA5LCAweDAyNjFmZmZmLCAweDAwMDAwMDBkLCAweDcwZTEwMDAxLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAxMDEsIDB4MDAwMDAwMDAsIDB4MmM0MDAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwYzQsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDAxYywgMHgwMDAwMDAwOCwgMHgyZDgwMDAwMSwgMHgwMDAwMDAwNSwgMHg3MGUxMDgwMCwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDE4LCAweDgwMDBmZTQxLCAweDAwMDAwMDBjLCAweDI5ODAwMDAxLAotCTB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMDAsIDB4MmZkNTAwMDAsIDB4MDAwMDAwMTAsIDB4MDAxZjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMjcwMDAwMCwgMHgwMDAwMDAwMCwgMHgwZDYyMDAwMCwgMHgwMDAwMDAwMCwgMHhiYjYzMDgwMCwKLQkweDAwMDAwMDAwLCAweDJhMDAwMDAwLCAweDAwMDAwMDAwLCAweDBmNDAwMDAwLCAweDAwMDAwMDAwLCAweDJjNDAwMDAwLAotCTB4MDAwMDAwMGMsIDB4NzNlNzAwMWIsIDB4MDAwMDAwMTAsIDB4MGNlNzAwMGUsIDB4MDAwMDAwMDAsIDB4Mjg2ZDAwMDAsCi0JMHgwMDAwMDAwZiwgMHg2NWVkMDAxMCwgMHgwMDAwMDAwOSwgMHgyNjZkZmZmZiwgMHgwMDAwMDAxOCwgMHg4MDAwMDA2OSwKLQkweDAwMDAwMDA4LCAweDAyMDAwMDA0LCAweDAwMDAwMDEwLCAweDkxYzQwODAzLCAweDAwMDAwMDE4LCAweDgwMDAwMGY2LAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwZTUsIDB4MDAwMDAwMDgsIDB4MmM4MDAwYjgsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDAxMCwgMHgwMDAwMDAwOCwgMHgyZDgwMDA0OCwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwNSwKLQkweDAwMDAwMDA4LCAweDJjODAwMGM0LCAweDAwMDAwMDA4LCAweDJkMDAwMDFjLCAweDAwMDAwMDA4LCAweDJkODAwMDAxLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1ZjAwMDAsIDB4MDAwMDAwMDgsIDB4MmM4MDAwNDgsCi0JMHgwMDAwMDAwOCwgMHgyZDAwMDA2OCwgMHgwMDAwMDAwOCwgMHgyZDgwMDEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDEwLCAweDkxZGUwMDAwLCAweDAwMDAwMDAwLCAweDI3ZjYwMDAwLCAweDAwMDAwMDEwLCAweGI4N2E5ZTA0LAotCTB4MDAwMDAwMDgsIDB4MjIwMDAwMGQsIDB4MDAwMDAwMTgsIDB4ODAwMDAwZTIsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwZmUxOCwgMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAxMCwgMHg5MWRlMDAwMCwKLQkweDAwMDAwMDAwLCAweDJmZDUwMDAwLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDAwLCAweDAyNzAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MGQ2MjAwMDAsIDB4MDAwMDAwMDAsIDB4YmI2MzA4MDAsIDB4MDAwMDAwMDAsIDB4MmEwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwZTY3MDAxMSwgMHgwMDAwMDAwMCwgMHgyODZkMDAwMCwgMHgwMDAwMDAwZiwgMHg2NWVkMDAxMCwKLQkweDAwMDAwMDA5LCAweDI2NmRmZmZmLCAweDAwMDAwMDA0LCAweGI4ZjFhMDAwLCAweDAwMDAwMDAwLCAweDBmNDAwMDAwLAotCTB4MDAwMDAwMGMsIDB4NzNlNzAwMWMsIDB4MDAwMDAwMTgsIDB4ODAwMDAwNDAsIDB4MDAwMDAwMDgsIDB4MDIwMDAwMDQsCi0JMHgwMDAwMDAxMCwgMHg5MWM0MDgwMiwgMHgwMDAwMDAxOCwgMHg4MDAwMDBjZCwgMHgwMDAwMDAwMCwgMHgyYzFlMDAwMCwKLQkweDAwMDAwMDA4LCAweDJjODAwMGI4LCAweDAwMDAwMDA4LCAweDJkMDAwMDEwLCAweDAwMDAwMDA4LCAweDJkODAwMDQ4LAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMTAsIDB4OTFkZTAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZkZmUsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMzU1MDAwMCwgMHgwMDAwMDAwMCwgMHgwNjQ2MDAwMCwKLQkweDAwMDAwMDAwLCAweDAzZDYwMDAwLCAweDAwMDAwMDAwLCAweDJhMDAwMDAwLCAweDAwMDAwMDBmLCAweDBmNDgwMDA3LAotCTB4MDAwMDAwMTAsIDB4YjE4YzAwMjcsIDB4MDAwMDAwMGYsIDB4NDc0MjAwMDgsIDB4MDAwMDAwMDksIDB4MDcwZTAwMGYsCi0JMHgwMDAwMDAwOCwgMHgwNzBlMDAwOCwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwOCwgMHgwOTAwMDAwMSwKLQkweDAwMDAwMDA3LCAweDA5MTIxYzAwLCAweDAwMDAwMDAzLCAweGNiY2E5MjAwLCAweDAwMDAwMDAwLCAweDBiOTdhMjAwLAotCTB4MDAwMDAwMDcsIDB4NGIxNzFjMDAsIDB4MDAwMDAwMGYsIDB4MGE5NjAwMDMsIDB4MDAwMDAwMDAsIDB4MGE5NTljMDAsCi0JMHgwMDAwMDAwMCwgMHg0YTAwOWEwMCwgMHgwMDAwMDAwOCwgMHg4MjEyMDAwMSwgMHgwMDAwMDAwMSwgMHgwYzE3MDgwMCwKLQkweDAwMDAwMDAwLCAweDAyMTgwMDAwLCAweDAwMDAwMDAwLCAweDBjOTcxODAwLCAweDAwMDAwMDA4LCAweDBkMDBmZmZmLAotCTB4MDAwMDAwMDgsIDB4MGY4MDAwMDYsIDB4MDAwMDAwMGMsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDEsCi0JMHgwMDAwMDAwMCwgMHgyMmM1MGMwMCwgMHgwMDAwMDAxMCwgMHgwMDlmMDAwMCwgMHgwMDAwMDAxMCwgMHhiMTk3MzIwYiwKLQkweDAwMDAwMDAwLCAweDIzMWIwMDAwLCAweDAwMDAwMDAwLCAweDI3MTEwODAwLCAweDAwMDAwMDAwLCAweDY2OTAwMDAwLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwYTQsIDB4MDAwMDAwMDAsIDB4MDIxODAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyMmM1MzYwMCwgMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAwOCwgMHgwZjgwMDAwNiwKLQkweDAwMDAwMDE4LCAweDgwMDBmZmY1LCAweDAwMDAwMDEwLCAweDkxODcwMDAyLCAweDAwMDAwMDA4LCAweDIyMDAwMDBhLAotCTB4MDAwMDAwMDAsIDB4MjMxYjAwMDAsIDB4MDAwMDAwMDAsIDB4MjcxMTA4MDAsIDB4MDAwMDAwMDAsIDB4NjY5MDAwMDAsCi0JMHgwMDAwMDAxOCwgMHg4MDAwMDA5OCwgMHgwMDAwMDAwOCwgMHgwMjAwMDAwYSwgMHgwMDAwMDAxMCwgMHg5MWM0MDgwNCwKLQkweDAwMDAwMDEwLCAweDAyYzIwMDAzLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDA4LCAweDBmODAwMDA4LAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMGZkYzksIDB4MDAwMDAwMDAsIDB4MDY4MjAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwMDFmMDAwMCwgMHgwMDAwMDAxMCwgMHgwY2U3MDAyOCwgMHgwMDAwMDAwMCwgMHgwMzcyMDAwMCwKLQkweDAwMDAwMDAwLCAweGE4NzYwYzAwLCAweDAwMDAwMDAwLCAweDBjZjYwMDAwLCAweDAwMDAwMDEwLCAweGI4NzIzMjI0LAotCTB4MDAwMDAwMDAsIDB4MDM0NDAwMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMTAsIDB4MDAwMDAwMDAsIDB4MDNjYTAwMDAsCi0JMHgwMDAwMDAwZiwgMHg2NTY4MDAxMCwgMHgwMDAwMDAwMCwgMHgwYmNmMDAwMCwgMHgwMDAwMDAwMCwgMHgyN2YyMDAwMCwKLQkweDAwMDAwMDEwLCAweGI3ZWYzMjAzLCAweDAwMDAwMDBjLCAweDIxNDIwMDA0LCAweDAwMDAwMDBjLCAweDczZTcwMDE5LAotCTB4MDAwMDAwMDAsIDB4MDc1MjAwMDAsIDB4MDAwMDAwMDAsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMTgsIDB4ODAwMDAwN2UsCi0JMHgwMDAwMDAwNCwgMHhiOTcyMzIwMCwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAwMCwgMHgyMjA2MDAwMCwKLQkweDAwMDAwMDBjLCAweDYxNDIwMDA0LCAweDAwMDAwMDAwLCAweDI1MDcwMDAwLCAweDAwMDAwMDAwLCAweDI3OTcwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjkwZTAwMDAsIDB4MDAwMDAwMTAsIDB4MGNlNzAwMTAsIDB4MDAwMDAwMTAsIDB4Yjg3MzMyMGYsCi0JMHgwMDAwMDAwZiwgMHg0MzZjMDAxMCwgMHgwMDAwMDAwMCwgMHgwM2YzMGMwMCwgMHgwMDAwMDAwMCwgMHgwM2YzMDAwMCwKLQkweDAwMDAwMDAwLCAweDgzOTkwZTAwLCAweDAwMDAwMDAxLCAweDgzODYwZTAwLCAweDAwMDAwMDAwLCAweDgzMDYwZTAwLAotCTB4MDAwMDAwMDMsIDB4ZjY2YzBjMDAsIDB4MDAwMDAwMDAsIDB4MzlmMzBlMDAsIDB4MDAwMDAwMDAsIDB4M2FmNTBlMDAsCi0JMHgwMDAwMDAwMCwgMHg3YTc0MDAwMCwgMHgwMDAwMDAwZiwgMHg0MzY4MDAxMCwgMHgwMDAwMDAwMSwgMHg4Mzg2MGUwMCwKLQkweDAwMDAwMDAwLCAweDgzMDYwZTAwLCAweDAwMDAwMDAzLCAweGY0NjgwYzAwLCAweDAwMDAwMDAwLCAweDI4NmQwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDM2OTAwMDAsIDB4MDAwMDAwMTAsIDB4YjFmNjBjNTQsIDB4MDAwMDAwMDAsIDB4MGE2YTAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwYWViMDAwMCwgMHgwMDAwMDAwOSwgMHgwYjZjZmZmZiwgMHgwMDAwMDAwMCwgMHgwYzAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDBiZTkwMDAwLCAweDAwMDAwMDAzLCAweDhjZjZhMDAwLCAweDAwMDAwMDBjLCAweDA5ODAwMDAyLAotCTB4MDAwMDAwMTAsIDB4MDA5ZjAwMDAsIDB4MDAwMDAwMTAsIDB4YjgxNzMyMDksIDB4MDAwMDAwMDAsIDB4MzUxNDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgzNTk1MDAwMCwgMHgwMDAwMDAwNSwgMHg3NjZjMmMwMCwgMHgwMDAwMDAwMCwgMHgzNDk3MDAwMCwKLQkweDAwMDAwMDA0LCAweGI4ZjEyZTAwLCAweDAwMDAwMDEwLCAweDAwMWYwMDAwLCAweDAwMDAwMDA4LCAweDBmODAwMDA0LAotCTB4MDAwMDAwMTgsIDB4ODAwMGZmZjcsIDB4MDAwMDAwMDAsIDB4MDNlOTAwMDAsIDB4MDAwMDAwMTAsIDB4YjhmNmEwMWEsCi0JMHgwMDAwMDAxMCwgMHgyMDEzMDAxOSwgMHgwMDAwMDAxMCwgMHhiMWYxMGUxOCwgMHgwMDAwMDAwMCwgMHg4Mzk3MzIwMCwKLQkweDAwMDAwMDAwLCAweDM4NzAwZTAwLCAweDAwMDAwMDAwLCAweGJiNzYwZTAwLCAweDAwMDAwMDAwLCAweDM3ZDAwMDAwLAotCTB4MDAwMDAwMGMsIDB4NzNlNzAwMWEsIDB4MDAwMDAwMDMsIDB4YjhmMWEwMDAsIDB4MDAwMDAwMDAsIDB4MzIxNDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgzMjk1MDAwMCwgMHgwMDAwMDAwNSwgMHg3M2U3MmMwMCwgMHgwMDAwMDAwMCwgMHgzMzE5MDAwMCwKLQkweDAwMDAwMDA1LCAweDc0NjgwMDAwLCAweDAwMDAwMDEwLCAweDBjZTcwMDBkLCAweDAwMDAwMDA4LCAweDIyMDAwMDA5LAotCTB4MDAwMDAwMDAsIDB4MDc1MjAwMDAsIDB4MDAwMDAwMDAsIDB4MjkwMDAwMDAsIDB4MDAwMDAwMGMsIDB4NzNlNzAwMTksCi0JMHgwMDAwMDAwZiwgMHg2NTY4MDAxMCwgMHgwMDAwMDAwYywgMHgyMTQyMDAwNCwgMHgwMDAwMDAxOCwgMHg4MDAwMDAzYywKLQkweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDBjLCAweDYxNDIwMDA0LCAweDAwMDAwMDAwLCAweDI5MGUwMDAwLAotCTB4MDAwMDAwMTgsIDB4ODAwMDAwMDIsIDB4MDAwMDAwMTAsIDB4OTE5NzMyMDYsIDB4MDAwMDAwMDAsIDB4MzUxNDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgzNTk1MDAwMCwgMHgwMDAwMDAwNSwgMHg3NjZjMmMwMCwgMHgwMDAwMDAwMCwgMHgzNDk5MDAwMCwKLQkweDAwMDAwMDA0LCAweGI4ZjEzMjAwLCAweDAwMDAwMDAwLCAweDgzNjkwYzAwLCAweDAwMDAwMDEwLCAweGIxODYwMDEzLAotCTB4MDAwMDAwMDAsIDB4MjhlOTAwMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMDQsIDB4MDAwMDAwMDAsIDB4MjNlYzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMzY5MDAwMCwgMHgwMDAwMDAxMCwgMHhiODY2MGMwNywgMHgwMDAwMDAwOSwgMHgwMzZjZmZmZiwKLQkweDAwMDAwMDAwLCAweDMyNmEwMDAwLCAweDAwMDAwMDAwLCAweDMyZWIwMDAwLCAweDAwMDAwMDA1LCAweDczZTcwYzAwLAotCTB4MDAwMDAwMDAsIDB4MzM2OTAwMDAsIDB4MDAwMDAwMDUsIDB4NzQ2ODAwMDAsIDB4MDAwMDAwMGMsIDB4NzNlNzAwMWMsCi0JMHgwMDAwMDAwMCwgMHgwMzY5MDAwMCwgMHgwMDAwMDAxMCwgMHhiMWY2MGMxMiwgMHgwMDAwMDAxMCwgMHhiMWQwMGMxMSwKLQkweDAwMDAwMDBjLCAweDIxNDIwMDA1LCAweDAwMDAwMDBjLCAweDMzZTcwMDFjLCAweDAwMDAwMDE4LCAweDgwMDAwMDBlLAotCTB4MDAwMDAwMTAsIDB4MmU2NzAwMGQsIDB4MDAwMDAwMDAsIDB4MDM2OTAwMDAsIDB4MDAwMDAwMTAsIDB4YjFmNjBjMGIsCi0JMHgwMDAwMDAxMCwgMHhiMWQwMGMwYSwgMHgwMDAwMDAwMCwgMHgwMzQ0MDAwMCwgMHgwMDAwMDAwOCwgMHgyMjAwMDAwYywKLQkweDAwMDAwMDAwLCAweDA3NTIwMDAwLCAweDAwMDAwMDAwLCAweDI5MDAwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDE1LAotCTB4MDAwMDAwMGMsIDB4MzNlNzAwMWMsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMDAsIDB4MjIwNjAwMDAsCi0JMHgwMDAwMDAwMCwgMHgyOTBlMDAwMCwgMHgwMDAwMDAxOCwgMHgwMDBkMDAwMCwgMHgwMDAwMDAwMCwgMHgwNjgyMDAwMCwKLQkweDAwMDAwMDEwLCAweDJkZTcwMDBkLCAweDAwMDAwMDEwLCAweDBjZTcwMDBjLCAweDAwMDAwMDAwLCAweDI3ZjIwMDAwLAotCTB4MDAwMDAwMTAsIDB4Yjk2ZDllMGEsIDB4MDAwMDAwMDAsIDB4YTg2ZDllMDAsIDB4MDAwMDAwMDksIDB4MDM2MWZmZmYsCi0JMHgwMDAwMDAxMCwgMHhiNzUwMGMwNywgMHgwMDAwMDAwOCwgMHgyMjAwMDAwZiwgMHgwMDAwMDAwZiwgMHg2NTY4MDAxMCwKLQkweDAwMDAwMDAwLCAweDI5MDAwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDA0LCAweDAwMDAwMDBjLCAweDMzZTcwMDFiLAotCTB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsIDB4MDAwMDAwMTgsIDB4MDAwZDAwMDAsIDB4MDAwMDAwMDAsIDB4MmI4MjAwMDAsCi0JMHgwMDAwMDAxMCwgMHgyMGQyMDAyZiwgMHgwMDAwMDAxMCwgMHgwMDUyMDAyZSwgMHgwMDAwMDAwOSwgMHgwNTRlMDAwNywKLQkweDAwMDAwMDEwLCAweGIxOGEwMDJjLCAweDAwMDAwMDAwLCAweDA1MGE4YzAwLCAweDAwMDAwMDA4LCAweDg1MGEwMDA4LAotCTB4MDAwMDAwMTAsIDB4OTE4YTAwMjksIDB4MDAwMDAwMDMsIDB4YzUwMDg4MDAsIDB4MDAwMDAwMDgsIDB4YTM0NjAwMDEsCi0JMHgwMDAwMDAxMCwgMHhiMWM2MDAwNywgMHgwMDAwMDAwOCwgMHgyMjAwMDAwMSwgMHgwMDAwMDAwYywgMHgyOTgwMDAwMCwKLQkweDAwMDAwMDEwLCAweDIwNTMwMDAwLCAweDAwMDAwMDAwLCAweDI3NGU4YzAwLCAweDAwMDAwMDAwLCAweDY2Y2QwMDAwLAotCTB4MDAwMDAwMDAsIDB4MjJjNThjMDAsIDB4MDAwMDAwMDgsIDB4MjIwMDAwMTQsIDB4MDAwMDAwMDMsIDB4MjJjNThlMDAsCi0JMHgwMDAwMDAwMywgMHgyM2M1OGUwMCwgMHgwMDAwMDAwMywgMHgyMmM1OGUwMCwgMHgwMDAwMDAwMywgMHgyNmNkOWUwMCwKLQkweDAwMDAwMDAzLCAweDI3Y2Q5ZTAwLCAweDAwMDAwMDAzLCAweDI2Y2Q5ZTAwLCAweDAwMDAwMDAzLCAweDI3NGVhMDAwLAotCTB4MDAwMDAwMDMsIDB4Mjg0ZWEwMDAsIDB4MDAwMDAwMDMsIDB4Mjc0ZWEwMDAsIDB4MDAwMDAwMGMsIDB4Njk1MjAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTgwMDAwMCwgMHgwMDAwMDAxMCwgMHgyMDUzMDAwMCwgMHgwMDAwMDAwMywgMHgyMmM1OGUwMCwKLQkweDAwMDAwMDAzLCAweDIzYzU4ZTAwLCAweDAwMDAwMDAzLCAweDIyYzU4ZTAwLCAweDAwMDAwMDAzLCAweDI2Y2Q5ZTAwLAotCTB4MDAwMDAwMDMsIDB4MjdjZDllMDAsIDB4MDAwMDAwMDMsIDB4MjZjZDllMDAsIDB4MDAwMDAwMDMsIDB4Mjc0ZWEwMDAsCi0JMHgwMDAwMDAwMywgMHgyODRlYTAwMCwgMHgwMDAwMDAwMywgMHgyNzRlYTAwMCwgMHgwMDAwMDAwMCwgMHhhMmM1OGMwMCwKLQkweDAwMDAwMDAwLCAweGE3NGU4YzAwLCAweDAwMDAwMDAwLCAweGU2Y2QwMDAwLCAweDAwMDAwMDBmLCAweDYyMGEwMDEwLAotCTB4MDAwMDAwMDgsIDB4MjM0NjAwMDEsIDB4MDAwMDAwMGMsIDB4Mjk4MDAwMDAsIDB4MDAwMDAwMTAsIDB4MjA1MzAwMDAsCi0JMHgwMDAwMDAwYywgMHgyOTUyMDAwMCwgMHgwMDAwMDAxOCwgMHg4MDAwMDAwMiwgMHgwMDAwMDAwYywgMHgyOTgwMDAwMCwKLQkweDAwMDAwMDE4LCAweDAwNTcwMDAwIH07CitzdGF0aWMgdTggYm54Ml9ydjJwX3Byb2MyW10gPSB7CisJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHg3ZSwgMHhkMSwgMHg0MSwgMHg0NCwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGNkLCAweDU4LCAweDViLCAweDZjLAorCTB4NTQsIDB4NTUsIDB4MTQsIDB4M2QsIDB4ZjMsIDB4ZTgsIDB4Y2MsIDB4OWQsIDB4ZTksIDB4ZWQsIDB4OWQsIDB4ZjIsCisJMHhiMiwgMHgwMywgMHhhZCwgMHgwOCwgMHhlNSwgMHhkMSwgMHg1NiwgMHgyOSwgMHhlOCwgMHg1NCwgMHhhYiwgMHgxOCwKKwkweDE1LCAweDJjLCAweDVhLCAweDhjLCAweDI2LCAweDY4LCAweGYwLCAweGY5LCAweDYzLCAweDE0LCAweDA0LCAweGRhLAorCTB4OWEsIDB4NTYsIDB4OWIsIDB4MTYsIDB4ZmIsIDB4ODEsIDB4YWYsIDB4MDksIDB4MTQsIDB4NmEsIDB4NGMsIDB4MjUsCisJMHhkNiwgMHgwOCwgMHhjNSwgMHg0NywgMHhhMCwgMHgxMSwgMHgxZiwgMHg4NCwgMHhmMCwgMHhkMywgMHgxZiwgMHgzYiwKKwkweDhkLCAweDdmLCAweDBhLCAweDI0LCAweDZhLCAweDg4LCAweGM0LCAweGE4LCAweDlmLCAweDI0LCAweDY4LCAweGEwLAorCTB4MjEsIDB4MGEsIDB4NTgsIDB4OGIsIDB4NjMsIDB4NGMsIDB4YjQsIDB4ZjUsIDB4ZWMsIDB4YmQsIDB4ZjYsIDB4YjksCisJMHg3MywgMHhlZiwgMHg2ZCwgMHg4YiwgMHgxYSwgMHhmOSwgMHg3MCwgMHgzZSwgMHhiYSwgMHg3YiwgMHhjZSwgMHhkOSwKKwkweDY3LCAweDNmLCAweGQ2LCAweGRlLCAweDY3LCAweDlmLCAweDdkLCAweGFlLCAweDUyLCAweGZjLCAweGJiLCAweGI2LAorCTB4OTQsIDB4YzksIDB4MzcsIDB4ODMsIDB4OTYsIDB4ZmUsIDB4MWIsIDB4NTEsIDB4MGYsIDB4ODUsIDB4ZDMsIDB4M2MsCisJMHg4ZSwgMHgyYSwgMHhhMiwgMHg0OSwgMHhhNSwgMHhiMiwgMHg1ZSwgMHhlYSwgMHgwOCwgMHg3ZCwgMHg0NCwgMHhlOCwKKwkweDcwLCAweDA4LCAweGY0LCAweGI0LCAweGQwLCAweDc3LCAweDg0LCAweGZlLCAweDJlLCAweGY0LCAweDgwLCAweGQwLAorCTB4MGYsIDB4ODUsIDB4ZWEsIDB4NWYsIDB4ZDYsIDB4ZDYsIDB4N2YsIDB4ZjQsIDB4YjAsIDB4NDYsIDB4ODksIDB4N2UsCisJMHgxYiwgMHhkMywgMHgzNSwgMHhiMCwgMHhlMywgMHhjMSwgMHgwNSwgMHhjNCwgMHg3NywgMHg2MSwgMHhhMiwgMHhjMCwKKwkweDg3LCAweGY5LCAweDUzLCAweDdkLCAweGEwLCAweGQ3LCAweDYwLCAweGQ3LCAweGUxLCAweGVjLCAweDBhLCAweGIzLAorCTB4MWYsIDB4NjQsIDB4NDMsIDB4MDksIDB4ZTgsIDB4YzYsIDB4MDgsIDB4ZTgsIDB4ZWEsIDB4NjUsIDB4NGMsIDB4N2EsCisJMHg5ZiwgMHgwYSwgMHg2MywgMHhkYywgMHhiOCwgMHg5NCwgMHhmNiwgMHg4NywgMHg1NSwgMHg4MywgMHgyMiwgMHgzZiwKKwkweDY3LCAweGFhLCAweDY4LCAweDk4LCAweGM2LCAweGY1LCAweDU2LCAweDZjLCAweDE4LCAweGViLCAweDhmLCAweGE1LAorCTB4NDAsIDB4MzcsIDB4MjUsIDB4NDEsIDB4Y2YsIDB4MDgsIDB4ZGQsIDB4NTIsIDB4MmMsIDB4N2EsIDB4NmMsIDB4MzEsCisJMHhiZiwgMHg5OCwgMHhmNiwgMHgyNSwgMHg1YywgMHgzOSwgMHhjNywgMHg2ZCwgMHhlMCwgMHg5NiwgMHg5NSwgMHhmZCwKKwkweDRhLCAweGMxLCAweGNlLCAweDAzLCAweGIyLCAweDNlLCAweGEzLCAweDBhLCAweGIzLCAweGFmLCAweDZmLCAweGMxLAorCTB4YjgsIDB4ZmMsIDB4MjAsIDB4ZjksIDB4YTcsIDB4ZmYsIDB4Y2YsIDB4NjIsIDB4N2UsIDB4ZmEsIDB4ZmQsIDB4ZjgsCisJMHgxNSwgMHhmNiwgMHg4MywgMHg5NiwgMHgyZiwgMHhhMiwgMHg3NSwgMHgyNywgMHhkMywgMHgzZiwgMHg4OCwgMHhmMSwKKwkweGRlLCAweDI1LCAweDMyLCAweDFmLCAweDM2LCAweGY4LCAweDE4LCAweDc5LCAweDQxLCAweDVjLCAweDk5LCAweDU4LAorCTB4YzcsIDB4MmEsIDB4N2QsIDB4ZjIsIDB4MmIsIDB4MTUsIDB4ZTQsIDB4MmYsIDB4YzgsIDB4MmUsIDB4MzUsIDB4ZjIsCisJMHg4MSwgMHhmYiwgMHhmYSwgMHgxNiwgMHhiMiwgMHg3MywgMHg0YywgMHhjNywgMHgwMSwgMHhiOCwgMHhjZCwgMHgwYSwKKwkweDk1LCAweGIyLCAweGRjLCAweDdkLCAweDgzLCAweDVlLCAweDNkLCAweDUxLCAweGFkLCAweDA3LCAweGZhLCAweDU0LAorCTB4YTUsIDB4YzUsIDB4MjAsIDB4NjUsIDB4OTcsIDB4ODEsIDB4YWEsIDB4NWEsIDB4YmYsIDB4MWYsIDB4N2IsIDB4OTcsCisJMHgxOCwgMHg3YiwgMHgzMCwgMHg5ZSwgMHg5ZCwgMHgwMSwgMHhkZCwgMHgyMywgMHhmNCwgMHhhYSwgMHgzYSwgMHgyNiwKKwkweGNiLCAweDdmLCAweGI4LCAweGMxLCAweDYyLCAweDBjLCAweGIyLCAweGI1LCAweGRlLCAweDdjLCAweDM4LCAweDMyLAorCTB4NjEsIDB4ZjAsIDB4NTIsIDB4OGIsIDB4NDAsIDB4Y2UsIDB4MmUsIDB4MjEsIDB4M2UsIDB4MWQsIDB4OWMsIDB4NGEsCisJMHhjOCwgMHg1ZCwgMHhkZiwgMHgzMiwgMHg1NSwgMHgxZSwgMHg3ZCwgMHgzMCwgMHg0NSwgMHgxZSwgMHg2MSwgMHhmZiwKKwkweGI3LCAweDJiLCAweDdjLCAweGY5LCAweGE0LCAweGRhLCAweDI1LCAweDRmLCAweDM2LCAweDIyLCAweDhmLCAweGFjLAorCTB4YTcsIDB4M2UsIDB4OTEsIDB4ODUsIDB4NmIsIDB4MTMsIDB4ZmEsIDB4Y2YsIDB4ODQsIDB4N2EsIDB4MzIsIDB4NGUsCisJMHgwMSwgMHg4YSwgMHgyYiwgMHg4NywgMHhmZCwgMHg1MywgMHhlMiwgMHhlNywgMHgyNiwgMHhlZCwgMHgyNywgMHhkMSwKKwkweDhhLCAweDUwLCAweGI2LCAweDM2LCAweGMxLCAweDM4LCAweDM1LCAweGM0LCAweGEwLCAweGFmLCAweDYxLCAweDAzLAorCTB4YjYsIDB4YWYsIDB4NDYsIDB4NWMsIDB4N2IsIDB4NGYsIDB4ODYsIDB4OGQsIDB4ZmQsIDB4NTEsIDB4ZmEsIDB4M2IsCisJMHhkMCwgMHhiNiwgMHg5ZCwgMHg0NywgMHgwMywgMHhkMSwgMHgxZCwgMHg0YywgMHhlZCwgMHg2MywgMHg5NSwgMHg1OCwKKwkweGVlLCAweDhhLCAweGYwLCAweDdhLCAweDcyLCAweDk3LCAweGNjLCAweGY3LCAweGVjLCAweGYwLCAweGRiLCAweGZkLAorCTB4MDIsIDB4ZjIsIDB4ZGIsIDB4N2UsIDB4N2UsIDB4NDcsIDB4ODgsIDB4YTgsIDB4MTMsIDB4NzMsIDB4ZjksIDB4OTgsCisJMHgzYSwgMHgzYiwgMHhiNywgMHgxMywgMHhmZiwgMHg1NSwgMHg2YSwgMHhkNywgMHgyMCwgMHgyOSwgMHg0ZSwgMHhhYiwKKwkweDBkLCAweDZiLCAweGIxLCAweDZmLCAweDc3LCAweDJjLCAweGM1LCAweGI4LCAweDM2LCAweGFkLCAweDA1LCAweGZkLAorCTB4MWUsIDB4ZjMsIDB4ZjMsIDB4OWQsIDB4MWUsIDB4ZTIsIDB4MmYsIDB4OWQsIDB4ZTcsIDB4MGMsIDB4NzEsIDB4NWUsCisJMHhhOSwgMHgxMSwgMHhjZSwgMHhjNywgMHgwNCwgMHg2NSwgMHgwNiwgMHhmZiwgMHhkYSwgMHhhYSwgMHhjMSwgMHhkZiwKKwkweGJjLCAweDk5LCAweDE1LCAweGJmLCAweGQ5LCAweDlhLCAweGU3LCAweDNjLCAweDE4LCAweGU4LCAweDE4LCAweDI2LAorCTB4M2YsIDB4ZTcsIDB4YWEsIDB4OTEsIDB4NGUsIDB4YTIsIDB4NTEsIDB4ZDUsIDB4YjAsIDB4OTAsIDB4ZjAsIDB4NWUsCisJMHgxNSwgMHgzNiwgMHg3MSwgMHgzYSwgMHg3ZiwgMHgzMywgMHhjZCwgMHhjZiwgMHhkMywgMHhlYiwgMHgyNiwgMHgxZSwKKwkweDI0LCAweGQ3LCAweDkyLCAweDc4LCAweDQ1LCAweDVkLCAweDdjLCAweGYyLCAweDYxLCAweGY4LCAweGRiLCAweGNkLAorCTB4NzYsIDB4NWYsIDB4OTcsIDB4ZWMsIDB4ZTYsIDB4ZmMsIDB4NGEsIDB4YWEsIDB4MjYsIDB4OGUsIDB4N2YsIDB4ZDQsCisJMHg2YSwgMHgxYiwgMHhjNiwgMHhmYSwgMHhmOSwgMHg4ZiwgMHg4ZCwgMHg1YywgMHhkMiwgMHg1MywgMHgyMywgMHg3NSwKKwkweDQ0LCAweGI5LCAweDcyLCAweGEyLCAweDM3LCAweDgzLCAweGVlLCAweDM0LCAweDdhLCAweGViLCAweDg4LCAweDZmLAorCTB4YjEsIDB4NDIsIDB4ZmUsIDB4MjYsIDB4MjYsIDB4YzksIDB4NjksIDB4MDMsIDB4Y2UsIDB4ZjYsIDB4MzMsIDB4ZWMsCisJMHhmNywgMHgzNSwgMHhmNiwgMHg4NSwgMHgzZSwgMHg2MywgMHgyZiwgMHhlNiwgMHgyZiwgMHhmYSwgMHhmNCwgMHg5NSwKKwkweDdiLCAweGY0LCAweDExLCAweDdmLCAweDUxLCAweGYyLCAweDAyLCAweGVmLCAweDliLCAweDYzLCAweDNkLCAweDNiLAorCTB4Y2MsIDB4YjgsIDB4NTgsIDB4Y2YsIDB4MGMsIDB4NDEsIDB4ZmUsIDB4YzUsIDB4MjEsIDB4ZTIsIDB4OWYsIDB4MjMsCisJMHg3YSwgMHhlZCwgMHhmZiwgMHg4OCwgMHhlNywgMHg5YywgMHgzMCwgMHhlNCwgMHg0YywgMHg4ZiwgMHg1ZiwgMHhjMSwKKwkweDZmLCAweGUzLCAweDE3LCAweGNiLCAweGI1LCAweDQ3LCAweDczLCAweDY5LCAweGU2LCAweDMzLCAweGYxLCAweGU4LAorCTB4MGUsIDB4NzMsIDB4MDIsIDB4YTYsIDB4MWIsIDB4MTYsIDB4ZmEsIDB4NzEsIDB4MzMsIDB4ZjYsIDB4OWMsIDB4ZGYsCisJMHhjYywgMHg3OSwgMHgzZSwgMHhkMSwgMHgyNiwgMHg3NSwgMHg0MCwgMHg3MSwgMHg5ZCwgMHhiOSwgMHg1ZCwgMHhlMiwKKwkweGExLCAweGYzLCAweDNhLCAweDA0LCAweGZmLCAweDQ2LCAweDczLCAweDJjLCAweDNmLCAweGQ5LCAweGM1LCAweDc5LAorCTB4YjksIDB4ZDIsIDB4OGUsIDB4ZTYsIDB4MzgsIDB4NWUsIDB4ZDYsIDB4ZDksIDB4MjEsIDB4NmMsIDB4MmIsIDB4ZDQsCisJMHg0ZiwgMHhjOCwgMHg2YiwgMHhiNiwgMHg0MSwgMHg5YiwgMHhhNCwgMHg4ZSwgMHg5ZSwgMHgxNSwgMHhkYSwgMHg2ZCwKKwkweDMzLCAweDNlLCAweGJhLCAweDhlLCAweDU5LCAweDJjLCAweDNmLCAweDliLCAweDMyLCAweGY3LCAweDBjLCAweGQ2LAorCTB4OWYsIDB4MTYsIDB4MzksIDB4M2YsIDB4MGEsIDB4NTUsIDB4MjIsIDB4YTcsIDB4NTUsIDB4ZjYsIDB4OWYsIDB4ZjMsCisJMHhjOSwgMHg4OSwgMHgwNCwgMHhlNCwgMHg4NCwgMHg5NCwgMHhjMSwgMHhjZCwgMHg5YywgMHhlZiwgMHg1ZCwgMHg1MiwKKwkweGJmLCAweGY3LCAweGM1LCAweGE2LCAweGFiLCAweGI3LCAweDdjLCAweDBlLCAweGRjLCAweGJhLCAweDVhLCAweDhlLAorCTB4M2EsIDB4NTMsIDB4MWYsIDB4MGQsIDB4YjMsIDB4YmYsIDB4MDMsIDB4ZGQsIDB4M2IsIDB4ODAsIDB4NTMsIDB4OGYsCisJMHhlMCwgMHgxNCwgMHgwNywgMHg0ZSwgMHhmMywgMHgwYSwgMHhmNSwgMHg1OSwgMHgxNCwgMHhkNCwgMHg5MCwgMHhmZSwKKwkweDUzLCAweDIxLCAweGUzLCAweGM3LCAweGJlLCAweDk4LCAweGFmLCAweGZlLCAweGY2LCAweDlhLCAweGZhLCAweDViLAorCTB4YTgsIDB4ZDMsIDB4YzQsIDB4ZmYsIDB4YjMsIDB4YTksIDB4NmYsIDB4NWEsIDB4OWYsIDB4ZDEsIDB4ZmYsIDB4NmYsCisJMHhmNSwgMHg3MiwgMHg5YywgMHg5MiwgMHhkZCwgMHg3ZCwgMHgyNiwgMHhjZSwgMHg5OCwgMHgyZSwgMHhkNCwgMHhkOSwKKwkweDIyLCAweDIyLCAweGNiLCAweDQ2LCAweDNhLCAweDk5LCAweDVlLCAweGRmLCAweGJjLCAweDE1LCAweGYzLCAweDY1LAorCTB4N2MsIDB4NGUsIDB4NmUsIDB4MDksIDB4MDEsIDB4YWYsIDB4YTgsIDB4M2EsIDB4ZGUsIDB4ODcsIDB4YmEsIDB4YWUsCisJMHhlMiwgMHgyYywgMHhhZiwgMHhlMiwgMHgyOCwgMHhjNywgMHgzZiwgMHhhYSwgMHhlNSwgMHgxMiwgMHhkZiwgMHg2NywKKwkweGExLCAweDQyLCAweDNlLCAweDdhLCAweGZkLCAweGQ5LCAweGFkLCAweGYzLCAweDg0LCAweGVjLCAweDg4LCAweGU5LAorCTB4YmMsIDB4YTUsIDB4YjEsIDB4M2UsIDB4NDcsIDB4YjYsIDB4ZTQsIDB4ZjksIDB4MWEsIDB4ZTYsIDB4YjMsIDB4YzcsCisJMHgyMiwgMHgzNCwgMHhmZiwgMHg4MCwgMHhkNSwgMHhkMywgMHg4NywgMHhmOSwgMHg5ZiwgMHgxYSwgMHg2OSwgMHhiYywKKwkweGNlLCAweDdlLCAweDBkLCAweGU3LCAweGNjLCAweDdlLCAweDBkLCAweGY1LCAweGNiLCAweDJhLCAweDNhLCAweDg4LAorCTB4YmEsIDB4ZDYsIDB4NzgsIDB4MTAsIDB4ZjIsIDB4NzEsIDB4NGYsIDB4N2IsIDB4ZmQsIDB4ZjIsIDB4ZTIsIDB4NDcsCisJMHhlNywgMHhlMSwgMHhiMiwgMHgzOCwgMHhkOSwgMHhjZiwgMHgwOSwgMHg0ZSwgMHg5NywgMHg3YywgMHhmMSwgMHgzOSwKKwkweDZjLCAweGUyLCAweGQzLCAweDFiLCAweDkzLCAweGYzLCAweGQyLCAweDdjLCAweDI5LCAweGU4LCAweDE3LCAweGYxLAorCTB4OWQsIDB4NzEsIDB4ZWYsIDB4OWQsIDB4YWUsIDB4OTUsIDB4YTAsIDB4ZGQsIDB4MmIsIDB4ZTUsIDB4OWMsIDB4ZDYsCisJMHhmOSwgMHhmMywgMHg2YiwgMHgzZSwgMHhlYSwgMHhmMiwgMHhiOCwgMHg3YiwgMHg0ZiwgMHgyMCwgMHhiZiwgMHhhYywKKwkweDlkLCAweGYwLCAweDRiLCAweGJkLCAweDI4LCAweDc5LCAweDNjLCAweDJlLCAweGY0LCAweDY1LCAweGM5LCAweGRmLAorCTB4NmQsIDB4ZDIsIDB4YjcsIDB4OTgsIDB4ZmUsIDB4ZTIsIDB4MGYsIDB4Y2MsIDB4M2IsIDB4ZmQsIDB4NmUsIDB4NWYsCisJMHg2MCwgMHhlYSwgMHgzNiwgMHg4ZCwgMHg0MywgMHhjYSwgMHg4OSwgMHgxMywgMHg4MywgMHgzNiwgMHhlYiwgMHgzMywKKwkweDI0LCAweDRhLCAweGNmLCAweDFhLCAweGUwLCAweDM1LCAweDUyLCAweDA3LCAweGJlLCAweGRkLCAweDkxLCAweGIwLAorCTB4OGMsIDB4MjEsIDB4NmYsIDB4YWMsIDB4ZGEsIDB4NzcsIDB4MGYsIDB4ZDcsIDB4NGYsIDB4YzYsIDB4OTMsIDB4ZTQsCisJMHhjNiwgMHhkYywgMHhmYSwgMHgyNCwgMHg3OSwgMHhhZiwgMHgyNiwgMHg4NCwgMHg5NiwgMHgyZiwgMHhiZSwgMHgyYywKKwkweGJlLCAweDg1LCAweGZlLCAweDY0LCAweGE5LCAweDE3LCAweGRmLCAweDk3LCAweDM0LCAweGJlLCAweGJjLCAweGFmLAorCTB4YmUsIDB4ZjksIDB4MTIsIDB4YTYsIDB4NGIsIDB4NmYsIDB4MDUsIDB4ZWQsIDB4YmIsIDB4OTUsIDB4ZTcsIDB4MTcsCisJMHhhMywgMHhlZSwgMHgxMSwgMHg3ZSwgMHg5YywgMHg1ZiwgMHhmNSwgMHg2ZiwgMHgwYywgMHg5YSwgMHg3ZSwgMHg0MiwKKwkweGYwLCAweDA4LCAweGY0LCAweDQxLCAweDY1LCAweDc3LCAweDgwLCAweGJlLCAweDI5LCAweDc0LCAweGNlLCAweDJhLAorCTB4ZDAsIDB4YmQsIDB4YWIsIDB4ZmMsIDB4NzEsIDB4ODgsIDB4YTUsIDB4N2MsIDB4NzEsIDB4YWMsIDB4NDcsIDB4MWMsCisJMHg4ZiwgMHg0YywgMHgwNCwgMHhlYiwgMHg4MSwgMHhjNCwgMHg0YiwgMHhjNywgMHgyNywgMHg3MCwgMHhiZiwgMHgxYiwKKwkweGZkLCAweGUyLCAweGNlLCAweGRmLCAweGM1LCAweGVkLCAweDRhLCAweGM3LCAweGFiLCAweDdiLCAweDI1LCAweGVlLAorCTB4OTMsIDB4MGUsIDB4ZTksIDB4NGIsIDB4YzcsIDB4ZGMsIDB4ZmIsIDB4ZTIsIDB4OWYsIDB4YzQsIDB4MzEsIDB4N2UsCisJMHg4NSwgMHhlMywgMHg3OCwgMHhmNywgMHhmZiwgMHgyYywgMHg4ZSwgMHg5ZCwgMHgxMiwgMHhjNywgMHgyMiwgMHhiOSwKKwkweDU3LCAweDRkLCAweGJmLCAweGQ5LCAweDJlLCAweDdkLCAweDE4LCAweGY1LCAweDhkLCAweDdlLCAweGJkLCAweDRmLAorCTB4NzAsIDB4MWYsIDB4NzgsIDB4YjUsIDB4NWIsIDB4OGYsIDB4ZTcsIDB4MzMsIDB4N2YsIDB4NGUsIDB4ZjYsIDB4OTUsCisJMHhjYSwgMHhiZSwgMHg3YiwgMHgyNiwgMHhlZCwgMHgzYiwgMHhjNSwgMHhmNSwgMHhlZSwgMHhmMSwgMHhmMSwgMHhjOSwKKwkweGVmLCAweDE1LCAweDlmLCAweDlkLCAweDU5LCAweDk1LCAweDAyLCAweGVlLCAweGE4LCAweGUzLCAweGIxLCAweDI5LAorCTB4ZGUsIDB4MzcsIDB4ODYsIDB4MWYsIDB4ZjksIDB4YjUsIDB4MzYsIDB4ODUsIDB4YmEsIDB4MDUsIDB4ZmUsIDB4YjksCisJMHg5ZSwgMHg3YSwgMHg0YSwgMHhlMywgMHhmYiwgMHhjNywgMHhhNywgMHhlZiwgMHg1NywgMHg4ZCwgMHgzYywgMHhjNCwKKwkweDZkLCAweDQzLCAweGI4LCAweDg0LCAweGY5LCAweDRlLCAweGI3LCAweGYzLCAweDdkLCAweGU3LCAweGZhLCAweGI3LAorCTB4OWEsIDB4ZmQsIDB4M2EsIDB4MmEsIDB4ZmUsIDB4NTUsIDB4ODgsIDB4N2YsIDB4N2EsIDB4YjksIDB4OTYsIDB4ZWIsCisJMHhiZSwgMHg3NSwgMHhiYSwgMHhkZCwgMHhlYiwgMHhkZiwgMHg5ZCwgMHg5NywgMHhkMSwgMHhmNywgMHg0ZiwgMHhmYiwKKwkweDYzLCAweGQxLCAweDliLCAweDMyLCAweGZhLCAweDQ5LCAweDVlLCAweGI5LCAweGY0LCAweDdkLCAweGQ0LCAweDRmLAorCTB4NjIsIDB4N2UsIDB4NzIsIDB4OWYsIDB4NDEsIDB4ZmEsIDB4NWIsIDB4MzQsIDB4NWUsIDB4NzIsIDB4ZGYsIDB4NzAsCisJMHgzZSwgMHg0NywgMHhhYywgMHhhMywgMHg2YywgMHg1NywgMHg1ZSwgMHhmOSwgMHg3MSwgMHgzOSwgMHgyMywgMHg3YywKKwkweDUzLCAweGM1LCAweDhkLCAweGQ2LCAweDhiLCAweDY0LCAweDdkLCAweDJhLCAweGJmLCAweGM1LCAweDRlLCAweDM3LAorCTB4MWYsIDB4NjQsIDB4MWYsIDB4ZjMsIDB4MzUsIDB4MGIsIDB4NWYsIDB4MzQsIDB4MzQsIDB4MzksIDB4ZmUsIDB4MTgsCisJMHhlNSwgMHhhYiwgMHgzOCwgMHhhZiwgMHhmNywgMHg2ZiwgMHhjYiwgMHgxMSwgMHg5ZiwgMHg3NiwgMHg5ZSwgMHhmMywKKwkweGYwLCAweGZiLCAweDgwLCAweDdkLCAweGU5LCAweDJiLCAweDgwLCAweDIzLCAweGYxLCAweGNkLCAweDUwLCAweDRkLAorCTB4Y2UsIDB4NzQsIDB4NzgsIDB4ZTEsIDB4ZGQsIDB4MzAsIDB4OWEsIDB4MzMsIDB4NzgsIDB4ZGIsIDB4ZWMsIDB4ZTcsCisJMHg0OCwgMHgyNywgMHhlOSwgMHg1ZiwgMHgxZCwgMHhjMCwgMHgzMSwgMHgyYywgMHgzOCwgMHg5ZSwgMHg1MCwgMHg3ZiwKKwkweDlmLCAweGY3LCAweGM2LCAweDBmLCAweDZmLCAweDVlLCAweDhjLCAweGZmLCAweDE5LCAweGNjLCAweGUzLCAweDg3LAorCTB4ZTUsIDB4NWQsIDB4ZGQsIDB4MTgsIDB4MDMsIDB4ZmQsIDB4MmUsIDB4NjIsIDB4ZWMsIDB4NDYsIDB4NWUsIDB4ZGYsCisJMHhjMywgMHhlNywgMHhiNSwgMHg0YSwgMHhmNSwgMHhmMiwgMHhiYiwgMHhjMywgMHg1MiwgMHgwZCwgMHg2YiwgMHhjOSwKKwkweGVlLCAweDk0LCAweGFlLCAweDdmLCAweGM4LCAweDc3LCAweDI3LCAweGVlLCAweGJkLCAweGI3LCAweDc1LCAweDBkLAorCTB4NGMsIDB4YzQsIDB4NjksIDB4NTgsIDB4MzEsIDB4MzMsIDB4YzEsIDB4ODIsIDB4ZGUsIDB4ZjgsIDB4ZTIsIDB4NGIsCisJMHg1ZSwgMHg3ZSwgMHhhZiwgMHhiZiwgMHgxOCwgMHhmMywgMHg2NSwgMHhmNywgMHg5MSwgMHg5YywgMHg4OCwgMHhkYSwKKwkweDhiLCAweGJhLCAweGZiLCAweGVlLCAweDFlLCAweGQwLCAweGI3LCAweGQ1LCAweGJkLCAweGQ4LCAweDNmLCAweDczLAorCTB4M2IsIDB4ZDcsIDB4NTEsIDB4YWIsIDB4NGMsIDB4ZjIsIDB4MmIsIDB4MGQsIDB4NWMsIDB4ZDMsIDB4YTgsIDB4YzMsCisJMHgxMywgMHgxMywgMHhhYSwgMHgwNCwgMHhmNywgMHg5YSwgMHg3OSwgMHgwNywgMHhhYiwgMHgxYSwgMHhkMSwgMHg4YiwKKwkweGZhLCAweDY4LCAweDE3LCAweGRlLCAweGMxLCAweDQ0LCAweDhiLCAweDgzLCAweDdkLCAweDlmLCAweDU1LCAweGU4LAorCTB4YWYsIDB4MDgsIDB4OGYsIDB4ZjcsIDB4NWQsIDB4MWMsIDB4ZDMsIDB4ZTEsIDB4NjAsIDB4NWQsIDB4ZjIsIDB4ZmEsCisJMHgxNSwgMHg5MywgMHg3MywgMHhmZCwgMHhhYiwgMHhmYiwgMHg2ZSwgMHhlZSwgMHhlMSwgMHg3ZSwgMHgyYSwgMHgxOSwKKwkweGFjLCAweGNiLCAweDAxLCAweGY5LCAweGZiLCAweDI0LCAweDdlLCAweDQ5LCAweDg5LCAweDVmLCAweDU0LCAweGM3LAorCTB4MGYsIDB4ZWYsIDB4ZWQsIDB4NGYsIDB4N2QsIDB4ZWYsIDB4N2EsIDB4YWEsIDB4MWIsIDB4ZGUsIDB4YmMsIDB4ZmIsCisJMHhmYywgMHg0ZiwgMHg2MywgMHhkNywgMHhmNiwgMHg5OCwgMHhiNywgMHgwZSwgMHg1NywgMHhiYiwgMHhlNywgMHhhZSwKKwkweDQzLCAweGRlLCAweDhiLCAweDVkLCAweDg3LCAweDMwLCAweGNlLCAweDczLCAweGJmLCAweGJjLCAweDM4LCAweGQzLAorCTB4MjEsIDB4NzksIDB4NzQsIDB4NTcsIDB4NDQsIDB4ZjIsIDB4NDEsIDB4ZWMsIDB4ZmIsIDB4MjIsIDB4NjIsIDB4ZWUsCisJMHgxYiwgMHg4YywgMHhiZiwgMHg5MiwgMHhmYiwgMHhlZSwgMHg5NywgMHgyYSwgMHhmNCwgMHhkOSwgMHgxNywgMHg4NywKKwkweGNjLCAweGZiLCAweGM0LCAweGJjLCAweDU3LCAweGIwLCAweGJlLCAweDNlLCAweGFlLCAweDA0LCAweDY3LCAweGJlLAorCTB4ZmYsIDB4YjUsIDB4M2YsIDB4OWMsIDB4YWYsIDB4OTksIDB4OGUsIDB4NjEsIDB4MWYsIDB4NWUsIDB4MmEsIDB4MTYsCisJMHg3OCwgMHhiZiwgMHhjNCwgMHhlNSwgMHhmYiwgMHg0NSwgMHhiZiwgMHhlMCwgMHhlMSwgMHhmMCwgMHhmOSwgMHgyOSwKKwkweGQ1LCAweGY2LCAweDEzLCAweDRkLCAweDY1LCAweDNhLCAweDczLCAweGIwLCAweGE3LCAweGQ1LCAweGVkLCAweDIzLAorCTB4YzEsIDB4MjcsIDB4ZDQsIDB4NzksIDB4NGIsIDB4ZGUsIDB4YzEsIDB4ZjIsIDB4NWUsIDB4ZDYsIDB4ZWYsIDB4NjEsCisJMHhmNCwgMHg3MywgMHhhZCwgMHg3OSwgMHg4YywgMHhjNywgMHhkMCwgMHhiNywgMHgzOSwgMHhiZiwgMHhjYSwgMHhiZCwKKwkweGI1LCAweDc1LCAweDliLCAweGU5LCAweDRiLCAweGE3LCAweGRlLCAweDY3LCAweGVlLCAweGI5LCAweGI2LCAweDZhLAorCTB4ZDAsIDB4MTYsIDB4ZWUsIDB4NWIsIDB4MWYsIDB4YjIsIDB4ZjMsIDB4OTIsIDB4MWYsIDB4ODUsIDB4NzcsIDB4ODksCisJMHhmZiwgMHgzZCwgMHg2MiwgMHhmYSwgMHg4NSwgMHg3MywgMHhjNSwgMHhiOCwgMHg2NywgMHhmMywgMHhiZCwgMHgzNCwKKwkweGExLCAweGRmLCAweDIzLCAweDA5LCAweDZmLCAweDllLCAweDI1LCAweDMyLCAweDY1LCAweDgyLCAweGZiLCAweGVjLAorCTB4OWIsIDB4NDAsIDB4ZjcsIDB4ZGMsIDB4ODQsIDB4YmUsIDB4YmMsIDB4YjUsIDB4NGIsIDB4NzAsIDB4YjgsIDB4OTEsCisJMHg3MSwgMHg1YiwgMHgzZSwgMHg5YSwgMHgwYiwgMHg3ZSwgMHg2NywgMHgyMSwgMHg1YywgMHg3ZiwgMHg3MywgMHhmYiwKKwkweGQxLCAweDczLCAweDZjLCAweGQ3LCAweGJjLCAweDgxLCAweDNjLCAweGYzLCAweGNkLCAweDU1LCAweGIzLCAweGY4LAorCTB4ZmMsIDB4YTYsIDB4OWQsIDB4NTEsIDB4ZDgsIDB4OTksIDB4ZTksIDB4MTcsIDB4YmYsIDB4ZGEsIDB4NmYsIDB4MDEsCisJMHhlZCwgMHg5MiwgMHgzYSwgMHg3MywgMHhkMiwgMHg3ZCwgMHg5NywgMHhjMywgMHg0ZSwgMHg1MywgMHg0ZiwgMHgyNiwKKwkweGJmLCAweDEzLCAweDMwLCAweDllLCAweDViLCAweGM3LCAweDYzLCAweGQ1LCAweGJjLCAweDk1LCAweGU0LCAweDk3LAorCTB4NGMsIDB4N2EsIDB4Y2YsIDB4MTYsIDB4ZTIsIDB4NmUsIDB4ZjIsIDB4YzEsIDB4ZTQsIDB4OGYsIDB4ZjcsIDB4MWQsCisJMHg3YiwgMHg5YiwgMHhhNywgMHg1ZSwgMHhmYSwgMHhlMywgMHhlZiwgMHg3MCwgMHhiZSwgMHg4NCwgMHg2NSwgMHgzZCwKKwkweDk2LCAweGU5LCAweGVmLCAweGJiLCAweDNjLCAweDNlLCAweDZmLCAweDAxLCAweDlmLCAweDhjLCAweGQ4LCAweDZkLAorCTB4YjcsIDB4ZjAsIDB4M2IsIDB4NzQsIDB4OTYsIDB4ZGEsIDB4MjUsIDB4ZjEsIDB4MzksIDB4NTcsIDB4MmQsIDB4NzUsCisJMHg1MCwgMHhlYywgMHhmYiwgMHg0OSwgMHhmYSwgMHgxZiwgMHhjNCwgMHgzMSwgMHg2ZSwgMHg2ZiwgMHhjOSwgMHg0OSwKKwkweGRjLCAweDI0LCAweDhmLCAweDllLCAweDE2LCAweGJmLCAweDdmLCAweDg0LCAweGRmLCAweGI2LCAweGYxLCAweGJiLAorCTB4YzUsIDB4ZjUsIDB4ZGIsIDB4ZDQsIDB4NTksIDB4YWYsIDB4OWMsIDB4OTksIDB4M2EsIDB4MWYsIDB4YjgsIDB4NWUsCisJMHhkYiwgMHgyNywgMHhmOSwgMHhkZCwgMHg1MywgMHgyNCwgMHhlNywgMHhhMSwgMHg0MiwgMHhiZSwgMHgzYiwgMHgzOCwKKwkweGUyLCAweDRmLCAweDg5LCAweDZhLCAweDVhLCAweGVlLCAweGRkLCAweDU3LCAweDJjLCAweGZiLCAweDkyLCAweDdhLAorCTB4MWYsIDB4ZTYsIDB4NzEsIDB4ZmUsIDB4ZWMsIDB4MjksIDB4ZjAsIDB4MzQsIDB4ZGYsIDB4MTEsIDB4OGMsIDB4ZGMsCisJMHhlMCwgMHgzOSwgMHhmMiwgMHhlMiwgMHhjNywgMHgzNywgMHgxMywgMHhmZiwgMHg1MCwgMHgwNywgMHg3NCwgMHg5YywKKwkweDZhLCAweGNkLCAweGY3LCAweDA3LCAweGNjLCAweGUzLCAweGZjLCAweDI2LCAweGY3LCAweGI3LCAweGExLCAweGFmLAorCTB4ZGMsIDB4ZGYsIDB4NzYsIDB4NDgsIDB4ZmEsIDB4MDgsIDB4YzEsIDB4ZTUsIDB4ODEsIDB4MjEsIDB4YjIsIDB4NDMsCisJMHhjNywgMHhhZSwgMHhkMiwgMHg3ZiwgMHhmZSwgMHg2MSwgMHg0NywgMHg1NCwgMHhlYywgMHgyOCwgMHhmNywgMHhkOCwKKwkweDExLCAweGQwLCAweDdiLCAweDFkLCAweGNkLCAweGFmLCAweDUwLCAweDVmLCAweDczLCAweDFlLCAweDJlLCAweDU3LAorCTB4ZWIsIDB4MjksIDB4NDcsIDB4ZjQsIDB4YmQsIDB4YjAsIDB4YWUsIDB4ODgsIDB4YzYsIDB4Y2IsIDB4ZDQsIDB4YWIsCisJMHhmMCwgMHhiNywgMHgzNywgMHg1OSwgMHg4NCwgMHgzYSwgMHg5NiwgMHhkYywgMHg0OSwgMHhmMywgMHgzNSwgMHhlYSwKKwkweGQ1LCAweDNlLCAweDBlLCAweGM0LCAweDJiLCAweGVhLCAweDE4LCAweGVhLCAweDczLCAweGUzLCAweDQxLCAweGI2LAorCTB4NDcsIDB4MWQsIDB4MWYsIDB4MzQsIDB4ZjUsIDB4N2EsIDB4Y2EsIDB4ZWYsIDB4OTgsIDB4YmQsIDB4ZWIsIDB4YTQsCisJMHg1ZSwgMHg5YywgMHhjMCwgMHg3NywgMHg1MSwgMHhmZCwgMHg1ZSwgMHgyMywgMHhmZSwgMHhkOSwgMHhlNiwgMHgzZCwKKwkweGI4LCAweGZiLCAweDk4LCAweGExLCAweDhiLCAweDdjLCAweGUzLCAweGZkLCAweDI3LCAweDk2LCAweDBhLCAweGFkLAorCTB4ZjIsIDB4OGQsIDB4MDcsIDB4ZDYsIDB4NTUsIDB4MDksIDB4YWQsIDB4MzYsIDB4ZTMsIDB4ZTksIDB4YmUsIDB4MmIsCisJMHg1ZSwgMHgyOSwgMHhmOSwgMHg2MiwgMHhmNywgMHg3YiwgMHhlMiwgMHhjZiwgMHg0NywgMHhlMiwgMHhjZiwgMHg1OSwKKwkweGUwLCAweDlmLCAweGRjLCAweDI4LCAweDc4LCAweDJjLCAweDBhLCAweGVhLCAweDE3LCAweGJiLCAweGRjLCAweDczLAorCTB4NjMsIDB4ZDYsIDB4MTEsIDB4OGYsIDB4NDcsIDB4ZDUsIDB4NWYsIDB4M2YsIDB4OTcsIDB4OGYsIDB4MzEsIDB4ZDgsCisJMHgxNywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgY29uc3QgaW50IGJueDJfVFBBVF9iMDZGd1JlbGVhc2VNYWpvciA9IDB4MTsKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3UmVsZWFzZU1pbm9yID0gMHgwOwpAQCAtMjMzOSwyMDEgKzEzMzAsMTk5IEBACiBzdGF0aWMgY29uc3QgaW50IGJueDJfVFBBVF9iMDZGd0Jzc0xlbiA9IDB4MjUwOwogc3RhdGljIGNvbnN0IHUzMiBibngyX1RQQVRfYjA2RndTYnNzQWRkciA9IDB4MDgwMDFhNjA7CiBzdGF0aWMgY29uc3QgaW50IGJueDJfVFBBVF9iMDZGd1Nic3NMZW4gPSAweDM0Owotc3RhdGljIHUzMiBibngyX1RQQVRfYjA2RndUZXh0WygweDEyMmMvNCkgKyAxXSA9IHsKLQkweDBhMDAwMjE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDc0NzA2MTc0LCAweDIwMzIyZTM1LAotCTB4MmUzMTMxMDAsIDB4MDIwNTBiMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MTAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4M2MwMjA4MDAsCi0JMHgyNDQyMWE2MCwgMHgzYzAzMDgwMCwgMHgyNDYzMWNmMCwgMHhhYzQwMDAwMCwgMHgwMDQzMjAyYiwgMHgxNDgwZmZmZCwKLQkweDI0NDIwMDA0LCAweDNjMWQwODAwLCAweDM3YmQyZmZjLCAweDAzYTBmMDIxLCAweDNjMTAwODAwLCAweDI2MTAwODYwLAotCTB4M2MxYzA4MDAsIDB4Mjc5YzFhNjAsIDB4MGUwMDA1NDYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4OGY4MjAwMTAsCi0JMHg4YzQ1MDAwOCwgMHgyNDAzMDgwMCwgMHhhZjQzMDE3OCwgMHg5NzQzMDEwNCwgMHgzYzAyMDAwOCwgMHhhZjQyMDE0MCwKLQkweDhmODIwMDI0LCAweDMwNDIwMDAxLCAweDEwNDAwMDA3LCAweDMwNjlmZmZmLCAweDI0MDIwMDAyLCAweDI1MjNmZmZlLAotCTB4YTc0MjAxNDYsIDB4YTc0MzAxNDgsIDB4MGEwMDAyNDIsIDB4M2MwMjA4MDAsIDB4YTc0MDAxNDYsIDB4M2MwMjA4MDAsCi0JMHg4YzQzMDgzYywgMHgxNDYwMDAwZSwgMHgyNDAyMGYwMCwgMHg4ZjgyMDAyNCwgMHgzMDQzMDAyMCwgMHgwMDAzMTgyYiwKLQkweDAwMDMxODIzLCAweDMwNjUwMDA5LCAweDMwNDIwYzAwLCAweDI0MDMwNDAwLCAweDE0NDMwMDAyLCAweDM0YTQwMDAxLAotCTB4MzRhNDAwMDUsIDB4YTc0NDAxNGEsIDB4MGEwMDAyNjQsIDB4M2MwMjA4MDAsIDB4OGY4MzAwMTQsIDB4MTQ2MjAwMDgsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAyNCwgMHgzMDQyMDAyMCwgMHgwMDAyMTAyYiwgMHgwMDAyMTAyMywgMHgzMDQyMDAwZCwKLQkweDBhMDAwMjYyLCAweDM0NDIwMDA1LCAweDhmODIwMDI0LCAweDMwNDIwMDIwLCAweDAwMDIxMDJiLCAweDAwMDIxMDIzLAotCTB4MzA0MjAwMDksIDB4MzQ0MjAwMDEsIDB4YTc0MjAxNGEsIDB4M2MwMjA4MDAsIDB4OGM0MzA4MjAsIDB4OGY4NDAwMjQsCi0JMHgzYzAyMDA0OCwgMHgwMDYyMTgyNSwgMHgzMDg0MDAwNiwgMHgyNDAyMDAwMiwgMHgxMDgyMDAwZCwgMHgyYzgyMDAwMywKLQkweDUwNDAwMDA1LCAweDI0MDIwMDA0LCAweDEwODAwMDEyLCAweDNjMDIwMDAxLCAweDBhMDAwMjg0LCAweDAwMDAwMDAwLAotCTB4MTA4MjAwMDcsIDB4MjQwMjAwMDYsIDB4MTQ4MjAwMGYsIDB4M2MwMjAxMTEsIDB4MGEwMDAyN2MsIDB4MDA2MjEwMjUsCi0JMHgwYTAwMDI3YiwgMHgzYzAyMDEwMSwgMHgzYzAyMDAxMSwgMHgwMDYyMTAyNSwgMHgyNDAzMDAwMSwgMHhhZjQyMTAwMCwKLQkweGFmODMwMDIwLCAweDBhMDAwMjg0LCAweDAwMDAwMDAwLCAweDAwNjIxMDI1LCAweGFmNDIxMDAwLCAweGFmODAwMDIwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4OGY4MzAwMjAsIDB4MTA2MDAwM2YsCi0JMHgzYzA0ODAwMCwgMHg4ZjQyMTAwMCwgMHgwMDQ0MTAyNCwgMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwgMHgxMDYwMDAzOSwKLQkweDAwMDAwMDAwLCAweDhmNDIxMDAwLCAweDNjMDMwMDIwLCAweDAwNDMxMDI0LCAweDEwNDAwMDM0LCAweDAwMDAwMDAwLAotCTB4OTc0MjEwMTQsIDB4MTQ0MDAwMzEsIDB4MDAwMDAwMDAsIDB4OTc0MjEwMDgsIDB4OGY4NDAwMTAsIDB4MjQ0MjAwMDYsCi0JMHgwMDAyNDA4MiwgMHgwMDA4MTg4MCwgMHgwMDY0MzgyMSwgMHg4Y2U1MDAwMCwgMHgzMDQzMDAwMywgMHgzMDQyMDAwMSwKLQkweDEwNDAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDBhMDAwMmMzLCAweDAwMDgxMDgwLCAweDU0NjAwMDBmLAotCTB4MzBhNWZmZmYsIDB4M2MwNmZmZmYsIDB4MDBhNjI4MjQsIDB4MDAwNTE4MmIsIDB4MDBhNjEwMjYsIDB4MDAwMjEwMmIsCi0JMHgwMDYyMTgyNCwgMHgxMDYwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDFmYiwKLQkweDhjZTIwMDAwLCAweDBhMDAwMmMyLCAweDAwNDYyODI1LCAweDAwMDUxODJiLCAweDM4YTJmZmZmLCAweDAwMDIxMDJiLAotCTB4MDA2MjE4MjQsIDB4MTA2MDAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAyMDUsCi0JMHg4Y2UyMDAwMCwgMHgzNDQ1ZmZmZiwgMHgwMDA4MTA4MCwgMHgwMDQ0MTAyMSwgMHgzYzAzMDgwMCwgMHhhYzQ1MDAwMCwKLQkweDhjNjIwODMwLCAweDI0NDIwMDAxLCAweGFjNjIwODMwLCAweDhmODQwMDE4LCAweDAxMjAyODIxLCAweDI0ODIwMDA4LAotCTB4MzA0MjFmZmYsIDB4MjQ0MzQwMDAsIDB4MDM0M2Q4MjEsIDB4MzBhMzAwMDcsIDB4YWY4NDAwMGMsIDB4YWY4MjAwMTgsCi0JMHhhZjQyMDA4NCwgMHgxMDYwMDAwMiwgMHgyNGEyMDAwNywgMHgzMDQ1ZmZmOCwgMHg4ZjgyMDAzMCwgMHg4Zjg0MDAwMCwKLQkweDAwNDUxODIxLCAweGFmODIwMDFjLCAweDAwNjQxMDJiLCAweGFmODMwMDMwLCAweDE0NDAwMDAyLCAweDAwNjQxMDIzLAotCTB4YWY4MjAwMzAsIDB4OGY4NDAwMzAsIDB4MzQwMjgwMDAsIDB4MDA4MjEwMjEsIDB4MDM0MjE4MjEsIDB4M2MwMjEwMDAsCi0JMHhhZjgzMDAxMCwgMHhhZjQ0MDA4MCwgMHgwM2UwMDAwOCwgMHhhZjQyMDE3OCwgMHg4ZjgzMDAyNCwgMHgyN2JkZmZlMCwKLQkweGFmYmYwMDE4LCAweGFmYjEwMDE0LCAweDMwNjIwMjAwLCAweDE0NDAwMDA0LCAweGFmYjAwMDEwLCAweDAwMDAwMDBkLAotCTB4MDAwMDAwMDAsIDB4MjQwMDAyNDIsIDB4MDAwMzFhODIsIDB4MzA2MzAwMDMsIDB4MDAwMzEwYzAsIDB4MDA0MzEwMjEsCi0JMHgwMDAyMTA4MCwgMHgwMDQzMTAyMSwgMHgwMDAyMTA4MCwgMHgzYzAzMDgwMCwgMHgyNDYzMWFhMCwgMHgwMDQzODgyMSwKLQkweDhlMjQwMDAwLCAweDEwODAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMjRkLAotCTB4OGY4NTAwMTAsIDB4MjQwMjAwMDEsIDB4YWUyMjAwMDAsIDB4OGNhNzAwMDgsIDB4YTIyMDAwMDcsIDB4OGY2MjAwMDQsCi0JMHgyNjMwMDAxNCwgMHgwMjAwMjAyMSwgMHgwMDAyMTQwMiwgMHhhMjIyMDAwNCwgMHgzMDQ2MDBmZiwgMHgyNGM2MDAwNSwKLQkweDBlMDAwNjczLCAweDAwMDYzMDgyLCAweDhmNjIwMDA0LCAweGE2MjIwMDA4LCAweDhmNDMwMTA4LCAweDNjMDIxMDAwLAotCTB4MDA2MjE4MjQsIDB4MTA2MDAwMDgsIDB4MDAwMDAwMDAsIDB4OTc0MjAxMDQsIDB4OTIyMzAwMDcsIDB4MjQ0MmZmZWMsCi0JMHgzMDQ1ZmZmZiwgMHgzNDYzMDAwMiwgMHgwYTAwMDMyMSwgMHhhMjIzMDAwNywgMHg5NzQyMDEwNCwgMHgyNDQyZmZmMCwKLQkweDMwNDVmZmZmLCAweDhmNjIwMDA0LCAweDMwNDJmZmZmLCAweDJjNDIwMDEzLCAweDU0NDAwMDA1LCAweDkyMjMwMDA3LAotCTB4OTIyMjAwMDcsIDB4MzQ0MjAwMDEsIDB4YTIyMjAwMDcsIDB4OTIyMzAwMDcsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMDksCi0JMHgyODYyMDAwMiwgMHgxNDQwMDAxNCwgMHgyNDAyMDAwMiwgMHgxMDYyMDAxMiwgMHgyNDAyMDAwMywgMHgxMDYyMDAwYSwKLQkweDAwMDAwMDAwLCAweDBhMDAwMzQyLCAweDAwMDAwMDAwLCAweDhmODIwMDEwLCAweDhjNDMwMDBjLCAweDNjMDRmZmZmLAotCTB4MDA2NDE4MjQsIDB4MDA2NTE4MjUsIDB4MGEwMDAzNDIsIDB4YWM0MzAwMGMsIDB4OGY4MjAwMTAsIDB4OGM0MzAwMTAsCi0JMHgzYzA0ZmZmZiwgMHgwMDY0MTgyNCwgMHgwMDY1MTgyNSwgMHhhYzQzMDAxMCwgMHg4ZjYyMDAwNCwgMHgzMDQyZmZmZiwKLQkweDI0NDIwMDAyLCAweDAwMDIxMDgzLCAweGEyMjIwMDA1LCAweDMwNDUwMGZmLCAweDhmODIwMDEwLCAweDNjMDRmZmZmLAotCTB4MDAwNTI4ODAsIDB4MDBhMjI4MjEsIDB4OGNhNzAwMDAsIDB4OTYyMjAwMDgsIDB4OTc0MzAxMDQsIDB4MDBlNDIwMjQsCi0JMHgyNDQyMDAwMiwgMHgwMDYyMTgyMywgMHgwMDgzMzgyNSwgMHhhY2E3MDAwMCwgMHg5MjI0MDAwNSwgMHgwMDA0MTA4MCwKLQkweDAyMDIxMDIxLCAweDkwNDMwMDAwLCAweDNjMDVmZmY2LCAweDM0YTVmZmZmLCAweDMwNjMwMDBmLCAweDAwODMyMDIxLAotCTB4YTIyNDAwMDYsIDB4MzA4MjAwZmYsIDB4MjQ0MjAwMDMsIDB4MDAwMjEwODAsIDB4MDIwMjEwMjEsIDB4OGM0NjAwMDAsCi0JMHgzMDgzMDBmZiwgMHg4ZjgyMDAxMCwgMHgzYzA0ZmYzZiwgMHgwMDAzMTg4MCwgMHgwMGM1MzgyNCwgMHgwMDYyMTgyMSwKLQkweGFlMjYwMDBjLCAweGFjNjcwMDBjLCAweDhlMjIwMDBjLCAweDkyMjMwMDA2LCAweDM0ODRmZmZmLCAweDAwNDQxMDI0LAotCTB4MjQ2MzAwMDMsIDB4MDAwMzE4ODAsIDB4MDIwMzE4MjEsIDB4MDBlNDIwMjQsIDB4YWUyMjAwMGMsIDB4YWM2NDAwMDAsCi0JMHg5MjIyMDAwNiwgMHgyNDQyMDAwNCwgMHgwMDAyMTA4MCwgMHgwMjAyMTAyMSwgMHg5NDQ3MDAwMiwgMHhhYzQ3MDAwMCwKLQkweDkyMjMwMDA2LCAweDhmODIwMDEwLCAweDAwMDMxODgwLCAweDAwNjIxODIxLCAweDI0MDIwMDEwLCAweGFjNjcwMDEwLAotCTB4MjQwMzAwMDIsIDB4YTc0MjAxNDAsIDB4YTc0MDAxNDIsIDB4YTc0MDAxNDQsIDB4YTc0MzAxNDYsIDB4OTc0MjAxMDQsCi0JMHgyNDAzMDAwMSwgMHgyNDQyZmZmZSwgMHhhNzQyMDE0OCwgMHhhNzQzMDE0YSwgMHg4ZjgyMDAyNCwgMHgyNDAzMDAwMiwKLQkweDMwNDQwMDA2LCAweDEwODMwMDBkLCAweDJjODIwMDAzLCAweDEwNDAwMDA1LCAweDI0MDIwMDA0LCAweDEwODAwMDExLAotCTB4M2MwMjAwMDksIDB4MGEwMDAzYTUsIDB4MDAwMDAwMDAsIDB4MTA4MjAwMDcsIDB4MjQwMjAwMDYsIDB4MTQ4MjAwMGQsCi0JMHgzYzAyMDExOSwgMHgwYTAwMDM5ZiwgMHgyNDAzMDAwMSwgMHgwYTAwMDM5ZSwgMHgzYzAyMDEwOSwgMHgzYzAyMDAxOSwKLQkweDI0MDMwMDAxLCAweGFmNDIxMDAwLCAweGFmODMwMDIwLCAweDBhMDAwM2E1LCAweDAwMDAwMDAwLCAweGFmNDIxMDAwLAotCTB4YWY4MDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4OTIyMjAwMDQsCi0JMHgyNDAzMDAwOCwgMHg4Zjg0MDAyMCwgMHgyNDQyMDAwMiwgMHgzMDQyMDAwNywgMHgwMDYyMTgyMywgMHgzMDYzMDAwNywKLQkweDEwODAwMDA2LCAweGFlMjMwMDEwLCAweDNjMDM4MDAwLCAweDhmNDIxMDAwLCAweDAwNDMxMDI0LCAweDEwNDBmZmZkLAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMTgsIDB4YWY4MjAwMGMsIDB4MjQ0MjAwMTAsIDB4MzA0MjFmZmYsIDB4YWY4MjAwMTgsCi0JMHhhZjQyMDA4NCwgMHg5NzQzMDEwNCwgMHgyNDQyNDAwMCwgMHgwMzQyZDgyMSwgMHgzMDYzZmZmZiwgMHgzMDYyMDAwNywKLQkweDEwNDAwMDAyLCAweDI0NjIwMDA3LCAweDMwNDNmZmY4LCAweDhmODIwMDMwLCAweDhmODQwMDAwLCAweDAwNDMxODIxLAotCTB4YWY4MjAwMWMsIDB4MDA2NDEwMmIsIDB4YWY4MzAwMzAsIDB4MTQ0MDAwMDIsIDB4MDA2NDEwMjMsIDB4YWY4MjAwMzAsCi0JMHg4Zjg0MDAzMCwgMHgzNDAyODAwMCwgMHg4ZmJmMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwMDgyMTAyMSwKLQkweDAzNDIxODIxLCAweDNjMDIxMDAwLCAweGFmODMwMDEwLCAweGFmNDQwMDgwLCAweGFmNDIwMTc4LCAweDAzZTAwMDA4LAotCTB4MjdiZDAwMjAsIDB4OGY4MzAwMjQsIDB4MjdiZGZmZTAsIDB4YWZiZjAwMTgsIDB4YWZiMTAwMTQsIDB4MzA2MjAyMDAsCi0JMHgxNDQwMDAwNCwgMHhhZmIwMDAxMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDJlNCwgMHgwMDAzMWE4MiwKLQkweDMwNjMwMDAzLCAweDAwMDMxMGMwLCAweDAwNDMxMDIxLCAweDAwMDIxMDgwLCAweDAwNDMxMDIxLCAweDAwMDIxMDgwLAotCTB4M2MwMzA4MDAsIDB4MjQ2MzFhYTAsIDB4MDA0MzgwMjEsIDB4OGUwNDAwMDAsIDB4MTQ4MDAwMDQsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDJlOSwgMHg4ZjYyMDAwNCwgMHgwNDQxMDAwOCwgMHgyNjA1MDAxNCwKLQkweDkyMDIwMDA2LCAweDhlMDMwMDBjLCAweDI0NDIwMDAzLCAweDAwMDIxMDgwLCAweDAwYTIxMDIxLCAweGFjNDMwMDAwLAotCTB4YWUwMDAwMDAsIDB4OTIwMjAwMDUsIDB4MjQ0MjAwMDEsIDB4MDAwMjEwODAsIDB4MDBhMjEwMjEsIDB4OGM0MzAwMDAsCi0JMHgzYzA0MDAwMSwgMHgwMDY0MTgyMSwgMHhhYzQzMDAwMCwgMHg5MjA2MDAwNCwgMHgyNzcxMDAwOCwgMHgwMjIwMjAyMSwKLQkweDI0YzYwMDA1LCAweDBlMDAwNjczLCAweDAwMDYzMDgyLCAweDkyMDQwMDA2LCAweDNjMDU3ZmZmLCAweDhmNjIwMDA0LAotCTB4MDAwNDIwODAsIDB4MDA5MTIwMjEsIDB4OGM4MzAwMDQsIDB4MzRhNWZmZmYsIDB4MDA0NTEwMjQsIDB4MDA2MjE4MjEsCi0JMHhhYzgzMDAwNCwgMHg5MjA1MDAwNSwgMHgzYzA3ZmZmZiwgMHg5MjA0MDAwNCwgMHgwMDA1Mjg4MCwgMHgwMGIxMjgyMSwKLQkweDhjYTMwMDAwLCAweDk3NDIwMTA0LCAweDk2MDYwMDA4LCAweDAwNjcxODI0LCAweDAwNDQxMDIxLCAweDAwNDYxMDIzLAotCTB4MzA0MmZmZmYsIDB4MDA2MjE4MjUsIDB4YWNhMzAwMDAsIDB4OTIwMzAwMDcsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMGEsCi0JMHgyODYyMDAwMiwgMHgxNDQwMDAxZCwgMHgyNDAyMDAwYSwgMHgyNDAyMDAwMiwgMHgxMDYyMDAxOSwgMHgyNDAyMDAwMywKLQkweDEwNjIwMDBlLCAweDI0MDIwMDBhLCAweDBhMDAwNDQ3LCAweDAwMDAwMDAwLCAweDkyMDIwMDA0LCAweDk3NDMwMTA0LAotCTB4OGUyNDAwMGMsIDB4MDA2MjE4MjEsIDB4MjQ2M2ZmZjIsIDB4MzA2M2ZmZmYsIDB4MDA4NzIwMjQsIDB4MDA4MzIwMjUsCi0JMHhhZTI0MDAwYywgMHgwYTAwMDQ0NywgMHgyNDAyMDAwYSwgMHg5MjAyMDAwNCwgMHg5NzQzMDEwNCwgMHg4ZTI0MDAxMCwKLQkweDAwNjIxODIxLCAweDI0NjNmZmVlLCAweDMwNjNmZmZmLCAweDAwODcyMDI0LCAweDAwODMyMDI1LCAweGFlMjQwMDEwLAotCTB4MjQwMjAwMGEsIDB4YTc0MjAxNDAsIDB4OTYwMzAwMTIsIDB4OGY4NDAwMjQsIDB4YTc0MzAxNDIsIDB4OTIwMjAwMDQsCi0JMHhhNzQyMDE0NCwgMHhhNzQwMDE0NiwgMHg5NzQzMDEwNCwgMHgzMDg0MDAwNiwgMHgyNDAyMDAwMSwgMHhhNzQzMDE0OCwKLQkweGE3NDIwMTRhLCAweDI0MDIwMDAyLCAweDEwODIwMDBkLCAweDJjODIwMDAzLCAweDEwNDAwMDA1LCAweDI0MDIwMDA0LAotCTB4MTA4MDAwMTEsIDB4M2MwMjAwNDEsIDB4MGEwMDA0NmMsIDB4MDAwMDAwMDAsIDB4MTA4MjAwMDcsIDB4MjQwMjAwMDYsCi0JMHgxNDgyMDAwZCwgMHgzYzAyMDE1MSwgMHgwYTAwMDQ2NiwgMHgyNDAzMDAwMSwgMHgwYTAwMDQ2NSwgMHgzYzAyMDE0MSwKLQkweDNjMDIwMDUxLCAweDI0MDMwMDAxLCAweGFmNDIxMDAwLCAweGFmODMwMDIwLCAweDBhMDAwNDZjLCAweDAwMDAwMDAwLAotCTB4YWY0MjEwMDAsIDB4YWY4MDAwMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHg4ZjgyMDAyMCwgMHg4Zjg0MDAxOCwgMHgxMDQwMDAwNiwgMHg5MjAzMDAwNCwgMHgzYzA1ODAwMCwgMHg4ZjQyMTAwMCwKLQkweDAwNDUxMDI0LCAweDEwNDBmZmZkLCAweDAwMDAwMDAwLCAweDI0NjMwMDBhLCAweDMwNjIwMDA3LCAweDEwNDAwMDAyLAotCTB4MjQ2MjAwMDcsIDB4MzA0MzAzZjgsIDB4MDA4MzEwMjEsIDB4MzA0MjFmZmYsIDB4YWY4NDAwMGMsIDB4YWY4MjAwMTgsCi0JMHhhZjQyMDA4NCwgMHg5NzQzMDEwNCwgMHgyNDQyNDAwMCwgMHgwMzQyZDgyMSwgMHgzMDYzZmZmZiwgMHgzMDYyMDAwNywKLQkweDEwNDAwMDAyLCAweDI0NjIwMDA3LCAweDMwNDNmZmY4LCAweDhmODIwMDMwLCAweDhmODQwMDAwLCAweDAwNDMxODIxLAotCTB4YWY4MjAwMWMsIDB4MDA2NDEwMmIsIDB4YWY4MzAwMzAsIDB4MTQ0MDAwMDIsIDB4MDA2NDEwMjMsIDB4YWY4MjAwMzAsCi0JMHg4Zjg0MDAzMCwgMHgzNDAyODAwMCwgMHg4ZmJmMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwMDgyMTAyMSwKLQkweDAzNDIxODIxLCAweDNjMDIxMDAwLCAweGFmODMwMDEwLCAweGFmNDQwMDgwLCAweGFmNDIwMTc4LCAweDAzZTAwMDA4LAotCTB4MjdiZDAwMjAsIDB4OGY2MjAwMDAsIDB4OTc0MzAxMDQsIDB4M2MwNDgwMDAsIDB4MzA0NWZmZmYsIDB4MzA2NmZmZmYsCi0JMHg4ZjQyMDE3OCwgMHgwMDQ0MTAyNCwgMHgxNDQwZmZmZCwgMHgyNDAyMDAwYSwgMHgzMGEzMDAwNywgMHhhNzQyMDE0MCwKLQkweDI0MDIwMDA4LCAweDAwNDMxMDIzLCAweDMwNDIwMDA3LCAweDI0YTNmZmZlLCAweGE3NDIwMTQyLCAweGE3NDMwMTQ0LAotCTB4YTc0MDAxNDYsIDB4YTc0NjAxNDgsIDB4OGY0MjAxMDgsIDB4OGY4MzAwMjQsIDB4MzA0MjAwMjAsIDB4MDAwMjEwMmIsCi0JMHgwMDAyMTAyMywgMHgzMDQyMDAwOSwgMHgzNDQyMDAwMSwgMHgzMDYzMDAwNiwgMHhhNzQyMDE0YSwgMHgyNDAyMDAwMiwKLQkweDEwNjIwMDBkLCAweDJjNjIwMDAzLCAweDEwNDAwMDA1LCAweDI0MDIwMDA0LCAweDEwNjAwMDExLCAweDNjMDIwMDQxLAotCTB4MGEwMDA0ZDYsIDB4MDAwMDAwMDAsIDB4MTA2MjAwMDcsIDB4MjQwMjAwMDYsIDB4MTQ2MjAwMGQsIDB4M2MwMjAxNTEsCi0JMHgwYTAwMDRkMCwgMHgyNDAzMDAwMSwgMHgwYTAwMDRjZiwgMHgzYzAyMDE0MSwgMHgzYzAyMDA1MSwgMHgyNDAzMDAwMSwKLQkweGFmNDIxMDAwLCAweGFmODMwMDIwLCAweDBhMDAwNGQ2LCAweDAwMDAwMDAwLCAweGFmNDIxMDAwLCAweGFmODAwMDIwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMjAsIDB4MjRhMzAwMDgsCi0JMHg4Zjg1MDAxOCwgMHgxMDQwMDAwNiwgMHgzMGM2ZmZmZiwgMHgzYzA0ODAwMCwgMHg4ZjQyMTAwMCwgMHgwMDQ0MTAyNCwKLQkweDEwNDBmZmZkLCAweDAwMDAwMDAwLCAweDMwNjNmZmZmLCAweDMwNjIwMDA3LCAweDEwNDAwMDAyLCAweDI0NjIwMDA3LAotCTB4MzA0M2ZmZjgsIDB4MDBhMzEwMjEsIDB4MzA0MjFmZmYsIDB4MjQ0MzQwMDAsIDB4MDM0M2Q4MjEsIDB4MDBjMDIwMjEsCi0JMHgzMDgzMDAwNywgMHhhZjg1MDAwYywgMHhhZjgyMDAxOCwgMHhhZjQyMDA4NCwgMHgxMDYwMDAwMiwgMHgyNDgyMDAwNywKLQkweDMwNDRmZmY4LCAweDhmODIwMDMwLCAweDhmODUwMDAwLCAweDAwNDQxODIxLCAweGFmODIwMDFjLCAweDAwNjUxMDJiLAotCTB4YWY4MzAwMzAsIDB4MTQ0MDAwMDIsIDB4MDA2NTEwMjMsIDB4YWY4MjAwMzAsIDB4OGY4NDAwMzAsIDB4MzQwMjgwMDAsCi0JMHgzYzAzMDgwMCwgMHg4YzY1MDgzNCwgMHgwMDgyMTAyMSwgMHgwMzQyMTgyMSwgMHhhZjgzMDAxMCwgMHhhZjQ0MDA4MCwKLQkweDEwYTAwMDA2LCAweDI0MDIwMDBlLCAweDkzODMwMDJmLCAweDE0NjIwMDA0LCAweDNjMDIxMDAwLCAweDI0MDIwNDNmLAotCTB4YTc0MjAxNDgsIDB4M2MwMjEwMDAsIDB4MDNlMDAwMDgsIDB4YWY0MjAxNzgsIDB4OGY4MjAwMjQsIDB4MzA0MjQwMDAsCi0JMHgxMDQwMDAwNSwgMHgyNDAyMDgwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDQwZSwgMHgyNDAyMDgwMCwKLQkweGFmNDIwMTc4LCAweDk3NDQwMTA0LCAweDNjMDMwMDA4LCAweGFmNDMwMTQwLCAweDhmODIwMDI0LCAweDMwNDIwMDAxLAotCTB4MTA0MDAwMDYsIDB4MzA4NWZmZmYsIDB4MjQwMjAwMDIsIDB4MjRhM2ZmZmUsIDB4YTc0MjAxNDYsIDB4MGEwMDA1MjYsCi0JMHhhNzQzMDE0OCwgMHhhNzQwMDE0NiwgMHg4Zjg0MDAxOCwgMHgyNDAyMDAwZCwgMHhhNzQyMDE0YSwgMHgyNDgzMDAwOCwKLQkweDMwNjMxZmZmLCAweDI0NjI0MDAwLCAweDAzNDJkODIxLCAweDMwYTIwMDA3LCAweGFmODQwMDBjLCAweGFmODMwMDE4LAotCTB4YWY0MzAwODQsIDB4MTA0MDAwMDIsIDB4MjRhMjAwMDcsIDB4MzA0NWZmZjgsIDB4OGY4MjAwMzAsIDB4OGY4NDAwMDAsCi0JMHgwMDQ1MTgyMSwgMHhhZjgyMDAxYywgMHgwMDY0MTAyYiwgMHhhZjgzMDAzMCwgMHgxNDQwMDAwMiwgMHgwMDY0MTAyMywKLQkweGFmODIwMDMwLCAweDhmODQwMDMwLCAweDM0MDI4MDAwLCAweDAwODIxMDIxLCAweDAzNDIxODIxLCAweDNjMDIxMDAwLAotCTB4YWY4MzAwMTAsIDB4YWY0NDAwODAsIDB4MDNlMDAwMDgsIDB4YWY0MjAxNzgsIDB4MjdiZGZmZTgsIDB4M2MwNDYwMDgsCi0JMHhhZmJmMDAxNCwgMHhhZmIwMDAxMCwgMHg4YzgyNTAwMCwgMHgzYzFhODAwMCwgMHgyNDAzZmY3ZiwgMHgzNzViNDAwMCwKLQkweDAwNDMxMDI0LCAweDM0NDIzODBjLCAweGFjODI1MDAwLCAweDhmNDMwMDA4LCAweDNjMTAwODAwLCAweDM3NDI4MDAwLAotCTB4MzQ2MzAwMDEsIDB4YWY0MzAwMDgsIDB4YWY4MjAwMTAsIDB4M2MwMjYwMWMsIDB4YWY4MDAwMTgsIDB4YWY0MDAwODAsCi0JMHhhZjQwMDA4NCwgMHg4YzQ1MDAwOCwgMHgzYzAzNjAwMCwgMHg4YzYyMDgwOCwgMHgzYzA0MDgwMCwgMHgzYzAzMDA4MCwKLQkweGFjODMwODIwLCAweDMwNDJmZmYwLCAweDM4NDIwMDEwLCAweDJjNDIwMDAxLCAweGFmODUwMDAwLCAweGFmODIwMDA0LAotCTB4MGUwMDA2NTgsIDB4MDAwMDAwMDAsIDB4OGY0MjAwMDAsIDB4MzA0MjAwMDEsIDB4MTA0MGZmZmIsIDB4MDAwMDAwMDAsCi0JMHg4ZjQzMDEwOCwgMHg4ZjQ0MDEwMCwgMHgzMDYyMjAwMCwgMHhhZjgzMDAyNCwgMHhhZjg0MDAxNCwgMHgxMDQwMDAwNCwKLQkweDhlMDIwODJjLCAweDI0NDIwMDAxLCAweDBhMDAwNWM2LCAweGFlMDIwODJjLCAweDMwNjIwMjAwLCAweDE0NDAwMDAzLAotCTB4MjQwMjBmMDAsIDB4MTQ4MjAwMjcsIDB4MjQwMjBkMDAsIDB4OTc0MjAxMDQsIDB4MTA0MDAwMWMsIDB4MzA2MjQwMDAsCi0JMHgxNDQwMDAwNSwgMHgwMDAwMDAwMCwgMHgwZTAwMDIyZiwgMHgwMDAwMDAwMCwgMHgwYTAwMDViYiwgMHgwMDAwMDAwMCwKLQkweDhmNjIwMDA4LCAweDhmNjMwMDAwLCAweDI0MDIwMDMwLCAweDAwMDMxZTAyLCAweDMwNjMwMGYwLCAweDEwNjIwMDA3LAotCTB4Mjg2MjAwMzEsIDB4MTQ0MDAwMmYsIDB4MjQwMjAwNDAsIDB4MTA2MjAwMDcsIDB4MDAwMDAwMDAsIDB4MGEwMDA1YmIsCi0JMHgwMDAwMDAwMCwgMHgwZTAwMDJlOCwgMHgwMDAwMDAwMCwgMHgwYTAwMDViYiwgMHgwMDAwMDAwMCwgMHgwZTAwMDNkYiwKLQkweDAwMDAwMDAwLCAweDBhMDAwNWJiLCAweDAwMDAwMDAwLCAweDMwNjIwMDQwLCAweDE0NDAwMDJiLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDA0YjIsIDB4MGEwMDA1YzYsIDB4MDAwMDAwMDAsIDB4MTQ4MjAwMGYsCi0JMHgzMDYyMDAwNiwgMHg5NzQyMDEwNCwgMHgxMDQwMDAwNSwgMHgzMDYyMDA0MCwgMHgwZTAwMDUxMCwgMHgwMDAwMDAwMCwKLQkweDBhMDAwNWJiLCAweDAwMDAwMDAwLCAweDE0NDAwMDFiLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLAotCTB4MjQwMDA0YzQsIDB4MGEwMDA1YzYsIDB4MDAwMDAwMDAsIDB4MTA0MDAwMGUsIDB4MzA2MjEwMDAsIDB4MTA0MDAwMDUsCi0JMHgwMDAwMDAwMCwgMHgwZTAwMDY4OCwgMHgwMDAwMDAwMCwgMHgwYTAwMDViYiwgMHgwMDAwMDAwMCwgMHgwZTAwMDRhMSwKLQkweDAwMDAwMDAwLCAweDhmODIwMDJjLCAweDI0NDIwMDAxLCAweGFmODIwMDJjLCAweDBhMDAwNWM2LCAweDAwMDAwMDAwLAotCTB4MzA2MjAwNDAsIDB4MTQ0MDAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDA0ZGIsCi0JMHg4ZjQyMDEzOCwgMHgzYzAzNDAwMCwgMHgwMDQzMTAyNSwgMHhhZjQyMDEzOCwgMHgwYTAwMDU2NiwgMHgwMDAwMDAwMCwKLQkweDNjMDQ2MDA4LCAweDhjODM1MDAwLCAweDNjMWE4MDAwLCAweDI0MDJmZjdmLCAweDM3NWI0MDAwLCAweDAwNjIxODI0LAotCTB4MzQ2MzM4MGMsIDB4YWM4MzUwMDAsIDB4OGY0MjAwMDgsIDB4M2MwNTYwMDAsIDB4M2MwMzYwMWMsIDB4MzQ0MjAwMDEsCi0JMHhhZjQyMDAwOCwgMHgzNzQyODAwMCwgMHhhZjgwMDAxOCwgMHhhZjgyMDAxMCwgMHhhZjQwMDA4MCwgMHhhZjQwMDA4NCwKLQkweDhjNjYwMDA4LCAweDhjYTIwODA4LCAweDNjMDQwODAwLCAweDNjMDMwMDgwLCAweGFjODMwODIwLCAweDMwNDJmZmYwLAotCTB4Mzg0MjAwMTAsIDB4MmM0MjAwMDEsIDB4YWY4NjAwMDAsIDB4YWY4MjAwMDQsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsCi0JMHgzMDg0ZmZmZiwgMHgzMDgyMDAwNywgMHgxMDQwMDAwMiwgMHgyNDgyMDAwNywgMHgzMDQ0ZmZmOCwgMHg4ZjgyMDAxOCwKLQkweDAwNDQxODIxLCAweDMwNjMxZmZmLCAweDI0NjQ0MDAwLCAweDAzNDRkODIxLCAweGFmODIwMDBjLCAweGFmODMwMDE4LAotCTB4MDNlMDAwMDgsIDB4YWY0MzAwODQsIDB4MzA4NGZmZmYsIDB4MzA4MjAwMDcsIDB4MTA0MDAwMDIsIDB4MjQ4MjAwMDcsCi0JMHgzMDQ0ZmZmOCwgMHg4ZjgyMDAzMCwgMHg4ZjgzMDAwMCwgMHgwMDQ0MjAyMSwgMHhhZjgyMDAxYywgMHgwMDgzMTAyYiwKLQkweGFmODQwMDMwLCAweDE0NDAwMDAyLCAweDAwODMxMDIzLCAweGFmODIwMDMwLCAweDhmODIwMDMwLCAweDM0MDM4MDAwLAotCTB4MDA0MzE4MjEsIDB4MDM0MzIwMjEsIDB4YWY4NDAwMTAsIDB4MDNlMDAwMDgsIDB4YWY0MjAwODAsIDB4OGY4MzAwMjQsCi0JMHgyNDAyMDAwMiwgMHgzMDYzMDAwNiwgMHgxMDYyMDAwZCwgMHgyYzYyMDAwMywgMHg1MDQwMDAwNSwgMHgyNDAyMDAwNCwKLQkweDEwNjAwMDEyLCAweDNjMDIwMDAxLCAweDBhMDAwNjJhLCAweDAwMDAwMDAwLCAweDEwNjIwMDA3LCAweDI0MDIwMDA2LAotCTB4MTQ2MjAwMGYsIDB4M2MwMjAxMTEsIDB4MGEwMDA2MjIsIDB4MDA4MjEwMjUsIDB4MGEwMDA2MjEsIDB4M2MwMjAxMDEsCi0JMHgzYzAyMDAxMSwgMHgwMDgyMTAyNSwgMHgyNDAzMDAwMSwgMHhhZjQyMTAwMCwgMHhhZjgzMDAyMCwgMHgwYTAwMDYyYSwKLQkweDAwMDAwMDAwLCAweDAwODIxMDI1LCAweGFmNDIxMDAwLCAweGFmODAwMDIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMjAsIDB4MTA0MDAwMDUsIDB4M2MwMzgwMDAsCi0JMHg4ZjQyMTAwMCwgMHgwMDQzMTAyNCwgMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwKLQkweDhmODIwMDI0LCAweDI3YmRmZmU4LCAweDMwNDI0MDAwLCAweDE0NDAwMDA1LCAweGFmYmYwMDEwLCAweDBlMDAwMjJmLAotCTB4MDAwMDAwMDAsIDB4MGEwMDA2NTYsIDB4OGZiZjAwMTAsIDB4OGY2MjAwMDgsIDB4OGY2MzAwMDAsIDB4MjQwMjAwMzAsCi0JMHgwMDAzMWUwMiwgMHgzMDYzMDBmMCwgMHgxMDYyMDAwOCwgMHgyODYyMDAzMSwgMHgxNDQwMDAwZCwgMHg4ZmJmMDAxMCwKLQkweDI0MDIwMDQwLCAweDEwNjIwMDA3LCAweDAwMDAwMDAwLCAweDBhMDAwNjU2LCAweDAwMDAwMDAwLCAweDBlMDAwMmU4LAotCTB4MDAwMDAwMDAsIDB4MGEwMDA2NTYsIDB4OGZiZjAwMTAsIDB4MGUwMDAzZGIsIDB4MDAwMDAwMDAsIDB4OGZiZjAwMTAsCi0JMHgwM2UwMDAwOCwgMHgyN2JkMDAxOCwgMHg4Zjg0MDAyOCwgMHgxMDgwMDAwZiwgMHgzYzAyNjAwMCwgMHg4YzQzMGMzYywKLQkweDMwNjMwZmZmLCAweGFmODMwMDA4LCAweDE0NjAwMDExLCAweDMwODIwMDBmLCAweDEwNDAwMDA1LCAweDMwODIwMGYwLAotCTB4MTA0MDAwMDMsIDB4MzA4MjBmMDAsIDB4MTQ0MDAwMDYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsCi0JMHgyNDAwMDUxYSwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDUxZiwKLQkweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweGFmODMwMDI4LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLCAweDEwYzAwMDA3LAotCTB4MDAwMDAwMDAsIDB4OGNhMjAwMDAsIDB4MjRjNmZmZmYsIDB4MjRhNTAwMDQsIDB4YWM4MjAwMDAsIDB4MTRjMGZmZmIsCi0JMHgyNDg0MDAwNCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwYTAwMDY4NCwgMHgwMGEwMTAyMSwgMHhhYzg2MDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI0ODQwMDA0LCAweDAwYTAxMDIxLCAweDE0NDBmZmZhLCAweDI0YTVmZmZmLAotCTB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9Oworc3RhdGljIHU4IGJueDJfVFBBVF9iMDZGd1RleHRbXSA9IHsKKwkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweDQ3LCAweGQyLCAweDQxLCAweDQ0LCAweDAwLCAweDAzLCAweDc0LCAweDY1LAorCTB4NzMsIDB4NzQsIDB4MzEsIDB4MmUsIDB4NjIsIDB4NjksIDB4NmUsIDB4MDAsIDB4YzUsIDB4NTcsIDB4NGQsIDB4NjgsCisJMHgxYywgMHhlNywgMHgxOSwgMHg3ZSwgMHhlNywgMHg3NywgMHg0NywgMHg2MiwgMHgyNSwgMHg4ZCwgMHg5MywgMHgzZCwKKwkweGFjLCAweDVkLCAweGE1LCAweDk5LCAweDkxLCAweDQ2LCAweDNmLCAweDU0LCAweDI2LCAweDllLCAweDg0LCAweGE1LAorCTB4NTYsIDB4NjEsIDB4MjAsIDB4ZTMsIDB4OTksIDB4OTUsIDB4MmMsIDB4MGMsIDB4MDUsIDB4MDcsIDB4NDIsIDB4MDgsCisJMHhlNCwgMHhiMiwgMHgxZCwgMHg0OSwgMHgzNiwgMHg4NSwgMHgxZSwgMHg1YSwgMHg5YSwgMHg0MywgMHhhMCwgMHgwNSwKKwkweDBmLCAweDMzLCAweGViLCAweDM0LCAweDg3LCAweGM1LCAweGRiLCAweGFhLCAweGM1LCAweGJlLCAweDk0LCAweGQ2LAorCTB4OTUsIDB4ZWEsIDB4ZTgsIDB4YjIsIDB4NjgsIDB4ZTIsIDB4NTMsIDB4MGYsIDB4YzUsIDB4ZDgsIDB4YjQsIDB4NTQsCisJMHhkMCwgMHg1MywgMHg3YiwgMHgwYSwgMHg4NSwgMHg1YywgMHg0YywgMHg2OSwgMHgyMCwgMHg4NSwgMHgxMiwgMHg0NCwKKwkweDBmLCAweDIxLCAweGQ0LCAweGFkLCAweGE3LCAweGNmLCAweGZiLCAweGNkLCAweDhjLCAweGJjLCAweGJiLCAweDk1LAorCTB4NWIsIDB4MWYsIDB4MDIsIDB4MTUsIDB4YWMsIDB4NjYsIDB4ZTYsIDB4ZmIsIDB4ZGUsIDB4ZjcsIDB4ZmIsIDB4NzksCisJMHg5ZiwgMHhlNywgMHg3OSwgMHhiZiwgMHhmNywgMHg2YiwgMHhjYSwgMHgzNCwgMHg0OSwgMHhlNSwgMHhkZiwgMHgxNCwKKwkweDdlLCAweDZmLCAweDdmLCAweGUzLCAweGRiLCAweDZmLCAweDdmLCAweGY1LCAweGE1LCAweDU3LCAweDJjLCAweGEyLAorCTB4NTcsIDB4NWUsIDB4OTIsIDB4NjQsIDB4NWQsIDB4YTYsIDB4MmYsIDB4ZTAsIDB4NGYsIDB4MjEsIDB4MzIsIDB4YWIsCisJMHhmMSwgMHhmOSwgMHg0NywgMHg4NiwgMHhlYywgMHg3NSwgMHhjZSwgMHgwNCwgMHgwZSwgMHgxOSwgMHg4YSwgMHg3NywKKwkweDM0LCAweGJiLCAweGU5LCAweDEwLCAweGY5LCAweDgzLCAweDE1LCAweDJiLCAweGE0LCAweDdmLCAweGU1LCAweDcxLAorCTB4NDMsIDB4MjUsIDB4NmUsIDB4N2YsIDB4YzEsIDB4ZmIsIDB4ZTcsIDB4YjksIDB4N2IsIDB4ZTcsIDB4ZWQsIDB4YTMsCisJMHhkYiwgMHgwYSwgMHgxOSwgMHhhNiwgMHhkNywgMHgzMSwgMHhjYywgMHg0NSwgMHgzMiwgMHg2NiwgMHhlMSwgMHhmMywKKwkweGQzLCAweGE1LCAweDc1LCAweDhkLCAweGE2LCAweGFiLCAweGIxLCAweDRjLCAweDRhLCAweGZhLCAweDA2LCAweGFkLAorCTB4ZjUsIDB4MzAsIDB4OGUsIDB4ZjMsIDB4OGUsIDB4MTQsIDB4NjYsIDB4YWEsIDB4MTQsIDB4ZGUsIDB4MzIsIDB4NDgsCisJMHhmNiwgMHg3YywgMHgyOSwgMHhjOCwgMHgxYywgMHhmNCwgMHg0OSwgMHgxNCwgMHhiOCwgMHgzNSwgMHhmMiwgMHhjZCwKKwkweDNjLCAweGZmLCAweGE2LCAweDJiLCAweDkzLCAweGVjLCAweDNjLCAweGNlLCAweGU3LCAweDE3LCAweGQ2LCAweGE1LAorCTB4NjAsIDB4N2YsIDB4NDMsIDB4MGEsIDB4ZjcsIDB4MDMsIDB4ZGUsIDB4MzcsIDB4ZDYsIDB4YjEsIDB4MmUsIDB4ZjksCisJMHhmYiwgMHhmYywgMHhmNCwgMHg4YywgMHhiMCwgMHgzNywgMHg0ZCwgMHg5ZCwgMHgwNiwgMHhjZCwgMHhjOCwgMHgwZSwKKwkweGZiLCAweDVhLCAweDE0LCAweGJhLCAweDJiLCAweDRkLCAweDg1LCAweGU2LCAweGYxLCAweDliLCAweGEwLCAweDZkLAorCTB4OTcsIDB4ZWEsIDB4ODEsIDB4NGIsIDB4YWEsIDB4ZTIsIDB4YzgsIDB4MTQsIDB4MzYsIDB4MjQsIDB4ZmEsIDB4NjUsCisJMHg0YiwgMHhjMywgMHhlZiwgMHg5MiwgMHhkNCwgMHhkZSwgMHhkZiwgMHgyYSwgMHhjNywgMHg2OSwgMHg1MCwgMHg4YSwKKwkweGI1LCAweDQ0LCAweDBkLCAweDVlLCAweDViLCAweGUxLCAweDFmLCAweGI4LCAweDJiLCAweGE2LCAweDRjLCAweGYzLAorCTB4ZjgsIDB4NGQsIDB4ZTEsIDB4M2QsIDB4ODIsIDB4OWQsIDB4NDYsIDB4NDEsIDB4NmIsIDB4YmMsIDB4NmYsIDB4MDIsCisJMHhlZiwgMHg1OCwgMHgyNywgMHhjNiwgMHgwYSwgMHhjNCwgMHgzYSwgMHgyYywgMHhhYywgMHhjMywgMHhhMSwgMHg2ZSwKKwkweDdmLCAweDAzLCAweGZiLCAweDU4LCAweDY4LCAweDQ2LCAweGE0LCAweDUzLCAweDU3LCAweGFjLCAweDdkLCAweDhhLAorCTB4MTIsIDB4NTMsIDB4YTEsIDB4ZTQsIDB4YWMsIDB4NDYsIDB4ZmUsIDB4NjUsIDB4MTUsIDB4ZGYsIDB4Y2YsIDB4NTEsCisJMHg2YywgMHg0YSwgMHhiMCwgMHhlOSwgMHg5NiwgMHhmOCwgMHhkNSwgMHhkMCwgMHhhZiwgMHhhMywgMHg3ZCwgMHg4NiwKKwkweDkyLCAweGM2LCAweDI5LCAweDQ5LCAweGY2LCAweGJlLCAweDhmLCAweGY2LCAweDA1LCAweDMzLCAweGEyLCAweGVmLAorCTB4ZTEsIDB4MjksIDB4ZTEsIDB4ZmIsIDB4MTQsIDB4OGYsIDB4ODcsIDB4NmYsIDB4ODksIDB4MTQsIDB4ODcsIDB4Y2MsCisJMHgyMCwgMHhiMywgMHgyOCwgMHhjZCwgMHgyYSwgMHg1ZiwgMHg2ZSwgMHgyZiwgMHhkYSwgMHhlMiwgMHg2YywgMHgxYywKKwkweDNiLCAweGQ4LCAweGY1LCAweDVmLCAweGE1LCAweDhlLCAweDQ5LCAweGIxLCAweGVhLCAweGMxLCAweGE2LCAweGVmLAorCTB4OTgsIDB4NmQsIDB4ZTAsIDB4ZTQsIDB4MGIsIDB4M2MsIDB4YmYsIDB4YzYsIDB4ZWQsIDB4ZmMsIDB4ODcsIDB4NzYsCisJMHg4YiwgMHgxNCwgMHhjZiwgMHgzMSwgMHg0MywgMHg2YSwgMHg1MSwgMHhkMSwgMHhkNywgMHgzMCwgMHg4MywgMHg1YiwKKwkweDJmLCAweDkzLCAweDJmLCAweGUyLCAweDYxLCAweGUwLCAweGRkLCAweGM0LCAweDllLCAweDc0LCAweDYwLCAweDliLAorCTB4ZjgsIDB4MzIsIDB4YzUsIDB4NGQsIDB4ODMsIDB4ZWMsIDB4ZDUsIDB4MmQsIDB4ZjQsIDB4N2MsIDB4ZGMsIDB4NTMsCisJMHgxMCwgMHg2NywgMHhjNiwgMHg0OSwgMHgyZCwgMHhmZCwgMHgxOCwgMHhkNywgMHhkZiwgMHg2MiwgMHg1ZCwgMHhiMSwKKwkweDY5LCAweGQwLCAweDBjLCAweDc1LCAweDVlLCAweGNmLCAweGYzLCAweDNiLCAweDZlLCAweDllLCAweGViLCAweDllLAorCTB4YjMsIDB4ZmMsIDB4M2UsIDB4YWQsIDB4MzQsIDB4MzUsIDB4NWEsIDB4MzQsIDB4ZjEsIDB4NDQsIDB4ZGMsIDB4MWMsCisJMHhjNCwgMHg0NiwgMHgyZCwgMHhlNywgMHg5ZiwgMHgyYSwgMHhkNywgMHhmYSwgMHg0OCwgMHg0MiwgMHhlOCwgMHhlOSwKKwkweGNmLCAweGJkLCAweGRmLCAweGYwLCAweGRlLCAweDk3LCAweGQ3LCAweDg1LCAweDdkLCAweDllLCAweGVmLCAweGFlLAorCTB4M2UsIDB4Y2QsIDB4NWUsIDB4OTMsIDB4MGIsIDB4ZmIsIDB4M2MsIDB4NWYsIDB4NmIsIDB4ZjEsIDB4N2MsIDB4MzYsCisJMHhmNiwgMHhjNiwgMHg5YywgMHgyNCwgMHg1YSwgMHgxYiwgMHhiOCwgMHg0NiwgMHhkNCwgMHhjMywgMHhiYSwgMHgxYywKKwkweDNjLCAweDA3LCAweDRkLCAweGFjLCAweGRkLCAweDVlLCAweGI2LCAweDI0LCAweDgzLCAweDEyLCAweDI3LCAweDdmLAorCTB4MTEsIDB4M2MsIDB4ZjAsIDB4NDMsIDB4YzcsIDB4ZmUsIDB4NTMsIDB4YTgsIDB4ZDQsIDB4NjgsIDB4Y2YsIDB4YWQsCisJMHg1MywgMHgzNywgMHg2YiwgMHg1MiwgMHg5MiwgMHg3NSwgMHgyOSwgMHhjOCwgMHg2NCwgMHg4YywgMHg1ZiwgMHhhMywKKwkweDVkLCAweGU3LCAweGYzLCAweDdjLCAweGNkLCAweDc1LCAweDgxLCAweDMzLCAweGIxLCAweDVmLCAweDczLCAweDhkLAorCTB4NjYsIDB4ZDEsIDB4YmYsIDB4NjIsIDB4NmUsIDB4OTEsIDB4OGIsIDB4OTgsIDB4Y2IsIDB4ODgsIDB4YzksIDB4YmMsCisJMHg3OCwgMHg0ZiwgMHgzMiwgMHgxNywgMHhmZCwgMHgxNCwgMHhjYiwgMHgyZCwgMHhkYiwgMHg0YywgMHhjOCwgMHg2ZSwKKwkweDA2LCAweDBhLCAweDk5LCAweGIyLCAweDY3LCAweGMyLCAweDI2LCAweGE2LCAweDc2LCAweDY2LCAweGQwLCAweDQzLAorCTB4ZTUsIDB4MWQsIDB4YzEsIDB4ZTMsIDB4YjQsIDB4ZmYsIDB4MzAsIDB4YmYsIDB4YjcsIDB4ZDQsIDB4YTQsIDB4ZmIsCisJMHg1OSwgMHg4MywgMHhlZSwgMHg2NiwgMHgyNCwgMHg0NywgMHgxYywgMHhhYiwgMHg4NiwgMHg0OSwgMHgxZiwgMHg2NCwKKwkweGQ1LCAweDNlLCAweGMwLCAweDY1LCAweDI3LCAweDM5LCAweGEzLCAweDQwLCAweDY3LCAweDliLCAweGVlLCAweDAzLAorCTB4YjAsIDB4YzQsIDB4MDYsIDB4MGUsIDB4MzEsIDB4ZjYsIDB4NWMsIDB4M2QsIDB4NzksIDB4NGYsIDB4YjcsIDB4Y2YsCisJMHg2YywgMHgzYSwgMHhmNiwgMHg3YiwgMHgyMSwgMHhiMywgMHhmMywgMHg4NiwgMHg4YSwgMHhkNiwgMHhlMSwgMHgzOCwKKwkweDdjLCAweDFkLCAweGZlLCAweDI2LCAweDVkLCAweDg3LCAweDVlLCAweDY0LCAweGM0LCAweDYzLCAweGVlLCAweGMwLAorCTB4YTAsIDB4ZmQsIDB4NWUsIDB4OGQsIDB4YWMsIDB4NWQsIDB4OTUsIDB4YTIsIDB4N2UsIDB4ODMsIDB4ZGMsIDB4NDUsCisJMHhkYiwgMHgyMiwgMHg1OSwgMHg2ZSwgMHhjOCwgMHg4OCwgMHhkZiwgMHhkYywgMHg2ZSwgMHg0ZSwgMHhlYiwgMHhhZSwKKwkweDQ2LCAweDg3LCAweGNlLCAweDc3LCAweDc1LCAweDlhLCAweDRlLCAweDVjLCAweDlkLCAweGQ4LCAweGM2LCAweGEwLAorCTB4YjksIDB4ZjcsIDB4MGQsIDB4MjksIDB4ZWMsIDB4ZjMsIDB4ZmEsIDB4MzksIDB4Y2UsIDB4NDYsIDB4MTksIDB4NjcsCisJMHg1NSwgMHgwYSwgMHg2ZSwgMHhkNSwgMHg2OCwgMHg3ZSwgMHhlNywgMHg2ZiwgMHg3OSwgMHhlMCwgMHgyMCwgMHhjNiwKKwkweGUwLCAweGYxLCAweDY2LCAweGNiLCAweDU2LCAweDY4LCAweDEyLCAweDZkLCAweGJiLCAweGRjLCAweDc3LCAweDU0LAorCTB4YjYsIDB4ZjMsIDB4MTgsIDB4NzksIDB4MWUsIDB4YjgsIDB4Y2YsIDB4NTMsIDB4YzAsIDB4ZmMsIDB4N2UsIDB4OWQsCisJMHg3ZCwgMHg2YSwgMHgzNCwgMHhiNywgMHhjMywgMHhiYSwgMHhjMCwgMHg3MywgMHg5NywgMHhiZiwgMHg3OSwgMHg2ZCwKKwkweDEzLCAweDE0LCAweDYxLCAweDM3LCAweGQxLCAweDcyLCAweDAzLCAweGZiLCAweDk3LCAweDg1LCAweDA2LCAweDIyLAorCTB4ZWMsIDB4NTYsIDB4NzYsIDB4MjYsIDB4ZjEsIDB4MTQsIDB4NzEsIDB4NTAsIDB4MGEsIDB4M2UsIDB4NzMsIDB4NWUsCisJMHhhOCwgMHg1MywgMHgwOCwgMHg1YywgMHg1NSwgMHhhYywgMHg2NywgMHg4YiwgMHgxNiwgMHg5YSwgMHhkYiwgMHhhMiwKKwkweDBmLCAweDZkLCAweDAzLCAweGVlLCAweDMzLCAweGM3LCAweGZhLCAweGYwLCAweDNkLCAweGE4LCAweGQ2LCAweDIwLAorCTB4MDMsIDB4ZjMsIDB4MTQsIDB4YjMsIDB4NjgsIDB4NjIsIDB4YWYsIDB4NmIsIDB4MmUsIDB4ZGIsIDB4YjMsIDB4NmQsCisJMHhiYywgMHhhYywgMHg5MSwgMHhiZCwgMHhiYywgMHg4YiwgMHhkMSwgMHhmNywgMHg3YiwgMHhkOCwgMHhlZiwgMHg0ZCwKKwkweGNlLCAweDM1LCAweDhlLCAweGY1LCAweDE3LCAweDYyLCAweGZiLCAweDc5LCAweGVjLCAweDc5LCAweDYxLCAweDM1LAorCTB4ZTUsIDB4YmUsIDB4ODEsIDB4NDYsIDB4Y2UsIDB4NGUsIDB4NmMsIDB4YWEsIDB4ODgsIDB4YmQsIDB4OGMsIDB4YzAsCisJMHg4NywgMHgzZiwgMHhmYywgMHgyYywgMHhkNywgMHgzYywgMHg3MCwgMHhiOCwgMHgzNSwgMHgwMywgMHg2YywgMHg2YywKKwkweDJiLCAweDg1LCAweDllLCAweDFkLCAweDhjLCAweDliLCAweGI4LCAweDBhLCAweGZjLCAweDBhLCAweDhjLCAweGQ4LAorCTB4NmUsIDB4YmQsIDB4OTcsIDB4NTMsIDB4MmEsIDB4ZTYsIDB4YmEsIDB4YzYsIDB4NzMsIDB4MjEsIDB4ZTcsIDB4MzgsCisJMHhhYiwgMHhiZiwgMHgwMywgMHgyNywgMHgyMiwgMHhhYSwgMHhkMywgMHhlMiwgMHg0MSwgMHg5ZCwgMHhhZSwgMHgwZSwKKwkweGVhLCAweDM0LCAweDc3LCAweDQzLCAweDQ3LCAweDFjLCAweGYyLCAweGJjLCAweGRiLCAweDYyLCAweDBkLCAweDAyLAorCTB4NmIsIDB4ODcsIDB4ZWQsIDB4ZWMsIDB4YTYsIDB4MjIsIDB4ZjMsIDB4M2EsIDB4ZDAsIDB4N2YsIDB4NDAsIDB4YjQsCisJMHgzNSwgMHhkMCwgMHgxMSwgMHgzNywgMHg3NSwgMHg2OCwgMHg2YywgMHg5OSwgMHgyZSwgMHhmZSwgMHg4NCwgMHhlOCwKKwkweGUyLCAweDgwLCAweDdkLCAweDc5LCAweGZjLCAweGMyLCAweDI3LCAweGMyLCAweDllLCAweDY1LCAweDYwLCAweDdlLAorCTB4NzUsIDB4MjAsIDB4MjMsIDB4MWYsIDB4MjAsIDB4NWYsIDB4ZWUsIDB4MDcsIDB4YzgsIDB4ODMsIDB4NmQsIDB4ZmMsCisJMHhkNiwgMHg5MSwgMHgxYiwgMHgxOSwgMHgxYiwgMHhjZSwgMHgxMywgMHg4ZiwgMHg4MSwgMHhjZiwgMHgwNiwgMHhmYSwKKwkweDJlLCAweGExLCAweDhkLCAweGYzLCAweDE2LCAweGRiLCAweGVhLCAweGQ0LCAweDc2LCAweGE3LCAweDI4LCAweGFkLAorCTB4NzIsIDB4OTEsIDB4YzksIDB4YjksIDB4ZTgsIDB4MTQsIDB4ZjgsIDB4MzQsIDB4ODEsIDB4ZmMsIDB4NzIsIDB4NDcsCisJMHgxOSwgMHhjZCwgMHg0NSwgMHhjOCwgMHg1OSwgMHg4ZCwgMHhkMywgMHhjOCwgMHgzZCwgMHgzZiwgMHg0NywgMHgzYiwKKwkweDhmLCAweGY3LCAweDMzLCAweDNjLCAweDI3LCAweGYwLCAweDdkLCAweDFhLCAweGI2LCAweGMzLCAweDc5LCAweGE4LAorCTB4ZjIsIDB4N2IsIDB4NWEsIDB4MGUsIDB4MDIsIDB4ZWYsIDB4NzYsIDB4MGMsIDB4ZDgsIDB4NWIsIDB4ZDAsIDB4MGIsCisJMHhjNywgMHhiYiwgMHg4NiwgMHg3YywgMHhjMSwgMHgzMSwgMHhhZiwgMHgyMSwgMHhhNiwgMHgzYSwgMHhlNiwgMHgzNiwKKwkweDY5LCAweGZlLCAweDgwLCAweDYyLCAweGE1LCAweGNjLCAweDRmLCAweGUxLCAweDcxLCAweDdlLCAweDZhLCAweDBhLAorCTB4MWUsIDB4MjQsIDB4OTksIDB4MDksIDB4MWYsIDB4ZDYsIDB4NmQsIDB4YTUsIDB4NTMsIDB4YzYsIDB4OGUsIDB4ZmMsCisJMHgwMCwgMHgxYSwgMHgwZSwgMHg5NCwgMHgzYywgMHhkZiwgMHhjNCwgMHgxOSwgMHgxMSwgMHgwMSwgMHg3NywgMHgxZiwKKwkweGRhLCAweDhkLCAweGEwLCAweGRkLCAweDcwLCAweDQ4LCAweGJiLCAweGUxLCAweGZmLCAweGQ0LCAweDJlLCAweDc0LAorCTB4MDksIDB4OGQsIDB4ZGMsIDB4MDUsIDB4YTcsIDB4M2UsIDB4ZTgsIDB4OWYsIDB4YTQsIDB4NjMsIDB4ZDYsIDB4MzAsCisJMHg2YiwgMHhkOSwgMHhhMiwgMHg3YiwgMHg0YiwgMHhjZiwgMHhhMiwgMHhlNSwgMHhiZiwgMHgzZSwgMHhhYiwgMHg5NiwKKwkweDYzLCAweGQ2LCAweGIyLCAweGNhLCAweDVhLCAweDZlLCAweDBjLCAweDZiLCAweGY5LCAweDUzLCAweGY4LCAweDE3LAorCTB4OWEsIDB4YmMsIDB4YTAsIDB4MzYsIDB4NDgsIDB4NWIsIDB4MDQsIDB4MGUsIDB4M2IsIDB4NzUsIDB4NTIsIDB4NmUsCisJMHgzYywgMHhlMSwgMHgxYiwgMHg3MywgMHgzOCwgMHgxYywgMHhlMCwgMHhkZiwgMHg4MSwgMHg4NiwgMHgzZSwgMHg2OSwKKwkweGI0LCAweDFkLCAweDM5LCAweDRmLCAweGY1LCAweGVjLCAweGU2LCAweDk2LCAweGIwLCAweDUxLCAweDQ5LCAweDQ3LAorCTB4ZGMsIDB4YmYsIDB4YjMsIDB4NjQsIDB4NWIsIDB4OTYsIDB4M2MsIDB4YWMsIDB4NzksIDB4YTgsIDB4N2UsIDB4MjcsCisJMHhiZiwgMHhhNiwgMHg3OSwgMHgzYywgMHg0ZiwgMHg2YywgMHg4MSwgMHhlYiwgMHhkNiwgMHg4ZiwgMHg4MCwgMHg1MSwKKwkweGRhLCAweDYzLCAweDllLCAweDNiLCAweGU2LCAweDlhLCAweGUwLCAweDE3LCAweGJlLCAweGExLCAweDA1LCAweDBkLAorCTB4N2MsIDB4YWQsIDB4YzEsIDB4NGUsIDB4ZGQsIDB4MjksIDB4ZjQsIDB4NzMsIDB4MTcsIDB4ZTMsIDB4ZWUsIDB4ZjUsCisJMHg5OCwgMHg1ZiwgMHgwNiwgMHhlOSwgMHgzNywgMHg5ZCwgMHhlNiwgMHg1NSwgMHg5MSwgMHg3MywgMHhlNywgMHhjZCwKKwkweDc1LCAweDYyLCAweGVkLCAweGYxLCAweDc5LCAweDg3LCAweGZlLCAweDQxLCAweDhkLCAweDE0LCAweGExLCAweGY3LAorCTB4YzksIDB4NTIsIDB4ZWYsIDB4MmYsIDB4MjAsIDB4NDYsIDB4OTMsIDB4ZjgsIDB4NjYsIDB4Y2QsIDB4OWYsIDB4MmUsCisJMHgzNSwgMHgzZiwgMHg4ZCwgMHgyNywgMHhiNywgMHg1ZCwgMHg1NCwgMHgwYiwgMHhlZSwgMHg4MCwgMHg4NywgMHgzYiwKKwkweDhjLCAweDZiLCAweDFkLCAweGY5LCAweDhkLCAweGU3LCAweGZmLCAweDdiLCAweGJlLCAweGU5LCAweDMwLCAweGI2LAorCTB4OGUsIDB4ZjUsIDB4MDMsIDB4NWEsIDB4ODAsIDB4ZWUsIDB4ZDAsIDB4N2UsIDB4YzAsIDB4YjYsIDB4ZWMsIDB4NTMsCisJMHhkOSwgMHg5YSwgMHhhNSwgMHhlZCwgMHhhNywgMHg2MywgMHhiNiwgMHg2OCwgMHgzZiwgMHg2MCwgMHgzYiwgMHhkNiwKKwkweGM1LCAweDczLCAweGE0LCAweGRjLCAweGU0LCAweGYzLCAweDM4LCAweDYwLCAweDVkLCAweGMwLCAweGFmLCAweDhkLAorCTB4MzYsIDB4YWUsIDB4MTksIDB4ZDgsIDB4OWYsIDB4Y2YsIDB4NjYsIDB4NWUsIDB4MjcsIDB4ZDcsIDB4MTMsIDB4N2MsCisJMHg3ZSwgMHg4ZiwgMHg5ZCwgMHhkMywgMHhjNywgMHhkYSwgMHhiOCwgMHgwMCwgMHhiZSwgMHg3ZiwgMHg0YiwgMHhmZCwKKwkweDRmLCAweDZkLCAweGJjLCAweDA2LCAweDJkLCAweDVjLCAweDUxLCAweDBiLCAweDZkLCAweDZjLCAweGUzLCAweDc5LAorCTB4MDEsIDB4ZGYsIDB4YWYsIDB4OGQsIDB4NjksIDB4YTMsIDB4ZjIsIDB4N2IsIDB4ZmEsIDB4ZjksIDB4OWMsIDB4ZjQsCisJMHg5YiwgMHhlMiwgMHg2YywgMHhlNSwgMHhmOSwgMHg5NCwgMHgxZCwgMHg4YSwgMHhiNSwgMHg1MiwgMHgwNywgMHg2YiwKKwkweGM3LCAweDNhLCAweDk4LCAweDQ0LCAweGFlLCAweDE4LCAweGUxLCAweGI4LCAweDEyLCAweGJhLCAweGI2LCAweDk5LAorCTB4MTIsIDB4NmIsIDB4NjIsIDB4ZjgsIDB4ZmMsIDB4ZmEsIDB4N2YsIDB4ZTksIDB4ODIsIDB4YzAsIDB4MjMsIDB4MzEsCisJMHgzNywgMHg2YSwgMHgwYywgMHgzZSwgMHgwZiwgMHhmMiwgMHhmYywgMHg4YSwgMHg4YiwgMHhmZSwgMHhhYSwgMHhkNiwKKwkweDEwLCAweGQ4LCAweGYzLCAweDU5LCAweGNiLCAweDc4LCAweGEwLCAweGJlLCAweDczLCAweGU2LCAweGExLCAweDA1LAorCTB4Y2UsIDB4MDEsIDB4OGYsIDB4ZjMsIDB4M2QsIDB4MjcsIDB4NDAsIDB4NWIsIDB4MWIsIDB4ZjEsIDB4NjcsIDB4NGMsCisJMHgzNiwgMHhhNCwgMHhmNSwgMHg3ZCwgMHg4MywgMHhmZCwgMHhhMCwgMHhiMywgMHg5MywgMHg2YSwgMHgyYywgMHgxZCwKKwkweDlhLCAweDdhLCAweDgyLCAweDEzLCAweGYzLCAweDI4LCAweDFhLCAweGMyLCAweGE5LCAweDIzLCAweDcwLCAweGZhLAorCTB4ZjAsIDB4MTgsIDB4YTcsIDB4YTgsIDB4YzQsIDB4MjksIDB4MTIsIDB4MzgsIDB4ZmQsIDB4YjEsIDB4YzQsIDB4ZTksCisJMHgwZiwgMHg0ZiwgMHhjMSwgMHhlOSwgMHhjMywgMHg2NywgMHhjMCwgMHhjOSwgMHhhMCwgMHgzZCwgMHhhNywgMHg4OSwKKwkweDczLCAweDU2LCAweDE3LCAweDM1LCAweGU5LCAweGExLCAweDdiLCAweDUyLCAweDRkLCAweDc1LCAweDUyLCAweGRjLAorCTB4NmQsIDB4NzMsIDB4OGYsIDB4ODYsIDB4ZWIsIDB4MGUsIDB4ZGIsIDB4N2EsIDB4ODAsIDB4ZjUsIDB4YTUsIDB4YzAsCisJMHhlZSwgMHhmYSwgMHg1OCwgMHhlZCwgMHg5MSwgMHhjMCwgMHhiZSwgMHg1ZCwgMHhlMiwgMHg3NCwgMHgxZCwgMHgzOCwKKwkweGI1LCAweDRiLCAweDljLCAweGI2LCAweDg3LCAweDcwLCAweGRhLCAweDFlLCAweGMxLCAweDg5LCAweGYzLCAweDQ5LAorCTB4Y2IsIDB4ZDgsIDB4ZWUsIDB4NTUsIDB4MTgsIDB4NTUsIDB4ZjgsIDB4ZTgsIDB4NzQsIDB4ZGIsIDB4OWMsIDB4YzYsCisJMHhmZSwgMHhjZiwgMHg1MSwgMHhmYSwgMHg2MywgMHg5NSwgMHhlYiwgMHg1YSwgMHg2MCwgMHhmNywgMHhhYSwgMHgyYSwKKwkweDhiLCAweGYzLCAweDgwLCAweGRmLCAweDlmLCAweGQ0LCAweDI3LCAweDk4LCAweGNiLCAweDBmLCAweDVjLCAweDhlLAorCTB4MjMsIDB4ZWEsIDB4NTcsIDB4YTcsIDB4Y2EsIDB4NDMsIDB4Y2YsIDB4YWIsIDB4YTgsIDB4YWQsIDB4ZjAsIDB4Y2QsCisJMHgzNiwgMHhhYSwgMHhkNCwgMHg4NiwgMHhkZSwgMHgxNSwgMHhkNCwgMHhlNSwgMHhlMSwgMHg3MSwgMHg1ZCwgMHg1ZSwKKwkweGM0LCAweGUwLCAweDdhLCAweDU5LCAweDk3LCAweGVmLCAweDM5LCAweDVjLCAweDk3LCAweDJmLCAweDZhLCAweDM0LAorCTB4YjksIDB4NTEsIDB4NjIsIDB4YzksIDB4OWMsIDB4OWUsIDB4NDIsIDB4ZGYsIDB4MjUsIDB4ODEsIDB4NzksIDB4OGEsCisJMHhmYywgMHhiZCwgMHg4OSwgMHhmZCwgMHg0NywgMHg4MiwgMHg5YiwgMHhhOCwgMHhiMSwgMHg0YSwgMHhkZSwgMHhhMiwKKwkweDg2LCAweGE1LCAweDMwLCAweDJiLCAweDYyLCAweGY1LCAweGM1LCAweGQ2LCAweDVkLCAweDlmLCAweDIwLCAweDRmLAorCTB4MWIsIDB4MWQsIDB4MTUsIDB4NzUsIDB4ZmQsIDB4ZmQsIDB4OGMsIDB4ZjMsIDB4MzMsIDB4NWQsIDB4NGUsIDB4N2EsCisJMHgxNCwgMHg5ZiwgMHhmMSwgMHhhZSwgMHhlNSwgMHhjMCwgMHhkYywgMHg3ZiwgMHhlYiwgMHgzYywgMHg5ZiwgMHgzMywKKwkweGY1LCAweGQ1LCAweGEwLCAweDg1LCAweGY2LCAweDgxLCAweDQxLCAweGE4LCAweDdkLCAweDcwLCAweDRmLCAweGExLAorCTB4MzgsIDB4MzgsIDB4MmYsIDB4YTEsIDB4YzYsIDB4YzEsIDB4MzcsIDB4N2MsIDB4OTIsIDB4NmMsIDB4YjYsIDB4MjMsCisJMHg3YiwgMHg0ZCwgMHg3MCwgMHgyMSwgMHgyNiwgMHgxZiwgMHhlYiwgMHhmNCwgMHgzMywgMHg3MSwgMHg1NywgMHhlOSwKKwkweDI4LCAweDllLCAweDgxLCAweGRhLCAweDkyLCAweDBjLCAweDljLCAweGYzLCAweDg4LCAweDg5LCAweDY1LCAweGE0LAorCTB4MDMsIDB4ZDQsIDB4NDEsIDB4MzgsIDB4ZmIsIDB4ODMsIDB4NTUsIDB4YzQsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4Y2IsCisJMHg1NCwgMHhmOCwgMHhiZSwgMHhhOSwgMHgxNywgMHhmNywgMHgxYywgMHg1NCwgMHgzNSwgMHgyMiwgMHg1ZSwgMHg4ZiwKKwkweDRhLCAweDdlLCAweDg4LCAweDNhLCAweDRiLCAweDZhLCAweGY3LCAweGM5LCAweDhhLCAweDVjLCAweGYwLCAweDFjLAorCTB4ZTcsIDB4NDgsIDB4MzcsIDB4ZTMsIDB4ZGEsIDB4ZjksIDB4YWMsIDB4MjEsIDB4ZGYsIDB4ZTAsIDB4NWMsIDB4N2UsCisJMHg4OCwgMHgxOCwgMHhlMiwgMHhmZCwgMHg4MCwgMHhjZiwgMHgxNiwgMHg4NSwgMHhlYiwgMHg2ZiwgMHhkYywgMHg2NywKKwkweDk2LCAweDkwLCAweDZiLCAweDY4LCAweDBhLCAweDc5LCAweDBmLCAweDc5LCAweDc3LCAweDk2LCAweDcxLCAweGYyLAorCTB4MjMsIDB4YzYsIDB4NGIsIDB4OWMsIDB4MWIsIDB4ZTcsIDB4ZTQsIDB4NjIsIDB4OWUsIDB4NWYsIDB4NmIsIDB4MDUsCisJMHg3ZiwgMHg3MSwgMHg4NywgMHg0MSwgMHhmYywgMHgzNiwgMHhmYiwgMHgyZSwgMHhlNywgMHhkYiwgMHgyZiwgMHgyYiwKKwkweDc0LCAweDQ0LCAweDgyLCAweDhmLCAweGU2LCAweGNiLCAweGM4LCAweGMzLCAweGU3LCAweGUwLCAweGUzLCAweDBiLAorCTB4MmQsIDB4MTYsIDB4ZjUsIDB4NTYsIDB4ZTUsIDB4ZjMsIDB4YzksIDB4ZDgsIDB4MTgsIDB4MWYsIDB4MjksIDB4YTMsCisJMHhkZiwgMHgzZSwgMHhmOCwgMHhiYywgMHg1MiwgMHhjZSwgMHg1NywgMHhmMSwgMHhlMywgMHg1NywgMHhlMCwgMHhjNywKKwkweDYxLCAweGQ5LCAweGNmLCAweDc3LCAweDE2LCAweDFkLCAweDM2LCAweGJjLCAweDNlLCAweGU2LCAweDExLCAweGRiLAorCTB4OWIsIDB4ZGEsIDB4ZTgsIDB4MTgsIDB4NWYsIDB4MWEsIDB4ZjMsIDB4ZmYsIDB4ZmQsIDB4OTAsIDB4ZmYsIDB4MzQsCisJMHhlZiwgMHhjOSwgMHg4YywgMHgwYSwgMHgwZSwgMHhlMiwgMHhlZiwgMHgzZCwgMHg3ZCwgMHhkNCwgMHhmNywgMHgxNywKKwkweDZhLCAweGYxLCAweDdkLCAweGI2LCAweGUwLCAweDllLCAweDgzLCAweDY3LCAweDc2LCAweDM4LCAweGI0LCAweDM2LAorCTB4NzUsIDB4NmMsIDB4ZWMsIDB4ODcsIDB4MTgsIDB4N2IsIDB4MTUsIDB4NzksIDB4ODQsIDB4N2MsIDB4MDUsIDB4NzcsCisJMHhhNiwgMHg5MCwgMHhmMCwgMHg5ZSwgMHg1ZCwgMHhhOSwgMHhlMiwgMHgwMywgMHg0ZSwgMHhkMCwgMHhlNSwgMHhiNCwKKwkweGU0LCAweDgyLCAweDVjLCAweDcwLCAweDgxLCAweGViLCAweGI0LCAweGQ1LCAweDRkLCAweDcwLCAweDIxLCAweDA1LAorCTB4MTcsIDB4ZTAsIDB4ZDcsIDB4ZDEsIDB4YmMsIDB4NTksIDB4ZTAsIDB4Y2MsIDB4MzksIDB4MDcsIDB4ZGYsIDB4MTksCisJMHhmMywgMHg4MiwgMHg3OSwgMHhjMCwgMHg5YywgMHg3OCwgMHhjMiwgMHg4NSwgMHgyYiwgMHgzZCwgMHhjMywgMHhkOCwKKwkweGZkLCAweDJmLCAweDNjLCAweDc4LCAweDU3LCAweGYwLCAweDgwLCAweGY5LCAweDU4LCAweGU0LCAweDg1LCAweDJlLAorCTB4NzAsIDB4NDgsIDB4Y2EsIDB4YmMsIDB4NTAsIDB4ZTgsIDB4OWMsIDB4ZWIsIDB4MWIsIDB4ZDYsIDB4NzgsIDB4YTEsCisJMHg4ZCwgMHgyZCwgMHg2OCwgMHhhMywgMHhhZCwgMHg3MCwgMHhiZCwgMHhjMywgMHhiYSwgMHg2MCwgMHgzZiwgMHhkNiwKKwkweGM2LCAweDQ5LCAweDdlLCAweDg1LCAweDQ2LCAweGQyLCAweGJlLCAweDZkLCAweDU1LCAweGY5LCAweDIxLCAweDg1LAorCTB4MmUsIDB4YmEsIDB4YTUsIDB4NDYsIDB4ZDIsIDB4NTIsIDB4MjMsIDB4YjAsIDB4ODksIDB4OTUsIDB4MTYsIDB4ZTcsCisJMHg3YSwgMHhkYiwgMHgwYSwgMHg5MSwgMHgxNywgMHhiYSwgMHg2MiwgMHhjYywgMHg5OCwgMHg4YSwgMHgzYiwgMHgwOSwKKwkweGViLCAweDk2LCAweGYzLCAweGU5LCAweDUwLCAweDFlLCAweDJkLCAweGVmLCAweGE1LCAweDFkLCAweDcxLCAweDJmLAorCTB4ZmQsIDB4OGEsIDB4M2UsIDB4OWEsIDB4NDcsIDB4NjcsIDB4OTAsIDB4NDMsIDB4ZjgsIDB4NWUsIDB4M2EsIDB4YTcsCisJMHhmMywgMHhiZCwgMHgxNCwgMHhiYSwgMHhkMywgMHg4NywgMHhlZiwgMHhhNSwgMHhjOSwgMHhjOCwgMHhiZCwgMHhiNCwKKwkweGYyLCAweGU1LCAweGY2LCAweDkzLCAweGYyLCAweDY5LCAweDE1LCAweDEzLCAweGNlLCAweGE5LCAweDAyLCAweGYzLAorCTB4MTMsIDB4NmEsIDB4YmYsIDB4Y2EsIDB4ODYsIDB4ZjMsIDB4MGQsIDB4NmIsIDB4YjksIDB4Y2MsIDB4NTEsIDB4YTgsCisJMHhiNSwgMHhlZSwgMHg2NywgMHgxNSwgMHhlNywgMHhkZiwgMHhjMCwgMHgzYywgMHhmOCwgMHhlZSwgMHg5ZiwgMHhjNCwKKwkweDc5LCAweGEzLCAweGU0LCAweGZjLCAweDU0LCAweGUxLCAweGQzLCAweDFmLCAweGU2LCAweGZkLCAweDFiLCAweGZhLAorCTB4MjgsIDB4ZWYsIDB4YWIsIDB4NzEsIDB4MmEsIDB4ZGUsIDB4MTcsIDB4NjMsIDB4M2UsIDB4NTQsIDB4OWEsIDB4MzgsCisJMHhkYiwgMHg5NiwgMHg5MSwgMHg2YiwgMHg2NiwgMHhmOCwgMHhiZSwgMHg4NSwgMHg1YywgMHhlMCwgMHhkNSwgMHg3MSwKKwkweGVmLCAweDk4LCAweGUxLCAweGIxLCAweGQzLCAweDBjLCAweGU3LCAweDRkLCAweDAzLCAweGJjLCAweDE3LCAweDljLAorCTB4M2QsIDB4MTIsIDB4ZjcsIDB4MDEsIDB4YWMsIDB4N2IsIDB4ODYsIDB4YWIsIDB4YWIsIDB4NTEsIDB4MmUsIDB4YmUsCisJMHg4OCwgMHgwYiwgMHg0NSwgMHhiNSwgMHg5NywgMHhhYSwgMHhjZCwgMHgxOSwgMHg2YSwgMHg1YiwgMHgyZSwgMHhiMSwKKwkweDJlLCAweDYyLCAweGZkLCAweGEwLCAweGI4LCAweDhmLCAweGQzLCAweDJlLCAweDZhLCAweGIxLCAweDQzLCAweGQ0LAorCTB4MzksIDB4NzcsIDB4NzAsIDB4OWYsIDB4NGIsIDB4MDYsIDB4OGYsIDB4ZjIsIDB4MDcsIDB4MGQsIDB4OTUsIDB4YmEsCisJMHhjNywgMHgzZSwgMHg1ZCwgMHhhYywgMHhkNywgMHgzNiwgMHg2ZiwgMHhlMywgMHhlZCwgMHhkZCwgMHg0MSwgMHgxNSwKKwkweDUzLCAweGVlLCAweGU3LCAweGI2LCAweDdmLCAweGUwLCAweGJjLCAweDQ1LCAweDFkLCAweDM3LCAweDMyLCAweDY3LAorCTB4ZjUsIDB4Y2UsIDB4N2YsIDB4ZmYsIDB4MDYsIDB4NjMsIDB4ZTEsIDB4NGIsIDB4N2IsIDB4MzAsIDB4MTIsIDB4MDAsCisJMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgdTMyIGJueDJfVFBBVF9iMDZGd0RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKIHN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3Um9kYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CkBAIC0yNTU0LDkzOSArMTU0Myw0MjIgQEAKIHN0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndCc3NMZW4gPSAweDFjNDsKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9UWFBfYjA2RndTYnNzQWRkciA9IDB4MDgwMDU3NjA7CiBzdGF0aWMgY29uc3QgaW50IGJueDJfVFhQX2IwNkZ3U2Jzc0xlbiA9IDB4Mzg7Ci1zdGF0aWMgdTMyIGJueDJfVFhQX2IwNkZ3VGV4dFsoMHg1NzQ4LzQpICsgMV0gPSB7Ci0JMHgwYTAwMGQyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHg3NDc4NzAyMCwgMHgzMjJlMzUyZSwKLQkweDM4MDAwMDAwLCAweDAyMDUwODAwLCAweDAwMDAwMDBhLCAweDAwMDAwM2U4LCAweDAwMDBlYTYwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDEwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDBkLCAweDNjMDIwODAwLAotCTB4MjQ0MjU3NjAsIDB4M2MwMzA4MDAsIDB4MjQ2MzU5NjQsIDB4YWM0MDAwMDAsIDB4MDA0MzIwMmIsIDB4MTQ4MGZmZmQsCi0JMHgyNDQyMDAwNCwgMHgzYzFkMDgwMCwgMHgzN2JkN2ZmYywgMHgwM2EwZjAyMSwgMHgzYzEwMDgwMCwgMHgyNjEwMzRiMCwKLQkweDNjMWMwODAwLCAweDI3OWM1NzYwLCAweDBlMDAwZjViLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDhmODQwMDE0LAotCTB4MjdiZGZmZTgsIDB4YWZiMTAwMTQsIDB4YWZiMDAwMTAsIDB4OGY0NjAxMDQsIDB4OGY4MzAwMDgsIDB4OGM4NTAwYWMsCi0JMHhhZjQzMDA4MCwgMHg5NDgyMDBhOCwgMHhhNzQyMGUxMCwgMHg5NDgzMDBhYSwgMHhhNzQzMGUxMiwgMHg4YzgyMDBhYywKLQkweGFmNDIwZTE4LCAweDk3NDMwZTEwLCAweGE3NDMwZTE0LCAweDk3NDIwZTEyLCAweDAwMDA4MDIxLCAweGE3NDIwZTE2LAotCTB4OGY0MzBlMTgsIDB4MDAwMDYwMjEsIDB4MDBjNTMwMjMsIDB4YWY0MzBlMWMsIDB4MTBjMDAxYTIsIDB4MmQ4MjAwMDEsCi0JMHgzYzBlMTAwMCwgMHgyNDE5ZmZmOCwgMHgyNDExMDAxMCwgMHgyNDBmMGYwMCwgMHgzYzE4ODEwMCwgMHg5MzYyMDAwOCwKLQkweDEwNDAwMDA5LCAweDAwMDAwMDAwLCAweDk3NjIwMDEwLCAweDAwYzIxMDJiLCAweDE0NDAwMDA1LCAweDAwMDAwMDAwLAotCTB4OTc2MjAwMTAsIDB4MzA0MmZmZmYsIDB4MGEwMDBkNmQsIDB4YWY0MjBlMDAsIDB4YWY0NjBlMDAsIDB4OGY0MjAwMDAsCi0JMHgzMDQyMDAwOCwgMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5NzQyMGUwOCwgMHg4ZjQ1MGUwNCwgMHgzMDQ0ZmZmZiwKLQkweDMwODIwMDAxLCAweDE0NDAwMDA1LCAweDAwMDAwMDAwLCAweDE0YTAwMDA1LCAweDMwODNhMDQwLCAweDBhMDAwZjM0LAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MzA4M2EwNDAsIDB4MjQwMjAwNDAsIDB4MTQ2MjAwNGYsIDB4MzA4MmEwMDAsCi0JMHgzMDhhMDAzNiwgMHg4Zjg4MDAwYywgMHgzMDg5MDAwOCwgMHgyNDAyMDgwMCwgMHhhZjQyMDE3OCwgMHgwMTAwMTgyMSwKLQkweDk3NDIwMDhhLCAweDAwNDMxMDIzLCAweDI0NDJmZmZmLCAweDMwNDIxZmZmLCAweDJjNDIwMDA4LCAweDE0NDBmZmZhLAotCTB4MDBhMDYwMjEsIDB4OGY4MjAwMTgsIDB4MDBjYzMwMjMsIDB4MjQwNzAwMDEsIDB4OGY4MzAwMDgsIDB4MzA0YjAwZmYsCi0JMHgyNDQyMDAwMSwgMHhhZjgyMDAxOCwgMHgyNTAyNDAwMCwgMHgxMDZmMDAwNSwgMHgwMzQyMjAyMSwgMHg5MzgyMDAxMiwKLQkweDMwNDIwMDA3LCAweDAwMDIxMjQwLCAweDM0NDcwMDAxLCAweDAwMGIxNDAwLCAweDNjMDMwMTAwLCAweDAwNDMxMDI1LAotCTB4YWM4MjAwMDAsIDB4OGY4MzAwMTgsIDB4MDBlYTM4MjUsIDB4MTEyMDAwMGYsIDB4YWM4MzAwMDQsIDB4OTc0MzBlMGEsCi0JMHg4Zjg0MDAwYywgMHgwMGVlMzgyNSwgMHgyNDAyMDAwZSwgMHgwMDc4MTgyNSwgMHhhZjQzMDE2MCwgMHgyNTgzMDAwNiwKLQkweDI0ODQwMDA4LCAweDMwODQxZmZmLCAweGE3NDIwMTVhLCAweGE3NDMwMTU4LCAweGFmODQwMDBjLCAweDBhMDAwZGI3LAotCTB4MDAwMDAwMDAsIDB4OGY4MzAwMGMsIDB4MjU4MjAwMDIsIDB4YTc0MjAxNTgsIDB4MjQ2MzAwMDgsIDB4MzA2MzFmZmYsCi0JMHhhZjgzMDAwYywgMHg1NGMwMDAwZiwgMHg4ZjQyMGUxNCwgMHg4ZjgyMDAwOCwgMHg1MDRmMDAwMiwgMHgyNDEwMDAwMSwKLQkweDM0ZTcwMDQwLCAweDk3NDIwZTEwLCAweDk3NDMwZTEyLCAweDhmODUwMDE0LCAweDAwMDIxNDAwLCAweDAwNjIxODI1LAotCTB4YWNhMzAwYTgsIDB4OGY4NDAwMTQsIDB4OGY0MjBlMTgsIDB4YWM4MjAwYWMsIDB4OGY0MjBlMTQsIDB4OGY0MzBlMWMsCi0JMHhhZjQyMDE0NCwgMHhhZjQzMDE0OCwgMHhhMzRiMDE1MiwgMHhhZjQ3MDE1NCwgMHgwYTAwMGVmYiwgMHhhZjRlMDE3OCwKLQkweDEwNDAwMTY1LCAweDAwMDAwMDAwLCAweDkzNjIwMDA4LCAweDUwNDAwMDA4LCAweGFmYTYwMDA4LCAweDk3NjIwMDEwLAotCTB4MDBhMjEwMmIsIDB4MTA0MDAwMDMsIDB4MzA4MjAwNDAsIDB4MTA0MDAxNWMsIDB4MDAwMDAwMDAsIDB4YWZhNjAwMDgsCi0JMHhhNzg0MDAxMCwgMHhhZjg1MDAwNCwgMHg5MzYyMDAwOCwgMHgxNDQwMDA1ZiwgMHgyN2FjMDAwOCwgMHhhZjYwMDAwYywKLQkweDk3ODIwMDEwLCAweDMwNDI0MDAwLCAweDEwNDAwMDAyLCAweDI0MDMwMDBlLCAweDI0MDMwMDE2LCAweGEzNjMwMDBhLAotCTB4MjQwMzQwMDcsIDB4YWY2MzAwMTQsIDB4OTM4MjAwMTIsIDB4OGY2MzAwMTQsIDB4MzA0MjAwMDcsIDB4MDAwMjEyNDAsCi0JMHgwMDYyMTgyNSwgMHhhZjYzMDAxNCwgMHg5NzgyMDAxMCwgMHg4ZjYzMDAxNCwgMHgzMDQyMDAxMCwgMHgwMDYyMTgyNSwKLQkweGFmNjMwMDE0LCAweDk3ODIwMDEwLCAweDMwNDIwMDA4LCAweDUwNDAwMDBlLCAweDAwMDAyODIxLCAweDhmNjIwMDE0LAotCTB4MDA0ZTEwMjUsIDB4YWY2MjAwMTQsIDB4OTc0MzBlMGEsIDB4MjQwMjAwMGUsIDB4MDA3ODE4MjUsIDB4YWY2MzAwMDQsCi0JMHhhMzYyMDAwMiwgMHg5MzYzMDAwYSwgMHgzNDA1ZmZmYywgMHgyNDYzMDAwNCwgMHgwYTAwMGUwNiwgMHhhMzYzMDAwYSwKLQkweGFmNjAwMDA0LCAweGEzNjAwMDAyLCAweDk3ODIwMDEwLCAweDkzNjMwMDBhLCAweDMwNDIxZjAwLCAweDAwMDIxMTgyLAotCTB4MjQ0MjAwMjgsIDB4MDA2MjE4MjEsIDB4YTM2MzAwMDksIDB4OTc0MjBlMGMsIDB4YTc2MjAwMTAsIDB4OTM2MzAwMDksCi0JMHgyNDAyMDAwOCwgMHgyNDYzMDAwMiwgMHgzMDYzMDAwNywgMHgwMDQzMTAyMywgMHgzMDQyMDAwNywgMHhhMzYyMDAwYiwKLQkweDkzNjQwMDA5LCAweDk3NjIwMDEwLCAweDhmODkwMDA0LCAweDk3ODMwMDEwLCAweDAwNDQxMDIxLCAweDAwYTIxMDIxLAotCTB4MzA2MzAwNDAsIDB4MTA2MDAwMDcsIDB4MzA0NWZmZmYsIDB4MDBhOTEwMmIsIDB4MTQ0MDAwMDUsIDB4MDEyNTEwMmIsCi0JMHgzYzA2ODAwMCwgMHgwYTAwMGUzYSwgMHgwMDAwNTgyMSwgMHgwMTI1MTAyYiwgMHg1NDQwMDBjNywgMHgwMDAwNjAyMSwKLQkweDk3NDIwZTE0LCAweGE3NDIwZTEwLCAweDk3NDMwZTE2LCAweGE3NDMwZTEyLCAweDhmNDIwZTFjLCAweGFmNDIwZTE4LAotCTB4YWY0NTBlMDAsIDB4OGY0MjAwMDAsIDB4MzA0MjAwMDgsIDB4MTA0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OTc0MjBlMDgsCi0JMHgwMGEwNDgyMSwgMHhhNzgyMDAxMCwgMHg4ZjQzMGUwNCwgMHgwMDAwMzAyMSwgMHgyNDBiMDAwMSwgMHhhZjgzMDAwNCwKLQkweDk3NjIwMDEwLCAweDBhMDAwZTRjLCAweDMwNGRmZmZmLCAweDhmODkwMDA0LCAweDk3ODIwMDEwLCAweDMwNDIwMDQwLAotCTB4MTA0MDAwMDQsIDB4MDEyMDY4MjEsIDB4M2MwNjgwMDAsIDB4MGEwMDBlNGMsIDB4MDAwMDU4MjEsIDB4OTc2MzAwMTAsCi0JMHg4ZjgyMDAwNCwgMHgxMDQzMDAwMywgMHgwMDAwMzAyMSwgMHgwYTAwMGVlZSwgMHgwMDAwNjAyMSwgMHgyNDBiMDAwMSwKLQkweDhkODIwMDAwLCAweDAwNDkxMDIzLCAweDE0NDAwMDBkLCAweGFkODIwMDAwLCAweDhmNjIwMDE0LCAweDM0NDIwMDQwLAotCTB4YWY2MjAwMTQsIDB4OTc0MzBlMTAsIDB4OTc0MjBlMTIsIDB4OGY4NDAwMTQsIDB4MDAwMzFjMDAsIDB4MDA0MzEwMjUsCi0JMHhhYzgyMDBhOCwgMHg4ZjgzMDAxNCwgMHg4ZjQyMGUxOCwgMHhhYzYyMDBhYywgMHg5MzYyMDAwOCwgMHgxNDQwMDAzZSwKLQkweDAwMDAwMDAwLCAweDI1MjYwMDAyLCAweDhmODQwMDBjLCAweDk3NDMwMDhhLCAweDMwNjNmZmZmLCAweGFmYTMwMDAwLAotCTB4OGZhMjAwMDAsIDB4MDA0NDEwMjMsIDB4MjQ0MmZmZmYsIDB4MzA0MjFmZmYsIDB4MmM0MjAwMTAsIDB4MTQ0MGZmZjcsCi0JMHgwMDAwMDAwMCwgMHg4ZjgyMDAwYywgMHg4ZjgzMDAxOCwgMHgwMDAyMTA4MiwgMHgwMDAyMTA4MCwgMHgyNDQyNDAwMCwKLQkweDAzNDIyODIxLCAweDAwNjA1MDIxLCAweDI0NjMwMDAxLCAweDMxNDIwMGZmLCAweDAwMDIxNDAwLCAweGFmODMwMDE4LAotCTB4M2MwMzMyMDAsIDB4MDA0MzEwMjUsIDB4YWNhMjAwMDAsIDB4OTM2MzAwMDksIDB4OTM2MjAwMGEsIDB4MDAwMzFjMDAsCi0JMHgwMDQzMTAyNSwgMHhhY2EyMDAwNCwgMHg4ZjgzMDAxOCwgMHhhY2EzMDAwOCwgMHg5NzgyMDAxMCwgMHgzMDQyMDAwOCwKLQkweDEwNDAwMDAyLCAweDAwYzA0MDIxLCAweDI1MjgwMDA2LCAweDk3NDMwZTE0LCAweDkzNjQwMDAyLCAweDhmNDUwZTFjLAotCTB4OGY2NjAwMDQsIDB4OGY2NzAwMTQsIDB4MzA2M2ZmZmYsIDB4YTc0MzAxNDQsIDB4OTc0MjBlMTYsIDB4YTc0MjAxNDYsCi0JMHhhZjQ1MDE0OCwgMHhhMzRhMDE1MiwgMHg4ZjgyMDAwYywgMHgzMDg0MDBmZiwgMHhhNzQ0MDE1YSwgMHhhZjQ2MDE2MCwKLQkweGE3NDgwMTU4LCAweGFmNDcwMTU0LCAweGFmNGUwMTc4LCAweDAwNTExMDIxLCAweDMwNDIxZmZmLCAweGFmODIwMDBjLAotCTB4MGEwMDBlZDksIDB4OGQ4MjAwMDAsIDB4OTM2MjAwMDksIDB4OTM2MzAwMGIsIDB4OGY4NTAwMGMsIDB4MjQ2MzAwMGEsCi0JMHgwMDQzNTAyMSwgMHgyNTQ0MDAwNywgMHgwMDk5MjAyNCwgMHg5NzQzMDA4YSwgMHgzMDYzZmZmZiwgMHhhZmEzMDAwMCwKLQkweDhmYTIwMDAwLCAweDAwNDUxMDIzLCAweDI0NDJmZmZmLCAweDMwNDIxZmZmLCAweDAwNDQxMDJiLCAweDE0NDBmZmY3LAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMGMsIDB4OGY4NDAwMTgsIDB4MDAwMjEwODIsIDB4MDAwMjEwODAsIDB4MjQ0MjQwMDAsCi0JMHgwMzQyMjgyMSwgMHgwMDgwNDAyMSwgMHgyNDg0MDAwMSwgMHhhZjg0MDAxOCwgMHg5MzYzMDAwOSwgMHgzMTAyMDBmZiwKLQkweDAwMDIyNDAwLCAweDNjMDI0MTAwLCAweDI0NjMwMDAyLCAweDAwNjIxODI1LCAweDAwODMyMDI1LCAweGFjYTQwMDAwLAotCTB4OGY2MjAwMGMsIDB4MDA0NjEwMjUsIDB4YWNhMjAwMDQsIDB4OTc0MzBlMTQsIDB4OTM2NDAwMDIsIDB4OGY0NTBlMWMsCi0JMHg4ZjY2MDAwNCwgMHg4ZjY3MDAxNCwgMHgzMDYzZmZmZiwgMHhhNzQzMDE0NCwgMHg5NzQyMGUxNiwgMHgzMDg0MDBmZiwKLQkweGE3NDIwMTQ2LCAweGFmNDUwMTQ4LCAweGEzNDgwMTUyLCAweDhmODMwMDBjLCAweDI1NDIwMDA3LCAweDAwNTkxMDI0LAotCTB4YTc0NDAxNWEsIDB4YWY0NjAxNjAsIDB4YTc0OTAxNTgsIDB4YWY0NzAxNTQsIDB4YWY0ZTAxNzgsIDB4MDA2MjE4MjEsCi0JMHgzMDYzMWZmZiwgMHhhZjgzMDAwYywgMHg4ZDgyMDAwMCwgMHgxNDQwMDAwNSwgMHgwMDAwMDAwMCwgMHg4ZjYyMDAxNCwKLQkweDI0MDNmZmJmLCAweDAwNDMxMDI0LCAweGFmNjIwMDE0LCAweDhmNjIwMDBjLCAweDAwNGQxMDIxLCAweGFmNjIwMDBjLAotCTB4OTM2MzAwMDgsIDB4MTQ2MDAwMDgsIDB4MDAwMDAwMDAsIDB4MTE2MDAwMDYsIDB4MDAwMDAwMDAsIDB4OGY2MzAwMTQsCi0JMHgzYzAyZWZmZiwgMHgzNDQyZmZmZSwgMHgwMDYyMTgyNCwgMHhhZjYzMDAxNCwgMHhhMzZiMDAwOCwgMHgwMTIwNjAyMSwKLQkweDE1ODAwMDBjLCAweDhmYTYwMDA4LCAweDk3NDIwZTE0LCAweDk3NDMwZTE2LCAweDhmODUwMDE0LCAweDAwMDIxNDAwLAotCTB4MDA2MjE4MjUsIDB4YWNhMzAwYTgsIDB4OGY4NDAwMTQsIDB4OGY0MjBlMWMsIDB4YWM4MjAwYWMsIDB4MGEwMDBlZmQsCi0JMHgyZDgyMDAwMSwgMHgxNGMwZmU2NSwgMHgyZDgyMDAwMSwgMHgwMDUwMTAyNSwgMHgxMDQwMDA1OCwgMHgyNDAyMGYwMCwKLQkweDhmODMwMDA4LCAweDE0NjIwMDIzLCAweDNjMDQ4MDAwLCAweDExODAwMDA5LCAweDNjMDM4MDAwLCAweDk3NDIwZTA4LAotCTB4MzA0MjAwNDAsIDB4MTQ0MDAwMDUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAzMmMsCi0JMHgzYzAzODAwMCwgMHg4ZjQyMDE3OCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg5NzQyMGUxMCwKLQkweDNjMDMwNTAwLCAweDAwNDMxMDI1LCAweGFmNDIwMTRjLCAweDk3NDMwZTE0LCAweGE3NDMwMTQ0LCAweDk3NDIwZTE2LAotCTB4YTc0MjAxNDYsIDB4OGY0MzBlMWMsIDB4MjQwMjIwMDAsIDB4YWY0MzAxNDgsIDB4M2MwMzEwMDAsIDB4YTM0MDAxNTIsCi0JMHhhNzQwMDE1YSwgMHhhZjQwMDE2MCwgMHhhNzQwMDE1OCwgMHhhZjQyMDE1NCwgMHhhZjQzMDE3OCwgMHg4ZjgzMDAwOCwKLQkweDNjMDQ4MDAwLCAweDhmNDIwMTc4LCAweDAwNDQxMDI0LCAweDE0NDBmZmZkLCAweDI0MDIwZjAwLCAweDEwNjIwMDE2LAotCTB4MDAwMDAwMDAsIDB4OTc0MjBlMTQsIDB4YTc0MjAxNDQsIDB4OTc0MzBlMTYsIDB4YTc0MzAxNDYsIDB4OGY0MjBlMWMsCi0JMHgzYzAzMTAwMCwgMHhhZjQyMDE0OCwgMHgwYTAwMGY1MSwgMHgyNDAyMDI0MCwgMHg5NzQyMGUxNCwgMHg5NzQzMGUxNiwKLQkweDhmODQwMDE0LCAweDAwMDIxNDAwLCAweDAwNjIxODI1LCAweGFjODMwMGE4LCAweDhmODUwMDE0LCAweDhmNDIwZTFjLAotCTB4MDAwMDYwMjEsIDB4YWNhMjAwYWMsIDB4MGEwMDBlZmQsIDB4MmQ4MjAwMDEsIDB4YWY0MDAxNGMsIDB4MTE4MDAwMDcsCi0JMHgwMDAwMDAwMCwgMHg5NzQyMGUxMCwgMHhhNzQyMDE0NCwgMHg5NzQzMGUxMiwgMHhhNzQzMDE0NiwgMHgwYTAwMGY0ZSwKLQkweDhmNDIwZTE4LCAweDk3NDIwZTE0LCAweGE3NDIwMTQ0LCAweDk3NDMwZTE2LCAweGE3NDMwMTQ2LCAweDhmNDIwZTFjLAotCTB4YWY0MjAxNDgsIDB4MjQwMjAwNDAsIDB4M2MwMzEwMDAsIDB4YTM0MDAxNTIsIDB4YTc0MDAxNWEsIDB4YWY0MDAxNjAsCi0JMHhhNzQwMDE1OCwgMHhhZjQyMDE1NCwgMHhhZjQzMDE3OCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgwM2UwMDAwOCwKLQkweDI3YmQwMDE4LCAweDI3YmRmZmQwLCAweDNjMWE4MDAwLCAweDNjMDQyMGZmLCAweDM0ODRmZmZkLCAweDNjMDIwMDA4LAotCTB4MDM0MjE4MjEsIDB4YWZiZjAwMmMsIDB4YWZiNjAwMjgsIDB4YWZiNTAwMjQsIDB4YWZiNDAwMjAsIDB4YWZiMzAwMWMsCi0JMHhhZmIyMDAxOCwgMHhhZmIxMDAxNCwgMHhhZmIwMDAxMCwgMHhhZjgzMDAxNCwgMHhhZjQ0MGUwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDNjMDIwMGZmLCAweDM0NDJmZmZkLAotCTB4M2MwNDYwMDQsIDB4YWY0MjBlMDAsIDB4OGM4MzUwMDAsIDB4MjQxNjA4MDAsIDB4MjQxNTBkMDAsIDB4M2MxNDA4MDAsCi0JMHgyNDEzMGYwMCwgMHgzYzEyMDgwMCwgMHgzYzExNDAwMCwgMHgyNDAyZmY3ZiwgMHgwMDYyMTgyNCwgMHgzNDYzMzgwYywKLQkweDI0MDIwMDA5LCAweGFjODM1MDAwLCAweGFmNDIwMDA4LCAweGFmODAwMDE4LCAweGFmODAwMDBjLCAweDBlMDAxNTU5LAotCTB4MDAwMDAwMDAsIDB4MGUwMDBmZjAsIDB4MDAwMDAwMDAsIDB4M2MwMjA4MDAsIDB4MjQ1MDU3YzAsIDB4OGY0MjAwMDAsCi0JMHgzMDQyMDAwMSwgMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg4ZjQ0MDEwMCwgMHhhZjg0MDAwOCwgMHhhZjQ0MDAyMCwKLQkweGFmNTYwMTc4LCAweDkzNDMwMTA4LCAweGEzODMwMDEyLCAweDkzODIwMDEyLCAweDMwNDIwMDAxLCAweDEwNDAwMDA4LAotCTB4MDAwMDAwMDAsIDB4OTM4MjAwMTIsIDB4MzA0MjAwMDYsIDB4MDAwMjExMDAsIDB4MGUwMDBkNDMsIDB4MDA1MGQ4MjEsCi0JMHgwYTAwMGZhYywgMHgwMDAwMDAwMCwgMHgxNDk1MDAwNSwgMHgwMDAwMDAwMCwgMHgwZTAwMGQ0MywgMHgyNjliNTg0MCwKLQkweDBhMDAwZmFjLCAweDAwMDAwMDAwLCAweDE0OTMwMDA1LCAweDAwMDAwMDAwLCAweDBlMDAwZDQzLCAweDI2NWI1ODYwLAotCTB4MGEwMDBmYWMsIDB4MDAwMDAwMDAsIDB4MGUwMDEwZWEsIDB4MDAwMDAwMDAsIDB4YWY1MTAxMzgsIDB4MGEwMDBmODksCi0JMHgwMDAwMDAwMCwgMHgyN2JkZmZmOCwgMHgzMDg0ZmZmZiwgMHgyNDgyMDAwNywgMHgzMDQ0ZmZmOCwgMHg4Zjg1MDAwYywKLQkweDk3NDMwMDhhLCAweDMwNjNmZmZmLCAweGFmYTMwMDAwLCAweDhmYTIwMDAwLCAweDAwNDUxMDIzLCAweDI0NDJmZmZmLAotCTB4MzA0MjFmZmYsIDB4MDA0NDEwMmIsIDB4MTQ0MGZmZjcsIDB4MDAwMDAwMDAsIDB4OGY4MjAwMGMsIDB4MDAwMjEwODIsCi0JMHgwMDAyMTA4MCwgMHgyNDQyNDAwMCwgMHgwMzQyMTAyMSwgMHgwM2UwMDAwOCwgMHgyN2JkMDAwOCwgMHgzMDg0ZmZmZiwKLQkweDhmODIwMDBjLCAweDI0ODQwMDA3LCAweDMwODRmZmY4LCAweDAwNDQxMDIxLCAweDMwNDIxZmZmLCAweGFmODIwMDBjLAotCTB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4MjdiZGZmZTgsIDB4M2MxYTgwMDAsIDB4M2MwNDIwZmYsIDB4MzQ4NGZmZmQsCi0JMHgzYzAyMDAwOCwgMHgwMzQyMTgyMSwgMHhhZmJmMDAxMCwgMHhhZjgzMDAxNCwgMHhhZjQ0MGUwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDNjMDIwMGZmLCAweDM0NDJmZmZkLAotCTB4M2MwNDYwMDQsIDB4YWY0MjBlMDAsIDB4OGM4MjUwMDAsIDB4MjQwM2ZmN2YsIDB4MDA0MzEwMjQsIDB4MzQ0MjM4MGMsCi0JMHgyNDAzMDAwOSwgMHhhYzgyNTAwMCwgMHhhZjQzMDAwOCwgMHhhZjgwMDAxOCwgMHhhZjgwMDAwYywgMHgwZTAwMTU1OSwKLQkweDAwMDAwMDAwLCAweDBlMDAwZmYwLCAweDAwMDAwMDAwLCAweDhmYmYwMDEwLCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LAotCTB4MjdiZGZmZTgsIDB4M2MwMjAwMGEsIDB4MDM0MjE4MjEsIDB4M2MwNDA4MDAsIDB4MjQ4NDU4ODAsIDB4MjQwNTAwMTksCi0JMHhhZmJmMDAxMCwgMHhhZjgzMDAyNCwgMHgwZTAwMTU2NSwgMHgwMDAwMzAyMSwgMHgzYzA1MDgwMCwgMHgzYzAyMDgwMCwKLQkweDI0NDI1MzMwLCAweGFjYTI1OGU4LCAweDI0YTU1OGU4LCAweDNjMDIwODAwLCAweDI0NDI1NGY4LCAweDNjMDMwODAwLAotCTB4MjQ2MzU1MGMsIDB4M2MwNDA4MDAsIDB4YWNhMjAwMDQsIDB4M2MwMjA4MDAsIDB4MjQ0MjUzMzgsIDB4YWNhMzAwMDgsCi0JMHhhYzgyNTkwMCwgMHgyNDg0NTkwMCwgMHgzYzAyMDgwMCwgMHgyNDQyNTNjNCwgMHgzYzA3MDgwMCwgMHgyNGU3NTQwNCwKLQkweDNjMDYwODAwLCAweDI0YzY1NTIwLCAweDNjMDUwODAwLCAweDI0YTU1NDM4LCAweDNjMDMwODAwLCAweGFjODIwMDA0LAotCTB4M2MwMjA4MDAsIDB4MjQ0MjU1MjgsIDB4YWM4NzAwMDgsIDB4YWM4NjAwMGMsIDB4YWM4NTAwMTAsIDB4YWM2MjU5MjAsCi0JMHgyNDYzNTkyMCwgMHg4ZmJmMDAxMCwgMHgzYzAyMDgwMCwgMHgyNDQyNTU0MCwgMHhhYzYyMDAwNCwgMHgzYzAyMDgwMCwKLQkweGFjNjcwMDA4LCAweGFjNjYwMDBjLCAweGFjNjUwMDEwLCAweGFjNDAwMDQ4LCAweDAzZTAwMDA4LCAweDI3YmQwMDE4LAotCTB4OTc0MzA5ZGEsIDB4MDA4MDQwMjEsIDB4YWQwMzAwMDAsIDB4OGY0MjA5ZGMsIDB4YWQwMjAwMDQsIDB4OGY0MzA5ZTAsCi0JMHhhZDAzMDAwOCwgMHg5MzQ0MDlkOSwgMHgyNDAyMDAwMSwgMHgzMDg0MDAwMywgMHgxMDgyMDAxZiwgMHgzMGE5MDBmZiwKLQkweDI4ODIwMDAyLCAweDEwNDAwMDA1LCAweDI0MDIwMDAyLCAweDEwODAwMDA5LCAweDNjMGEwODAwLCAweDBhMDAxMDc4LAotCTB4OTM0MjA5MzQsIDB4MTA4MjAwMGIsIDB4MjQwMjAwMDMsIDB4MTA4MjAwMjYsIDB4M2MwYTA4MDAsIDB4MGEwMDEwNzgsCi0JMHg5MzQyMDkzNCwgMHg5NzQyMDllNCwgMHgwMDAyMTQwMCwgMHgzNDQyMDgwMCwgMHhhZDAyMDAwYywgMHgwYTAwMTA3NywKLQkweDI1MDgwMDEwLCAweDk3NDIwOWU0LCAweDAwMDIxNDAwLCAweDM0NDI4MTAwLCAweGFkMDIwMDBjLCAweDk3NDMwOWU4LAotCTB4M2MwYTA4MDAsIDB4MDAwMzFjMDAsIDB4MzQ2MzA4MDAsIDB4YWQwMzAwMTAsIDB4MGEwMDEwNzcsIDB4MjUwODAwMTQsCi0JMHg5NzQ0MDllNCwgMHgzYzA1MDgwMCwgMHgyNGEyNTg4MCwgMHg5NDQzMDAxYywgMHg5NDQ2MDAxNCwgMHg5NDQ3MDAxMCwKLQkweDAwYTA1MDIxLCAweDI0MDIwODAwLCAweGFkMDAwMDEwLCAweGFkMDIwMDE0LCAweDAwMDQyNDAwLCAweDAwNjYxODIxLAotCTB4MDA2NzE4MjMsIDB4MjQ2M2ZmZjIsIDB4MDA4MzIwMjUsIDB4YWQwNDAwMGMsIDB4MGEwMDEwNzcsIDB4MjUwODAwMTgsCi0JMHg5NzQyMDllNCwgMHgzYzA1MDgwMCwgMHgwMDAyMTQwMCwgMHgzNDQyODEwMCwgMHhhZDAyMDAwYywgMHg5NzQ0MDllOCwKLQkweDI0YTI1ODgwLCAweDk0NDMwMDFjLCAweDk0NDYwMDE0LCAweDk0NDcwMDEwLCAweDAwYTA1MDIxLCAweDI0MDIwODAwLAotCTB4YWQwMDAwMTQsIDB4YWQwMjAwMTgsIDB4MDAwNDI0MDAsIDB4MDA2NjE4MjEsIDB4MDA2NzE4MjMsIDB4MjQ2M2ZmZWUsCi0JMHgwMDgzMjAyNSwgMHhhZDA0MDAxMCwgMHgyNTA4MDAxYywgMHg5MzQyMDkzNCwgMHg5MzQ1MDkyMSwgMHgzYzA3NDAwMCwKLQkweDI1NDQ1ODgwLCAweDk0ODMwMDE4LCAweDk0ODYwMDE0LCAweDAwMDIxMDgyLCAweDAwMDIxNjAwLCAweDAwMDUyYzAwLAotCTB4MDBhNzI4MjUsIDB4MDA0NTEwMjUsIDB4MDA2NjE4MjEsIDB4MDA0MzEwMjUsIDB4YWQwMjAwMDAsIDB4OTc4MzAwMmMsCi0JMHg5NzQyMDllYSwgMHgwMDYyMTgyMSwgMHgwMDAzMWMwMCwgMHhhZDAzMDAwNCwgMHg5NzgyMDAyYywgMHgyNDQyMDAwMSwKLQkweDMwNDI3ZmZmLCAweGE3ODIwMDJjLCAweDkzNDMwOTIwLCAweDNjMDIwMDA2LCAweDAwMDMxZTAwLCAweDAwNjIxODI1LAotCTB4YWQwMzAwMDgsIDB4OGY0MjA5MmMsIDB4YWQwMjAwMGMsIDB4OGY0MzA5MzAsIDB4YWQwMzAwMTAsIDB4OGY0NDA5MzgsCi0JMHgyNTA4MDAxNCwgMHhhZDA0MDAwMCwgMHg4ZjgyMDAyMCwgMHgxMTIwMDAwNCwgMHhhZDAyMDAwNCwgMHg4ZjQyMDk0MCwKLQkweDBhMDAxMGExLCAweDI0NDJmZmZmLCAweDhmNDIwOTQwLCAweGFkMDIwMDA4LCAweDhmNDQwOTQ4LCAweDhmNDIwOTQwLAotCTB4OTM0MzA5MzYsIDB4MDA4MjMwMjMsIDB4MDA2NjMwMDYsIDB4MzQwMmZmZmYsIDB4MDA0NjEwMmIsIDB4NTQ0MDAwMDEsCi0JMHgzNDA2ZmZmZiwgMHg5MzQyMDkzNywgMHgyNTQ0NTg4MCwgMHg5MDgzMDAyNCwgMHhhZDAwMDAxMCwgMHgwMDAyMTcwMCwKLQkweDM0NjMwMDEwLCAweDAwMDMxYzAwLCAweDAwNDMxMDI1LCAweDAwNDYxMDI1LCAweGFkMDIwMDBjLCAweDhjODMwMDA4LAotCTB4MTQ2MDAwMzEsIDB4MjUwODAwMTQsIDB4M2MwMjA4MDAsIDB4OGM0MzAwNDgsIDB4MTA2MDAwMmQsIDB4MDAwMDAwMDAsCi0JMHg5MzQyMDEwYiwgMHhhZDAyMDAwMCwgMHg4ZjgzMDAwMCwgMHg4YzYyMDBiMCwgMHhhZDAyMDAwNCwgMHg4ZjgzMDAwMCwKLQkweDhjNjIwMGI0LCAweGFkMDIwMDA4LCAweDhmODMwMDAwLCAweDhjNjIwMGMwLCAweGFkMDIwMDBjLCAweDhmODMwMDAwLAotCTB4OGM2MjAwYzQsIDB4YWQwMjAwMTAsIDB4OGY4MzAwMDAsIDB4OGM2MjAwYzgsIDB4YWQwMjAwMTQsIDB4OGY4MzAwMDAsCi0JMHg4YzYyMDBjYywgMHhhZDAyMDAxOCwgMHg4ZjgzMDAwMCwgMHg4YzYyMDBlMCwgMHhhZDAyMDAxYywgMHg4ZjgzMDAwMCwKLQkweDhjNjIwMGU4LCAweGFkMDIwMDIwLCAweDhmODMwMDAwLCAweDhjNjIwMGYwLCAweDNjMDQ2MDBlLCAweGFkMDIwMDI0LAotCTB4OGM4MjAwZDAsIDB4YWQwMjAwMjgsIDB4OGM4MzAwZDQsIDB4YWQwMzAwMmMsIDB4OGY4MjAwMjgsIDB4M2MwNDYwMTIsCi0JMHhhZDAyMDAzMCwgMHg4YzgyMDBhOCwgMHhhZDAyMDAzNCwgMHg4YzgzMDBhYywgMHgzYzAyNjAwMCwgMHhhZDAzMDAzOCwKLQkweDhjNDM0NDQ4LCAweGFkMDMwMDNjLCAweDAzZTAwMDA4LCAweDAxMDAxMDIxLCAweDI3YmRmZmE4LCAweDNjMDIwMDA4LAotCTB4MDM0MjMwMjEsIDB4YWZiZjAwNTQsIDB4YWZiZTAwNTAsIDB4YWZiNzAwNGMsIDB4YWZiNjAwNDgsIDB4YWZiNTAwNDQsCi0JMHhhZmI0MDA0MCwgMHhhZmIzMDAzYywgMHhhZmIyMDAzOCwgMHhhZmIxMDAzNCwgMHhhZmIwMDAzMCwgMHhhZjg2MDAwMCwKLQkweDI0MDIwMDQwLCAweGFmNDIwODE0LCAweGFmNDAwODEwLCAweDhmNDIwOTQ0LCAweDhmNDMwOTUwLCAweDhmNDQwOTU0LAotCTB4OGY0NTA5NWMsIDB4YWY4MjAwMzQsIDB4YWY4MzAwMjAsIDB4YWY4NDAwMWMsIDB4YWY4NTAwMzAsIDB4OTBjMjAwMDAsCi0JMHgyNDAzMDAyMCwgMHgzMDQ0MDBmZiwgMHgxMDgzMDAwNSwgMHgyNDAyMDAzMCwgMHgxMDgyMDAyMiwgMHgzYzAzMDgwMCwKLQkweDBhMDAxMTM5LCAweDhjNjIwMDJjLCAweDI0MDIwMDg4LCAweGFmNDIwODE4LCAweDNjMDIwODAwLCAweDI0NDI1OGU4LAotCTB4YWZhMjAwMjAsIDB4OTM0MzAxMDksIDB4M2MwMjA4MDAsIDB4MTA2MDAwMDksIDB4MjQ1NzU5MDAsIDB4M2MwMjYwMDAsCi0JMHgyNDAzMDEwMCwgMHhhYzQzMDgxYywgMHgzYzAzMDAwMSwgMHhhYzQzMDgxYywgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwKLQkweDI0MDAwMzc2LCAweDkzNDIwMTBhLCAweDMwNDIwMDgwLCAweDE0NDAwMDIxLCAweDI0MDIwODAwLCAweDNjMDI2MDAwLAotCTB4MjQwMzAxMDAsIDB4YWM0MzA4MWMsIDB4M2MwMzAwMDEsIDB4YWM0MzA4MWMsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsCi0JMHgyNDAwMDM3ZCwgMHgwYTAwMTE0MSwgMHgyNDAyMDgwMCwgMHg5MzQzMDEwOSwgMHgzMDYzMDA3ZiwgMHgwMDAzMTE0MCwKLQkweDAwMDMxOGMwLCAweDAwNDMxMDIxLCAweDI0NDMwMDg4LCAweGFmNDMwODE4LCAweDAwMDAwMDBkLCAweDNjMDIwODAwLAotCTB4MjQ0MjU5NDAsIDB4M2MwMzA4MDAsIDB4MjQ3NzU5NTAsIDB4MGEwMDExNDAsIDB4YWZhMjAwMjAsIDB4MjQ0MjAwMDEsCi0JMHhhYzYyMDAyYywgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDM5NSwgMHgwYTAwMTRjMSwgMHg4ZmJmMDA1NCwKLQkweDI0MDIwODAwLCAweGFmNDIwMTc4LCAweDhmNDUwMTA0LCAweDhmNDIwOTg4LCAweDAwYTIxMDIzLCAweDU4NDAwMDA1LAotCTB4OGY0MzA5YTAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAzYjEsIDB4OGY0MzA5YTAsIDB4M2MxMDA4MDAsCi0JMHhhZTAzNThiMCwgMHg4ZjQyMDlhNCwgMHg4ZjgzMDAyMCwgMHgyNjA0NThiMCwgMHgyNDkxZmZkMCwgMHhhZTIyMDAzNCwKLQkweDAwYTIxMDIzLCAweGFlMjMwMDI4LCAweGFjODJmZmQwLCAweDhmYTMwMDIwLCAweDhjNjIwMDAwLCAweDAwNDBmODA5LAotCTB4MDIwMGIwMjEsIDB4MDA0MDkwMjEsIDB4MzI0NDAwMTAsIDB4MzI0MjAwMDIsIDB4MTA0MDAwMDcsIDB4YWZhNDAwMjQsCi0JMHg4ZTIyMDAyMCwgMHgzMjUzMDA0MCwgMHgyNDAzZmZiZiwgMHgwMDQzMTAyNCwgMHgwYTAwMTQ5MywgMHhhZTIyMDAyMCwKLQkweDMyNDIwMDIwLCAweDEwNDAwMDAyLCAweDNjMDIwODAwLCAweDI0NTc1OTIwLCAweDMyNDIwMDAxLCAweDE0NDAwMDA3LAotCTB4MDAwMDAwMDAsIDB4OGY4MjAwMDgsIDB4YWY0MjAwODAsIDB4OGVjMzU4YjAsIDB4YWY0MzBlMTAsIDB4OGUyMjAwMzQsCi0JMHhhZjQyMGUxOCwgMHg5MzQzMDEwYiwgMHg5MzQyMDkwNSwgMHgzMDQyMDAwOCwgMHgxMDQwMDAzYywgMHgzMDc0MDBmZiwKLQkweDhmODIwMDAwLCAweDhjNDMwMDc0LCAweDA0NjAwMDBhLCAweDAwMDAwMDAwLCAweDNjMDI2MDAwLCAweDI0MDMwMTAwLAotCTB4YWM0MzA4MWMsIDB4M2MwMzAwMDEsIDB4YWM0MzA4MWMsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDAzZWQsCi0JMHg4ZjgyMDAwMCwgMHg5MDQ0MDA3YiwgMHg5MzQzMDEwYSwgMHgxNDgzMDAyNywgMHgzMjUzMDA0MCwgMHgwMDAwMzgyMSwKLQkweDI0MDUyMDAwLCAweDNjMDkwODAwLCAweDNjMDM4MDAwLCAweDhmNDIwMTc4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4OGVjMjU4YjAsIDB4MjZjNDU4YjAsIDB4MjQ4NGZmZDAsIDB4YWY0MjAxNDQsIDB4OGM4MjAwMzQsIDB4M2MwMzAxMDAsCi0JMHhhZjQyMDE0OCwgMHgyNDAyMDA0NywgMHhhZjQzMDE0YywgMHhhMzQyMDE1MiwgMHg4ZDIzMDAzMCwgMHgzYzAyMTAwMCwKLQkweGE3NDcwMTU4LCAweGFmNDUwMTU0LCAweGFmNDIwMTc4LCAweDhjODYwMDM0LCAweDI0NjMwMDAxLCAweGFkMjMwMDMwLAotCTB4OTM0MjAxMGEsIDB4M2MwMzAwNDcsIDB4YWZhNTAwMTQsIDB4MDAwMjE2MDAsIDB4MDA0MzEwMjUsIDB4MDA0NzEwMjUsCi0JMHhhZmEyMDAxMCwgMHg5MzQzMDEwYiwgMHhhZmEzMDAxOCwgMHg4ZjQ0MDEwMCwgMHg4ZjQ1MDEwNCwgMHgwZTAwMTU5YiwKLQkweDNjMDcwMTAwLCAweDNjMDUwODAwLCAweDI0YTI1ODgwLCAweDBhMDAxMjUwLCAweDhjNDMwMDIwLCAweDMyODIwMDAyLAotCTB4MTA0MDAwNTAsIDB4MDAwMDAwMDAsIDB4MGUwMDE1YjksIDB4MzI1MzAwNDAsIDB4M2MwMzkwMDAsIDB4MzQ2MzAwMDEsCi0JMHg4ZjgyMDAwOCwgMHgzYzA0ODAwMCwgMHgwMDQzMTAyNSwgMHhhZjQyMDAyMCwgMHg4ZjQyMDAyMCwgMHgwMDQ0MTAyNCwKLQkweDE0NDBmZmZkLCAweDAwMDAwMDAwLCAweDhmODMwMDAwLCAweDkwNjIwMDA1LCAweDM0NDIwMDA4LCAweGEwNjIwMDA1LAotCTB4OGY4NDAwMDAsIDB4OGM4MjAwNzQsIDB4M2MwMzgwMDAsIDB4MDA0MzEwMjUsIDB4YWM4MjAwNzQsIDB4OTA4MzAwMDAsCi0JMHgyNDAyMDAyMCwgMHgxMDYyMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDQwYiwKLQkweDhmODMwMDA4LCAweDNjMDI4MDAwLCAweDM0NDIwMDAxLCAweDAwNjIxODI1LCAweGFmNDMwMDIwLCAweDkwODQwMDdiLAotCTB4OTM0MjAxMGEsIDB4MTQ4MjAwMjgsIDB4M2MwMzA4MDAsIDB4MDAwMDM4MjEsIDB4MjQwNTIwMDAsIDB4M2MwOTA4MDAsCi0JMHgzYzAzODAwMCwgMHg4ZjQyMDE3OCwgMHgwMDQzMTAyNCwgMHgxNDQwZmZmZCwgMHg4ZWMyNThiMCwgMHgyNmM0NThiMCwKLQkweDI0ODRmZmQwLCAweGFmNDIwMTQ0LCAweDhjODIwMDM0LCAweDNjMDMwMTAwLCAweGFmNDIwMTQ4LCAweDI0MDIwMDQ2LAotCTB4YWY0MzAxNGMsIDB4YTM0MjAxNTIsIDB4OGQyMzAwMzAsIDB4M2MwMjEwMDAsIDB4YTc0NzAxNTgsIDB4YWY0NTAxNTQsCi0JMHhhZjQyMDE3OCwgMHg4Yzg2MDAzNCwgMHgyNDYzMDAwMSwgMHhhZDIzMDAzMCwgMHg5MzQyMDEwYSwgMHgzYzAzMDA0NiwKLQkweGFmYTUwMDE0LCAweDAwMDIxNjAwLCAweDAwNDMxMDI1LCAweDAwNDcxMDI1LCAweGFmYTIwMDEwLCAweDkzNDMwMTBiLAotCTB4YWZhMzAwMTgsIDB4OGY0NDAxMDAsIDB4OGY0NTAxMDQsIDB4MGUwMDE1OWIsIDB4M2MwNzAxMDAsIDB4M2MwMzA4MDAsCi0JMHgyNDYyNTg4MCwgMHgwYTAwMTI1MCwgMHg4YzQzMDAyMCwgMHg5MzQyMDEwOCwgMHgzMDQyMDAxMCwgMHg1MDQwMDA1NiwKLQkweDkzNDMwOTNmLCAweDhmODYwMDAwLCAweDkwYzIwMDdmLCAweDhjYzMwMTc4LCAweDMwNDgwMGZmLCAweDE1MDMwMDA0LAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDAsIDB4MjQwMDA0MjUsIDB4OTBjMjAwN2UsIDB4OTBjNDAwODAsCi0JMHgwMDA4MWMwMCwgMHgwMDAyMTYwMCwgMHgwMDQzMTAyNSwgMHgwMDA0MjIwMCwgMHg5MGMzMDA3YSwgMHg5MGM1MDAwYSwKLQkweDAwNDQxMDI1LCAweDExMDUwMDI4LCAweDAwNjIzODI1LCAweGEwYzgwMDBhLCAweDAwMDA0MDIxLCAweDI0MDU2MDAwLAotCTB4M2MwOTA4MDAsIDB4M2MwMzgwMDAsIDB4OGY0MjAxNzgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4OGVjMjU4YjAsCi0JMHgyNmM0NThiMCwgMHgyNDg0ZmZkMCwgMHhhZjQyMDE0NCwgMHg4YzgyMDAzNCwgMHhhZjQyMDE0OCwgMHgyNDAyMDA1MiwKLQkweGFmNDcwMTRjLCAweGEzNDIwMTUyLCAweDhkMjMwMDMwLCAweDNjMDIxMDAwLCAweGE3NDgwMTU4LCAweGFmNDUwMTU0LAotCTB4YWY0MjAxNzgsIDB4OGM4NjAwMzQsIDB4MjQ2MzAwMDEsIDB4YWQyMzAwMzAsIDB4OTM0MjAxMGEsIDB4M2MwMzAwNTIsCi0JMHhhZmE1MDAxNCwgMHgwMDAyMTYwMCwgMHgwMDQzMTAyNSwgMHgwMDQ4MTAyNSwgMHhhZmEyMDAxMCwgMHg5MzQzMDEwYiwKLQkweGFmYTMwMDE4LCAweDhmNDQwMTAwLCAweDBlMDAxNTliLCAweDhmNDUwMTA0LCAweDBhMDAxMjRhLCAweDAwMDAwMDAwLAotCTB4M2MwMjYwMDAsIDB4MjQwMzAxMDAsIDB4YWM0MzA4MWMsIDB4M2MwMzAwMDEsIDB4YWM0MzA4MWMsIDB4MDAwMDAwMGQsCi0JMHgwMDAwMDAwMCwgMHgyNDAwMDQzZSwgMHgxNjgwMDAwOSwgMHgzYzA1MDgwMCwgMHgzYzA0MDgwMCwgMHgyNDgyNTg4MCwKLQkweDhjNDMwMDIwLCAweDMyNTMwMDQwLCAweDI0MDRmZmJmLCAweDAwNjQxODI0LCAweDBhMDAxNDkzLCAweGFjNDMwMDIwLAotCTB4OGNhMjU4ODAsIDB4MTA0MDAwMDUsIDB4M2MwMzA4MDAsIDB4OGM2MjAwMzQsIDB4YWNhMDU4ODAsIDB4MjQ0MjAwMDEsCi0JMHhhYzYyMDAzNCwgMHg5MzQzMDkzZiwgMHgyNDAyMDAxMiwgMHg1NDYyMDAwZSwgMHg5NzQyMDkwOCwgMHgzMjgyMDAzOCwKLQkweDE0NDAwMDA5LCAweDNjMDMwODAwLCAweDhmODMwMDAwLCAweDhjNjIwMDRjLCAweGFjNjIwMDVjLCAweDNjMDIwODAwLAotCTB4MjQ0NDU4ODAsIDB4OGM4MjAwMjAsIDB4MGEwMDEyODUsIDB4MzI1MzAwNDAsIDB4YWM2MDU4ODAsIDB4OTc0MjA5MDgsCi0JMHg1NDQwMDAxYywgMHg5NzQyMDkwOCwgMHgzYzAzOTAwMCwgMHgzNDYzMDAwMSwgMHg4ZjgyMDAwOCwgMHgzMjUzMDA0MCwKLQkweDNjMDQ4MDAwLCAweDAwNDMxMDI1LCAweGFmNDIwMDIwLCAweDhmNDIwMDIwLCAweDAwNDQxMDI0LCAweDE0NDBmZmZkLAotCTB4M2MwMjgwMDAsIDB4OGY4NDAwMDAsIDB4OGY4NTAwMDgsIDB4OGM4MzAwNTAsIDB4MzQ0MjAwMDEsIDB4MDBhMjI4MjUsCi0JMHhhZjgzMDAyMCwgMHhhYzgzMDA3MCwgMHhhYzgzMDA1YywgMHhhZjQ1MDAyMCwgMHgzYzA1MDgwMCwgMHgyNGE0NTg4MCwKLQkweDhjODIwMDIwLCAweDI0MDNmZmJmLCAweDAwNDMxMDI0LCAweDBhMDAxNDkzLCAweGFjODIwMDIwLCAweDAwMDIxMWMwLAotCTB4YWY0MjAwMjQsIDB4OTc0MjA5MDgsIDB4M2MwMzAwODAsIDB4MzQ2MzAwMDMsIDB4MDAwMjExYzAsIDB4YWY0MjA4MGMsCi0JMHhhZjQzMDgxYywgMHg5NzQyMDllYywgMHg4ZjQzMDlhNCwgMHhhNzgyMDAyYywgMHgzYzAyMDgwMCwgMHgyNDQ0NTg4MCwKLQkweGFjODMwMDJjLCAweDkzNDIwOTM3LCAweDkzNDMwOTM0LCAweDAwMDIxMDgwLCAweDAwNjIxODIxLCAweGE0ODMwMDE4LAotCTB4OTM0MjA5ZDgsIDB4MzI4NTAwMzgsIDB4YWZhNTAwMjgsIDB4MDA2MjE4MjEsIDB4YTQ4MzAwMWEsIDB4OTM0MjA5ZDgsCi0JMHg5MzQzMDkzNCwgMHgzYzFlMDgwMCwgMHgwMDgwOTgyMSwgMHgwMDQzMTAyMSwgMHgyNDQyMDAxMCwgMHhhNDgyMDAxNiwKLQkweDI0MDIwMDA2LCAweGFlNjIwMDIwLCAweDhmYTIwMDI4LCAweDEwNDAwMDAzLCAweDAwMDBhODIxLCAweDBhMDAxMmYwLAotCTB4MjQxMjAwMDgsIDB4OGY0MjA5NTgsIDB4OGY4MzAwMjAsIDB4OGY4NDAwMzAsIDB4MDA0MzEwMjMsIDB4MDA4MzIwMjMsCi0JMHgwNDgwMDAwMywgMHhhZTYyMDAwNCwgMHgwNDQxMDAwMywgMHgwMDgyMTAyYiwgMHgwYTAwMTJiYywgMHhhZTYwMDAwNCwKLQkweDU0NDAwMDAxLCAweGFlNjQwMDA0LCAweDhlZTIwMDAwLCAweDAwNDBmODA5LCAweDAwMDAwMDAwLCAweDAwNDA5MDIxLAotCTB4MzI0MjAwMDEsIDB4NTQ0MDAwMWUsIDB4OGVlMjAwMDQsIDB4OGU2MzAwMDgsIDB4MTA2MDAwMmIsIDB4M2MwMmMwMDAsCi0JMHgwMDYyMTAyNSwgMHhhZjQyMGUwMCwgMHg4ZjQyMDAwMCwgMHgzMDQyMDAwOCwgMHgxMDQwZmZmZCwgMHgwMDAwMDAwMCwKLQkweDk3NDIwZTA4LCAweGE3ODIwMDEwLCAweDhmNDMwZTA0LCAweDhlNjIwMDA4LCAweGFmODMwMDA0LCAweDhmODQwMDA0LAotCTB4MDA0NDEwMmIsIDB4MTA0MDAwMGIsIDB4MjQxNTAwMDEsIDB4MjQwMjAxMDAsIDB4M2MwMTYwMDAsIDB4YWMyMjA4MWMsCi0JMHgzYzAyMDAwMSwgMHgzYzAxNjAwMCwgMHhhYzIyMDgxYywgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDRjZCwKLQkweDI0MTUwMDAxLCAweDhlZTIwMDA0LCAweDAwNDBmODA5LCAweDAwMDAwMDAwLCAweDAyNDI5MDI1LCAweDMyNDIwMDAyLAotCTB4NTA0MDAwMWQsIDB4OGY0NzA5NDAsIDB4MTJhMDAwMDYsIDB4OGVjMjU4YjAsIDB4OGY4MzAwMDAsIDB4YWM2MjAwYTgsCi0JMHg4Zjg0MDAwMCwgMHg4ZTYyMDAzNCwgMHhhYzgyMDBhYywgMHgzMjQyMDAwNCwgMHg1MDQwMDAxMywgMHg4ZjQ3MDk0MCwKLQkweDNjMDIwODAwLCAweDMyODMwMDdkLCAweDEwNjAwMTEwLCAweDI0NTc1OTIwLCAweDMyODIwMDAxLCAweDUwNDAwMDA2LAotCTB4MzY1MjAwMDIsIDB4OGY4MzAwMzQsIDB4OGY0MjA5NDAsIDB4MTA2MjAxMDksIDB4MDAwMDAwMDAsIDB4MzY1MjAwMDIsCi0JMHgyNDAyMDAwOCwgMHhhNjYwMDAxMCwgMHhhNjYyMDAxMiwgMHhhZTYwMDAwOCwgMHhhMjYwMDAyNCwgMHg4ZjQ3MDk0MCwKLQkweDNjMDMwODAwLCAweDI0Njg1ODgwLCAweDhkMDIwMDJjLCAweDhkMDUwMDA4LCAweDk1MDQwMDEwLCAweDk1MDYwMDBhLAotCTB4OTUwMzAwMjYsIDB4MDA0NTEwMjEsIDB4MDA4NjIwMjEsIDB4MDA2NDE4MjEsIDB4YWY4NzAwMzQsIDB4YWQwMjAwMmMsCi0JMHgzMjgyMDAzMCwgMHgxMDQwMDAwOCwgMHhhNTAzMDAxNCwgMHg5MTAyMDAyNCwgMHgzMjkxMDA0MCwgMHgzNDQyMDAwNCwKLQkweGExMDIwMDI0LCAweGFmNDAwMDQ4LCAweDBhMDAxMzQ1LCAweDNjMDQwODAwLCAweDkzNDIwOTIzLCAweDMwNDIwMDAyLAotCTB4MTA0MDAwMjksIDB4MzI5MTAwNDAsIDB4OGY4MzAwMDAsIDB4OGY4NDAwMjAsIDB4OGM2MjAwODQsIDB4MDA0NDEwMjMsCi0JMHgwNDQyMDAwYSwgMHgzYzAzOTAwMCwgMHg5NTAyMDAxNCwgMHg4YzYzMDA4NCwgMHgwMDgyMTAyMSwgMHgwMDYyMTgyMywKLQkweDFjNjAwMDA0LCAweDNjMDM5MDAwLCAweDkxMDIwMDI0LCAweDM0NDIwMDAxLCAweGExMDIwMDI0LCAweDM0NjMwMDAxLAotCTB4OGY4MjAwMDgsIDB4MzI5MTAwNDAsIDB4M2MwNDgwMDAsIDB4MDA0MzEwMjUsIDB4YWY0MjAwMjAsIDB4OGY0MjAwMjAsCi0JMHgwMDQ0MTAyNCwgMHgxNDQwZmZmZCwgMHgwMDAwMDAwMCwgMHg4Zjg0MDAwMCwgMHg5MDgzMDAzZiwgMHgyNDAyMDAwYSwKLQkweDEwNjIwMDA1LCAweDI0MDIwMDBjLCAweDkwODMwMDNmLCAweDI0MDIwMDA4LCAweDE0NjIwMDAyLCAweDI0MDIwMDE0LAotCTB4YTA4MjAwM2YsIDB4OGY4MzAwMDgsIDB4M2MwMjgwMDAsIDB4MzQ0MjAwMDEsIDB4MDA2MjE4MjUsIDB4YWY0MzAwMjAsCi0JMHgzYzA0MDgwMCwgMHgyNDg2NTg4MCwgMHg5NGMyMDAxMCwgMHg5NGMzMDAxYSwgMHg4Y2M0MDAwOCwgMHgwMDQzMjgyMSwKLQkweDE0ODAwMDA2LCAweGE0YzUwMDFjLCAweDNjMDIwODAwLCAweDhjNDMwMDQ4LCAweDEwNjAwMDAyLCAweDI0YTIwMDQwLAotCTB4YTRjMjAwMWMsIDB4MjdkMDU4ODAsIDB4OTYwNDAwMWMsIDB4OTYwMjAwMTIsIDB4MDA4MjIwMjEsIDB4MjQ4NDAwMDIsCi0JMHgwZTAwMGZhZiwgMHgzMDg0ZmZmZiwgMHg4Zjg1MDAxOCwgMHgwMGEwMTgyMSwgMHhhMjAzMDAyNSwgMHg4ZWU2MDAwOCwKLQkweDAwNDAyMDIxLCAweDI0YTUwMDAxLCAweGFmODUwMDE4LCAweDAwYzBmODA5LCAweDAwMDAwMDAwLCAweDAwNDAyMDIxLAotCTB4MGUwMDEwMjYsIDB4MDIyMDI4MjEsIDB4OGVlMzAwMGMsIDB4MDA2MGY4MDksIDB4MDA0MDIwMjEsIDB4OTYwNDAwMWMsCi0JMHg5NjAyMDAxMiwgMHgwMDgyMjAyMSwgMHgyNDg0MDAwMiwgMHgwZTAwMGZjNSwgMHgzMDg0ZmZmZiwgMHg4ZmMyNTg4MCwKLQkweDhlMDMwMDA4LCAweDAwNDMxMDIzLCAweDE0NDAwMDEyLCAweGFmYzI1ODgwLCAweDU0NjAwMDA2LCAweDhlMDIwMDIwLAotCTB4MzI0MzAwNGEsIDB4MjQwMjAwMDIsIDB4MTQ2MjAwMDUsIDB4MDAwMDAwMDAsIDB4OGUwMjAwMjAsIDB4MzQ0MjAwNDAsCi0JMHgwYTAwMTM4MiwgMHhhZTAyMDAyMCwgMHg1MmEwMDAwNiwgMHgzNjUyMDAwMiwgMHg4ZTAyMDAzMCwgMHhhZjQyMGUxMCwKLQkweDhlMDMwMDM0LCAweGFmNDMwZTE4LCAweDM2NTIwMDAyLCAweDUyYTAwMDA4LCAweDk2NjcwMDE0LCAweDhmODMwMDAwLAotCTB4OGY0MjBlMTAsIDB4YWM2MjAwYTgsIDB4OGY4NDAwMDAsIDB4OGY0MjBlMTgsIDB4YWM4MjAwYWMsIDB4OTY2NzAwMTQsCi0JMHg5MjY4MDAyNCwgMHgyNDAyMDA0MCwgMHhhZjQyMDgxNCwgMHg4ZjgzMDAyMCwgMHg4ZjgyMDAxYywgMHgwMDY3MTgyMSwKLQkweDAwNjIxMDIzLCAweGFmODMwMDIwLCAweDE4NDAwMDA4LCAweDAwMDAwMDAwLCAweDhmODIwMDAwLCAweGFmODMwMDFjLAotCTB4YWM0MzAwNTQsIDB4NTRlMDAwMDUsIDB4YWY0MDAwNDAsIDB4MGEwMDEzYTAsIDB4OGY0MjA5NWMsIDB4NTRlMDAwMDEsCi0JMHhhZjQwMDA0NCwgMHg4ZjQyMDk1YywgMHgzMTAzMDAwOCwgMHhhZjgyMDAzMCwgMHgxMDYwMDAxYSwgMHgwMDAwMDAwMCwKLQkweDhmODQwMDAwLCAweDkwODIwMTIwLCAweDkwODMwMTIxLCAweDMwNDYwMGZmLCAweDAwYzMxODIzLCAweDMwNjMwMDA3LAotCTB4MjQwMjAwMDcsIDB4MTA2MjAwMGUsIDB4MDAwMDAwMDAsIDB4OTA4MjAxMjIsIDB4MzA0MjAwZmUsIDB4YTA4MjAxMjIsCi0JMHg4Zjg1MDAwMCwgMHgwMDA2MTg4MCwgMHg4Zjg0MDAyMCwgMHgyNGEyMDEwMCwgMHgwMDQzMTAyMSwgMHgyNGMzMDAwMSwKLQkweDMwNjMwMDA3LCAweGFjNDQwMDAwLCAweDBhMDAxM2JkLCAweGEwYTMwMTIwLCAweDkwODIwMTIyLCAweDM0NDIwMDAxLAotCTB4YTA4MjAxMjIsIDB4MTRlMDAwMDMsIDB4MzEwMjAwMDEsIDB4MTA0MDAwMzEsIDB4MzI1MTAwMDIsIDB4OGY4MjAwMDAsCi0JMHg4YzQzMDAwYywgMHgzMDYzMDAwMSwgMHgxMDYwMDAyYywgMHgzMjUxMDAwMiwgMHgzYzAyOTAwMCwgMHg4ZjgzMDAwOCwKLQkweDM0NDIwMDAxLCAweDNjMDQ4MDAwLCAweDAwNjIxODI1LCAweGFmNDMwMDIwLCAweDhmNDIwMDIwLCAweDAwNDQxMDI0LAotCTB4MTQ0MGZmZmQsIDB4MDAwMDAwMDAsIDB4OGY4NzAwMDAsIDB4OGNlMjAwMGMsIDB4MzA0MjAwMDEsIDB4MTA0MDAwMTgsCi0JMHgwMDAwMDAwMCwgMHg5NGUyMDA2YSwgMHgwMDAyMjg4MCwgMHg1MGEwMDAwMSwgMHgyNDA1MDAwMSwgMHg5NGUzMDA2OCwKLQkweDkwZTQwMDgxLCAweDNjMDIwODAwLCAweDhjNDYwMDI0LCAweDAwNjUyODIxLCAweDAwODUyODA0LCAweDAwYzUxMDJiLAotCTB4NTQ0MDAwMDEsIDB4MDBhMDMwMjEsIDB4M2MwMjA4MDAsIDB4OGM0NDAwMjgsIDB4MDBjNDE4MmIsIDB4NTQ2MDAwMDEsCi0JMHgwMGMwMjAyMSwgMHg4ZjQzMDA3NCwgMHgyNDAyZmZmZSwgMHgwMDgyMjgyNCwgMHgwMGEzMTgyMSwgMHhhY2UzMDAwYywKLQkweDhmODMwMDA4LCAweDNjMDI4MDAwLCAweDM0NDIwMDAxLCAweDAwNjIxODI1LCAweGFmNDMwMDIwLCAweDhmODIwMDIwLAotCTB4M2MwNTA4MDAsIDB4MjRiMDU4ODAsIDB4YWUwMjAwMjgsIDB4OGVlMzAwMTAsIDB4MDA2MGY4MDksIDB4MDAwMDAwMDAsCi0JMHg4ZjgyMDAyOCwgMHgyNDQyMDAwMSwgMHhhZjgyMDAyOCwgMHgxMmEwMDAwNSwgMHhhZjQwMDA0YywgMHg4ZjQyMGUxMCwKLQkweGFlMDIwMDMwLCAweDhmNDMwZTE4LCAweGFlMDMwMDM0LCAweDEyMjBmZWE3LCAweDI0MDIwMDA2LCAweDhmODcwMDI0LAotCTB4OTc4NjAwMmMsIDB4OGY4MzAwMDAsIDB4OGY4MjAwMzQsIDB4OGY4NDAwMjAsIDB4OGY4NTAwMWMsIDB4MzI1MzAwNDAsCi0JMHhhNGU2MDAyYywgMHhhYzYyMDA0NCwgMHgzMjQyMDAwOCwgMHhhYzY0MDA1MCwgMHhhYzY1MDA1NCwgMHgxMDQwMDA3YSwKLQkweDMyODIwMDIwLCAweDEwNDAwMDI3LCAweDMyOTEwMDEwLCAweDAwMDAzODIxLCAweDI0MDUyMDAwLCAweDNjMDkwODAwLAotCTB4M2MwMzgwMDAsIDB4OGY0MjAxNzgsIDB4MDA0MzEwMjQsIDB4MTQ0MGZmZmQsIDB4OGVjMjU4YjAsIDB4MjZjNDU4YjAsCi0JMHgyNDg0ZmZkMCwgMHhhZjQyMDE0NCwgMHg4YzgyMDAzNCwgMHgzYzAzMDQwMCwgMHhhZjQyMDE0OCwgMHgyNDAyMDA0MSwKLQkweGFmNDMwMTRjLCAweGEzNDIwMTUyLCAweDhkMjMwMDMwLCAweDNjMDIxMDAwLCAweGE3NDcwMTU4LCAweGFmNDUwMTU0LAotCTB4YWY0MjAxNzgsIDB4OGM4NjAwMzQsIDB4MjQ2MzAwMDEsIDB4YWQyMzAwMzAsIDB4OTM0MjAxMGEsIDB4M2MwMzAwNDEsCi0JMHhhZmE1MDAxNCwgMHgwMDAyMTYwMCwgMHgwMDQzMTAyNSwgMHgwMDQ3MTAyNSwgMHhhZmEyMDAxMCwgMHg5MzQzMDEwYiwKLQkweGFmYTMwMDE4LCAweDhmNDQwMTAwLCAweDhmNDUwMTA0LCAweDBlMDAxNTliLCAweDNjMDcwNDAwLCAweDEyMjAwMDI4LAotCTB4MDAwMDM4MjEsIDB4MjQwNTIwMDAsIDB4M2MwOTA4MDAsIDB4M2MwMzgwMDAsIDB4OGY0MjAxNzgsIDB4MDA0MzEwMjQsCi0JMHgxNDQwZmZmZCwgMHg4ZWMyNThiMCwgMHgyNmM0NThiMCwgMHgyNDg0ZmZkMCwgMHhhZjQyMDE0NCwgMHg4YzgyMDAzNCwKLQkweDNjMDMwMzAwLCAweGFmNDIwMTQ4LCAweDI0MDIwMDRlLCAweGFmNDMwMTRjLCAweGEzNDIwMTUyLCAweDhkMjMwMDMwLAotCTB4M2MwMjEwMDAsIDB4YTc0NzAxNTgsIDB4YWY0NTAxNTQsIDB4YWY0MjAxNzgsIDB4OGM4NjAwMzQsIDB4MjQ2MzAwMDEsCi0JMHhhZDIzMDAzMCwgMHg5MzQyMDEwYSwgMHgzYzAzMDA0ZSwgMHhhZmE1MDAxNCwgMHgwMDAyMTYwMCwgMHgwMDQzMTAyNSwKLQkweDAwNDcxMDI1LCAweGFmYTIwMDEwLCAweDkzNDMwMTBiLCAweGFmYTMwMDE4LCAweDhmNDQwMTAwLCAweDhmNDUwMTA0LAotCTB4MGUwMDE1OWIsIDB4M2MwNzAzMDAsIDB4MGEwMDE0OGIsIDB4OGZhMjAwMjQsIDB4MzI4MjAwMDgsIDB4MTA0MDAwMjYsCi0JMHgyNDA1MjAwMCwgMHgwMDAwMzgyMSwgMHgzYzA5MDgwMCwgMHgzYzAzODAwMCwgMHg4ZjQyMDE3OCwgMHgwMDQzMTAyNCwKLQkweDE0NDBmZmZkLCAweDhlYzI1OGIwLCAweDI2YzQ1OGIwLCAweDI0ODRmZmQwLCAweGFmNDIwMTQ0LCAweDhjODIwMDM0LAotCTB4M2MwMzAyMDAsIDB4YWY0MjAxNDgsIDB4MjQwMjAwNGIsIDB4YWY0MzAxNGMsIDB4YTM0MjAxNTIsIDB4OGQyMzAwMzAsCi0JMHgzYzAyMTAwMCwgMHhhNzQ3MDE1OCwgMHhhZjQ1MDE1NCwgMHhhZjQyMDE3OCwgMHg4Yzg2MDAzNCwgMHgyNDYzMDAwMSwKLQkweGFkMjMwMDMwLCAweDkzNDIwMTBhLCAweDNjMDMwMDRiLCAweGFmYTUwMDE0LCAweDAwMDIxNjAwLCAweDAwNDMxMDI1LAotCTB4MDA0NzEwMjUsIDB4YWZhMjAwMTAsIDB4OTM0MzAxMGIsIDB4YWZhMzAwMTgsIDB4OGY0NDAxMDAsIDB4OGY0NTAxMDQsCi0JMHgwZTAwMTU5YiwgMHgzYzA3MDIwMCwgMHg4ZmEyMDAyNCwgMHgxNDQwMDAwNCwgMHg4ZmEzMDAyMCwgMHgzMjQyMDAxMCwKLQkweDEwNDAwMDA0LCAweDAwMDAwMDAwLCAweDhjNjIwMDA0LCAweDAwNDBmODA5LCAweDAwMDAwMDAwLCAweDEyNjAwMDA2LAotCTB4OGZhNDAwMjAsIDB4OGM4MjAwMDgsIDB4MDA0MGY4MDksIDB4MDAwMDAwMDAsIDB4MGEwMDE0YzEsIDB4OGZiZjAwNTQsCi0JMHgzYzAzMDgwMCwgMHg4YzYyNThhMCwgMHgzMDQyMDA0MCwgMHgxNDQwMDAyMywgMHg4ZmJmMDA1NCwgMHgwMDAwMjgyMSwKLQkweDI0MDQwMDQwLCAweDhmODcwMDIwLCAweDNjMDM4MDAwLCAweDhmNDIwMTc4LCAweDAwNDMxMDI0LCAweDE0NDBmZmZkLAotCTB4OGVjMjU4YjAsIDB4MjZjMzU4YjAsIDB4MjQ2M2ZmZDAsIDB4YWY0MjAxNDQsIDB4OGM2MjAwMzQsIDB4YWY0MjAxNDgsCi0JMHgyNDAyMDA0OSwgMHhhZjQ3MDE0YywgMHhhMzQyMDE1MiwgMHgzYzAyMTAwMCwgMHhhNzQ1MDE1OCwgMHhhZjQ0MDE1NCwKLQkweGFmNDIwMTc4LCAweDhjNjYwMDM0LCAweDkzNDIwMTBhLCAweDNjMDMwMDQ5LCAweGFmYTQwMDE0LCAweDAwMDIxNjAwLAotCTB4MDA0MzEwMjUsIDB4MDA0NTEwMjUsIDB4YWZhMjAwMTAsIDB4OTM0MzAxMGIsIDB4YWZhMzAwMTgsIDB4OGY0NDAxMDAsCi0JMHgwZTAwMTU5YiwgMHg4ZjQ1MDEwNCwgMHg4ZmJmMDA1NCwgMHg4ZmJlMDA1MCwgMHg4ZmI3MDA0YywgMHg4ZmI2MDA0OCwKLQkweDhmYjUwMDQ0LCAweDhmYjQwMDQwLCAweDhmYjMwMDNjLCAweDhmYjIwMDM4LCAweDhmYjEwMDM0LCAweDhmYjAwMDMwLAotCTB4MDNlMDAwMDgsIDB4MjdiZDAwNTgsIDB4MDNlMDAwMDgsIDB4MDAwMDEwMjEsIDB4M2MwMjA4MDAsIDB4MjQ0MzU4ODAsCi0JMHg4YzY1MDAwNCwgMHg4YzQ0NTg4MCwgMHgwMDg1MTgyYiwgMHgxMDYwMDAwMiwgMHgwMDQwMzAyMSwgMHgwMDgwMjgyMSwKLQkweDk3NDQwOTNjLCAweDAwYTQxMDJiLCAweDU0NDAwMDAxLCAweDAwYTAyMDIxLCAweDkzNDIwOTIzLCAweDAwMDQxODJiLAotCTB4MDAwMjEwNDIsIDB4MzA0MjAwMDEsIDB4MDA0MzEwMjQsIDB4MTA0MDAwMGQsIDB4MjRjMjU4ODAsIDB4OGY4NTAwMDAsCi0JMHg4ZjgzMDAyMCwgMHg4Y2EyMDA4NCwgMHgwMDQzMTAyMywgMHgwNDQyMDAwNywgMHgyNGMyNTg4MCwgMHg4Y2EyMDA4NCwKLQkweDAwNjQxODIxLCAweDAwNDMxMDIzLCAweDI4NDIwMDAxLCAweDAwODIyMDIzLCAweDI0YzI1ODgwLCAweGFjNDQwMDA4LAotCTB4YTQ0MDAwMjYsIDB4MDNlMDAwMDgsIDB4MDAwMDEwMjEsIDB4OGY4NTAwMDQsIDB4OTc4NDAwMTAsIDB4M2MwMzA4MDAsCi0JMHgyNDYzNTg4MCwgMHgyNDAyMDAwOCwgMHhhNDYyMDAxMiwgMHg4ZjgyMDAwNCwgMHhhNDYwMDAxMCwgMHgwMDA0MjBjMiwKLQkweDMwODQwMDA4LCAweDJjNDIwMDAxLCAweDAwMDIxMDIzLCAweDMwNDIwMDA2LCAweGFjNjUwMDA4LCAweDAzZTAwMDA4LAotCTB4YTA2NDAwMjQsIDB4M2MwMjA4MDAsIDB4MjQ0MjU4ODAsIDB4OTA0NTAwMjUsIDB4OTQ0MzAwMWMsIDB4M2MwMjExMDAsCi0JMHhhYzgwMDAwNCwgMHgwMDA1MmMwMCwgMHgyNDYzMDAwMiwgMHgwMDYyMTgyNSwgMHgwMGEzMjgyNSwgMHgyNDgyMDAwOCwKLQkweDAzZTAwMDA4LCAweGFjODUwMDAwLCAweDI3YmRmZmQ4LCAweDNjMDIwODAwLCAweDI0NDI1ODgwLCAweGFmYmYwMDIwLAotCTB4OTA0ODAwMjUsIDB4OGM0NDAwMDgsIDB4OGM0NjAwMjAsIDB4OGY4NzAwMjAsIDB4M2MwMzA4MDAsIDB4M2MwNTgwMDAsCi0JMHg4ZjQyMDE3OCwgMHgwMDQ1MTAyNCwgMHgxNDQwZmZmZCwgMHg4YzYyNThiMCwgMHgyNDYzNThiMCwgMHgyNDY5ZmZkMCwKLQkweGFmNDIwMTQ0LCAweDhkMjIwMDM0LCAweDMwYzMyMDAwLCAweGFmNDIwMTQ4LCAweDNjMDIxMDAwLCAweGFmNDcwMTRjLAotCTB4YTM0ODAxNTIsIDB4YTc0NDAxNTgsIDB4YWY0NjAxNTQsIDB4YWY0MjAxNzgsIDB4MTA2MDAwMDQsIDB4M2MwMzA4MDAsCi0JMHg4YzYyMDAzMCwgMHgyNDQyMDAwMSwgMHhhYzYyMDAzMCwgMHg5MzQyMDEwYSwgMHgwMDA4MWMwMCwgMHgzMDg0ZmZmZiwKLQkweGFmYTYwMDE0LCAweDAwMDIxNjAwLCAweDAwNDMxMDI1LCAweDAwNDQxMDI1LCAweGFmYTIwMDEwLCAweDkzNDMwMTBiLAotCTB4YWZhMzAwMTgsIDB4OGY0NDAxMDAsIDB4OGY0NTAxMDQsIDB4MGUwMDE1OWIsIDB4OGQyNjAwMzQsIDB4OGZiZjAwMjAsCi0JMHgwM2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMCwgMHgyNDAwMDE5ZCwgMHgwM2UwMDAwOCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDAwMDAwMDAwLCAweDI0MDAwMWE5LCAweDAzZTAwMDA4LCAweDAwMDAwMDAwLAotCTB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4M2MwMjA4MDAsIDB4MjQ0MjU4ODAsIDB4YWM0MDAwMDgsIDB4YTQ0MDAwMjYsCi0JMHgwM2UwMDAwOCwgMHgyNDAyMDAwMSwgMHgzYzAyMDgwMCwgMHgyNDQyNTg4MCwgMHgyNDAzMDAwOCwgMHhhYzQwMDAwOCwKLQkweGE0NDAwMDEwLCAweGE0NDMwMDEyLCAweGEwNDAwMDI0LCAweDAzZTAwMDA4LCAweDI0MDIwMDA0LCAweDAzZTAwMDA4LAotCTB4MDAwMDEwMjEsIDB4MTBjMDAwMDcsIDB4MDAwMDAwMDAsIDB4OGNhMjAwMDAsIDB4MjRjNmZmZmYsIDB4MjRhNTAwMDQsCi0JMHhhYzgyMDAwMCwgMHgxNGMwZmZmYiwgMHgyNDg0MDAwNCwgMHgwM2UwMDAwOCwgMHgwMDAwMDAwMCwgMHgwYTAwMTU2YywKLQkweDAwYTAxMDIxLCAweGFjODYwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI0ODQwMDA0LCAweDAwYTAxMDIxLAotCTB4MTQ0MGZmZmEsIDB4MjRhNWZmZmYsIDB4MDNlMDAwMDgsIDB4MDAwMDAwMDAsIDB4M2MwYTA4MDAsIDB4OGQ0OTAwNjgsCi0JMHgzYzA1MDgwMCwgMHgyNGE1MjA5OCwgMHgwMDA5MzE0MCwgMHgwMGM1MTAyMSwgMHhhYzQ0MDAwMCwgMHg4ZjQ0MGUwNCwKLQkweDAwYTYxMDIxLCAweGFjNDQwMDA0LCAweDk3NDMwZTA4LCAweDk3NDIwZTBjLCAweDAwYTYyMDIxLCAweDAwMDMxYzAwLAotCTB4MDA0MzEwMjUsIDB4YWM4MjAwMDgsIDB4OGY0MzBlMTAsIDB4MDA4MDEwMjEsIDB4YWM0MzAwMGMsIDB4OGY0NDBlMTQsCi0JMHhhYzQ0MDAxMCwgMHg4ZjQzMGUxOCwgMHgzYzA4MDBmZiwgMHhhYzQzMDAxNCwgMHg4ZjQ3MGUxYywgMHgzNTA4ZmZmZiwKLQkweDI1MjkwMDAxLCAweGFjNDcwMDE4LCAweDNjMDcwODAwLCAweDhjZTMwMDZjLCAweDkzNDQwMTBhLCAweDNjMDI2MDAwLAotCTB4MjQ2MzAwMDEsIDB4YWNlMzAwNmMsIDB4OGM0MzQ0NDgsIDB4MzEyOTAwN2YsIDB4MDBhNjI4MjEsIDB4YWQ0OTAwNjgsCi0JMHgwMDA0MjYwMCwgMHgwMDY4MTgyNCwgMHgwMDgzMjAyNSwgMHgwM2UwMDAwOCwgMHhhY2E0MDAxYywgMHg4ZmFjMDAxMCwKLQkweDhmYWQwMDE0LCAweDhmYWUwMDE4LCAweDNjMGIwODAwLCAweDhkNmEwMDYwLCAweDNjMDgwODAwLCAweDI1MDgwMDgwLAotCTB4MDAwYTQ5NDAsIDB4MDEyODEwMjEsIDB4MDEwOTE4MjEsIDB4YWM0NDAwMDAsIDB4MDA2MDEwMjEsIDB4YWM2NTAwMDQsCi0JMHhhYzQ2MDAwOCwgMHhhYzY3MDAwYywgMHhhYzRjMDAxMCwgMHhhYzZkMDAxNCwgMHgzYzAzNjAwMCwgMHhhYzRlMDAxOCwKLQkweDhjNjU0NDQ4LCAweDNjMDQwODAwLCAweDhjODIwMDY0LCAweDI1NGEwMDAxLCAweDMxNGEwMGZmLCAweDAxMDk0MDIxLAotCTB4YWQ2YTAwNjAsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwNjQsIDB4MDNlMDAwMDgsIDB4YWQwNTAwMWMsIDB4M2MwMzA4MDAsCi0JMHgzYzA5MDgwMCwgMHg4ZDI1MDA3MCwgMHgyNDYzMzBiMCwgMHg4ZjQ2MDEwMCwgMHgwMDA1MzkwMCwgMHgwMGUzMTAyMSwKLQkweGFjNDYwMDAwLCAweDhmNDQwMTA0LCAweDAwNjcxMDIxLCAweGFjNDQwMDA0LCAweDhmNDYwMTA4LCAweDhmODQwMDE0LAotCTB4MjRhNTAwMDEsIDB4YWM0NjAwMDgsIDB4OGM4ODAwNzQsIDB4M2MwNjA4MDAsIDB4OGNjMjAwNzQsIDB4MzBhNTAwM2YsCi0JMHgwMDY3MTgyMSwgMHhhZDI1MDA3MCwgMHgyNDQyMDAwMSwgMHhhY2MyMDA3NCwgMHgwM2UwMDAwOCwgMHhhYzY4MDAwYywKLQkweDAwMDAwMDAwIH07CitzdGF0aWMgdTggYm54Ml9UWFBfYjA2RndUZXh0W10gPSB7CisJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHgyMSwgMHhkMywgMHg0MSwgMHg0NCwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGVkLCAweDVjLCAweDZkLCAweDZjLAorCTB4MWIsIDB4ZjcsIDB4NzksIDB4N2YsIDB4ZWUsIDB4ODUsIDB4ZDIsIDB4NTEsIDB4OTYsIDB4ZTksIDB4OTMsIDB4YzIsCisJMHg3OCwgMHg2YywgMHhjMCwgMHhhNiwgMHg3NywgMHhkNiwgMHg1MSwgMHg2NiwgMHgyMCwgMHhiNSwgMHhhMCwgMHgwNSwKKwkweDM2LCAweDU1LCAweDg3LCAweDQzLCAweDczLCAweDNlLCAweDUyLCAweDJmLCAweDRlLCAweDVjLCAweDU3LCAweDcxLAorCTB4OTQsIDB4ODYsIDB4NmUsIDB4MGQsIDB4OGMsIDB4YTAsIDB4ZWMsIDB4ZDgsIDB4ZWIsIDB4NWEsIDB4MmMsIDB4MWYsCisJMHg4YywgMHhkNSwgMHg2OCwgMHhkMSwgMHg5OSwgMHhhMSwgMHg2OCwgMHhjNywgMHhjOSwgMHg2OCwgMHg1MSwgMHhhOSwKKwkweGU1LCAweGE4LCAweDQzLCAweDU3LCAweDgwLCAweDk1LCAweDY0LCAweGNiLCAweDI5LCAweDRlLCAweDNhLCAweDY1LAorCTB4Y2IsIDB4MTYsIDB4MGMsIDB4NTgsIDB4MTYsIDB4Y2QsIDB4MmYsIDB4NWQsIDB4M2YsIDB4NzQsIDB4ODAsIDB4M2YsCisJMHhlYywgMHg0MywgMHgzYSwgMHhlYywgMHg4MywgMHg5MSwgMHgxNCwgMHhhZCwgMHgxMSwgMHg2YywgMHg1OSwgMHhiMCwKKwkweDJmLCAweDMzLCAweGQ2LCAweDI2LCAweGI3LCAweGRmLCAweDczLCAweDc3LCAweDk0LCAweDk1LCAweGM0LCAweDRlLAorCTB4YWIsIDB4N2QsIDB4YmUsIDB4MDcsIDB4MjAsIDB4ZWUsIDB4N2YsIDB4ZmYsIDB4ZDcsIDB4ZTcsIDB4ZmQsIDB4ZTUsCisJMHg3ZiwgMHg5MCwgMHgwNiwgMHhiNywgMHg1MywgMHgxNywgMHg4NSwgMHhiMCwgMHgxZCwgMHgzZiwgMHhlZCwgMHg5OSwKKwkweDkzLCAweDI3LCAweDNlLCAweGY3LCAweGY5LCAweGNmLCAweDBkLCAweGExLCAweDM5LCAweDRjLCAweDRhLCAweDRjLAorCTB4ZTQsIDB4YzEsIDB4NWIsIDB4MTIsIDB4NTEsIDB4ZjksIDB4MWQsIDB4OGEsIDB4MjAsIDB4ODIsIDB4MDgsIDB4MjIsCisJMHg4OCwgMHgyMCwgMHg4MiwgMHgwOCwgMHgyMiwgMHg4OCwgMHgyMCwgMHg4MiwgMHgwOCwgMHgyMiwgMHg4OCwgMHgyMCwKKwkweDgyLCAweDA4LCAweDIyLCAweDg4LCAweDIwLCAweDgyLCAweDA4LCAweDIyLCAweDg4LCAweDIwLCAweDgyLCAweDA4LAorCTB4MjIsIDB4ODgsIDB4MjAsIDB4ODIsIDB4MDgsIDB4MjIsIDB4ODgsIDB4MjAsIDB4ODIsIDB4MDgsIDB4MjIsIDB4ODgsCisJMHgyMCwgMHg4MiwgMHgwOCwgMHgyMiwgMHg4OCwgMHgyMCwgMHg4MiwgMHgwOCwgMHgyMiwgMHg4OCwgMHgyMCwgMHg4MiwKKwkweDA4LCAweDIyLCAweDg4LCAweDIwLCAweDgyLCAweDA4LCAweDIyLCAweDg4LCAweDIwLCAweDgyLCAweDA4LCAweDIyLAorCTB4ZjgsIDB4OWQsIDB4MjAsIDB4MTEsIDB4YTksIDB4ZmMsIDB4ZGMsIDB4MWUsIDB4ZmUsIDB4NDgsIDB4MTEsIDB4Y2QsCisJMHhmMiwgMHg1MywgMHhiNiwgMHg0MSwgMHg4YSwgMHg2NCwgMHgxZSwgMHgzOSwgMHgzNCwgMHg2NSwgMHgxMCwgMHg1OSwKKwkweGNlLCAweDgwLCAweDU2LCAweGEwLCAweGY3LCAweGJkLCAweDZhLCAweDUyLCAweDI2LCAweGVlLCAweGZmLCAweGI0LAorCTB4ZjksIDB4ZGIsIDB4NTMsIDB4YWYsIDB4N2YsIDB4NDEsIDB4N2YsIDB4YWYsIDB4MjUsIDB4OTEsIDB4YTIsIDB4OWEsCisJMHg2YiwgMHg3OSwgMHhiNSwgMHg5ZiwgMHg5NCwgMHgzNCwgMHhkNiwgMHhmYywgMHhkNSwgMHhlZSwgMHhhZiwgMHhlZiwKKwkweGEwLCAweDQ0LCAweDdiLCAweGFmLCAweDI0LCAweGQ1LCAweDliLCAweGI3LCAweGJjLCAweGQ3LCAweDc3LCAweDI3LAorCTB4ZTksIDB4MTUsIDB4NTcsIDB4YTUsIDB4MzUsIDB4NTcsIDB4MTYsIDB4NDYsIDB4OWIsIDB4MGEsIDB4NGQsIDB4MzcsCisJMHgxZCwgMHgzYSwgMHhkZCwgMHhhOCwgMHg1MiwgMHhjMSwgMHhiZCwgMHg0YywgMHhiNSwgMHgzOSwgMHgzNSwgMHg2MSwKKwkweDJmLCAweGZmLCAweDg0LCAweGE2LCAweGU3LCAweDdhLCAweDEzLCAweDg1LCAweDY1LCAweDg3LCAweDZhLCAweDhkLAorCTB4NTQsIDB4YzIsIDB4NzYsIDB4ZDUsIDB4NDQsIDB4NjEsIDB4M2UsIDB4ODksIDB4ZjcsIDB4ZGUsIDB4ODQsIDB4M2QsCisJMHhhZiwgMHg1NywgMHg4OSwgMHg3NiwgMHg2MiwgMHg0ZSwgMHgyYSwgMHg1MSwgMHg2OCwgMHhlYSwgMHg2NSwgMHhhMiwKKwkweGJlLCAweGRjLCAweDc1LCAweDRhLCAweDI3LCAweDBhLCAweGVlLCAweDgyLCAweGIwLCAweGFlLCAweDBhLCAweDU0LAorCTB4ZmIsIDB4MmMsIDB4YTksIDB4MDksIDB4ZjMsIDB4YjYsIDB4ZjcsIDB4MjksIDB4NDMsIDB4YTUsIDB4MWUsIDB4ODMsCisJMHg3NiwgMHhlYywgMHgzMCwgMHhlOCwgMHhkOSwgMHg5NCwgMHhhOSwgMHg1MCwgMHhlNSwgMHg3YywgMHg5YywgMHgyYywKKwkweDlmLCAweDI2LCAweDk1LCAweDJhLCAweGYzLCAweDAzLCAweGVhLCAweDE1LCAweDhhLCAweDkxLCAweDk1LCAweDZjLAorCTB4YmYsIDB4N2IsIDB4OWUsIDB4OWQsIDB4ZmIsIDB4MTYsIDB4ZmYsIDB4OWQsIDB4MTYsIDB4Y2UsIDB4YTIsIDB4YzQsCisJMHhhOCwgMHg0YiwgMHg2NCwgMHgwMywgMHgyZiwgMHgzYiwgMHhmNywgMHhiZSwgMHgxNywgMHhhYywgMHg1MSwgMHg3MCwKKwkweGFlLCAweDljLCAweDE4LCAweDY5LCAweDdhLCAweDVlLCAweDMxLCAweDg3LCAweDMzLCAweDcyLCAweGVkLCAweGI1LAorCTB4MzEsIDB4NmEsIDB4MjUsIDB4YWQsIDB4ZDYsIDB4NzQsIDB4MmUsIDB4YmYsIDB4MjMsIDB4ZjgsIDB4MWIsIDB4MmYsCisJMHhhNiwgMHg5MSwgMHhkZiwgMHgyZCwgMHgxMiwgMHg4ZCwgMHhhZiwgMHg1MCwgMHgyNSwgMHg0OSwgMHhhZCwgMHg1YSwKKwkweGVlLCAweDYxLCAweDdhLCAweDIxLCAweGQ3LCAweDRkLCAweDY3LCAweGIxLCAweGRmLCAweGYzLCAweDM5LCAweGYwLAorCTB4ZDEsIDB4MzgsIDB4MjksIDB4ZDgsIDB4YWUsIDB4OWUsIDB4MjIsIDB4ZTEsIDB4MDUsIDB4YjIsIDB4ZTcsIDB4ZmIsCisJMHhkNCwgMHgwMiwgMHhlMSwgMHg2YywgMHhjMywgMHhmYiwgMHg4YywgMHg5ZCwgMHhjMywgMHg3OSwgMHg4MywgMHhmZiwKKwkweGViLCAweDU5LCAweDQ5LCAweGJkLCAweGRjLCAweGEyLCAweDE0LCAweGQ1LCAweDlhLCAweDdkLCAweGI5LCAweDlmLAorCTB4OTMsIDB4NDAsIDB4OWQsIDB4MDYsIDB4ZjMsIDB4YzcsIDB4YTMsIDB4YzcsIDB4NzAsIDB4YWUsIDB4NmQsIDB4YTAsCisJMHhkZiwgMHgyNSwgMHg0YiwgMHhjYywgMHhjNCwgMHhlOCwgMHg0ZiwgMHg1NSwgMHg1ZCwgMHhiMywgMHhhNSwgMHg1ZSwKKwkweGFhLCAweDlkLCAweGVmLCAweDA0LCAweDllLCAweDU2LCAweGFmLCAweDg4LCAweGI5LCAweDYzLCAweDc5LCAweDRhLAorCTB4NmUsIDB4MjMsIDB4MTIsIDB4MjQsIDB4MzMsIDB4ODMsIDB4N2QsIDB4ODksIDB4NmEsIDB4NGUsIDB4MGEsIDB4NmIsCisJMHgzMywgMHhjMywgMHhlZiwgMHhkMCwgMHgwZSwgMHhkMiwgMHg3YSwgMHg2NCwgMHg5YSwgMHg3NiwgMHhiYSwgMHhjMCwKKwkweGM3LCAweDZlLCAweGM4LCAweDIwLCAweDMzLCAweGZjLCAweDJlLCAweDg0LCAweDIyLCAweDFhLCAweDk5LCAweGQ0LAorCTB4NDksIDB4MmEsIDB4MGIsIDB4MDUsIDB4YjcsIDB4ODMsIDB4YTYsIDB4MzMsIDB4MGEsIDB4ZDUsIDB4ODEsIDB4NDcsCisJMHgzZCwgMHhmNywgMHgzNSwgMHhjMSwgMHg1ZSwgMHgyZSwgMHgwOSwgMHg4NSwgMHg2NSwgMHhjYywgMHg3MywgMHg1ZiwKKwkweDBiLCAweGZmLCAweDc2LCAweGFkLCAweDFiLCAweGZiLCAweDg4LCAweDU0LCAweGNiLCAweDk0LCAweDMwLCAweGE2LAorCTB4ZDAsIDB4MTQsIDB4ZTYsIDB4NGQsIDB4ODEsIDB4YTYsIDB4NjksIDB4NzcsIDB4MDcsIDB4YWQsIDB4NGYsIDB4MjYsCisJMHgxMywgMHhjYywgMHhhYiwgMHgxYSwgMHhjNiwgMHhiZiwgMHgzMiwgMHgyMSwgMHg5MCwgMHg2YSwgMHg1OCwgMHhmNCwKKwkweGViLCAweDNjLCAweDY0LCAweDM4LCAweGRmLCAweGNiLCAweDMyLCAweGEzLCAweGQzLCAweDRkLCAweDRhLCAweDhhLAorCTB4OTQsIDB4NDksIDB4NTUsIDB4ZTgsIDB4MzIsIDB4MmQsIDB4M2EsIDB4MmMsIDB4N2YsIDB4YzgsIDB4MTMsIDB4ZjIsCisJMHhhZSwgMHgzOSwgMHhiYywgMHgwZSwgMHg3MiwgMHg2YiwgMHgxNiwgMHhjMSwgMHg4ZiwgMHg3MSwgMHhlMCwgMHg3MCwKKwkweDUwLCAweDc4LCAweDZjLCAweDcxLCAweDUyLCAweDE4LCAweDczLCAweDdmLCAweDkzLCAweGEwLCAweGFlLCAweDkzLAorCTB4YzIsIDB4MDEsIDB4ZjcsIDB4YTgsIDB4MTAsIDB4ZjIsIDB4MWUsIDB4YjIsIDB4NTMsIDB4YzgsIDB4OWEsIDB4NTAsCisJMHhlOCwgMHg5MiwgMHgxYiwgMHhjOCwgMHg2ZSwgMHgwMSwgMHhmYSwgMHg2OSwgMHhhOSwgMHgxNiwgMHhlNCwgMHg3MCwKKwkweDc4LCAweDYzLCAweDBlLCAweDhmLCAweGQ1LCAweDk3LCAweDY1LCAweDNhLCAweGVkLCAweGYyLCAweGZjLCAweDNmLAorCTB4ODIsIDB4N2MsIDB4MTQsIDB4NzIsIDB4NzYsIDB4NzcsIDB4NTMsIDB4MTksIDB4ZmQsIDB4YjUsIDB4NzksIDB4YjIsCisJMHhlYywgMHg5YywgMHg4OCwgMHgzNSwgMHgwOSwgMHg5MiwgMHg4YywgMHg5ZCwgMHhmOCwgMHg3NSwgMHhkMSwgMHhkNCwKKwkweDYyLCAweGE3LCAweDI1LCAweDE5LCAweDQ5LCAweDlhLCAweDcyLCAweDk5LCAweDg3LCAweDc4LCAweDM2LCAweGRiLAorCTB4N2MsIDB4NjQsIDB4NWMsIDB4YjksIDB4OWYsIDB4ZDcsIDB4NzEsIDB4YmYsIDB4OGEsIDB4ZmUsIDB4Y2QsIDB4N2QsCisJMHhhYywgMHgxNywgMHgwOSwgMHhlMCwgMHhhMywgMHg2NywgMHg1OSwgMHg5ZiwgMHgyYiwgMHhjZCwgMHg4YywgMHg3YSwKKwkweDgwLCAweDlmLCAweDJlLCAweGYzLCAweGI2LCAweGNkLCAweDUzLCAweDE5LCAweDczLCAweDQ1LCAweGFhLCAweDJjLAorCTB4ZTIsIDB4OWMsIDB4ZjMsIDB4YmYsIDB4ZjUsIDB4NjIsIDB4NzksIDB4YmMsIDB4MWIsIDB4MWQsIDB4YTAsIDB4OGIsCisJMHhjZiwgMHg5NSwgMHg4MSwgMHg5MywgMHg0OCwgMHhlNSwgMHg0NSwgMHhkZSwgMHg4YiwgMHhjNywgMHgwOSwgMHhiMiwKKwkweGFmLCAweGY1LCAweDg4LCAweDk0LCAweDg1LCAweDdjLCAweDc1LCAweDljLCAweDEzLCAweGM3LCAweDljLCAweDZlLAorCTB4ZjAsIDB4MGYsIDB4YjQsIDB4MmUsIDB4YTMsIDB4MGQsIDB4ZGEsIDB4NDUsIDB4NDMsIDB4YzQsIDB4ZmEsIDB4NGUsCisJMHg5YSwgMHhjYSwgMHhiMSwgMHhiZSwgMHgzMCwgMHg5ZSwgMHhkYiwgMHhiMCwgMHg3NywgMHg5YywgMHg4ZSwgMHg5YywKKwkweDY3LCAweDdlLCAweGM4LCAweGY0LCAweDNjLCAweDcwLCAweDljLCAweDllLCAweGQ3LCAweGQ1LCAweDIyLCAweGU5LAorCTB4ZTAsIDB4OGQsIDB4ODUsIDB4NzksIDB4OWQsIDB4NTQsIDB4NTYsIDB4M2QsIDB4NmYsIDB4MjQsIDB4MzcsIDB4YTAsCisJMHhiZSwgMHhlYywgMHhlYiwgMHhmOSwgMHg4MCwgMHg5YSwgMHgxMSwgMHhhOCwgMHhkYSwgMHg2MSwgMHhmZSwgMHgyMSwKKwkweDcwLCAweGQwLCAweDRiLCAweDQ0LCAweGZjLCAweGZlLCAweGNmLCAweDY0LCAweDRkLCAweGIyLCAweGZkLCAweDI0LAorCTB4ZjksIDB4MmMsIDB4ZDgsIDB4ZDMsIDB4NGUsIDB4ZTAsIDB4Y2YsIDB4MzYsIDB4OTcsIDB4ODYsIDB4NWMsIDB4NTIsCisJMHhiZSwgMHgxZCwgMHg4YywgMHhkYywgMHhkNSwgMHgwZSwgMHhmNCwgMHhmMSwgMHgxNiwgMHg2YywgMHhhNiwgMHhiNiwKKwkweDJjLCAweGIzLCAweGZkLCAweGU1LCAweGEwLCAweDZlLCAweGI0LCAweGNkLCAweDgwLCAweDZlLCAweGY5LCAweGIyLAorCTB4ZDksIDB4OGYsIDB4ZmQsIDB4M2QsIDB4ZWYsIDB4Y2IsIDB4YjksIDB4MDAsIDB4YTcsIDB4ZGEsIDB4YmMsIDB4ODUsCisJMHhiNSwgMHgzMiwgMHhmOCwgMHhhZSwgMHgxZiwgMHhkNywgMHhmYywgMHhmMywgMHhmNywgMHg4NywgMHhlNywgMHhhYiwKKwkweDM0LCAweDA1LCAweGJjLCAweDZiLCAweDRkLCAweDg5LCAweDBhLCAweDJhLCAweGVmLCAweGYxLCAweDJlLCAweGY3LAorCTB4OTcsIDB4ODMsIDB4YmQsIDB4YTAsIDB4YjcsIDB4ZTcsIDB4ZmEsIDB4ZDQsIDB4N2QsIDB4YjAsIDB4MjUsIDB4YjYsCisJMHhiMSwgMHhkYSwgMHgwYSwgMHhmMywgMHgxOCwgMHhmYiwgMHhlNCwgMHg5OSwgMHhjNywgMHhhYSwgMHg4ZiwgMHhhMywKKwkweDNkLCAweGNmLCAweDdhLCAweDQ0LCAweDY5LCAweDg5LCAweDU4LCAweGNmLCAweDJmLCAweGIzLCAweDJlLCAweDQxLAorCTB4M2YsIDB4MDMsIDB4YmQsIDB4YWEsIDB4MzgsIDB4MmMsIDB4ZmYsIDB4MmYsIDB4ODUsIDB4ZjYsIDB4MjksIDB4NTIsCisJMHg3ZiwgMHg4NiwgMHhmNSwgMHhmZCwgMHgwNSwgMHgyYSwgMHhjMCwgMHhjNiwgMHhhNywgMHg3MCwgMHhkMiwgMHgyMiwKKwkweDY4LCAweDVhLCAweDY4LCAweGY2LCAweDgxLCAweDU3LCAweDZkLCAweGJiLCAweDgzLCAweDdjLCAweDA3LCAweGZmLAorCTB4YzcsIDB4MGIsIDB4ZTYsIDB4NzcsIDB4MDMsIDB4MjcsIDB4YjYsIDB4OTksIDB4OWEsIDB4MmEsIDB4NTIsIDB4MTUsCisJMHgzZiwgMHhlOCwgMHg4ZCwgMHhhMSwgMHg2NywgMHg2ZCwgMHg0OSwgMHg5ZiwgMHgyOCwgMHgwMywgMHgzNywgMHhlOCwKKwkweDNkLCAweGQ5LCAweDdiLCAweDU4LCAweDlmLCAweDMxLCAweGM3LCAweGE1LCAweGExLCAweGI2LCAweDlkLCAweDJkLAorCTB4MzgsIDB4MmMsIDB4YTcsIDB4MmUsIDB4OWMsIDB4ZGIsIDB4YzYsIDB4NDksIDB4NDYsIDB4MWYsIDB4ZWYsIDB4YTMsCisJMHg0MCwgMHhlNywgMHhkYiwgMHgzYSwgMHhjMywgMHhmYSwgMHhhNywgMHg1YiwgMHhlYiwgMHhkNCwgMHg0MSwgMHhkOSwKKwkweDBjLCAweDdjLCAweGQ5LCAweGJjLCAweDA4LCAweGY5LCAweGE1LCAweGUxLCAweDUzLCAweDY0LCAweDdhLCAweGJhLAorCTB4OTksIDB4YTQsIDB4NjMsIDB4NGQsIDB4YzYsIDB4YWYsIDB4MDgsIDB4YmIsIDB4ODMsIDB4NmYsIDB4OWIsIDB4MWYsCisJMHg4NSwgMHg5ZCwgMHg4ZCwgMHgwYiwgMHgyMywgMHhiMCwgMHg4OSwgMHg0NywgMHgxNywgMHgxOSwgMHgyNywgMHg4ZiwKKwkweGQ4LCAweDJlLCAweDhiLCAweGNiLCAweDY1LCAweDYxLCAweGQ0LCAweDJkLCAweDA5LCAweGUzLCAweGNiLCAweDZjLAorCTB4MjcsIDB4NmMsIDB4MjMsIDB4YmEsIDB4ZmEsIDB4MzgsIDB4MzEsIDB4MGQsIDB4OTgsIDB4ZTMsIDB4ZmUsIDB4MjIsCisJMHhjMSwgMHhiNiwgMHg1YSwgMHgzYiwgMHgxNywgMHgwNywgMHgxZSwgMHhkYiwgMHg4MCwgMHg0ZiwgMHgzNywgMHg2YywKKwkweDBmLCAweGZhLCAweDY1LCAweGU4LCAweDEzLCAweGFjLCAweDMzLCAweGM1LCAweDhjLCAweGExLCAweGZkLCAweDI1LAorCTB4N2QsIDB4OWMsIDB4MGYsIDB4MjMsIDB4MWIsIDB4N2MsIDB4MTgsIDB4MDAsIDB4NGYsIDB4M2UsIDB4Y2MsIDB4ODcsCisJMHhmYSwgMHhjNywgMHhmOSwgMHg2MCwgMHg1NSwgMHhjMSwgMHg4NywgMHgzYSwgMHhmYywgMHg1MCwgMHhkZCwgMHg2NSwKKwkweDlhLCAweDNkLCAweDEyLCAweGY3LCAweDEwLCAweGI0LCAweDkzLCAweGY2LCAweDhhLCAweDI2LCAweGViLCAweDI4LAorCTB4ZGIsIDB4NDksIDB4NDYsIDB4OWIsIDB4YzYsIDB4MGUsIDB4NGIsIDB4NGUsIDB4YjcsIDB4NmYsIDB4MWIsIDB4YTMsCisJMHgzZSwgMHgyZiwgMHg3ZSwgMHgxNywgMHhiZCwgMHg0YywgMHhkZiwgMHgxZCwgMHg5YSwgMHhjNywgMHgxNywgMHhkOSwKKwkweGRmLCAweDQwLCAweGNmLCAweDMzLCAweDg2LCAweDdhLCAweDg4LCAweGVlLCAweGQwLCAweGJkLCAweGVmLCAweDBlLAorCTB4ZGQsIDB4MzgsIDB4YTcsIDB4ZWQsIDB4ODMsIDB4OTgsIDB4ZTYsIDB4YjYsIDB4M2YsIDB4NjYsIDB4NWQsIDB4NzksCisJMHhjMywgMHg5MywgMHgwYywgMHgwMywgMHgzMiwgMHg2MCwgMHg3ZCwgMHg2MSwgMHgxYywgMHg3NCwgMHhmNSwgMHhjYiwKKwkweGEwLCAweGE3LCAweDAyLCAweGJmLCAweGMwLCAweGI2LCAweDU0LCAweGY2LCAweGU3LCAweDc1LCAweDUwLCAweGI5LAorCTB4MjcsIDB4OTgsIDB4M2YsIDB4ZDUsIDB4ZjQsIDB4ZmUsIDB4NGIsIDB4MzQsIDB4M2YsIDB4ZjAsIDB4ZWMsIDB4YmMsCisJMHgxMSwgMHhkYSwgMHhiOCwgMHg0MiwgMHg3ZiwgMHhiMiwgMHhhOCwgMHg5NywgMHgzNSwgMHhhMSwgMHg5YiwgMHhhYSwKKwkweGY3LCAweGMzLCAweGFmLCAweDM0LCAweGQ5LCAweDNlLCAweDc2LCAweGRlLCAweGMzLCAweDk3LCAweGE1LCAweDQzLAorCTB4NWYsIDB4ZjYsIDB4M2UsIDB4NzgsIDB4Y2YsIDB4YjEsIDB4ZTcsIDB4ZTgsIDB4MDcsIDB4ZWIsIDB4NDksIDB4N2UsCisJMHg2NiwgMHhkNCwgMHgwOSwgMHgyYSwgMHg3MSwgMHhiYywgMHhkOSwgMHgyMSwgMHhmYSwgMHhmZSwgMHhiYiwgMHg4ZiwKKwkweDYzLCAweDQxLCAweDU1LCAweDM2LCAweGUzLCAweDU0LCAweGVkLCAweGExLCAweGFhLCAweDY0LCAweGIyLCAweDFkLAorCTB4YjEsIDB4NmQsIDB4YjQsIDB4ZjEsIDB4ZGUsIDB4MWUsIDB4YzYsIDB4ZGQsIDB4NDEsIDB4ODksIDB4MGMsIDB4MWUsCisJMHg0NywgMHg4YywgMHg2OCwgMHgzMiwgMHgwZCwgMHhlZiwgMHg4NywgMHhmMiwgMHg2MCwgMHg3ZiwgMHg0YSwgMHhiMSwKKwkweDQwLCAweGRmLCAweGY2LCAweGMzLCAweDVmLCAweDMyLCAweDNmLCAweDM3LCAweGViLCAweDBhLCAweGZiLCAweDUxLAorCTB4ZDIsIDB4NDQsIDB4ODMsIDB4ZmQsIDB4MjgsIDB4YTksIDB4OTIsIDB4NzksIDB4NTAsIDB4YjAsIDB4MTYsIDB4YmYsCisJMHgyNiwgMHg1OCwgMHhlMCwgMHg5YiwgMHgwNSwgMHhiZSwgMHg1OSwgMHhlMCwgMHg5YiwgMHgwZCwgMHhiZSwgMHgxNSwKKwkweDVjLCAweGM2LCAweDg1LCAweGYxLCAweDA4LCAweGY2LCAweDJmLCAweDA2LCAweGZiLCAweDAzLCAweGM3LCAweDlkLAorCTB4NTQsIDB4ZjEsIDB4ZWQsIDB4OWIsIDB4NjksIDB4ODUsIDB4M2YsIDB4ZjYsIDB4N2QsIDB4YzEsIDB4YTgsIDB4MTAsCisJMHhmOCwgMHgwMiwgMHhkZSwgMHg2ZiwgMHgxYywgMHhlYiwgMHgxZiwgMHg0NywgMHg4YywgMHhiMywgMHg0NCwgMHhkMSwKKwkweGI4LCAweGMzLCAweDhmLCAweGZhLCAweDI2LCAweDdlLCAweDRjLCAweDNiLCAweGNjLCAweDFmLCAweDllLCAweGNmLAorCTB4NzYsIDB4ZWMsIDB4NDAsIDB4ZTYsIDB4NmQsIDB4OWUsIDB4ZWMsIDB4MDcsIDB4MGUsIDB4OWQsIDB4NGMsIDB4NzcsCisJMHg0OCwgMHgwNywgMHhlZiwgMHhkZiwgMHgxYiwgMHhlZSwgMHg3ZiwgMHgwMCwgMHg3YiwgMHhiMiwgMHhkZCwgMHhkZSwKKwkweGVkLCAweDVjLCAweDNlLCAweDkzLCAweGUzLCAweGU4LCAweDI3LCAweGQxLCAweDgzLCAweDNjLCAweDAyLCAweDdlLAorCTB4NjYsIDB4MGQsIDB4NzYsIDB4NzYsIDB4NTMsIDB4NGEsIDB4ZDEsIDB4ZWIsIDB4YmIsIDB4NmYsIDB4MjAsIDB4YjcsCisJMHhhMCwgMHhlYSwgMHgwMywgMHhhNiwgMHhhNywgMHhjOSwgMHhlNiwgMHhmYiwgMHg1ZSwgMHgzZCwgMHgwZiwgMHhkZiwKKwkweDY5LCAweGVhLCAweDI5LCAweDViLCAweDFhLCAweGE0LCAweDM3LCAweGRjLCAweDJjLCAweGZkLCAweDlkLCAweDZiLAorCTB4ZDAsIDB4ZGYsIDB4YmEsIDB4MWEsIDB4YmQsIDB4ZWEsIDB4YTYsIDB4ZTksIDB4NmYsIDB4ZGMsIDB4MTQsIDB4ZmQsCisJMHhiNSwgMHhkYiwgMHhjZSwgMHg0MywgMHg5MiwgMHhhYywgMHg0NywgMHg4OSwgMHhhMiwgMHg3YiwgMHhiNywgMHg1YywKKwkweDA4LCAweDNhLCAweDhlLCAweGJkLCAweGVjLCAweGJjLCAweDVjLCAweDk2LCAweDRkLCAweDNmLCAweDNmLCAweDk4LAorCTB4OTgsIDB4NmUsIDB4OTAsIDB4YjIsIDB4ZDMsIDB4YTAsIDB4ZWQsIDB4ZjcsIDB4MjMsIDB4ZWYsIDB4NDksIDB4OWEsCisJMHhiNCwgMHhlMywgMHgzZSwgMHgzYywgMHg3YiwgMHg0ZCwgMHhiMiwgMHg3YSwgMHhjYywgMHg1MywgMHg5ZSwgMHg2OCwKKwkweGIwLCAweDFlLCAweDc1LCAweDBmLCAweDRmLCAweGU1LCAweGUzLCAweDhjLCAweGZiLCAweGM0LCAweDM0LCAweGZjLAorCTB4OTEsIDB4OGQsIDB4YjMsIDB4YWEsIDB4ZDAsIDB4YzUsIDB4YWEsIDB4N2IsIDB4ZTgsIDB4ZmUsIDB4MjAsIDB4MTcsCisJMHg3YSwgMHgyZiwgMHhjYywgMHg4OSwgMHgzOCwgMHhhZiwgMHg1YSwgMHg3ZiwgMHg2YSwgMHhjMiwgMHg2MCwgMHgzZiwKKwkweDJiLCAweDZjLCAweGYyLCAweGIzLCAweDI0LCAweDE0LCAweDQxLCAweDUzLCAweDFkLCAweGI4LCAweDE2LCAweDQxLAorCTB4ZTcsIDB4NTcsIDB4NWQsIDB4NDUsIDB4MjgsIDB4OWMsIDB4ZWYsIDB4YTUsIDB4ZTksIDB4NDUsIDB4OGUsIDB4NTUsCisJMHgzYywgMHg0ZiwgMHgwOSwgMHg3MywgMHgxOSwgMHg3ZSwgMHhlZiwgMHhjMCwgMHgzYiwgMHgyMSwgMHg3ZSwgMHgxNCwKKwkweGI2LCAweDUzLCAweDQyLCAweDdmLCAweDczLCAweDgyLCAweDljLCAweDMwLCAweDE3LCAweDg5LCAweGQxLCAweDA1LAorCTB4NWYsIDB4NzcsIDB4YjgsIDB4ZGYsIDB4MmEsIDB4ZmQsIDB4YjAsIDB4ZmYsIDB4NGUsIDB4ZmYsIDB4ZjksIDB4OGQsCisJMHhmZSwgMHg3MiwgMHhlOSwgMHhlYiwgMHgxYiwgMHhmZCwgMHhlZiwgMHhhOCwgMHgwMSwgMHg0ZSwgMHhjMywgMHhjMiwKKwkweGUzLCAweGVlLCAweGYzLCAweDYxLCAweGRmLCAweDZkLCAweGYwLCAweGQzLCAweGYzLCAweGVhLCAweDg4LCAweDI3LAorCTB4MzUsIDB4ZTMsIDB4MzYsIDB4NzIsIDB4MWYsIDB4ZjYsIDB4MjksIDB4NWIsIDB4ZjEsIDB4MjEsIDB4MWYsIDB4ZjIsCisJMHgxZiwgMHhhYSwgMHgyZCwgMHhiMSwgMHg5YywgMHgxNCwgMHgwYSwgMHhmNiwgMHhlNCwgMHhmMSwgMHg0ZSwgMHhmOCwKKwkweDkyLCAweGRiLCAweDY4LCAweDczLCAweGVjLCAweDZhLCAweGZiLCAweDMxLCAweDllLCAweGMzLCAweGViLCAweDZmLAorCTB4ZGQsIDB4NDMsIDB4OTYsIDB4MmEsIDB4NjQsIDB4YjksIDB4MzUsIDB4NzksIDB4ZDUsIDB4MWEsIDB4YTcsIDB4NDIsCisJMHg5ZiwgMHhkMCwgMHgzZCwgMHg2YywgMHg0MywgMHgyZSwgMHgxMiwgMHhlNCwgMHg1MiwgMHg4MywgMHg1YywgMHgwYSwKKwkweGY3LCAweDk0LCAweDBiLCAweGNlLCAweGQ4LCAweGQwLCAweDI5LCAweGM2LCAweGEzLCAweDJiLCAweDNjLCAweDliLAorCTB4MTQsIDB4ZDksIDB4YWMsIDB4OTYsIDB4ZWEsIDB4YzYsIDB4YTcsIDB4MjgsIDB4NjYsIDB4MzAsIDB4MWUsIDB4MDYsCisJMHhmMCwgMHgzOCwgMHg4YSwgMHhiNSwgMHgxYywgMHhjMywgMHg0OCwgMHg4OSwgMHg5OSwgMHgyYywgMHhjZiwgMHhkYywKKwkweDEzLCAweGI2LCAweDcxLCAweGFiLCAweGI0LCAweGUwLCAweGRjLCAweDJhLCAweDVkLCAweDM0LCAweGY4LCAweGZkLAorCTB4ZjYsIDB4NjQsIDB4OTAsIDB4MzcsIDB4NzcsIDB4M2YsIDB4ODksIDB4YmMsIDB4MTksIDB4ZWIsIDB4ZDksIDB4MWYsCisJMHg3MiwgMHhmZiwgMHgzMCwgMHhlNiwgMHg3MSwgMHg3YywgMHhhMCwgMHg0MywgMHgzNSwgMHhmYywgMHhlYSwgMHhmZSwKKwkweGRjLCAweDZiLCAweDRmLCAweGYwLCAweGRjLCAweDRlLCAweDUzLCAweDllLCAweGZjLCAweDM1LCAweDllLCAweDFkLAorCTB4YTYsIDB4ZjYsIDB4ZTQsIDB4NGYsIDB4MGQsIDB4ZGUsIDB4NzcsIDB4NzgsIDB4ZjIsIDB4YTIsIDB4YmYsIDB4MDcsCisJMHg2MiwgMHhhNiwgMHhiZiwgMHgzNiwgMHhmYiwgMHgyNCwgMHhhZiwgMHg3ZCwgMHgwZSwgMHgzZSwgMHhmNiwgMHgwYywKKwkweGUyLCAweGNiLCAweDY5LCAweDQ3LCAweDNiLCAweDU0LCAweGMxLCAweDZmLCAweDhhLCAweDcxLCAweDZhLCAweGYyLAorCTB4YjgsIDB4ODUsIDB4NzEsIDB4MTksIDB4YjEsIDB4OTAsIDB4ZGIsIDB4MGEsIDB4MWQsIDB4YzMsIDB4YmMsIDB4YTcsCisJMHgzMSwgMHhlZiwgMHhhOCwgMHgzMywgMHg4ZSwgMHhiYywgMHhiZCwgMHg0ZCwgMHhkNywgMHhiZiwgMHhjNSwgMHgwYiwKKwkweGYzLCAweGVjLCAweGNmLCAweDkxLCAweGVkLCAweGFmLCAweGZjLCAweDdiLCAweGRjLCAweDg2LCAweDVmLCAweDE2LAorCTB4NTcsIDB4NmUsIDB4YzYsIDB4MGIsIDB4YTAsIDB4NWIsIDB4NWEsIDB4ZjksIDB4NDUsIDB4YmMsIDB4MDgsIDB4M2QsCisJMHgxMywgMHgwZCwgMHgwOSwgMHg3ZSwgMHhmOSwgMHgzMywgMHg1NCwgMHg1MywgMHgzZCwgMHg3YSwgMHgxOSwgMHhmMSwKKwkweGFiLCAweDk2LCAweDg1LCAweGJmLCAweDgyLCAweDM0LCAweDQ1LCAweDAzLCAweDdlLCAweDRjLCAweDI1LCAweGE1LAorCTB4Y2IsIDB4M2MsIDB4YTksIDB4NTIsIDB4NTcsIDB4M2UsIDB4NmUsIDB4MjMsIDB4ZGUsIDB4ZDQsIDB4NTQsIDB4MDksCisJMHhmZCwgMHhmZCwgMHg3OCwgMHg2ZSwgMHhlZSwgMHhmZiwgMHg2NSwgMHgxYywgMHg3ZSwgMHgwYiwgMHgzZSwgMHg4MiwKKwkweDE0LCAweDNiLCAweGRmLCAweDhkLCAweGZkLCAweGJmLCAweDhkLCAweDdlLCAweDRjLCAweGM4LCAweDZjLCAweGY0LAorCTB4M2YsIDB4MWIsIDB4ZjQsIDB4ZGYsIDB4MDIsIDB4MmUsIDB4YmMsIDB4OGUsIDB4ZTMsIDB4MjcsIDB4MjksIDB4NTMsCisJMHg3OSwgMHgxNSwgMHgzOCwgMHhmMCwgMHhkYywgMHhhNCwgMHgzZiwgMHhiNywgMHgzOCwgMHhjZiwgMHgzYywgMHhhOCwKKwkweDk2LCAweDE2LCAweDhjLCAweDM0LCAweDE1LCAweGU2LCAweDkyLCAweDM0LCAweDNhLCAweGE3LCAweGQyLCAweGQ4LAorCTB4OWMsIDB4M2UsIDB4ZDEsIDB4NjIsIDB4ZmIsIDB4MDEsIDB4Y2QsIDB4ODQsIDB4MWMsIDB4NDEsIDB4NWMsIDB4MjEsCisJMHg1MCwgMHhhYywgMHhhNywgMHg5ZSwgMHhhNiwgMHhiZSwgMHhkNCwgMHgzMSwgMHhmYSwgMHg2ZiwgMHgwZiwgMHhiMSwKKwkweDA4LCAweDcxLCAweGE4LCAweDliLCAweDY0LCAweDdmLCAweDlmLCAweDU0LCAweGZiLCAweDRjLCAweDk2LCAweGQxLAorCTB4ODcsIDB4Y2UsIDB4MmQsIDB4Y2UsIDB4ZGYsIDB4NmIsIDB4NWYsIDB4MjgsIDB4ZjEsIDB4NGEsIDB4ZWEsIDB4MjMsCisJMHhmYiwgMHhiZSwgMHgxYiwgMHhlZSwgMHhhYiwgMHg2MiwgMHhkZiwgMHgzNCwgMHhmNiwgMHg2NCwgMHgxYSwgMHhmNSwKKwkweGY4LCAweGM4LCAweDc5LCAweGIyLCAweDNhLCAweDgxLCAweDVmLCAweDMxLCAweDgzLCAweDk4LCAweDhmLCAweDdkLAorCTB4Y2UsIDB4Y2MsIDB4YjEsIDB4ZGUsIDB4ZDMsIDB4NGUsIDB4ZmMsIDB4MDYsIDB4NjMsIDB4OTQsIDB4YzksIDB4MmUsCisJMHgyMywgMHgyNywgMHgxOCwgMHhmMSwgMHhmNywgMHgwOCwgMHhmMiwgMHgwNSwgMHg3MSwgMHg2NSwgMHgxMCwgMHhmOSwKKwkweGRhLCAweDNiLCAweGMwLCAweDg3LCAweGUzLCAweDE4LCAweGQzLCAweDJjLCAweDgzLCAweGRlLCAweDQxLCAweGU0LAorCTB4MDksIDB4OWMsIDB4ZTMsIDB4N2IsIDB4YTcsIDB4ZWMsIDB4MWMsIDB4ZGEsIDB4Y2IsIDB4NWEsIDB4YmMsIDB4MDAsCisJMHhkYiwgMHgxNiwgMHg0ZCwgMHg3YSwgMHg1MCwgMHhmMiwgMHg3ZCwgMHgyYywgMHhjYiwgMHg2NSwgMHgxMCwgMHg3MiwKKwkweDYyLCAweGJjLCAweDczLCAweDkwLCAweDEzLCAweGYzLCAweDY4LCAweDM4LCAweDVlLCAweDZjLCAweDMyLCAweDhmLAorCTB4MDgsIDB4ZjgsIDB4NjgsIDB4YjAsIDB4MjcsIDB4ZDksIDB4Y2YsIDB4ZjMsIDB4YzUsIDB4MTUsIDB4MGIsIDB4ZjMsCisJMHg3ZSwgMHhhYywgMHg3MiwgMHgyZSwgMHg2NiwgMHgxYiwgMHhkYywgMHg4NiwgMHhlZCwgMHhhYywgMHg4YywgMHg2MywKKwkweDJlLCAweGI3LCAweDFmLCAweGM2LCAweGJlLCAweDdkLCAweGI5LCAweDFhLCAweDc1LCAweGU0LCAweDllLCAweDg2LAorCTB4ZGQsIDB4OGEsIDB4ZjksIDB4MDEsIDB4YzQsIDB4NjgsIDB4MDEsIDB4YjksIDB4YTAsIDB4ZTcsIDB4NzUsIDB4ZTQsCisJMHhiZiwgMHgwMCwgMHg3YSwgMHg5OCwgMHgwZSwgMHhlOCwgMHhmNSwgMHgyYywgMHhmMywgMHg5NSwgMHhmZSwgMHg0MCwKKwkweGU0LCAweDVjLCAweDJkLCAweGRmLCAweGNlLCAweDZiLCAweDM4LCAweDllLCAweGYzLCAweGY5LCAweDg4LCAweDIzLAorCTB4OGQsIDB4M2QsIDB4ODgsIDB4YTUsIDB4ZmUsIDB4ZDksIDB4ZDAsIDB4YjEsIDB4NzEsIDB4MmEsIDB4MzQsIDB4M2UsCisJMHg4YiwgMHg5YywgMHg5MywgMHg2ZCwgMHg2NywgMHg5YiwgMHg2MCwgMHg5ZiwgMHg2NywgMHgxYSwgMHgwOSwgMHhiMSwKKwkweDY2LCAweDhkLCAweDJhLCAweDBkLCAweDM5LCAweDZjLCAweGJmLCAweDhhLCAweGI2LCAweDEyLCAweGI2LCAweGQ3LAorCTB4ZDEsIDB4ZWUsIDB4MGUsIDB4ZGIsIDB4ZDcsIDB4ZDAsIDB4NTYsIDB4YzMsIDB4ZjYsIDB4Y2YsIDB4ZDAsIDB4NGUsCisJMHg4NiwgMHhlZCwgMHg5ZiwgMHhhMywgMHg5ZCwgMHgwYSwgMHhkYiwgMHgzNywgMHhkMSwgMHg0ZSwgMHg4NywgMHhlZCwKKwkweDViLCAweDY4LCAweDZiLCAweDYxLCAweGZiLCAweDNkLCAweGI0LCAweDEzLCAweGIwLCAweDczLCAweDAzLCAweGVmLAorCTB4MzcsIDB4NTAsIDB4MmIsIDB4NjYsIDB4ZjEsIDB4ZmMsIDB4NTcsIDB4ZTAsIDB4MzYsIDB4MDgsIDB4ZGUsIDB4NjQsCisJMHhjMSwgMHg4ZiwgMHg1ZSwgMHg4YywgMHhlNSwgMHhkMCwgMHg4NywgMHgxYywgMHhiMSwgMHg5MSwgMHhjNywgMHhkMywKKwkweGMxLCAweDE4LCAweDk1LCAweDYxLCAweDdiLCAweDE4LCAweDFmLCAweDJmLCAweDE2LCAweDFhLCAweDI2LCAweDllLAorCTB4NmMsIDB4MGYsIDB4YmEsIDB4NGEsIDB4YzIsIDB4NjUsIDB4ZDgsIDB4YjksIDB4ZWYsIDB4NjMsIDB4NzIsIDB4YjYsCisJMHgzNCwgMHgwOSwgMHhkYiwgMHg5ZSwgMHhhMCwgMHg3ZiwgMHg3NCwgMHhmNywgMHhkMywgMHg2YiwgMHhlZSwgMHgzOCwKKwkweGUyLCAweDQ2LCAweDExLCAweDcxLCAweGMzLCAweDQyLCAweGRjLCAweDMwLCAweDExLCAweDM3LCAweDg2LCAweDExLAorCTB4MzcsIDB4ZjIsIDB4ODgsIDB4MWIsIDB4MzksIDB4YzQsIDB4MGQsIDB4YTIsIDB4MzMsIDB4N2UsIDB4OGMsIDB4NGEsCisJMHgyYSwgMHhhOCwgMHg1MSwgMHgxNSwgMHhjYiwgMHgyZCwgMHg4MiwgMHhiZiwgMHgxMywgMHg5MCwgMHhjZCwgMHgyNCwKKwkweDc4LCAweDdkLCAweDM4LCAweDNlLCAweGQyLCAweGNjLCAweGMzLCAweDlmLCAweDY5LCAweGYwLCAweDExLCAweDY5LAorCTB4ZjgsIDB4ZjIsIDB4MWMsIDB4NmEsIDB4MTMsIDB4YTIsIDB4MmIsIDB4YjMsIDB4MWEsIDB4ZmMsIDB4OGYsIDB4NDcsCisJMHg0NSwgMHhjNCwgMHhmZSwgMHg2OSwgMHgxNSwgMHhiOCwgMHgxOSwgMHhiYiwgMHg3YywgMHg5YiwgMHg5MSwgMHhjYywKKwkweDJmLCAweGY2LCAweDUwLCAweGQ3LCAweDIwLCAweGU4LCAweDM5LCAweDhiLCAweGJlLCAweDE0LCAweGY2LCAweDYzLAorCTB4YmUsIDB4ZGUsIDB4MmEsIDB4ZDksIDB4ODYsIDB4NDYsIDB4MGIsIDB4NmUsIDB4MWMsIDB4ZmUsIDB4OWYsIDB4ZGYsCisJMHhlMywgMHhjYywgMHhlMywgMHg0MywgMHg0ZiwgMHgxOSwgMHg0YywgMHgwMywgMHhlYSwgMHgzYywgMHgyMywgMHhhZCwKKwkweDE0LCAweDFjLCAweDgxLCAweDI0LCAweDkzLCAweDlmLCAweGVkLCAweDFjLCAweGUyLCAweGNmLCAweDkwLCAweDQzLAorCTB4NzQsIDB4NDEsIDB4MDYsIDB4NTUsIDB4YzQsIDB4MDUsIDB4OWQsIDB4ZjMsIDB4MGIsIDB4ZTgsIDB4ZjIsIDB4MjcsCisJMHhjZCwgMHhmZiwgMHgxZSwgMHhlNiwgMHhlZiwgMHhjNSwgMHhkOSwgMHgzYywgMHg4ZiwgMHhjZiwgMHgzOSwgMHg4NSwKKwkweGZhLCAweGMxLCAweGVhLCAweDkxLCAweDY4LCAweDNkLCAweDI1LCAweGExLCAweDllLCAweDI4LCAweGQwLCAweDU5LAorCTB4MmEsIDB4MDAsIDB4OWYsIDB4ODIsIDB4ZGIsIDB4YmUsIDB4MDcsIDB4YjAsIDB4MGUsIDB4MDUsIDB4ZmUsIDB4NmMsCisJMHhlMiwgMHhkMCwgMHhiNywgMHgwZCwgMHgwYiwgMHhlYiwgMHgxOCwgMHgzZiwgMHhkNiwgMHg1YiwgMHhlMCwgMHhiZSwKKwkweGIxLCAweGU3LCAweDA1LCAweGVjLCAweGY5LCAweDRmLCAweDQ5LCAweGVhLCAweDlhLCAweDBjLCAweGZjLCAweDkxLAorCTB4NWYsIDB4ZjMsIDB4Y2EsIDB4YzIsIDB4NDgsIDB4ZjMsIDB4MmMsIDB4ZjgsIDB4ZDMsIDB4ODcsIDB4MWEsIDB4MDUsCisJMHg3ZSwgMHhhNCwgMHhkNCwgMHgwMiwgMHg5ZiwgMHhkYSwgMHhmMywgMHg1ZiwgMHhjMSwgMHg3YywgMHg3ZSwgMHhmNywKKwkweGVmLCAweDBlLCAweDRhLCAweGQyLCAweGVhLCAweDEyLCAweGU2LCAweDY5LCAweGFjLCAweDNmLCAweDI1LCAweGI5LAorCTB4ZmYsIDB4ODYsIDB4ZjcsIDB4YTIsIDB4OTEsIDB4YTcsIDB4NWQsIDB4YWIsIDB4YmMsIDB4MmUsIDB4NGIsIDB4N2QsCisJMHhhYiwgMHgzNywgMHhiYywgMHg5YSwgMHhhMywgMHhkMSwgMHg2MiwgMHg5MywgMHhjMCwgMHhhYiwgMHhmOCwgMHg2ZCwKKwkweDhiLCAweGY0LCAweDM1LCAweDEyLCAweGY1LCAweDU5LCAweDBiLCAweDdhLCAweDVhLCAweDFjLCAweDEyLCAweGM5LAorCTB4MWUsIDB4ZWEsIDB4ODQsIDB4OGYsIDB4MzIsIDB4NjgsIDB4MDksIDB4N2MsIDB4ZGYsIDB4MzUsIDB4NjMsIDB4ZDEsCisJMHgxMywgMHg0MywgMHhlZCwgMHg3YywgMHgxMCwgMHg1MSwgMHgwZiwgMHhiOCwgMHhlZSwgMHg1YSwgMHhkNSwgMHgzMCwKKwkweDg3LCAweDczLCAweDcxLCAweGE2LCAweDQ1LCAweDAzLCAweDJmLCAweDg1LCAweDYwLCAweDhkLCAweDFmLCAweGIzLAorCTB4YjgsIDB4OGUsIDB4MDUsIDB4ZGYsIDB4ZGMsIDB4YjUsIDB4ZDIsIDB4ZDUsIDB4MTksIDB4ZDQsIDB4MWEsIDB4OTAsCisJMHhmMywgMHhhZSwgMHgxOSwgMHhhZSwgMHg4NSwgMHhiNiwgMHg4MSwgMHgyZiwgMHgzMSwgMHhkOCwgMHgwNiwgMHhlNywKKwkweGYxLCAweDA4LCAweGY0LCAweGYwLCAweDg3LCAweDI3LCAweGUwLCAweGYxLCAweDZiLCAweGNkLCAweDEzLCAweGQwLAorCTB4ZmIsIDB4MmUsIDB4MmEsIDB4Y2IsIDB4M2UsIDB4MTEsIDB4OWYsIDB4YzAsIDB4ZTMsIDB4ZmYsIDB4ZTQsIDB4YmMsCisJMHgwZSwgMHhmMywgMHhiZiwgMHg0YiwgMHhjNSwgMHhkOSwgMHgyZSwgMHhlYywgMHhiNSwgMHg5YiwgMHhhNiwgMHg5MywKKwkweDhjLCAweDliLCAweDNlLCAweDhjLCAweDQxLCAweDJkLCAweDA2LCAweDdlLCAweGM2LCAweGNkLCAweDhmLCAweGU2LAorCTB4N2QsIDB4NmIsIDB4YTUsIDB4MmIsIDB4MzMsIDB4NmIsIDB4YTUsIDB4NmIsIDB4YTAsIDB4YmYsIDB4NmUsIDB4NzAsCisJMHg4ZCwgMHgwYywgMHg1ZCwgMHg2YSwgMHg3MCwgMHg2ZCwgMHhjZiwgMHg3OSwgMHhkMSwgMHgxOCwgMHg3NCwgMHg2NCwKKwkweGJmLCAweDVmLCAweDMzLCAweGRiLCAweDhiLCAweDM5LCAweGVhLCAweDNiLCAweDQ3LCAweGFhLCAweDY4LCAweDk2LAorCTB4ODQsIDB4MzEsIDB4ZTQsIDB4NDUsIDB4MjMsIDB4ZWUsIDB4NDksIDB4N2YsIDB4ZWUsIDB4OTksIDB4MDYsIDB4ZDcsCisJMHgyYiwgMHgxOCwgMHg1YiwgMHg2MSwgMHg1ZCwgMHgxOCwgMHgwMywgMHgzZSwgMHg0OSwgMHhiYSwgMHhlOCwgMHhiMiwKKwkweDRmLCAweDBhLCAweGVjLCAweDc4LCAweDBjLCAweGZjLCAweDVhLCAweGYwLCAweGU5LCAweDRhLCAweDcxLCAweDFjLAorCTB4NDcsIDB4YmUsIDB4YzEsIDB4ZjIsIDB4ZjksIDB4MjEsIDB4YzcsIDB4NDEsIDB4YTEsIDB4ZDMsIDB4NmMsIDB4ZmIsCisJMHhkYiwgMHg4OSwgMHg1ZSwgMHhlNiwgMHg1OSwgMHhhMSwgMHgwMSwgMHhkZiwgMHgzZiwgMHgzNCwgMHgxMSwgMHhlNiwKKwkweDFjLCAweDdmLCAweDhmLCAweDM5LCAweDhjLCAweDNiLCAweGNkLCAweDRhLCAweDI2LCAweGNlLCAweGM4LCAweDMzLAorCTB4Y2YsIDB4MzgsIDB4YTcsIDB4ZTQsIDB4N2QsIDB4YzEsIDB4NWIsIDB4ZjAsIDB4N2QsIDB4NTMsIDB4NmUsIDB4ZTksCisJMHhjMywgMHg3NCwgMHgzMywgMHg0NiwgMHg5NSwgMHg1OSwgMHhmMCwgMHgyZSwgMHg4ZiwgMHgyNywgMHg5YywgMHg2YiwKKwkweDFkLCAweDdjLCAweDAzLCAweDJkLCAweGQ1LCAweDIwLCAweDlmLCAweDNkLCAweGMxLCAweDMxLCAweDBkLCAweGZlLAorCTB4MDYsIDB4MzYsIDB4Y2QsIDB4MzEsIDB4NmIsIDB4ZTMsIDB4ZGUsIDB4YzksIDB4ZjcsIDB4MjUsIDB4MzIsIDB4MTksCisJMHg0MSwgMHhjZSwgMHgyYSwgMHhlMiwgMHgyYywgMHgzYiwgMHhjZiwgMHg3ZSwgMHgxMCwgMHhmOCwgMHhiOCwgMHhkZiwKKwkweGE1LCAweGZhLCAweDJjLCAweGQzLCAweDA1LCAweDFiLCAweDRmLCAweGIyLCAweDJlLCAweGZlLCAweDdmLCAweGY5LAorCTB4MzgsIDB4YmEsIDB4NDUsIDB4M2UsIDB4OGUsIDB4NmUsIDB4OTksIDB4OGYsIDB4MTIsIDB4ZjgsIDB4NTgsIDB4ZDksCisJMHhlMCwgMHhhMywgMHg4MiwgMHgzZCwgMHhmOCwgMHgzZSwgMHhlMSwgMHhhYiwgMHg2NCwgMHg0ZCwgMHgzYywgMHgwMiwKKwkweDNmLCAweDBjLCAweGZmLCAweGQxLCAweDNjLCAweDA1LCAweDlmLCAweDcwLCAweDUyLCAweGI4LCAweGRhLCAweGYwLAorCTB4NjgsIDB4MWMsIDB4YjUsIDB4YjIsIDB4NzQsIDB4ZmYsIDB4NjYsIDB4ZmEsIDB4MzMsIDB4YTAsIDB4ZmYsIDB4Y2YsCisJMHgzMSwgMHg1ZSwgMHhhNSwgMHg2YiwgMHhiMywgMHg5NCwgMHg1NiwgMHhhOCwgMHg3ZCwgMHgyZSwgMHhlZCwgMHg5MiwKKwkweGU5LCAweDNiLCAweDc0LCAweDc1LCAweGI2LCAweDhiLCAweGFlLCAweGNmLCAweDY2LCAweGMwLCAweGViLCAweDJjLAorCTB4YzUsIDB4N2EsIDB4MzIsIDB4YzMsIDB4MTUsIDB4MTgsIDB4ZjEsIDB4Y2YsIDB4NWEsIDB4YmEsIDB4YzUsIDB4YmEsCisJMHhmOCwgMHhmYiwgMHhmMywgMHg4MiwgMHhmOSwgMHg3MCwgMHhkMCwgMHhlNywgMHhjMywgMHhkOCwgMHg0NywgMHhmOCwKKwkweDMwLCAweDdlLCAweDRmLCAweDNlLCAweDFjLCAweGZjLCAweDE4LCAweDFmLCAweGM2LCAweDNmLCAweGM2LCAweDA3LAorCTB4ZTYsIDB4MDEsIDB4ZjMsIDB4ZTIsIDB4ZDEsIDB4ZGUsIDB4ZjAsIDB4ZmYsIDB4MWYsIDB4N2QsIDB4ODIsIDB4N2QsCisJMHg3YywgMHgwOSwgMHg3NCwgMHgyMiwgMHhhNywgMHhkOCwgMHgxOSwgMHhlNCwgMHg1MCwgMHg5YywgMHg2MywgMHhkNSwKKwkweDBjLCAweGU2LCAweDU3LCAweDYwLCAweGJmLCAweDMyLCAweDcyLCAweGVhLCAweDIzLCAweGExLCAweGZkLCAweDE2LAorCTB4MWMsIDB4ZTgsIDB4NjUsIDB4MjMsIDB4ZTYsIDB4ZGIsIDB4YWYsIDB4NjQsIDB4ZTYsIDB4ZTEsIDB4MDMsIDB4YWEsCisJMHhhNSwgMHg5NiwgMHhjMywgMHhmZSwgMHgwNywgMHg2ZCwgMHg4NywgMHg3OSwgMHhkYSwgMHgwYiwgMHg1YSwgMHgxMiwKKwkweDU0LCAweDk5LCAweDU0LCAweDEwLCAweDVmLCAweDg3LCAweGExLCAweGI3LCAweDcxLCAweGRmLCAweDA3LCAweDRhLAorCTB4MjYsIDB4ZWIsIDB4ZTEsIDB4N2UsIDB4Y2MsIDB4M2YsIDB4MWMsIDB4ZTYsIDB4NDUsIDB4ODgsIDB4NzMsIDB4MzgsCisJMHhhMywgMHhkNiwgMHgzOCwgMHgwZCwgMHhmYywgMHhmOCwgMHg5YywgMHg2YSwgMHhhOSwgMHhlYywgMHhmMCwgMHg5YSwKKwkweDM0LCAweDYyLCAweDIxLCAweDNmLCAweDM3LCAweGViLCAweGI3LCAweGFmLCAweGVmLCAweGY3LCAweGQyLCAweDcxLAorCTB4ZTgsIDB4MjYsIDB4ZWIsIDB4YjQsIDB4ODIsIDB4ZGMsIDB4NzgsIDB4MDIsIDB4ZjEsIDB4YzUsIDB4ZDcsIDB4ZDMsCisJMHhlYywgMHgwMiwgMHhiMSwgMHhkZiwgMHg3ZiwgMHgwNiwgMHg3NSwgMHhkMSwgMHg2MSwgMHhmYywgMHgzNCwgMHgxYSwKKwkweDcxLCAweDAzLCAweDliLCAweDVhLCAweGYyLCAweGNmLCAweGZjLCAweGIwLCAweDRmLCAweGFhLCAweDM5LCAweGViLAorCTB4YzgsIDB4ZGYsIDB4MGQsIDB4ZWMsIDB4Y2IsIDB4ZTcsIDB4NTYsIDB4YzEsIDB4MWIsIDB4MDksIDB4ZTcsIDB4NzIsCisJMHg1ZiwgMHgzNywgMHhlMiwgMHgwMCwgMHhmOCwgMHhlNCwgMHhmZSwgMHgwNywgMHhmYSwgMHg5NywgMHhlMCwgMHgxZiwKKwkweDM5LCAweDJmLCAweDY4LCAweGUzLCAweDhlLCAweDFjLCAweGMyLCAweGUxLCAweDc4LCAweDlkLCAweDA3LCAweGNkLAorCTB4OWMsIDB4NjMsIDB4NzMsIDB4MmUsIDB4ODEsIDB4ZmMsIDB4NjMsIDB4ZTksIDB4NGQsIDB4ZjQsIDB4MGQsIDB4ZDMsCisJMHhlOSwgMHhhMSwgMHgyYywgMHhlNCwgMHhjMywgMHg3ZCwgMHgwZiwgMHg4NCwgMHg3ZCwgMHgzYywgMHg4ZiwgMHg5NCwKKwkweDA3LCAweDRkLCAweGZkLCAweDA3LCAweDU1LCAweGRmLCAweGFmLCAweDQzLCAweDBmLCAweDUxLCAweGY3LCAweGQ1LAorCTB4OTYsIDB4OTAsIDB4NjMsIDB4MDAsIDB4YTcsIDB4Y2EsIDB4NmEsIDB4MTYsIDB4YjksIDB4M2MsIDB4ZGYsIDB4YWIsCisJMHhlOSwgMHg5NywgMHg5MSwgMHgwNywgMHg4MywgMHgyNywgMHgwYSwgMHhmNSwgMHgxYSwgMHhhNSwgMHhkMCwgMHgwZiwKKwkweGU3LCAweDQwLCAweDFmLCAweGRmLCAweDNkLCAweGY1LCAweDIxLCAweGY3LCAweDkxLCAweGMwLCAweDA4LCAweGQ4LAorCTB4ZTksIDB4YWEsIDB4NDQsIDB4N2IsIDB4ZTUsIDB4MDEsIDB4YjUsIDB4NDYsIDB4ZmYsIDB4ODAsIDB4YjksIDB4MzIsCisJMHg5NSwgMHg1NywgMHgzOSwgMHg4NywgMHg5MCwgMHhlOSwgMHhjOCwgMHgyYSwgMHhkMSwgMHg1YiwgMHgzMywgMHhlYywKKwkweDk3LCAweDE5LCAweGQ4LCAweDJmLCAweGIzLCAweDdmLCAweDdkLCAweGQwLCAweDFmLCAweDdiLCAweDZiLCAweDA2LAorCTB4MzUsIDB4ZjgsIDB4Y2MsIDB4MDAsIDB4YzcsIDB4YjAsIDB4NzUsIDB4MTEsIDB4YmMsIDB4NDQsIDB4ZWUsIDB4YzMsCisJMHhmOSwgMHhmOSwgMHg1ZCwgMHhlZSwgMHg5OCwgMHhkYSwgMHhmNywgMHg0YiwgMHgwYSwgMHg1NSwgMHg2NiwgMHhmOCwKKwkweDZlLCAweDQ5LCAweGM2LCAweGY5LCAweDVjLCAweDViLCAweDZjLCAweDAzLCAweDdlLCAweDAyLCAweGExLCAweGVlLAorCTB4MTIsIDB4MzgsIDB4YTYsIDB4MDksIDB4ZDAsIDB4YTEsIDB4NWQsIDB4OTAsIDB4M2QsIDB4ZjgsIDB4MWYsIDB4YjYsCisJMHhkYiwgMHhmYSwgMHhmNCwgMHgyZiwgMHhkMCwgMHgyNywgMHg5ZSwgMHgyNywgMHg2ZiwgMHhjMiwgMHgyNSwgMHgzMywKKwkweDZiLCAweDhiLCAweDFjLCAweDFmLCAweDNlLCAweDBkLCAweGRiLCAweGIzLCAweGUyLCAweDYzLCAweGNkLCAweDBlLAorCTB4NmEsIDB4ZjUsIDB4YjIsIDB4M2QsIDB4YjAsIDB4NWUsIDB4NWMsIDB4NjYsIDB4OWQsIDB4YzAsIDB4MTksIDB4ZDAsCisJMHhhMSwgMHgxOSwgMHhhZSwgMHhlNywgMHg2NSwgMHhjYywgMHhiYiwgMHgyZiwgMHg5YywgMHhjNywgMHhmYywgMHhmZSwKKwkweDFlLCAweDRkLCAweDBmLCAweGE5LCAweDQyLCAweDU5LCAweDBkLCAweGUyLCAweDQ1LCAweDZkLCAweGE4LCAweDAzLAorCTB4NjMsIDB4MjIsIDB4MWQsIDB4N2MsIDB4MzgsIDB4OGYsIDB4YjUsIDB4OWMsIDB4NTMsIDB4YzUsIDB4ODUsIDB4YzAsCisJMHg2ZiwgMHg3MSwgMHgxZiwgMHhkZiwgMHhkNywgMHhhOSwgMHg1NCwgMHhiZSwgMHhkNCwgMHg0YiwgMHg5NSwgMHg0YiwKKwkweDBhLCAweGY4LCAweDAyLCAweDQ0LCAweDE3LCAweDgyLCAweDdkLCAweGQ4LCAweDE3LCAweDFjLCAweDg3LCAweGRjLAorCTB4YzQsIDB4NzMsIDB4MGEsIDB4YzUsIDB4Y2UsIDB4MjEsIDB4ODcsIDB4YmMsIDB4ZDAsIDB4NDUsIDB4MWQsIDB4MTcsCisJMHhmYSwgMHg0OSwgMHhiYSwgMHhhMCwgMHg3MywgMHg3ZSwgMHhhOCwgMHg5ZCwgMHg4MSwgMHgwYywgMHg4ZiwgMHg1MCwKKwkweDllLCAweDllLCAweDczLCAweDA3LCAweDM5LCAweGM3LCAweGMzLCAweDM5LCAweDVjLCAweGU3LCAweDI1LCAweDQ5LAorCTB4NDIsIDB4ZjIsIDB4MmYsIDB4YmUsIDB4NjgsIDB4ZDEsIDB4OGIsIDB4NDMsIDB4YzAsIDB4MmIsIDB4OGYsIDB4ZjYsCisJMHg4ZiwgMHg5MSwgMHhjNywgMHhiYiwgMHgyMywgMHhmNywgMHg3MSwgMHhjYywgMHg5NiwgMHhjZCwgMHgzZSwgMHhjOCwKKwkweDE2LCAweDc0LCAweGU1LCAweDFlLCAweGYyLCAweGVmLCAweDQ0LCAweDVmLCAweDFjLCAweDYyLCAweDdhLCAweDM0LAorCTB4ZDAsIDB4NTIsIDB4ODcsIDB4YWUsIDB4ZjMsIDB4M2QsIDB4NTcsIDB4MTcsIDB4ZDksIDB4MzIsIDB4ZWIsIDB4MzIsCisJMHhmMiwgMHhhYSwgMHgwYiwgMHg3NSwgMHg5YSwgMHg2YSwgMHhlOCwgMHg5MCwgMHg1OSwgMHgxZiwgMHhmNCwgMHgwMiwKKwkweDMyLCAweDRiLCAweDczLCAweDNmLCAweGVmLCAweDJkLCAweDg0LCAweGZiLCAweGRlLCAweGQxLCAweGY3LCAweDE3LAorCTB4ZWYsIDB4YWQsIDB4ZWYsIDB4M2UsIDB4ZDQsIDB4OWIsIDB4OGYsIDB4YzAsIDB4NjcsIDB4YTMsIDB4MmUsIDB4MzIsCisJMHhlMCwgMHhkMywgMHg1NSwgMHhlNCwgMHg3MiwgMHgwNiwgMHhiZiwgMHgwNywgMHg3NywgMHg5NSwgMHgxNSwgMHhlNCwKKwkweDg1LCAweGZjLCAweDVlLCAweDZiLCAweGRkLCAweGNkLCAweDc3LCAweDA3LCAweGY2LCAweDdkLCAweDA2LCAweDNjLAorCTB4YmEsIDB4MzIsIDB4ZjcsIDB4MDAsIDB4NWQsIDB4OWQsIDB4NTMsIDB4ZTgsIDB4NWEsIDB4NDMsIDB4Y2YsIDB4MTYsCisJMHhhOCwgMHg4MywgMHhhYSwgMHhjOSwgMHgzNCwgMHg1ZCwgMHg1ZiwgMHg2YSwgMHhlNywgMHg5MywgMHgyMiwgMHhmNCwKKwkweGM0LCAweDIyLCAweGNlLCAweGNkLCAweGFmLCAweDJjLCAweDU1LCAweDRiLCAweDM3LCAweDc2LCAweGE3LCAweDQ5LAorCTB4N2UsIDB4MDksIDB4YjYsIDB4ZmQsIDB4OTIsIDB4YWUsIDB4ZDUsIDB4YzAsIDB4ZTcsIDB4YmEsIDB4ZTEsIDB4YTIsCisJMHg1NiwgMHhlMywgMHgzYSwgMHgzMiwgMHgwNSwgMHhiYiwgMHhkMywgMHg1MywgMHgyZCwgMHhjYSwgMHg5MCwgMHhiNCwKKwkweGEwLCAweGQwLCAweGFmLCAweDY2LCAweDc0LCAweDhkLCAweDc1LCAweGVlLCAweGEyLCAweDgxLCAweDdlLCAweDM3LAorCTB4N2UsIDB4N2IsIDB4M2QsIDB4ZDAsIDB4NDMsIDB4ZjQsIDB4ZjUsIDB4YTMsIDB4YmUsIDB4ZDUsIDB4YjMsIDB4OWEsCisJMHhkOCwgMHg0ZCwgMHg2ZiwgMHg0MywgMHgyNywgMHhjYSwgMHg3ZSwgMHhkZiwgMHg0NywgMHhmNywgMHhiYywgMHgxZSwKKwkweGVlLCAweDU5LCAweDJkLCAweDVkLCAweGUxLCAweDNhLCAweDY4LCAweDg2LCAweDc1LCAweGJlLCAweDE3LCAweGZlLAorCTB4MDMsIDB4ZWYsIDB4NmUsIDB4MDcsIDB4OTUsIDB4MjcsIDB4MTEsIDB4YTMsIDB4NjYsIDB4MWUsIDB4YTUsIDB4YzIsCisJMHg5MCwgMHgxOCwgMHhkMCwgMHhlZCwgMHhmMywgMHg4MiwgMHhmYiwgMHhmOCwgMHg3ZSwgMHhiMiwgMHg3NiwgMHgxZiwKKwkweGRiLCAweGIyLCAweGI4LCAweDBhLCAweGJkLCAweDNhLCAweGM4LCAweDdhLCAweDgwLCAweGRjLCAweDBlLCAweDM5LAorCTB4MDQsIDB4ZmIsIDB4NGUsIDB4MDksIDB4MzksIDB4NDQsIDB4YzEsIDB4MGQsIDB4NzQsIDB4YTMsIDB4NzUsIDB4MzAsCisJMHg0OSwgMHhjNywgMHg1ZSwgMHg2MiwgMHgxOSwgMHg2MSwgMHg2YywgMHg0MywgMHhlZiwgMHgzNiwgMHhlZSwgMHhjNCwKKwkweDMxLCAweDY2LCAweGQwLCAweGYxLCAweGVmLCAweGI3LCAweDczLCAweDRhLCAweGI2LCAweGJkLCAweDM0LCAweGU0LAorCTB4YTEsIDB4YTMsIDB4ZjYsIDB4ZTgsIDB4NTMsIDB4MmIsIDB4YmUsIDB4NGYsIDB4ODEsIDB4NGUsIDB4YTQsIDB4MDIsCisJMHgxOSwgMHhkNCwgMHgzMCwgMHgzNiwgMHhlZCwgMHg0ZSwgMHhjMiwgMHgyNywgMHhjNiwgMHhlOCwgMHhlNiwgMHhhNCwKKwkweDA1LCAweDlkLCAweDY4LCAweDAxLCAweDg3LCAweGMzLCAweDcxLCAweGJlLCAweDRiLCAweGI4LCAweDM5LCAweDU5LAorCTB4YzQsIDB4ZmIsIDB4NjEsIDB4M2YsIDB4ZjcsIDB4OTcsIDB4ZjYsIDB4NDAsIDB4OTcsIDB4ZGMsIDB4MDcsIDB4YzIsCisJMHhmYywgMHg5YywgMHhjZiwgMHhkMywgMHg4NCwgMHhkYSwgMHhhYywgMHgyZSwgMHg0YywgMHhjZiwgMHg3YSwgMHgzNCwKKwkweDlhLCAweGViLCAweDRiLCAweDVkLCAweGE1LCAweDRlLCAweGZmLCAweGNlLCAweGQ4LCAweGY3LCAweDliLCAweGZlLAorCTB4OWMsIDB4NWQsIDB4MTgsIDB4ZmYsIDB4MDAsIDB4M2EsIDB4ODUsIDB4MjcsIDB4ZTIsIDB4ZjUsIDB4ZTksIDB4NjYsCisJMHgzNSwgMHhkNSwgMHg0MSwgMHhhYywgMHg1MywgMHgyNCwgMHgyYywgMHgxOCwgMHhlYywgMHgzYiwgMHgwNCwgMHhiYSwKKwkweGVhLCAweGRmLCAweDQ3LCAweDEzLCAweDE1LCAweDlkLCAweGQ3LCAweDk5LCAweDZlLCAweDYxLCAweGIxLCAweGM1LAorCTB4NmIsIDB4NTgsIDB4Y2UsIDB4YmMsIDB4NDYsIDB4YTIsIDB4OWIsIDB4NDksIDB4ZDgsIDB4ZTUsIDB4OWUsIDB4M2QsCisJMHg3ZSwgMHhiZCwgMHhmOCwgMHhmOCwgMHgxMCwgMHhlMywgMHhkYSwgMHgwZCwgMHg5OSwgMHg0MiwgMHhiZiwgMHg1MCwKKwkweGRiLCAweDk0LCAweDgzLCAweGJlLCAweDU5LCAweGFlLCAweDRkLCAweGE3LCAweGY5LCAweGRlLCAweDIzLCAweGVmLAorCTB4ZWIsIDB4NWEsIDB4YTgsIDB4MWYsIDB4MWYsIDB4ZDcsIDB4YjUsIDB4ZTcsIDB4YjAsIDB4ZjYsIDB4MmQsIDB4ZjYsCisJMHhhYiwgMHg5MCwgMHg3NSwgMHhlMCwgMHgyMywgMHhiZSwgMHg0MSwgMHg2ZiwgMHhjZCwgMHg1NSwgMHhiMywgMHhmYywKKwkweGNkLCAweGEzLCAweDM1LCAweDIxLCAweGEwLCAweDE2LCAweDNmLCAweDRlLCAweDZmLCAweGNmLCAweDNkLCAweDRiLAorCTB4YmYsIDB4OWMsIDB4NjUsIDB4ZGQsIDB4MzEsIDB4NjgsIDB4MTQsIDB4ZmEsIDB4NzQsIDB4OTQsIDB4ZTQsIDB4ZWMsCisJMHg2OSwgMHgxYSwgMHg1MCwgMHhhZiwgMHhmYiwgMHhiNSwgMHg4ZCwgMHg5ZSwgMHhmMywgMHg2YiwgMHgzYSwgMHgzMywKKwkweDRiLCAweGM1LCAweGM2LCAweDQwLCAweGVhLCAweDFhLCAweGZhLCAweGNhLCAweDkzLCAweGJhLCAweGI2LCAweDhlLAorCTB4ZGMsIDB4YTMsIDB4ZDAsIDB4ZmMsIDB4ODAsIDB4ZWYsIDB4NmMsIDB4YjIsIDB4MzUsIDB4ZDgsIDB4ZGUsIDB4MjIsCisJMHg2YSwgMHg5YiwgMHhiNywgMHg5ZCwgMHhiYiwgMHhlOSwgMHgyYywgMHhkNywgMHg1NiwgMHg4MSwgMHhmZiwgMHg1ZSwKKwkweDMzLCAweDUwLCAweDYzLCAweGFjLCAweGFhLCAweGExLCAweDBlLCAweDMxLCAweDcwLCAweDlkLCAweGMxLCAweGYxLAorCTB4MDcsIDB4NGYsIDB4MzcsIDB4MDYsIDB4OWYsIDB4YjIsIDB4MWYsIDB4N2MsIDB4NjcsIDB4ZDksIDB4NDIsIDB4ZmUsCisJMHhhYiwgMHhmYywgMHg4ZCwgMHgwYSwgMHhmMiwgMHg1ZiwgMHg1ZCwgMHhmZSwgMHg0MCwgMHhlYiwgMHg2NSwgMHgzZiwKKwkweDZiLCAweDgwLCAweDk2LCAweDQxLCAweDNhLCAweDMzLCAweGNmLCAweGYyLCAweDQ3LCAweGVjLCAweGY1LCAweGVkLAorCTB4MzQsIDB4MGQsIDB4ZmUsIDB4NzIsIDB4N2MsIDB4MTksIDB4YTQsIDB4NWYsIDB4MmQsIDB4MTUsIDB4ZmQsIDB4ZmIsCisJMHg2YiwgMHgxYiwgMHhiOSwgMHhkNiwgMHgxMSwgMHg2NywgMHgxMiwgMHhmNSwgMHhmYSwgMHg3NywgMHg0MCwgMHgyZiwKKwkweGNlLCAweDFlLCAweGRhLCAweDhkLCAweGE3LCAweDBhLCAweDliLCAweGRjLCAweDcyLCAweDllLCAweDIzLCAweDA3LAorCTB4NzksIDB4Y2UsIDB4ZGUsIDB4MmQsIDB4ZTYsIDB4MzksIDB4N2IsIDB4YjcsIDB4OTIsIDB4ZTcsIDB4YzgsIDB4OWQsCisJMHhlMCwgMHhhYiwgMHhkNiwgMHhiYiwgMHg2NSwgMHhkYywgMHhhNCwgMHgwMCwgMHhiNywgMHgwMywgMHg1YiwgMHhjNCwKKwkweGVkLCAweGMwLCAweDU2LCAweDcwLCAweDkzLCAweDNhLCAweGNkLCAweGJmLCAweDQwLCAweDhjLCAweDM1LCAweDEwLAorCTB4ZGIsIDB4ZTAsIDB4ZDcsIDB4ODYsIDB4ZmEsIDB4NTksIDB4N2YsIDB4ODAsIDB4YTMsIDB4OGYsIDB4ZWIsIDB4ZWYsCisJMHg4YiwgMHhhNywgMHgxOCwgMHhlMCwgMHhmOSwgMHhkOCwgMHgxNiwgMHhmMSwgMHg3YywgMHg2YywgMHgyYiwgMHg3OCwKKwkweDhhLCAweDlkLCAweDI2LCAweGUzLCAweDI4LCAweGMzLCAweGQ3LCAweDcwLCAweDZkLCAweDgzLCAweGQ4LCAweDNjLAorCTB4MjQsIDB4ODcsIDB4YmEsIDB4MmUsIDB4ODcsIDB4NzUsIDB4MGUsIDB4MDMsIDB4N2MsIDB4NTAsIDB4YWYsIDB4NDYsCisJMHg0YiwgMHg0YywgMHhjYiwgMHg0NiwgMHhkZiwgMHg5ZCwgMHgzYSwgMHg0YiwgMHgzMiwgMHg1YiwgMHhhNSwgMHg0YSwKKwkweDgzLCAweGVmLCAweDk1LCAweGZiLCAweGIwLCAweDBmLCAweGY3LCAweGYxLCAweDM3LCAweDJhLCAweDhiLCAweDY0LAorCTB4YzQsIDB4ZjcsIDB4ZTcsIDB4OWEsIDB4NzcsIDB4YTcsIDB4ZjUsIDB4MmEsIDB4NjgsIDB4OWQsIDB4MGEsIDB4NjksCisJMHhhZCwgMHhmOCwgMHhiOSwgMHhlMCwgMHhiZSwgMHg0ZCwgMHhiOSwgMHg2MCwgMHg0MCwgMHhlMywgMHgwOCwgMHg2OCwKKwkweDJjLCAweDg2LCAweDM0LCAweDNlLCAweGRkLCAweDYwLCAweGRhLCAweGY2LCAweGY5LCAweGI0LCAweDJkLCAweDZkLAorCTB4YTIsIDB4NmQsIDB4ZTQsIDB4OWUsIDB4ZjksIDB4MWYsIDB4ZTMsIDB4ODEsIDB4NWEsIDB4MWEsIDB4YjksIDB4ZDcsCisJMHg2YiwgMHg0ZCwgMHhkNCwgMHhkMiwgMHg0ZCwgMHhkNCwgMHhkMiwgMHhkMCwgMHhmNywgMHg1NywgMHg5YiwgMHhhOCwKKwkweGE1LCAweDliLCAweGE4LCAweGE1LCAweDYxLCAweDA3LCAweGFmLCAweGMwLCAweDU2LCAweDgyLCAweDNiLCAweGRjLAorCTB4MTIsIDB4NzEsIDB4MGQsIDB4ZWUsIDB4ZDcsIDB4ZTMsIDB4MTQsIDB4ZTQsIDB4MzksIDB4MDUsIDB4YzQsIDB4ZjAsCisJMHhhMywgMHhjOCwgMHhmMSwgMHhkOCwgMHg2ZSwgMHg0ZiwgMHgxMywgMHhjNywgMHgwNCwgMHgzZCwgMHg4NywgMHg5YSwKKwkweDJmLCAweDViLCAweDI1LCAweDMzLCAweDVlLCAweDljLCAweDFmLCAweDUwLCAweDk3LCAweDAyLCAweGZiLCAweGQ2LAorCTB4NWEsIDB4YzQsIDB4NzEsIDB4NzAsIDB4MjAsIDB4ODUsIDB4MDgsIDB4YTksIDB4YjIsIDB4NWYsIDB4YjAsIDB4NzMsCisJMHg0YywgMHhlNywgMHg3NiwgMHhmMCwgMHgxMCwgMHhiZSwgMHhkYiwgMHg2MCwgMHgxZiwgMHhjNiwgMHhiZSwgMHhiNCwKKwkweDRlLCAweDBiLCAweDhkLCAweGYwLCAweDFiLCAweDlhLCAweGNjLCAweGZkLCAweGZjLCAweGNlLCAweDMxLCAweGI3LAorCTB4Y2YsIDB4ZjcsIDB4NjksIDB4NzYsIDB4YjYsIDB4MGYsIDB4NzEsIDB4ODAsIDB4ZmIsIDB4MTUsIDB4ZjgsIDB4MzUsCisJMHhlOCwgMHhjYSwgMHg1MiwgMHgxYiwgMHgxNywgMHgxOSwgMHhlYiwgMHg1NSwgMHhhYSwgMHhjZiwgMHgwNywgMHgzMSwKKwkweDdjLCAweGNhLCAweGUwLCAweDM4LCAweDg3LCAweGY4LCAweGJlLCAweGM0LCAweGRmLCAweGIwLCAweDEwLCAweGViLAorCTB4OTcsIDB4YWUsIDB4NjgsIDB4MzIsIDB4NmEsIDB4YzcsIDB4M2EsIDB4N2YsIDB4YTMsIDB4MWQsIDB4ZWMsIDB4YzMsCisJMHhmOSwgMHgxZCwgMHhmZSwgMHgxZCwgMHhlZCwgMHg1MSwgMHhmZiwgMHhhZSwgMHhjZCwgMHhhMCwgMHgyMywgMHhhZCwKKwkweDgwLCAweDE2LCAweGRiLCAweGM4LCAweGQwLCAweGM4LCAweDJjLCAweGRmLCAweDM1LCAweDUxLCAweDhmLCAweDY4LAorCTB4Y2EsIDB4NTQsIDB4NzUsIDB4ZjgsIDB4N2UsIDB4NjgsIDB4ZTMsIDB4YmIsIDB4NDksIDB4NzYsIDB4OTEsIDB4ZWIsCisJMHg0ZiwgMHgyMywgMHhiOCwgMHhmZiwgMHgzYywgMHhlZCwgMHhiYywgMHhjOSwgMHhmNywgMHg5ZiwgMHhlMSwgMHgzYSwKKwkweDhkLCAweGRlLCAweDcwLCAweDMzLCAweDM0LCAweDhlLCAweGY4LCAweDVhLCAweDZjLCAweDY4LCAweGYwLCAweDZmLAorCTB4YmUsIDB4M2MsIDB4MzksIDB4YTcsIDB4YWQsIDB4YzYsIDB4NDIsIDB4OTksIDB4OGUsIDB4ODQsIDB4MzIsIDB4YWQsCisJMHgzNCwgMHhkNiwgMHg4MCwgMHhkZiwgMHgwZCwgMHhlZiwgMHg4ZiwgMHg0MywgMHg5OSwgMHhlZSwgMHgzYSwgMHg0NywKKwkweGRhLCAweGQ1LCAweDFjLCAweGNiLCAweDk1LCAweDY1LCAweDE5LCAweGM4LCAweDc1LCAweDdjLCAweGIxLCAweDI0LAorCTB4MTQsIDB4MjEsIDB4ZDMsIDB4NTEsIDB4NWYsIDB4YTYsIDB4MzIsIDB4YzcsIDB4MDUsIDB4ZWMsIDB4OTUsIDB4ODMsCisJMHhmYywgMHhkOSwgMHg4ZiwgMHhlMSwgMHhlOSwgMHhiMCwgMHg4YywgMHhiOSwgMHhkZSwgMHhlMCwgMHg1OCwgMHg5OCwKKwkweGE0LCAweDRiLCAweDliLCAweGU0LCAweDVjLCAweGJjLCAweGE3LCAweDBlLCAweGU3LCAweGE5LCAweGZmLCAweDljLAorCTB4MTYsIDB4ZGUsIDB4OWIsIDB4NjYsIDB4MjEsIDB4YzcsIDB4NzYsIDB4MmUsIDB4ZjYsIDB4MjMsIDB4ODEsIDB4OGMsCisJMHhmNiwgMHg5ZCwgMHg2ZSwgMHhiYiwgMHhlZiwgMHhlNSwgMHg0ZCwgMHg3ZCwgMHhlZCwgMHg2NywgMHg5YiwgMHg1NiwKKwkweGM0LCAweGI3LCAweDBkLCAweGRlLCAweGYzLCAweDFkLCAweGU0LCAweDlkLCAweDdlLCAweGM5LCAweDFmLCAweDUzLAorCTB4MzEsIDB4ZDYsIDB4NGIsIDB4ODUsIDB4MjUsIDB4ODMsIDB4YWMsIDB4MTYsIDB4Y2YsIDB4OTEsIDB4NDksIDB4MzQsCisJMHhkYSwgMHg3MiwgMHhlYSwgMHhhNCwgMHhmNSwgMHgzMCwgMHhjNiwgMHgyZCwgMHgzNCwgMHgzYywgMHhlZiwgMHhhNywKKwkweGQwLCAweDlkLCAweDhiLCAweDVjLCAweDc3LCAweDNiLCAweGJmLCAweGYxLCAweGQ2LCAweDkzLCAweGM4LCAweDIxLAorCTB4MzcsIDB4Y2UsIDB4ZmMsIDB4ZTYsIDB4ZmQsIDB4ZDQsIDB4YTUsIDB4YWIsIDB4ODgsIDB4MDksIDB4NzQsIDB4YzYsCisJMHgwOSwgMHg1MSwgMHgyMiwgMHgxZSwgMHhlNywgMHgzZSwgMHhmZSwgMHgwNiwgMHhlZiwgMHg3OSwgMHgxNywgMHg4ZCwKKwkweDNiLCAweDc4LCAweDc1LCAweDk5LCAweGM3LCAweDY5LCAweGRmLCAweDM5LCAweGY2LCAweGZmLCAweDNmLCAweGQwLAorCTB4MmUsIDB4MWEsIDB4ZDYsIDB4OWUsIDB4MzgsIDB4ZjIsIDB4ZTcsIDB4ZWIsIDB4YzQsIDB4YjEsIDB4NGYsIDB4NGUsCisJMHgxNCwgMHg5YiwgMHhiYSwgMHg3YSwgMHgwOSwgMHg2YiwgMHg4YiwgMHg4ZSwgMHhjMiwgMHhkZiwgMHhkNiwgMHhmOSwKKwkweGZiLCAweGE4LCAweDc2LCAweDg5LCAweGRhLCAweGY3LCAweDY1LCAweDkwLCAweGE3LCAweGEzLCAweGYyLCAweDc3LAorCTB4NTIsIDB4YjUsIDB4OGEsIDB4ZDgsIDB4NTIsIDB4NzAsIDB4OTIsIDB4OTgsIDB4YWYsIDB4NjIsIDB4MmUsIDB4YzcsCisJMHgwNSwgMHg4ZiwgMHgxNCwgMHhkOCwgMHg1MCwgMHhjMSwgMHg0OSwgMHgyNywgMHhjNiwgMHg5YSwgMHg5ZSwgMHhhNywKKwkweDdjLCAweDVlLCAweGEwLCAweDg3LCAweDMyLCAweDI5LCAweDFhLCAweDczLCAweGY4LCAweGZlLCAweGY3LCAweDliLAorCTB4ZjQsIDB4MzYsIDB4ZWMsIDB4YWMsIDB4NzgsIDB4OWUsIDB4NmIsIDB4MjYsIDB4ZjYsIDB4MjksIDB4NzgsIDB4NzcsCisJMHhmOCwgMHhiZSwgMHhlYSwgMHgxNCwgMHgzZCwgMHhiNCwgMHg0NywgMHhjZiwgMHg1ZSwgMHgyMiwgMHhlMCwgMHhiMywKKwkweDQyLCAweGZkLCAweDQ4LCAweDcyLCAweDUzLCAweGM3LCAweGZkLCAweGVmLCAweDZkLCAweDhjLCAweDZiLCAweDlhLAorCTB4OTYsIDB4YzAsIDB4MWIsIDB4YTcsIDB4OTksIDB4YTQsIDB4OTUsIDB4NjYsIDB4OGEsIDB4NTYsIDB4YTEsIDB4MWYsCisJMHhkYiwgMHhjYywgMHgzMiwgMHg3ZCwgMHgwMywgMHg3OCwgMHgyYiwgMHg2NiwgMHg5NSwgMHg5NCwgMHg4YywgMHhiNSwKKwkweGFmLCAweDBiLCAweDc4LCAweDY3LCAweDA1LCAweDNkLCAweDE1LCAweDE3LCAweDE4LCAweDc3LCAweDVkLCAweDJkLAorCTB4MDMsIDB4NmYsIDB4ZDYsIDB4ZDEsIDB4NTEsIDB4YTcsIDB4OWIsIDB4OGUsIDB4NjEsIDB4ZWQsIDB4N2UsIDB4ZTQsCisJMHgxZiwgMHhkZiwgMHg3MiwgMHhhOCwgMHgyYywgMHg5OSwgMHgyOSwgMHgzYSwgMHg4MCwgMHhmMywgMHg4ZSwgMHgzNiwKKwkweDM4LCAweDU3LCAweDNiLCAweDAyLCAweDVmLCAweDIzLCAweGQwLCAweGEzLCAweDE5LCAweDhmLCAweDFlLCAweGRkLAorCTB4YTMsIDB4NWIsIDB4NzEsIDB4MDEsIDB4N2IsIDB4YWUsIDB4YjAsIDB4OWUsIDB4YTAsIDB4ZGYsIDB4MDksIDB4Y2UsCisJMHg4ZCwgMHhhZCwgMHhmOCwgMHhiYSwgMHgwOCwgMHg3ZiwgMHhmYSwgMHgwYywgMHg2NSwgMHhjZSwgMHhhZCwgMHhlNSwKKwkweGE2LCAweDkwLCAweDlmLCAweDhmLCAweDM2LCAweGU5LCAweDhiLCAweDMxLCAweDljLCAweGY3LCAweDM2LCAweGY4LAorCTB4MzQsIDB4ZWEsIDB4YzgsIDB4MDIsIDB4ZjMsIDB4ZTksIDB4NTgsIDB4YzAsIDB4MjcsIDB4OGMsIDB4ZjEsIDB4YjcsCisJMHgyMywgMHhjZSwgMHhkMSwgMHhmOCwgMHhlYywgMHgxMywgMHg3NCwgMHhiNiwgMHhjMSwgMHg3NywgMHhkZCwgMHgyNywKKwkweGU4LCAweDRhLCAweGUzLCAweDExLCAweGJhLCAweDk4LCAweGUzLCAweDVjLCAweDA3LCAweGZiLCAweGY4LCAweDY3LAorCTB4YTAsIDB4Y2YsIDB4M2YsIDB4YTMsIDB4OWIsIDB4OGUsIDB4ZmIsIDB4NzIsIDB4ZmEsIDB4M2YsIDB4YzMsIDB4MDYsCisJMHhkMCwgMHg3MCwgMHg0YywgMHg1NywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgdTMyIGJueDJfVFhQX2IwNkZ3RGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9Owogc3RhdGljIHUzMiBibngyX1RYUF9iMDZGd1JvZGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggNTVkMjM2Ny4uODE3MWNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0xMTk5LDggKzExOTksNyBAQAogfQogCiAjZGVmaW5lIEJPTkRfSU5URVJTRUNUX0ZFQVRVUkVTIFwKLQkoTkVUSUZfRl9TR3xORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9OT19DU1VNfE5FVElGX0ZfSFdfQ1NVTXxcCi0JTkVUSUZfRl9UU098TkVUSUZfRl9VRk8pCisJKE5FVElGX0ZfU0cgfCBORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1VGTykKIAogLyogCiAgKiBDb21wdXRlIHRoZSBjb21tb24gZGV2LT5mZWF0dXJlIHNldCBhdmFpbGFibGUgdG8gYWxsIHNsYXZlcy4gIFNvbWUKQEAgLTEyMTgsOSArMTIxNyw3IEBACiAJCWZlYXR1cmVzICY9IChzbGF2ZS0+ZGV2LT5mZWF0dXJlcyAmIEJPTkRfSU5URVJTRUNUX0ZFQVRVUkVTKTsKIAogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJiAKLQkgICAgIShmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU0gfAotCQkJICBORVRJRl9GX05PX0NTVU0gfAotCQkJICBORVRJRl9GX0hXX0NTVU0pKSkKKwkgICAgIShmZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKQogCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKIAogCS8qIApAQCAtNDE5MSw3ICs0MTg4LDcgQEAKIAkgKi8KIAlib25kX2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CiAKLQkvKiBkb24ndCBhY3F1aXJlIGJvbmQgZGV2aWNlJ3MgeG1pdF9sb2NrIHdoZW4gCisJLyogZG9uJ3QgYWNxdWlyZSBib25kIGRldmljZSdzIG5ldGlmX3R4X2xvY2sgd2hlbgogCSAqIHRyYW5zbWl0dGluZyAqLwogCWJvbmRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCBhYzQ4Zjc1Li4zOWYzNmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC00ODc3LDcgKzQ4NzcsNyBAQAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdGF0aWMgaW50IGNhc192ZXJzaW9uX3ByaW50ZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgY2FzcmVnX2Jhc2UsIGNhc3JlZ19sZW47CisJdW5zaWduZWQgbG9uZyBjYXNyZWdfbGVuOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGNhcyAqY3A7CiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKQEAgLTQ5NzIsNyArNDk3Miw2IEBACiAJCXBjaV91c2luZ19kYWMgPSAwOwogCX0KIAotCWNhc3JlZ19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCWNhc3JlZ19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwogCiAJY3AgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTAyNCw3ICs1MDIzLDcgQEAKIAljcC0+dGltZXJfdGlja3MgPSAwOwogCiAJLyogZ2l2ZSB1cyBhY2Nlc3MgdG8gY2Fzc2luaSByZWdpc3RlcnMgKi8KLQljcC0+cmVncyA9IGlvcmVtYXAoY2FzcmVnX2Jhc2UsIGNhc3JlZ19sZW4pOworCWNwLT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDAsIGNhc3JlZ19sZW4pOwogCWlmIChjcC0+cmVncyA9PSAwVUwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCAiCiAJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKQEAgLTUxMjMsNyArNTEyMiw3IEBACiAJCWNhc19zaHV0ZG93bihjcCk7CiAJbXV0ZXhfdW5sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCi0JaW91bm1hcChjcC0+cmVncyk7CisJcGNpX2lvdW5tYXAocGRldiwgY3AtPnJlZ3MpOwogCiAKIGVycl9vdXRfZnJlZV9yZXM6CkBAIC01MTcxLDcgKzUxNzAsNyBAQAogI2VuZGlmCiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2Yoc3RydWN0IGNhc19pbml0X2Jsb2NrKSwKIAkJCSAgICBjcC0+aW5pdF9ibG9jaywgY3AtPmJsb2NrX2R2bWEpOwotCWlvdW5tYXAoY3AtPnJlZ3MpOworCXBjaV9pb3VubWFwKHBkZXYsIGNwLT5yZWdzKTsKIAlmcmVlX25ldGRldihkZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IDMxYWMwMDEuLmYzNzE3MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTI3ODAsNiArMjc4MCw4MCBAQAogCQlEUFJJTlRLKFBST0JFLEVSUiwgIkVycm9yIGVuYWJsaW5nIHdha2VcbiIpOwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0gUENJIEVycm9yIFJlY292ZXJ5IGluZnJhc3RydWN0dXJlICAtLS0tLS0tLS0tLS0tLSAqLworLyoqCisgKiBlMTAwX2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkLgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVlY3Rpb24gc3RhdGUKKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgZTEwMF9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogU2ltaWxhciB0byBjYWxsaW5nIGUxMDBfZG93bigpLCBidXQgYXZvaWRzIGFkcGF0ZXIgSS9PLiAqLworCW5ldGRldi0+c3RvcChuZXRkZXYpOworCisJLyogRGV0YWNoOyBwdXQgbmV0aWYgaW50byBzdGF0ZSBzaW1pbGFyIHRvIGhvdHBsdWcgdW5wbHVnLiAqLworCW5ldGlmX3BvbGxfZW5hYmxlKG5ldGRldik7CisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJLyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7Cit9CisKKy8qKgorICogZTEwMF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBlMTAwX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZTEwMDogQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qIE9ubHkgb25lIGRldmljZSBwZXIgY2FyZCBjYW4gZG8gYSByZXNldCAqLworCWlmICgwICE9IFBDSV9GVU5DKHBkZXYtPmRldmZuKSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKKwllMTAwX2h3X3Jlc2V0KG5pYyk7CisJZTEwMF9waHlfaW5pdChuaWMpOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworLyoqCisgKiBlMTAwX2lvX3Jlc3VtZSAtIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9ucworICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3VtZSBub3JtYWwgb3BlcmF0aW9ucyBhZnRlciBhbiBlcnJvciByZWNvdmVyeQorICogc2VxdWVuY2UgaGFzIGJlZW4gY29tcGxldGVkLgorICovCitzdGF0aWMgdm9pZCBlMTAwX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBhY2sgYW55IHBlbmRpbmcgd2FrZSBldmVudHMsIGRpc2FibGUgUE1FICovCisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIDAsIDApOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJZTEwMF9vcGVuKG5ldGRldik7CisJCW1vZF90aW1lcigmbmljLT53YXRjaGRvZywgamlmZmllcyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBlMTAwX2Vycl9oYW5kbGVyID0geworCS5lcnJvcl9kZXRlY3RlZCA9IGUxMDBfaW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBlMTAwX2lvX3Nsb3RfcmVzZXQsCisJLnJlc3VtZSA9IGUxMDBfaW9fcmVzdW1lLAorfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGUxMDBfZHJpdmVyID0gewogCS5uYW1lID0gICAgICAgICBEUlZfTkFNRSwKQEAgLTI3OTEsNiArMjg2NSw3IEBACiAJLnJlc3VtZSA9ICAgICAgIGUxMDBfcmVzdW1lLAogI2VuZGlmCiAJLnNodXRkb3duID0gICAgIGUxMDBfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJmUxMDBfZXJyX2hhbmRsZXIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlMTAwX2luaXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2UxMDAwL01ha2VmaWxlCmluZGV4IGNhOWY4OTUuLjVkZWEyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKICMgCi0jIENvcHlyaWdodChjKSAxOTk5IC0gMjAwMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtMjIsNiArMjIsNyBAQAogIyAKICMgQ29udGFjdCBJbmZvcm1hdGlvbjoKICMgTGludXggTklDUyA8bGludXgubmljc0BpbnRlbC5jb20+CisjIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgogIyBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggMjgxZGU0MS4uMmJjMzRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw2ICsyMiw3IEBACiAgIAogICBDb250YWN0IEluZm9ybWF0aW9uOgogICBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExNCw2ICsxMTUsOCBAQAogLyogU3VwcG9ydGVkIFJ4IEJ1ZmZlciBTaXplcyAqLwogI2RlZmluZSBFMTAwMF9SWEJVRkZFUl8xMjggICAxMjggICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCiAjZGVmaW5lIEUxMDAwX1JYQlVGRkVSXzI1NiAgIDI1NiAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KKyNkZWZpbmUgRTEwMDBfUlhCVUZGRVJfNTEyICAgNTEyCisjZGVmaW5lIEUxMDAwX1JYQlVGRkVSXzEwMjQgIDEwMjQKICNkZWZpbmUgRTEwMDBfUlhCVUZGRVJfMjA0OCAgMjA0OAogI2RlZmluZSBFMTAwMF9SWEJVRkZFUl80MDk2ICA0MDk2CiAjZGVmaW5lIEUxMDAwX1JYQlVGRkVSXzgxOTIgIDgxOTIKQEAgLTMzNCw3ICszMzcsNiBAQAogCWJvb2xlYW5fdCBoYXZlX21zaTsKICNlbmRpZgogCS8qIHRvIG5vdCBtZXNzIHVwIGNhY2hlIGFsaWdubWVudCwgYWx3YXlzIGFkZCB0byB0aGUgYm90dG9tICovCi0JYm9vbGVhbl90IHR4YjJiOwogI2lmZGVmIE5FVElGX0ZfVFNPCiAJYm9vbGVhbl90IHRzb19mb3JjZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IGVjY2NjYTMuLjZlZDdmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKQEAgLTIyLDYgKzIyLDcgQEAKICAgCiAgIENvbnRhY3QgSW5mb3JtYXRpb246CiAgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODY0LDE5ICs4NjUsMjIgQEAKIGUxMDAwX2ludHJfdGVzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdWludDY0X3QgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLSAJdWludDMyX3QgbWFzaywgaT0wLCBzaGFyZWRfaW50ID0gVFJVRTsKLSAJdWludDMyX3QgaXJxID0gYWRhcHRlci0+cGRldi0+aXJxOworCXVpbnQzMl90IG1hc2ssIGk9MCwgc2hhcmVkX2ludCA9IFRSVUU7CisJdWludDMyX3QgaXJxID0gYWRhcHRlci0+cGRldi0+aXJxOwogCiAJKmRhdGEgPSAwOwogCiAJLyogSG9vayB1cCB0ZXN0IGludGVycnVwdCBoYW5kbGVyIGp1c3QgZm9yIHRoaXMgdGVzdCAqLwotIAlpZiAoIXJlcXVlc3RfaXJxKGlycSwgJmUxMDAwX3Rlc3RfaW50ciwgMCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CisJaWYgKCFyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIFNBX1BST0JFSVJRLCBuZXRkZXYtPm5hbWUsCisJICAgICAgICAgICAgICAgICBuZXRkZXYpKSB7CiAgCQlzaGFyZWRfaW50ID0gRkFMU0U7CiAgCX0gZWxzZSBpZiAocmVxdWVzdF9pcnEoaXJxLCAmZTEwMDBfdGVzdF9pbnRyLCBTQV9TSElSUSwKIAkJCSAgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSl7CiAJCSpkYXRhID0gMTsKIAkJcmV0dXJuIC0xOwogCX0KKwlEUFJJTlRLKFBST0JFLElORk8sICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwKKwkgICAgICAgIChzaGFyZWRfaW50ID8gInNoYXJlZCIgOiAidW5zaGFyZWQiKSk7CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgMHhGRkZGRkZGRik7CkBAIC04ODgsMjIgKzg5MiwyMiBAQAogCQkvKiBJbnRlcnJ1cHQgdG8gdGVzdCAqLwogCQltYXNrID0gMSA8PCBpOwogCi0gCQlpZiAoIXNoYXJlZF9pbnQpIHsKLSAJCQkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgdG8gYmUgcmVwb3J0ZWQgaW4KLSAJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIHNhbWUKLSAJCQkgKiBpbnRlcnJ1cHQgYW5kIHNlZSBpZiBvbmUgZ2V0cyBwb3N0ZWQuICBJZgotIAkJCSAqIGFuIGludGVycnVwdCB3YXMgcG9zdGVkIHRvIHRoZSBidXMsIHRoZQotIAkJCSAqIHRlc3QgZmFpbGVkLgotIAkJCSAqLwotIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKLSAJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIG1hc2spOwotIAkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElDUywgbWFzayk7Ci0gCQkJbXNlY19kZWxheSgxMCk7CisJCWlmICghc2hhcmVkX2ludCkgeworCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGJlIHJlcG9ydGVkIGluCisJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIHNhbWUKKwkJCSAqIGludGVycnVwdCBhbmQgc2VlIGlmIG9uZSBnZXRzIHBvc3RlZC4gIElmCisJCQkgKiBhbiBpbnRlcnJ1cHQgd2FzIHBvc3RlZCB0byB0aGUgYnVzLCB0aGUKKwkJCSAqIHRlc3QgZmFpbGVkLgorCQkJICovCisJCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CisJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIG1hc2spOworCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSUNTLCBtYXNrKTsKKwkJCW1zZWNfZGVsYXkoMTApOwogCi0gCQkJaWYgKGFkYXB0ZXItPnRlc3RfaWNyICYgbWFzaykgewotIAkJCQkqZGF0YSA9IDM7Ci0gCQkJCWJyZWFrOwotIAkJCX0KKwkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKKwkJCQkqZGF0YSA9IDM7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCB0byBiZSByZXBvcnRlZCBpbgpAQCAtOTIyLDcgKzkyNiw3IEBACiAJCQlicmVhazsKIAkJfQogCi0gCQlpZiAoIXNoYXJlZF9pbnQpIHsKKwkJaWYgKCFzaGFyZWRfaW50KSB7CiAJCQkvKiBEaXNhYmxlIHRoZSBvdGhlciBpbnRlcnJ1cHRzIHRvIGJlIHJlcG9ydGVkIGluCiAJCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9yY2UgdGhlIG90aGVyCiAJCQkgKiBpbnRlcnJ1cHRzIGFuZCBzZWUgaWYgYW55IGdldCBwb3N0ZWQuICBJZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKaW5kZXggNTIzYzJjOS4uMzk1OTAzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw2ICsyMiw3IEBACiAgIAogICBDb250YWN0IEluZm9ybWF0aW9uOgogICBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTc2NCw3ICs3NjUsNyBAQAogICAgIH0KIAogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKLSAgICAgICAgZTEwMDBfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOyAKKyAgICAgICAgZTEwMDBfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOwogICAgIH0KIAogICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CkBAIC04NjAsNyArODYxLDcgQEAKIAogICAgIGlmKGVlcHJvbV9kYXRhICE9IEVFUFJPTV9SRVNFUlZFRF9XT1JEKSB7CiAgICAgICAgIC8qIEFkanVzdCBTRVJERVMgb3V0cHV0IGFtcGxpdHVkZSBvbmx5LiAqLwotICAgICAgICBlZXByb21fZGF0YSAmPSBFRVBST01fU0VSREVTX0FNUExJVFVERV9NQVNLOyAKKyAgICAgICAgZWVwcm9tX2RhdGEgJj0gRUVQUk9NX1NFUkRFU19BTVBMSVRVREVfTUFTSzsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9FWFRfQ1RSTCwgZWVwcm9tX2RhdGEpOwogICAgICAgICBpZihyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC0xMjI3LDcgKzEyMjgsNyBAQAogCiAgICAgaWYgKGh3LT5waHlfcmVzZXRfZGlzYWJsZSkKICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7Ci0gICAgCisKICAgICByZXRfdmFsID0gZTEwMDBfcGh5X3Jlc2V0KGh3KTsKICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICBERUJVR09VVCgiRXJyb3IgUmVzZXR0aW5nIHRoZSBQSFlcbiIpOwpAQCAtMTM2OSw3ICsxMzcwLDcgQEAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cCIpOwogCiAgICAgaWYoIWh3LT5waHlfcmVzZXRfZGlzYWJsZSkgewotICAgICAgICAKKwogICAgICAgICAvKiBFbmFibGUgQ1JTIG9uIFRYIGZvciBoYWxmLWR1cGxleCBvcGVyYXRpb24uICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX01BQ19TUEVDX0NUUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKQEAgLTE1MTgsNyArMTUxOSw3IEBACiAKICAgICBpZihody0+cGh5X3Jlc2V0X2Rpc2FibGUpCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwotICAgIAorCiAgICAgLyogRW5hYmxlIENSUyBvbiBUWC4gVGhpcyBtdXN0IGJlIHNldCBmb3IgaGFsZi1kdXBsZXggb3BlcmF0aW9uLiAqLwogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CiAgICAgaWYocmV0X3ZhbCkKQEAgLTE2NjQsNyArMTY2NSw3IEBACiAqICAgICAgY29sbGlzaW9uIGRpc3RhbmNlIGluIHRoZSBUcmFuc21pdCBDb250cm9sIFJlZ2lzdGVyLgogKiAgIDIpIFNldCB1cCBmbG93IGNvbnRyb2wgb24gdGhlIE1BQyB0byB0aGF0IGVzdGFibGlzaGVkIHdpdGgKICogICAgICB0aGUgbGluayBwYXJ0bmVyLgotKiAgIDMpIENvbmZpZyBEU1AgdG8gaW1wcm92ZSBHaWdhYml0IGxpbmsgcXVhbGl0eSBmb3Igc29tZSBQSFkgcmV2aXNpb25zLiAgICAKKyogICAzKSBDb25maWcgRFNQIHRvIGltcHJvdmUgR2lnYWJpdCBsaW5rIHF1YWxpdHkgZm9yIHNvbWUgUEhZIHJldmlzaW9ucy4KICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE2NzMsNyArMTY3NCw3IEBACiB7CiAgICAgaW50MzJfdCByZXRfdmFsOwogICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfcG9zdGNvbmZpZyIpOwotICAgIAorCiAgICAgaWYoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KSB7CiAgICAgICAgIGUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CiAgICAgfSBlbHNlIHsKQEAgLTE2OTcsNyArMTY5OCw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCkBAIC0xNzUzLDExICsxNzU0LDExIEBACiAgICAgfQogCiAgICAgaWYoaHctPmF1dG9uZWcpIHsKLSAgICAgICAgLyogU2V0dXAgYXV0b25lZyBhbmQgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQgCi0gICAgICAgICAgKiBhbmQgcGVyZm9ybSBhdXRvbmVnb3RpYXRpb24gKi8gICAKKyAgICAgICAgLyogU2V0dXAgYXV0b25lZyBhbmQgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQKKyAgICAgICAgICAqIGFuZCBwZXJmb3JtIGF1dG9uZWdvdGlhdGlvbiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfY29wcGVyX2xpbmtfYXV0b25lZyhodyk7CiAgICAgICAgIGlmKHJldF92YWwpCi0gICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogUEhZIHdpbGwgYmUgc2V0IHRvIDEwSCwgMTBGLCAxMDBILG9yIDEwMEYKICAgICAgICAgICAqIGRlcGVuZGluZyBvbiB2YWx1ZSBmcm9tIGZvcmNlZF9zcGVlZF9kdXBsZXguICovCkBAIC0xNzg1LDcgKzE3ODYsNyBAQAogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvcHBlcl9saW5rX3Bvc3Rjb25maWcoaHcpOwogICAgICAgICAgICAgaWYocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBERUJVR09VVCgiVmFsaWQgbGluayBlc3RhYmxpc2hlZCEhIVxuIik7CiAgICAgICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKICAgICAgICAgfQpAQCAtMTk4Myw3ICsxOTg0LDcgQEAKIAogICAgIERFQlVHT1VUMSgiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhcbiIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCi0gICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBtaWlfMTAwMHRfY3RybF9yZWcpOyAgICAKKyAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsIG1paV8xMDAwdF9jdHJsX3JlZyk7CiAgICAgaWYocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKQEAgLTIyNzIsNyArMjI3Myw3IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5Iik7CiAKLSAgICAvKiA4MjU0NCBvciBuZXdlciBNQUMsIEF1dG8gU3BlZWQgRGV0ZWN0aW9uIHRha2VzIGNhcmUgb2YgCisgICAgLyogODI1NDQgb3IgbmV3ZXIgTUFDLCBBdXRvIFNwZWVkIERldGVjdGlvbiB0YWtlcyBjYXJlIG9mCiAgICAgKiBNQUMgc3BlZWQvZHVwbGV4IGNvbmZpZ3VyYXRpb24uKi8KICAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KQogICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKQEAgLTIyOTEsOSArMjI5Miw5IEBACiAgICAgaWYocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICBpZihwaHlfZGF0YSAmIE04OEUxMDAwX1BTU1JfRFBMWCkgCisgICAgaWYocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX0RQTFgpCiAgICAgICAgIGN0cmwgfD0gRTEwMDBfQ1RSTF9GRDsKLSAgICBlbHNlIAorICAgIGVsc2UKICAgICAgICAgY3RybCAmPSB+RTEwMDBfQ1RSTF9GRDsKIAogICAgIGUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CkBAIC0yNDkyLDEwICsyNDkzLDEwIEBACiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYoaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX2Z1bGwpIHsKICAgICAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfZnVsbDsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IEZVTEwuXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gRlVMTC5cbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGh3LT5mYyA9IGUxMDAwX2ZjX3J4X3BhdXNlOwotICAgICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBGb3IgcmVjZWl2aW5nIFBBVVNFIGZyYW1lcyBPTkxZLgpAQCAtMjUxMSw3ICsyNTEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogICAgICAgICAgICAgICAgICAgICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfQVNNX0RJUikpIHsKICAgICAgICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY190eF9wYXVzZTsKLSAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworICAgICAgICAgICAgICAgIERFQlVHT1VUKCJGbG93IENvbnRyb2wgPSBUWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogRm9yIHRyYW5zbWl0dGluZyBQQVVTRSBmcmFtZXMgT05MWS4KICAgICAgICAgICAgICAqCkBAIC0yNTI2LDcgKzI1MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAhKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogICAgICAgICAgICAgICAgICAgICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfQVNNX0RJUikpIHsKICAgICAgICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY19yeF9wYXVzZTsKLSAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworICAgICAgICAgICAgICAgIERFQlVHT1VUKCJGbG93IENvbnRyb2wgPSBSWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogUGVyIHRoZSBJRUVFIHNwZWMsIGF0IHRoaXMgcG9pbnQgZmxvdyBjb250cm9sIHNob3VsZCBiZQogICAgICAgICAgICAgICogZGlzYWJsZWQuICBIb3dldmVyLCB3ZSB3YW50IHRvIGNvbnNpZGVyIHRoYXQgd2UgY291bGQKQEAgLTI1NTIsMTAgKzI1NTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgIGh3LT5vcmlnaW5hbF9mYyA9PSBlMTAwMF9mY190eF9wYXVzZSkgfHwKICAgICAgICAgICAgICAgICAgICAgaHctPmZjX3N0cmljdF9pZWVlKSB7CiAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfbm9uZTsKLSAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gTk9ORS5cclxuIik7CisgICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IE5PTkUuXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfcnhfcGF1c2U7Ci0gICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKyAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogTm93IHdlIG5lZWQgdG8gZG8gb25lIGxhc3QgY2hlY2suLi4gIElmIHdlIGF1dG8tCkBAIC0yNTgwLDcgKzI1ODEsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdPVVQoIkNvcHBlciBQSFkgYW5kIEF1dG8gTmVnIGhhcyBub3QgY29tcGxldGVkLlxyXG4iKTsKKyAgICAgICAgICAgIERFQlVHT1VUKCJDb3BwZXIgUEhZIGFuZCBBdXRvIE5lZyBoYXMgbm90IGNvbXBsZXRlZC5cbiIpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwpAQCAtMjc2Myw3ICsyNzY0LDcgQEAKICAgICAgICAgICAgIGh3LT5hdXRvbmVnX2ZhaWxlZCA9IDE7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBERUJVR09VVCgiTk9UIFJYaW5nIC9DLywgZGlzYWJsZSBBdXRvTmVnIGFuZCBmb3JjZSBsaW5rLlxyXG4iKTsKKyAgICAgICAgREVCVUdPVVQoIk5PVCBSWGluZyAvQy8sIGRpc2FibGUgQXV0b05lZyBhbmQgZm9yY2UgbGluay5cbiIpOwogCiAgICAgICAgIC8qIERpc2FibGUgYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciAqLwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIChody0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOwpAQCAtMjc4OCw3ICsyNzg5LDcgQEAKICAgICBlbHNlIGlmKCgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKICAgICAgICAgICAgICAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpKSAmJgogICAgICAgICAgICAgKGN0cmwgJiBFMTAwMF9DVFJMX1NMVSkgJiYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpKSB7Ci0gICAgICAgIERFQlVHT1VUKCJSWGluZyAvQy8sIGVuYWJsZSBBdXRvTmVnIGFuZCBzdG9wIGZvcmNpbmcgbGluay5cclxuIik7CisgICAgICAgIERFQlVHT1VUKCJSWGluZyAvQy8sIGVuYWJsZSBBdXRvTmVnIGFuZCBzdG9wIGZvcmNpbmcgbGluay5cbiIpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIGh3LT50eGN3KTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCAoY3RybCAmIH5FMTAwMF9DVFJMX1NMVSkpOwogCkBAIC0yODUxLDEzICsyODUyLDEzIEBACiAKICAgICAgICAgaWYoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0ZEKSB7CiAgICAgICAgICAgICAqZHVwbGV4ID0gRlVMTF9EVVBMRVg7Ci0gICAgICAgICAgICBERUJVR09VVCgiRnVsbCBEdXBsZXhcclxuIik7CisgICAgICAgICAgICBERUJVR09VVCgiRnVsbCBEdXBsZXhcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgKmR1cGxleCA9IEhBTEZfRFVQTEVYOwotICAgICAgICAgICAgREVCVUdPVVQoIiBIYWxmIER1cGxleFxyXG4iKTsKKyAgICAgICAgICAgIERFQlVHT1VUKCIgSGFsZiBEdXBsZXhcbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdPVVQoIjEwMDAgTWJzLCBGdWxsIER1cGxleFxyXG4iKTsKKyAgICAgICAgREVCVUdPVVQoIjEwMDAgTWJzLCBGdWxsIER1cGxleFxuIik7CiAgICAgICAgICpzcGVlZCA9IFNQRUVEXzEwMDA7CiAgICAgICAgICpkdXBsZXggPSBGVUxMX0RVUExFWDsKICAgICB9CkBAIC0yODgzLDcgKzI4ODQsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmIAorICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSAmJgogICAgICAgICAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpKSB7CiAgICAgICAgIGlmICgqc3BlZWQgPT0gU1BFRURfMTAwMCkKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChodyk7CkBAIC0zMTU5LDcgKzMxNjAsNyBAQAogICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgc3dmdykpCiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKIAotICAgIGlmKChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fCAKKyAgICBpZigoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgfHwKICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikgJiYKICAgICAgICAocmVnX2FkZHIgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCkBAIC0zMjk4LDcgKzMyOTksNyBAQAogICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgc3dmdykpCiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKIAotICAgIGlmKChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fCAKKyAgICBpZigoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgfHwKICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikgJiYKICAgICAgICAocmVnX2FkZHIgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCkBAIC0zNDk2LDIyICszNDk3LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgLyogUmVhZCB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGFzc2VydCB0aGUgRTEwMDBfQ1RSTF9QSFlfUlNUCiAgICAgICAgICAqIGJpdC4gVGhlbiwgdGFrZSBpdCBvdXQgb2YgcmVzZXQuCi0gICAgICAgICAqIEZvciBwcmUtZTEwMDBfODI1NzEgaGFyZHdhcmUsIHdlIGRlbGF5IGZvciAxMG1zIGJldHdlZW4gdGhlIGFzc2VydCAKKyAgICAgICAgICogRm9yIHByZS1lMTAwMF84MjU3MSBoYXJkd2FyZSwgd2UgZGVsYXkgZm9yIDEwbXMgYmV0d2VlbiB0aGUgYXNzZXJ0CiAgICAgICAgICAqIGFuZCBkZWFzc2VydC4gIEZvciBlMTAwMF84MjU3MSBoYXJkd2FyZSBhbmQgbGF0ZXIsIHdlIGluc3RlYWQgZGVsYXkKICAgICAgICAgICogZm9yIDUwdXMgYmV0d2VlbiBhbmQgMTBtcyBhZnRlciB0aGUgZGVhc3NlcnRpb24uCiAgICAgICAgICAqLwogICAgICAgICBjdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwgfCBFMTAwMF9DVFJMX1BIWV9SU1QpOwogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaHctPm1hY190eXBlIDwgZTEwMDBfODI1NzEpIAorCisgICAgICAgIGlmIChody0+bWFjX3R5cGUgPCBlMTAwMF84MjU3MSkKICAgICAgICAgICAgIG1zZWNfZGVsYXkoMTApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1ZGVsYXkoMTAwKTsKLSAgICAgICAgCisKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOwotICAgICAgICAKKwogICAgICAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKQogICAgICAgICAgICAgbXNlY19kZWxheSgxMCk7CiAgICAgICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKQEAgLTM4MTUsNyArMzgxNiw3IEBACiAgICAgLyogQ2hlY2sgcG9sYXJpdHkgc3RhdHVzICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX2NoZWNrX3BvbGFyaXR5KGh3LCAmcG9sYXJpdHkpOwogICAgIGlmKHJldF92YWwpCi0gICAgICAgIHJldHVybiByZXRfdmFsOyAKKyAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgcGh5X2luZm8tPmNhYmxlX3BvbGFyaXR5ID0gcG9sYXJpdHk7CiAKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSk7CkBAIC00NTQwLDE0ICs0NTQxLDE0IEBACiAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRVJELCBlZXJkKTsKICAgICAgICAgZXJyb3IgPSBlMTAwMF9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBFMTAwMF9FRVBST01fUE9MTF9SRUFEKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZXJyb3IpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRhdGFbaV0gPSAoRTEwMDBfUkVBRF9SRUcoaHcsIEVFUkQpID4+IEUxMDAwX0VFUFJPTV9SV19SRUdfREFUQSk7Ci0gICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBlcnJvcjsKIH0KIApAQCAtNDU3MywyNCArNDU3NCwyNCBAQAogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9TV0ZXX1NZTkM7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgewotICAgICAgICByZWdpc3Rlcl92YWx1ZSA9IChkYXRhW2ldIDw8IEUxMDAwX0VFUFJPTV9SV19SRUdfREFUQSkgfCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKG9mZnNldCtpKSA8PCBFMTAwMF9FRVBST01fUldfQUREUl9TSElGVCkgfCAKKyAgICAgICAgcmVnaXN0ZXJfdmFsdWUgPSAoZGF0YVtpXSA8PCBFMTAwMF9FRVBST01fUldfUkVHX0RBVEEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKG9mZnNldCtpKSA8PCBFMTAwMF9FRVBST01fUldfQUREUl9TSElGVCkgfAogICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0VFUFJPTV9SV19SRUdfU1RBUlQ7CiAKICAgICAgICAgZXJyb3IgPSBlMTAwMF9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBFMTAwMF9FRVBST01fUE9MTF9XUklURSk7CiAgICAgICAgIGlmKGVycm9yKSB7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAgICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVXUiwgcmVnaXN0ZXJfdmFsdWUpOwotICAgICAgICAKKwogICAgICAgICBlcnJvciA9IGUxMDAwX3BvbGxfZWVyZF9lZXdyX2RvbmUoaHcsIEUxMDAwX0VFUFJPTV9QT0xMX1dSSVRFKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZXJyb3IpIHsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9ICAgICAgIAorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIEUxMDAwX1NXRldfRUVQX1NNKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC00NjEwLDcgKzQ2MTEsNyBAQAogICAgIGZvcihpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspIHsKICAgICAgICAgaWYoZWVyZCA9PSBFMTAwMF9FRVBST01fUE9MTF9SRUFEKQogICAgICAgICAgICAgcmVnID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFUkQpOwotICAgICAgICBlbHNlIAorICAgICAgICBlbHNlCiAgICAgICAgICAgICByZWcgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVXUik7CiAKICAgICAgICAgaWYocmVnICYgRTEwMDBfRUVQUk9NX1JXX1JFR19ET05FKSB7CkBAIC01MTM1LDcgKzUxMzYsNyBAQAogICAgIHVpbnQzMl90IGk7CiAgICAgdWludDMyX3QgbnVtX3Jhcl9lbnRyeTsKICAgICB1aW50MzJfdCBudW1fbXRhX2VudHJ5OwotICAgIAorCiAgICAgREVCVUdGVU5DKCJlMTAwMF9tY19hZGRyX2xpc3RfdXBkYXRlIik7CiAKICAgICAvKiBTZXQgdGhlIG5ldyBudW1iZXIgb2YgTUMgYWRkcmVzc2VzIHRoYXQgd2UgYXJlIGJlaW5nIHJlcXVlc3RlZCB0byB1c2UuICovCkBAIC02MjQwLDcgKzYyNDEsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBEb3duc2hpZnQgb2N1cmVkLgogICoKICAqIHJldHVybnM6IC0gRTEwMDBfRVJSX1hYWAotICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTIAorICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTCiAgKgogICogRm9yIHBoeSdzIG9sZGVyIHRoZW4gSUdQLCB0aGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBEb3duc2hpZnQgYml0IGluIHRoZSBQaHkKICAqIFNwZWNpZmljIFN0YXR1cyByZWdpc3Rlci4gIEZvciBJR1AgcGh5J3MsIGl0IHJlYWRzIHRoZSBEb3duZ3JhZGUgYml0IGluIHRoZQpAQCAtNjI1NSw3ICs2MjU2LDcgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY2hlY2tfZG93bnNoaWZ0Iik7CiAKLSAgICBpZihody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fCAKKyAgICBpZihody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fAogICAgICAgICBody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8yKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX0xJTktfSEVBTFRILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7CkBAIC02Njg0LDggKzY2ODUsOCBAQAogCiAKICAgICB9IGVsc2UgewotIAotICAgICAgICAgICAgcGh5X2RhdGEgfD0gSUdQMDJFMTAwMF9QTV9EMF9MUExVOyAgIAorCisgICAgICAgICAgICBwaHlfZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QwX0xQTFU7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgcGh5X2RhdGEpOwogICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC02Nzc3LDcgKzY3NzgsNyBAQAogZTEwMDBfaG9zdF9pZl9yZWFkX2Nvb2tpZShzdHJ1Y3QgZTEwMDBfaHcgKiBodywgdWludDhfdCAqYnVmZmVyKQogewogICAgIHVpbnQ4X3QgaTsKLSAgICB1aW50MzJfdCBvZmZzZXQgPSBFMTAwMF9NTkdfREhDUF9DT09LSUVfT0ZGU0VUOyAKKyAgICB1aW50MzJfdCBvZmZzZXQgPSBFMTAwMF9NTkdfREhDUF9DT09LSUVfT0ZGU0VUOwogICAgIHVpbnQ4X3QgbGVuZ3RoID0gRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX0xFTkdUSDsKIAogICAgIGxlbmd0aCA9IChsZW5ndGggPj4gMik7CkBAIC02Nzk2LDcgKzY3OTcsNyBAQAogICogYW5kIGFsc28gY2hlY2tzIHdoZXRoZXIgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgY29tcGxldGVkLgogICogSXQgYnVzeSB3YWl0cyBpbiBjYXNlIG9mIHByZXZpb3VzIGNvbW1hbmQgaXMgbm90IGNvbXBsZXRlZC4KICAqCi0gKiByZXR1cm5zOiAtIEUxMDAwX0VSUl9IT1NUX0lOVEVSRkFDRV9DT01NQU5EIGluIGNhc2UgaWYgaXMgbm90IHJlYWR5IG9yIAorICogcmV0dXJuczogLSBFMTAwMF9FUlJfSE9TVF9JTlRFUkZBQ0VfQ09NTUFORCBpbiBjYXNlIGlmIGlzIG5vdCByZWFkeSBvcgogICogICAgICAgICAgICB0aW1lb3V0CiAgKiAgICAgICAgICAtIEUxMDAwX1NVQ0NFU1MgZm9yIHN1Y2Nlc3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY4MjAsNyArNjgyMSw3IEBACiAgICAgICAgIG1zZWNfZGVsYXlfaXJxKDEpOwogICAgIH0KIAotICAgIGlmIChpID09IEUxMDAwX01OR19ESENQX0NPTU1BTkRfVElNRU9VVCkgeyAKKyAgICBpZiAoaSA9PSBFMTAwMF9NTkdfREhDUF9DT01NQU5EX1RJTUVPVVQpIHsKICAgICAgICAgREVCVUdPVVQoIlByZXZpb3VzIGNvbW1hbmQgdGltZW91dCBmYWlsZWQgLlxuIik7CiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0hPU1RfSU5URVJGQUNFX0NPTU1BTkQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggMTUwZTQ1ZS4uNDY3YzllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw2ICsyMiw3IEBACiAgIAogICBDb250YWN0IEluZm9ybWF0aW9uOgogICBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM3NCw3ICszNzUsNyBAQAogfTsKICNlbmRpZgogCi1pbnQzMl90IGUxMDAwX21uZ193cml0ZV9kaGNwX2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgdWludDhfdCAqYnVmZmVyLCAKK2ludDMyX3QgZTEwMDBfbW5nX3dyaXRlX2RoY3BfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50OF90ICpidWZmZXIsCiAJCQkJCQkJdWludDE2X3QgbGVuZ3RoKTsKIGJvb2xlYW5fdCBlMTAwMF9jaGVja19tbmdfbW9kZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGJvb2xlYW5fdCBlMTAwMF9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKQEAgLTE4MDEsNyArMTgwMiw3IEBACiAgKiAgICAgICB2YWx1ZTIgPSBbMC4uNjQ1MTJdLCAgICBkZWZhdWx0PTQwOTYKICAqICAgICAgIHZhbHVlMyA9IFswLi42NDUxMl0sICAgIGRlZmF1bHQ9MAogICovCi0gICAgCisKICNkZWZpbmUgRTEwMDBfUFNSQ1RMX0JTSVpFMF9NQVNLICAgMHgwMDAwMDA3RgogI2RlZmluZSBFMTAwMF9QU1JDVExfQlNJWkUxX01BU0sgICAweDAwMDAzRjAwCiAjZGVmaW5lIEUxMDAwX1BTUkNUTF9CU0laRTJfTUFTSyAgIDB4MDAzRjAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCBjOTllODc4Li5hMzczY2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC0yMiw1MSArMjIsMTMgQEAKICAgCiAgIENvbnRhY3QgSW5mb3JtYXRpb246CiAgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZTEwMDAuaCIKIAotLyogQ2hhbmdlIExvZwotICogNy4wLjMzICAgICAgMy1GZWItMjAwNgotICogICBvIEFkZGVkIGFub3RoZXIgZml4IGZvciB0aGUgcGFzcyBmYWxzZSBjYXJyaWVyIGJpdAotICogNy4wLjMyICAgICAgMjQtSmFuLTIwMDYKLSAqICAgbyBOZWVkIHRvIHJlYnVpbGQgd2l0aCBub2V3IHZlcnNpb24gbnVtYmVyIGZvciB0aGUgcGFzcyBmYWxzZSBjYXJyaWVyIAotICogICAgIGZpeCBpbiBlMTAwMF9ody5jCi0gKiA3LjAuMzAgICAgICAxOC1KYW4tMjAwNgotICogICBvIGZpeHVwIGZvciB0c28gd29ya2Fyb3VuZCB0byBkaXNhYmxlIGl0IGZvciBwY2kteAotICogICBvIGZpeCBtZW0gbGVhayBvbiA4MjU0MgotICogICBvIGZpeGVzIGZvciAxMCBNYi9zIGNvbm5lY3Rpb25zIGFuZCBpbmNvcnJlY3Qgc3RhdHMKLSAqIDcuMC4yOCAgICAgIDAxLzA2LzIwMDYKLSAqICAgbyBoYXJkd2FyZSB3b3JrYXJvdW5kIHRvIG9ubHkgc2V0ICJzcGVlZCBtb2RlIiBiaXQgZm9yIDFHIGxpbmsuCi0gKiA3LjAuMjYgICAgICAxMi8yMy8yMDA1Ci0gKiAgIG8gd2FrZSBvbiBsYW4gc3VwcG9ydCBtb2RpZmllZCBmb3IgZGV2aWNlIElEIDEwQjUKLSAqICAgbyBmaXggZGhjcCArIHZsYW4gaXNzdWUgbm90IG1ha2luZyBpdCB0byB0aGUgaUFNVCBmaXJtd2FyZQotICogNy4wLjI0ICAgICAgMTIvOS8yMDA1Ci0gKiAgIG8gTmV3IGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBHaWdhYml0IE5JQyBlbWJlZGRlZCBpbiB0aGUgc291dGggYnJpZGdlCi0gKiAgIG8gRml4ZXMgdG8gdGhlIHJlY3ljbGluZyBsb2dpYyAoc2tiLT50YWlsKSBmcm9tIElCTSBMVEMKLSAqIDYuMy45CTEyLzE2LzIwMDUKLSAqICAgbyBpbmNvcnBvcmF0ZSBmaXggZm9yIHJlY3ljbGVkIHNrYnMgZnJvbSBJQk0gTFRDCi0gKiA2LjMuNwkxMS8xOC8yMDA1Ci0gKiAgIG8gSG9ub3IgZWVwcm9tIHNldHRpbmcgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBXYWtlIE9uIExhbgotICogNi4zLjUgCTExLzE3LzIwMDUKLSAqICAgbyBGaXggbWVtb3J5IGxlYWsgaW4gcnggcmluZyBoYW5kbGluZyBmb3IgUENJIEV4cHJlc3MgYWRhcHRlcnMKLSAqIDYuMy40CTExLzgvMDUKLSAqICAgbyBQYXRjaCBmcm9tIEplc3BlciBKdWhsIHRvIHJlbW92ZSByZWR1bmRhbnQgTlVMTCBjaGVja3MgZm9yIGtmcmVlCi0gKiA2LjMuMgk5LzIwLzA1Ci0gKiAgIG8gUmVuZGVyIGxvZ2ljIHRoYXQgc2V0cy9yZXNldHMgRFJWX0xPQUQgYXMgaW5saW5lIGZ1bmN0aW9ucyB0byAKLSAqICAgICBhdm9pZCBjb2RlIHJlcGxpY2F0aW9uLiBJZiBmL3cgaXMgQU1UIHRoZW4gc2V0IERSVl9MT0FEIG9ubHkgd2hlbgotICogICAgIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG9wZW4uCi0gKiAgIG8gSGFuZGxlIERSVl9MT0FEIHNldC9yZXNldCBpbiBjYXNlcyB3aGVyZSBBTVQgdXNlcyBWTEFOcy4KLSAqICAgbyBBZGp1c3QgUEJBIHBhcnRpb25pbmcgZm9yIEp1bWJvIGZyYW1lcyB1c2luZyBNVFUgc2l6ZSBhbmQgbm90Ci0gKiAgICAgcnhfYnVmZmVyX2xlbgotICogNi4zLjEJOS8xOS8wNQotICogICBvIFVzZSBhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciBpbiBUeCBIdW5nIERldGVjdCBsb2dpYyAKLSAqICAgICAgKGUxMDAwX2NsZWFuX3R4X2lycSkKLSAqICAgbyBTdXBwb3J0IGZvciA4MDg2OjEwQjUgZGV2aWNlIChRdWFkIFBvcnQpCi0gKi8KLQogY2hhciBlMTAwMF9kcml2ZXJfbmFtZVtdID0gImUxMDAwIjsKIHN0YXRpYyBjaGFyIGUxMDAwX2RyaXZlcl9zdHJpbmdbXSA9ICJJbnRlbChSKSBQUk8vMTAwMCBOZXR3b3JrIERyaXZlciI7CiAjaWZuZGVmIENPTkZJR19FMTAwMF9OQVBJCkBAIC03NCw5ICszNiw5IEBACiAjZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKICNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4wLjMzLWsyIkRSSVZFUk5BUEkKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjcuMC4zOC1rNCJEUklWRVJOQVBJCiBjaGFyIGUxMDAwX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKLXN0YXRpYyBjaGFyIGUxMDAwX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA1IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY2hhciBlMTAwMF9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiAvKiBlMTAwMF9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQogICoKQEAgLTIwOCw4ICsxNzAsOCBAQAogc3RhdGljIHZvaWQgZTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGUxMDAwX3Jlc2V0X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlMTAwMF9zbWFydHNwZWVkKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbmxpbmUgaW50IGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgaW50IGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgdm9pZCBlMTAwMF92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApOwogc3RhdGljIHZvaWQgZTEwMDBfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQxNl90IHZpZCk7CkBAIC0yMjAsMTIgKzE4MiwyMyBAQAogc3RhdGljIGludCBlMTAwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogc3RhdGljIGludCBlMTAwMF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogI2VuZGlmCitzdGF0aWMgdm9pZCBlMTAwMF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogLyogZm9yIG5ldGR1bXAgLyBuZXQgY29uc29sZSAqLwogc3RhdGljIHZvaWQgZTEwMDBfbmV0cG9sbCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAjZW5kaWYKIAorc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgZTEwMDBfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisgICAgICAgICAgICAgICAgICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKTsKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGUxMDAwX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RhdGljIHZvaWQgZTEwMDBfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgZTEwMDBfZXJyX2hhbmRsZXIgPSB7CisJLmVycm9yX2RldGVjdGVkID0gZTEwMDBfaW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBlMTAwMF9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgPSBlMTAwMF9pb19yZXN1bWUsCit9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZTEwMDBfZHJpdmVyID0gewogCS5uYW1lICAgICA9IGUxMDAwX2RyaXZlcl9uYW1lLApAQCAtMjM1LDggKzIwOCwxMCBAQAogCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLwogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kICA9IGUxMDAwX3N1c3BlbmQsCi0JLnJlc3VtZSAgID0gZTEwMDBfcmVzdW1lCisJLnJlc3VtZSAgID0gZTEwMDBfcmVzdW1lLAogI2VuZGlmCisJLnNodXRkb3duID0gZTEwMDBfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJmUxMDAwX2Vycl9oYW5kbGVyCiB9OwogCiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOwpAQCAtMjkxLDcgKzI2Niw3IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfaXJxX2Rpc2FibGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7CkBAIC0zMDUsNyArMjgwLDcgQEAKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBlMTAwMF9pcnFfZW5hYmxlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChsaWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgmYWRhcHRlci0+aXJxX3NlbSkpKSB7CkBAIC0zNDYsMTAgKzMyMSwxMCBAQAogICogRm9yIEFTRiBhbmQgUGFzcyBUaHJvdWdoIHZlcnNpb25zIG9mIGYvdyB0aGlzIG1lYW5zIHRoYXQgdGhlCiAgKiBkcml2ZXIgaXMgbm8gbG9uZ2VyIGxvYWRlZC4gRm9yIEFNVCB2ZXJzaW9uIChvbmx5IHdpdGggODI1NzMpIGkKICAqIG9mIHRoZSBmL3cgdGhpcyBtZWFucyB0aGF0IHRoZSBuZXRvd3JrIGkvZiBpcyBjbG9zZWQuCi0gKiAKKyAqCiAgKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAKK3N0YXRpYyB2b2lkCiBlMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdWludDMyX3QgY3RybF9leHQ7CkBAIC0zNTksNiArMzM0LDcgQEAKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgorCWNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAJCWN0cmxfZXh0ID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMX0VYVCk7CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkxfRVhULAogCQkJCWN0cmxfZXh0ICYgfkUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEKTsKQEAgLTM3NywxMyArMzUzLDEzIEBACiAgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKICAqIGUxMDAwX2dldF9od19jb250cm9sIHNldHMge0NUUkxfRVhUfEZXU019OkRSVl9MT0FEIGJpdC4KLSAqIEZvciBBU0YgYW5kIFBhc3MgVGhyb3VnaCB2ZXJzaW9ucyBvZiBmL3cgdGhpcyBtZWFucyB0aGF0IAotICogdGhlIGRyaXZlciBpcyBsb2FkZWQuIEZvciBBTVQgdmVyc2lvbiAob25seSB3aXRoIDgyNTczKSAKKyAqIEZvciBBU0YgYW5kIFBhc3MgVGhyb3VnaCB2ZXJzaW9ucyBvZiBmL3cgdGhpcyBtZWFucyB0aGF0CisgKiB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gRm9yIEFNVCB2ZXJzaW9uIChvbmx5IHdpdGggODI1NzMpCiAgKiBvZiB0aGUgZi93IHRoaXMgbWVhbnMgdGhhdCB0aGUgbmV0b3dyayBpL2YgaXMgb3Blbi4KLSAqIAorICoKICAqKi8KIAotc3RhdGljIGlubGluZSB2b2lkIAorc3RhdGljIHZvaWQKIGUxMDAwX2dldF9od19jb250cm9sKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXVpbnQzMl90IGN0cmxfZXh0OwpAQCAtMzkyLDYgKzM2OCw3IEBACiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzE6CiAJY2FzZSBlMTAwMF84MjU3MjoKKwljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogCQljdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTF9FWFQpOwogCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMX0VYVCwKIAkJCQljdHJsX2V4dCB8IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEKTsKQEAgLTQxOSw3ICszOTYsNyBAQAogCQl1aW50MTZfdCBtaWlfcmVnOwogCQllMTAwMF9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgJm1paV9yZWcpOwogCQlpZiAobWlpX3JlZyAmIE1JSV9DUl9QT1dFUl9ET1dOKQotCQkJZTEwMDBfcGh5X3Jlc2V0KCZhZGFwdGVyLT5odyk7CisJCQllMTAwMF9waHlfaHdfcmVzZXQoJmFkYXB0ZXItPmh3KTsKIAl9CiAKIAllMTAwMF9zZXRfbXVsdGkobmV0ZGV2KTsKQEAgLTcwOSw4ICs2ODYsOCBAQAogCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiUEhZIHJlc2V0IGlzIGJsb2NrZWQgZHVlIHRvIFNPTC9JREVSIHNlc3Npb24uXG4iKTsKIAogCS8qIGlmIGtzcDMsIGluZGljYXRlIGlmIGl0J3MgcG9ydCBhIGJlaW5nIHNldHVwICovCi0JaWYgKHBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzICYmIAotCQkJZTEwMDBfa3NwM19wb3J0X2EgPT0gMCkgCisJaWYgKHBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzICYmCisJCQllMTAwMF9rc3AzX3BvcnRfYSA9PSAwKQogCQlhZGFwdGVyLT5rc3AzX3BvcnRfYSA9IDE7CiAJZTEwMDBfa3NwM19wb3J0X2ErKzsKIAkvKiBSZXNldCBmb3IgbXVsdGlwbGUgS1AzIGFkYXB0ZXJzICovCkBAIC03MzgsOSArNzE1LDkgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLSAJLyogaGFyZF9zdGFydF94bWl0IGlzIHNhZmUgYWdhaW5zdCBwYXJhbGxlbCBsb2NraW5nICovCi0gCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOyAKLSAKKwkvKiBoYXJkX3N0YXJ0X3htaXQgaXMgc2FmZSBhZ2FpbnN0IHBhcmFsbGVsIGxvY2tpbmcgKi8KKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKwogCWFkYXB0ZXItPmVuX21uZ19wdCA9IGUxMDAwX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odyk7CiAKIAkvKiBiZWZvcmUgcmVhZGluZyB0aGUgRUVQUk9NLCByZXNldCB0aGUgY29udHJvbGxlciB0bwpAQCAtOTcwLDggKzk0Nyw4IEBACiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmh3LT5wY2lfY21kX3dvcmQpOwogCi0JYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzIwNDg7Ci0JYWRhcHRlci0+cnhfcHNfYnNpemUwID0gRTEwMDBfUlhCVUZGRVJfMjU2OworCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkU7CisJYWRhcHRlci0+cnhfcHNfYnNpemUwID0gRTEwMDBfUlhCVUZGRVJfMTI4OwogCWh3LT5tYXhfZnJhbWVfc2l6ZSA9IG5ldGRldi0+bXR1ICsKIAkJCSAgICAgRU5FVF9IRUFERVJfU0laRSArIEVUSEVSTkVUX0ZDU19TSVpFOwogCWh3LT5taW5fZnJhbWVfc2l6ZSA9IE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRTsKQEAgLTExNzksNyArMTE1Niw3IEBACiAgKiBAc3RhcnQ6IGFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIG1lbW9yeQogICogQGxlbjogbGVuZ3RoIG9mIG1lbW9yeQogICoqLwotc3RhdGljIGlubGluZSBib29sZWFuX3QKK3N0YXRpYyBib29sZWFuX3QKIGUxMDAwX2NoZWNrXzY0a19ib3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJICAgICAgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKQogewpAQCAtMTU5NywxNCArMTU3NCwyMSBAQAogCQlyY3RsIHw9IEUxMDAwX1JDVExfTFBFOwogCiAJLyogU2V0dXAgYnVmZmVyIHNpemVzICovCi0JaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTcxKSB7Ci0JCS8qIFdlIGNhbiBub3cgc3BlY2lmeSBidWZmZXJzIGluIDFLIGluY3JlbWVudHMuCi0JCSAqIEJTSVpFIGFuZCBCU0VYIGFyZSBpZ25vcmVkIGluIHRoaXMgY2FzZS4gKi8KLQkJcmN0bCB8PSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuIDw8IDB4MTE7Ci0JfSBlbHNlIHsKLQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9TWl80MDk2OwotCQlyY3RsIHw9IEUxMDAwX1JDVExfQlNFWDsgCi0JCXN3aXRjaCAoYWRhcHRlci0+cnhfYnVmZmVyX2xlbikgeworCXJjdGwgJj0gfkUxMDAwX1JDVExfU1pfNDA5NjsKKwlyY3RsIHw9IEUxMDAwX1JDVExfQlNFWDsKKwlzd2l0Y2ggKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pIHsKKwkJY2FzZSBFMTAwMF9SWEJVRkZFUl8yNTY6CisJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMjU2OworCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9CU0VYOworCQkJYnJlYWs7CisJCWNhc2UgRTEwMDBfUlhCVUZGRVJfNTEyOgorCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzUxMjsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfQlNFWDsKKwkJCWJyZWFrOworCQljYXNlIEUxMDAwX1JYQlVGRkVSXzEwMjQ6CisJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMTAyNDsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfQlNFWDsKKwkJCWJyZWFrOwogCQljYXNlIEUxMDAwX1JYQlVGRkVSXzIwNDg6CiAJCWRlZmF1bHQ6CiAJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMjA0ODsKQEAgLTE2MTksNyArMTYwMyw2IEBACiAJCWNhc2UgRTEwMDBfUlhCVUZGRVJfMTYzODQ6CiAJCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMTYzODQ7CiAJCQlicmVhazsKLQkJfQogCX0KIAogI2lmbmRlZiBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQKQEAgLTE3MTMsNyArMTY5Niw3IEBACiAJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkgewogCQljdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMX0VYVCk7CiAJCS8qIFJlc2V0IGRlbGF5IHRpbWVycyBhZnRlciBldmVyeSBpbnRlcnJ1cHQgKi8KLQkJY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfQ0FOQzsKKwkJY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfSU5UX1RJTUVSX0NMUjsKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCQkvKiBBdXRvLU1hc2sgaW50ZXJydXB0cyB1cG9uIElDUiByZWFkLiAqLwogCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJMX0VYVF9JQU1FOwpAQCAtMTgwNSw3ICsxNzg4LDcgQEAKIAkJZTEwMDBfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBlMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewpAQCAtMjI0NSw2ICsyMjI4LDcgQEAKIAogCWlmIChsaW5rKSB7CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlib29sZWFuX3QgdHhiMmIgPSAxOwogCQkJZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoJmFkYXB0ZXItPmh3LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfc3BlZWQsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+bGlua19kdXBsZXgpOwpAQCAtMjI1OCwyMyArMjI0MiwyMiBAQAogCQkJICogYW5kIGFkanVzdCB0aGUgdGltZW91dCBmYWN0b3IgKi8KIAkJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gYWRhcHRlci0+dHhfcXVldWVfbGVuOwogCQkJYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgPSAxOwotCQkJYWRhcHRlci0+dHhiMmIgPSAxOwogCQkJc3dpdGNoIChhZGFwdGVyLT5saW5rX3NwZWVkKSB7CiAJCQljYXNlIFNQRUVEXzEwOgotCQkJCWFkYXB0ZXItPnR4YjJiID0gMDsKKwkJCQl0eGIyYiA9IDA7CiAJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDsKIAkJCQlhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciA9IDg7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNQRUVEXzEwMDoKLQkJCQlhZGFwdGVyLT50eGIyYiA9IDA7CisJCQkJdHhiMmIgPSAwOwogCQkJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gMTAwOwogCQkJCS8qIG1heWJlIGFkZCBzb21lIHRpbWVvdXQgZmFjdG9yID8gKi8KIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSB8fCAKKwkJCWlmICgoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzEgfHwKIAkJCSAgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzIpICYmCi0JCQkgICAgYWRhcHRlci0+dHhiMmIgPT0gMCkgeworCQkJICAgIHR4YjJiID09IDApIHsKICNkZWZpbmUgU1BFRURfTU9ERV9CSVQgKDEgPDwgMjEpCiAJCQkJdWludDMyX3QgdGFyYzA7CiAJCQkJdGFyYzAgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRBUkMwKTsKQEAgLTIzOTgsNyArMjM4MSw3IEBACiAjZGVmaW5lIEUxMDAwX1RYX0ZMQUdTX1ZMQU5fTUFTSwkweGZmZmYwMDAwCiAjZGVmaW5lIEUxMDAwX1RYX0ZMQUdTX1ZMQU5fU0hJRlQJMTYKIAotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIGUxMDAwX3RzbyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3JpbmcsCiAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI0MjAsNyArMjQwMyw3IEBACiAKIAkJaGRyX2xlbiA9ICgoc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSkgKyAoc2tiLT5oLnRoLT5kb2ZmIDw8IDIpKTsKIAkJbXNzID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKLQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfSVApKSB7CisJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgewogCQkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSAwOwogCQkJc2tiLT5uaC5pcGgtPmNoZWNrID0gMDsKIAkJCXNrYi0+aC50aC0+Y2hlY2sgPQpAQCAtMjQ3OCw3ICsyNDYxLDcgQEAKIAlyZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbGVhbl90CitzdGF0aWMgYm9vbGVhbl90CiBlMTAwMF90eF9jc3VtKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZywKICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI1MTQsNyArMjQ5Nyw3IEBACiAjZGVmaW5lIEUxMDAwX01BWF9UWERfUFdSCTEyCiAjZGVmaW5lIEUxMDAwX01BWF9EQVRBX1BFUl9UWEQJKDE8PEUxMDAwX01BWF9UWERfUFdSKQogCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogZTEwMDBfdHhfbWFwKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZywKICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZmlyc3QsIHVuc2lnbmVkIGludCBtYXhfcGVyX3R4ZCwKICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJfZnJhZ3MsIHVuc2lnbmVkIGludCBtc3MpCkBAIC0yNjIzLDcgKzI2MDYsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfdHhfcXVldWUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nLAogICAgICAgICAgICAgICAgaW50IHR4X2ZsYWdzLCBpbnQgY291bnQpCiB7CkBAIC0yNjg3LDcgKzI2NzAsNyBAQAogI2RlZmluZSBFMTAwMF9GSUZPX0hEUgkJCTB4MTAKICNkZWZpbmUgRTEwMDBfODI1NDdfUEFEX0xFTgkJMHgzRTAKIAotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1aW50MzJfdCBmaWZvX3NwYWNlID0gYWRhcHRlci0+dHhfZmlmb19zaXplIC0gYWRhcHRlci0+dHhfZmlmb19oZWFkOwpAQCAtMjcxNCw3ICsyNjk3LDcgQEAKIH0KIAogI2RlZmluZSBNSU5JTVVNX0RIQ1BfUEFDS0VUX1NJWkUgMjgyCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAgJmFkYXB0ZXItPmh3OwpAQCAtMjc2Miw3ICsyNzQ1LDcgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSAwOwogCXVuc2lnbmVkIGludCBtc3MgPSAwOwogCWludCBjb3VudCA9IDA7Ci0gCWludCB0c287CisJaW50IHRzbzsKIAl1bnNpZ25lZCBpbnQgZjsKIAlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKIApAQCAtMjc3NSw3ICsyNzU4LDcgQEAKIAogI2lmZGVmIE5FVElGX0ZfVFNPCiAJbXNzID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKLQkvKiBUaGUgY29udHJvbGxlciBkb2VzIGEgc2ltcGxlIGNhbGN1bGF0aW9uIHRvIAorCS8qIFRoZSBjb250cm9sbGVyIGRvZXMgYSBzaW1wbGUgY2FsY3VsYXRpb24gdG8KIAkgKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gdGhlIEZJRk8gYmVmb3JlCiAJICogaW5pdGlhdGluZyB0aGUgRE1BIGZvciBlYWNoIGJ1ZmZlci4gIFRoZSBjYWxjIGlzOgogCSAqIDQgPSBjZWlsKGJ1ZmZlciBsZW4vbXNzKS4gIFRvIG1ha2Ugc3VyZSB3ZSBkb24ndApAQCAtMjc5OCw3ICsyNzgxLDcgQEAKIAkJCWNhc2UgZTEwMDBfODI1NzM6CiAJCQkJcHVsbF9zaXplID0gbWluKCh1bnNpZ25lZCBpbnQpNCwgc2tiLT5kYXRhX2xlbik7CiAJCQkJaWYgKCFfX3Bza2JfcHVsbF90YWlsKHNrYiwgcHVsbF9zaXplKSkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgCisJCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCQkJIl9fcHNrYl9wdWxsX3RhaWwgZmFpbGVkLlxuIik7CiAJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0yODk5LDcgKzI4ODIsNyBAQAogCS8qIE9sZCBtZXRob2Qgd2FzIHRvIGFzc3VtZSBJUHY0IHBhY2tldCBieSBkZWZhdWx0IGlmIFRTTyB3YXMgZW5hYmxlZC4KIAkgKiA4MjU3MSBoYXJkd2FyZSBzdXBwb3J0cyBUU08gY2FwYWJpbGl0aWVzIGZvciBJUHY2IGFzIHdlbGwuLi4KIAkgKiBubyBsb25nZXIgYXNzdW1lLCB3ZSBtdXN0LiAqLwotCWlmIChsaWtlbHkoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUCkpKQorCWlmIChsaWtlbHkoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpKQogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19JUFY0OwogCiAJZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsCkBAIC0yOTgwLDggKzI5NjMsNyBAQAogCiAJLyogQWRhcHRlci1zcGVjaWZpYyBtYXggZnJhbWUgc2l6ZSBsaW1pdHMuICovCiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewotCWNhc2UgZTEwMDBfODI1NDJfcmV2Ml8wOgotCWNhc2UgZTEwMDBfODI1NDJfcmV2Ml8xOgorCWNhc2UgZTEwMDBfdW5kZWZpbmVkIC4uLiBlMTAwMF84MjU0Ml9yZXYyXzE6CiAJCWlmIChtYXhfZnJhbWUgPiBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHsKIAkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkp1bWJvIEZyYW1lcyBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMwMTUsMjcgKzI5OTcsMzIgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogTk9URTogZGV2X2FsbG9jX3NrYiByZXNlcnZlcyAxNiBieXRlcywgYW5kIHR5cGljYWxseSBORVRfSVBfQUxJR04KKwkgKiBtZWFucyB3ZSByZXNlcnZlIDIgbW9yZSwgdGhpcyBwdXNoZXMgdXMgdG8gYWxsb2NhdGUgZnJvbSB0aGUgbmV4dAorCSAqIGxhcmdlciBzbGFiIHNpemUKKwkgKiBpLmUuIFJYQlVGRkVSXzIwNDggLS0+IHNpemUtNDA5NiBzbGFiICovCiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPiBlMTAwMF84MjU0N19yZXZfMikgewotCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gbWF4X2ZyYW1lOwotCQlFMTAwMF9ST1VORFVQKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4sIDEwMjQpOwotCX0gZWxzZSB7Ci0JCWlmKHVubGlrZWx5KChhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTQzKSAmJgotCQkgICAobWF4X2ZyYW1lID4gTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFKSkpIHsKLQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkp1bWJvIEZyYW1lcyBub3Qgc3VwcG9ydGVkICIKLQkJCQkJICAgICJvbiA4MjU0MlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCWlmKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8yMDQ4KQotCQkJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8yMDQ4OwotCQkJZWxzZSBpZihtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfNDA5NikKLQkJCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfNDA5NjsKLQkJCWVsc2UgaWYobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzgxOTIpCi0JCQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzgxOTI7Ci0JCQllbHNlIGlmKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8xNjM4NCkKLQkJCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfMTYzODQ7Ci0JCX0KLQl9CisJaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8yNTYpCisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8yNTY7CisJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzUxMikKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzUxMjsKKwllbHNlIGlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfMTAyNCkKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzEwMjQ7CisJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzIwNDgpCisJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8yMDQ4OworCWVsc2UgaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl80MDk2KQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfNDA5NjsKKwllbHNlIGlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfODE5MikKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzgxOTI7CisJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzE2Mzg0KQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfMTYzODQ7CisKKwkvKiBhZGp1c3QgYWxsb2NhdGlvbiBpZiBMUEUgcHJvdGVjdHMgdXMsIGFuZCB3ZSBhcmVuJ3QgdXNpbmcgU0JQICovCisjZGVmaW5lIE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFIDE1MjIKKwlpZiAoIWFkYXB0ZXItPmh3LnRiaV9jb21wYXRpYmlsaXR5X29uICYmCisJICAgICgobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgfHwKKwkgICAgIChtYXhfZnJhbWUgPT0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpKSkKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFOwogCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCkBAIC0zMDU4LDExICszMDQ1LDIxIEBACiBlMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50MTZfdCBwaHlfdG1wOwogCiAjZGVmaW5lIFBIWV9JRExFX0VSUk9SX0NPVU5UX01BU0sgMHgwMEZGCiAKKwkvKgorCSAqIFByZXZlbnQgc3RhdHMgdXBkYXRlIHdoaWxlIGFkYXB0ZXIgaXMgYmVpbmcgcmVzZXQsIG9yIGlmIHRoZSBwY2kKKwkgKiBjb25uZWN0aW9uIGlzIGRvd24uCisJICovCisJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gMCkKKwkJcmV0dXJuOworCWlmIChwZGV2LT5lcnJvcl9zdGF0ZSAmJiBwZGV2LT5lcnJvcl9zdGF0ZSAhPSBwY2lfY2hhbm5lbF9pb19ub3JtYWwpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAKIAkvKiB0aGVzZSBjb3VudGVycyBhcmUgbW9kaWZpZWQgZnJvbSBlMTAwMF9hZGp1c3RfdGJpX3N0YXRzLApAQCAtMzE2Myw3ICszMTYwLDYgQEAKIAkJYWRhcHRlci0+c3RhdHMuY3JjZXJycyArIGFkYXB0ZXItPnN0YXRzLmFsZ25lcnJjICsKIAkJYWRhcHRlci0+c3RhdHMucnVjICsgYWRhcHRlci0+c3RhdHMucm9jICsKIAkJYWRhcHRlci0+c3RhdHMuY2V4dGVycjsKLQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZHJvcHBlZCA9IDA7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5ydWMgKwogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+c3RhdHMucm9jOwogCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMuY3JjZXJyczsKQEAgLTMzODksMTMgKzMzODUsMTUgQEAKIAogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCi0Jc3Bpbl9sb2NrKCZ0eF9yaW5nLT50eF9sb2NrKTsKLQorI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAzMgogCWlmICh1bmxpa2VseShjbGVhbmVkICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJgotCQkgICAgbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwotCi0Jc3Bpbl91bmxvY2soJnR4X3JpbmctPnR4X2xvY2spOworCSAgICAgICAgICAgICBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpKSB7CisJCXNwaW5fbG9jaygmdHhfcmluZy0+dHhfbG9jayk7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgJiYKKwkJICAgIChFMTAwMF9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBUWF9XQUtFX1RIUkVTSE9MRCkpCisJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCXNwaW5fdW5sb2NrKCZ0eF9yaW5nLT50eF9sb2NrKTsKKwl9CiAKIAlpZiAoYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcpIHsKIAkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQpAQCAtMzQ0Myw3ICszNDQxLDcgQEAKICAqIEBza19idWZmOiAgICAgc29ja2V0IGJ1ZmZlciB3aXRoIHJlY2VpdmVkIGRhdGEKICAqKi8KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfcnhfY2hlY2tzdW0oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCSAgdWludDMyX3Qgc3RhdHVzX2VyciwgdWludDMyX3QgY3N1bSwKIAkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzUxNyw3ICszNTE1LDcgQEAKIAlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAogCXdoaWxlIChyeF9kZXNjLT5zdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9ERCkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dF9za2I7CisJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXU4IHN0YXR1czsKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQpAQCAtMzUzNSw4ICszNTMzLDYgQEAKIAkJcHJlZmV0Y2gobmV4dF9yeGQpOwogCiAJCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwotCQluZXh0X3NrYiA9IG5leHRfYnVmZmVyLT5za2I7Ci0JCXByZWZldGNoKG5leHRfc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKIAogCQljbGVhbmVkID0gVFJVRTsKIAkJY2xlYW5lZF9jb3VudCsrOwpAQCAtMzU2Nyw3ICszNTYzLDggQEAKIAkJCQkgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKIAkJCQlsZW5ndGgtLTsKIAkJCX0gZWxzZSB7Ci0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCQkvKiByZWN5Y2xlICovCisJCQkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKIAkJCQlnb3RvIG5leHRfZGVzYzsKIAkJCX0KIAkJfQpAQCAtMzY2Niw3ICszNjYzLDcgQEAKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbywgKm5leHRfYnVmZmVyOwogCXN0cnVjdCBlMTAwMF9wc19wYWdlICpwc19wYWdlOwogCXN0cnVjdCBlMTAwMF9wc19wYWdlX2RtYSAqcHNfcGFnZV9kbWE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHRfc2tiOworCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgaW50IGksIGo7CiAJdWludDMyX3QgbGVuZ3RoLCBzdGF0ZXJyOwogCWludCBjbGVhbmVkX2NvdW50ID0gMDsKQEAgLTM2NzUsNiArMzY3Miw3IEBACiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfUFMoKnJ4X3JpbmcsIGkpOwogCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi5taWRkbGUuc3RhdHVzX2Vycm9yKTsKKwlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAogCXdoaWxlIChzdGF0ZXJyICYgRTEwMDBfUlhEX1NUQVRfREQpIHsKIAkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CkBAIC0zNjk1LDggKzM2OTMsNiBAQAogCQlwcmVmZXRjaChuZXh0X3J4ZCk7CiAKIAkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07Ci0JCW5leHRfc2tiID0gbmV4dF9idWZmZXItPnNrYjsKLQkJcHJlZmV0Y2gobmV4dF9za2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOwogCiAJCWNsZWFuZWQgPSBUUlVFOwogCQljbGVhbmVkX2NvdW50Kys7CkBAIC0zNzM1LDkgKzM3MzEsOSBAQAogCiAJCS8qIHBhZ2UgYWxsb2MvcHV0IHRha2VzIHRvbyBsb25nIGFuZCBlZmZlY3RzIHNtYWxsIHBhY2tldAogCQkgKiB0aHJvdWdocHV0LCBzbyB1bnNwbGl0IHNtYWxsIHBhY2tldHMgYW5kIHNhdmUgdGhlIGFsbG9jL3B1dCovCi0JCWlmIChsMSAmJiAoKGxlbmd0aCArIGwxKSA8IEUxMDAwX0NCX0xFTkdUSCkpIHsKKwkJaWYgKGwxICYmICgobGVuZ3RoICsgbDEpIDw9IGFkYXB0ZXItPnJ4X3BzX2JzaXplMCkpIHsKIAkJCXU4ICp2YWRkcjsKLQkJCS8qIHRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gYWJvdXQgaG93IHRvIGNhbGwgCisJCQkvKiB0aGVyZSBpcyBubyBkb2N1bWVudGF0aW9uIGFib3V0IGhvdyB0byBjYWxsCiAJCQkgKiBrbWFwX2F0b21pYywgc28gd2UgY2FuJ3QgaG9sZCB0aGUgbWFwcGluZwogCQkJICogdmVyeSBsb25nICovCiAJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocGRldiwKQEAgLTQxNTcsNyArNDE1Myw3IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlpZiAoYWRhcHRlci0+aHcucGh5X3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJCXN3aXRjaCAoZGF0YS0+cmVnX251bSkgewogCQkJY2FzZSBQSFlfQ1RSTDoKIAkJCQlpZiAobWlpX3JlZyAmIE1JSV9DUl9QT1dFUl9ET1dOKQpAQCAtNDUxNiwyMSArNDUxMiwxMyBAQAogCiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVQywgRTEwMDBfV1VDX1BNRV9FTik7CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVRkMsIHd1ZmMpOwotCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKLQkJaWYgKHJldHZhbCkKLQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIHdha2VcbiIpOwotCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFcnJvciBlbmFibGluZyBEMyBjb2xkIHdha2VcbiIpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOwogCX0gZWxzZSB7CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVQywgMCk7CiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVRkMsIDApOwotCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQkJaWYgKHJldHZhbCkKLQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIHdha2VcbiIpOwotCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7Ci0JCWlmIChyZXR2YWwpCi0JCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFcnJvciBlbmFibGluZyBEMyBjb2xkIHdha2VcbiIpOworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCX0KIAogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgpAQCAtNDUzOSwxMyArNDUyNyw4IEBACiAJCWlmIChtYW5jICYgRTEwMDBfTUFOQ19TTUJVU19FTikgewogCQkJbWFuYyB8PSBFMTAwMF9NQU5DX0FSUF9FTjsKIAkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOwotCQkJcmV0dmFsID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7Ci0JCQlpZiAocmV0dmFsKQotCQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIHdha2VcbiIpOwotCQkJcmV0dmFsID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCQkJICAgICAgICAiRXJyb3IgZW5hYmxpbmcgRDMgY29sZCB3YWtlXG4iKTsKKwkJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOwogCQl9CiAJfQogCkBAIC00NTU1LDkgKzQ1MzgsNyBAQAogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCi0JcmV0dmFsID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7Ci0JaWYgKHJldHZhbCkKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRXJyb3IgaW4gc2V0dGluZyBwb3dlciBzdGF0ZVxuIik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1NjgsMjIgKzQ1NDksMTUgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgcmV0dmFsOwogCXVpbnQzMl90IG1hbmMsIHJldF92YWw7CiAKLQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JaWYgKHJldHZhbCkKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRXJyb3IgaW4gc2V0dGluZyBwb3dlciBzdGF0ZVxuIik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCWUxMDAwX3BjaV9yZXN0b3JlX3N0YXRlKGFkYXB0ZXIpOwogCXJldF92YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAotCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwotCWlmIChyZXR2YWwpCi0JCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIHdha2VcbiIpOwotCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKLQlpZiAocmV0dmFsKQotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFcnJvciBlbmFibGluZyBEMyBjb2xkIHdha2VcbiIpOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAogCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVUywgfjApOwpAQCAtNDYxMSw2ICs0NTg1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKKworc3RhdGljIHZvaWQgZTEwMDBfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJZTEwMDBfc3VzcGVuZChwZGV2LCBQTVNHX1NVU1BFTkQpOworfQorCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qCiAgKiBQb2xsaW5nICdpbnRlcnJ1cHQnIC0gdXNlZCBieSB0aGluZ3MgbGlrZSBuZXRjb25zb2xlIHRvIHNlbmQgc2ticwpAQCAtNDYzMSw0ICs0NjExLDEwMSBAQAogfQogI2VuZGlmCiAKKy8qKgorICogZTEwMDBfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lZWN0aW9uIHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZworICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGUxMDAwX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQllMTAwMF9kb3duKGFkYXB0ZXIpOworCisJLyogUmVxdWVzdCBhIHNsb3Qgc2xvdCByZXNldC4gKi8KKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKK30KKworLyoqCisgKiBlMTAwMF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LiBJbXBsZW1lbnRhdGlvbgorICogcmVzZW1ibGVzIHRoZSBmaXJzdC1oYWxmIG9mIHRoZSBlMTAwMF9yZXN1bWUgcm91dGluZS4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgZTEwMDBfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2LT5wcml2OworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZTEwMDA6IENhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgMywgMCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIDQsIDApOyAvKiA0ID09IEQzIGNvbGQgKi8KKworCS8qIFBlcmZvcm0gY2FyZCByZXNldCBvbmx5IG9uIG9uZSBpbnN0YW5jZSBvZiB0aGUgY2FyZCAqLworCWlmIChQQ0lfRlVOQyAocGRldi0+ZGV2Zm4pICE9IDApCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisKKwllMTAwMF9yZXNldChhZGFwdGVyKTsKKwlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBXVVMsIH4wKTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7Cit9CisKKy8qKgorICogZTEwMDBfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAorICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLiBJbXBsZW1lbnRhdGlvbiByZXNlbWJsZXMgdGhlCisgKiBzZWNvbmQtaGFsZiBvZiB0aGUgZTEwMDBfcmVzdW1lIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkIGUxMDAwX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2LT5wcml2OworCXVpbnQzMl90IG1hbmMsIHN3c207CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWlmIChlMTAwMF91cChhZGFwdGVyKSkgeworCQkJcHJpbnRrKCJlMTAwMDogY2FuJ3QgYnJpbmcgZGV2aWNlIGJhY2sgdXAgYWZ0ZXIgcmVzZXRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTQwICYmCisJICAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwkJbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7CisJCW1hbmMgJj0gfihFMTAwMF9NQU5DX0FSUF9FTik7CisJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOworCX0KKworCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCQlzd3NtID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTV1NNKTsKKwkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgU1dTTSwKKwkJCQlzd3NtIHwgRTEwMDBfU1dTTV9EUlZfTE9BRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOworfQorCiAvKiBlMTAwMF9tYWluLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCmluZGV4IDk3OTBkYjkuLjA0OGQwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtMjIsNiArMjIsNyBAQAogICAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKICAgTGludXggTklDUyA8bGludXgubmljc0BpbnRlbC5jb20+CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYwppbmRleCBlMGE0ZDM3Li5lNTVmODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIAotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKQEAgLTIyLDYgKzIyLDcgQEAKICAgCiAgIENvbnRhY3QgSW5mb3JtYXRpb246CiAgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCmluZGV4IDJmN2I4NjguLjhkNjgwY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYworKysgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKQEAgLTIxLDE1ICsyMSwxNSBAQAogCWh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvZXBpYzEwMC5odG1sCiAKIAktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkKKwogCUxpbnV4IGtlcm5lbC1zcGVjaWZpYyBjaGFuZ2VzOgotCQorCiAJTEsxLjEuMiAoamdhcnppayk6CiAJKiBNZXJnZSBiZWNrZXIgdmVyc2lvbiAxLjA5ICg0LzA4LzIwMDApCiAKIAlMSzEuMS4zOgogCSogTWFqb3IgYnVnZml4IHRvIDEuMDkgZHJpdmVyIChGcmFuY2lzIFJvbWlldSkKLQkKKwogCUxLMS4xLjQgKGpnYXJ6aWspOgogCSogTWVyZ2UgYmVja2VyIHRlc3QgdmVyc2lvbiAxLjA5ICg1LzI5LzIwMDApCiAKQEAgLTY2LDcgKzY2LDcgQEAKIAlMSzEuMS4xNCAoS3J5enN6dG9mIEhhbGFzYSk6CiAJKiBmaXggc3B1cmlvdXMgYmFkIGluaXRpYWxpemF0aW9ucwogCSogcG91bmQgcGh5IGEgbGEgU01TQydzIGFwcCBub3RlIG9uIHRoZSBzdWJqZWN0Ci0JCisKIAlBQzEuMS4xNGFjCiAJKiBmaXggcG93ZXIgdXAvZG93biBmb3IgZXRodG9vbCB0aGF0IGJyb2tlIGluIDEuMTEKIApAQCAtMjQ0LDcgKzI0NCw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBlcGljX3BjaV90YmwpOwogCi0JCisKICNpZm5kZWYgVVNFX0lPX09QUwogI3VuZGVmIGluYgogI3VuZGVmIGludwpAQCAtMzcwLDcgKzM3MCw3IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVwaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLQwKKwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlcGljX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTM5Miw5ICszOTIsOSBAQAogCQlwcmludGsgKEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiIEtFUk5fSU5GTyAiJXMiLAogCQkJdmVyc2lvbiwgdmVyc2lvbjIsIHZlcnNpb24zKTsKICNlbmRpZgotCQorCiAJY2FyZF9pZHgrKzsKLQkKKwogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtNDA1LDcgKzQwNSw3IEBACiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlOwogCX0KLQkKKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CkBAIC00OTgsNyArNDk4LDcgQEAKIAllcC0+cGNpX2RldiA9IHBkZXY7CiAJZXAtPmNoaXBfaWQgPSBjaGlwX2lkeDsKIAllcC0+Y2hpcF9mbGFncyA9IHBjaV9pZF90YmxbY2hpcF9pZHhdLmRydl9mbGFnczsKLQllcC0+aXJxX21hc2sgPSAKKwllcC0+aXJxX21hc2sgPQogCQkoZXAtPmNoaXBfZmxhZ3MgJiBUWVBFMl9JTlRSID8gIFBDSUJ1c0VycjE3NSA6IFBDSUJ1c0VycjE3MCkKIAkJIHwgQ250RnVsbCB8IFR4VW5kZXJydW4gfCBFcGljTmFwaUV2ZW50OwogCkBAIC01ODcsNyArNTg3LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJZ290byBvdXQ7CiB9Ci0MCisKIC8qIFNlcmlhbCBFRVBST00gc2VjdGlvbi4gKi8KIAogLyogIEVFUFJPTV9DdHJsIGJpdHMuICovCkBAIC03MDksNyArNzA5LDcgQEAKIAogCW91dHcodmFsdWUsIGlvYWRkciArIE1JSURhdGEpOwogCW91dGwoKHBoeV9pZCA8PCA5KSB8IChsb2MgPDwgNCkgfCBNSUlfV1JJVEVPUCwgaW9hZGRyICsgTUlJQ3RybCk7Ci0JZm9yIChpID0gMTAwMDA7IGkgPiAwOyBpLS0pIHsgCisJZm9yIChpID0gMTAwMDA7IGkgPiAwOyBpLS0pIHsKIAkJYmFycmllcigpOwogCQlpZiAoKGlubChpb2FkZHIgKyBNSUlDdHJsKSAmIE1JSV9XUklURU9QKSA9PSAwKQogCQkJYnJlYWs7CkBAIC03MTcsNyArNzE3LDcgQEAKIAlyZXR1cm47CiB9CiAKLQwKKwogc3RhdGljIGludCBlcGljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IGRldi0+cHJpdjsKQEAgLTc2MCw3ICs3NjAsNyBAQAogI2VuZGlmCiAKIAl1ZGVsYXkoMjApOyAvKiBMb29rcyBsaWtlIEVQSUkgbmVlZHMgdGhhdCBpZiB5b3Ugd2FudCByZWxpYWJsZSBSWCBpbml0LiBGSVhNRTogcGNpIHBvc3RpbmcgYnVnPyAqLwotCQorCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJb3V0bChjcHVfdG9fbGUxNigoKHUxNiopZGV2LT5kZXZfYWRkcilbaV0pLCBpb2FkZHIgKyBMQU4wICsgaSo0KTsKIApAQCAtODAzLDcgKzgwMyw3IEBACiAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KIAlvdXRsKChlcC0+Y2hpcF9mbGFncyAmIFRZUEUyX0lOVFIgPyBQQ0lCdXNFcnIxNzUgOiBQQ0lCdXNFcnIxNzApCi0JCSB8IENudEZ1bGwgfCBUeFVuZGVycnVuIAorCQkgfCBDbnRGdWxsIHwgVHhVbmRlcnJ1bgogCQkgfCBSeEVycm9yIHwgUnhIZWFkZXIgfCBFcGljTmFwaUV2ZW50LCBpb2FkZHIgKyBJTlRNQVNLKTsKIAogCWlmIChkZWJ1ZyA+IDEpCkBAIC04MzEsNyArODMxLDcgQEAKIAlzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IGRldi0+cHJpdjsKIAogCW5ldGlmX3N0b3BfcXVldWUgKGRldik7Ci0JCisKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwogCW91dGwoMHgwMDAwMDAwMCwgaW9hZGRyICsgSU5UTUFTSyk7CiAJLyogU3RvcCB0aGUgY2hpcCdzIFR4IGFuZCBSeCBETUEgcHJvY2Vzc2VzLiAqLwpAQCAtOTg3LDcgKzk4Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7CiAJCWVwLT5yeF9yaW5nW2ldLnJ4c3RhdHVzID0gMDsKIAkJZXAtPnJ4X3JpbmdbaV0uYnVmbGVuZ3RoID0gY3B1X3RvX2xlMzIoZXAtPnJ4X2J1Zl9zeik7Ci0JCWVwLT5yeF9yaW5nW2ldLm5leHQgPSBlcC0+cnhfcmluZ19kbWEgKyAKKwkJZXAtPnJ4X3JpbmdbaV0ubmV4dCA9IGVwLT5yeF9yaW5nX2RtYSArCiAJCQkJICAgICAgKGkrMSkqc2l6ZW9mKHN0cnVjdCBlcGljX3J4X2Rlc2MpOwogCQllcC0+cnhfc2tidWZmW2ldID0gTlVMTDsKIAl9CkBAIC0xMDAyLDcgKzEwMDIsNyBAQAogCQkJYnJlYWs7CiAJCXNrYi0+ZGV2ID0gZGV2OwkJCS8qIE1hcmsgYXMgYmVpbmcgdXNlZCBieSB0aGlzIGRldmljZS4gKi8KIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBhbGlnbiB0aGUgSVAgaGVhZGVyLiAqLwotCQllcC0+cnhfcmluZ1tpXS5idWZhZGRyID0gcGNpX21hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIAorCQllcC0+cnhfcmluZ1tpXS5idWZhZGRyID0gcGNpX21hcF9zaW5nbGUoZXAtPnBjaV9kZXYsCiAJCQlza2ItPmRhdGEsIGVwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWVwLT5yeF9yaW5nW2ldLnJ4c3RhdHVzID0gY3B1X3RvX2xlMzIoRGVzY093bik7CiAJfQpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKIAkJZXAtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJCWVwLT50eF9yaW5nW2ldLnR4c3RhdHVzID0gMHgwMDAwOwotCQllcC0+dHhfcmluZ1tpXS5uZXh0ID0gZXAtPnR4X3JpbmdfZG1hICsgCisJCWVwLT50eF9yaW5nW2ldLm5leHQgPSBlcC0+dHhfcmluZ19kbWEgKwogCQkJKGkrMSkqc2l6ZW9mKHN0cnVjdCBlcGljX3R4X2Rlc2MpOwogCX0KIAllcC0+dHhfcmluZ1tpLTFdLm5leHQgPSBlcC0+dHhfcmluZ19kbWE7CkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogCWludCBlbnRyeSwgZnJlZV9jb3VudDsKIAl1MzIgY3RybF93b3JkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAlpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikgewogCQlza2IgPSBza2JfcGFkdG8oc2tiLCBFVEhfWkxFTik7CiAJCWlmIChza2IgPT0gTlVMTCkKQEAgLTEwNDIsNyArMTA0Miw3IEBACiAJZW50cnkgPSBlcC0+Y3VyX3R4ICUgVFhfUklOR19TSVpFOwogCiAJZXAtPnR4X3NrYnVmZltlbnRyeV0gPSBza2I7Ci0JZXAtPnR4X3JpbmdbZW50cnldLmJ1ZmFkZHIgPSBwY2lfbWFwX3NpbmdsZShlcC0+cGNpX2Rldiwgc2tiLT5kYXRhLCAKKwllcC0+dHhfcmluZ1tlbnRyeV0uYnVmYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCBza2ItPmRhdGEsCiAJCSAJCQkgICAgICAgICAgICBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKGZyZWVfY291bnQgPCBUWF9RVUVVRV9MRU4vMikgey8qIFR5cGljYWwgcGF0aCAqLwogCQljdHJsX3dvcmQgPSBjcHVfdG9fbGUzMigweDEwMDAwMCk7IC8qIE5vIGludGVycnVwdCAqLwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAogCQkvKiBGcmVlIHRoZSBvcmlnaW5hbCBza2IuICovCiAJCXNrYiA9IGVwLT50eF9za2J1ZmZbZW50cnldOwotCQlwY2lfdW5tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCBlcC0+dHhfcmluZ1tlbnRyeV0uYnVmYWRkciwgCisJCXBjaV91bm1hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIGVwLT50eF9yaW5nW2VudHJ5XS5idWZhZGRyLAogCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCWVwLT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKQEAgLTEyODEsOCArMTI4MSw4IEBACiAJCQkJCQkJICAgICAgIGVwLT5yeF9idWZfc3osCiAJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQl9IGVsc2UgewotCQkJCXBjaV91bm1hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIAotCQkJCQllcC0+cnhfcmluZ1tlbnRyeV0uYnVmYWRkciwgCisJCQkJcGNpX3VubWFwX3NpbmdsZShlcC0+cGNpX2RldiwKKwkJCQkJZXAtPnJ4X3JpbmdbZW50cnldLmJ1ZmFkZHIsCiAJCQkJCWVwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiX3B1dChza2IgPSBlcC0+cnhfc2tidWZmW2VudHJ5XSwgcGt0X2xlbik7CiAJCQkJZXAtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwpAQCAtMTMwNyw3ICsxMzA3LDcgQEAKIAkJCQlicmVhazsKIAkJCXNrYi0+ZGV2ID0gZGV2OwkJCS8qIE1hcmsgYXMgYmVpbmcgdXNlZCBieSB0aGlzIGRldmljZS4gKi8KIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CS8qIEFsaWduIElQIG9uIDE2IGJ5dGUgYm91bmRhcmllcyAqLwotCQkJZXAtPnJ4X3JpbmdbZW50cnldLmJ1ZmFkZHIgPSBwY2lfbWFwX3NpbmdsZShlcC0+cGNpX2RldiwgCisJCQllcC0+cnhfcmluZ1tlbnRyeV0uYnVmYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LAogCQkJCXNrYi0+ZGF0YSwgZXAtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXdvcmtfZG9uZSsrOwogCQl9CkBAIC0xNDAzLDcgKzE0MDMsNyBAQAogCQllcC0+cnhfcmluZ1tpXS5yeHN0YXR1cyA9IDA7CQkvKiBOb3Qgb3duZWQgYnkgRXBpYyBjaGlwLiAqLwogCQllcC0+cnhfcmluZ1tpXS5idWZsZW5ndGggPSAwOwogCQlpZiAoc2tiKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCBlcC0+cnhfcmluZ1tpXS5idWZhZGRyLCAKKwkJCXBjaV91bm1hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIGVwLT5yeF9yaW5nW2ldLmJ1ZmFkZHIsCiAJCQkJIAkgZXAtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJfQpAQCAtMTQxNCw3ICsxNDE0LDcgQEAKIAkJZXAtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJCWlmICghc2tiKQogCQkJY29udGludWU7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZXAtPnBjaV9kZXYsIGVwLT50eF9yaW5nW2ldLmJ1ZmFkZHIsIAorCQlwY2lfdW5tYXBfc2luZ2xlKGVwLT5wY2lfZGV2LCBlcC0+dHhfcmluZ1tpXS5idWZhZGRyLAogCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CkBAIC0xNjA3LDcgKzE2MDcsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAgPSBkZXYtPnByaXY7Ci0JCisKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFRYX1RPVEFMX1NJWkUsIGVwLT50eF9yaW5nLCBlcC0+dHhfcmluZ19kbWEpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgUlhfVE9UQUxfU0laRSwgZXAtPnJ4X3JpbmcsIGVwLT5yeF9yaW5nX2RtYSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggNzA1ZTEyMi4uMDRhNTNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTEwNyw2ICsxMDcsOCBAQAogICoJMC41MjogMjAgSmFuIDIwMDY6IEFkZCBNU0kvTVNJWCBzdXBwb3J0LgogICoJMC41MzogMTkgTWFyIDIwMDY6IEZpeCBpbml0IGZyb20gbG93IHBvd2VyIG1vZGUgYW5kIGFkZCBodyByZXNldC4KICAqCTAuNTQ6IDIxIE1hciAyMDA2OiBGaXggc3BpbiBsb2NrcyBmb3IgbXVsdGkgaXJxcyBhbmQgY2xlYW51cC4KKyAqCTAuNTU6IDIyIE1hciAyMDA2OiBBZGQgZmxvdyBjb250cm9sIChwYXVzZSBmcmFtZSkuCisgKgkwLjU2OiAyMiBNYXIgMjAwNjogQWRkaXRpb25hbCBldGh0b29sIGNvbmZpZyBhbmQgbW9kdWxlcGFyYW0gc3VwcG9ydC4KICAqCiAgKiBLbm93biBidWdzOgogICogV2Ugc3VzcGVjdCB0aGF0IG9uIHNvbWUgaGFyZHdhcmUgbm8gVFggZG9uZSBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCkBAIC0xMTgsNyArMTIwLDcgQEAKICAqIERFVl9ORUVEX1RJTUVSSVJRIHdpbGwgbm90IGhhcm0geW91IG9uIHNhbmUgaGFyZHdhcmUsIG9ubHkgZ2VuZXJhdGluZyBhIGZldwogICogc3VwZXJmbHVvdXMgdGltZXIgaW50ZXJydXB0cyBmcm9tIHRoZSBuaWMuCiAgKi8KLSNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjU0IgorI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNTYiCiAjZGVmaW5lIERSVl9OQU1FCQkJImZvcmNlZGV0aCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTYzLDYgKzE2NSw5IEBACiAjZGVmaW5lIERFVl9IQVNfTVNJICAgICAgICAgICAgIDB4MDA0MCAgLyogZGV2aWNlIHN1cHBvcnRzIE1TSSAqLwogI2RlZmluZSBERVZfSEFTX01TSV9YICAgICAgICAgICAweDAwODAgIC8qIGRldmljZSBzdXBwb3J0cyBNU0ktWCAqLwogI2RlZmluZSBERVZfSEFTX1BPV0VSX0NOVFJMICAgICAweDAxMDAgIC8qIGRldmljZSBzdXBwb3J0cyBwb3dlciBzYXZpbmdzICovCisjZGVmaW5lIERFVl9IQVNfUEFVU0VGUkFNRV9UWCAgIDB4MDIwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHR4IHBhdXNlIGZyYW1lcyAqLworI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1MgICAgICAweDA0MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzICovCisjZGVmaW5lIERFVl9IQVNfVEVTVF9FWFRFTkRFRCAgIDB4MDgwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGV4dGVuZGVkIGRpYWdub3N0aWMgdGVzdCAqLwogCiBlbnVtIHsKIAlOdlJlZ0lycVN0YXR1cyA9IDB4MDAwLApAQCAtMjAzLDYgKzIwOCw3IEBACiAJTnZSZWdNU0lJcnFNYXNrID0gMHgwMzAsCiAjZGVmaW5lIE5WUkVHX01TSV9WRUNUT1JfMF9FTkFCTEVEIDB4MDEKIAlOdlJlZ01pc2MxID0gMHgwODAsCisjZGVmaW5lIE5WUkVHX01JU0MxX1BBVVNFX1RYCTB4MDEKICNkZWZpbmUgTlZSRUdfTUlTQzFfSEQJCTB4MDIKICNkZWZpbmUgTlZSRUdfTUlTQzFfRk9SQ0UJMHgzYjBmM2MKIApAQCAtMjE0LDkgKzIyMCwxMSBAQAogI2RlZmluZSBOVlJFR19YTUlUU1RBVF9CVVNZCTB4MDEKIAogCU52UmVnUGFja2V0RmlsdGVyRmxhZ3MgPSAweDhjLAotI2RlZmluZSBOVlJFR19QRkZfQUxXQVlTCTB4N0YwMDA4CisjZGVmaW5lIE5WUkVHX1BGRl9QQVVTRV9SWAkweDA4CisjZGVmaW5lIE5WUkVHX1BGRl9BTFdBWVMJMHg3RjAwMDAKICNkZWZpbmUgTlZSRUdfUEZGX1BST01JU0MJMHg4MAogI2RlZmluZSBOVlJFR19QRkZfTVlBRERSCTB4MjAKKyNkZWZpbmUgTlZSRUdfUEZGX0xPT1BCQUNLCTB4MTAKIAogCU52UmVnT2ZmbG9hZENvbmZpZyA9IDB4OTAsCiAjZGVmaW5lIE5WUkVHX09GRkxPQURfSE9NRVBIWQkweDYwMQpAQCAtMjc3LDYgKzI4NSw5IEBACiAjZGVmaW5lIE5WUkVHX1RYUlhDVExfVkxBTklOUwkweDAwMDgwCiAJTnZSZWdUeFJpbmdQaHlzQWRkckhpZ2ggPSAweDE0OCwKIAlOdlJlZ1J4UmluZ1BoeXNBZGRySGlnaCA9IDB4MTRDLAorCU52UmVnVHhQYXVzZUZyYW1lID0gMHgxNzAsCisjZGVmaW5lIE5WUkVHX1RYX1BBVVNFRlJBTUVfRElTQUJMRQkweDFmZjAwODAKKyNkZWZpbmUgTlZSRUdfVFhfUEFVU0VGUkFNRV9FTkFCTEUJMHgwYzAwMDMwCiAJTnZSZWdNSUlTdGF0dXMgPSAweDE4MCwKICNkZWZpbmUgTlZSRUdfTUlJU1RBVF9FUlJPUgkJMHgwMDAxCiAjZGVmaW5lIE5WUkVHX01JSVNUQVRfTElOS0NIQU5HRQkweDAwMDgKQEAgLTMyNiw2ICszMzcsMzMgQEAKICNkZWZpbmUgTlZSRUdfUE9XRVJTVEFURV9EMQkJMHgwMDAxCiAjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEVfRDIJCTB4MDAwMgogI2RlZmluZSBOVlJFR19QT1dFUlNUQVRFX0QzCQkweDAwMDMKKwlOdlJlZ1R4Q250ID0gMHgyODAsCisJTnZSZWdUeFplcm9SZVhtdCA9IDB4Mjg0LAorCU52UmVnVHhPbmVSZVhtdCA9IDB4Mjg4LAorCU52UmVnVHhNYW55UmVYbXQgPSAweDI4YywKKwlOdlJlZ1R4TGF0ZUNvbCA9IDB4MjkwLAorCU52UmVnVHhVbmRlcmZsb3cgPSAweDI5NCwKKwlOdlJlZ1R4TG9zc0NhcnJpZXIgPSAweDI5OCwKKwlOdlJlZ1R4RXhjZXNzRGVmID0gMHgyOWMsCisJTnZSZWdUeFJldHJ5RXJyID0gMHgyYTAsCisJTnZSZWdSeEZyYW1lRXJyID0gMHgyYTQsCisJTnZSZWdSeEV4dHJhQnl0ZSA9IDB4MmE4LAorCU52UmVnUnhMYXRlQ29sID0gMHgyYWMsCisJTnZSZWdSeFJ1bnQgPSAweDJiMCwKKwlOdlJlZ1J4RnJhbWVUb29Mb25nID0gMHgyYjQsCisJTnZSZWdSeE92ZXJmbG93ID0gMHgyYjgsCisJTnZSZWdSeEZDU0VyciA9IDB4MmJjLAorCU52UmVnUnhGcmFtZUFsaWduRXJyID0gMHgyYzAsCisJTnZSZWdSeExlbkVyciA9IDB4MmM0LAorCU52UmVnUnhVbmljYXN0ID0gMHgyYzgsCisJTnZSZWdSeE11bHRpY2FzdCA9IDB4MmNjLAorCU52UmVnUnhCcm9hZGNhc3QgPSAweDJkMCwKKwlOdlJlZ1R4RGVmID0gMHgyZDQsCisJTnZSZWdUeEZyYW1lID0gMHgyZDgsCisJTnZSZWdSeENudCA9IDB4MmRjLAorCU52UmVnVHhQYXVzZSA9IDB4MmUwLAorCU52UmVnUnhQYXVzZSA9IDB4MmU0LAorCU52UmVnUnhEcm9wRnJhbWUgPSAweDJlOCwKIAlOdlJlZ1ZsYW5Db250cm9sID0gMHgzMDAsCiAjZGVmaW5lIE5WUkVHX1ZMQU5DT05UUk9MX0VOQUJMRQkweDIwMDAKIAlOdlJlZ01TSVhNYXAwID0gMHgzZTAsCkBAIC00NDksMTYgKzQ4NywxOCBAQAogLyogR2VuZXJhbCBkcml2ZXIgZGVmYXVsdHMgKi8KICNkZWZpbmUgTlZfV0FUQ0hET0dfVElNRU8JKDUqSFopCiAKLSNkZWZpbmUgUlhfUklORwkJMTI4Ci0jZGVmaW5lIFRYX1JJTkcJCTI1NgotLyogCi0gKiBJZiB5b3VyIG5pYyBteXN0ZXJpb3VzbHkgaGFuZ3MgdGhlbiB0cnkgdG8gcmVkdWNlIHRoZSBsaW1pdHMKLSAqIHRvIDEvMDogSXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gc2V0IE5WX1RYX0xBU1RQQUNLRVQgaW4gdGhlCi0gKiBsYXN0IHZhbGlkIHJpbmcgZW50cnkuIEJ1dCB0aGlzIHdvdWxkIGJlIGltcG9zc2libGUgdG8KLSAqIGltcGxlbWVudCAtIHByb2JhYmx5IGEgZGlzYXNzZW1ibHkgZXJyb3IuCisjZGVmaW5lIFJYX1JJTkdfREVGQVVMVAkJMTI4CisjZGVmaW5lIFRYX1JJTkdfREVGQVVMVAkJMjU2CisjZGVmaW5lIFJYX1JJTkdfTUlOCQkxMjgKKyNkZWZpbmUgVFhfUklOR19NSU4JCTY0CisjZGVmaW5lIFJJTkdfTUFYX0RFU0NfVkVSXzEJMTAyNAorI2RlZmluZSBSSU5HX01BWF9ERVNDX1ZFUl8yXzMJMTYzODQKKy8qCisgKiBEaWZmZXJlbmNlIGJldHdlZW4gdGhlIGdldCBhbmQgcHV0IHBvaW50ZXJzIGZvciB0aGUgdHggcmluZy4KKyAqIFRoaXMgaXMgdXNlZCB0byB0aHJvdHRsZSB0aGUgYW1vdW50IG9mIGRhdGEgb3V0c3RhbmRpbmcgaW4gdGhlCisgKiB0eCByaW5nLgogICovCi0jZGVmaW5lIFRYX0xJTUlUX1NUT1AJMjU1Ci0jZGVmaW5lIFRYX0xJTUlUX1NUQVJUCTI1NAorI2RlZmluZSBUWF9MSU1JVF9ESUZGRVJFTkNFCTEKIAogLyogcngvdHggbWFjIGFkZHIgKyB0eXBlICsgdmxhbiArIGFsaWduICsgc2xhY2sqLwogI2RlZmluZSBOVl9SWF9IRUFERVJTCQkoNjQpCkBAIC00NzIsOCArNTEyLDkgQEAKICNkZWZpbmUgT09NX1JFRklMTAkoMStIWi8yMCkKICNkZWZpbmUgUE9MTF9XQUlUCSgxK0haLzEwMCkKICNkZWZpbmUgTElOS19USU1FT1VUCSgzKkhaKQorI2RlZmluZSBTVEFUU19JTlRFUlZBTAkoMTAqSFopCiAKLS8qIAorLyoKICAqIGRlc2NfdmVyIHZhbHVlczoKICAqIFRoZSBuaWMgc3VwcG9ydHMgdGhyZWUgZGlmZmVyZW50IGRlc2NyaXB0b3IgdHlwZXM6CiAgKiAtIERFU0NfVkVSXzE6IE9yaWdpbmFsCkBAIC01MDYsMTMgKzU0NywxMyBAQAogI2RlZmluZSBQSFlfMTAwMAkweDIKICNkZWZpbmUgUEhZX0hBTEYJMHgxMDAKIAotLyogRklYTUU6IE1JSSBkZWZpbmVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIDxsaW51eC9taWkuaD4gKi8KLSNkZWZpbmUgTUlJXzEwMDBCVF9DUgkweDA5Ci0jZGVmaW5lIE1JSV8xMDAwQlRfU1IJMHgwYQotI2RlZmluZSBBRFZFUlRJU0VfMTAwMEZVTEwJMHgwMjAwCi0jZGVmaW5lIEFEVkVSVElTRV8xMDAwSEFMRgkweDAxMDAKLSNkZWZpbmUgTFBBXzEwMDBGVUxMCTB4MDgwMAotI2RlZmluZSBMUEFfMTAwMEhBTEYJMHgwNDAwCisjZGVmaW5lIE5WX1BBVVNFRlJBTUVfUlhfQ0FQQUJMRSAweDAwMDEKKyNkZWZpbmUgTlZfUEFVU0VGUkFNRV9UWF9DQVBBQkxFIDB4MDAwMgorI2RlZmluZSBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRSAgMHgwMDA0CisjZGVmaW5lIE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFICAweDAwMDgKKyNkZWZpbmUgTlZfUEFVU0VGUkFNRV9SWF9SRVEgICAgIDB4MDAxMAorI2RlZmluZSBOVl9QQVVTRUZSQU1FX1RYX1JFUSAgICAgMHgwMDIwCisjZGVmaW5lIE5WX1BBVVNFRlJBTUVfQVVUT05FRyAgICAweDAwNDAKIAogLyogTVNJL01TSS1YIGRlZmluZXMgKi8KICNkZWZpbmUgTlZfTVNJX1hfTUFYX1ZFQ1RPUlMgIDgKQEAgLTUyNywxNSArNTY4LDExMCBAQAogI2RlZmluZSBOVl9NU0lfWF9WRUNUT1JfVFggICAgMHgxCiAjZGVmaW5lIE5WX01TSV9YX1ZFQ1RPUl9PVEhFUiAweDIKIAorLyogc3RhdGlzdGljcyAqLworc3RydWN0IG52X2V0aHRvb2xfc3RyIHsKKwljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgbnZfZXN0YXRzX3N0cltdID0geworCXsgInR4X2J5dGVzIiB9LAorCXsgInR4X3plcm9fcmV4bXQiIH0sCisJeyAidHhfb25lX3JleG10IiB9LAorCXsgInR4X21hbnlfcmV4bXQiIH0sCisJeyAidHhfbGF0ZV9jb2xsaXNpb24iIH0sCisJeyAidHhfZmlmb19lcnJvcnMiIH0sCisJeyAidHhfY2Fycmllcl9lcnJvcnMiIH0sCisJeyAidHhfZXhjZXNzX2RlZmVycmFsIiB9LAorCXsgInR4X3JldHJ5X2Vycm9yIiB9LAorCXsgInR4X2RlZmVycmFsIiB9LAorCXsgInR4X3BhY2tldHMiIH0sCisJeyAidHhfcGF1c2UiIH0sCisJeyAicnhfZnJhbWVfZXJyb3IiIH0sCisJeyAicnhfZXh0cmFfYnl0ZSIgfSwKKwl7ICJyeF9sYXRlX2NvbGxpc2lvbiIgfSwKKwl7ICJyeF9ydW50IiB9LAorCXsgInJ4X2ZyYW1lX3Rvb19sb25nIiB9LAorCXsgInJ4X292ZXJfZXJyb3JzIiB9LAorCXsgInJ4X2NyY19lcnJvcnMiIH0sCisJeyAicnhfZnJhbWVfYWxpZ25fZXJyb3IiIH0sCisJeyAicnhfbGVuZ3RoX2Vycm9yIiB9LAorCXsgInJ4X3VuaWNhc3QiIH0sCisJeyAicnhfbXVsdGljYXN0IiB9LAorCXsgInJ4X2Jyb2FkY2FzdCIgfSwKKwl7ICJyeF9ieXRlcyIgfSwKKwl7ICJyeF9wYXVzZSIgfSwKKwl7ICJyeF9kcm9wX2ZyYW1lIiB9LAorCXsgInJ4X3BhY2tldHMiIH0sCisJeyAicnhfZXJyb3JzX3RvdGFsIiB9Cit9OworCitzdHJ1Y3QgbnZfZXRodG9vbF9zdGF0cyB7CisJdTY0IHR4X2J5dGVzOworCXU2NCB0eF96ZXJvX3JleG10OworCXU2NCB0eF9vbmVfcmV4bXQ7CisJdTY0IHR4X21hbnlfcmV4bXQ7CisJdTY0IHR4X2xhdGVfY29sbGlzaW9uOworCXU2NCB0eF9maWZvX2Vycm9yczsKKwl1NjQgdHhfY2Fycmllcl9lcnJvcnM7CisJdTY0IHR4X2V4Y2Vzc19kZWZlcnJhbDsKKwl1NjQgdHhfcmV0cnlfZXJyb3I7CisJdTY0IHR4X2RlZmVycmFsOworCXU2NCB0eF9wYWNrZXRzOworCXU2NCB0eF9wYXVzZTsKKwl1NjQgcnhfZnJhbWVfZXJyb3I7CisJdTY0IHJ4X2V4dHJhX2J5dGU7CisJdTY0IHJ4X2xhdGVfY29sbGlzaW9uOworCXU2NCByeF9ydW50OworCXU2NCByeF9mcmFtZV90b29fbG9uZzsKKwl1NjQgcnhfb3Zlcl9lcnJvcnM7CisJdTY0IHJ4X2NyY19lcnJvcnM7CisJdTY0IHJ4X2ZyYW1lX2FsaWduX2Vycm9yOworCXU2NCByeF9sZW5ndGhfZXJyb3I7CisJdTY0IHJ4X3VuaWNhc3Q7CisJdTY0IHJ4X211bHRpY2FzdDsKKwl1NjQgcnhfYnJvYWRjYXN0OworCXU2NCByeF9ieXRlczsKKwl1NjQgcnhfcGF1c2U7CisJdTY0IHJ4X2Ryb3BfZnJhbWU7CisJdTY0IHJ4X3BhY2tldHM7CisJdTY0IHJ4X2Vycm9yc190b3RhbDsKK307CisKKy8qIGRpYWdub3N0aWNzICovCisjZGVmaW5lIE5WX1RFU1RfQ09VTlRfQkFTRSAzCisjZGVmaW5lIE5WX1RFU1RfQ09VTlRfRVhURU5ERUQgNAorCitzdGF0aWMgY29uc3Qgc3RydWN0IG52X2V0aHRvb2xfc3RyIG52X2V0ZXN0c19zdHJbXSA9IHsKKwl7ICJsaW5rICAgICAgKG9ubGluZS9vZmZsaW5lKSIgfSwKKwl7ICJyZWdpc3RlciAgKG9mZmxpbmUpICAgICAgICIgfSwKKwl7ICJpbnRlcnJ1cHQgKG9mZmxpbmUpICAgICAgICIgfSwKKwl7ICJsb29wYmFjayAgKG9mZmxpbmUpICAgICAgICIgfQorfTsKKworc3RydWN0IHJlZ2lzdGVyX3Rlc3QgeworCXUzMiByZWc7CisJdTMyIG1hc2s7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ2lzdGVyX3Rlc3QgbnZfcmVnaXN0ZXJzX3Rlc3RbXSA9IHsKKwl7IE52UmVnVW5rbm93blNldHVwUmVnNiwgMHgwMSB9LAorCXsgTnZSZWdNaXNjMSwgMHgwM2MgfSwKKwl7IE52UmVnT2ZmbG9hZENvbmZpZywgMHgwM2ZmIH0sCisJeyBOdlJlZ011bHRpY2FzdEFkZHJBLCAweGZmZmZmZmZmIH0sCisJeyBOdlJlZ1Vua25vd25TZXR1cFJlZzMsIDB4MGZmIH0sCisJeyBOdlJlZ1dha2VVcEZsYWdzLCAweDA3Nzc3IH0sCisJeyAwLDAgfQorfTsKKwogLyoKICAqIFNNUCBsb2NraW5nOgogICogQWxsIGhhcmR3YXJlIGFjY2VzcyB1bmRlciBkZXYtPnByaXYtPmxvY2ssIGV4Y2VwdCB0aGUgcGVyZm9ybWFuY2UKICAqIGNyaXRpY2FsIHBhcnRzOgogICogLSByeCBpcyAocHNldWRvLSkgbG9ja2xlc3M6IGl0IHJlbGllcyBvbiB0aGUgc2luZ2xlLXRocmVhZGluZyBwcm92aWRlZAogICoJYnkgdGhlIGFyY2ggY29kZSBmb3IgaW50ZXJydXB0cy4KLSAqIC0gdHggc2V0dXAgaXMgbG9ja2xlc3M6IGl0IHJlbGllcyBvbiBkZXYtPnhtaXRfbG9jay4gQWN0dWFsIHN1Ym1pc3Npb24KKyAqIC0gdHggc2V0dXAgaXMgbG9ja2xlc3M6IGl0IHJlbGllcyBvbiBuZXRpZl90eF9sb2NrLiBBY3R1YWwgc3VibWlzc2lvbgogICoJbmVlZHMgZGV2LT5wcml2LT5sb2NrIDotKAotICogLSBzZXRfbXVsdGljYXN0X2xpc3Q6IHByZXBhcmF0aW9uIGxvY2tsZXNzLCByZWxpZXMgb24gZGV2LT54bWl0X2xvY2suCisgKiAtIHNldF9tdWx0aWNhc3RfbGlzdDogcHJlcGFyYXRpb24gbG9ja2xlc3MsIHJlbGllcyBvbiBuZXRpZl90eF9sb2NrLgogICovCiAKIC8qIGluIGRldjogYmFzZSwgaXJxICovCkBAIC01NDUsNiArNjgxLDcgQEAKIAkvKiBHZW5lcmFsIGRhdGE6CiAJICogTG9ja2luZzogc3Bpbl9sb2NrKCZucC0+bG9jayk7ICovCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJc3RydWN0IG52X2V0aHRvb2xfc3RhdHMgZXN0YXRzOwogCWludCBpbl9zaHV0ZG93bjsKIAl1MzIgbGlua3NwZWVkOwogCWludCBkdXBsZXg7CkBAIC01NTQsNiArNjkxLDcgQEAKIAlpbnQgd29sZW5hYmxlZDsKIAl1bnNpZ25lZCBpbnQgcGh5X291aTsKIAl1MTYgZ2lnYWJpdDsKKwlpbnQgaW50cl90ZXN0OwogCiAJLyogR2VuZXJhbCBkYXRhOiBSTyBmaWVsZHMgKi8KIAlkbWFfYWRkcl90IHJpbmdfYWRkcjsKQEAgLTU3MywxMyArNzExLDE1IEBACiAJICovCiAJcmluZ190eXBlIHJ4X3Jpbmc7CiAJdW5zaWduZWQgaW50IGN1cl9yeCwgcmVmaWxsX3J4OwotCXN0cnVjdCBza19idWZmICpyeF9za2J1ZmZbUlhfUklOR107Ci0JZG1hX2FkZHJfdCByeF9kbWFbUlhfUklOR107CisJc3RydWN0IHNrX2J1ZmYgKipyeF9za2J1ZmY7CisJZG1hX2FkZHJfdCAqcnhfZG1hOwogCXVuc2lnbmVkIGludCByeF9idWZfc3o7CiAJdW5zaWduZWQgaW50IHBrdF9saW1pdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBvb21fa2ljazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBuaWNfcG9sbDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzdGF0c19wb2xsOwogCXUzMiBuaWNfcG9sbF9pcnE7CisJaW50IHJ4X3Jpbmdfc2l6ZTsKIAogCS8qIG1lZGlhIGRldGVjdGlvbiB3b3JrYXJvdW5kLgogCSAqIExvY2tpbmc6IFdpdGhpbiBpcnEgaGFuZGVyIG9yIGRpc2FibGVfaXJxK3NwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtNTkxLDEwICs3MzEsMTMgQEAKIAkgKi8KIAlyaW5nX3R5cGUgdHhfcmluZzsKIAl1bnNpZ25lZCBpbnQgbmV4dF90eCwgbmljX3R4OwotCXN0cnVjdCBza19idWZmICp0eF9za2J1ZmZbVFhfUklOR107Ci0JZG1hX2FkZHJfdCB0eF9kbWFbVFhfUklOR107Ci0JdW5zaWduZWQgaW50IHR4X2RtYV9sZW5bVFhfUklOR107CisJc3RydWN0IHNrX2J1ZmYgKip0eF9za2J1ZmY7CisJZG1hX2FkZHJfdCAqdHhfZG1hOworCXVuc2lnbmVkIGludCAqdHhfZG1hX2xlbjsKIAl1MzIgdHhfZmxhZ3M7CisJaW50IHR4X3Jpbmdfc2l6ZTsKKwlpbnQgdHhfbGltaXRfc3RhcnQ7CisJaW50IHR4X2xpbWl0X3N0b3A7CiAKIAkvKiB2bGFuIGZpZWxkcyAqLwogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuZ3JwOwpAQCAtNjAyLDYgKzc0NSw5IEBACiAJLyogbXNpL21zaS14IGZpZWxkcyAqLwogCXUzMiBtc2lfZmxhZ3M7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpX3hfZW50cnlbTlZfTVNJX1hfTUFYX1ZFQ1RPUlNdOworCisJLyogZmxvdyBjb250cm9sICovCisJdTMyIHBhdXNlX2ZsYWdzOwogfTsKIAogLyoKQEAgLTYxMiwxMiArNzU4LDE0IEBACiAKIC8qCiAgKiBPcHRpbWl6YXRpb24gY2FuIGJlIGVpdGhlciB0aHJvdXB1dCBtb2RlIG9yIGNwdSBtb2RlCi0gKiAKKyAqCiAgKiBUaHJvdWdocHV0IE1vZGU6IEV2ZXJ5IHR4IGFuZCByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuCiAgKiBDUFUgTW9kZTogSW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLgogICovCi0jZGVmaW5lIE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQgMAotI2RlZmluZSBOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUgICAgICAgIDEKK2VudW0geworCU5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQsCisJTlZfT1BUSU1JWkFUSU9OX01PREVfQ1BVCit9Owogc3RhdGljIGludCBvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQ7CiAKIC8qCkBAIC02MzAsMTQgKzc3OCwzMSBAQAogc3RhdGljIGludCBwb2xsX2ludGVydmFsID0gLTE7CiAKIC8qCi0gKiBEaXNhYmxlIE1TSSBpbnRlcnJ1cHRzCisgKiBNU0kgaW50ZXJydXB0cwogICovCi1zdGF0aWMgaW50IGRpc2FibGVfbXNpID0gMDsKK2VudW0geworCU5WX01TSV9JTlRfRElTQUJMRUQsCisJTlZfTVNJX0lOVF9FTkFCTEVECit9Oworc3RhdGljIGludCBtc2kgPSBOVl9NU0lfSU5UX0VOQUJMRUQ7CiAKIC8qCi0gKiBEaXNhYmxlIE1TSVggaW50ZXJydXB0cworICogTVNJWCBpbnRlcnJ1cHRzCiAgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV9tc2l4ID0gMDsKK2VudW0geworCU5WX01TSVhfSU5UX0RJU0FCTEVELAorCU5WX01TSVhfSU5UX0VOQUJMRUQKK307CitzdGF0aWMgaW50IG1zaXggPSBOVl9NU0lYX0lOVF9FTkFCTEVEOworCisvKgorICogRE1BIDY0Yml0CisgKi8KK2VudW0geworCU5WX0RNQV82NEJJVF9ESVNBQkxFRCwKKwlOVl9ETUFfNjRCSVRfRU5BQkxFRAorfTsKK3N0YXRpYyBpbnQgZG1hXzY0Yml0ID0gTlZfRE1BXzY0QklUX0VOQUJMRUQ7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZlX3ByaXYgKmdldF9udnByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTY5Nyw3ICs4NjIsNyBAQAogCQkJd3JpdGVsKCh1MzIpIGNwdV90b19sZTY0KG5wLT5yaW5nX2FkZHIpLCBiYXNlICsgTnZSZWdSeFJpbmdQaHlzQWRkcik7CiAJCX0KIAkJaWYgKHJ4dHhfZmxhZ3MgJiBOVl9TRVRVUF9UWF9SSU5HKSB7Ci0JCQl3cml0ZWwoKHUzMikgY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciArIFJYX1JJTkcqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHIpOworCQkJd3JpdGVsKCh1MzIpIGNwdV90b19sZTY0KG5wLT5yaW5nX2FkZHIgKyBucC0+cnhfcmluZ19zaXplKnNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSksIGJhc2UgKyBOdlJlZ1R4UmluZ1BoeXNBZGRyKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChyeHR4X2ZsYWdzICYgTlZfU0VUVVBfUlhfUklORykgewpAQCAtNzA1LDEyICs4NzAsMzcgQEAKIAkJCXdyaXRlbCgodTMyKSAoY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkcikgPj4gMzIpLCBiYXNlICsgTnZSZWdSeFJpbmdQaHlzQWRkckhpZ2gpOwogCQl9CiAJCWlmIChyeHR4X2ZsYWdzICYgTlZfU0VUVVBfVFhfUklORykgewotCQkJd3JpdGVsKCh1MzIpIGNwdV90b19sZTY0KG5wLT5yaW5nX2FkZHIgKyBSWF9SSU5HKnNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSksIGJhc2UgKyBOdlJlZ1R4UmluZ1BoeXNBZGRyKTsKLQkJCXdyaXRlbCgodTMyKSAoY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciArIFJYX1JJTkcqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpKSA+PiAzMiksIGJhc2UgKyBOdlJlZ1R4UmluZ1BoeXNBZGRySGlnaCk7CisJCQl3cml0ZWwoKHUzMikgY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciArIG5wLT5yeF9yaW5nX3NpemUqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHIpOworCQkJd3JpdGVsKCh1MzIpIChjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyICsgbnAtPnJ4X3Jpbmdfc2l6ZSpzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkpID4+IDMyKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHJIaWdoKTsKIAkJfQogCX0KIH0KIAorc3RhdGljIHZvaWQgZnJlZV9yaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQlpZihucC0+cnhfcmluZy5vcmlnKQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpICogKG5wLT5yeF9yaW5nX3NpemUgKyBucC0+dHhfcmluZ19zaXplKSwKKwkJCQkJICAgIG5wLT5yeF9yaW5nLm9yaWcsIG5wLT5yaW5nX2FkZHIpOworCX0gZWxzZSB7CisJCWlmIChucC0+cnhfcmluZy5leCkKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChucC0+cnhfcmluZ19zaXplICsgbnAtPnR4X3Jpbmdfc2l6ZSksCisJCQkJCSAgICBucC0+cnhfcmluZy5leCwgbnAtPnJpbmdfYWRkcik7CisJfQorCWlmIChucC0+cnhfc2tidWZmKQorCQlrZnJlZShucC0+cnhfc2tidWZmKTsKKwlpZiAobnAtPnJ4X2RtYSkKKwkJa2ZyZWUobnAtPnJ4X2RtYSk7CisJaWYgKG5wLT50eF9za2J1ZmYpCisJCWtmcmVlKG5wLT50eF9za2J1ZmYpOworCWlmIChucC0+dHhfZG1hKQorCQlrZnJlZShucC0+dHhfZG1hKTsKKwlpZiAobnAtPnR4X2RtYV9sZW4pCisJCWtmcmVlKG5wLT50eF9kbWFfbGVuKTsKK30KKwogc3RhdGljIGludCB1c2luZ19tdWx0aV9pcnFzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwpAQCAtODYwLDcgKzEwNTAsNyBAQAogCiAJLyogc2V0IGFkdmVydGlzZSByZWdpc3RlciAqLwogCXJlZyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBNSUlfUkVBRCk7Ci0JcmVnIHw9IChBRFZFUlRJU0VfMTBIQUxGfEFEVkVSVElTRV8xMEZVTEx8QURWRVJUSVNFXzEwMEhBTEZ8QURWRVJUSVNFXzEwMEZVTEx8MHg4MDB8MHg0MDApOworCXJlZyB8PSAoQURWRVJUSVNFXzEwSEFMRnxBRFZFUlRJU0VfMTBGVUxMfEFEVkVSVElTRV8xMDBIQUxGfEFEVkVSVElTRV8xMDBGVUxMfEFEVkVSVElTRV9QQVVTRV9BU1lNfEFEVkVSVElTRV9QQVVTRV9DQVApOwogCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgcmVnKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IHdyaXRlIHRvIGFkdmVydGlzZSBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQlyZXR1cm4gUEhZX0VSUk9SOwpAQCAtODczLDE0ICsxMDYzLDE0IEBACiAJbWlpX3N0YXR1cyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1TUiwgTUlJX1JFQUQpOwogCWlmIChtaWlfc3RhdHVzICYgUEhZX0dJR0FCSVQpIHsKIAkJbnAtPmdpZ2FiaXQgPSBQSFlfR0lHQUJJVDsKLQkJbWlpX2NvbnRyb2xfMTAwMCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfMTAwMEJUX0NSLCBNSUlfUkVBRCk7CisJCW1paV9jb250cm9sXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBNSUlfUkVBRCk7CiAJCW1paV9jb250cm9sXzEwMDAgJj0gfkFEVkVSVElTRV8xMDAwSEFMRjsKIAkJaWYgKHBoeWludGVyZmFjZSAmIFBIWV9SR01JSSkKIAkJCW1paV9jb250cm9sXzEwMDAgfD0gQURWRVJUSVNFXzEwMDBGVUxMOwogCQllbHNlCiAJCQltaWlfY29udHJvbF8xMDAwICY9IH5BRFZFUlRJU0VfMTAwMEZVTEw7CiAKLQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfMTAwMEJUX0NSLCBtaWlfY29udHJvbF8xMDAwKSkgeworCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9DVFJMMTAwMCwgbWlpX2NvbnRyb2xfMTAwMCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJcmV0dXJuIFBIWV9FUlJPUjsKIAkJfQpAQCAtOTE4LDYgKzExMDgsOCBAQAogCQkJcmV0dXJuIFBIWV9FUlJPUjsKIAkJfQogCX0KKwkvKiBzb21lIHBoeXMgY2xlYXIgb3V0IHBhdXNlIGFkdmVydGlzbWVudCBvbiByZXNldCwgc2V0IGl0IGJhY2sgKi8KKwltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgcmVnKTsKIAogCS8qIHJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLwogCW1paV9jb250cm9sID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CkBAIC0xMDQ3LDcgKzEyMzksNyBAQAogCXdoaWxlIChucC0+Y3VyX3J4ICE9IHJlZmlsbF9yeCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JCW5yID0gcmVmaWxsX3J4ICUgUlhfUklORzsKKwkJbnIgPSByZWZpbGxfcnggJSBucC0+cnhfcmluZ19zaXplOwogCQlpZiAobnAtPnJ4X3NrYnVmZltucl0gPT0gTlVMTCkgewogCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKG5wLT5yeF9idWZfc3ogKyBOVl9SWF9BTExPQ19QQUQpOwpAQCAtMTA3Niw3ICsxMjY4LDcgQEAKIAkJcmVmaWxsX3J4Kys7CiAJfQogCW5wLT5yZWZpbGxfcnggPSByZWZpbGxfcng7Ci0JaWYgKG5wLT5jdXJfcnggLSByZWZpbGxfcnggPT0gUlhfUklORykKKwlpZiAobnAtPmN1cl9yeCAtIHJlZmlsbF9yeCA9PSBucC0+cnhfcmluZ19zaXplKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTAsMTQgKzEzMDIsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG52X2luaXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCitzdGF0aWMgdm9pZCBudl9pbml0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAotCW5wLT5jdXJfcnggPSBSWF9SSU5HOworCW5wLT5jdXJfcnggPSBucC0+cnhfcmluZ19zaXplOwogCW5wLT5yZWZpbGxfcnggPSAwOwotCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5wLT5yeF9yaW5nX3NpemU7IGkrKykKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQogCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuID0gMDsKIAkgICAgICAgIGVsc2UKQEAgLTExMzAsNyArMTMyMiw3IEBACiAJaW50IGk7CiAKIAlucC0+bmV4dF90eCA9IG5wLT5uaWNfdHggPSAwOwotCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnAtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKIAkJCW5wLT50eF9yaW5nLm9yaWdbaV0uRmxhZ0xlbiA9IDA7CiAJICAgICAgICBlbHNlCkBAIC0xMTc0LDggKzEzNjYsOCBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGk7Ci0JCi0JZm9yIChpID0gMDsgaSA8IFRYX1JJTkc7IGkrKykgeworCisJZm9yIChpID0gMDsgaSA8IG5wLT50eF9yaW5nX3NpemU7IGkrKykgewogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCiAJCQlucC0+dHhfcmluZy5vcmlnW2ldLkZsYWdMZW4gPSAwOwogCQllbHNlCkBAIC0xMTg5LDcgKzEzODEsNyBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IFJYX1JJTkc7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucC0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQogCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuID0gMDsKIAkJZWxzZQpAQCAtMTIxMyw3ICsxNDA1LDcgQEAKIAogLyoKICAqIG52X3N0YXJ0X3htaXQ6IGRldi0+aGFyZF9zdGFydF94bWl0IGZ1bmN0aW9uCi0gKiBDYWxsZWQgd2l0aCBkZXYtPnhtaXRfbG9jayBoZWxkLgorICogQ2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBoZWxkLgogICovCiBzdGF0aWMgaW50IG52X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEyMjEsOCArMTQxMyw4IEBACiAJdTMyIHR4X2ZsYWdzID0gMDsKIAl1MzIgdHhfZmxhZ3NfZXh0cmEgPSAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgPyBOVl9UWF9MQVNUUEFDS0VUIDogTlZfVFgyX0xBU1RQQUNLRVQpOwogCXVuc2lnbmVkIGludCBmcmFnbWVudHMgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCXVuc2lnbmVkIGludCBuciA9IChucC0+bmV4dF90eCAtIDEpICUgVFhfUklORzsKLQl1bnNpZ25lZCBpbnQgc3RhcnRfbnIgPSBucC0+bmV4dF90eCAlIFRYX1JJTkc7CisJdW5zaWduZWQgaW50IG5yID0gKG5wLT5uZXh0X3R4IC0gMSkgJSBucC0+dHhfcmluZ19zaXplOworCXVuc2lnbmVkIGludCBzdGFydF9uciA9IG5wLT5uZXh0X3R4ICUgbnAtPnR4X3Jpbmdfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgb2Zmc2V0ID0gMDsKIAl1MzIgYmNudDsKQEAgLTEyMzgsNyArMTQzMCw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAKLQlpZiAoKG5wLT5uZXh0X3R4IC0gbnAtPm5pY190eCArIGVudHJpZXMgLSAxKSA+IFRYX0xJTUlUX1NUT1ApIHsKKwlpZiAoKG5wLT5uZXh0X3R4IC0gbnAtPm5pY190eCArIGVudHJpZXMgLSAxKSA+IG5wLT50eF9saW1pdF9zdG9wKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKQEAgLTEyNDcsNyArMTQzOSw3IEBACiAJLyogc2V0dXAgdGhlIGhlYWRlciBidWZmZXIgKi8KIAlkbyB7CiAJCWJjbnQgPSAoc2l6ZSA+IE5WX1RYMl9UU09fTUFYX1NJWkUpID8gTlZfVFgyX1RTT19NQVhfU0laRSA6IHNpemU7Ci0JCW5yID0gKG5yICsgMSkgJSBUWF9SSU5HOworCQluciA9IChuciArIDEpICUgbnAtPnR4X3Jpbmdfc2l6ZTsKIAogCQlucC0+dHhfZG1hW25yXSA9IHBjaV9tYXBfc2luZ2xlKG5wLT5wY2lfZGV2LCBza2ItPmRhdGEgKyBvZmZzZXQsIGJjbnQsCiAJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTEyNzQsNyArMTQ2Niw3IEBACiAKIAkJZG8gewogCQkJYmNudCA9IChzaXplID4gTlZfVFgyX1RTT19NQVhfU0laRSkgPyBOVl9UWDJfVFNPX01BWF9TSVpFIDogc2l6ZTsKLQkJCW5yID0gKG5yICsgMSkgJSBUWF9SSU5HOworCQkJbnIgPSAobnIgKyAxKSAlIG5wLT50eF9yaW5nX3NpemU7CiAKIAkJCW5wLT50eF9kbWFbbnJdID0gcGNpX21hcF9wYWdlKG5wLT5wY2lfZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCtvZmZzZXQsIGJjbnQsCiAJCQkJCQkgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTEzMjAsNyArMTUxMiw3IEBACiAJfSBlbHNlIHsKIAkJbnAtPnR4X3JpbmcuZXhbc3RhcnRfbnJdLlR4VmxhbiA9IGNwdV90b19sZTMyKHR4X2ZsYWdzX3ZsYW4pOwogCQlucC0+dHhfcmluZy5leFtzdGFydF9ucl0uRmxhZ0xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKLQl9CQorCX0KIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0X3htaXQ6IHBhY2tldCAlZCAoZW50cmllcyAlZCkgcXVldWVkIGZvciB0cmFuc21pc3Npb24uIHR4X2ZsYWdzX2V4dHJhOiAleFxuIiwKIAkJZGV2LT5uYW1lLCBucC0+bmV4dF90eCwgZW50cmllcywgdHhfZmxhZ3NfZXh0cmEpOwpAQCAtMTM1Niw3ICsxNTQ4LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJd2hpbGUgKG5wLT5uaWNfdHggIT0gbnAtPm5leHRfdHgpIHsKLQkJaSA9IG5wLT5uaWNfdHggJSBUWF9SSU5HOworCQlpID0gbnAtPm5pY190eCAlIG5wLT50eF9yaW5nX3NpemU7CiAKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQogCQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLkZsYWdMZW4pOwpAQCAtMTM5NSwxOSArMTU4NywxOSBAQAogCQkJCX0gZWxzZSB7CiAJCQkJCW5wLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJCW5wLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCQl9CQkJCQorCQkJCX0KIAkJCX0KIAkJfQogCQludl9yZWxlYXNlX3R4c2tiKGRldiwgaSk7CiAJCW5wLT5uaWNfdHgrKzsKIAl9Ci0JaWYgKG5wLT5uZXh0X3R4IC0gbnAtPm5pY190eCA8IFRYX0xJTUlUX1NUQVJUKQorCWlmIChucC0+bmV4dF90eCAtIG5wLT5uaWNfdHggPCBucC0+dHhfbGltaXRfc3RhcnQpCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAogLyoKICAqIG52X3R4X3RpbWVvdXQ6IGRldi0+dHhfdGltZW91dCBmdW5jdGlvbgotICogQ2FsbGVkIHdpdGggZGV2LT54bWl0X2xvY2sgaGVsZC4KKyAqIENhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgaGVsZC4KICAqLwogc3RhdGljIHZvaWQgbnZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTQzOCwxMCArMTYzMCwxMCBAQAogCQkJCQlyZWFkbChiYXNlICsgaSArIDI0KSwgcmVhZGwoYmFzZSArIGkgKyAyOCkpOwogCQl9CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEdW1waW5nIHR4IHJpbmdcbiIsIGRldi0+bmFtZSk7Ci0JCWZvciAoaT0wO2k8VFhfUklORztpKz0gNCkgeworCQlmb3IgKGk9MDtpPG5wLT50eF9yaW5nX3NpemU7aSs9IDQpIHsKIAkJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiUwM3g6ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggLy8gJTA4eCAlMDh4IC8vICUwOHggJTA4eFxuIiwKLQkJCQkgICAgICAgaSwgCisJCQkJICAgICAgIGksCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uUGFja2V0QnVmZmVyKSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuKSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzFdLlBhY2tldEJ1ZmZlciksCkBAIC0xNDUyLDcgKzE2NDQsNyBAQAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krM10uRmxhZ0xlbikpOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICIlMDN4OiAlMDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCQkgICAgICAgaSwgCisJCQkJICAgICAgIGksCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLlBhY2tldEJ1ZmZlckhpZ2gpLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5QYWNrZXRCdWZmZXJMb3cpLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5GbGFnTGVuKSwKQEAgLTE1NTAsMTUgKzE3NDIsMTQgQEAKIAl1MzIgRmxhZ3M7CiAJdTMyIHZsYW5mbGFncyA9IDA7CiAKLQogCWZvciAoOzspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJaW50IGxlbjsKIAkJaW50IGk7Ci0JCWlmIChucC0+Y3VyX3J4IC0gbnAtPnJlZmlsbF9yeCA+PSBSWF9SSU5HKQorCQlpZiAobnAtPmN1cl9yeCAtIG5wLT5yZWZpbGxfcnggPj0gbnAtPnJ4X3Jpbmdfc2l6ZSkKIAkJCWJyZWFrOwkvKiB3ZSBzY2FubmVkIHRoZSB3aG9sZSByaW5nIC0gZG8gbm90IGNvbnRpbnVlICovCiAKLQkJaSA9IG5wLT5jdXJfcnggJSBSWF9SSU5HOworCQlpID0gbnAtPmN1cl9yeCAlIG5wLT5yeF9yaW5nX3NpemU7CiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewogCQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5vcmlnW2ldLkZsYWdMZW4pOwogCQkJbGVuID0gbnZfZGVzY3JfZ2V0bGVuZ3RoKCZucC0+cnhfcmluZy5vcmlnW2ldLCBucC0+ZGVzY192ZXIpOwpAQCAtMTY2NSwxNCArMTg1NiwxNiBAQAogCQkJCQl9CiAJCQkJfQogCQkJfQotCQkJRmxhZ3MgJj0gTlZfUlgyX0NIRUNLU1VNTUFTSzsKLQkJCWlmIChGbGFncyA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzEgfHwKLQkJCQkJRmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0syIHx8Ci0JCQkJCUZsYWdzID09IE5WX1JYMl9DSEVDS1NVTU9LMykgewotCQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGh3IGNoZWNrc3VtIGhpdCEuXG4iLCBkZXYtPm5hbWUpOwotCQkJCW5wLT5yeF9za2J1ZmZbaV0tPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkJfSBlbHNlIHsKLQkJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBod2NoZWNrc3VtIG1pc3MhLlxuIiwgZGV2LT5uYW1lKTsKKwkJCWlmIChucC0+dHhyeGN0bF9iaXRzICYgTlZSRUdfVFhSWENUTF9SWENIRUNLKSB7CisJCQkJRmxhZ3MgJj0gTlZfUlgyX0NIRUNLU1VNTUFTSzsKKwkJCQlpZiAoRmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0sxIHx8CisJCQkJICAgIEZsYWdzID09IE5WX1JYMl9DSEVDS1NVTU9LMiB8fAorCQkJCSAgICBGbGFncyA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzMpIHsKKwkJCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaHcgY2hlY2tzdW0gaGl0IS5cbiIsIGRldi0+bmFtZSk7CisJCQkJCW5wLT5yeF9za2J1ZmZbaV0tPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCX0gZWxzZSB7CisJCQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGh3Y2hlY2tzdW0gbWlzcyEuXG4iLCBkZXYtPm5hbWUpOworCQkJCX0KIAkJCX0KIAkJfQogCQkvKiBnb3QgYSB2YWxpZCBwYWNrZXQgLSBmb3J3YXJkIGl0IHRvIHRoZSBuZXR3b3JrIGNvcmUgKi8KQEAgLTE3MzcsNyArMTkzMCw3IEBACiAJCSAqIENoYW5naW5nIHRoZSBNVFUgaXMgYSByYXJlIGV2ZW50LCBpdCBzaG91bGRuJ3QgbWF0dGVyLgogCQkgKi8KIAkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKLQkJc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCS8qIHN0b3AgZW5naW5lcyAqLwogCQludl9zdG9wX3J4KGRldik7CkBAIC0xNzQ3LDE4ICsxOTQwLDE1IEBACiAJCW52X2RyYWluX3J4KGRldik7CiAJCW52X2RyYWluX3R4KGRldik7CiAJCS8qIHJlaW5pdCBkcml2ZXIgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KLQkJbnZfaW5pdF9yeChkZXYpOwotCQludl9pbml0X3R4KGRldik7Ci0JCS8qIGFsbG9jIG5ldyByeCBidWZmZXJzICovCiAJCXNldF9idWZzaXplKGRldik7Ci0JCWlmIChudl9hbGxvY19yeChkZXYpKSB7CisJCWlmIChudl9pbml0X3JpbmcoZGV2KSkgewogCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCiAJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKIAkJfQogCQkvKiByZWluaXQgbmljIHZpZXcgb2YgdGhlIHJ4IHF1ZXVlICovCiAJCXdyaXRlbChucC0+cnhfYnVmX3N6LCBiYXNlICsgTnZSZWdPZmZsb2FkQ29uZmlnKTsKIAkJc2V0dXBfaHdfcmluZ3MoZGV2LCBOVl9TRVRVUF9SWF9SSU5HIHwgTlZfU0VUVVBfVFhfUklORyk7Ci0JCXdyaXRlbCggKChSWF9SSU5HLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgoVFhfUklORy0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCisJCXdyaXRlbCggKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCQliYXNlICsgTnZSZWdSaW5nU2l6ZXMpOwogCQlwY2lfcHVzaChiYXNlKTsKIAkJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKQEAgLTE3NjgsNyArMTk1OCw3IEBACiAJCW52X3N0YXJ0X3J4KGRldik7CiAJCW52X3N0YXJ0X3R4KGRldik7CiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCQludl9lbmFibGVfaXJxKGRldik7CiAJfQogCXJldHVybiAwOwpAQCAtMTgwMyw3ICsxOTkzLDcgQEAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgbWFjYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAKIAkJLyogc3RvcCByeCBlbmdpbmUgKi8KQEAgLTE4MTUsNyArMjAwNSw3IEBACiAJCS8qIHJlc3RhcnQgcnggZW5naW5lICovCiAJCW52X3N0YXJ0X3J4KGRldik7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwotCQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAl9IGVsc2UgewogCQludl9jb3B5X21hY190b19odyhkZXYpOwogCX0KQEAgLTE4MjQsNyArMjAxNCw3IEBACiAKIC8qCiAgKiBudl9zZXRfbXVsdGljYXN0OiBkZXYtPnNldF9tdWx0aWNhc3QgZnVuY3Rpb24KLSAqIENhbGxlZCB3aXRoIGRldi0+eG1pdF9sb2NrIGhlbGQuCisgKiBDYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIG52X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTE4MzIsMTYgKzIwMjIsMTYgQEAKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXUzMiBhZGRyWzJdOwogCXUzMiBtYXNrWzJdOwotCXUzMiBwZmY7CisJdTMyIHBmZiA9IHJlYWRsKGJhc2UgKyBOdlJlZ1BhY2tldEZpbHRlckZsYWdzKSAmIE5WUkVHX1BGRl9QQVVTRV9SWDsKIAogCW1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpOwogCW1lbXNldChtYXNrLCAwLCBzaXplb2YobWFzaykpOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwotCQlwZmYgPSBOVlJFR19QRkZfUFJPTUlTQzsKKwkJcGZmIHw9IE5WUkVHX1BGRl9QUk9NSVNDOwogCX0gZWxzZSB7Ci0JCXBmZiA9IE5WUkVHX1BGRl9NWUFERFI7CisJCXBmZiB8PSBOVlJFR19QRkZfTVlBRERSOwogCiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IGRldi0+bWNfbGlzdCkgewogCQkJdTMyIGFsd2F5c09mZlsyXTsKQEAgLTE4ODYsNiArMjA3NiwzNSBAQAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogfQogCit2b2lkIG52X3VwZGF0ZV9wYXVzZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGF1c2VfZmxhZ3MpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCisJbnAtPnBhdXNlX2ZsYWdzICY9IH4oTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEUgfCBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRSk7CisKKwlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9DQVBBQkxFKSB7CisJCXUzMiBwZmYgPSByZWFkbChiYXNlICsgTnZSZWdQYWNrZXRGaWx0ZXJGbGFncykgJiB+TlZSRUdfUEZGX1BBVVNFX1JYOworCQlpZiAocGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRSkgeworCQkJd3JpdGVsKHBmZnxOVlJFR19QRkZfUEFVU0VfUlgsIGJhc2UgKyBOdlJlZ1BhY2tldEZpbHRlckZsYWdzKTsKKwkJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbChwZmYsIGJhc2UgKyBOdlJlZ1BhY2tldEZpbHRlckZsYWdzKTsKKwkJfQorCX0KKwlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9DQVBBQkxFKSB7CisJCXUzMiByZWdtaXNjID0gcmVhZGwoYmFzZSArIE52UmVnTWlzYzEpICYgfk5WUkVHX01JU0MxX1BBVVNFX1RYOworCQlpZiAocGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRSkgeworCQkJd3JpdGVsKE5WUkVHX1RYX1BBVVNFRlJBTUVfRU5BQkxFLCAgYmFzZSArIE52UmVnVHhQYXVzZUZyYW1lKTsKKwkJCXdyaXRlbChyZWdtaXNjfE5WUkVHX01JU0MxX1BBVVNFX1RYLCBiYXNlICsgTnZSZWdNaXNjMSk7CisJCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEU7CisJCX0gZWxzZSB7CisJCQl3cml0ZWwoTlZSRUdfVFhfUEFVU0VGUkFNRV9ESVNBQkxFLCAgYmFzZSArIE52UmVnVHhQYXVzZUZyYW1lKTsKKwkJCXdyaXRlbChyZWdtaXNjLCBiYXNlICsgTnZSZWdNaXNjMSk7CisJCX0KKwl9Cit9CisKIC8qKgogICogbnZfdXBkYXRlX2xpbmtzcGVlZDogU2V0dXAgdGhlIE1BQyBhY2NvcmRpbmcgdG8gdGhlIGxpbmsgcGFydG5lcgogICogQGRldjogTmV0d29yayBkZXZpY2UgdG8gYmUgY29uZmlndXJlZApAQCAtMTkwMSwxMiArMjEyMCwxNCBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQlpbnQgYWR2LCBscGE7CisJaW50IGFkdiA9IDA7CisJaW50IGxwYSA9IDA7CisJaW50IGFkdl9scGEsIGFkdl9wYXVzZSwgbHBhX3BhdXNlOwogCWludCBuZXdscyA9IG5wLT5saW5rc3BlZWQ7CiAJaW50IG5ld2R1cCA9IG5wLT5kdXBsZXg7CiAJaW50IG1paV9zdGF0dXM7CiAJaW50IHJldHZhbCA9IDA7Ci0JdTMyIGNvbnRyb2xfMTAwMCwgc3RhdHVzXzEwMDAsIHBoeXJlZzsKKwl1MzIgY29udHJvbF8xMDAwLCBzdGF0dXNfMTAwMCwgcGh5cmVnLCBwYXVzZV9mbGFnczsKIAogCS8qIEJNU1JfTFNUQVRVUyBpcyBsYXRjaGVkLCByZWFkIGl0IHR3aWNlOgogCSAqIHdlIHdhbnQgdGhlIGN1cnJlbnQgdmFsdWUuCkBAIC0xOTUyLDEwICsyMTczLDE1IEBACiAJCWdvdG8gc2V0X3NwZWVkOwogCX0KIAorCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBNSUlfUkVBRCk7CisJbHBhID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9MUEEsIE1JSV9SRUFEKTsKKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl91cGRhdGVfbGlua3NwZWVkOiBQSFkgYWR2ZXJ0aXNlcyAweCUwNHgsIGxwYSAweCUwNHguXG4iLAorCQkJCWRldi0+bmFtZSwgYWR2LCBscGEpOworCiAJcmV0dmFsID0gMTsKIAlpZiAobnAtPmdpZ2FiaXQgPT0gUEhZX0dJR0FCSVQpIHsKLQkJY29udHJvbF8xMDAwID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIE1JSV9SRUFEKTsKLQkJc3RhdHVzXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJXzEwMDBCVF9TUiwgTUlJX1JFQUQpOworCQljb250cm9sXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBNSUlfUkVBRCk7CisJCXN0YXR1c18xMDAwID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9TVEFUMTAwMCwgTUlJX1JFQUQpOwogCiAJCWlmICgoY29udHJvbF8xMDAwICYgQURWRVJUSVNFXzEwMDBGVUxMKSAmJgogCQkJKHN0YXR1c18xMDAwICYgTFBBXzEwMDBGVUxMKSkgewpAQCAtMTk2NywyNyArMjE5MywyMiBAQAogCQl9CiAJfQogCi0JYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKLQlscGEgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0xQQSwgTUlJX1JFQUQpOwotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3VwZGF0ZV9saW5rc3BlZWQ6IFBIWSBhZHZlcnRpc2VzIDB4JTA0eCwgbHBhIDB4JTA0eC5cbiIsCi0JCQkJZGV2LT5uYW1lLCBhZHYsIGxwYSk7Ci0KIAkvKiBGSVhNRTogaGFuZGxlIHBhcmFsbGVsIGRldGVjdGlvbiBwcm9wZXJseSAqLwotCWxwYSA9IGxwYSAmIGFkdjsKLQlpZiAobHBhICYgTFBBXzEwMEZVTEwpIHsKKwlhZHZfbHBhID0gbHBhICYgYWR2OworCWlmIChhZHZfbHBhICYgTFBBXzEwMEZVTEwpIHsKIAkJbmV3bHMgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZSRUdfTElOS1NQRUVEXzEwMDsKIAkJbmV3ZHVwID0gMTsKLQl9IGVsc2UgaWYgKGxwYSAmIExQQV8xMDBIQUxGKSB7CisJfSBlbHNlIGlmIChhZHZfbHBhICYgTFBBXzEwMEhBTEYpIHsKIAkJbmV3bHMgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZSRUdfTElOS1NQRUVEXzEwMDsKIAkJbmV3ZHVwID0gMDsKLQl9IGVsc2UgaWYgKGxwYSAmIExQQV8xMEZVTEwpIHsKKwl9IGVsc2UgaWYgKGFkdl9scGEgJiBMUEFfMTBGVUxMKSB7CiAJCW5ld2xzID0gTlZSRUdfTElOS1NQRUVEX0ZPUkNFfE5WUkVHX0xJTktTUEVFRF8xMDsKIAkJbmV3ZHVwID0gMTsKLQl9IGVsc2UgaWYgKGxwYSAmIExQQV8xMEhBTEYpIHsKKwl9IGVsc2UgaWYgKGFkdl9scGEgJiBMUEFfMTBIQUxGKSB7CiAJCW5ld2xzID0gTlZSRUdfTElOS1NQRUVEX0ZPUkNFfE5WUkVHX0xJTktTUEVFRF8xMDsKIAkJbmV3ZHVwID0gMDsKIAl9IGVsc2UgewotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiYWQgYWJpbGl0eSAlMDR4IC0gZmFsbGluZyBiYWNrIHRvIDEwSEQuXG4iLCBkZXYtPm5hbWUsIGxwYSk7CisJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJhZCBhYmlsaXR5ICUwNHggLSBmYWxsaW5nIGJhY2sgdG8gMTBIRC5cbiIsIGRldi0+bmFtZSwgYWR2X2xwYSk7CiAJCW5ld2xzID0gTlZSRUdfTElOS1NQRUVEX0ZPUkNFfE5WUkVHX0xJTktTUEVFRF8xMDsKIAkJbmV3ZHVwID0gMDsKIAl9CkBAIC0yMDMwLDYgKzIyNTEsNDYgQEAKIAl3cml0ZWwobnAtPmxpbmtzcGVlZCwgYmFzZSArIE52UmVnTGlua1NwZWVkKTsKIAlwY2lfcHVzaChiYXNlKTsKIAorCXBhdXNlX2ZsYWdzID0gMDsKKwkvKiBzZXR1cCBwYXVzZSBmcmFtZSAqLworCWlmIChucC0+ZHVwbGV4ICE9IDApIHsKKwkJaWYgKG5wLT5hdXRvbmVnICYmIG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfQVVUT05FRykgeworCQkJYWR2X3BhdXNlID0gYWR2ICYgKEFEVkVSVElTRV9QQVVTRV9DQVB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKTsKKwkJCWxwYV9wYXVzZSA9IGxwYSAmIChMUEFfUEFVU0VfQ0FQfCBMUEFfUEFVU0VfQVNZTSk7CisKKwkJCXN3aXRjaCAoYWR2X3BhdXNlKSB7CisJCQljYXNlIChBRFZFUlRJU0VfUEFVU0VfQ0FQKToKKwkJCQlpZiAobHBhX3BhdXNlICYgTFBBX1BBVVNFX0NBUCkgeworCQkJCQlwYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRTsKKwkJCQkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKQorCQkJCQkJcGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAoQURWRVJUSVNFX1BBVVNFX0FTWU0pOgorCQkJCWlmIChscGFfcGF1c2UgPT0gKExQQV9QQVVTRV9DQVB8IExQQV9QQVVTRV9BU1lNKSkKKwkJCQl7CisJCQkJCXBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgKEFEVkVSVElTRV9QQVVTRV9DQVB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKToKKwkJCQlpZiAobHBhX3BhdXNlICYgTFBBX1BBVVNFX0NBUCkKKwkJCQl7CisJCQkJCXBhdXNlX2ZsYWdzIHw9ICBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRTsKKwkJCQkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKQorCQkJCQkJcGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEU7CisJCQkJfQorCQkJCWlmIChscGFfcGF1c2UgPT0gTFBBX1BBVVNFX0FTWU0pCisJCQkJeworCQkJCQlwYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwYXVzZV9mbGFncyA9IG5wLT5wYXVzZV9mbGFnczsKKwkJfQorCX0KKwludl91cGRhdGVfcGF1c2UoZGV2LCBwYXVzZV9mbGFncyk7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMDkwLDcgKzIzNTEsNyBAQAogCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJbnZfdHhfZG9uZShkZXYpOwogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkKKwogCQludl9yeF9wcm9jZXNzKGRldik7CiAJCWlmIChudl9hbGxvY19yeChkZXYpKSB7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKQEAgLTIwOTgsNyArMjM1OSw3IEBACiAJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKIAkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCX0KLQkJCisKIAkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSB7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCW52X2xpbmtfaXJxKGRldik7CkBAIC0yMTYzLDcgKzI0MjQsNyBAQAogCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCW52X3R4X2RvbmUoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7Ci0JCQorCiAJCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1RYX0VSUikpIHsKIAkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKIAkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKQEAgLTIyMDYsNyArMjQ2Nyw3IEBACiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOwogCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCiAJCQlicmVhazsKLQkJCisKIAkJbnZfcnhfcHJvY2VzcyhkZXYpOwogCQlpZiAobnZfYWxsb2NfcngoZGV2KSkgewogCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwpAQCAtMjIxNCw3ICsyNDc1LDcgQEAKIAkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCX0KLQkJCisKIAkJaWYgKGkgPiBtYXhfaW50ZXJydXB0X3dvcmspIHsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCkBAIC0yMjUzLDcgKzI1MTQsNyBAQAogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQogCQkJYnJlYWs7Ci0JCQorCiAJCWlmIChldmVudHMgJiBOVlJFR19JUlFfTElOSykgewogCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKQEAgLTIyOTAsNiArMjU1MSwxNzUgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTChpKTsKIH0KIAorc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfdGVzdChpbnQgZm9vLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiBldmVudHM7CisKKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX3Rlc3RcbiIsIGRldi0+bmFtZSk7CisKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKKwkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKKwkJd3JpdGVsKE5WUkVHX0lSUV9USU1FUiwgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwl9IGVsc2UgeworCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKKwkJd3JpdGVsKE5WUkVHX0lSUV9USU1FUiwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJfQorCXBjaV9wdXNoKGJhc2UpOworCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOworCWlmICghKGV2ZW50cyAmIE5WUkVHX0lSUV9USU1FUikpCisJCXJldHVybiBJUlFfUkVUVkFMKDApOworCisJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJbnAtPmludHJfdGVzdCA9IDE7CisJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKworCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfdGVzdCBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKK30KKworc3RhdGljIHZvaWQgc2V0X21zaXhfdmVjdG9yX21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmVjdG9yLCB1MzIgaXJxbWFzaykKK3sKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCBpOworCXUzMiBtc2l4bWFwID0gMDsKKworCS8qIEVhY2ggaW50ZXJydXB0IGJpdCBjYW4gYmUgbWFwcGVkIHRvIGEgTVNJWCB2ZWN0b3IgKDQgYml0cykuCisJICogTVNJWE1hcDAgcmVwcmVzZW50cyB0aGUgZmlyc3QgOCBpbnRlcnJ1cHRzIGFuZCBNU0lYTWFwMSByZXByZXNlbnRzCisJICogdGhlIHJlbWFpbmluZyA4IGludGVycnVwdHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKGlycW1hc2sgPj4gaSkgJiAweDEpIHsKKwkJCW1zaXhtYXAgfD0gdmVjdG9yIDw8IChpIDw8IDIpOworCQl9CisJfQorCXdyaXRlbChyZWFkbChiYXNlICsgTnZSZWdNU0lYTWFwMCkgfCBtc2l4bWFwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7CisKKwltc2l4bWFwID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICgoaXJxbWFzayA+PiAoaSArIDgpKSAmIDB4MSkgeworCQkJbXNpeG1hcCB8PSB2ZWN0b3IgPDwgKGkgPDwgMik7CisJCX0KKwl9CisJd3JpdGVsKHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhNYXAxKSB8IG1zaXhtYXAsIGJhc2UgKyBOdlJlZ01TSVhNYXAxKTsKK30KKworc3RhdGljIGludCBudl9yZXF1ZXN0X2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW50cl90ZXN0KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCByZXQgPSAxOworCWludCBpOworCisJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSB7CisJCWZvciAoaSA9IDA7IGkgPCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSyk7IGkrKykgeworCQkJbnAtPm1zaV94X2VudHJ5W2ldLmVudHJ5ID0gaTsKKwkJfQorCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpeChucC0+cGNpX2RldiwgbnAtPm1zaV94X2VudHJ5LCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykpKSA9PSAwKSB7CisJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0VOQUJMRUQ7CisJCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCAmJiAhaW50cl90ZXN0KSB7CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4IGhhbmRsaW5nICovCisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7CisJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOworCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9lcnI7CisJCQkJfQorCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9uaWNfaXJxX3R4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4ICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZnJlZV9yeDsKKwkJCQl9CisJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5nICovCisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsKKwkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJCQkJCWdvdG8gb3V0X2ZyZWVfdHg7CisJCQkJfQorCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdmVjdG9yICovCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfUlgsIE5WUkVHX0lSUV9SWF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfVFgsIE5WUkVHX0lSUV9UWF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfT1RIRVIsIE5WUkVHX0lSUV9PVEhFUik7CisJCQl9IGVsc2UgeworCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBhbGwgaW50ZXJydXB0cyAqLworCQkJCWlmICgoIWludHJfdGVzdCAmJgorCQkJCSAgICAgcmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCQkgICAgKGludHJfdGVzdCAmJgorCQkJCSAgICAgcmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19pcnFfdGVzdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJCQkJCWdvdG8gb3V0X2VycjsKKwkJCQl9CisKKwkJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB2ZWN0b3IgMCAqLworCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7CisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAxKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAocmV0ICE9IDAgJiYgbnAtPm1zaV9mbGFncyAmIE5WX01TSV9DQVBBQkxFKSB7CisJCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2kobnAtPnBjaV9kZXYpKSA9PSAwKSB7CisJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9FTkFCTEVEOworCQkJaWYgKCghaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CisJCQkgICAgKGludHJfdGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycV90ZXN0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKKwkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKKwkJCQlnb3RvIG91dF9lcnI7CisJCQl9CisKKwkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHZlY3RvciAwICovCisJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJTWFwMCk7CisJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJTWFwMSk7CisJCQkvKiBlbmFibGUgbXNpIHZlY3RvciAwICovCisJCQl3cml0ZWwoTlZSRUdfTVNJX1ZFQ1RPUl8wX0VOQUJMRUQsIGJhc2UgKyBOdlJlZ01TSUlycU1hc2spOworCQl9CisJfQorCWlmIChyZXQgIT0gMCkgeworCQlpZiAoKCFpbnRyX3Rlc3QgJiYgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJICAgIChpbnRyX3Rlc3QgJiYgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnFfdGVzdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSkKKwkJCWdvdG8gb3V0X2VycjsKKworCX0KKworCXJldHVybiAwOworb3V0X2ZyZWVfdHg6CisJZnJlZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yLCBkZXYpOworb3V0X2ZyZWVfcng6CisJZnJlZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLCBkZXYpOworb3V0X2VycjoKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbnZfZnJlZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJaW50IGk7CisKKwlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7CisJCQlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbaV0udmVjdG9yLCBkZXYpOworCQl9CisJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOworCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCX0gZWxzZSB7CisJCWZyZWVfaXJxKG5wLT5wY2lfZGV2LT5pcnEsIGRldik7CisJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX0VOQUJMRUQpIHsKKwkJCXBjaV9kaXNhYmxlX21zaShucC0+cGNpX2Rldik7CisJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgbnZfZG9fbmljX3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKQEAgLTIzMjYsNyArMjc1Niw3IEBACiAJbnAtPm5pY19wb2xsX2lycSA9IDA7CiAKIAkvKiBGSVhNRTogRG8gd2UgbmVlZCBzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpIGhlcmU/ICovCi0JCisKIAl3cml0ZWwobWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CiAJcGNpX3B1c2goYmFzZSk7CiAKQEAgLTIzNTksNiArMjc4OSw1NiBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIG52X2RvX3N0YXRzX3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisKKwlucC0+ZXN0YXRzLnR4X2J5dGVzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4Q250KTsKKwlucC0+ZXN0YXRzLnR4X3plcm9fcmV4bXQgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhaZXJvUmVYbXQpOworCW5wLT5lc3RhdHMudHhfb25lX3JleG10ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4T25lUmVYbXQpOworCW5wLT5lc3RhdHMudHhfbWFueV9yZXhtdCArPSByZWFkbChiYXNlICsgTnZSZWdUeE1hbnlSZVhtdCk7CisJbnAtPmVzdGF0cy50eF9sYXRlX2NvbGxpc2lvbiArPSByZWFkbChiYXNlICsgTnZSZWdUeExhdGVDb2wpOworCW5wLT5lc3RhdHMudHhfZmlmb19lcnJvcnMgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhVbmRlcmZsb3cpOworCW5wLT5lc3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhMb3NzQ2Fycmllcik7CisJbnAtPmVzdGF0cy50eF9leGNlc3NfZGVmZXJyYWwgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhFeGNlc3NEZWYpOworCW5wLT5lc3RhdHMudHhfcmV0cnlfZXJyb3IgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhSZXRyeUVycik7CisJbnAtPmVzdGF0cy50eF9kZWZlcnJhbCArPSByZWFkbChiYXNlICsgTnZSZWdUeERlZik7CisJbnAtPmVzdGF0cy50eF9wYWNrZXRzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4RnJhbWUpOworCW5wLT5lc3RhdHMudHhfcGF1c2UgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhQYXVzZSk7CisJbnAtPmVzdGF0cy5yeF9mcmFtZV9lcnJvciArPSByZWFkbChiYXNlICsgTnZSZWdSeEZyYW1lRXJyKTsKKwlucC0+ZXN0YXRzLnJ4X2V4dHJhX2J5dGUgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhFeHRyYUJ5dGUpOworCW5wLT5lc3RhdHMucnhfbGF0ZV9jb2xsaXNpb24gKz0gcmVhZGwoYmFzZSArIE52UmVnUnhMYXRlQ29sKTsKKwlucC0+ZXN0YXRzLnJ4X3J1bnQgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhSdW50KTsKKwlucC0+ZXN0YXRzLnJ4X2ZyYW1lX3Rvb19sb25nICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVUb29Mb25nKTsKKwlucC0+ZXN0YXRzLnJ4X292ZXJfZXJyb3JzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4T3ZlcmZsb3cpOworCW5wLT5lc3RhdHMucnhfY3JjX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdSeEZDU0Vycik7CisJbnAtPmVzdGF0cy5yeF9mcmFtZV9hbGlnbl9lcnJvciArPSByZWFkbChiYXNlICsgTnZSZWdSeEZyYW1lQWxpZ25FcnIpOworCW5wLT5lc3RhdHMucnhfbGVuZ3RoX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4TGVuRXJyKTsKKwlucC0+ZXN0YXRzLnJ4X3VuaWNhc3QgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhVbmljYXN0KTsKKwlucC0+ZXN0YXRzLnJ4X211bHRpY2FzdCArPSByZWFkbChiYXNlICsgTnZSZWdSeE11bHRpY2FzdCk7CisJbnAtPmVzdGF0cy5yeF9icm9hZGNhc3QgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhCcm9hZGNhc3QpOworCW5wLT5lc3RhdHMucnhfYnl0ZXMgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhDbnQpOworCW5wLT5lc3RhdHMucnhfcGF1c2UgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhQYXVzZSk7CisJbnAtPmVzdGF0cy5yeF9kcm9wX2ZyYW1lICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RHJvcEZyYW1lKTsKKwlucC0+ZXN0YXRzLnJ4X3BhY2tldHMgPQorCQlucC0+ZXN0YXRzLnJ4X3VuaWNhc3QgKworCQlucC0+ZXN0YXRzLnJ4X211bHRpY2FzdCArCisJCW5wLT5lc3RhdHMucnhfYnJvYWRjYXN0OworCW5wLT5lc3RhdHMucnhfZXJyb3JzX3RvdGFsID0KKwkJbnAtPmVzdGF0cy5yeF9jcmNfZXJyb3JzICsKKwkJbnAtPmVzdGF0cy5yeF9vdmVyX2Vycm9ycyArCisJCW5wLT5lc3RhdHMucnhfZnJhbWVfZXJyb3IgKworCQkobnAtPmVzdGF0cy5yeF9mcmFtZV9hbGlnbl9lcnJvciAtIG5wLT5lc3RhdHMucnhfZXh0cmFfYnl0ZSkgKworCQlucC0+ZXN0YXRzLnJ4X2xhdGVfY29sbGlzaW9uICsKKwkJbnAtPmVzdGF0cy5yeF9ydW50ICsKKwkJbnAtPmVzdGF0cy5yeF9mcmFtZV90b29fbG9uZzsKKworCWlmICghbnAtPmluX3NodXRkb3duKQorCQltb2RfdGltZXIoJm5wLT5zdGF0c19wb2xsLCBqaWZmaWVzICsgU1RBVFNfSU5URVJWQUwpOworfQorCiBzdGF0aWMgdm9pZCBudl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yMzgyLDE3ICsyODYyLDE5IEBACiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiBmbGFncyA9IDA7CiAKLQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJaWYgKHdvbGluZm8tPndvbG9wdHMgPT0gMCkgewotCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOwogCQlucC0+d29sZW5hYmxlZCA9IDA7Ci0JfQotCWlmICh3b2xpbmZvLT53b2xvcHRzICYgV0FLRV9NQUdJQykgewotCQl3cml0ZWwoTlZSRUdfV0FLRVVQRkxBR1NfRU5BQkxFLCBiYXNlICsgTnZSZWdXYWtlVXBGbGFncyk7CisJfSBlbHNlIGlmICh3b2xpbmZvLT53b2xvcHRzICYgV0FLRV9NQUdJQykgewogCQlucC0+d29sZW5hYmxlZCA9IDE7CisJCWZsYWdzID0gTlZSRUdfV0FLRVVQRkxBR1NfRU5BQkxFOwogCX0KLQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJd3JpdGVsKGZsYWdzLCBiYXNlICsgTnZSZWdXYWtlVXBGbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQwNiw5ICsyODg4LDE3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJLyogV2UgZG8gbm90IHRyYWNrIGxpbmsgc3BlZWQgLyBkdXBsZXggc2V0dGluZyBpZiB0aGUKIAkJICogaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBGb3JjZSBhIGxpbmsgY2hlY2sgKi8KLQkJbnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpOworCQlpZiAobnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpKSB7CisJCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCX0gZWxzZSB7CisJCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCX0KIAl9Ci0Jc3dpdGNoKG5wLT5saW5rc3BlZWQgJiAoTlZSRUdfTElOS1NQRUVEX01BU0spKSB7CisKKwlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CisJCXN3aXRjaChucC0+bGlua3NwZWVkICYgKE5WUkVHX0xJTktTUEVFRF9NQVNLKSkgewogCQljYXNlIE5WUkVHX0xJTktTUEVFRF8xMDoKIAkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTA7CiAJCQlicmVhazsKQEAgLTI0MTgsMTAgKzI5MDgsMTQgQEAKIAkJY2FzZSBOVlJFR19MSU5LU1BFRURfMTAwMDoKIAkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKIAkJCWJyZWFrOworCQl9CisJCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOworCQlpZiAobnAtPmR1cGxleCkKKwkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0gZWxzZSB7CisJCWVjbWQtPnNwZWVkID0gLTE7CisJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KLQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQlpZiAobnAtPmR1cGxleCkKLQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAKIAllY21kLT5hdXRvbmVnID0gbnAtPmF1dG9uZWc7CiAKQEAgLTI0MjksMjMgKzI5MjMsMjAgQEAKIAlpZiAobnAtPmF1dG9uZWcpIHsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwogCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOwotCX0gZWxzZSB7Ci0JCWFkdiA9IG5wLT5maXhlZF9tb2RlOworCQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwSEFMRikKKwkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOworCQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwRlVMTCkKKwkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOworCQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwMEhBTEYpCisJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGY7CisJCWlmIChhZHYgJiBBRFZFUlRJU0VfMTAwRlVMTCkKKwkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwkJaWYgKG5wLT5naWdhYml0ID09IFBIWV9HSUdBQklUKSB7CisJCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBNSUlfUkVBRCk7CisJCQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwMDBGVUxMKQorCQkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisJCX0KIAl9Ci0JaWYgKGFkdiAmIEFEVkVSVElTRV8xMEhBTEYpCi0JCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOwotCWlmIChhZHYgJiBBRFZFUlRJU0VfMTBGVUxMKQotCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKLQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwMEhBTEYpCi0JCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKLQlpZiAoYWR2ICYgQURWRVJUSVNFXzEwMEZVTEwpCi0JCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKLQlpZiAobnAtPmF1dG9uZWcgJiYgbnAtPmdpZ2FiaXQgPT0gUEhZX0dJR0FCSVQpIHsKLQkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIE1JSV9SRUFEKTsKLQkJaWYgKGFkdiAmIEFEVkVSVElTRV8xMDAwRlVMTCkKLQkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7Ci0JfQotCiAJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF9BdXRvbmVnIHwKIAkJU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAogCQlTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKQEAgLTI0OTcsNyArMjk4OCwxOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW52X2Rpc2FibGVfaXJxKGRldik7CisJCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJLyogc3RvcCBlbmdpbmVzICovCisJCW52X3N0b3BfcngoZGV2KTsKKwkJbnZfc3RvcF90eChkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCX0KKwogCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCWludCBhZHYsIGJtY3I7CiAKQEAgLTI1MDUsNyArMzAwNyw3IEBACiAKIAkJLyogYWR2ZXJ0aXNlIG9ubHkgd2hhdCBoYXMgYmVlbiByZXF1ZXN0ZWQgKi8KIAkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKLQkJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCk7CisJCWFkdiAmPSB+KEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfMTAwQkFTRTQgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOwogCQlpZiAoZWNtZC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTBIQUxGOwogCQlpZiAoZWNtZC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkKQEAgLTI1MTQsMTYgKzMwMTYsMjIgQEAKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKIAkJaWYgKGVjbWQtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOworCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpICAvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNtZW50cyBidXQgZGlzYWJsZSB0eCBwYXVzZSAqLworCQkJYWR2IHw9ICBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU07CisJCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX1JFUSkKKwkJCWFkdiB8PSAgQURWRVJUSVNFX1BBVVNFX0FTWU07CiAJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBhZHYpOwogCiAJCWlmIChucC0+Z2lnYWJpdCA9PSBQSFlfR0lHQUJJVCkgewotCQkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIE1JSV9SRUFEKTsKKwkJCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKIAkJCWFkdiAmPSB+QURWRVJUSVNFXzEwMDBGVUxMOwogCQkJaWYgKGVjbWQtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKIAkJCQlhZHYgfD0gQURWRVJUSVNFXzEwMDBGVUxMOwotCQkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV8xMDAwQlRfQ1IsIGFkdik7CisJCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBhZHYpOwogCQl9CiAKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd24uXG4iLCBkZXYtPm5hbWUpOwogCQlibWNyID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CiAJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CiAJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CkBAIC0yNTM0LDcgKzMwNDIsNyBAQAogCQlucC0+YXV0b25lZyA9IDA7CiAKIAkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKLQkJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCk7CisJCWFkdiAmPSB+KEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfMTAwQkFTRTQgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOwogCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMEhBTEY7CiAJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMCAmJiBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCkBAIC0yNTQzLDMwICszMDUxLDQ5IEBACiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CiAJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOworCQlucC0+cGF1c2VfZmxhZ3MgJj0gfihOVl9QQVVTRUZSQU1FX0FVVE9ORUd8TlZfUEFVU0VGUkFNRV9SWF9FTkFCTEV8TlZfUEFVU0VGUkFNRV9UWF9FTkFCTEUpOworCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpIHsvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNtZW50cyBidXQgZGlzYWJsZSB0eCBwYXVzZSAqLworCQkJYWR2IHw9ICBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU07CisJCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9SWF9FTkFCTEU7CisJCX0KKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKSB7CisJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9BU1lNOworCQkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFOworCQl9CiAJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBhZHYpOwogCQlucC0+Zml4ZWRfbW9kZSA9IGFkdjsKIAogCQlpZiAobnAtPmdpZ2FiaXQgPT0gUEhZX0dJR0FCSVQpIHsKLQkJCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfMTAwMEJUX0NSLCBNSUlfUkVBRCk7CisJCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBNSUlfUkVBRCk7CiAJCQlhZHYgJj0gfkFEVkVSVElTRV8xMDAwRlVMTDsKLQkJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfMTAwMEJUX0NSLCBhZHYpOworCQkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9DVFJMMTAwMCwgYWR2KTsKIAkJfQogCiAJCWJtY3IgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKLQkJYm1jciB8PSB+KEJNQ1JfQU5FTkFCTEV8Qk1DUl9TUEVFRDEwMHxCTUNSX0ZVTExEUExYKTsKLQkJaWYgKGFkdiAmIChBRFZFUlRJU0VfMTBGVUxMfEFEVkVSVElTRV8xMDBGVUxMKSkKKwkJYm1jciAmPSB+KEJNQ1JfQU5FTkFCTEV8Qk1DUl9TUEVFRDEwMHxCTUNSX1NQRUVEMTAwMHxCTUNSX0ZVTExEUExYKTsKKwkJaWYgKG5wLT5maXhlZF9tb2RlICYgKEFEVkVSVElTRV8xMEZVTEx8QURWRVJUSVNFXzEwMEZVTEwpKQogCQkJYm1jciB8PSBCTUNSX0ZVTExEUExYOwotCQlpZiAoYWR2ICYgKEFEVkVSVElTRV8xMDBIQUxGfEFEVkVSVElTRV8xMDBGVUxMKSkKKwkJaWYgKG5wLT5maXhlZF9tb2RlICYgKEFEVkVSVElTRV8xMDBIQUxGfEFEVkVSVElTRV8xMDBGVUxMKSkKIAkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDsKIAkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBibWNyKTsKLQotCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWlmIChucC0+cGh5X291aSA9PSBQSFlfT1VJX01BUlZFTEwpIHsKKwkJCS8qIHJlc2V0IHRoZSBwaHkgKi8KKwkJCWlmIChwaHlfcmVzZXQoZGV2KSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJLyogV2FpdCBhIGJpdCBhbmQgdGhlbiByZWNvbmZpZ3VyZSB0aGUgbmljLiAqLwogCQkJdWRlbGF5KDEwKTsKIAkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbnZfc3RhcnRfcngoZGV2KTsKKwkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJbnZfZW5hYmxlX2lycShkZXYpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjU5OCwyMyArMzEyNSw2ODUgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJaWYgKG5wLT5hdXRvbmVnKSB7CiAJCWludCBibWNyOwogCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCW52X2Rpc2FibGVfaXJxKGRldik7CisJCQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJLyogc3RvcCBlbmdpbmVzICovCisJCQludl9zdG9wX3J4KGRldik7CisJCQludl9zdG9wX3R4KGRldik7CisJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd24uXG4iLCBkZXYtPm5hbWUpOworCQl9CisKIAkJYm1jciA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOwogCQlibWNyIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwogCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIGJtY3IpOwogCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCW52X3N0YXJ0X3J4KGRldik7CisJCQludl9zdGFydF90eChkZXYpOworCQkJbnZfZW5hYmxlX2lycShkZXYpOworCQl9CiAJCXJldCA9IDA7CiAJfSBlbHNlIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG52X3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pKQorCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgdmFsdWUpOworCWVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgdm9pZCBudl9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSogcmluZykKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpID8gUklOR19NQVhfREVTQ19WRVJfMSA6IFJJTkdfTUFYX0RFU0NfVkVSXzJfMzsKKwlyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+dHhfbWF4X3BlbmRpbmcgPSAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpID8gUklOR19NQVhfREVTQ19WRVJfMSA6IFJJTkdfTUFYX0RFU0NfVkVSXzJfMzsKKworCXJpbmctPnJ4X3BlbmRpbmcgPSBucC0+cnhfcmluZ19zaXplOworCXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7CisJcmluZy0+dHhfcGVuZGluZyA9IG5wLT50eF9yaW5nX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgbnZfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0qIHJpbmcpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXU4ICpyeHR4X3JpbmcsICpyeF9za2J1ZmYsICp0eF9za2J1ZmYsICpyeF9kbWEsICp0eF9kbWEsICp0eF9kbWFfbGVuOworCWRtYV9hZGRyX3QgcmluZ19hZGRyOworCisJaWYgKHJpbmctPnJ4X3BlbmRpbmcgPCBSWF9SSU5HX01JTiB8fAorCSAgICByaW5nLT50eF9wZW5kaW5nIDwgVFhfUklOR19NSU4gfHwKKwkgICAgcmluZy0+cnhfbWluaV9wZW5kaW5nICE9IDAgfHwKKwkgICAgcmluZy0+cnhfanVtYm9fcGVuZGluZyAhPSAwIHx8CisJICAgIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSAmJgorCSAgICAgKHJpbmctPnJ4X3BlbmRpbmcgPiBSSU5HX01BWF9ERVNDX1ZFUl8xIHx8CisJICAgICAgcmluZy0+dHhfcGVuZGluZyA+IFJJTkdfTUFYX0RFU0NfVkVSXzEpKSB8fAorCSAgICAobnAtPmRlc2NfdmVyICE9IERFU0NfVkVSXzEgJiYKKwkgICAgIChyaW5nLT5yeF9wZW5kaW5nID4gUklOR19NQVhfREVTQ19WRVJfMl8zIHx8CisJICAgICAgcmluZy0+dHhfcGVuZGluZyA+IFJJTkdfTUFYX0RFU0NfVkVSXzJfMykpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFsbG9jYXRlIG5ldyByaW5ncyAqLworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQlyeHR4X3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChucC0+cGNpX2RldiwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSAqIChyaW5nLT5yeF9wZW5kaW5nICsgcmluZy0+dHhfcGVuZGluZyksCisJCQkJCSAgICAmcmluZ19hZGRyKTsKKwl9IGVsc2UgeworCQlyeHR4X3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChucC0+cGNpX2RldiwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChyaW5nLT5yeF9wZW5kaW5nICsgcmluZy0+dHhfcGVuZGluZyksCisJCQkJCSAgICAmcmluZ19hZGRyKTsKKwl9CisJcnhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYqKSAqIHJpbmctPnJ4X3BlbmRpbmcsIEdGUF9LRVJORUwpOworCXJ4X2RtYSA9IGttYWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICogcmluZy0+cnhfcGVuZGluZywgR0ZQX0tFUk5FTCk7CisJdHhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYqKSAqIHJpbmctPnR4X3BlbmRpbmcsIEdGUF9LRVJORUwpOworCXR4X2RtYSA9IGttYWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICogcmluZy0+dHhfcGVuZGluZywgR0ZQX0tFUk5FTCk7CisJdHhfZG1hX2xlbiA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiByaW5nLT50eF9wZW5kaW5nLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4dHhfcmluZyB8fCAhcnhfc2tidWZmIHx8ICFyeF9kbWEgfHwgIXR4X3NrYnVmZiB8fCAhdHhfZG1hIHx8ICF0eF9kbWFfbGVuKSB7CisJCS8qIGZhbGwgYmFjayB0byBvbGQgcmluZ3MgKi8KKwkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJCQlpZihyeHR4X3JpbmcpCisJCQkJcGNpX2ZyZWVfY29uc2lzdGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpICogKHJpbmctPnJ4X3BlbmRpbmcgKyByaW5nLT50eF9wZW5kaW5nKSwKKwkJCQkJCSAgICByeHR4X3JpbmcsIHJpbmdfYWRkcik7CisJCX0gZWxzZSB7CisJCQlpZiAocnh0eF9yaW5nKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChyaW5nLT5yeF9wZW5kaW5nICsgcmluZy0+dHhfcGVuZGluZyksCisJCQkJCQkgICAgcnh0eF9yaW5nLCByaW5nX2FkZHIpOworCQl9CisJCWlmIChyeF9za2J1ZmYpCisJCQlrZnJlZShyeF9za2J1ZmYpOworCQlpZiAocnhfZG1hKQorCQkJa2ZyZWUocnhfZG1hKTsKKwkJaWYgKHR4X3NrYnVmZikKKwkJCWtmcmVlKHR4X3NrYnVmZik7CisJCWlmICh0eF9kbWEpCisJCQlrZnJlZSh0eF9kbWEpOworCQlpZiAodHhfZG1hX2xlbikKKwkJCWtmcmVlKHR4X2RtYV9sZW4pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQludl9kaXNhYmxlX2lycShkZXYpOworCQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCS8qIHN0b3AgZW5naW5lcyAqLworCQludl9zdG9wX3J4KGRldik7CisJCW52X3N0b3BfdHgoZGV2KTsKKwkJbnZfdHhyeF9yZXNldChkZXYpOworCQkvKiBkcmFpbiBxdWV1ZXMgKi8KKwkJbnZfZHJhaW5fcngoZGV2KTsKKwkJbnZfZHJhaW5fdHgoZGV2KTsKKwkJLyogZGVsZXRlIHF1ZXVlcyAqLworCQlmcmVlX3JpbmdzKGRldik7CisJfQorCisJLyogc2V0IG5ldyB2YWx1ZXMgKi8KKwlucC0+cnhfcmluZ19zaXplID0gcmluZy0+cnhfcGVuZGluZzsKKwlucC0+dHhfcmluZ19zaXplID0gcmluZy0+dHhfcGVuZGluZzsKKwlucC0+dHhfbGltaXRfc3RvcCA9IHJpbmctPnR4X3BlbmRpbmcgLSBUWF9MSU1JVF9ESUZGRVJFTkNFOworCW5wLT50eF9saW1pdF9zdGFydCA9IHJpbmctPnR4X3BlbmRpbmcgLSBUWF9MSU1JVF9ESUZGRVJFTkNFIC0gMTsKKwlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwkJbnAtPnJ4X3Jpbmcub3JpZyA9IChzdHJ1Y3QgcmluZ19kZXNjKilyeHR4X3Jpbmc7CisJCW5wLT50eF9yaW5nLm9yaWcgPSAmbnAtPnJ4X3Jpbmcub3JpZ1tucC0+cnhfcmluZ19zaXplXTsKKwl9IGVsc2UgeworCQlucC0+cnhfcmluZy5leCA9IChzdHJ1Y3QgcmluZ19kZXNjX2V4KilyeHR4X3Jpbmc7CisJCW5wLT50eF9yaW5nLmV4ID0gJm5wLT5yeF9yaW5nLmV4W25wLT5yeF9yaW5nX3NpemVdOworCX0KKwlucC0+cnhfc2tidWZmID0gKHN0cnVjdCBza19idWZmKiopcnhfc2tidWZmOworCW5wLT5yeF9kbWEgPSAoZG1hX2FkZHJfdCopcnhfZG1hOworCW5wLT50eF9za2J1ZmYgPSAoc3RydWN0IHNrX2J1ZmYqKil0eF9za2J1ZmY7CisJbnAtPnR4X2RtYSA9IChkbWFfYWRkcl90Kil0eF9kbWE7CisJbnAtPnR4X2RtYV9sZW4gPSAodW5zaWduZWQgaW50Kil0eF9kbWFfbGVuOworCW5wLT5yaW5nX2FkZHIgPSByaW5nX2FkZHI7CisKKwltZW1zZXQobnAtPnJ4X3NrYnVmZiwgMCwgc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+cnhfcmluZ19zaXplKTsKKwltZW1zZXQobnAtPnJ4X2RtYSwgMCwgc2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnJ4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT50eF9za2J1ZmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogbnAtPnR4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT50eF9kbWEsIDAsIHNpemVvZihkbWFfYWRkcl90KSAqIG5wLT50eF9yaW5nX3NpemUpOworCW1lbXNldChucC0+dHhfZG1hX2xlbiwgMCwgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBucC0+dHhfcmluZ19zaXplKTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJLyogcmVpbml0IGRyaXZlciB2aWV3IG9mIHRoZSBxdWV1ZXMgKi8KKwkJc2V0X2J1ZnNpemUoZGV2KTsKKwkJaWYgKG52X2luaXRfcmluZyhkZXYpKSB7CisJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKKwkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOworCQl9CisKKwkJLyogcmVpbml0IG5pYyB2aWV3IG9mIHRoZSBxdWV1ZXMgKi8KKwkJd3JpdGVsKG5wLT5yeF9idWZfc3osIGJhc2UgKyBOdlJlZ09mZmxvYWRDb25maWcpOworCQlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKKwkJd3JpdGVsKCAoKG5wLT5yeF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwkJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CisJCXBjaV9wdXNoKGJhc2UpOworCQl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOworCQlwY2lfcHVzaChiYXNlKTsKKworCQkvKiByZXN0YXJ0IGVuZ2luZXMgKi8KKwkJbnZfc3RhcnRfcngoZGV2KTsKKwkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwkJbnZfZW5hYmxlX2lycShkZXYpOworCX0KKwlyZXR1cm4gMDsKK2V4aXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIG52X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0qIHBhdXNlKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlwYXVzZS0+YXV0b25lZyA9IChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX0FVVE9ORUcpICE9IDA7CisJcGF1c2UtPnJ4X3BhdXNlID0gKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFKSAhPSAwOworCXBhdXNlLT50eF9wYXVzZSA9IChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRSkgIT0gMDsKK30KKworc3RhdGljIGludCBudl9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtKiBwYXVzZSkKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBhZHYsIGJtY3I7CisKKwlpZiAoKCFucC0+YXV0b25lZyAmJiBucC0+ZHVwbGV4ID09IDApIHx8CisJICAgIChucC0+YXV0b25lZyAmJiAhcGF1c2UtPmF1dG9uZWcgJiYgbnAtPmR1cGxleCA9PSAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuIG5vdCBzZXQgcGF1c2Ugc2V0dGluZ3Mgd2hlbiBmb3JjZWQgbGluayBpcyBpbiBoYWxmIGR1cGxleC5cbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHBhdXNlLT50eF9wYXVzZSAmJiAhKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfQ0FQQUJMRSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdHggcGF1c2UgZnJhbWVzLlxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW52X2Rpc2FibGVfaXJxKGRldik7CisJCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJLyogc3RvcCBlbmdpbmVzICovCisJCW52X3N0b3BfcngoZGV2KTsKKwkJbnZfc3RvcF90eChkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCX0KKworCW5wLT5wYXVzZV9mbGFncyAmPSB+KE5WX1BBVVNFRlJBTUVfUlhfUkVRfE5WX1BBVVNFRlJBTUVfVFhfUkVRKTsKKwlpZiAocGF1c2UtPnJ4X3BhdXNlKQorCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9SWF9SRVE7CisJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhfUkVROworCisJaWYgKG5wLT5hdXRvbmVnICYmIHBhdXNlLT5hdXRvbmVnKSB7CisJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX0FVVE9ORUc7CisKKwkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKKwkJYWR2ICY9IH4oQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKTsKKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSAvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNtZW50cyBidXQgZGlzYWJsZSB0eCBwYXVzZSAqLworCQkJYWR2IHw9ICBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU07CisJCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX1JFUSkKKwkJCWFkdiB8PSAgQURWRVJUSVNFX1BBVVNFX0FTWU07CisJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBhZHYpOworCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBkb3duLlxuIiwgZGV2LT5uYW1lKTsKKwkJYm1jciA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOworCQlibWNyIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIGJtY3IpOworCX0gZWxzZSB7CisJCW5wLT5wYXVzZV9mbGFncyAmPSB+KE5WX1BBVVNFRlJBTUVfQVVUT05FR3xOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRXxOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRSk7CisJCWlmIChwYXVzZS0+cnhfcGF1c2UpCisJCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9SWF9FTkFCTEU7CisJCWlmIChwYXVzZS0+dHhfcGF1c2UpCisJCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9FTkFCTEU7CisKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCQludl91cGRhdGVfbGlua3NwZWVkKGRldik7CisJCWVsc2UKKwkJCW52X3VwZGF0ZV9wYXVzZShkZXYsIG5wLT5wYXVzZV9mbGFncyk7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQludl9zdGFydF9yeChkZXYpOworCQludl9zdGFydF90eChkZXYpOworCQludl9lbmFibGVfaXJxKGRldik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIG52X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gKG5wLT50eHJ4Y3RsX2JpdHMgJiBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0spICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgbnZfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCByZXRjb2RlID0gMDsKKworCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSB7CisKKwkJaWYgKCgobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExfUlhDSEVDSykgJiYgZGF0YSkgfHwKKwkJICAgICghKG5wLT50eHJ4Y3RsX2JpdHMgJiBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0spICYmICFkYXRhKSkgeworCQkJLyogYWxyZWFkeSBzZXQgb3IgdW5zZXQgKi8KKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGRhdGEpIHsKKwkJCW5wLT50eHJ4Y3RsX2JpdHMgfD0gTlZSRUdfVFhSWENUTF9SWENIRUNLOworCQl9IGVsc2UgaWYgKCEobnAtPnZsYW5jdGxfYml0cyAmIE5WUkVHX1ZMQU5DT05UUk9MX0VOQUJMRSkpIHsKKwkJCW5wLT50eHJ4Y3RsX2JpdHMgJj0gfk5WUkVHX1RYUlhDVExfUlhDSEVDSzsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkNhbiBub3QgZGlzYWJsZSByeCBjaGVja3N1bSBpZiB2bGFuIGlzIGVuYWJsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisJCQl3cml0ZWwobnAtPnR4cnhjdGxfYml0cywgYmFzZSArIE52UmVnVHhSeENvbnRyb2wpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0Y29kZTsKK30KKworc3RhdGljIGludCBudl9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pCisJCXJldHVybiBldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgbnZfc2V0X3NnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3NnKGRldiwgZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgbnZfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1MpCisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBudl9ldGh0b29sX3N0YXRzKS9zaXplb2YodTY0KSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbnZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfc3RhdHMgKmVzdGF0cywgdTY0ICpidWZmZXIpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIHVwZGF0ZSBzdGF0cyAqLworCW52X2RvX3N0YXRzX3BvbGwoKHVuc2lnbmVkIGxvbmcpZGV2KTsKKworCW1lbWNweShidWZmZXIsICZucC0+ZXN0YXRzLCBudl9nZXRfc3RhdHNfY291bnQoZGV2KSpzaXplb2YodTY0KSk7Cit9CisKK3N0YXRpYyBpbnQgbnZfc2VsZl90ZXN0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1RFU1RfRVhURU5ERUQpCisJCXJldHVybiBOVl9URVNUX0NPVU5UX0VYVEVOREVEOworCWVsc2UKKwkJcmV0dXJuIE5WX1RFU1RfQ09VTlRfQkFTRTsKK30KKworc3RhdGljIGludCBudl9saW5rX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBtaWlfc3RhdHVzOworCisJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTVNSLCBNSUlfUkVBRCk7CisJbWlpX3N0YXR1cyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1TUiwgTUlJX1JFQUQpOworCisJLyogY2hlY2sgcGh5IGxpbmsgc3RhdHVzICovCisJaWYgKCEobWlpX3N0YXR1cyAmIEJNU1JfTFNUQVRVUykpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbnZfcmVnaXN0ZXJfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJaW50IGkgPSAwOworCXUzMiBvcmlnX3JlYWQsIG5ld19yZWFkOworCisJZG8geworCQlvcmlnX3JlYWQgPSByZWFkbChiYXNlICsgbnZfcmVnaXN0ZXJzX3Rlc3RbaV0ucmVnKTsKKworCQkvKiB4b3Igd2l0aCBtYXNrIHRvIHRvZ2dsZSBiaXRzICovCisJCW9yaWdfcmVhZCBePSBudl9yZWdpc3RlcnNfdGVzdFtpXS5tYXNrOworCisJCXdyaXRlbChvcmlnX3JlYWQsIGJhc2UgKyBudl9yZWdpc3RlcnNfdGVzdFtpXS5yZWcpOworCisJCW5ld19yZWFkID0gcmVhZGwoYmFzZSArIG52X3JlZ2lzdGVyc190ZXN0W2ldLnJlZyk7CisKKwkJaWYgKChuZXdfcmVhZCAmIG52X3JlZ2lzdGVyc190ZXN0W2ldLm1hc2spICE9IChvcmlnX3JlYWQgJiBudl9yZWdpc3RlcnNfdGVzdFtpXS5tYXNrKSkKKwkJCXJldHVybiAwOworCisJCS8qIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWUgKi8KKwkJb3JpZ19yZWFkIF49IG52X3JlZ2lzdGVyc190ZXN0W2ldLm1hc2s7CisJCXdyaXRlbChvcmlnX3JlYWQsIGJhc2UgKyBudl9yZWdpc3RlcnNfdGVzdFtpXS5yZWcpOworCisJfSB3aGlsZSAobnZfcmVnaXN0ZXJzX3Rlc3RbKytpXS5yZWcgIT0gMCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBudl9pbnRlcnJ1cHRfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwlpbnQgcmV0ID0gMTsKKwlpbnQgdGVzdGNudDsKKwl1MzIgc2F2ZV9tc2lfZmxhZ3MsIHNhdmVfcG9sbF9pbnRlcnZhbCA9IDA7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCS8qIGZyZWUgY3VycmVudCBpcnEgKi8KKwkJbnZfZnJlZV9pcnEoZGV2KTsKKwkJc2F2ZV9wb2xsX2ludGVydmFsID0gcmVhZGwoYmFzZStOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CisJfQorCisJLyogZmxhZyB0byB0ZXN0IGludGVycnVwdCBoYW5kbGVyICovCisJbnAtPmludHJfdGVzdCA9IDA7CisKKwkvKiBzZXR1cCB0ZXN0IGlycSAqLworCXNhdmVfbXNpX2ZsYWdzID0gbnAtPm1zaV9mbGFnczsKKwlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9WRUNUT1JTX01BU0s7CisJbnAtPm1zaV9mbGFncyB8PSAweDAwMTsgLyogc2V0dXAgMSB2ZWN0b3IgKi8KKwlpZiAobnZfcmVxdWVzdF9pcnEoZGV2LCAxKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBzZXR1cCB0aW1lciBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoTlZSRUdfUE9MTF9ERUZBVUxUX0NQVSwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKKwl3cml0ZWwoTlZSRUdfVU5LU0VUVVA2X1ZBTCwgYmFzZSArIE52UmVnVW5rbm93blNldHVwUmVnNik7CisKKwludl9lbmFibGVfaHdfaW50ZXJydXB0cyhkZXYsIE5WUkVHX0lSUV9USU1FUik7CisKKwkvKiB3YWl0IGZvciBhdCBsZWFzdCBvbmUgaW50ZXJydXB0ICovCisJbXNsZWVwKDEwMCk7CisKKwlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisKKwkvKiBmbGFnIHNob3VsZCBiZSBzZXQgd2l0aGluIElTUiAqLworCXRlc3RjbnQgPSBucC0+aW50cl90ZXN0OworCWlmICghdGVzdGNudCkKKwkJcmV0ID0gMjsKKworCW52X2Rpc2FibGVfaHdfaW50ZXJydXB0cyhkZXYsIE5WUkVHX0lSUV9USU1FUik7CisJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQorCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCWVsc2UKKwkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisKKwlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKworCW52X2ZyZWVfaXJxKGRldik7CisKKwlucC0+bXNpX2ZsYWdzID0gc2F2ZV9tc2lfZmxhZ3M7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXdyaXRlbChzYXZlX3BvbGxfaW50ZXJ2YWwsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CisJCXdyaXRlbChOVlJFR19VTktTRVRVUDZfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWc2KTsKKwkJLyogcmVzdG9yZSBvcmlnaW5hbCBpcnEgKi8KKwkJaWYgKG52X3JlcXVlc3RfaXJxKGRldiwgMCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG52X2xvb3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYiwgKnJ4X3NrYjsKKwlkbWFfYWRkcl90IHRlc3RfZG1hX2FkZHI7CisJdTMyIHR4X2ZsYWdzX2V4dHJhID0gKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xID8gTlZfVFhfTEFTVFBBQ0tFVCA6IE5WX1RYMl9MQVNUUEFDS0VUKTsKKwl1MzIgRmxhZ3M7CisJaW50IGxlbiwgaSwgcGt0X2xlbjsKKwl1OCAqcGt0X2RhdGE7CisJdTMyIGZpbHRlcl9mbGFncyA9IDA7CisJdTMyIG1pc2MxX2ZsYWdzID0gMDsKKwlpbnQgcmV0ID0gMTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbnZfZGlzYWJsZV9pcnEoZGV2KTsKKwkJZmlsdGVyX2ZsYWdzID0gcmVhZGwoYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpOworCQltaXNjMV9mbGFncyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01pc2MxKTsKKwl9IGVsc2UgeworCQludl90eHJ4X3Jlc2V0KGRldik7CisJfQorCisJLyogcmVpbml0IGRyaXZlciB2aWV3IG9mIHRoZSByeCBxdWV1ZSAqLworCXNldF9idWZzaXplKGRldik7CisJbnZfaW5pdF9yaW5nKGRldik7CisKKwkvKiBzZXR1cCBoYXJkd2FyZSBmb3IgbG9vcGJhY2sgKi8KKwl3cml0ZWwoTlZSRUdfTUlTQzFfRk9SQ0UsIGJhc2UgKyBOdlJlZ01pc2MxKTsKKwl3cml0ZWwoTlZSRUdfUEZGX0FMV0FZUyB8IE5WUkVHX1BGRl9MT09QQkFDSywgYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpOworCisJLyogcmVpbml0IG5pYyB2aWV3IG9mIHRoZSByeCBxdWV1ZSAqLworCXdyaXRlbChucC0+cnhfYnVmX3N6LCBiYXNlICsgTnZSZWdPZmZsb2FkQ29uZmlnKTsKKwlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKKwl3cml0ZWwoICgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAorCQliYXNlICsgTnZSZWdSaW5nU2l6ZXMpOworCXBjaV9wdXNoKGJhc2UpOworCisJLyogcmVzdGFydCByeCBlbmdpbmUgKi8KKwludl9zdGFydF9yeChkZXYpOworCW52X3N0YXJ0X3R4KGRldik7CisKKwkvKiBzZXR1cCBwYWNrZXQgZm9yIHR4ICovCisJcGt0X2xlbiA9IEVUSF9EQVRBX0xFTjsKKwl0eF9za2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pOworCXBrdF9kYXRhID0gc2tiX3B1dCh0eF9za2IsIHBrdF9sZW4pOworCWZvciAoaSA9IDA7IGkgPCBwa3RfbGVuOyBpKyspCisJCXBrdF9kYXRhW2ldID0gKHU4KShpICYgMHhmZik7CisJdGVzdF9kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKG5wLT5wY2lfZGV2LCB0eF9za2ItPmRhdGEsCisJCQkJICAgICAgIHR4X3NrYi0+ZW5kLXR4X3NrYi0+ZGF0YSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQlucC0+dHhfcmluZy5vcmlnWzBdLlBhY2tldEJ1ZmZlciA9IGNwdV90b19sZTMyKHRlc3RfZG1hX2FkZHIpOworCQlucC0+dHhfcmluZy5vcmlnWzBdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMigocGt0X2xlbi0xKSB8IG5wLT50eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKKwl9IGVsc2UgeworCQlucC0+dHhfcmluZy5leFswXS5QYWNrZXRCdWZmZXJIaWdoID0gY3B1X3RvX2xlNjQodGVzdF9kbWFfYWRkcikgPj4gMzI7CisJCW5wLT50eF9yaW5nLmV4WzBdLlBhY2tldEJ1ZmZlckxvdyA9IGNwdV90b19sZTY0KHRlc3RfZG1hX2FkZHIpICYgMHgwRkZGRkZGRkY7CisJCW5wLT50eF9yaW5nLmV4WzBdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMigocGt0X2xlbi0xKSB8IG5wLT50eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKKwl9CisJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKKwlwY2lfcHVzaChnZXRfaHdiYXNlKGRldikpOworCisJbXNsZWVwKDUwMCk7CisKKwkvKiBjaGVjayBmb3Igcnggb2YgdGhlIHBhY2tldCAqLworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQlGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5yeF9yaW5nLm9yaWdbMF0uRmxhZ0xlbik7CisJCWxlbiA9IG52X2Rlc2NyX2dldGxlbmd0aCgmbnAtPnJ4X3Jpbmcub3JpZ1swXSwgbnAtPmRlc2NfdmVyKTsKKworCX0gZWxzZSB7CisJCUZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbMF0uRmxhZ0xlbik7CisJCWxlbiA9IG52X2Rlc2NyX2dldGxlbmd0aF9leCgmbnAtPnJ4X3JpbmcuZXhbMF0sIG5wLT5kZXNjX3Zlcik7CisJfQorCisJaWYgKEZsYWdzICYgTlZfUlhfQVZBSUwpIHsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xKSB7CisJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SKQorCQkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1IpIHsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlpZiAocmV0KSB7CisJCWlmIChsZW4gIT0gcGt0X2xlbikgeworCQkJcmV0ID0gMDsKKwkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxvb3BiYWNrIGxlbiBtaXNtYXRjaCAlZCB2cyAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIGxlbiwgcGt0X2xlbik7CisJCX0gZWxzZSB7CisJCQlyeF9za2IgPSBucC0+cnhfc2tidWZmWzBdOworCQkJZm9yIChpID0gMDsgaSA8IHBrdF9sZW47IGkrKykgeworCQkJCWlmIChyeF9za2ItPmRhdGFbaV0gIT0gKHU4KShpICYgMHhmZikpIHsKKwkJCQkJcmV0ID0gMDsKKwkJCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbG9vcGJhY2sgcGF0dGVybiBjaGVjayBmYWlsZWQgb24gYnl0ZSAlZFxuIiwKKwkJCQkJCWRldi0+bmFtZSwgaSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxvb3BiYWNrIC0gZGlkIG5vdCByZWNlaXZlIHRlc3QgcGFja2V0XG4iLCBkZXYtPm5hbWUpOworCX0KKworCXBjaV91bm1hcF9wYWdlKG5wLT5wY2lfZGV2LCB0ZXN0X2RtYV9hZGRyLAorCQkgICAgICAgdHhfc2tiLT5lbmQtdHhfc2tiLT5kYXRhLAorCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJZGV2X2tmcmVlX3NrYl9hbnkodHhfc2tiKTsKKworCS8qIHN0b3AgZW5naW5lcyAqLworCW52X3N0b3BfcngoZGV2KTsKKwludl9zdG9wX3R4KGRldik7CisJbnZfdHhyeF9yZXNldChkZXYpOworCS8qIGRyYWluIHJ4IHF1ZXVlICovCisJbnZfZHJhaW5fcngoZGV2KTsKKwludl9kcmFpbl90eChkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQl3cml0ZWwobWlzYzFfZmxhZ3MsIGJhc2UgKyBOdlJlZ01pc2MxKTsKKwkJd3JpdGVsKGZpbHRlcl9mbGFncywgYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpOworCQludl9lbmFibGVfaXJxKGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbnZfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqYnVmZmVyKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwlpbnQgcmVzdWx0OworCW1lbXNldChidWZmZXIsIDAsIG52X3NlbGZfdGVzdF9jb3VudChkZXYpKnNpemVvZih1NjQpKTsKKworCWlmICghbnZfbGlua190ZXN0KGRldikpIHsKKwkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQlidWZmZXJbMF0gPSAxOworCX0KKworCWlmICh0ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisJCQludl9kaXNhYmxlX2h3X2ludGVycnVwdHMoZGV2LCBucC0+aXJxbWFzayk7CisJCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpIHsKKwkJCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOworCQkJfSBlbHNlIHsKKwkJCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKKwkJCX0KKwkJCS8qIHN0b3AgZW5naW5lcyAqLworCQkJbnZfc3RvcF9yeChkZXYpOworCQkJbnZfc3RvcF90eChkZXYpOworCQkJbnZfdHhyeF9yZXNldChkZXYpOworCQkJLyogZHJhaW4gcnggcXVldWUgKi8KKwkJCW52X2RyYWluX3J4KGRldik7CisJCQludl9kcmFpbl90eChkZXYpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQl9CisKKwkJaWYgKCFudl9yZWdpc3Rlcl90ZXN0KGRldikpIHsKKwkJCXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJCWJ1ZmZlclsxXSA9IDE7CisJCX0KKworCQlyZXN1bHQgPSBudl9pbnRlcnJ1cHRfdGVzdChkZXYpOworCQlpZiAocmVzdWx0ICE9IDEpIHsKKwkJCXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJCWJ1ZmZlclsyXSA9IDE7CisJCX0KKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkvKiBiYWlsIG91dCAqLworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCFudl9sb29wYmFja190ZXN0KGRldikpIHsKKwkJCXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJCWJ1ZmZlclszXSA9IDE7CisJCX0KKworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQkvKiByZWluaXQgZHJpdmVyIHZpZXcgb2YgdGhlIHJ4IHF1ZXVlICovCisJCQlzZXRfYnVmc2l6ZShkZXYpOworCQkJaWYgKG52X2luaXRfcmluZyhkZXYpKSB7CisJCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCisJCQkJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CisJCQl9CisJCQkvKiByZWluaXQgbmljIHZpZXcgb2YgdGhlIHJ4IHF1ZXVlICovCisJCQl3cml0ZWwobnAtPnJ4X2J1Zl9zeiwgYmFzZSArIE52UmVnT2ZmbG9hZENvbmZpZyk7CisJCQlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKKwkJCXdyaXRlbCggKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCisJCQkJYmFzZSArIE52UmVnUmluZ1NpemVzKTsKKwkJCXBjaV9wdXNoKGJhc2UpOworCQkJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKKwkJCXBjaV9wdXNoKGJhc2UpOworCQkJLyogcmVzdGFydCByeCBlbmdpbmUgKi8KKwkJCW52X3N0YXJ0X3J4KGRldik7CisJCQludl9zdGFydF90eChkZXYpOworCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJCW52X2VuYWJsZV9od19pbnRlcnJ1cHRzKGRldiwgbnAtPmlycW1hc2spOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBudl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqYnVmZmVyKQoreworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCW1lbWNweShidWZmZXIsICZudl9lc3RhdHNfc3RyLCBudl9nZXRfc3RhdHNfY291bnQoZGV2KSpzaXplb2Yoc3RydWN0IG52X2V0aHRvb2xfc3RyKSk7CisJCWJyZWFrOworCWNhc2UgRVRIX1NTX1RFU1Q6CisJCW1lbWNweShidWZmZXIsICZudl9ldGVzdHNfc3RyLCBudl9zZWxmX3Rlc3RfY291bnQoZGV2KSpzaXplb2Yoc3RydWN0IG52X2V0aHRvb2xfc3RyKSk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gbnZfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKQEAgLTI2MjYsNiArMzgxNSwyMyBAQAogCS5nZXRfcmVncyA9IG52X2dldF9yZWdzLAogCS5ud2F5X3Jlc2V0ID0gbnZfbndheV9yZXNldCwKIAkuZ2V0X3Blcm1fYWRkciA9IGV0aHRvb2xfb3BfZ2V0X3Blcm1fYWRkciwKKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IG52X3NldF90c28sCisJLmdldF9yaW5ncGFyYW0gPSBudl9nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtID0gbnZfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3BhdXNlcGFyYW0gPSBudl9nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0gPSBudl9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3J4X2NzdW0gPSBudl9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gPSBudl9zZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bSA9IG52X3NldF90eF9jc3VtLAorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnID0gbnZfc2V0X3NnLAorCS5nZXRfc3RyaW5ncyA9IG52X2dldF9zdHJpbmdzLAorCS5nZXRfc3RhdHNfY291bnQgPSBudl9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzID0gbnZfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLnNlbGZfdGVzdF9jb3VudCA9IG52X3NlbGZfdGVzdF9jb3VudCwKKwkuc2VsZl90ZXN0ID0gbnZfc2VsZl90ZXN0LAogfTsKIAogc3RhdGljIHZvaWQgbnZfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQpAQCAtMjY1NiwxMzkgKzM4NjIsNiBAQAogCS8qIG5vdGhpbmcgdG8gZG8gKi8KIH07CiAKLXN0YXRpYyB2b2lkIHNldF9tc2l4X3ZlY3Rvcl9tYXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZlY3RvciwgdTMyIGlycW1hc2spCi17Ci0JdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQlpbnQgaTsKLQl1MzIgbXNpeG1hcCA9IDA7Ci0KLQkvKiBFYWNoIGludGVycnVwdCBiaXQgY2FuIGJlIG1hcHBlZCB0byBhIE1TSVggdmVjdG9yICg0IGJpdHMpLgotCSAqIE1TSVhNYXAwIHJlcHJlc2VudHMgdGhlIGZpcnN0IDggaW50ZXJydXB0cyBhbmQgTVNJWE1hcDEgcmVwcmVzZW50cwotCSAqIHRoZSByZW1haW5pbmcgOCBpbnRlcnJ1cHRzLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKChpcnFtYXNrID4+IGkpICYgMHgxKSB7Ci0JCQltc2l4bWFwIHw9IHZlY3RvciA8PCAoaSA8PCAyKTsKLQkJfQotCX0KLQl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnTVNJWE1hcDApIHwgbXNpeG1hcCwgYmFzZSArIE52UmVnTVNJWE1hcDApOwotCi0JbXNpeG1hcCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAoKGlycW1hc2sgPj4gKGkgKyA4KSkgJiAweDEpIHsKLQkJCW1zaXhtYXAgfD0gdmVjdG9yIDw8IChpIDw8IDIpOwotCQl9Ci0JfQotCXdyaXRlbChyZWFkbChiYXNlICsgTnZSZWdNU0lYTWFwMSkgfCBtc2l4bWFwLCBiYXNlICsgTnZSZWdNU0lYTWFwMSk7Ci19Ci0KLXN0YXRpYyBpbnQgbnZfcmVxdWVzdF9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7Ci0JdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQlpbnQgcmV0ID0gMTsKLQlpbnQgaTsKLQotCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfQ0FQQUJMRSkgewotCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKLQkJCW5wLT5tc2lfeF9lbnRyeVtpXS5lbnRyeSA9IGk7Ci0JCX0KLQkJaWYgKChyZXQgPSBwY2lfZW5hYmxlX21zaXgobnAtPnBjaV9kZXYsIG5wLT5tc2lfeF9lbnRyeSwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spKSkgPT0gMCkgewotCQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9FTkFCTEVEOwotCQkJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQpIHsKLQkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgcnggaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLCAmbnZfbmljX2lycV9yeCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciByeCAlZFxuIiwgcmV0KTsKLQkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7Ci0JCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7Ci0JCQkJCWdvdG8gb3V0X2VycjsKLQkJCQl9Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIHR4IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwgJm52X25pY19pcnFfdHgsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgdHggJWRcbiIsIHJldCk7Ci0JCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCQkJCQlnb3RvIG91dF9mcmVlX3J4OwotCQkJCX0KLQkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgbGluayBhbmQgdGltZXIgaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yLCAmbnZfbmljX2lycV9vdGhlciwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciBsaW5rICVkXG4iLCByZXQpOwotCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKLQkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKLQkJCQkJZ290byBvdXRfZnJlZV90eDsKLQkJCQl9Ci0JCQkJLyogbWFwIGludGVycnVwdHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2ZWN0b3IgKi8KLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDApOwotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMSk7Ci0JCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9SWCwgTlZSRUdfSVJRX1JYX0FMTCk7Ci0JCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9UWCwgTlZSRUdfSVJRX1RYX0FMTCk7Ci0JCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9PVEhFUiwgTlZSRUdfSVJRX09USEVSKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogUmVxdWVzdCBpcnEgZm9yIGFsbCBpbnRlcnJ1cHRzICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwotCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwotCQkJCQlnb3RvIG91dF9lcnI7Ci0JCQkJfQotCi0JCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVjdG9yIDAgKi8KLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDApOwotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAwICYmIG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfQ0FQQUJMRSkgewotCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpKG5wLT5wY2lfZGV2KSkgPT0gMCkgewotCQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfRU5BQkxFRDsKLQkJCWlmIChyZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKLQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKLQkJCQlnb3RvIG91dF9lcnI7Ci0JCQl9Ci0KLQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHZlY3RvciAwICovCi0JCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJTWFwMCk7Ci0JCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJTWFwMSk7Ci0JCQkvKiBlbmFibGUgbXNpIHZlY3RvciAwICovCi0JCQl3cml0ZWwoTlZSRUdfTVNJX1ZFQ1RPUl8wX0VOQUJMRUQsIGJhc2UgKyBOdlJlZ01TSUlycU1hc2spOwotCQl9Ci0JfQotCWlmIChyZXQgIT0gMCkgewotCQlpZiAocmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkKLQkJCWdvdG8gb3V0X2VycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLW91dF9mcmVlX3R4OgotCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwgZGV2KTsKLW91dF9mcmVlX3J4OgotCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3RvciwgZGV2KTsKLW91dF9lcnI6Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIG52X2ZyZWVfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwotCWludCBpOwotCi0JaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSyk7IGkrKykgewotCQkJZnJlZV9pcnEobnAtPm1zaV94X2VudHJ5W2ldLnZlY3RvciwgZGV2KTsKLQkJfQotCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKLQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKLQl9IGVsc2UgewotCQlmcmVlX2lycShucC0+cGNpX2Rldi0+aXJxLCBkZXYpOwotCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9FTkFCTEVEKSB7Ci0JCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOwotCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX0VOQUJMRUQ7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyBpbnQgbnZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yODEzLDYgKzM4ODYsOSBAQAogCiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0FkYXB0ZXJDb250cm9sKTsKIAorCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEUpCisJCXdyaXRlbChOVlJFR19UWF9QQVVTRUZSQU1FX0RJU0FCTEUsICBiYXNlICsgTnZSZWdUeFBhdXNlRnJhbWUpOworCiAJLyogMikgaW5pdGlhbGl6ZSBkZXNjcmlwdG9yIHJpbmdzICovCiAJc2V0X2J1ZnNpemUoZGV2KTsKIAlvb20gPSBudl9pbml0X3JpbmcoZGV2KTsKQEAgLTI4MjksNyArMzkwNSw3IEBACiAKIAkvKiA0KSBnaXZlIGh3IHJpbmdzICovCiAJc2V0dXBfaHdfcmluZ3MoZGV2LCBOVl9TRVRVUF9SWF9SSU5HIHwgTlZfU0VUVVBfVFhfUklORyk7Ci0Jd3JpdGVsKCAoKFJYX1JJTkctMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChUWF9SSU5HLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwl3cml0ZWwoICgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAogCQliYXNlICsgTnZSZWdSaW5nU2l6ZXMpOwogCiAJLyogNSkgY29udGludWUgc2V0dXAgKi8KQEAgLTI4NzEsNyArMzk0Nyw4IEBACiAJCQliYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CiAJd3JpdGVsKE5WUkVHX01JSVNQRUVEX0JJVDh8TlZSRUdfTUlJREVMQVksIGJhc2UgKyBOdlJlZ01JSVNwZWVkKTsKIAl3cml0ZWwoTlZSRUdfVU5LU0VUVVA0X1ZBTCwgYmFzZSArIE52UmVnVW5rbm93blNldHVwUmVnNCk7Ci0Jd3JpdGVsKE5WUkVHX1dBS0VVUEZMQUdTX1ZBTCwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOworCWlmIChucC0+d29sZW5hYmxlZCkKKwkJd3JpdGVsKE5WUkVHX1dBS0VVUEZMQUdTX0VOQUJMRSAsIGJhc2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsKIAogCWkgPSByZWFkbChiYXNlICsgTnZSZWdQb3dlclN0YXRlKTsKIAlpZiAoIChpICYgTlZSRUdfUE9XRVJTVEFURV9QT1dFUkVEVVApID09IDApCkBAIC0yODg3LDcgKzM5NjQsNyBAQAogCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CiAJcGNpX3B1c2goYmFzZSk7CiAKLQlpZiAobnZfcmVxdWVzdF9pcnEoZGV2KSkgeworCWlmIChudl9yZXF1ZXN0X2lycShkZXYsIDApKSB7CiAJCWdvdG8gb3V0X2RyYWluOwogCX0KIApAQCAtMjkyNCw2ICs0MDAxLDExIEBACiAJfQogCWlmIChvb20pCiAJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CisKKwkvKiBzdGFydCBzdGF0aXN0aWNzIHRpbWVyICovCisJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDUykKKwkJbW9kX3RpbWVyKCZucC0+c3RhdHNfcG9sbCwgamlmZmllcyArIFNUQVRTX0lOVEVSVkFMKTsKKwogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yOTQ0LDYgKzQwMjYsNyBAQAogCiAJZGVsX3RpbWVyX3N5bmMoJm5wLT5vb21fa2ljayk7CiAJZGVsX3RpbWVyX3N5bmMoJm5wLT5uaWNfcG9sbCk7CisJZGVsX3RpbWVyX3N5bmMoJm5wLT5zdGF0c19wb2xsKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CkBAIC0zMDAzLDYgKzQwODYsOSBAQAogCWluaXRfdGltZXIoJm5wLT5uaWNfcG9sbCk7CiAJbnAtPm5pY19wb2xsLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwogCW5wLT5uaWNfcG9sbC5mdW5jdGlvbiA9ICZudl9kb19uaWNfcG9sbDsJLyogdGltZXIgaGFuZGxlciAqLworCWluaXRfdGltZXIoJm5wLT5zdGF0c19wb2xsKTsKKwlucC0+c3RhdHNfcG9sbC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKwlucC0+c3RhdHNfcG9sbC5mdW5jdGlvbiA9ICZudl9kb19zdGF0c19wb2xsOwkvKiB0aW1lciBoYW5kbGVyICovCiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0zMDE3LDcgKzQxMDMsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9kaXNhYmxlOwogCi0JaWYgKGlkLT5kcml2ZXJfZGF0YSAmIChERVZfSEFTX1ZMQU58REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMKSkKKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYgKERFVl9IQVNfVkxBTnxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTKSkKIAkJbnAtPnJlZ2lzdGVyX3NpemUgPSBOVl9QQ0lfUkVHU1pfVkVSMjsKIAllbHNlCiAJCW5wLT5yZWdpc3Rlcl9zaXplID0gTlZfUENJX1JFR1NaX1ZFUjE7CkBAIC0zMDQ5LDE2ICs0MTM1LDE4IEBACiAJCS8qIHBhY2tldCBmb3JtYXQgMzogc3VwcG9ydHMgNDAtYml0IGFkZHJlc3NpbmcgKi8KIAkJbnAtPmRlc2NfdmVyID0gREVTQ19WRVJfMzsKIAkJbnAtPnR4cnhjdGxfYml0cyA9IE5WUkVHX1RYUlhDVExfREVTQ18zOwotCQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBETUFfMzlCSVRfTUFTSykpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogNjQtYml0IERNQSBmYWlsZWQsIHVzaW5nIDMyLWJpdCBhZGRyZXNzaW5nIGZvciBkZXZpY2UgJXMuXG4iLAotCQkJCQlwY2lfbmFtZShwY2lfZGV2KSk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogdXNpbmcgSElHSERNQVxuIik7Ci0JCX0KLQkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lfZGV2LCAweDAwMDAwMDdmZmZmZmZmZmZVTEwpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IDY0LWJpdCBETUEgKGNvbnNpc3RlbnQpIGZhaWxlZCBmb3IgZGV2aWNlICVzLlxuIiwKLQkJCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSk7CisJCWlmIChkbWFfNjRiaXQpIHsKKwkJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIERNQV8zOUJJVF9NQVNLKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogNjQtYml0IERNQSBmYWlsZWQsIHVzaW5nIDMyLWJpdCBhZGRyZXNzaW5nIGZvciBkZXZpY2UgJXMuXG4iLAorCQkJCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSk7CisJCQl9IGVsc2UgeworCQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogdXNpbmcgSElHSERNQVxuIik7CisJCQl9CisJCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaV9kZXYsIERNQV8zOUJJVF9NQVNLKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogNjQtYml0IERNQSAoY29uc2lzdGVudCkgZmFpbGVkLCB1c2luZyAzMi1iaXQgcmluZyBidWZmZXJzIGZvciBkZXZpY2UgJXMuXG4iLAorCQkJCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSk7CisJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTEFSR0VERVNDKSB7CiAJCS8qIHBhY2tldCBmb3JtYXQgMjogc3VwcG9ydHMganVtYm8gZnJhbWVzICovCkBAIC0zMDkxLDEzICs0MTc5LDE5IEBACiAJfQogCiAJbnAtPm1zaV9mbGFncyA9IDA7Ci0JaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSSkgJiYgIWRpc2FibGVfbXNpKSB7CisJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSSkgJiYgbXNpKSB7CiAJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0NBUEFCTEU7CiAJfQotCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0lfWCkgJiYgIWRpc2FibGVfbXNpeCkgeworCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0lfWCkgJiYgbXNpeCkgewogCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0NBUEFCTEU7CiAJfQogCisJbnAtPnBhdXNlX2ZsYWdzID0gTlZfUEFVU0VGUkFNRV9SWF9DQVBBQkxFIHwgTlZfUEFVU0VGUkFNRV9SWF9SRVEgfCBOVl9QQVVTRUZSQU1FX0FVVE9ORUc7CisJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUEFVU0VGUkFNRV9UWCkgeworCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9DQVBBQkxFIHwgTlZfUEFVU0VGUkFNRV9UWF9SRVE7CisJfQorCisKIAllcnIgPSAtRU5PTUVNOwogCW5wLT5iYXNlID0gaW9yZW1hcChhZGRyLCBucC0+cmVnaXN0ZXJfc2l6ZSk7CiAJaWYgKCFucC0+YmFzZSkKQEAgLTMxMDYsMjEgKzQyMDAsMzggQEAKIAogCWRldi0+aXJxID0gcGNpX2Rldi0+aXJxOwogCisJbnAtPnJ4X3Jpbmdfc2l6ZSA9IFJYX1JJTkdfREVGQVVMVDsKKwlucC0+dHhfcmluZ19zaXplID0gVFhfUklOR19ERUZBVUxUOworCW5wLT50eF9saW1pdF9zdG9wID0gbnAtPnR4X3Jpbmdfc2l6ZSAtIFRYX0xJTUlUX0RJRkZFUkVOQ0U7CisJbnAtPnR4X2xpbWl0X3N0YXJ0ID0gbnAtPnR4X3Jpbmdfc2l6ZSAtIFRYX0xJTUlUX0RJRkZFUkVOQ0UgLSAxOworCiAJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CiAJCW5wLT5yeF9yaW5nLm9yaWcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LAotCQkJCQlzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAoUlhfUklORyArIFRYX1JJTkcpLAorCQkJCQlzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAobnAtPnJ4X3Jpbmdfc2l6ZSArIG5wLT50eF9yaW5nX3NpemUpLAogCQkJCQkmbnAtPnJpbmdfYWRkcik7CiAJCWlmICghbnAtPnJ4X3Jpbmcub3JpZykKIAkJCWdvdG8gb3V0X3VubWFwOwotCQlucC0+dHhfcmluZy5vcmlnID0gJm5wLT5yeF9yaW5nLm9yaWdbUlhfUklOR107CisJCW5wLT50eF9yaW5nLm9yaWcgPSAmbnAtPnJ4X3Jpbmcub3JpZ1tucC0+cnhfcmluZ19zaXplXTsKIAl9IGVsc2UgewogCQlucC0+cnhfcmluZy5leCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsCi0JCQkJCXNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChSWF9SSU5HICsgVFhfUklORyksCisJCQkJCXNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChucC0+cnhfcmluZ19zaXplICsgbnAtPnR4X3Jpbmdfc2l6ZSksCiAJCQkJCSZucC0+cmluZ19hZGRyKTsKIAkJaWYgKCFucC0+cnhfcmluZy5leCkKIAkJCWdvdG8gb3V0X3VubWFwOwotCQlucC0+dHhfcmluZy5leCA9ICZucC0+cnhfcmluZy5leFtSWF9SSU5HXTsKKwkJbnAtPnR4X3JpbmcuZXggPSAmbnAtPnJ4X3JpbmcuZXhbbnAtPnJ4X3Jpbmdfc2l6ZV07CiAJfQorCW5wLT5yeF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogbnAtPnJ4X3Jpbmdfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJbnAtPnJ4X2RtYSA9IGttYWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnJ4X3Jpbmdfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJbnAtPnR4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+dHhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlucC0+dHhfZG1hID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiBucC0+dHhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlucC0+dHhfZG1hX2xlbiA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBucC0+dHhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5wLT5yeF9za2J1ZmYgfHwgIW5wLT5yeF9kbWEgfHwgIW5wLT50eF9za2J1ZmYgfHwgIW5wLT50eF9kbWEgfHwgIW5wLT50eF9kbWFfbGVuKQorCQlnb3RvIG91dF9mcmVlcmluZzsKKwltZW1zZXQobnAtPnJ4X3NrYnVmZiwgMCwgc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+cnhfcmluZ19zaXplKTsKKwltZW1zZXQobnAtPnJ4X2RtYSwgMCwgc2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnJ4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT50eF9za2J1ZmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogbnAtPnR4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT50eF9kbWEsIDAsIHNpemVvZihkbWFfYWRkcl90KSAqIG5wLT50eF9yaW5nX3NpemUpOworCW1lbXNldChucC0+dHhfZG1hX2xlbiwgMCwgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBucC0+dHhfcmluZ19zaXplKTsKIAogCWRldi0+b3BlbiA9IG52X29wZW47CiAJZGV2LT5zdG9wID0gbnZfY2xvc2U7CkBAIC0zMjQyLDkgKzQzNTMsOSBAQAogCWlmIChpID09IDMzKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBvcGVuOiBDb3VsZCBub3QgZmluZCBhIHZhbGlkIFBIWS5cbiIsCiAJCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSk7Ci0JCWdvdG8gb3V0X2ZyZWVyaW5nOworCQlnb3RvIG91dF9lcnJvcjsKIAl9Ci0JCisKIAkvKiByZXNldCBpdCAqLwogCXBoeV9pbml0KGRldik7CiAKQEAgLTMyNTYsNyArNDM2Nyw3IEBACiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHVuYWJsZSB0byByZWdpc3RlciBuZXRkZXY6ICVkXG4iLCBlcnIpOwotCQlnb3RvIG91dF9mcmVlcmluZzsKKwkJZ290byBvdXRfZXJyb3I7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3JjZWRldGguYzogc3Vic3lzdGVtOiAlMDV4OiUwNHggYm91bmQgdG8gJXNcbiIsCiAJCQlkZXYtPm5hbWUsIHBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IsIHBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UsCkBAIC0zMjY0LDE0ICs0Mzc1LDEwIEBACiAKIAlyZXR1cm4gMDsKIAotb3V0X2ZyZWVyaW5nOgotCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpICogKFJYX1JJTkcgKyBUWF9SSU5HKSwKLQkJCQkgICAgbnAtPnJ4X3Jpbmcub3JpZywgbnAtPnJpbmdfYWRkcik7Ci0JZWxzZQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkgKiAoUlhfUklORyArIFRYX1JJTkcpLAotCQkJCSAgICBucC0+cnhfcmluZy5leCwgbnAtPnJpbmdfYWRkcik7CitvdXRfZXJyb3I6CiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworb3V0X2ZyZWVyaW5nOgorCWZyZWVfcmluZ3MoZGV2KTsKIG91dF91bm1hcDoKIAlpb3VubWFwKGdldF9od2Jhc2UoZGV2KSk7CiBvdXRfcmVscmVnOgpAQCAtMzI4NywxNSArNDM5NCwxMSBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IG52X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCiAJLyogZnJlZSBhbGwgc3RydWN0dXJlcyAqLwotCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2MpICogKFJYX1JJTkcgKyBUWF9SSU5HKSwgbnAtPnJ4X3Jpbmcub3JpZywgbnAtPnJpbmdfYWRkcik7Ci0JZWxzZQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkgKiAoUlhfUklORyArIFRYX1JJTkcpLCBucC0+cnhfcmluZy5leCwgbnAtPnJpbmdfYWRkcik7CisJZnJlZV9yaW5ncyhkZXYpOwogCWlvdW5tYXAoZ2V0X2h3YmFzZShkZXYpKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaV9kZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKQEAgLTMzNTgsMTEgKzQ0NjEsNDMgQEAKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkwsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKIAl9LAogCXsJLyogTUNQNTUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTUpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkwsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwl9LAorCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTYpLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCX0sCisJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNyksCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJfSwKKwl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE4KSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwl9LAorCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTkpLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCX0sCisJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMCksCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwl9LAorCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEpLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJfSwKKwl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyKSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCX0sCisJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMyksCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKIAl9LAogCXswLH0sCiB9OwpAQCAtMzM5MiwxMCArNDUyNywxMiBAQAogTU9EVUxFX1BBUk1fREVTQyhvcHRpbWl6YXRpb25fbW9kZSwgIkluIHRocm91Z2hwdXQgbW9kZSAoMCksIGV2ZXJ5IHR4ICYgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LiBJbiBDUFUgbW9kZSAoMSksIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4iKTsKIG1vZHVsZV9wYXJhbShwb2xsX2ludGVydmFsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwb2xsX2ludGVydmFsLCAiSW50ZXJ2YWwgZGV0ZXJtaW5lcyBob3cgZnJlcXVlbnQgdGltZXIgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSBbKHRpbWVfaW5fbWljcm9fc2VjcyAqIDEwMCkgLyAoMl4xMCldLiBNaW4gaXMgMCBhbmQgTWF4IGlzIDY1NTM1LiIpOwotbW9kdWxlX3BhcmFtKGRpc2FibGVfbXNpLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX21zaSwgIkRpc2FibGUgTVNJIGludGVycnVwdHMgYnkgc2V0dGluZyB0byAxLiIpOwotbW9kdWxlX3BhcmFtKGRpc2FibGVfbXNpeCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9tc2l4LCAiRGlzYWJsZSBNU0lYIGludGVycnVwdHMgYnkgc2V0dGluZyB0byAxLiIpOworbW9kdWxlX3BhcmFtKG1zaSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXNpLCAiTVNJIGludGVycnVwdHMgYXJlIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7Cittb2R1bGVfcGFyYW0obXNpeCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXNpeCwgIk1TSVggaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKK21vZHVsZV9wYXJhbShkbWFfNjRiaXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRtYV82NGJpdCwgIkhpZ2ggRE1BIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7CiAKIE1PRFVMRV9BVVRIT1IoIk1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJldmVyc2UgRW5naW5lZXJlZCBuRm9yY2UgZXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwppbmRleCAxMDJjMWYwLi5kMTI2MDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKQEAgLTMwOCw5ICszMDgsOSBAQAogewogCXN0cnVjdCBzb2NrYWRkcl9heDI1ICpzYSA9IGFkZHI7CiAKLQlzcGluX2xvY2tfaXJxKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCW1lbWNweShkZXYtPmRldl9hZGRyLCAmc2EtPnNheDI1X2NhbGwsIEFYMjVfQUREUl9MRU4pOwotCXNwaW5fdW5sb2NrX2lycSgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjcsOSArNzY3LDkgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT54bWl0X2xvY2spOworCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCAmYWRkciwgQVgyNV9BRERSX0xFTik7Ci0JCXNwaW5fdW5sb2NrX2lycSgmZGV2LT54bWl0X2xvY2spOworCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAogCQllcnIgPSAwOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IGQ4MWE4ZTEuLjNlYmJiZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtMzU3LDkgKzM1Nyw5IEBACiB7CiAJc3RydWN0IHNvY2thZGRyX2F4MjUgKnNhID0gYWRkcjsKIAotCXNwaW5fbG9ja19pcnEoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZzYS0+c2F4MjVfY2FsbCwgQVgyNV9BRERSX0xFTik7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg4Niw5ICs4ODYsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlzcGluX2xvY2tfaXJxKCZkZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHIsIEFYMjVfQUREUl9MRU4pOwotCQlzcGluX3VubG9ja19pcnEoJmRldi0+eG1pdF9sb2NrKTsKKwkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocC1wbHVzLmMgYi9kcml2ZXJzL25ldC9ocC1wbHVzLmMKaW5kZXggMGQ3YTYyNS4uZTI2YTNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAtcGx1cy5jCisrKyBiL2RyaXZlcnMvbmV0L2hwLXBsdXMuYwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAKIC8qIFRoaXMgaXMgc2V0IHVwIHNvIHRoYXQgb25seSBhIHNpbmdsZSBhdXRvcHJvYmUgdGFrZXMgcGxhY2UgcGVyIGNhbGwuCiBJU0EgZGV2aWNlIGF1dG9wcm9iZXMgb24gYSBydW5uaW5nIG1hY2hpbmUgYXJlIG5vdCByZWNvbW1lbmRlZC4gKi8KLWludAoraW50IF9faW5pdAogaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAuYyBiL2RyaXZlcnMvbmV0L2hwLmMKaW5kZXggY2Y5ZmIzNi4uNTUxYTcxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAuYworKysgYi9kcml2ZXJzL25ldC9ocC5jCkBAIC0zODQsNyArMzg0LDcgQEAKIH0KIAogLyogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIGV0aGVyY2FyZCBpZiBzb21ldGhpbmcgc2NyZXdzIHVwLiAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyB2b2lkIF9faW5pdAogaHBfaW5pdF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGlycSA9IGRldi0+aXJxOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAKIC8qIFRoaXMgaXMgc2V0IHVwIHNvIHRoYXQgb25seSBhIHNpbmdsZSBhdXRvcHJvYmUgdGFrZXMgcGxhY2UgcGVyIGNhbGwuCiBJU0EgZGV2aWNlIGF1dG9wcm9iZXMgb24gYSBydW5uaW5nIG1hY2hpbmUgYXJlIG5vdCByZWNvbW1lbmRlZC4gKi8KLWludAoraW50IF9faW5pdAogaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDAxYWQ5MDQuLjUxZmQ1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiBuZXQtMy1kcml2ZXIgZm9yIHRoZSBJQk0gTEFOIEFkYXB0ZXIvQQogCiBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSwgYW5kIGlzIGNvdmVyZWQgYnkgdGhlCkBAIC0xMSw5ICsxMSw5IEBACiBTS19HMTYgYW5kIDNDNTIzIGRyaXZlci4KIAogcGFwZXIgc291cmNlczoKLSAgJ1BDIEhhcmR3YXJlOiBBdWZiYXUsIEZ1bmt0aW9uc3dlaXNlLCBQcm9ncmFtbWllcnVuZycgYnkgCisgICdQQyBIYXJkd2FyZTogQXVmYmF1LCBGdW5rdGlvbnN3ZWlzZSwgUHJvZ3JhbW1pZXJ1bmcnIGJ5CiAgIEhhbnMtUGV0ZXIgTWVzc21lciBmb3IgdGhlIGJhc2ljIE1pY3JvY2hhbm5lbCBzdHVmZgotICAKKwogICAnTGludXggR2VyYWV0ZXRyZWliZXInIGJ5IEFsbGVzYW5kcm8gUnViaW5pLCBLYWxsZSBEYWxoZWltZXIKICAgZm9yIGhlbHAgb24gRXRoZXJuZXQgZHJpdmVyIHByb2dyYW1taW5nCiAKQEAgLTI3LDE0ICsyNywxNCBAQAogCiBzcGVjaWFsIGFja25vd2xlZGdlbWVudHMgdG86CiAgIC0gQm9iIEVhZ2VyIGZvciBoZWxwaW5nIG1lIG91dCB3aXRoIGRvY3VtZW50YXRpb24gZnJvbSBJQk0KLSAgLSBKaW0gU2hvcm5leSBmb3IgaGlzIGVuZGxlc3MgcGF0aWVuY2Ugd2l0aCBtZSB3aGlsZSBJIHdhcyB1c2luZyAKKyAgLSBKaW0gU2hvcm5leSBmb3IgaGlzIGVuZGxlc3MgcGF0aWVuY2Ugd2l0aCBtZSB3aGlsZSBJIHdhcyB1c2luZwogICAgIGhpbSBhcyBhIGJldGEgdGVzdGVyIHRvIHRyYWNlIGRvd24gdGhlIGFkZHJlc3MgZmlsdGVyIGJ1ZyA7LSkKIAogICBNaXNzaW5nIHRoaW5nczoKIAogICAtPiBzZXQgZGVidWcgbGV2ZWwgdmlhIGlvY3RsIGluc3RlYWQgb2YgY29tcGlsZS10aW1lIHN3aXRjaGVzCiAgIC0+IEkgZGlkbid0IGZvbGxvdyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIDIuMS54IGtlcm5lbHMsIHNvIG15Ci0gICAgIGFzc3VtcHRpb25zIGFib3V0IHdoaWNoIHRoaW5ncyBjaGFuZ2VkIHdpdGggd2hpY2gga2VybmVsIHZlcnNpb24gCisgICAgIGFzc3VtcHRpb25zIGFib3V0IHdoaWNoIHRoaW5ncyBjaGFuZ2VkIHdpdGggd2hpY2gga2VybmVsIHZlcnNpb24KICAgICAgYXJlIHByb2JhYmx5IG5vbnNlbnNlCiAKIEhpc3Rvcnk6CkBAIC0yNzUsNyArMjc1LDcgQEAKIAlwcml2LT5ycmFzdGFydCA9IHJhZGRyID0gcHJpdi0+dHhidWZzdGFydCArIChUWEJVRkNOVCAqIFBLVFNJWkUpOwogCXByaXYtPnJkYXN0YXJ0ID0gYWRkciA9IHByaXYtPnJyYXN0YXJ0ICsgKHByaXYtPnJ4YnVmY250ICogc2l6ZW9mKHJyYV90KSk7CiAJcHJpdi0+cnhidWZzdGFydCA9IGJhZGRyID0gcHJpdi0+cmRhc3RhcnQgKyAocHJpdi0+cnhidWZjbnQgKiBzaXplb2YocmRhX3QpKTsKLQkKKwogCWZvciAoeiA9IDA7IHogPCBwcml2LT5yeGJ1ZmNudDsgeisrKSB7CiAJCXJyYS5zdGFydGxvID0gYmFkZHI7CiAJCXJyYS5zdGFydGhpID0gMDsKQEAgLTU3MCw3ICs1NzAsNyBAQAogCQlscmRhYWRkciA9IHByaXYtPnJkYXN0YXJ0ICsgKHByaXYtPmxhc3RyeGRlc2NyICogc2l6ZW9mKHJkYV90KSk7CiAJCW1lbWNweV9mcm9taW8oJnJkYSwgcHJpdi0+YmFzZSArIHJkYWFkZHIsIHNpemVvZihyZGFfdCkpOwogCi0JCS8qIGlyb24gb3V0IHVwcGVyIHdvcmQgaGFsdmVzIG9mIGZpZWxkcyB3ZSB1c2UgLSBTT05JQyB3aWxsIGR1cGxpY2F0ZSAKKwkJLyogaXJvbiBvdXQgdXBwZXIgd29yZCBoYWx2ZXMgb2YgZmllbGRzIHdlIHVzZSAtIFNPTklDIHdpbGwgZHVwbGljYXRlCiAJCSAgIGJpdHMgMC4uMTUgdG8gMTYuLjMxICovCiAKIAkJcmRhLnN0YXR1cyAmPSAweGZmZmY7CkBAIC04MzYsOSArODM2LDkgQEAKIAliYWRkciA9IHByaXYtPnR4YnVmc3RhcnQgKyAocHJpdi0+bmV4dHR4ZGVzY3IgKiBQS1RTSVpFKTsKIAltZW1jcHlfdG9pbyhwcml2LT5iYXNlICsgYmFkZHIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JLyogY29weSBmaWxsZXIgaW50byBSQU0gLSBpbiBjYXNlIHdlJ3JlIGZpbGxpbmcgdXAuLi4gCisJLyogY29weSBmaWxsZXIgaW50byBSQU0gLSBpbiBjYXNlIHdlJ3JlIGZpbGxpbmcgdXAuLi4KIAkgICB3ZSdyZSBmaWxsaW5nIGEgYml0IG1vcmUgdGhhbiBuZWNlc3NhcnksIGJ1dCB0aGF0IGRvZXNuJ3QgaGFybQotCSAgIHNpbmNlIHRoZSBidWZmZXIgaXMgZmFyIGxhcmdlci4uLiAKKwkgICBzaW5jZSB0aGUgYnVmZmVyIGlzIGZhciBsYXJnZXIuLi4KIAkgICBTb3JyeSBMaW51cyBmb3IgdGhlIGZpbGxlciBzdHJpbmcgYnV0IEkgY291bGRuJ3QgcmVzaXN0IDstKSAqLwogCiAJaWYgKHRtcGxlbiA+IHNrYi0+bGVuKSB7CkBAIC05NTIsNyArOTUyLDcgQEAKIAlwcml2LT5yZWFsaXJxID0gaXJxOwogCXByaXYtPm1lZGl1bSA9IG1lZGl1bTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0JCQorCiAKIAkvKiBzZXQgYmFzZSArIGlycSBmb3IgdGhpcyBkZXZpY2UgKGlycSBub3QgYWxsb2NhdGVkIHNvIGZhcikgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5oIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5oCmluZGV4IDQ1OGVlMjIuLjZiNThiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuaAorKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmgKQEAgLTE3LDcgKzE3LDcgQEAKIC8qIG1lZGlhIGVudW1lcmF0aW9uIC0gZGVmaW5lZCBpbiBhIHdheSB0aGF0IGl0IGZpdHMgb250byB0aGUgTEFOL0EncwogICAgUE9TIHJlZ2lzdGVycy4uLiAqLwogCi10eXBlZGVmIGVudW0geyAKK3R5cGVkZWYgZW51bSB7CiAJTWVkaWFfMTBCYXNlVCwgTWVkaWFfMTBCYXNlNSwKIAlNZWRpYV9Vbmtub3duLCBNZWRpYV8xMEJhc2UyLCBNZWRpYV9Db3VudAogfSBpYm1sYW5hX21lZGl1bTsKQEAgLTI3LDcgKzI3LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgc2xvdDsJCS8qIE1DQS1TbG90LSMgICAgICAgICAgICAgICAgICAgICAgICovCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdDsJLyogcGFja2V0IHN0YXRpc3RpY3MgICAgICAgICAgICAqLwotCWludCByZWFsaXJxOwkJCS8qIG1lbW9yaXplcyBhY3R1YWwgSVJRLCBldmVuIHdoZW4gCisJaW50IHJlYWxpcnE7CQkJLyogbWVtb3JpemVzIGFjdHVhbCBJUlEsIGV2ZW4gd2hlbgogCQkJCQkgICBjdXJyZW50bHkgbm90IGFsbG9jYXRlZCAgICAgICAgICAqLwogCWlibWxhbmFfbWVkaXVtIG1lZGl1bTsJCS8qIHBoeXNpY2FsIGNhbm5lY3RvciAgICAgICAgICAgICAgICovCiAJdTMyIAl0ZGFzdGFydCwgdHhidWZzdGFydCwJLyogYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQxLDcgKzQxLDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9IGlibWxhbmFfcHJpdjsKIAotLyogdGhpcyBjYXJkIHVzZXMgcXVpdGUgYSBsb3Qgb2YgSS9PIHBvcnRzLi4ubHVja2lseSB0aGUgTUNBIGJ1cyBkZWNvZGVzIAorLyogdGhpcyBjYXJkIHVzZXMgcXVpdGUgYSBsb3Qgb2YgSS9PIHBvcnRzLi4ubHVja2lseSB0aGUgTUNBIGJ1cyBkZWNvZGVzCiAgICBhIGZ1bGwgNjRLIEkvTyByYW5nZS4uLiAqLwogCiAjZGVmaW5lIElCTV9MQU5BX0lPUkFOR0UgMHhhMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IDUyZDAxMDIuLjY2NjM0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTI0LDcgKzI0LDcgQEAKIC8qIGZvciB1c2Ugd2l0aCBJQk0gaS9wU2VyaWVzIExQQVIgTGludXguICBJdCB1dGlsaXplcyB0aGUgbG9naWNhbCBMQU4gICAgKi8KIC8qIG9wdGlvbiBvZiB0aGUgUlMvNjAwMCBQbGF0Zm9ybSBBcmNoaXRlY2h0dXJlIHRvIGludGVyZmFjZSB3aXRoIHZpcnR1YWwgKi8KIC8qIGV0aGVybmV0IE5JQ3MgdGhhdCBhcmUgcHJlc2VudGVkIHRvIHRoZSBwYXJ0aXRpb24gYnkgdGhlIGh5cGVydmlzb3IuICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICBUT0RPOgpAQCAtNzksNyArNzksNyBAQAogI2Vsc2UKICNkZWZpbmUgaWJtdmV0aF9kZWJ1Z19wcmludGtfbm9fYWRhcHRlcihmbXQsIGFyZ3MuLi4pCiAjZGVmaW5lIGlibXZldGhfZGVidWdfcHJpbnRrKGZtdCwgYXJncy4uLikKLSNkZWZpbmUgaWJtdmV0aF9hc3NlcnQoZXhwcikgCisjZGVmaW5lIGlibXZldGhfYXNzZXJ0KGV4cHIpCiAjZW5kaWYKIAogc3RhdGljIGludCBpYm12ZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC05Niw2ICs5Niw3IEBACiBzdGF0aWMgdm9pZCBpYm12ZXRoX3Byb2NfdW5yZWdpc3Rlcl9hZGFwdGVyKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIGlycXJldHVybl90IGlibXZldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIGlubGluZSB2b2lkIGlibXZldGhfcnhxX2hhcnZlc3RfYnVmZmVyKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUga3R5cGVfdmV0aF9wb29sOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNkZWZpbmUgSUJNVkVUSF9QUk9DX0RJUiAibmV0L2libXZldGgiCkBAIC0xMzMsMTIgKzEzNCwxMyBAQAogfQogCiAvKiBzZXR1cCB0aGUgaW5pdGlhbCBzZXR0aW5ncyBmb3IgYSBidWZmZXIgcG9vbCAqLwotc3RhdGljIHZvaWQgaWJtdmV0aF9pbml0X2J1ZmZlcl9wb29sKHN0cnVjdCBpYm12ZXRoX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIHBvb2xfaW5kZXgsIHUzMiBwb29sX3NpemUsIHUzMiBidWZmX3NpemUpCitzdGF0aWMgdm9pZCBpYm12ZXRoX2luaXRfYnVmZmVyX3Bvb2woc3RydWN0IGlibXZldGhfYnVmZl9wb29sICpwb29sLCB1MzIgcG9vbF9pbmRleCwgdTMyIHBvb2xfc2l6ZSwgdTMyIGJ1ZmZfc2l6ZSwgdTMyIHBvb2xfYWN0aXZlKQogewogCXBvb2wtPnNpemUgPSBwb29sX3NpemU7CiAJcG9vbC0+aW5kZXggPSBwb29sX2luZGV4OwogCXBvb2wtPmJ1ZmZfc2l6ZSA9IGJ1ZmZfc2l6ZTsKIAlwb29sLT50aHJlc2hvbGQgPSBwb29sX3NpemUgLyAyOworCXBvb2wtPmFjdGl2ZSA9IHBvb2xfYWN0aXZlOwogfQogCiAvKiBhbGxvY2F0ZSBhbmQgc2V0dXAgYW4gYnVmZmVyIHBvb2wgLSBjYWxsZWQgZHVyaW5nIG9wZW4gKi8KQEAgLTE0NiwxMyArMTQ4LDEzIEBACiB7CiAJaW50IGk7CiAKLQlwb29sLT5mcmVlX21hcCA9IGttYWxsb2Moc2l6ZW9mKHUxNikgKiBwb29sLT5zaXplLCBHRlBfS0VSTkVMKTsgCisJcG9vbC0+ZnJlZV9tYXAgPSBrbWFsbG9jKHNpemVvZih1MTYpICogcG9vbC0+c2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZighcG9vbC0+ZnJlZV9tYXApIHsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXBvb2wtPmRtYV9hZGRyID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiBwb29sLT5zaXplLCBHRlBfS0VSTkVMKTsgCisJcG9vbC0+ZG1hX2FkZHIgPSBrbWFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqIHBvb2wtPnNpemUsIEdGUF9LRVJORUwpOwogCWlmKCFwb29sLT5kbWFfYWRkcikgewogCQlrZnJlZShwb29sLT5mcmVlX21hcCk7CiAJCXBvb2wtPmZyZWVfbWFwID0gTlVMTDsKQEAgLTE4MCw3ICsxODIsNiBAQAogCWF0b21pY19zZXQoJnBvb2wtPmF2YWlsYWJsZSwgMCk7CiAJcG9vbC0+cHJvZHVjZXJfaW5kZXggPSAwOwogCXBvb2wtPmNvbnN1bWVyX2luZGV4ID0gMDsKLQlwb29sLT5hY3RpdmUgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTQsNyArMjE1LDcgQEAKIAogCQlmcmVlX2luZGV4ID0gcG9vbC0+Y29uc3VtZXJfaW5kZXgrKyAlIHBvb2wtPnNpemU7CiAJCWluZGV4ID0gcG9vbC0+ZnJlZV9tYXBbZnJlZV9pbmRleF07Ci0JCisKIAkJaWJtdmV0aF9hc3NlcnQoaW5kZXggIT0gSUJNX1ZFVEhfSU5WQUxJRF9NQVApOwogCQlpYm12ZXRoX2Fzc2VydChwb29sLT5za2J1ZmZbaW5kZXhdID09IE5VTEwpOwogCkBAIC0yMzEsMTAgKzIzMiwxMCBAQAogCQlkZXNjLmRlc2MgPSAwOwogCQlkZXNjLmZpZWxkcy52YWxpZCA9IDE7CiAJCWRlc2MuZmllbGRzLmxlbmd0aCA9IHBvb2wtPmJ1ZmZfc2l6ZTsKLQkJZGVzYy5maWVsZHMuYWRkcmVzcyA9IGRtYV9hZGRyOyAKKwkJZGVzYy5maWVsZHMuYWRkcmVzcyA9IGRtYV9hZGRyOwogCiAJCWxwYXJfcmMgPSBoX2FkZF9sb2dpY2FsX2xhbl9idWZmZXIoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLCBkZXNjLmRlc2MpOwotCQkgICAgCisKIAkJaWYobHBhcl9yYyAhPSBIX1NVQ0NFU1MpIHsKIAkJCXBvb2wtPmZyZWVfbWFwW2ZyZWVfaW5kZXhdID0gaW5kZXg7CiAJCQlwb29sLT5za2J1ZmZbaW5kZXhdID0gTlVMTDsKQEAgLTI1MCwxMyArMjUxLDEzIEBACiAJCQlhZGFwdGVyLT5yZXBsZW5pc2hfYWRkX2J1ZmZfc3VjY2VzcysrOwogCQl9CiAJfQotICAgIAorCiAJbWIoKTsKIAlhdG9taWNfYWRkKGJ1ZmZlcnNfYWRkZWQsICYocG9vbC0+YXZhaWxhYmxlKSk7CiB9CiAKIC8qIHJlcGxlbmlzaCByb3V0aW5lICovCi1zdGF0aWMgdm9pZCBpYm12ZXRoX3JlcGxlbmlzaF90YXNrKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpIAorc3RhdGljIHZvaWQgaWJtdmV0aF9yZXBsZW5pc2hfdGFzayhzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwogCkBAIC0yNjQsNyArMjY1LDcgQEAKIAogCWZvcihpID0gMDsgaSA8IElibVZldGhOdW1CdWZmZXJQb29sczsgaSsrKQogCQlpZihhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYWN0aXZlKQotCQkJaWJtdmV0aF9yZXBsZW5pc2hfYnVmZmVyX3Bvb2woYWRhcHRlciwgCisJCQlpYm12ZXRoX3JlcGxlbmlzaF9idWZmZXJfcG9vbChhZGFwdGVyLAogCQkJCQkJICAgICAmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldKTsKIAogCWFkYXB0ZXItPnJ4X25vX2J1ZmZlciA9ICoodTY0KikoKChjaGFyKilhZGFwdGVyLT5idWZmZXJfbGlzdF9hZGRyKSArIDQwOTYgLSA4KTsKQEAgLTMwMSw3ICszMDIsNiBAQAogCQlrZnJlZShwb29sLT5za2J1ZmYpOwogCQlwb29sLT5za2J1ZmYgPSBOVUxMOwogCX0KLQlwb29sLT5hY3RpdmUgPSAwOwogfQogCiAvKiByZW1vdmUgYSBidWZmZXIgZnJvbSBhIHBvb2wgKi8KQEAgLTM3Miw3ICszNzIsNyBAQAogCWRlc2MuZmllbGRzLmFkZHJlc3MgPSBhZGFwdGVyLT5yeF9idWZmX3Bvb2xbcG9vbF0uZG1hX2FkZHJbaW5kZXhdOwogCiAJbHBhcl9yYyA9IGhfYWRkX2xvZ2ljYWxfbGFuX2J1ZmZlcihhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MsIGRlc2MuZGVzYyk7Ci0JCSAgICAKKwogCWlmKGxwYXJfcmMgIT0gSF9TVUNDRVNTKSB7CiAJCWlibXZldGhfZGVidWdfcHJpbnRrKCJoX2FkZF9sb2dpY2FsX2xhbl9idWZmZXIgZmFpbGVkIGR1cmluZyByZWN5Y2xlIHJjPSVsZCIsIGxwYXJfcmMpOwogCQlpYm12ZXRoX3JlbW92ZV9idWZmZXJfZnJvbV9wb29sKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3F1ZXVlLnF1ZXVlX2FkZHJbYWRhcHRlci0+cnhfcXVldWUuaW5kZXhdLmNvcnJlbGF0b3IpOwpAQCAtNDA3LDcgKzQwNyw3IEBACiAJCX0KIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWFkYXB0ZXItPmJ1ZmZlcl9saXN0X2FkZHIpOwogCQlhZGFwdGVyLT5idWZmZXJfbGlzdF9hZGRyID0gTlVMTDsKLQl9IAorCX0KIAogCWlmKGFkYXB0ZXItPmZpbHRlcl9saXN0X2FkZHIgIT0gTlVMTCkgewogCQlpZighZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+ZmlsdGVyX2xpc3RfZG1hKSkgewpAQCAtNDMzLDcgKzQzMyw5IEBACiAJfQogCiAJZm9yKGkgPSAwOyBpPElibVZldGhOdW1CdWZmZXJQb29sczsgaSsrKQotCQlpYm12ZXRoX2ZyZWVfYnVmZmVyX3Bvb2woYWRhcHRlciwgJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXSk7CisJCWlmIChhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYWN0aXZlKQorCQkJaWJtdmV0aF9mcmVlX2J1ZmZlcl9wb29sKGFkYXB0ZXIsCisJCQkJCQkgJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXSk7CiB9CiAKIHN0YXRpYyBpbnQgaWJtdmV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC00NTAsMTAgKzQ1MiwxMCBAQAogCiAJZm9yKGkgPSAwOyBpPElibVZldGhOdW1CdWZmZXJQb29sczsgaSsrKQogCQlyeHFfZW50cmllcyArPSBhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uc2l6ZTsKLSAgICAKKwogCWFkYXB0ZXItPmJ1ZmZlcl9saXN0X2FkZHIgPSAodm9pZCopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlhZGFwdGVyLT5maWx0ZXJfbGlzdF9hZGRyID0gKHZvaWQqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0gCisKIAlpZighYWRhcHRlci0+YnVmZmVyX2xpc3RfYWRkciB8fCAhYWRhcHRlci0+ZmlsdGVyX2xpc3RfYWRkcikgewogCQlpYm12ZXRoX2Vycm9yX3ByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIGZpbHRlciBvciBidWZmZXIgbGlzdCBwYWdlc1xuIik7CiAJCWlibXZldGhfY2xlYW51cChhZGFwdGVyKTsKQEAgLTQ4OSw5ICs0OTEsNiBAQAogCWFkYXB0ZXItPnJ4X3F1ZXVlLm51bV9zbG90cyA9IHJ4cV9lbnRyaWVzOwogCWFkYXB0ZXItPnJ4X3F1ZXVlLnRvZ2dsZSA9IDE7CiAKLQkvKiBjYWxsIGNoYW5nZV9tdHUgdG8gaW5pdCB0aGUgYnVmZmVyIHBvb2xzIGJhc2VkIGluIGluaXRpYWwgbXR1ICovCi0JaWJtdmV0aF9jaGFuZ2VfbXR1KG5ldGRldiwgbmV0ZGV2LT5tdHUpOwotCiAJbWVtY3B5KCZtYWNfYWRkcmVzcywgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWFjX2FkZHJlc3MgPSBtYWNfYWRkcmVzcyA+PiAxNjsKIApAQCAtNTA0LDcgKzUwMyw3IEBACiAJaWJtdmV0aF9kZWJ1Z19wcmludGsoImZpbHRlciBsaXN0IEAgMHglcFxuIiwgYWRhcHRlci0+ZmlsdGVyX2xpc3RfYWRkcik7CiAJaWJtdmV0aF9kZWJ1Z19wcmludGsoInJlY2VpdmUgcSAgIEAgMHglcFxuIiwgYWRhcHRlci0+cnhfcXVldWUucXVldWVfYWRkcik7CiAKLSAgICAKKwogCWxwYXJfcmMgPSBoX3JlZ2lzdGVyX2xvZ2ljYWxfbGFuKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkJIGFkYXB0ZXItPmJ1ZmZlcl9saXN0X2RtYSwKIAkJCQkJIHJ4cV9kZXNjLmRlc2MsCkBAIC01MTksNyArNTE4LDE4IEBACiAJCQkJICAgICByeHFfZGVzYy5kZXNjLAogCQkJCSAgICAgbWFjX2FkZHJlc3MpOwogCQlpYm12ZXRoX2NsZWFudXAoYWRhcHRlcik7Ci0JCXJldHVybiAtRU5PTkVUOyAKKwkJcmV0dXJuIC1FTk9ORVQ7CisJfQorCisJZm9yKGkgPSAwOyBpPElibVZldGhOdW1CdWZmZXJQb29sczsgaSsrKSB7CisJCWlmKCFhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYWN0aXZlKQorCQkJY29udGludWU7CisJCWlmIChpYm12ZXRoX2FsbG9jX2J1ZmZlcl9wb29sKCZhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0pKSB7CisJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygidW5hYmxlIHRvIGFsbG9jIHBvb2xcbiIpOworCQkJYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmFjdGl2ZSA9IDA7CisJCQlpYm12ZXRoX2NsZWFudXAoYWRhcHRlcik7CisJCQlyZXR1cm4gLUVOT01FTSA7CisJCX0KIAl9CiAKIAlpYm12ZXRoX2RlYnVnX3ByaW50aygicmVnaXN0ZXJpbmcgaXJxIDB4JXhcbiIsIG5ldGRldi0+aXJxKTsKQEAgLTU0NywxMCArNTU3LDExIEBACiB7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKIAlsb25nIGxwYXJfcmM7Ci0gICAgCisKIAlpYm12ZXRoX2RlYnVnX3ByaW50aygiY2xvc2Ugc3RhcnRpbmdcbiIpOwogCi0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCWlmICghYWRhcHRlci0+cG9vbF9jb25maWcpCisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAogCWZyZWVfaXJxKG5ldGRldi0+aXJxLCBuZXRkZXYpOwogCkBAIC02OTQsNyArNzA1LDcgQEAKIAkJCQkJICAgICBkZXNjWzVdLmRlc2MsCiAJCQkJCSAgICAgY29ycmVsYXRvcik7CiAJfSB3aGlsZSAoKGxwYXJfcmMgPT0gSF9CVVNZKSAmJiAocmV0cnlfY291bnQtLSkpOwotICAgIAorCiAJaWYobHBhcl9yYyAhPSBIX1NVQ0NFU1MgJiYgbHBhcl9yYyAhPSBIX0RST1BQRUQpIHsKIAkJaW50IGk7CiAJCWlibXZldGhfZXJyb3JfcHJpbnRrKCJ0eDogaF9zZW5kX2xvZ2ljYWxfbGFuIGZhaWxlZCB3aXRoIHJjPSVsZFxuIiwgbHBhcl9yYyk7CkBAIC03ODAsNyArNzkxLDcgQEAKIAkJLyogbW9yZSB3b3JrIHRvIGRvIC0gcmV0dXJuIHRoYXQgd2UgYXJlIG5vdCBkb25lIHlldCAqLwogCQluZXRkZXYtPnF1b3RhIC09IGZyYW1lc19wcm9jZXNzZWQ7CiAJCSpidWRnZXQgLT0gZnJhbWVzX3Byb2Nlc3NlZDsKLQkJcmV0dXJuIDE7IAorCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiB3ZSB0aGluayB3ZSBhcmUgZG9uZSAtIHJlZW5hYmxlIGludGVycnVwdHMsIHRoZW4gY2hlY2sgb25jZSBtb3JlIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgZG9uZSAqLwpAQCAtODA2LDcgKzgxNyw3IEBACiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpYm12ZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoteyAgIAorewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXZfaW5zdGFuY2U7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7CkBAIC04NjIsNyArODczLDcgQEAKIAkJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygiaF9tdWx0aWNhc3RfY3RybCByYz0lbGQgd2hlbiBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIGZpbHRlciB0YWJsZVxuIiwgbHBhcl9yYyk7CiAJCQl9CiAJCX0KLQkKKwogCQkvKiByZS1lbmFibGUgZmlsdGVyaW5nICovCiAJCWxwYXJfcmMgPSBoX211bHRpY2FzdF9jdHJsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkJICAgSWJtVmV0aE1jYXN0RW5hYmxlRmlsdGVyaW5nLApAQCAtODc2LDQ2ICs4ODcsMjIgQEAKIHN0YXRpYyBpbnQgaWJtdmV0aF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPnByaXY7CisJaW50IG5ld19tdHVfb2ggPSBuZXdfbXR1ICsgSUJNVkVUSF9CVUZGX09IOwogCWludCBpOwotCWludCBwcmV2X3NtYWxsZXIgPSAxOwogCi0JaWYgKChuZXdfbXR1IDwgNjgpIHx8IAotCSAgICAobmV3X210dSA+IChwb29sX3NpemVbSWJtVmV0aE51bUJ1ZmZlclBvb2xzLTFdKSAtIElCTVZFVEhfQlVGRl9PSCkpCisJaWYgKG5ld19tdHUgPCBJQk1WRVRIX01BWF9NVFUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogTG9vayBmb3IgYW4gYWN0aXZlIGJ1ZmZlciBwb29sIHRoYXQgY2FuIGhvbGQgdGhlIG5ldyBNVFUgKi8KIAlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspIHsKLQkJaW50IGFjdGl2YXRlID0gMDsKLQkJaWYgKG5ld19tdHUgPiAocG9vbF9zaXplW2ldICAtIElCTVZFVEhfQlVGRl9PSCkpIHsgCi0JCQlhY3RpdmF0ZSA9IDE7Ci0JCQlwcmV2X3NtYWxsZXI9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocHJldl9zbWFsbGVyKQotCQkJCWFjdGl2YXRlID0gMTsKLQkJCXByZXZfc21hbGxlcj0gMDsKKwkJaWYgKCFhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYWN0aXZlKQorCQkJY29udGludWU7CisJCWlmIChuZXdfbXR1X29oIDwgYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmJ1ZmZfc2l6ZSkgeworCQkJZGV2LT5tdHUgPSBuZXdfbXR1OworCQkJcmV0dXJuIDA7CiAJCX0KLQotCQlpZiAoYWN0aXZhdGUgJiYgIWFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUpIHsKLQkJCXN0cnVjdCBpYm12ZXRoX2J1ZmZfcG9vbCAqcG9vbCA9IAotCQkJCQkJJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXTsKLQkJCWlmKGlibXZldGhfYWxsb2NfYnVmZmVyX3Bvb2wocG9vbCkpIHsKLQkJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygidW5hYmxlIHRvIGFsbG9jIHBvb2xcbiIpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmFjdGl2ZSA9IDE7Ci0JCX0gZWxzZSBpZiAoIWFjdGl2YXRlICYmIGFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUpIHsKLQkJCWFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5hY3RpdmUgPSAwOwotCQkJaF9mcmVlX2xvZ2ljYWxfbGFuX2J1ZmZlcihhZGFwdGVyLT52ZGV2LT51bml0X2FkZHJlc3MsCi0JCQkJCSAgKHU2NClwb29sX3NpemVbaV0pOwotCQl9Ci0KIAl9Ci0KLQkvKiBraWNrIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBzbyB0aGF0IHRoZSBuZXcgYnVmZmVyIHBvb2xzIGdldAotCSAgIHJlcGxlbmlzaGVkIG9yIGRlYWxsb2NhdGVkICovCi0JaWJtdmV0aF9pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldiwgTlVMTCk7Ci0KLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JcmV0dXJuIDA7CQorCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpYm12ZXRoX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICppZCkKQEAgLTkyOCw3ICs5MTUsNyBAQAogCXVuc2lnbmVkIGludCAqbWNhc3RGaWx0ZXJTaXplX3A7CiAKIAotCWlibXZldGhfZGVidWdfcHJpbnRrX25vX2FkYXB0ZXIoImVudGVyaW5nIGlibXZldGhfcHJvYmUgZm9yIFVBIDB4JXhcbiIsIAorCWlibXZldGhfZGVidWdfcHJpbnRrX25vX2FkYXB0ZXIoImVudGVyaW5nIGlibXZldGhfcHJvYmUgZm9yIFVBIDB4JXhcbiIsCiAJCQkJCWRldi0+dW5pdF9hZGRyZXNzKTsKIAogCW1hY19hZGRyX3AgPSAodW5zaWduZWQgY2hhciAqKSB2aW9fZ2V0X2F0dHJpYnV0ZShkZXYsIFZFVEhfTUFDX0FERFIsIDApOwpAQCAtOTM3LDcgKzkyNCw3IEBACiAJCQkJImF0dHJpYnV0ZVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKIAkJcmV0dXJuIDA7CiAJfQotCQorCiAJbWNhc3RGaWx0ZXJTaXplX3A9ICh1bnNpZ25lZCBpbnQgKikgdmlvX2dldF9hdHRyaWJ1dGUoZGV2LCBWRVRIX01DQVNUX0ZJTFRFUl9TSVpFLCAwKTsKIAlpZighbWNhc3RGaWx0ZXJTaXplX3ApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIoJXM6JTMuM2QpIEVSUk9SOiBDYW4ndCBmaW5kICIKQEAgLTk0NSw3ICs5MzIsNyBAQAogCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyKSk7CiAKIAlpZighbmV0ZGV2KQpAQCAtOTYwLDEzICs5NDcsMTQgQEAKIAlhZGFwdGVyLT52ZGV2ID0gZGV2OwogCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKIAlhZGFwdGVyLT5tY2FzdEZpbHRlclNpemU9ICptY2FzdEZpbHRlclNpemVfcDsKLQkKKwlhZGFwdGVyLT5wb29sX2NvbmZpZyA9IDA7CisKIAkvKiAJU29tZSBvbGRlciBib3hlcyBydW5uaW5nIFBIWVAgbm9uLW5hdGl2ZWx5IGhhdmUgYW4gT0YgdGhhdAotCQlyZXR1cm5zIGEgOC1ieXRlIGxvY2FsLW1hYy1hZGRyZXNzIGZpZWxkIChhbmQgdGhlIGZpcnN0IAorCQlyZXR1cm5zIGEgOC1ieXRlIGxvY2FsLW1hYy1hZGRyZXNzIGZpZWxkIChhbmQgdGhlIGZpcnN0CiAJCTIgYnl0ZXMgaGF2ZSB0byBiZSBpZ25vcmVkKSB3aGlsZSBuZXdlciBib3hlcycgT0YgcmV0dXJuCi0JCWEgNi1ieXRlIGZpZWxkLiBOb3RlIHRoYXQgSUVFRSAxMjc1IHNwZWNpZmllcyB0aGF0IAorCQlhIDYtYnl0ZSBmaWVsZC4gTm90ZSB0aGF0IElFRUUgMTI3NSBzcGVjaWZpZXMgdGhhdAogCQlsb2NhbC1tYWMtYWRkcmVzcyBtdXN0IGJlIGEgNi1ieXRlIGZpZWxkLgotCQlUaGUgUlBBIGRvYyBzcGVjaWZpZXMgdGhhdCB0aGUgZmlyc3QgYnl0ZSBtdXN0IGJlIDEwYiwgc28gCisJCVRoZSBSUEEgZG9jIHNwZWNpZmllcyB0aGF0IHRoZSBmaXJzdCBieXRlIG11c3QgYmUgMTBiLCBzbwogCQl3ZSdsbCBqdXN0IGxvb2sgZm9yIGl0IHRvIHNvbHZlIHRoaXMgOCB2cy4gNiBieXRlIGZpZWxkIGlzc3VlICovCiAKIAlpZiAoKCptYWNfYWRkcl9wICYgMHgzKSAhPSAweDAyKQpAQCAtOTc2LDcgKzk2NCw3IEBACiAJbWVtY3B5KCZhZGFwdGVyLT5tYWNfYWRkciwgbWFjX2FkZHJfcCwgNik7CiAKIAlhZGFwdGVyLT5saW9ibiA9IGRldi0+aW9tbXVfdGFibGUtPml0X2luZGV4OwotCQorCiAJbmV0ZGV2LT5pcnEgPSBkZXYtPmlycTsKIAluZXRkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGlibXZldGhfb3BlbjsKIAluZXRkZXYtPnBvbGwgICAgICAgICAgICAgICA9IGlibXZldGhfcG9sbDsKQEAgLTk4OSwxNCArOTc3LDIxIEBACiAJbmV0ZGV2LT5ldGh0b29sX29wcyAgICAgICAgICAgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCW5ldGRldi0+Y2hhbmdlX210dSAgICAgICAgID0gaWJtdmV0aF9jaGFuZ2VfbXR1OwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmRldi0+ZGV2KTsKLSAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7IAorIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c3RhdHNfbG9jayk7CiAKIAltZW1jcHkoJm5ldGRldi0+ZGV2X2FkZHIsICZhZGFwdGVyLT5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKLQlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspCi0JCWlibXZldGhfaW5pdF9idWZmZXJfcG9vbCgmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLCBpLCAKLQkJCQkJIHBvb2xfY291bnRbaV0sIHBvb2xfc2l6ZVtpXSk7CisJZm9yKGkgPSAwOyBpPElibVZldGhOdW1CdWZmZXJQb29sczsgaSsrKSB7CisJCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXS5rb2JqOworCQlpYm12ZXRoX2luaXRfYnVmZmVyX3Bvb2woJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXSwgaSwKKwkJCQkJIHBvb2xfY291bnRbaV0sIHBvb2xfc2l6ZVtpXSwKKwkJCQkJIHBvb2xfYWN0aXZlW2ldKTsKKwkJa29iai0+cGFyZW50ID0gJmRldi0+ZGV2LmtvYmo7CisJCXNwcmludGYoa29iai0+bmFtZSwgInBvb2wlZCIsIGkpOworCQlrb2JqLT5rdHlwZSA9ICZrdHlwZV92ZXRoX3Bvb2w7CisJCWtvYmplY3RfcmVnaXN0ZXIoa29iaik7CisJfQogCiAJaWJtdmV0aF9kZWJ1Z19wcmludGsoImFkYXB0ZXIgQCAweCVwXG4iLCBhZGFwdGVyKTsKIApAQCAtMTAyNSw2ICsxMDIwLDEwIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+ZGV2LmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7CisJaW50IGk7CisKKwlmb3IoaSA9IDA7IGk8SWJtVmV0aE51bUJ1ZmZlclBvb2xzOyBpKyspCisJCWtvYmplY3RfdW5yZWdpc3RlcigmYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmtvYmopOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIApAQCAtMTA0OCw3ICsxMDQ3LDcgQEAKIAlyZW1vdmVfcHJvY19lbnRyeShJQk1WRVRIX1BST0NfRElSLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgKmlibXZldGhfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykgCitzdGF0aWMgdm9pZCAqaWJtdmV0aF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCWlmICgqcG9zID09IDApIHsKIAkJcmV0dXJuICh2b2lkICopMTsKQEAgLTEwNjMsMTggKzEwNjIsMTggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgaWJtdmV0aF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikgCitzdGF0aWMgdm9pZCBpYm12ZXRoX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogfQogCi1zdGF0aWMgaW50IGlibXZldGhfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpIAorc3RhdGljIGludCBpYm12ZXRoX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZXEtPnByaXZhdGU7CiAJY2hhciAqY3VycmVudF9tYWMgPSAoKGNoYXIqKSAmYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkcik7CiAJY2hhciAqZmlybXdhcmVfbWFjID0gKChjaGFyKikgJmFkYXB0ZXItPm1hY19hZGRyKSA7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiVzICVzXG5cbiIsIGlibXZldGhfZHJpdmVyX3N0cmluZywgaWJtdmV0aF9kcml2ZXJfdmVyc2lvbik7Ci0JCisKIAlzZXFfcHJpbnRmKHNlcSwgIlVuaXQgQWRkcmVzczogICAgMHgleFxuIiwgYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzKTsKIAlzZXFfcHJpbnRmKHNlcSwgIkxJT0JOOiAgICAgICAgICAgMHglbHhcbiIsIGFkYXB0ZXItPmxpb2JuKTsKIAlzZXFfcHJpbnRmKHNlcSwgIkN1cnJlbnQgTUFDOiAgICAgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCkBAIC0xMDgzLDcgKzEwODIsNyBAQAogCXNlcV9wcmludGYoc2VxLCAiRmlybXdhcmUgTUFDOiAgICAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKIAkJICAgZmlybXdhcmVfbWFjWzBdLCBmaXJtd2FyZV9tYWNbMV0sIGZpcm13YXJlX21hY1syXSwKIAkJICAgZmlybXdhcmVfbWFjWzNdLCBmaXJtd2FyZV9tYWNbNF0sIGZpcm13YXJlX21hY1s1XSk7Ci0JCisKIAlzZXFfcHJpbnRmKHNlcSwgIlxuQWRhcHRlciBTdGF0aXN0aWNzOlxuIik7CiAJc2VxX3ByaW50ZihzZXEsICIgIFRYOiAgc2tidWZmcyBsaW5lYXJpemVkOiAgICAgICAgICAlbGRcbiIsIGFkYXB0ZXItPnR4X2xpbmVhcml6ZWQpOwogCXNlcV9wcmludGYoc2VxLCAiICAgICAgIG11bHRpLWRlc2NyaXB0b3Igc2VuZHM6ICAgICAgJWxkXG4iLCBhZGFwdGVyLT50eF9tdWx0aWRlc2Nfc2VuZCk7CkBAIC0xMDk1LDcgKzEwOTQsNyBAQAogCXNlcV9wcmludGYoc2VxLCAiICAgICAgIGFkZCBidWZmZXIgZmFpbHVyZXM6ICAgICAgICAgJWxkXG4iLCBhZGFwdGVyLT5yZXBsZW5pc2hfYWRkX2J1ZmZfZmFpbHVyZSk7CiAJc2VxX3ByaW50ZihzZXEsICIgICAgICAgaW52YWxpZCBidWZmZXJzOiAgICAgICAgICAgICAlbGRcbiIsIGFkYXB0ZXItPnJ4X2ludmFsaWRfYnVmZmVyKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgICAgICBubyBidWZmZXJzOiAgICAgICAgICAgICAgICAgICVsZFxuIiwgYWRhcHRlci0+cnhfbm9fYnVmZmVyKTsKLQkKKwogCXJldHVybiAwOwogfQogc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpYm12ZXRoX3NlcV9vcHMgPSB7CkBAIC0xMTUzLDExICsxMTUyLDExIEBACiB9CiAKICNlbHNlIC8qIENPTkZJR19QUk9DX0ZTICovCi1zdGF0aWMgdm9pZCBpYm12ZXRoX3Byb2NfcmVnaXN0ZXJfYWRhcHRlcihzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyKSAKK3N0YXRpYyB2b2lkIGlibXZldGhfcHJvY19yZWdpc3Rlcl9hZGFwdGVyKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiB9CiAKLXN0YXRpYyB2b2lkIGlibXZldGhfcHJvY191bnJlZ2lzdGVyX2FkYXB0ZXIoc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlcikgCitzdGF0aWMgdm9pZCBpYm12ZXRoX3Byb2NfdW5yZWdpc3Rlcl9hZGFwdGVyKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiB9CiBzdGF0aWMgdm9pZCBpYm12ZXRoX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKHZvaWQpCkBAIC0xMTY5LDYgKzExNjgsMTMyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgdmV0aF9hY3RpdmVfYXR0cjsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHZldGhfbnVtX2F0dHI7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSB2ZXRoX3NpemVfYXR0cjsKKworc3RhdGljIHNzaXplX3QgdmV0aF9wb29sX3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKiBidWYpCit7CisJc3RydWN0IGlibXZldGhfYnVmZl9wb29sICpwb29sID0gY29udGFpbmVyX29mKGtvYmosCisJCQkJCQkgICAgICBzdHJ1Y3QgaWJtdmV0aF9idWZmX3Bvb2wsCisJCQkJCQkgICAgICBrb2JqKTsKKworCWlmIChhdHRyID09ICZ2ZXRoX2FjdGl2ZV9hdHRyKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG9vbC0+YWN0aXZlKTsKKwllbHNlIGlmIChhdHRyID09ICZ2ZXRoX251bV9hdHRyKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG9vbC0+c2l6ZSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmdmV0aF9zaXplX2F0dHIpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb29sLT5idWZmX3NpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB2ZXRoX3Bvb2xfc3RvcmUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwKK2NvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaWJtdmV0aF9idWZmX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yoa29iaiwKKwkJCQkJCSAgICAgIHN0cnVjdCBpYm12ZXRoX2J1ZmZfcG9vbCwKKwkJCQkJCSAgICAgIGtvYmopOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPQorCSAgICBjb250YWluZXJfb2Yoa29iai0+cGFyZW50LCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKwlsb25nIHZhbHVlID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlsb25nIHJjOworCisJaWYgKGF0dHIgPT0gJnZldGhfYWN0aXZlX2F0dHIpIHsKKwkJaWYgKHZhbHVlICYmICFwb29sLT5hY3RpdmUpIHsKKwkJCWlmKGlibXZldGhfYWxsb2NfYnVmZmVyX3Bvb2wocG9vbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWJtdmV0aF9lcnJvcl9wcmludGsoInVuYWJsZSB0byBhbGxvYyBwb29sXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQlwb29sLT5hY3RpdmUgPSAxOworCQkJYWRhcHRlci0+cG9vbF9jb25maWcgPSAxOworCQkJaWJtdmV0aF9jbG9zZShuZXRkZXYpOworCQkJYWRhcHRlci0+cG9vbF9jb25maWcgPSAwOworCQkJaWYgKChyYyA9IGlibXZldGhfb3BlbihuZXRkZXYpKSkKKwkJCQlyZXR1cm4gcmM7CisJCX0gZWxzZSBpZiAoIXZhbHVlICYmIHBvb2wtPmFjdGl2ZSkgeworCQkJaW50IG10dSA9IG5ldGRldi0+bXR1ICsgSUJNVkVUSF9CVUZGX09IOworCQkJaW50IGk7CisJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBidWZmZXIgcG9vbCB3aXRoIGJ1ZmZlcnMgdGhhdAorCQkJICAgY2FuIGhvbGQgYSBwYWNrZXQgb2YgdGhlIHNpemUgb2YgdGhlIE1UVSAqLworCQkJZm9yKGkgPSAwOyBpPElibVZldGhOdW1CdWZmZXJQb29sczsgaSsrKSB7CisJCQkJaWYgKHBvb2wgPT0gJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtpXSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCFhZGFwdGVyLT5yeF9idWZmX3Bvb2xbaV0uYWN0aXZlKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAobXR1IDwgYWRhcHRlci0+cnhfYnVmZl9wb29sW2ldLmJ1ZmZfc2l6ZSkgeworCQkJCQlwb29sLT5hY3RpdmUgPSAwOworCQkJCQloX2ZyZWVfbG9naWNhbF9sYW5fYnVmZmVyKGFkYXB0ZXItPgorCQkJCQkJCQkgIHZkZXYtPgorCQkJCQkJCQkgIHVuaXRfYWRkcmVzcywKKwkJCQkJCQkJICBwb29sLT4KKwkJCQkJCQkJICBidWZmX3NpemUpOworCQkJCX0KKwkJCX0KKwkJCWlmIChwb29sLT5hY3RpdmUpIHsKKwkJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygibm8gYWN0aXZlIHBvb2wgPj0gTVRVXG4iKTsKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChhdHRyID09ICZ2ZXRoX251bV9hdHRyKSB7CisJCWlmICh2YWx1ZSA8PSAwIHx8IHZhbHVlID4gSUJNVkVUSF9NQVhfUE9PTF9DT1VOVCkKKwkJCXJldHVybiAtRUlOVkFMOworCQllbHNlIHsKKwkJCWFkYXB0ZXItPnBvb2xfY29uZmlnID0gMTsKKwkJCWlibXZldGhfY2xvc2UobmV0ZGV2KTsKKwkJCWFkYXB0ZXItPnBvb2xfY29uZmlnID0gMDsKKwkJCXBvb2wtPnNpemUgPSB2YWx1ZTsKKwkJCWlmICgocmMgPSBpYm12ZXRoX29wZW4obmV0ZGV2KSkpCisJCQkJcmV0dXJuIHJjOworCQl9CisJfSBlbHNlIGlmIChhdHRyID09ICZ2ZXRoX3NpemVfYXR0cikgeworCQlpZiAodmFsdWUgPD0gSUJNVkVUSF9CVUZGX09IIHx8IHZhbHVlID4gSUJNVkVUSF9NQVhfQlVGX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQlhZGFwdGVyLT5wb29sX2NvbmZpZyA9IDE7CisJCQlpYm12ZXRoX2Nsb3NlKG5ldGRldik7CisJCQlhZGFwdGVyLT5wb29sX2NvbmZpZyA9IDA7CisJCQlwb29sLT5idWZmX3NpemUgPSB2YWx1ZTsKKwkJCWlmICgocmMgPSBpYm12ZXRoX29wZW4obmV0ZGV2KSkpCisJCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJLyoga2ljayB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gYWxsb2NhdGUvZGVhbGxvY2F0ZSBwb29scyAqLworCWlibXZldGhfaW50ZXJydXB0KG5ldGRldi0+aXJxLCBuZXRkZXYsIE5VTEwpOworCXJldHVybiBjb3VudDsKK30KKworCisjZGVmaW5lIEFUVFIoX25hbWUsIF9tb2RlKSAgICAgIFwKKyAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSB2ZXRoXyMjX25hbWUjI19hdHRyID0geyAgICAgICAgICAgICAgIFwKKyAgICAgICAgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUsIC5vd25lciA9IFRISVNfTU9EVUxFIFwKKyAgICAgICAgfTsKKworc3RhdGljIEFUVFIoYWN0aXZlLCAwNjQ0KTsKK3N0YXRpYyBBVFRSKG51bSwgMDY0NCk7CitzdGF0aWMgQVRUUihzaXplLCAwNjQ0KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiB2ZXRoX3Bvb2xfYXR0cnNbXSA9IHsKKwkmdmV0aF9hY3RpdmVfYXR0ciwKKwkmdmV0aF9udW1fYXR0ciwKKwkmdmV0aF9zaXplX2F0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHZldGhfcG9vbF9vcHMgPSB7CisJLnNob3cgICA9IHZldGhfcG9vbF9zaG93LAorCS5zdG9yZSAgPSB2ZXRoX3Bvb2xfc3RvcmUsCit9OworCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBrdHlwZV92ZXRoX3Bvb2wgPSB7CisJLnJlbGVhc2UgICAgICAgID0gTlVMTCwKKwkuc3lzZnNfb3BzICAgICAgPSAmdmV0aF9wb29sX29wcywKKwkuZGVmYXVsdF9hdHRycyAgPSB2ZXRoX3Bvb2xfYXR0cnMsCit9OworCisKIHN0YXRpYyBzdHJ1Y3QgdmlvX2RldmljZV9pZCBpYm12ZXRoX2RldmljZV90YWJsZVtdIF9fZGV2aW5pdGRhdGE9IHsKIAl7ICJuZXR3b3JrIiwgIklCTSxsLWxhbiJ9LAogCXsgIiIsICIiIH0KQEAgLTExOTgsNyArMTMyMyw3IEBACiB7CiAJdmlvX3VucmVnaXN0ZXJfZHJpdmVyKCZpYm12ZXRoX2RyaXZlcik7CiAJaWJtdmV0aF9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKCk7Ci19CQorfQogCiBtb2R1bGVfaW5pdChpYm12ZXRoX21vZHVsZV9pbml0KTsKIG1vZHVsZV9leGl0KGlibXZldGhfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5oIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5oCmluZGV4IDQ2OTE5YTguLjgzODViZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguaAorKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmgKQEAgLTc1LDEwICs3NSwxMyBAQAogCiAjZGVmaW5lIElibVZldGhOdW1CdWZmZXJQb29scyA1CiAjZGVmaW5lIElCTVZFVEhfQlVGRl9PSCAyMiAvKiBPdmVyaGVhZDogMTQgZXRoZXJuZXQgaGVhZGVyICsgOCBvcGFxdWUgaGFuZGxlICovCisjZGVmaW5lIElCTVZFVEhfTUFYX01UVSA2OAorI2RlZmluZSBJQk1WRVRIX01BWF9QT09MX0NPVU5UIDQwOTYKKyNkZWZpbmUgSUJNVkVUSF9NQVhfQlVGX1NJWkUgKDEwMjQgKiAxMjgpCiAKLS8qIHBvb2xfc2l6ZSBzaG91bGQgYmUgc29ydGVkICovCiBzdGF0aWMgaW50IHBvb2xfc2l6ZVtdID0geyA1MTIsIDEwMjQgKiAyLCAxMDI0ICogMTYsIDEwMjQgKiAzMiwgMTAyNCAqIDY0IH07CiBzdGF0aWMgaW50IHBvb2xfY291bnRbXSA9IHsgMjU2LCA3NjgsIDI1NiwgMjU2LCAyNTYgfTsKK3N0YXRpYyBpbnQgcG9vbF9hY3RpdmVbXSA9IHsgMSwgMSwgMCwgMCwgMH07CiAKICNkZWZpbmUgSUJNX1ZFVEhfSU5WQUxJRF9NQVAgKCh1MTYpMHhmZmZmKQogCkBAIC05NCw2ICs5Nyw3IEBACiAgICAgZG1hX2FkZHJfdCAqZG1hX2FkZHI7CiAgICAgc3RydWN0IHNrX2J1ZmYgKipza2J1ZmY7CiAgICAgaW50IGFjdGl2ZTsKKyAgICBzdHJ1Y3Qga29iamVjdCBrb2JqOwogfTsKIAogc3RydWN0IGlibXZldGhfcnhfcSB7CkBAIC0xMTgsNiArMTIyLDcgQEAKICAgICBkbWFfYWRkcl90IGZpbHRlcl9saXN0X2RtYTsKICAgICBzdHJ1Y3QgaWJtdmV0aF9idWZmX3Bvb2wgcnhfYnVmZl9wb29sW0libVZldGhOdW1CdWZmZXJQb29sc107CiAgICAgc3RydWN0IGlibXZldGhfcnhfcSByeF9xdWV1ZTsKKyAgICBpbnQgcG9vbF9jb25maWc7CiAKICAgICAvKiBhZGFwdGVyIHNwZWNpZmljIHN0YXRzICovCiAgICAgdTY0IHJlcGxlbmlzaF90YXNrX2N5Y2xlczsKQEAgLTEzNCw3ICsxMzksNyBAQAogICAgIHNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKIH07CiAKLXN0cnVjdCBpYm12ZXRoX2J1Zl9kZXNjX2ZpZWxkcyB7CQorc3RydWN0IGlibXZldGhfYnVmX2Rlc2NfZmllbGRzIHsKICAgICB1MzIgdmFsaWQgOiAxOwogICAgIHUzMiB0b2dnbGUgOiAxOwogICAgIHUzMiByZXNlcnZlZCA6IDY7CkBAIC0xNDMsNyArMTQ4LDcgQEAKIH07CiAKIHVuaW9uIGlibXZldGhfYnVmX2Rlc2MgewotICAgIHU2NCBkZXNjOwkKKyAgICB1NjQgZGVzYzsKICAgICBzdHJ1Y3QgaWJtdmV0aF9idWZfZGVzY19maWVsZHMgZmllbGRzOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWZiLmMgYi9kcml2ZXJzL25ldC9pZmIuYwppbmRleCAzMWZiMmQ3Li4yZTIyMmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZmIuYworKysgYi9kcml2ZXJzL25ldC9pZmIuYwpAQCAtNzYsMTMgKzc2LDEzIEBACiAJZHAtPnN0X3Rhc2tfZW50ZXIrKzsKIAlpZiAoKHNrYiA9IHNrYl9wZWVrKCZkcC0+dHEpKSA9PSBOVUxMKSB7CiAJCWRwLT5zdF90eHFfcmVmbF90cnkrKzsKLQkJaWYgKHNwaW5fdHJ5bG9jaygmX2Rldi0+eG1pdF9sb2NrKSkgeworCQlpZiAobmV0aWZfdHhfdHJ5bG9jayhfZGV2KSkgewogCQkJZHAtPnN0X3J4cV9lbnRlcisrOwogCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZHAtPnJxKSkgIT0gTlVMTCkgewogCQkJCXNrYl9xdWV1ZV90YWlsKCZkcC0+dHEsIHNrYik7CiAJCQkJZHAtPnN0X3J4MnR4X3RyYW4rKzsKIAkJCX0KLQkJCXNwaW5fdW5sb2NrKCZfZGV2LT54bWl0X2xvY2spOworCQkJbmV0aWZfdHhfdW5sb2NrKF9kZXYpOwogCQl9IGVsc2UgewogCQkJLyogcmVzY2hlZHVsZSAqLwogCQkJZHAtPnN0X3J4cV9ub3RlbnRlcisrOwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCX0KIAl9CiAKLQlpZiAoc3Bpbl90cnlsb2NrKCZfZGV2LT54bWl0X2xvY2spKSB7CisJaWYgKG5ldGlmX3R4X3RyeWxvY2soX2RldikpIHsKIAkJZHAtPnN0X3J4cV9jaGVjaysrOwogCQlpZiAoKHNrYiA9IHNrYl9wZWVrKCZkcC0+cnEpKSA9PSBOVUxMKSB7CiAJCQlkcC0+dGFza2xldF9wZW5kaW5nID0gMDsKQEAgLTExOCwxMCArMTE4LDEwIEBACiAJCQkJbmV0aWZfd2FrZV9xdWV1ZShfZGV2KTsKIAkJfSBlbHNlIHsKIAkJCWRwLT5zdF9yeHFfcnNjaCsrOwotCQkJc3Bpbl91bmxvY2soJl9kZXYtPnhtaXRfbG9jayk7CisJCQluZXRpZl90eF91bmxvY2soX2Rldik7CiAJCQlnb3RvIHJlc2NoZWQ7CiAJCX0KLQkJc3Bpbl91bmxvY2soJl9kZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X3VubG9jayhfZGV2KTsKIAl9IGVsc2UgewogcmVzY2hlZDoKIAkJZHAtPnRhc2tsZXRfcGVuZGluZyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcgYi9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKaW5kZXggNWU2ZDAwNy4uZDJjZTQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZwpAQCAtMzMsNyArMzMsNyBAQAogCiBjb25maWcgRVNJX0RPTkdMRQogCXRyaXN0YXRlICJFU0kgSmV0RXllIFBDIGRvbmdsZSIKLQlkZXBlbmRzIG9uIERPTkdMRSAmJiBJUkRBCisJZGVwZW5kcyBvbiBJUlRUWV9TSVIgJiYgRE9OR0xFICYmIElSREEKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBFeHRlbmRlZCBTeXN0ZW1zCiAJICBKZXRFeWUgUEMgZG9uZ2xlLiAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIEVTSQpAQCAtNDQsNyArNDQsNyBAQAogCiBjb25maWcgQUNUSVNZU19ET05HTEUKIAl0cmlzdGF0ZSAiQUNUaVNZUyBJUi0yMjBMIGFuZCBJUjIyMEwrIGRvbmdsZSIKLQlkZXBlbmRzIG9uIERPTkdMRSAmJiBJUkRBCisJZGVwZW5kcyBvbiBJUlRUWV9TSVIgJiYgRE9OR0xFICYmIElSREEKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBBQ1RpU1lTIElSLTIyMEwgYW5kCiAJICBJUjIyMEwrIGRvbmdsZXMuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKQEAgLTU1LDcgKzU1LDcgQEAKIAogY29uZmlnIFRFS1JBTV9ET05HTEUKIAl0cmlzdGF0ZSAiVGVrcmFtIElyTWF0ZSAyMTBCIGRvbmdsZSIKLQlkZXBlbmRzIG9uIERPTkdMRSAmJiBJUkRBCisJZGVwZW5kcyBvbiBJUlRUWV9TSVIgJiYgRE9OR0xFICYmIElSREEKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBUZWtyYW0gSXJNYXRlIDIxMEIKIAkgIGRvbmdsZS4gIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBUZWtyYW0gZG9uZ2xlCkBAIC02Niw3ICs2Niw3IEBACiAKIGNvbmZpZyBUT0lNMzIzMl9ET05HTEUKIAl0cmlzdGF0ZSAiVE9JTTMyMzIgSXJEYSBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgVmlzaGF5L1RlbWljCiAJICBUT0lNMzIzMiBhbmQgVE9JTTQyMzIgYmFzZWQgZG9uZ2xlcy4KQEAgLTc0LDcgKzc0LDcgQEAKIAogY29uZmlnIExJVEVMSU5LX0RPTkdMRQogCXRyaXN0YXRlICJQYXJhbGxheCBMaXRlTGluayBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgUGFyYWxsYXggTGl0ZWxpbmsKIAkgIGRvbmdsZS4gIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBUaGUgUGFyYWxsYXgKQEAgLTg1LDcgKzg1LDcgQEAKIAogY29uZmlnIE1BNjAwX0RPTkdMRQogCXRyaXN0YXRlICJNb2JpbGUgQWN0aW9uIE1BNjAwIGRvbmdsZSIKLQlkZXBlbmRzIG9uIERPTkdMRSAmJiBJUkRBICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIE1vYmlsZSBBY3Rpb24gTUE2MDAKIAkgIGRvbmdsZS4gIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBNQTYwMCBkb25nbGUKQEAgLTk4LDcgKzk4LDcgQEAKIAogY29uZmlnIEdJUkJJTF9ET05HTEUKIAl0cmlzdGF0ZSAiR3JlZW53aWNoIEdJckJJTCBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBHcmVlbndpY2ggR0lyQklMCiAJICBkb25nbGUuICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgpAQCAtMTA5LDcgKzEwOSw3IEBACiAKIGNvbmZpZyBNQ1AyMTIwX0RPTkdMRQogCXRyaXN0YXRlICJNaWNyb2NoaXAgTUNQMjEyMCIKLQlkZXBlbmRzIG9uIERPTkdMRSAmJiBJUkRBICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvY2hpcCBNQ1AyMTIwCiAJICBkb25nbGUuICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgpAQCAtMTIzLDcgKzEyMyw3IEBACiAKIGNvbmZpZyBPTERfQkVMS0lOX0RPTkdMRQogCXRyaXN0YXRlICJPbGQgQmVsa2luIGRvbmdsZSIKLQlkZXBlbmRzIG9uIERPTkdMRSAmJiBJUkRBICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSVJUVFlfU0lSICYmIERPTkdMRSAmJiBJUkRBICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIEFkYXB0ZWMgQWlycG9ydCAxMDAwCiAJICBhbmQgMjAwMCBkb25nbGVzLiAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlCkBAIC0xMzIsNyArMTMyLDcgQEAKIAogY29uZmlnIEFDVDIwMExfRE9OR0xFCiAJdHJpc3RhdGUgIkFDVGlTWVMgSVItMjAwTCBkb25nbGUiCi0JZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIElSVFRZX1NJUiAmJiBET05HTEUgJiYgSVJEQSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBBQ1RpU1lTIElSLTIwMEwKIAkgIGRvbmdsZS4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KQEAgLTQxNyw1ICs0MTcsMjAgQEAKIAkgIGF2YWlsYWJsZSBjYXBhYmlsaXRpZXMgbWF5IHZhcnkgZnJvbSBvbmUgUFhBMnh4IHRhcmdldCB0bwogCSAgYW5vdGhlci4KIAorY29uZmlnIE1DU19GSVIKKwl0cmlzdGF0ZSAiTW9zQ2hpcCBNQ1M3NzgwIElyREEtVVNCIGRvbmdsZSIKKwlkZXBlbmRzIG9uIElSREEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgTW9zQ2hpcAorCSAgTUNTNzc4MCBJckRBLVVTQiBicmlkZ2UgZGV2aWNlIGRyaXZlci4KKworCSAgVVNCIGJyaWRnZSBiYXNlZCBvbiB0aGUgTW9zQ2hpcCBNQ1M3NzgwIGRvbid0IGNvbmZvcm0gdG8gdGhlCisJICBJckRBLVVTQiBkZXZpY2UgY2xhc3Mgc3BlY2lmaWNhdGlvbiwgYW5kIHRoZXJlZm9yZSBuZWVkIHRoZWlyCisJICBvd24gc3BlY2lmaWMgZHJpdmVyLiBUaG9zZSBkb25nbGVzIHN1cHBvcnQgU0lSIGFuZCBGSVIgKDRNYnBzKQorCSAgc3BlZWRzLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICBtY3M3NzgwLgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCmluZGV4IGMxY2UyMzkuLjViZTA5ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogb2JqLSQoQ09ORklHX1ZMU0lfRklSKQkJKz0gdmxzaV9pci5vCiBvYmotJChDT05GSUdfVklBX0ZJUikJCSs9IHZpYS1pcmNjLm8KIG9iai0kKENPTkZJR19QWEFfRklDUCkJICAgICAgICArPSBweGFmaWNwX2lyLm8KK29iai0kKENPTkZJR19NQ1NfRklSKQkgICAgICAgICs9IG1jczc3ODAubwogIyBPbGQgZG9uZ2xlIGRyaXZlcnMgZm9yIG9sZCBTSVIgZHJpdmVycwogb2JqLSQoQ09ORklHX0VTSV9ET05HTEVfT0xEKQkJKz0gZXNpLm8KIG9iai0kKENPTkZJR19URUtSQU1fRE9OR0xFX09MRCkJKz0gdGVrcmFtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYwppbmRleCAyZTc4ODJlLi5iZjFmY2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCkBAIC0zNCwxNCArMzQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX2xlZ2FjeS5oPgotCiAjaW5jbHVkZSA8bmV0L2lyZGEvd3JhcHBlci5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPgpAQCAtNTEsNyArNDksMTkgQEAKICNkZWZpbmUgQ0hJUF9JT19FWFRFTlQgOAogI2RlZmluZSBCUk9LRU5fRE9OR0xFX0lECiAKLXN0YXRpYyBjaGFyICpkcml2ZXJfbmFtZSA9ICJhbGktaXJjYyI7CisjZGVmaW5lIEFMSV9JUkNDX0RSSVZFUl9OQU1FICJhbGktaXJjYyIKKworLyogUG93ZXIgTWFuYWdlbWVudCAqLworc3RhdGljIGludCBhbGlfaXJjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgYWxpX2lyY2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFsaV9pcmNjX2RyaXZlciA9IHsKKwkuc3VzcGVuZAk9IGFsaV9pcmNjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhbGlfaXJjY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gQUxJX0lSQ0NfRFJJVkVSX05BTUUsCisJfSwKK307CiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiBzdGF0aWMgaW50IHFvc19tdHRfYml0cyA9IDB4MDc7ICAvKiAxIG1zIG9yIG1vcmUgKi8KQEAgLTk3LDEwICsxMDcsNyBAQAogc3RhdGljIGludCAgYWxpX2lyY2NfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50ICBhbGlfaXJjY19uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50ICBhbGlfaXJjY19uZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgaW50ICBhbGlfaXJjY19wbXByb2Moc3RydWN0IHBtX2RldiAqZGV2LCBwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgdm9pZCBhbGlfaXJjY19jaGFuZ2Vfc3BlZWQoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmLCBfX3UzMiBiYXVkKTsKLXN0YXRpYyB2b2lkIGFsaV9pcmNjX3N1c3BlbmQoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKTsKLXN0YXRpYyB2b2lkIGFsaV9pcmNjX3dha2V1cChzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphbGlfaXJjY19uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBTSVIgZnVuY3Rpb24gKi8KQEAgLTE0NSw2ICsxNTIsMTQgQEAKIAlpbnQgaSA9IDA7CiAJCiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLSBTdGFydCAtLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhbGlfaXJjY19kcml2ZXIpOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgSVJEQV9FUlJPUigiJXMsIENhbid0IHJlZ2lzdGVyIGRyaXZlciFcbiIsCisJCQkgICBBTElfSVJDQ19EUklWRVJfTkFNRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCiAJCiAJLyogUHJvYmUgZm9yIGFsbCB0aGUgQUxpIGNoaXBzZXRzIHdlIGtub3cgYWJvdXQgKi8KIAlmb3IgKGNoaXA9IGNoaXBzOyBjaGlwLT5uYW1lOyBjaGlwKyssIGkrKykgCkBAIC0yMTQsNiArMjI5LDEwIEBACiAJfQkJCiAJCQogCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0tIEVuZCAtLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fKTsJCQkJCSAgIAkJCisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWxpX2lyY2NfZHJpdmVyKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyOCwxNCArMjQ3LDE0IEBACiAJaW50IGk7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IC0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fRlVOQ1RJT05fXyk7CQotCQotCXBtX3VucmVnaXN0ZXJfYWxsKGFsaV9pcmNjX3BtcHJvYyk7CiAKIAlmb3IgKGk9MDsgaSA8IDQ7IGkrKykgewogCQlpZiAoZGV2X3NlbGZbaV0pCiAJCQlhbGlfaXJjY19jbG9zZShkZXZfc2VsZltpXSk7CiAJfQogCQorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhbGlfaXJjY19kcml2ZXIpOworCiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18pOwogfQogCkBAIC0yNDksNyArMjY4LDYgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZjsKLQlzdHJ1Y3QgcG1fZGV2ICpwbWRldjsKIAlpbnQgZG9uZ2xlX2lkOwogCWludCBlcnI7CiAJCQkKQEAgLTI4NCw3ICszMDIsOCBAQAogICAgICAgICBzZWxmLT5pby5maWZvX3NpemUgPSAxNjsJCS8qIFNJUjogMTYsIEZJUjogMzIgQmVuamFtaW4gMjAwMC8xMS8xICovCiAJCiAJLyogUmVzZXJ2ZSB0aGUgaW9wb3J0cyB0aGF0IHdlIG5lZWQgKi8KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKHNlbGYtPmlvLmZpcl9iYXNlLCBzZWxmLT5pby5maXJfZXh0LCBkcml2ZXJfbmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHNlbGYtPmlvLmZpcl9iYXNlLCBzZWxmLT5pby5maXJfZXh0LAorCQkJICAgIEFMSV9JUkNDX0RSSVZFUl9OQU1FKSkgewogCQlJUkRBX1dBUk5JTkcoIiVzKCksIGNhbid0IGdldCBpb2Jhc2Ugb2YgMHglMDN4XG4iLCBfX0ZVTkNUSU9OX18sCiAJCQlzZWxmLT5pby5maXJfYmFzZSk7CiAJCWVyciA9IC1FTk9ERVY7CkBAIC0zNTQsMTMgKzM3MywxMCBAQAogCiAJLyogQ2hlY2sgZG9uZ2xlIGlkICovCiAJZG9uZ2xlX2lkID0gYWxpX2lyY2NfcmVhZF9kb25nbGVfaWQoaSwgaW5mbyk7Ci0JSVJEQV9NRVNTQUdFKCIlcygpLCAlcywgRm91bmQgZG9uZ2xlOiAlc1xuIiwgX19GVU5DVElPTl9fLCBkcml2ZXJfbmFtZSwgZG9uZ2xlX3R5cGVzW2RvbmdsZV9pZF0pOworCUlSREFfTUVTU0FHRSgiJXMoKSwgJXMsIEZvdW5kIGRvbmdsZTogJXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJICAgICBBTElfSVJDQ19EUklWRVJfTkFNRSwgZG9uZ2xlX3R5cGVzW2RvbmdsZV9pZF0pOwogCQkKIAlzZWxmLT5pby5kb25nbGVfaWQgPSBkb25nbGVfaWQ7Ci0JCi0gICAgICAgIHBtZGV2ID0gcG1fcmVnaXN0ZXIoUE1fU1lTX0RFViwgUE1fU1lTX0lSREEsIGFsaV9pcmNjX3BtcHJvYyk7Ci0gICAgICAgIGlmIChwbWRldikKLSAgICAgICAgICAgICAgICBwbWRldi0+ZGF0YSA9IHNlbGY7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCkBAIC01NDgsMTIgKzU2NCwxMSBAQAogCS8qIFNob3VsZCBiZSAweDAwIGluIHRoZSBNMTUzNS9NMTUzNUQgKi8KIAlpZih2ZXJzaW9uICE9IDB4MDApCiAJewotCQlJUkRBX0VSUk9SKCIlcywgV3JvbmcgY2hpcCB2ZXJzaW9uICUwMnhcbiIsIGRyaXZlcl9uYW1lLCB2ZXJzaW9uKTsKKwkJSVJEQV9FUlJPUigiJXMsIFdyb25nIGNoaXAgdmVyc2lvbiAlMDJ4XG4iLAorCQkJICAgQUxJX0lSQ0NfRFJJVkVSX05BTUUsIHZlcnNpb24pOwogCQlyZXR1cm4gLTE7CiAJfQogCQotCS8vIElSREFfTUVTU0FHRSgiJXMsIEZvdW5kIGNoaXAgYXQgYmFzZT0weCUwM3hcbiIsIGRyaXZlcl9uYW1lLCBpbmZvLT5jZmdfYmFzZSk7Ci0JCiAJLyogU2V0IEZJUiBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAqLwogCXN3aXRjaF9iYW5rKGlvYmFzZSwgQkFOSzEpOwogCW91dGIoUlhfRklGT19UaHJlc2hvbGQsIGlvYmFzZStGSVJfRklGT19UUik7CkBAIC01ODMsNyArNTk4LDggQEAKIAkvKiBTd2l0Y2ggdG8gU0lSIHNwYWNlICovCiAJRklSMlNJUihpb2Jhc2UpOwogCQotCUlSREFfTUVTU0FHRSgiJXMsIGRyaXZlciBsb2FkZWQgKEJlbmphbWluIEtvbmcpXG4iLCBkcml2ZXJfbmFtZSk7CisJSVJEQV9NRVNTQUdFKCIlcywgZHJpdmVyIGxvYWRlZCAoQmVuamFtaW4gS29uZylcbiIsCisJCSAgICAgQUxJX0lSQ0NfRFJJVkVSX05BTUUpOwogCQogCS8qIEVuYWJsZSByZWNlaXZlIGludGVycnVwdHMgKi8gCiAJLy8gb3V0YihVQVJUX0lFUl9SREksIGlvYmFzZStVQVJUX0lFUik7IC8vYmVuamFtaW4gMjAwMC8xMS8yMyAwMToyNVBNCkBAIC02NDcsNyArNjYzLDggQEAKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IC0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQogIAlpZiAoIWRldikgewotCQlJUkRBX1dBUk5JTkcoIiVzOiBpcnEgJWQgZm9yIHVua25vd24gZGV2aWNlLlxuIiwgZHJpdmVyX25hbWUsIGlycSk7CisJCUlSREFfV0FSTklORygiJXM6IGlycSAlZCBmb3IgdW5rbm93biBkZXZpY2UuXG4iLAorCQkJICAgICBBTElfSVJDQ19EUklWRVJfTkFNRSwgaXJxKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0JCiAJCkBAIC0xMzI4LDcgKzEzNDUsOCBAQAogCS8qIFJlcXVlc3QgSVJRIGFuZCBpbnN0YWxsIEludGVycnVwdCBIYW5kbGVyICovCiAJaWYgKHJlcXVlc3RfaXJxKHNlbGYtPmlvLmlycSwgYWxpX2lyY2NfaW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldikpIAogCXsKLQkJSVJEQV9XQVJOSU5HKCIlcywgdW5hYmxlIHRvIGFsbG9jYXRlIGlycT0lZFxuIiwgZHJpdmVyX25hbWUsCisJCUlSREFfV0FSTklORygiJXMsIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnE9JWRcbiIsCisJCQkgICAgIEFMSV9JUkNDX0RSSVZFUl9OQU1FLAogCQkJICAgICBzZWxmLT5pby5pcnEpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CkBAIC0xMzM4LDcgKzEzNTYsOCBAQAogCSAqIGZhaWx1cmUuCiAJICovCiAJaWYgKHJlcXVlc3RfZG1hKHNlbGYtPmlvLmRtYSwgZGV2LT5uYW1lKSkgewotCQlJUkRBX1dBUk5JTkcoIiVzLCB1bmFibGUgdG8gYWxsb2NhdGUgZG1hPSVkXG4iLCBkcml2ZXJfbmFtZSwKKwkJSVJEQV9XQVJOSU5HKCIlcywgdW5hYmxlIHRvIGFsbG9jYXRlIGRtYT0lZFxuIiwKKwkJCSAgICAgQUxJX0lSQ0NfRFJJVkVSX05BTUUsCiAJCQkgICAgIHNlbGYtPmlvLmRtYSk7CiAJCWZyZWVfaXJxKHNlbGYtPmlvLmlycSwgc2VsZik7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtMjEwOCw2MCArMjEyNywzNyBAQAogCXJldHVybiAmc2VsZi0+c3RhdHM7CiB9CiAKLXN0YXRpYyB2b2lkIGFsaV9pcmNjX3N1c3BlbmQoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKQorc3RhdGljIGludCBhbGlfaXJjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0gU3RhcnQgLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fICk7CisJc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAkKLQlJUkRBX01FU1NBR0UoIiVzLCBTdXNwZW5kaW5nXG4iLCBkcml2ZXJfbmFtZSk7CisJSVJEQV9NRVNTQUdFKCIlcywgU3VzcGVuZGluZ1xuIiwgQUxJX0lSQ0NfRFJJVkVSX05BTUUpOwogCiAJaWYgKHNlbGYtPmlvLnN1c3BlbmRlZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWFsaV9pcmNjX25ldF9jbG9zZShzZWxmLT5uZXRkZXYpOwogCiAJc2VsZi0+aW8uc3VzcGVuZGVkID0gMTsKIAkKLQlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18gKTsJCi19Ci0KLXN0YXRpYyB2b2lkIGFsaV9pcmNjX3dha2V1cChzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGYpCi17Ci0JSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLSBTdGFydCAtLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKLQlpZiAoIXNlbGYtPmlvLnN1c3BlbmRlZCkKLQkJcmV0dXJuOwotCQotCWFsaV9pcmNjX25ldF9vcGVuKHNlbGYtPm5ldGRldik7Ci0JCi0JSVJEQV9NRVNTQUdFKCIlcywgV2FraW5nIHVwXG4iLCBkcml2ZXJfbmFtZSk7Ci0KLQlzZWxmLT5pby5zdXNwZW5kZWQgPSAwOwotCQotCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0tIEVuZCAtLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fRlVOQ1RJT05fXyApOwkKLX0KLQotc3RhdGljIGludCBhbGlfaXJjY19wbXByb2Moc3RydWN0IHBtX2RldiAqZGV2LCBwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSkKLXsKLSAgICAgICAgc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmID0gKHN0cnVjdCBhbGlfaXJjY19jYiopIGRldi0+ZGF0YTsKLSAgICAgICAgCi0gICAgICAgIElSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0gU3RhcnQgLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19GVU5DVElPTl9fICk7Ci0JCi0gICAgICAgIGlmIChzZWxmKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChycXN0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBQTV9TVVNQRU5EOgotICAgICAgICAgICAgICAgICAgICAgICAgYWxpX2lyY2Nfc3VzcGVuZChzZWxmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUE1fUkVTVU1FOgotICAgICAgICAgICAgICAgICAgICAgICAgYWxpX2lyY2Nfd2FrZXVwKHNlbGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX0ZVTkNUSU9OX18gKTsJCi0gICAgICAgIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFsaV9pcmNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwkKKwlpZiAoIXNlbGYtPmlvLnN1c3BlbmRlZCkKKwkJcmV0dXJuIDA7CisJCisJYWxpX2lyY2NfbmV0X29wZW4oc2VsZi0+bmV0ZGV2KTsKKwkKKwlJUkRBX01FU1NBR0UoIiVzLCBXYWtpbmcgdXBcbiIsIEFMSV9JUkNDX0RSSVZFUl9OQU1FKTsKKworCXNlbGYtPmlvLnN1c3BlbmRlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KIAogLyogQUxpIENoaXAgRnVuY3Rpb24gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IGNkODc1OTMuLjg0NGZhNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTgzLDkgKzgzLDkgQEAKIAkvKiBFeHRlbmRlZCBTeXN0ZW1zLCBJbmMuLCAgWFROREFjY2VzcyBJckRBIFVTQiAoRVNJLTk2ODUpICovCiAJeyBVU0JfREVWSUNFKDB4OGU5LCAweDEwMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TUEVFRF9CVUcgfCBJVUNfTk9fV0lORE9XIH0sCiAJLyogU2lnbWFUZWwgU1RJUjQyMTAvNDIyMC80MTE2IFVTQiBJckRBIChWRklSKSBCcmlkZ2UgKi8KLQl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDIxMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSXzQyMTAgfCBJVUNfU1BFRURfQlVHIH0sCi0JeyBVU0JfREVWSUNFKDB4NjZmLCAweDQyMjApLCAuZHJpdmVyX2luZm8gPSBJVUNfU1RJUl80MjEwIHwgSVVDX1NQRUVEX0JVRyB9LAotCXsgVVNCX0RFVklDRSgweDY2ZiwgMHg0MTE2KSwgLmRyaXZlcl9pbmZvID0gSVVDX1NUSVJfNDIxMCB8IElVQ19TUEVFRF9CVUcgfSwKKwl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDIxMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSNDIxWCB8IElVQ19TUEVFRF9CVUcgfSwKKwl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDIyMCksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSNDIxWCB8IElVQ19TUEVFRF9CVUcgfSwKKwl7IFVTQl9ERVZJQ0UoMHg2NmYsIDB4NDExNiksIC5kcml2ZXJfaW5mbyA9IElVQ19TVElSNDIxWCB8IElVQ19TUEVFRF9CVUcgfSwKIAl7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKIAkgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAogCSAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BUFBfU1BFQywKQEAgLTE1NCw3ICsxNTQsNyBAQAogCSAqIGFuZCBpZiBlaXRoZXIgc3BlZWQgb3IgeGJvZnMgKG9yIGJvdGgpIG5lZWRzCiAJICogdG8gYmUgY2hhbmdlZC4KIAkgKi8KLQlpZiAoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgJiYKKwlpZiAoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSNDIxWCAmJgogCSAgICAoKHNlbGYtPm5ld19zcGVlZCAhPSAtMSkgfHwgKHNlbGYtPm5ld194Ym9mcyAhPSAtMSkpKSB7CiAKIAkJLyogV2l0aCBTVElSNDIxeCwgc3BlZWQgYW5kIHhCT0ZzIG11c3QgYmUgc2V0IGF0IHRoZSBzYW1lCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkvKiBTZXQgdGhlIG5ldyBzcGVlZCBhbmQgeGJvZnMgaW4gdGhpcyBmYWtlIGZyYW1lICovCiAJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIGZyYW1lLCAxKTsKIAotCWlmICggc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgKSB7CisJaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUjQyMVgpIHsKIAkJaWYgKGZyYW1lWzBdID09IDApIHJldHVybiA7IC8vIGRvIG5vdGhpbmcgaWYgbm8gY2hhbmdlCiAJCWZyYW1lWzFdID0gMDsgLy8gb3RoZXIgcGFyYW1ldGVycyBkb24ndCBjaGFuZ2UgaGVyZQogCQlmcmFtZVsyXSA9IDA7CkBAIC00NTUsNyArNDU1LDcgQEAKIAogCS8qIENoYW5nZSBzZXR0aW5nIGZvciBuZXh0IGZyYW1lICovCiAKLQlpZiAoIHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwICkgeworCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVI0MjFYKSB7CiAJCV9fdTggdHVybmFyb3VuZF90aW1lOwogCQlfX3U4KiBmcmFtZTsKIAkJdHVybmFyb3VuZF90aW1lID0gZ2V0X3R1cm5hcm91bmRfdGltZSggc2tiICk7CkBAIC04OTcsMTAgKzg5NywxMyBAQAogCWRvY29weSA9ICh1cmItPmFjdHVhbF9sZW5ndGggPCBJUkRBX1JYX0NPUFlfVEhSRVNIT0xEKTsKIAogCS8qIEFsbG9jYXRlIGEgbmV3IHNrYiAqLwotCWlmICggc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTAgKQotCQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKGRvY29weSA/IHVyYi0+YWN0dWFsX2xlbmd0aCA6IElSREFfU0tCX01BWF9NVFUgKyBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIpOworCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVI0MjFYKQorCQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKGRvY29weSA/IHVyYi0+YWN0dWFsX2xlbmd0aCA6CisJCQkJICAgICAgIElSREFfU0tCX01BWF9NVFUgKworCQkJCSAgICAgICBVU0JfSVJEQV9TVElSNDIxWF9IRUFERVIpOwogCWVsc2UKLQkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOiBJUkRBX1NLQl9NQVhfTVRVKTsKKwkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihkb2NvcHkgPyB1cmItPmFjdHVhbF9sZW5ndGggOgorCQkJCSAgICAgICBJUkRBX1NLQl9NQVhfTVRVKTsKIAogCWlmICghbmV3c2tiKSAgewogCQlzZWxmLT5zdGF0cy5yeF9kcm9wcGVkKys7CkBAIC0xMDIyLDE4OCArMTAyNSwxNDAgQEAKIAlyZXR1cm4gMDsgLyogRm9yIG5vdyAqLwogfQogCi0KLSNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVJTSU9OX1NUUiAgICAgICAiUHJvZHVjdCBWZXJzaW9uOiAiCi0jZGVmaW5lIFNUSVI0MjFYX1BBVENIX0NPTVBPTkVOVF9WRVJTSU9OX1NUUiAgICAgIkNvbXBvbmVudCBWZXJzaW9uOiAiCi0jZGVmaW5lIFNUSVI0MjFYX1BBVENIX0RBVEFfVEFHX1NUUiAgICAgICAgICAgICAgIlNUTVAiCi0jZGVmaW5lIFNUSVI0MjFYX1BBVENIX0ZJTEVfVkVSU0lPTl9NQVhfT0ZGU0VUICAgNTEyICAgICAvKiB2ZXJzaW9uIGluZm8gaXMgYmVmb3JlIGhlcmUgKi8KLSNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUICAgICA1MTIgICAgIC8qIHBhdGNoIGltYWdlIHN0YXJ0cyBiZWZvcmUgaGVyZSAqLwotI2RlZmluZSBTVElSNDIxWF9QQVRDSF9GSUxFX0VORF9PRl9IRUFERVJfVEFHICAgIDB4MUEgICAgLyogbWFya3MgZW5kIG9mIHBhdGNoIGZpbGUgaGVhZGVyIChQQyBET1MgdGV4dCBmaWxlIEVPRiBjaGFyYWN0ZXIpICovCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSICAgICAiUHJvZHVjdCBWZXJzaW9uOiAiCisjZGVmaW5lIFNUSVI0MjFYX1BBVENIX1NUTVBfVEFHICAgICAgICAiU1RNUCIKKyNkZWZpbmUgU1RJUjQyMVhfUEFUQ0hfQ09ERV9PRkZTRVQgICAgIDUxMiAvKiBwYXRjaCBpbWFnZSBzdGFydHMgYmVmb3JlIGhlcmUgKi8KKy8qIG1hcmtzIGVuZCBvZiBwYXRjaCBmaWxlIGhlYWRlciAoUEMgRE9TIHRleHQgZmlsZSBFT0YgY2hhcmFjdGVyKSAqLworI2RlZmluZSBTVElSNDIxWF9QQVRDSF9FTkRfT0ZfSERSX1RBRyAgMHgxQQorI2RlZmluZSBTVElSNDIxWF9QQVRDSF9CTE9DS19TSVpFICAgICAgMTAyMwogCiAvKgotICogS25vd24gZmlybXdhcmUgcGF0Y2hlcyBmb3IgU1RJUjQyMXggZG9uZ2xlcworICogRnVuY3Rpb24gc3RpcjQyMXhfZnd1cGxvYWQgKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYXRjaCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcGF0Y2hfbGVuKQorICoKKyAqICAgVXBsb2FkIGZpcm13YXJlIGNvZGUgdG8gU2lnbWFUZWwgNDIxWCBJUkRBLVVTQiBkb25nbGUKICAqLwotc3RhdGljIGNoYXIgKiBzdGlyNDIxeF9wYXRjaGVzW10gPSB7Ci0JIjQyMTAxMDAxLnNiIiwKLQkiNDIxMDEwMDIuc2IiLAotfTsKLQotc3RhdGljIGludCBzdGlyNDIxeF9nZXRfcGF0Y2hfdmVyc2lvbih1bnNpZ25lZCBjaGFyICogcGF0Y2gsIGNvbnN0IHVuc2lnbmVkIGxvbmcgcGF0Y2hfbGVuKQorc3RhdGljIGludCBzdGlyNDIxeF9md191cGxvYWQoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpwYXRjaCwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50IHBhdGNoX2xlbikKIHsKLQl1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyB2ZXJzaW9uX21ham9yLCB2ZXJzaW9uX21pbm9yLCB2ZXJzaW9uX2J1aWxkOwotCXVuc2lnbmVkIGNoYXIgKiB2ZXJzaW9uX3N0YXJ0OwotCWludCB2ZXJzaW9uX2ZvdW5kID0gMDsKKyAgICAgICAgaW50IHJldCA9IC1FTk9NRU07CisgICAgICAgIGludCBhY3R1YWxfbGVuID0gMDsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIHVuc2lnbmVkIGludCBibG9ja19zaXplID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqcGF0Y2hfYmxvY2s7CiAKLQlmb3IgKHZlcnNpb25fb2Zmc2V0ID0gMDsKLQkgICAgIHZlcnNpb25fb2Zmc2V0IDwgU1RJUjQyMVhfUEFUQ0hfRklMRV9FTkRfT0ZfSEVBREVSX1RBRzsKLQkgICAgIHZlcnNpb25fb2Zmc2V0KyspIHsKLQkJaWYgKCFtZW1jbXAocGF0Y2ggKyB2ZXJzaW9uX29mZnNldCwKLQkJCSAgICBTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUlNJT05fU1RSLAotCQkJICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUlNJT05fU1RSKSAtIDEpKSB7Ci0JCQkJICAgIHZlcnNpb25fZm91bmQgPSAxOwotCQkJCSAgICB2ZXJzaW9uX3N0YXJ0ID0gcGF0Y2ggKwotCQkJCQkgICAgdmVyc2lvbl9vZmZzZXQgKwotCQkJCQkgICAgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSU0lPTl9TVFIpIC0gMTsKLQkJCQkgICAgYnJlYWs7Ci0JCX0KKyAgICAgICAgcGF0Y2hfYmxvY2sgPSBremFsbG9jKFNUSVI0MjFYX1BBVENIX0JMT0NLX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChwYXRjaF9ibG9jayA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGJyZWFrIHVwIHBhdGNoIGludG8gMTAyMy1ieXRlIHNlY3Rpb25zICovCisJZm9yIChpID0gMDsgaSA8IHBhdGNoX2xlbjsgaSArPSBibG9ja19zaXplKSB7CisJCWJsb2NrX3NpemUgPSBwYXRjaF9sZW4gLSBpOworCisJCWlmIChibG9ja19zaXplID4gU1RJUjQyMVhfUEFUQ0hfQkxPQ0tfU0laRSkKKwkJCWJsb2NrX3NpemUgPSBTVElSNDIxWF9QQVRDSF9CTE9DS19TSVpFOworCisJCS8qIHVwbG9hZCB0aGUgcGF0Y2ggc2VjdGlvbiAqLworCQltZW1jcHkocGF0Y2hfYmxvY2ssIHBhdGNoICsgaSwgYmxvY2tfc2l6ZSk7CisKKwkJcmV0ID0gdXNiX2J1bGtfbXNnKHNlbGYtPnVzYmRldiwKKwkJCQkgICB1c2Jfc25kYnVsa3BpcGUoc2VsZi0+dXNiZGV2LAorCQkJCQkJICAgc2VsZi0+YnVsa19vdXRfZXApLAorCQkJCSAgIHBhdGNoX2Jsb2NrLCBibG9ja19zaXplLAorCQkJCSAgICZhY3R1YWxfbGVuLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworCQlJUkRBX0RFQlVHKDMsIiVzKCk6IEJ1bGsgc2VuZCAldSBieXRlcywgcmV0PSVkXG4iLAorCQkJICAgX19GVU5DVElPTl9fLCBhY3R1YWxfbGVuLCByZXQpOworCisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CiAJfQogCi0JLyogV2UgY291bGRuJ3QgZmluZCBhIHByb2R1Y3QgdmVyc2lvbiBvbiB0aGlzIHBhdGNoICovCi0JaWYgKCF2ZXJzaW9uX2ZvdW5kKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlrZnJlZShwYXRjaF9ibG9jayk7CiAKLQkvKiBMZXQncyBjaGVjayBpZiB0aGUgcHJvZHVjdCB2ZXJzaW9uIGlzIGRvdHRlZCAqLwotCWlmICh2ZXJzaW9uX3N0YXJ0WzNdICE9ICcuJyB8fAotCSAgICB2ZXJzaW9uX3N0YXJ0WzddICE9ICcuJykKLQkJcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIHJldHVybiByZXQ7CisgfQogCi0JdmVyc2lvbl9tYWpvciA9IHNpbXBsZV9zdHJ0b3VsKHZlcnNpb25fc3RhcnQsIE5VTEwsIDEwKTsKLQl2ZXJzaW9uX21pbm9yID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCArIDQsIE5VTEwsIDEwKTsKLQl2ZXJzaW9uX2J1aWxkID0gc2ltcGxlX3N0cnRvdWwodmVyc2lvbl9zdGFydCArIDgsIE5VTEwsIDEwKTsKLQotCUlSREFfREVCVUcoMiwgIiVzKCksIE1ham9yOiAlbGQgTWlub3I6ICVsZCBCdWlsZDogJWxkXG4iLAotCQkgICBfX0ZVTkNUSU9OX18sCi0JCSAgIHZlcnNpb25fbWFqb3IsIHZlcnNpb25fbWlub3IsIHZlcnNpb25fYnVpbGQpOwotCi0JcmV0dXJuICgoKHZlcnNpb25fbWFqb3IpIDw8IDEyKSArCi0JCSgodmVyc2lvbl9taW5vcikgPDwgOCkgKwotCQkoKHZlcnNpb25fYnVpbGQgLyAxMCkgPDwgNCkgKwotCQkodmVyc2lvbl9idWlsZCAlIDEwKSk7Ci0KLX0KLQotCi1zdGF0aWMgaW50IHN0aXI0MjF4X3VwbG9hZF9wYXRjaCAoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmLAotCQkJCSAgdW5zaWduZWQgY2hhciAqIHBhdGNoLAotCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IHBhdGNoX2xlbikKLXsKLSAgICBpbnQgcmV0dmFsID0gMDsKLSAgICBpbnQgYWN0dWFsX2xlbjsKLSAgICB1bnNpZ25lZCBpbnQgaSA9IDAsIGRvd25sb2FkX2Ftb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgY2hhciAqIHBhdGNoX2NodW5rOwotCi0gICAgSVJEQV9ERUJVRyAoMiwgIiVzKCksIFVwbG9hZGluZyBTVElSNDIxeCBQYXRjaFxuIiwgX19GVU5DVElPTl9fKTsKLQotICAgIHBhdGNoX2NodW5rID0ga3phbGxvYyhTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKHBhdGNoX2NodW5rID09IE5VTEwpCi0JICAgIHJldHVybiAtRU5PTUVNOwotCi0gICAgLyogYnJlYWsgdXAgcGF0Y2ggaW50byAxMDIzLWJ5dGUgc2VjdGlvbnMgKi8KLSAgICBmb3IgKGkgPSAwOyByZXR2YWwgPj0gMCAmJiBpIDwgcGF0Y2hfbGVuOyBpICs9IGRvd25sb2FkX2Ftb3VudCkgewotCSAgICBkb3dubG9hZF9hbW91bnQgPSBwYXRjaF9sZW4gLSBpOwotCSAgICBpZiAoZG93bmxvYWRfYW1vdW50ID4gU1RJUjQyMVhfTUFYX1BBVENIX0RPV05MT0FEX1NJWkUpCi0JCSAgICBkb3dubG9hZF9hbW91bnQgPSBTVElSNDIxWF9NQVhfUEFUQ0hfRE9XTkxPQURfU0laRTsKLQotCSAgICAvKiBkb3dubG9hZCB0aGUgcGF0Y2ggc2VjdGlvbiAqLwotCSAgICBtZW1jcHkocGF0Y2hfY2h1bmssIHBhdGNoICsgaSwgZG93bmxvYWRfYW1vdW50KTsKLQotCSAgICByZXR2YWwgPSB1c2JfYnVsa19tc2cgKHNlbGYtPnVzYmRldiwKLQkJCQkgICB1c2Jfc25kYnVsa3BpcGUgKHNlbGYtPnVzYmRldiwKLQkJCQkJCSAgICBzZWxmLT5idWxrX291dF9lcCksCi0JCQkJICAgcGF0Y2hfY2h1bmssIGRvd25sb2FkX2Ftb3VudCwKLQkJCQkgICAmYWN0dWFsX2xlbiwgbXNlY3NfdG9famlmZmllcyAoNTAwKSk7Ci0JICAgIElSREFfREVCVUcgKDIsICIlcygpLCBTZW50ICV1IGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18sCi0JCQlhY3R1YWxfbGVuKTsKLQkgICAgaWYgKHJldHZhbCA9PSAwKQotCQkgICAgbWRlbGF5KDEwKTsKLSAgICB9Ci0KLSAgICBrZnJlZShwYXRjaF9jaHVuayk7Ci0KLSAgICBpZiAoaSAhPSBwYXRjaF9sZW4pIHsKLQkgICAgSVJEQV9FUlJPUiAoIiVzKCksIFB1c2hlZCAlZCBieXRlcyAoIT0gcGF0Y2hfbGVuICglZCkpXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBpLCBwYXRjaF9sZW4pOwotCSAgICByZXR2YWwgPSAtRUlPOwotICAgIH0KLQotICAgIGlmIChyZXR2YWwgPCAwKQotCSAgICAvKiB0b2RvIC0gbWFyayBkZXZpY2UgYXMgbm90IHJlYWR5ICovCi0JICAgIElSREFfRVJST1IgKCIlcygpLCBTVElSNDIxeCBwYXRjaCB1cGxvYWQgZmFpbGVkICglZClcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7Ci0KLSAgICByZXR1cm4gcmV0dmFsOwotfQotCi0KKy8qCisgKiBGdW5jdGlvbiBzdGlyNDIxeF9wYXRjaF9kZXZpY2Uoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKQorICoKKyAqIEdldCBhIGZpcm13YXJlIGNvZGUgZnJvbSB1c2Vyc3Bhc2UgdXNpbmcgaG90cGx1ZyByZXF1ZXN0X2Zpcm13YXJlKCkgY2FsbAorICAqLwogc3RhdGljIGludCBzdGlyNDIxeF9wYXRjaF9kZXZpY2Uoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKQogewotCXVuc2lnbmVkIGludCBpLCBwYXRjaF9mb3VuZCA9IDAsIGRhdGFfZm91bmQgPSAwLCBkYXRhX29mZnNldDsKLQlpbnQgcGF0Y2hfdmVyc2lvbiwgcmV0ID0gMDsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgY2hhciBzdGlyNDIxeF9md19uYW1lWzExXTsKKyAgICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZndfdmVyc2lvbl9wdHI7IC8qIHBvaW50ZXIgdG8gdmVyc2lvbiBzdHJpbmcgKi8KKwl1bnNpZ25lZCBsb25nIGZ3X3ZlcnNpb24gPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RpcjQyMXhfcGF0Y2hlcyk7IGkrKykgewotCQlpZihyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgc3RpcjQyMXhfcGF0Y2hlc1tpXSwgJnNlbGYtPnVzYmRldi0+ZGV2KSAhPSAwKSB7Ci0JCQlJUkRBX0VSUk9SKCAiJXMoKSwgUGF0Y2ggJXMgaXMgbm90IGF2YWlsYWJsZVxuIiwgX19GVU5DVElPTl9fLCBzdGlyNDIxeF9wYXRjaGVzW2ldKTsKLQkJCWNvbnRpbnVlOwotCQl9CisgICAgICAgIC8qCisgICAgICAgICAqIEtub3duIGZpcm13YXJlIHBhdGNoIGZpbGUgbmFtZXMgZm9yIFNUSVI0MjF4IGRvbmdsZXMKKyAgICAgICAgICogYXJlICI0MjEwMTAwMS5zYiIgb3IgIjQyMTAxMDAyLnNiIgorICAgICAgICAgKi8KKyAgICAgICAgc3ByaW50ZihzdGlyNDIxeF9md19uYW1lLCAiNDIxMCU0WC5zYiIsCisgICAgICAgICAgICAgICAgc2VsZi0+dXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisgICAgICAgIHJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBzdGlyNDIxeF9md19uYW1lLCAmc2VsZi0+dXNiZGV2LT5kZXYpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogCi0gICAgICAgICAgICAgICAgLyogV2UgZm91bmQgYSBwYXRjaCBmcm9tIHVzZXJzcGFjZSAqLwotCQlwYXRjaF92ZXJzaW9uID0gc3RpcjQyMXhfZ2V0X3BhdGNoX3ZlcnNpb24gKGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisgICAgICAgIC8qIFdlIGdldCBhIHBhdGNoIGZyb20gdXNlcnNwYWNlICovCisgICAgICAgIElSREFfTUVTU0FHRSgiJXMoKTogUmVjZWl2ZWQgZmlybXdhcmUgJXMgKCV1IGJ5dGVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3RpcjQyMXhfZndfbmFtZSwgZnctPnNpemUpOwogCi0JCWlmIChwYXRjaF92ZXJzaW9uIDwgMCkgewotCQkJLyogQ291bGRuJ3QgZmV0Y2ggYSB2ZXJzaW9uLCBsZXQncyBtb3ZlIG9uIHRvIHRoZSBuZXh0IGZpbGUgKi8KLQkJCUlSREFfRVJST1IoIiVzKCksIHZlcnNpb24gcGFyc2luZyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlyZXQgPSBwYXRjaF92ZXJzaW9uOwotCQkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0JCQljb250aW51ZTsKLQkJfQorICAgICAgICByZXQgPSAtRUlOVkFMOwogCi0JCWlmIChwYXRjaF92ZXJzaW9uICE9IHNlbGYtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpIHsKLQkJCS8qIFBhdGNoIHZlcnNpb24gYW5kIGRldmljZSBkb24ndCBtYXRjaCAqLwotCQkJSVJEQV9FUlJPUiAoIiVzKCksIHdyb25nIHBhdGNoIHZlcnNpb24gKCVkIDwtPiAlZClcbiIsCi0JCQkJICAgIF9fRlVOQ1RJT05fXywKLQkJCQkgICAgcGF0Y2hfdmVyc2lvbiwgc2VsZi0+dXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0JCQljb250aW51ZTsKLQkJfQorCS8qIEdldCB0aGUgYmNkIHByb2R1Y3QgdmVyc2lvbiAqLworICAgICAgICBpZiAoIW1lbWNtcChmdy0+ZGF0YSwgU1RJUjQyMVhfUEFUQ0hfUFJPRFVDVF9WRVIsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9QUk9EVUNUX1ZFUikgLSAxKSkgeworICAgICAgICAgICAgICAgIGZ3X3ZlcnNpb25fcHRyID0gZnctPmRhdGEgKworCQkJc2l6ZW9mKFNUSVI0MjFYX1BBVENIX1BST0RVQ1RfVkVSKSAtIDE7CiAKLQkJLyogSWYgd2UncmUgaGVyZSwgd2UndmUgZm91bmQgYSBjb3JyZWN0IHBhdGNoICovCi0JCXBhdGNoX2ZvdW5kID0gMTsKLQkJYnJlYWs7CisgICAgICAgICAgICAgICAgLyogTGV0J3MgY2hlY2sgaWYgdGhlIHByb2R1Y3QgdmVyc2lvbiBpcyBkb3R0ZWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoZndfdmVyc2lvbl9wdHJbM10gPT0gJy4nICYmCisJCSAgICBmd192ZXJzaW9uX3B0cls3XSA9PSAnLicpIHsKKwkJCXVuc2lnbmVkIGxvbmcgbWFqb3IsIG1pbm9yLCBidWlsZDsKKwkJCW1ham9yID0gc2ltcGxlX3N0cnRvdWwoZndfdmVyc2lvbl9wdHIsIE5VTEwsIDEwKTsKKwkJCW1pbm9yID0gc2ltcGxlX3N0cnRvdWwoZndfdmVyc2lvbl9wdHIgKyA0LCBOVUxMLCAxMCk7CisJCQlidWlsZCA9IHNpbXBsZV9zdHJ0b3VsKGZ3X3ZlcnNpb25fcHRyICsgOCwgTlVMTCwgMTApOwogCi0JfQorCQkJZndfdmVyc2lvbiA9IChtYWpvciA8PCAxMikKKwkJCQkrIChtaW5vciA8PCA4KQorCQkJCSsgKChidWlsZCAvIDEwKSA8PCA0KQorCQkJCSsgKGJ1aWxkICUgMTApOwogCi0JLyogV2UgY291bGRuJ3QgZmluZCBhIHZhbGlkIGZpcm13YXJlLCBsZXQncyBsZWF2ZSAqLwotCWlmICghcGF0Y2hfZm91bmQpCi0JCXJldHVybiByZXQ7CisJCQlJUkRBX0RFQlVHKDMsICIlcygpOiBGaXJtd2FyZSBQcm9kdWN0IHZlcnNpb24gJWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGZ3X3ZlcnNpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0JLyogVGhlIGFjdHVhbCBpbWFnZSBzdGFydHMgYWZ0ZXIgdGhlICJTVE1QIiBrZXl3b3JkICovCi0JZm9yIChkYXRhX29mZnNldCA9IDA7IGRhdGFfb2Zmc2V0IDwgU1RJUjQyMVhfUEFUQ0hfRklMRV9JTUFHRV9NQVhfT0ZGU0VUOyBkYXRhX29mZnNldCsrKSB7Ci0JCWlmICghbWVtY21wKGZ3X2VudHJ5LT5kYXRhICsgZGF0YV9vZmZzZXQsCi0JCQkgICAgU1RJUjQyMVhfUEFUQ0hfREFUQV9UQUdfU1RSLAotCQkJICAgIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpKSkgewotCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgZm91bmQgcGF0Y2ggZGF0YSBmb3IgU1RJUjQyMXggYXQgb2Zmc2V0ICVkXG4iLAotCQkJCSAgIF9fRlVOQ1RJT05fXywgZGF0YV9vZmZzZXQpOwotCQkJZGF0YV9mb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KKyAgICAgICAgaWYgKHNlbGYtPnVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UgPT0gZndfdmVyc2lvbikgeworICAgICAgICAgICAgICAgIC8qCisJCSAqIElmIHdlJ3JlIGhlcmUsIHdlJ3ZlIGZvdW5kIGEgY29ycmVjdCBwYXRjaAorICAgICAgICAgICAgICAgICAqIFRoZSBhY3R1YWwgaW1hZ2Ugc3RhcnRzIGFmdGVyIHRoZSAiU1RNUCIga2V5d29yZAorICAgICAgICAgICAgICAgICAqIHNvIGZvcndhcmQgdG8gdGhlIGZpcm13YXJlIGhlYWRlciB0YWcKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyAoZnctPmRhdGFbaV0gIT0gU1RJUjQyMVhfUEFUQ0hfRU5EX09GX0hEUl9UQUcpCisJCQkgICAgICYmIChpIDwgZnctPnNpemUpOyBpKyspIDsKKyAgICAgICAgICAgICAgICAvKiBoZXJlIHdlIGNoZWNrIGZvciB0aGUgb3V0IG9mIGJ1ZmZlciBjYXNlICovCisgICAgICAgICAgICAgICAgaWYgKChTVElSNDIxWF9QQVRDSF9FTkRfT0ZfSERSX1RBRyA9PSBmdy0+ZGF0YVtpXSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKGkgPCBTVElSNDIxWF9QQVRDSF9DT0RFX09GRlNFVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVtY21wKGZ3LT5kYXRhICsgaSArIDEsIFNUSVI0MjFYX1BBVENIX1NUTVBfVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX1NUTVBfVEFHKSAtIDEpKSB7CiAKLQkvKiBXZSBjb3VsZG4ndCBmaW5kICJTVE1QIiBmcm9tIHRoZSBoZWFkZXIgKi8KLQlpZiAoIWRhdGFfZm91bmQpCi0JCXJldHVybiAtRUlOVkFMOworCQkJCS8qIFdlIGNhbiB1cGxvYWQgdGhlIHBhdGNoIHRvIHRoZSB0YXJnZXQgKi8KKwkJCQlpICs9IHNpemVvZihTVElSNDIxWF9QQVRDSF9TVE1QX1RBRyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHN0aXI0MjF4X2Z3X3VwbG9hZChzZWxmLCAmZnctPmRhdGFbaV0sCisJCQkJCQkJIGZ3LT5zaXplIC0gaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQkvKiBMZXQncyB1cGxvYWQgdGhlIHBhdGNoIHRvIHRoZSB0YXJnZXQgKi8KLQlyZXQgPSBzdGlyNDIxeF91cGxvYWRfcGF0Y2goc2VsZiwKLQkJCQkgICAgJmZ3X2VudHJ5LT5kYXRhW2RhdGFfb2Zmc2V0ICsgc2l6ZW9mKFNUSVI0MjFYX1BBVENIX0ZJTEVfSU1BR0VfTUFYX09GRlNFVCldLAotCQkJCSAgICBmd19lbnRyeS0+c2l6ZSAtIChkYXRhX29mZnNldCArIHNpemVvZihTVElSNDIxWF9QQVRDSF9GSUxFX0lNQUdFX01BWF9PRkZTRVQpKSk7CisgICAgICAgIHJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0KLQlyZXR1cm4gcmV0OwotCisgICAgICAgIHJldHVybiByZXQ7CiB9CiAKIApAQCAtMTcwMiwxMiArMTY1NywxMiBAQAogCWluaXRfdGltZXIoJnNlbGYtPnJ4X2RlZmVyX3RpbWVyKTsKIAogCXNlbGYtPmNhcGFiaWxpdHkgPSBpZC0+ZHJpdmVyX2luZm87Ci0Jc2VsZi0+bmVlZHNwYXRjaCA9ICgoc2VsZi0+Y2FwYWJpbGl0eSAmIElVQ19TVElSXzQyMTApICE9IDApIDsKKwlzZWxmLT5uZWVkc3BhdGNoID0gKChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVI0MjFYKSAhPSAwKTsKIAogCS8qIENyZWF0ZSBhbGwgb2YgdGhlIG5lZWRlZCB1cmJzICovCi0JaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUl80MjEwKSB7CisJaWYgKHNlbGYtPmNhcGFiaWxpdHkgJiBJVUNfU1RJUjQyMVgpIHsKIAkJc2VsZi0+bWF4X3J4X3VyYiA9IElVX1NJR01BVEVMX01BWF9SWF9VUkJTOwotCQlzZWxmLT5oZWFkZXJfbGVuZ3RoID0gVVNCX0lSREFfU0lHTUFURUxfSEVBREVSOworCQlzZWxmLT5oZWFkZXJfbGVuZ3RoID0gVVNCX0lSREFfU1RJUjQyMVhfSEVBREVSOwogCX0gZWxzZSB7CiAJCXNlbGYtPm1heF9yeF91cmIgPSBJVV9NQVhfUlhfVVJCUzsKIAkJc2VsZi0+aGVhZGVyX2xlbmd0aCA9IFVTQl9JUkRBX0hFQURFUjsKQEAgLTE4MTMsOCArMTc2OCw4IEBACiAJCS8qIE5vdyB3ZSBmZXRjaCBhbmQgdXBsb2FkIHRoZSBmaXJtd2FyZSBwYXRjaCAqLwogCQlyZXQgPSBzdGlyNDIxeF9wYXRjaF9kZXZpY2Uoc2VsZik7CiAJCXNlbGYtPm5lZWRzcGF0Y2ggPSAocmV0IDwgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoInBhdGNoX2RldmljZSBmYWlsZWRcbiIpOworCQlpZiAoc2VsZi0+bmVlZHNwYXRjaCkgeworCQkJSVJEQV9FUlJPUigiU1RJUjQyMVg6IENvdWxkbid0IHVwbG9hZCBwYXRjaFxuIik7CiAJCQlnb3RvIGVycl9vdXRfNTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmggYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKaW5kZXggZDgzM2RiNS4uNmIyMjcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaApAQCAtMzQsOSArMzQsNiBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPiAgICAgIC8qIHN0cnVjdCBpcmxhcF9jYiAqLwogCi0jZGVmaW5lIFBBVENIX0ZJTEVfU0laRV9NQVggICAgIDY1NTM2Ci0jZGVmaW5lIFBBVENIX0ZJTEVfU0laRV9NSU4gICAgIDgwCi0KICNkZWZpbmUgUlhfQ09QWV9USFJFU0hPTEQgMjAwCiAjZGVmaW5lIElSREFfVVNCX01BWF9NVFUgMjA1MQogI2RlZmluZSBJUkRBX1VTQl9TUEVFRF9NVFUgNjQJCS8qIFdlaXJkLCBidXQgd29yayBsaWtlIHRoaXMgKi8KQEAgLTEwNywxNCArMTA0LDE1IEBACiAjZGVmaW5lIElVQ19TTUFMTF9QS1QJMHgxMAkvKiBEZXZpY2UgZG9lc24ndCBiZWhhdmUgd2l0aCBiaWcgUnggcGFja2V0cyAqLwogI2RlZmluZSBJVUNfTUFYX1dJTkRPVwkweDIwCS8qIERldmljZSB1bmRlcmVzdGltYXRlIHRoZSBSeCB3aW5kb3cgKi8KICNkZWZpbmUgSVVDX01BWF9YQk9GUwkweDQwCS8qIERldmljZSBuZWVkIG1vcmUgeGJvZnMgdGhhbiBhZHZlcnRpc2VkICovCi0jZGVmaW5lIElVQ19TVElSXzQyMTAJMHg4MAkvKiBTaWdtYVRlbCA0MjEwLzQyMjAvNDExNiBWRklSICovCisjZGVmaW5lIElVQ19TVElSNDIxWAkweDgwCS8qIFNpZ21hVGVsIDQyMTAvNDIyMC80MTE2IFZGSVIgKi8KIAogLyogVVNCIGNsYXNzIGRlZmluaXRpb25zICovCiAjZGVmaW5lIFVTQl9JUkRBX0hFQURFUiAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgVVNCX0NMQVNTX0lSREEgICAgICAgICAgICAgMHgwMiAvKiBVU0JfQ0xBU1NfQVBQX1NQRUMgc3ViY2xhc3MgKi8KICNkZWZpbmUgVVNCX0RUX0lSREEgICAgICAgICAgICAgICAgMHgyMQotI2RlZmluZSBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIgICAweDAzCi0jZGVmaW5lIElVX1NJR01BVEVMX01BWF9SWF9VUkJTICAgIChJVV9NQVhfQUNUSVZFX1JYX1VSQlMgKyBVU0JfSVJEQV9TSUdNQVRFTF9IRUFERVIpCisjZGVmaW5lIFVTQl9JUkRBX1NUSVI0MjFYX0hFQURFUiAgIDB4MDMKKyNkZWZpbmUgSVVfU0lHTUFURUxfTUFYX1JYX1VSQlMgICAgKElVX01BWF9BQ1RJVkVfUlhfVVJCUyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9JUkRBX1NUSVI0MjFYX0hFQURFUikKIAogc3RydWN0IGlyZGFfY2xhc3NfZGVzYyB7CiAJX191OCAgYkxlbmd0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0Mjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC0wLDAgKzEsMTAwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGVuYW1lOiAgICAgIG1jczc3ODAuYworKiBWZXJzaW9uOiAgICAgICAwLjQtYWxwaGEKKyogRGVzY3JpcHRpb246ICAgSXJkYSBNb3NDaGlwIFVTQiBEb25nbGUgRHJpdmVyCisqIEF1dGhvcnM6ICAgICAgIEx1a2FzeiBTdGVsbWFjaCA8c3RsbWFuQHBvY3p0YS5mbT4KKyogCQkgQnJpYW4gUHVnaCA8YnB1Z2hAY3MucGR4LmVkdT4KKyoJCSBKdWR5IEZpc2NoYmFjaCA8amZpc2NoQGNzLnBkeC5lZHU+CisqCisqICAgICAgIEJhc2VkIG9uIHN0aXI0MjAwIGRyaXZlciwgYnV0IHNvbWUgdGhpbmdzIGRvbmUgZGlmZmVyZW50bHkuCisqICAgICAgIEJhc2VkIG9uIGVhcmxpZXIgZHJpdmVyIGJ5IFBhdWwgU3Rld2FydCA8c3Rld2FydEBwYXJjLmNvbT4KKyoKKyogICAgICAgQ29weXJpZ2h0IChDKSAyMDAwLCBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisqICAgICAgIENvcHlyaWdodCAoQykgMjAwMSwgRGFnIEJyYXR0bGkgPGRhZ0BicmF0dGxpLm5ldD4KKyogICAgICAgQ29weXJpZ2h0IChDKSAyMDAxLCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisqICAgICAgIENvcHlyaWdodCAoQykgMjAwNCwgU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAb3NkbC5vcmc+CisqICAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgTHVrYXN6IFN0ZWxtYWNoIDxzdGxtYW5AcG9jenRhLmZtPgorKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDUsIEJyaWFuIFB1Z2ggPGJwdWdoQGNzLnBkeC5lZHU+CisqICAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgSnVkeSBGaXNjaGJhY2ggPGpmaXNjaEBjcy5wZHguZWR1PgorKgorKiAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKiAgICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKiAgICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKiAgICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiAgICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiAgICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiAgICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogTUNTNzc4MCBpcyBhIHNpbXBsZSBVU0IgdG8gSXJEQSBicmlkZ2UgYnkgTW9zQ2hpcC4gSXQgaXMgbmVpdGhlcgorICogY29tcGF0aWJpbGUgd2l0aCBpcmRhLXVzYiBub3Igd2l0aCBzdGlyNDIwMC4gQWx0aG91Z2ggaXQgaXMgcXVpdGUKKyAqIHNpbWlsYXIgdG8gdGhlIGxhdGVyIGFzIGZhciBhcyBnZW5lcmFsIGlkZWEgb2Ygb3BlcmF0aW9uIGlzIGNvbmNlcm5lZC4KKyAqIFRoYXQgaXMgaXQgcmVxdWlyZXMgdGhlIHNvZnR3YXJlIHRvIGRvIGFsbCB0aGUgZnJhbWluZyBqb2IgYXQgU0lSIHNwZWVkcy4KKyAqIFRoZSBoYXJkd2FyZSBkb2VzIHRha2UgY2FyZSBvZiB0aGUgZnJhbWluZyBhdCBNSVIgYW5kIEZJUiBzcGVlZHMuCisgKiBJdCBzdXBwb3J0cyBhbGwgc3BlZWRzIGZyb20gMjQwMCB0aHJvdWdoIDRNYnBzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvd3JhcHBlci5oPgorI2luY2x1ZGUgPG5ldC9pcmRhL2NyYy5oPgorCisjaW5jbHVkZSAibWNzNzc4MC5oIgorCisjZGVmaW5lIE1DU19WRU5ET1JfSUQgMHg5NzEwCisjZGVmaW5lIE1DU19QUk9EVUNUX0lEIDB4Nzc4MAorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWNzX3RhYmxlW10gPSB7CisJLyogTW9zQ2hpcCBDb3JwLiwgIE1DUzc3ODAgRklSLVVTQiBBZGFwdGVyICovCisJe1VTQl9ERVZJQ0UoTUNTX1ZFTkRPUl9JRCwgTUNTX1BST0RVQ1RfSUQpfSwKKwl7fSwKK307CisKK01PRFVMRV9BVVRIT1IoIkJyaWFuIFB1Z2ggPGJwdWdoQGNzLnBkeC5lZHU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklyREEtVVNCIERvbmdsZSBEcml2ZXIgZm9yIE1vc0NoaXAgTUNTNzc4MCIpOworTU9EVUxFX1ZFUlNJT04oIjAuM2FscGhhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBtY3NfdGFibGUpOworCitzdGF0aWMgaW50IHFvc19tdHRfYml0cyA9IDB4MDcgLyogPiAxbXMgKi8gOworbW9kdWxlX3BhcmFtKHFvc19tdHRfYml0cywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocW9zX210dF9iaXRzLCAiTWluaW11bSBUdXJuIFRpbWUiKTsKKworc3RhdGljIGludCByZWNlaXZlX21vZGUgPSAweDE7Cittb2R1bGVfcGFyYW0ocmVjZWl2ZV9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyZWNlaXZlX21vZGUsCisJCSAiUmVjZWl2ZSBtb2RlIG9mIHRoZSBkZXZpY2UgKDE6ZmFzdCwgMDpzbG93LCBkZWZhdWx0OjEpIik7CisKK3N0YXRpYyBpbnQgc2lyX3R3ZWFrID0gMTsKK21vZHVsZV9wYXJhbShzaXJfdHdlYWssIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpcl90d2VhaywKKwkJICJEZWZhdWx0IHB1bHNlIHdpZHRoICgxOjEuNnVzLCAwOjMvMTYgYml0LCBkZWZhdWx0OjEpLiIpOworCitzdGF0aWMgaW50IHRyYW5zY2VpdmVyX3R5cGUgPSBNQ1NfVFNDX1ZJU0hBWTsKK21vZHVsZV9wYXJhbSh0cmFuc2NlaXZlcl90eXBlLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh0cmFuc2NlaXZlcl90eXBlLCAiSVIgdHJhbnNjZWl2ZXIgdHlwZSwgc2VlIG1jczc3ODAuaC4iKTsKKworc3RydWN0IHVzYl9kcml2ZXIgbWNzX2RyaXZlciA9IHsKKwkubmFtZSA9ICJtY3M3NzgwIiwKKwkucHJvYmUgPSBtY3NfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBtY3NfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBtY3NfdGFibGUsCit9OworCisvKiBzcGVlZCBmbGFnIHNlbGVjdGlvbiBieSBkaXJlY3QgYWRkcmVzc2luZy4KK2FkZHIgPSAoc3BlZWQgPj4gOCkgJiAweDBmCisKKzB4MSAgIDU3NjAwCSAweDIgIDExNTIwMAkgMHg0IDExNTIwMDAJIDB4NSAgICA5NjAwCisweDYgICAzODQwMAkgMHg5ICAgIDI0MDAJIDB4YSAgNTc2MDAwCSAweGIgICAxOTIwMAorCis0TWJwcyAob3IgMjQwMCkgbXVzdCBiZSBjaGVja2VkIHNlcGFyYXRlbHkuIFNpbmNlIGl0IGFsc28gaGFzCit0byBiZSBwcm9ncmFtbWVkIGluIGEgZGlmZmVyZW50IG1hbm5lciB0aGF0IGlzIG5vdCBhIGJpZyBwcm9ibGVtLgorKi8KK3N0YXRpYyBfX3UxNiBtY3Nfc3BlZWRfc2V0WzE2XSA9IHsgMCwKKwlNQ1NfU1BFRURfNTc2MDAsCisJTUNTX1NQRUVEXzExNTIwMCwKKwkwLAorCU1DU19TUEVFRF8xMTUyMDAwLAorCU1DU19TUEVFRF85NjAwLAorCU1DU19TUEVFRF8zODQwMCwKKwkwLCAwLAorCU1DU19TUEVFRF8yNDAwLAorCU1DU19TUEVFRF81NzYwMDAsCisJTUNTX1NQRUVEXzE5MjAwLAorCTAsIDAsIDAsCit9OworCisvKiBTZXQgZ2l2ZW4gMTYgYml0IHJlZ2lzdGVyIHdpdGggYSAxNiBiaXQgdmFsdWUuIFNlbmQgY29udHJvbCBtZXNzYWdlCisgKiB0byBzZXQgZG9uZ2xlIHJlZ2lzdGVyLiAqLworc3RhdGljIGludCBtY3Nfc2V0X3JlZyhzdHJ1Y3QgbWNzX2NiICptY3MsIF9fdTE2IHJlZywgX191MTYgdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtY3MtPnVzYmRldjsKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIE1DU19XUlJFUSwKKwkJCSAgICAgICBNQ1NfV1JfUlRZUEUsIHZhbCwgcmVnLCBOVUxMLCAwLAorCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoTUNTX0NUUkxfVElNRU9VVCkpOworfQorCisvKiBHZXQgMTYgYml0IHJlZ2lzdGVyIHZhbHVlLiBTZW5kIGNvbnRvbCBtZXNzYWdlIHRvIHJlYWQgZG9uZ2xlIHJlZ2lzdGVyLiAqLworc3RhdGljIGludCBtY3NfZ2V0X3JlZyhzdHJ1Y3QgbWNzX2NiICptY3MsIF9fdTE2IHJlZywgX191MTYgKiB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IG1jcy0+dXNiZGV2OworCWludCByZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgTUNTX1JEUkVRLAorCQkJCSAgTUNTX1JEX1JUWVBFLCAwLCByZWcsIHZhbCwgMiwKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoTUNTX0NUUkxfVElNRU9VVCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyogU2V0dXAgYSBjb21tdW5pY2F0aW9uIGJldHdlZW4gbWNzNzc4MCBhbmQgVEZEVSBjaGlwcy4gIEl0IGlzIGRlc2NyaWJlZAorICogaW4gbW9yZSBkZXRhaWwgaW4gdGhlIGRhdGEgc2hlZXQuICBUaGUgc2V0dXAgc2VxdWVuY2UgcHV0cyB0aGUgdGhlCisgKiB2aXNoYXkgdHJhbmNlaXZlciBpbnRvIGhpZ2ggc3BlZWQgbW9kZS4gIEl0IHdpbGwgYWxzbyByZWNlaXZlIFNJUiBzcGVlZAorICogcGFja2V0cyBidXQgYXQgcmVkdWNlZCBzZW5zaXRpdml0eS4KKyAqLworCisvKiAwOiBPSyAxOkVSUk9SICovCitzdGF0aWMgaW5saW5lIGludCBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfdmlzaGF5KHN0cnVjdCBtY3NfY2IgKm1jcykKK3sKKwlpbnQgcmV0ID0gMDsKKwlfX3UxNiBydmFsOworCisJLyogbWNzX2dldF9yZWcgc2hvdWxkIHJlYWQgZXhhY3RseSB0d28gYnl0ZXMgZnJvbSB0aGUgZG9uZ2xlICovCisJcmV0ID0gbWNzX2dldF9yZWcobWNzLCBNQ1NfWENWUl9SRUcsICZydmFsKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDIpKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogVGhlIE1DU19YQ1ZSX0NPTkYgYml0IHB1dHMgdGhlIHRyYW5zY2VpdmVyIGludG8gY29uZmlndXJhdGlvbgorCSAqIG1vZGUuICBUaGUgTUNTX01PREUwIGJpdCBtdXN0IHN0YXJ0IG91dCBoaWdoICgxKSBhbmQgdGhlbgorCSAqIHRyYW5zaXRpb24gdG8gbG93IGFuZCB0aGUgTUNTX1NURklSIGFuZCBNQ1NfTU9ERTEgYml0cyBtdXN0CisJICogYmUgbG93LgorCSAqLworCXJ2YWwgfD0gKE1DU19NT0RFMCB8IE1DU19YQ1ZSX0NPTkYpOworCXJ2YWwgJj0gfk1DU19TVEZJUjsKKwlydmFsICY9IH5NQ1NfTU9ERTE7CisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfWENWUl9SRUcsIHJ2YWwpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJcnZhbCAmPSB+TUNTX01PREUwOworCXJldCA9IG1jc19zZXRfcmVnKG1jcywgTUNTX1hDVlJfUkVHLCBydmFsKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnJvcjsKKworCXJ2YWwgJj0gfk1DU19YQ1ZSX0NPTkY7CisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfWENWUl9SRUcsIHJ2YWwpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gMDsKKwllcnJvcjoKKwkJcmV0dXJuIHJldDsKK30KKworLyogU2V0dXAgYSBjb21tdW5pY2F0aW9uIGJldHdlZW4gbWNzNzc4MCBhbmQgYWdpbGVudCBjaGlwLiAqLworc3RhdGljIGlubGluZSBpbnQgbWNzX3NldHVwX3RyYW5zY2VpdmVyX2FnaWxlbnQoc3RydWN0IG1jc19jYiAqbWNzKQoreworCUlSREFfV0FSTklORygiVGhpcyB0cmFuc2NlaXZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiIpOworCXJldHVybiAxOworfQorCisvKiBTZXR1cCBhIGNvbW11bmljYXRpb24gYmV0d2VlbiBtY3M3NzgwIGFuZCBzaGFycCBjaGlwLiAqLworc3RhdGljIGlubGluZSBpbnQgbWNzX3NldHVwX3RyYW5zY2VpdmVyX3NoYXJwKHN0cnVjdCBtY3NfY2IgKm1jcykKK3sKKwlJUkRBX1dBUk5JTkcoIlRoaXMgdHJhbnNjZWl2ZXIgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKTsKKwlyZXR1cm4gMTsKK30KKworLyogQ29tbW9uIHNldHVwIGZvciBhbGwgdHJhbnNjZWl2ZXJzICovCitzdGF0aWMgaW5saW5lIGludCBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXIoc3RydWN0IG1jc19jYiAqbWNzKQoreworCWludCByZXQgPSAwOworCV9fdTE2IHJ2YWw7CisJY2hhciAqbXNnOworCisJbXNnID0gIkJhc2ljIHRyYW5zY2VpdmVyIHNldHVwIGVycm9yLiI7CisKKwkvKiByZWFkIHZhbHVlIG9mIE1PREUgUmVnaXN0ZXIsIHNldCB0aGUgRFJJVkVSIGFuZCBSRVNFVCBiaXRzCisJKiBhbmQgd3JpdGUgdmFsdWUgYmFjayBvdXQgdG8gTU9ERSBSZWdpc3RlcgorCSovCisJcmV0ID0gbWNzX2dldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsICZydmFsKTsKKwlpZih1bmxpa2VseShyZXQgIT0gMikpCisJCWdvdG8gZXJyb3I7CisJcnZhbCB8PSBNQ1NfRFJJVkVSOwkvKiBwdXQgdGhlIG1jczc3ODAgaW50byBjb25maWd1cmF0aW9uIG1vZGUuICovCisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsIHJ2YWwpOworCWlmKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyb3I7CisKKwlydmFsID0gMDsJCS8qIHNldCBtaW4gcHVsc2Ugd2lkdGggdG8gMCBpbml0aWFsbHkuICovCisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfTUlOUlhQV19SRUcsIHJ2YWwpOworCWlmKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBtY3NfZ2V0X3JlZyhtY3MsIE1DU19NT0RFX1JFRywgJnJ2YWwpOworCWlmKHVubGlrZWx5KHJldCAhPSAyKSkKKwkJZ290byBlcnJvcjsKKworCXJ2YWwgJj0gfk1DU19GSVI7CS8qIHR1cm4gb2ZmIGZpciBtb2RlLiAqLworCWlmKG1jcy0+c2lyX3R3ZWFrKQorCQlydmFsIHw9IE1DU19TSVIxNlVTOwkvKiAxLjZ1cyBwdWxzZSB3aWR0aCAqLworCWVsc2UKKwkJcnZhbCAmPSB+TUNTX1NJUjE2VVM7CS8qIDMvMTYgYml0IHRpbWUgcHVsc2Ugd2lkdGggKi8KKworCS8qIG1ha2Ugc3VyZSBhc2sgbW9kZSBhbmQgYmFjayB0byBiYWNrIHBhY2tldHMgYXJlIG9mZi4gKi8KKwlydmFsICY9IH4oTUNTX0JCVEcgfCBNQ1NfQVNLKTsKKworCXJ2YWwgJj0gfk1DU19TUEVFRF9NQVNLOworCXJ2YWwgfD0gTUNTX1NQRUVEXzk2MDA7CQkvKiBtYWtlIHN1cmUgaW5pdGlhbCBzcGVlZCBpcyA5NjAwLiAqLworCW1jcy0+c3BlZWQgPSA5NjAwOworCW1jcy0+bmV3X3NwZWVkID0gMDsJCS8qIG5ld19zcGVlZCBpcyBzZXQgdG8gMCAqLworCXJ2YWwgJj0gfk1DU19QTExQV0ROOwkJLyogZGlzYWJsZSBwb3dlciBkb3duLiAqLworCisJLyogbWFrZSBzdXJlIGRldmljZSBkZXRlcm1pbmVzIGRpcmVjdGlvbiBhbmQgdGhhdCB0aGUgYXV0byBzZW5kIHNpcAorCSAqIHB1bHNlIGFyZSBvbi4KKwkgKi8KKwlydmFsIHw9IE1DU19EVEQgfCBNQ1NfU0lQRU47CisKKwlyZXQgPSBtY3Nfc2V0X3JlZyhtY3MsIE1DU19NT0RFX1JFRywgcnZhbCk7CisJaWYodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnJvcjsKKworCW1zZyA9ICJ0cmFuc2NlaXZlciBtb2RlbCBzcGVjaWZpYyBzZXR1cCBlcnJvci4iOworCXN3aXRjaCAobWNzLT50cmFuc2NlaXZlcl90eXBlKSB7CisJY2FzZSBNQ1NfVFNDX1ZJU0hBWToKKwkJcmV0ID0gbWNzX3NldHVwX3RyYW5zY2VpdmVyX3Zpc2hheShtY3MpOworCQlicmVhazsKKworCWNhc2UgTUNTX1RTQ19TSEFSUDoKKwkJcmV0ID0gbWNzX3NldHVwX3RyYW5zY2VpdmVyX3NoYXJwKG1jcyk7CisJCWJyZWFrOworCisJY2FzZSBNQ1NfVFNDX0FHSUxFTlQ6CisJCXJldCA9IG1jc19zZXR1cF90cmFuc2NlaXZlcl9hZ2lsZW50KG1jcyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJSVJEQV9XQVJOSU5HKCJVbmtub3duIHRyYW5zY2VpdmVyIHR5cGU6ICVkIiwKKwkJCSAgICAgbWNzLT50cmFuc2NlaXZlcl90eXBlKTsKKwkJcmV0ID0gMTsKKwl9CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJZiB0cmFuc2NlaXZlciBpcyBub3QgU0hBUlAsIHRoZW4gaWYgcmVjZWl2ZSBtb2RlIHNldAorCSogb24gdGhlIFJYRkFTVCBiaXQgaW4gdGhlIFhDVlIgUmVnaXN0ZXIgb3RoZXJ3aXNlIHVuc2V0IGl0CisJKi8KKwlpZiAobWNzLT50cmFuc2NlaXZlcl90eXBlICE9IE1DU19UU0NfU0hBUlApIHsKKworCQlyZXQgPSBtY3NfZ2V0X3JlZyhtY3MsIE1DU19YQ1ZSX1JFRywgJnJ2YWwpOworCQlpZiAodW5saWtlbHkocmV0ICE9IDIpKQorCQkJZ290byBlcnJvcjsKKwkJaWYgKG1jcy0+cmVjZWl2ZV9tb2RlKQorCQkJcnZhbCB8PSBNQ1NfUlhGQVNUOworCQllbHNlCisJCQlydmFsICY9IH5NQ1NfUlhGQVNUOworCQlyZXQgPSBtY3Nfc2V0X3JlZyhtY3MsIE1DU19YQ1ZSX1JFRywgcnZhbCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwltc2cgPSAidHJhbnNjZWl2ZXIgcmVzZXQuIjsKKworCXJldCA9IG1jc19nZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCAmcnZhbCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAyKSkKKwkJZ290byBlcnJvcjsKKworCS8qIHJlc2V0IHRoZSBtY3M3NzgwIHNvIGFsbCBjaGFuZ2VzIHRha2UgZWZmZWN0LiAqLworCXJ2YWwgJj0gfk1DU19SRVNFVDsKKwlyZXQgPSBtY3Nfc2V0X3JlZyhtY3MsIE1DU19NT0RFX1JFRywgcnZhbCk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyb3I7CisJZWxzZQorCQlyZXR1cm4gcmV0OworCitlcnJvcjoKKwlJUkRBX0VSUk9SKCIlcyIsIG1zZyk7CisJcmV0dXJuIHJldDsKK30KKworLyogV3JhcHMgdGhlIGRhdGEgaW4gZm9ybWF0IGZvciBTSVIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1jc193cmFwX3Npcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqIGJ1ZikKK3sKKwlpbnQgd3JhcGxlbjsKKworCS8qIDI6IGZ1bGwgZnJhbWUgbGVuZ3RoLCBpbmNsdWRpbmcgInRoZSBsZW5ndGgiICovCisJd3JhcGxlbiA9IGFzeW5jX3dyYXBfc2tiKHNrYiwgYnVmICsgMiwgNDA5NCk7CisKKwl3cmFwbGVuICs9IDI7CisJYnVmWzBdID0gd3JhcGxlbiAmIDB4ZmY7CisJYnVmWzFdID0gKHdyYXBsZW4gPj4gOCkgJiAweGZmOworCisJcmV0dXJuIHdyYXBsZW47Cit9CisKKy8qIFdyYXBzIHRoZSBkYXRhIGluIGZvcm1hdCBmb3IgRklSICovCitzdGF0aWMgdW5zaWduZWQgbWNzX3dyYXBfZmlyX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICpidWYpCit7CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJX191MzIgZmNzID0gfihjcmMzMl9sZSh+MCwgc2tiLT5kYXRhLCBza2ItPmxlbikpOworCisJLyogYWRkIDIgYnl0ZXMgZm9yIGxlbmd0aCB2YWx1ZSBhbmQgNCBieXRlcyBmb3IgZmNzLiAqLworCWxlbiA9IHNrYi0+bGVuICsgNjsKKworCS8qIFRoZSBtY3M3NzgwIHJlcXVpcmVzIHRoYXQgdGhlIGZpcnN0IHR3byBieXRlcyBhcmUgdGhlIHBhY2tldAorCSAqIGxlbmd0aCBpbiBsaXR0bGUgZW5kaWFuIG9yZGVyLiAgTm90ZTogdGhlIGxlbmd0aCB2YWx1ZSBpbmNsdWRlcworCSAqIHRoZSB0d28gYnl0ZXMgZm9yIHRoZSBsZW5ndGggdmFsdWUgaXRzZWxmLgorCSAqLworCWJ1ZlswXSA9IGxlbiAmIDB4ZmY7CisJYnVmWzFdID0gKGxlbiA+PiA4KSAmIDB4ZmY7CisJLyogY29weSB0aGUgZGF0YSBpbnRvIHRoZSB0eCBidWZmZXIuICovCisJbWVtY3B5KGJ1ZisyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkvKiBwdXQgdGhlIGZjcyBpbiB0aGUgbGFzdCBmb3VyIGJ5dGVzIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIuICovCisJYnVmW2xlbiAtIDRdID0gZmNzICYgMHhmZjsKKwlidWZbbGVuIC0gM10gPSAoZmNzID4+IDgpICYgMHhmZjsKKwlidWZbbGVuIC0gMl0gPSAoZmNzID4+IDE2KSAmIDB4ZmY7CisJYnVmW2xlbiAtIDFdID0gKGZjcyA+PiAyNCkgJiAweGZmOworCisJcmV0dXJuIGxlbjsKK30KKworLyogV3JhcHMgdGhlIGRhdGEgaW4gZm9ybWF0IGZvciBNSVIgKi8KK3N0YXRpYyB1bnNpZ25lZCBtY3Nfd3JhcF9taXJfc2tiKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fdTggKmJ1ZikKK3sKKwlfX3UxNiBmY3MgPSAwOworCWludCBsZW4gPSBza2ItPmxlbiArIDQ7CisKKwlmY3MgPSB+KGlyZGFfY2FsY19jcmMxNih+ZmNzLCBza2ItPmRhdGEsIHNrYi0+bGVuKSk7CisJLyogcHV0IHRoZSB0b3RhbCBwYWNrZXQgbGVuZ3RoIGluIGZpcnN0LiAgTm90ZTogcGFja2V0IGxlbmd0aAorCSAqIHZhbHVlIGluY2x1ZGVzIHRoZSB0d28gYnl0ZXMgdGhhdCBob2xkIHRoZSBwYWNrZXQgbGVuZ3RoCisJICogaXRzZWxmLgorCSAqLworCWJ1ZlswXSA9IGxlbiAmIDB4ZmY7CisJYnVmWzFdID0gKGxlbiA+PiA4KSAmIDB4ZmY7CisJLyogY29weSB0aGUgZGF0YSAqLworCW1lbWNweShidWYrMiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJLyogcHV0IHRoZSBmY3MgaW4gbGFzdCB0d28gYnl0ZXMgaW4gbGl0dGxlIGVuZGlhbiBvcmRlci4gKi8KKwlidWZbbGVuIC0gMl0gPSBmY3MgJiAweGZmOworCWJ1ZltsZW4gLSAxXSA9IChmY3MgPj4gOCkgJiAweGZmOworCisJcmV0dXJuIGxlbjsKK30KKworLyogVW53cmFwIHJlY2VpdmVkIHBhY2tldHMgYXQgTUlSIHNwZWVkLiAgQSAxNiBiaXQgY3JjX2NjaXR0IGNoZWNrc3VtIGlzCisgKiB1c2VkIGZvciB0aGUgZmNzLiAgV2hlbiBwZXJmb3JtZWQgb3ZlciB0aGUgZW50aXJlIHBhY2tldCB0aGUgcmVzdWx0CisgKiBzaG91bGQgYmUgR09PRF9GQ1MgPSAweGYwYjguICBIYW5kcyB0aGUgdW53cmFwcGVkIGRhdGEgb2ZmIHRvIHRoZSBJckRBCisgKiBsYXllciB2aWEgYSBza19idWZmLgorICovCitzdGF0aWMgdm9pZCBtY3NfdW53cmFwX21pcihzdHJ1Y3QgbWNzX2NiICptY3MsIF9fdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlfX3UxNiBmY3M7CisJaW50IG5ld19sZW47CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qIEFzc3VtZSB0aGF0IHRoZSBmcmFtZXMgYXJlIGdvaW5nIHRvIGZpbGwgYSBzaW5nbGUgcGFja2V0CisJICogcmF0aGVyIHRoYW4gc3BhbiBtdWx0aXBsZSBwYWNrZXRzLgorCSAqLworCisJbmV3X2xlbiA9IGxlbiAtIDI7CisJaWYodW5saWtlbHkobmV3X2xlbiA8PSAwKSkgeworCQlJUkRBX0VSUk9SKCIlcyBzaG9ydCBmcmFtZSBsZW5ndGggJWRcbiIsCisJCQkgICAgIG1jcy0+bmV0ZGV2LT5uYW1lLCBuZXdfbGVuKTsKKwkJKyttY3MtPnN0YXRzLnJ4X2Vycm9yczsKKwkJKyttY3MtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM7CisJCXJldHVybjsKKwl9CisJZmNzID0gMDsKKwlmY3MgPSBpcmRhX2NhbGNfY3JjMTYofmZjcywgYnVmLCBsZW4pOworCisJaWYoZmNzICE9IEdPT0RfRkNTKSB7CisJCUlSREFfRVJST1IoImNyYyBlcnJvciBjYWxjIDB4JXggbGVuICVkXG4iLAorCQkJICAgZmNzLCBuZXdfbGVuKTsKKwkJbWNzLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJbWNzLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCXJldHVybjsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKG5ld19sZW4gKyAxKTsKKwlpZih1bmxpa2VseSghc2tiKSkgeworCQkrK21jcy0+c3RhdHMucnhfZHJvcHBlZDsKKwkJcmV0dXJuOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgMSk7CisJbWVtY3B5KHNrYi0+ZGF0YSwgYnVmLCBuZXdfbGVuKTsKKwlza2JfcHV0KHNrYiwgbmV3X2xlbik7CisJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUkRBKTsKKwlza2ItPmRldiA9IG1jcy0+bmV0ZGV2OworCisJbmV0aWZfcngoc2tiKTsKKworCW1jcy0+c3RhdHMucnhfcGFja2V0cysrOworCW1jcy0+c3RhdHMucnhfYnl0ZXMgKz0gbmV3X2xlbjsKKworCXJldHVybjsKK30KKworLyogVW53cmFwIHJlY2VpdmVkIHBhY2tldHMgYXQgRklSIHNwZWVkLiAgQSAzMiBiaXQgY3JjX2NjaXR0IGNoZWNrc3VtIGlzCisgKiB1c2VkIGZvciB0aGUgZmNzLiAgSGFuZHMgdGhlIHVud3JhcHBlZCBkYXRhIG9mZiB0byB0aGUgSXJEQQorICogbGF5ZXIgdmlhIGEgc2tfYnVmZi4KKyAqLworc3RhdGljIHZvaWQgbWNzX3Vud3JhcF9maXIoc3RydWN0IG1jc19jYiAqbWNzLCBfX3U4ICpidWYsIGludCBsZW4pCit7CisJX191MzIgZmNzOworCWludCBuZXdfbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBBc3N1bWUgdGhhdCB0aGUgZnJhbWVzIGFyZSBnb2luZyB0byBmaWxsIGEgc2luZ2xlIHBhY2tldAorCSAqIHJhdGhlciB0aGFuIHNwYW4gbXVsdGlwbGUgcGFja2V0cy4gIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBmYWxzZQorCSAqIGFzc3VtcHRpb24uCisJICovCisKKwluZXdfbGVuID0gbGVuIC0gNDsKKwlpZih1bmxpa2VseShuZXdfbGVuIDw9IDApKSB7CisJCUlSREFfRVJST1IoIiVzIHNob3J0IGZyYW1lIGxlbmd0aCAlZFxuIiwKKwkJCSAgIG1jcy0+bmV0ZGV2LT5uYW1lLCBuZXdfbGVuKTsKKwkJKyttY3MtPnN0YXRzLnJ4X2Vycm9yczsKKwkJKyttY3MtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM7CisJCXJldHVybjsKKwl9CisKKwlmY3MgPSB+KGNyYzMyX2xlKH4wLCBidWYsIG5ld19sZW4pKTsKKwlpZihmY3MgIT0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgodTMyICopKGJ1ZituZXdfbGVuKSkpKSB7CisJCUlSREFfRVJST1IoImNyYyBlcnJvciBjYWxjIDB4JXggbGVuICVkXG4iLCBmY3MsIG5ld19sZW4pOworCQltY3MtPnN0YXRzLnJ4X2Vycm9ycysrOworCQltY3MtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJcmV0dXJuOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IobmV3X2xlbiArIDEpOworCWlmKHVubGlrZWx5KCFza2IpKSB7CisJCSsrbWNzLT5zdGF0cy5yeF9kcm9wcGVkOworCQlyZXR1cm47CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCAxKTsKKwltZW1jcHkoc2tiLT5kYXRhLCBidWYsIG5ld19sZW4pOworCXNrYl9wdXQoc2tiLCBuZXdfbGVuKTsKKwlza2ItPm1hYy5yYXcgPSBza2ItPmRhdGE7CisJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lSREEpOworCXNrYi0+ZGV2ID0gbWNzLT5uZXRkZXY7CisKKwluZXRpZl9yeChza2IpOworCisJbWNzLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbWNzLT5zdGF0cy5yeF9ieXRlcyArPSBuZXdfbGVuOworCisJcmV0dXJuOworfQorCisKKy8qIEFsbG9jYXRlcyB1cmJzIGZvciBib3RoIHJlY2VpdmUgYW5kIHRyYW5zbWl0LgorICogSWYgYWxsb2MgZmFpbHMgcmV0dXJuIGVycm9yIGNvZGUgMCAoZmFpbCkgb3RoZXJ3aXNlCisgKiByZXR1cm4gZXJyb3IgY29kZSAxIChzdWNjZXNzKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWNzX3NldHVwX3VyYnMoc3RydWN0IG1jc19jYiAqbWNzKQoreworCW1jcy0+cnhfdXJiID0gTlVMTDsKKworCW1jcy0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jcy0+dHhfdXJiKQorCQlyZXR1cm4gMDsKKworCW1jcy0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jcy0+cnhfdXJiKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKiBTZXRzIHVwIHN0YXRlIHRvIGJlIGluaXRpYWxseSBvdXRzaWRlIGZyYW1lLCBnZXRzIHJlY2VpdmUgdXJiLAorICogc2V0cyBzdGF0dXMgdG8gc3VjY2Vzc2Z1bCBhbmQgdGhlbiBzdWJtaXRzIHRoZSB1cmIgdG8gc3RhcnQKKyAqIHJlY2VpdmluZyB0aGUgZGF0YS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWNzX3JlY2VpdmVfc3RhcnQoc3RydWN0IG1jc19jYiAqbWNzKQoreworCW1jcy0+cnhfYnVmZi5pbl9mcmFtZSA9IEZBTFNFOworCW1jcy0+cnhfYnVmZi5zdGF0ZSA9IE9VVFNJREVfRlJBTUU7CisKKwl1c2JfZmlsbF9idWxrX3VyYihtY3MtPnJ4X3VyYiwgbWNzLT51c2JkZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShtY3MtPnVzYmRldiwgbWNzLT5lcF9pbiksCisJCQkgIG1jcy0+aW5fYnVmLCA0MDk2LCBtY3NfcmVjZWl2ZV9pcnEsIG1jcyk7CisKKwltY3MtPnJ4X3VyYi0+c3RhdHVzID0gMDsKKwlyZXR1cm4gdXNiX3N1Ym1pdF91cmIobWNzLT5yeF91cmIsIEdGUF9LRVJORUwpOworfQorCisvKiBGaW5kcyB0aGUgaW4gYW5kIG91dCBlbmRwb2ludHMgZm9yIHRoZSBtY3MgY29udHJvbCBibG9jayAqLworc3RhdGljIGlubGluZSBpbnQgbWNzX2ZpbmRfZW5kcG9pbnRzKHN0cnVjdCBtY3NfY2IgKm1jcywKKwkJCQkgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsIGludCBlcG51bSkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIElmIG5vIHBsYWNlIHRvIHN0b3JlIHRoZSBlbmRwb2ludHMganVzdCByZXR1cm4gKi8KKwlpZiAoIWVwKQorCQlyZXR1cm4gcmV0OworCisJLyogY3ljbGUgdGhyb3VnaCBhbGwgZW5kcG9pbnRzLCBmaW5kIHRoZSBmaXJzdCB0d28gdGhhdCBhcmUgRElSX0lOICovCisJZm9yIChpID0gMDsgaSA8IGVwbnVtOyBpKyspIHsKKwkJaWYgKGVwW2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQltY3MtPmVwX2luID0gZXBbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQllbHNlCisJCQltY3MtPmVwX291dCA9IGVwW2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKworCQkvKiBNb3NDaGlwIHNheXMgdGhhdCB0aGUgY2hpcCBoYXMgb25seSB0d28gYnVsaworCQkgKiBlbmRwb2ludHMuIEZpbmQgb25lIGZvciBlYWNoIGRpcmVjdGlvbiBhbmQgbW92ZSBvbi4KKwkJICovCisJCWlmICgobWNzLT5lcF9pbiAhPSAwKSAmJiAobWNzLT5lcF9vdXQgIT0gMCkpIHsKKwkJCXJldCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1jc19zcGVlZF93b3JrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWNzX2NiICptY3MgPSBhcmc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jcy0+bmV0ZGV2OworCisJbWNzX3NwZWVkX2NoYW5nZShtY3MpOworCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKK30KKworLyogRnVuY3Rpb24gdG8gY2hhbmdlIHRoZSBzcGVlZCBvZiB0aGUgbWNzNzc4MC4gIEZ1bGx5IHN1cHBvcnRzIFNJUiwKKyAqIE1JUiwgYW5kIEZJUiBzcGVlZHMuCisgKi8KK3N0YXRpYyBpbnQgbWNzX3NwZWVkX2NoYW5nZShzdHJ1Y3QgbWNzX2NiICptY3MpCit7CisJaW50IHJldCA9IDA7CisJaW50IHJzdCA9IDA7CisJaW50IGNudCA9IDA7CisJX191MTYgbnNwZWVkOworCV9fdTE2IHJ2YWw7CisKKwluc3BlZWQgPSBtY3Nfc3BlZWRfc2V0WyhtY3MtPm5ld19zcGVlZCA+PiA4KSAmIDB4MGZdOworCisJZG8geworCQltY3NfZ2V0X3JlZyhtY3MsIE1DU19SRVNWX1JFRywgJnJ2YWwpOworCX0gd2hpbGUoY250KysgPCAxMDAgJiYgKHJ2YWwgJiBNQ1NfSVJJTlRYKSk7CisKKwlpZihjbnQgPj0gMTAwKSB7CisJCUlSREFfRVJST1IoInVuYWJsZSB0byBjaGFuZ2Ugc3BlZWQiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltY3NfZ2V0X3JlZyhtY3MsIE1DU19NT0RFX1JFRywgJnJ2YWwpOworCisJLyogTUlOUlhQVyB2YWx1ZXMgcmVjb21lbmRlZCBieSBNb3NDaGlwICovCisJaWYgKG1jcy0+bmV3X3NwZWVkIDw9IDExNTIwMCkgeworCQlydmFsICY9IH5NQ1NfRklSOworCisJCWlmICgocnN0ID0gKG1jcy0+c3BlZWQgPiAxMTUyMDApKSkKKwkJCW1jc19zZXRfcmVnKG1jcywgTUNTX01JTlJYUFdfUkVHLCAwKTsKKworCX0gZWxzZSBpZiAobWNzLT5uZXdfc3BlZWQgPD0gMTE1MjAwMCkgeworCQlydmFsICY9IH5NQ1NfRklSOworCisJCWlmICgocnN0ID0gIShtY3MtPnNwZWVkID09IDU3NjAwMCB8fCBtY3MtPnNwZWVkID09IDExNTIwMDApKSkKKwkJCW1jc19zZXRfcmVnKG1jcywgTUNTX01JTlJYUFdfUkVHLCA1KTsKKworCX0gZWxzZSB7CisJCXJ2YWwgfD0gTUNTX0ZJUjsKKworCQlpZiAoKHJzdCA9IChtY3MtPnNwZWVkICE9IDQwMDAwMDApKSkKKwkJCW1jc19zZXRfcmVnKG1jcywgTUNTX01JTlJYUFdfUkVHLCA1KTsKKworCX0KKworCXJ2YWwgJj0gfk1DU19TUEVFRF9NQVNLOworCXJ2YWwgfD0gbnNwZWVkOworCisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsIHJ2YWwpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJaWYgKHJzdCkKKwkJc3dpdGNoIChtY3MtPnRyYW5zY2VpdmVyX3R5cGUpIHsKKwkJY2FzZSBNQ1NfVFNDX1ZJU0hBWToKKwkJCXJldCA9IG1jc19zZXR1cF90cmFuc2NlaXZlcl92aXNoYXkobWNzKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTUNTX1RTQ19TSEFSUDoKKwkJCXJldCA9IG1jc19zZXR1cF90cmFuc2NlaXZlcl9zaGFycChtY3MpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNQ1NfVFNDX0FHSUxFTlQ6CisJCQlyZXQgPSBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfYWdpbGVudChtY3MpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldCA9IDE7CisJCQlJUkRBX1dBUk5JTkcoIlVua25vd24gdHJhbnNjZWl2ZXIgdHlwZTogJWQiLAorCQkJCSAgICAgbWNzLT50cmFuc2NlaXZlcl90eXBlKTsKKwkJfQorCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJbWNzX2dldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsICZydmFsKTsKKwlydmFsICY9IH5NQ1NfUkVTRVQ7CisJcmV0ID0gbWNzX3NldF9yZWcobWNzLCBNQ1NfTU9ERV9SRUcsIHJ2YWwpOworCisJbWNzLT5zcGVlZCA9IG1jcy0+bmV3X3NwZWVkOworCWVycm9yOgorCQltY3MtPm5ld19zcGVlZCA9IDA7CisJCXJldHVybiByZXQ7Cit9CisKKy8qIElvY3RsIGNhbGxzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLiAgQ2FuIGJlIGFuIGFyZWEgb2YgZnV0dXJlIHdvcmsuICovCitzdGF0aWMgaW50IG1jc19uZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwkvKiBzdHJ1Y3QgaWZfaXJkYV9yZXEgKmlycSA9IChzdHJ1Y3QgaWZfaXJkYV9yZXEgKilycTsgKi8KKwkvKiBzdHJ1Y3QgbWNzX2NiICptY3MgPSBuZXRkZXZfcHJpdihuZXRkZXYpOyAqLworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBOZXR3b3JrIGRldmljZSBpcyB0YWtlbiBkb3duLCBkb25lIGJ5ICJpZmNvbmZpZyBpcmRhMCBkb3duIiAqLworc3RhdGljIGludCBtY3NfbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG1jc19jYiAqbWNzID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIFN0b3AgdHJhbnNtaXQgcHJvY2Vzc2luZyAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIGtpbGwgYW5kIGZyZWUgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IFVSQnMgKi8KKwl1c2Jfa2lsbF91cmIobWNzLT5yeF91cmIpOworCXVzYl9mcmVlX3VyYihtY3MtPnJ4X3VyYik7CisJdXNiX2tpbGxfdXJiKG1jcy0+dHhfdXJiKTsKKwl1c2JfZnJlZV91cmIobWNzLT50eF91cmIpOworCisJLyogU3RvcCBhbmQgcmVtb3ZlIGluc3RhbmNlIG9mIElyTEFQICovCisJaWYgKG1jcy0+aXJsYXApCisJCWlybGFwX2Nsb3NlKG1jcy0+aXJsYXApOworCisJbWNzLT5pcmxhcCA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworLyogTmV0d29yayBkZXZpY2UgaXMgdGFrZW4gdXAsIGRvbmUgYnkgImlmY29uZmlnIGlyZGEwIHVwIiAqLworc3RhdGljIGludCBtY3NfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgbWNzX2NiICptY3MgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWNoYXIgaHduYW1lWzE2XTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHVzYl9jbGVhcl9oYWx0KG1jcy0+dXNiZGV2LAorCQkJICAgICB1c2Jfc25kYnVsa3BpcGUobWNzLT51c2JkZXYsIG1jcy0+ZXBfaW4pKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yMTsKKwlyZXQgPSB1c2JfY2xlYXJfaGFsdChtY3MtPnVzYmRldiwKKwkJCSAgICAgdXNiX3JjdmJ1bGtwaXBlKG1jcy0+dXNiZGV2LCBtY3MtPmVwX291dCkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3IxOworCisJcmV0ID0gbWNzX3NldHVwX3RyYW5zY2VpdmVyKG1jcyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjE7CisKKwlyZXQgPSAtRU5PTUVNOworCisJLyogSW5pdGlhbGl6ZSBmb3IgU0lSL0ZJUiB0byBjb3B5IGRhdGEgZGlyZWN0bHkgaW50byBza2IuICAqLworCW1jcy0+cmVjZWl2aW5nID0gMDsKKwltY3MtPnJ4X2J1ZmYudHJ1ZXNpemUgPSBJUkRBX1NLQl9NQVhfTVRVOworCW1jcy0+cnhfYnVmZi5za2IgPSBkZXZfYWxsb2Nfc2tiKElSREFfU0tCX01BWF9NVFUpOworCWlmICghbWNzLT5yeF9idWZmLnNrYikKKwkJZ290byBlcnJvcjE7CisKKwlza2JfcmVzZXJ2ZShtY3MtPnJ4X2J1ZmYuc2tiLCAxKTsKKwltY3MtPnJ4X2J1ZmYuaGVhZCA9IG1jcy0+cnhfYnVmZi5za2ItPmRhdGE7CisJZG9fZ2V0dGltZW9mZGF5KCZtY3MtPnJ4X3RpbWUpOworCisJLyoKKwkgKiBOb3cgdGhhdCBldmVyeXRoaW5nIHNob3VsZCBiZSBpbml0aWFsaXplZCBwcm9wZXJseSwKKwkgKiBPcGVuIG5ldyBJckxBUCBsYXllciBpbnN0YW5jZSB0byB0YWtlIGNhcmUgb2YgdXMuLi4KKwkgKiBOb3RlIDogd2lsbCBzZW5kIGltbWVkaWF0ZWx5IGEgc3BlZWQgY2hhbmdlLi4uCisJICovCisJc3ByaW50Zihod25hbWUsICJ1c2IjJWQiLCBtY3MtPnVzYmRldi0+ZGV2bnVtKTsKKwltY3MtPmlybGFwID0gaXJsYXBfb3BlbihuZXRkZXYsICZtY3MtPnFvcywgaHduYW1lKTsKKwlpZiAoIW1jcy0+aXJsYXApIHsKKwkJSVJEQV9FUlJPUigibWNzNzc4MDogaXJsYXBfb3BlbiBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjI7CisJfQorCisJaWYgKCFtY3Nfc2V0dXBfdXJicyhtY3MpKQorCWdvdG8gZXJyb3IzOworCisJcmV0ID0gbWNzX3JlY2VpdmVfc3RhcnQobWNzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yMzsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJcmV0dXJuIDA7CisKKwllcnJvcjM6CisJCWlybGFwX2Nsb3NlKG1jcy0+aXJsYXApOworCWVycm9yMjoKKwkJa2ZyZWVfc2tiKG1jcy0+cnhfYnVmZi5za2IpOworCWVycm9yMToKKwkJcmV0dXJuIHJldDsKK30KKworCisvKiBHZXQgZGV2aWNlIHN0YXRzIGZvciAvcHJvYy9uZXQvZGV2IGFuZCBpZmNvbmZpZyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICptY3NfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBtY3NfY2IgKm1jcyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuICZtY3MtPnN0YXRzOworfQorCisvKiBSZWNlaXZlIGNhbGxiYWNrIGZ1bmN0aW9uLiAgKi8KK3N0YXRpYyB2b2lkIG1jc19yZWNlaXZlX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCV9fdTggKmJ5dGVzOworCXN0cnVjdCBtY3NfY2IgKm1jcyA9IHVyYi0+Y29udGV4dDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG1jcy0+bmV0ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKHVyYi0+c3RhdHVzKQorCQlyZXR1cm47CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQlieXRlcyA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJCS8qIE1DUyByZXR1cm5zIGZyYW1lcyB3aXRob3V0IEJPRiBhbmQgRU9GCisJCSAqIEkgYXNzdW1lIGl0IHJldHVybnMgd2hvbGUgZnJhbWVzLgorCQkgKi8KKwkJLyogU0lSIHNwZWVkICovCisJCWlmKG1jcy0+c3BlZWQgPCA1NzYwMDApIHsKKwkJCWFzeW5jX3Vud3JhcF9jaGFyKG1jcy0+bmV0ZGV2LCAmbWNzLT5zdGF0cywKKwkJCQkgICZtY3MtPnJ4X2J1ZmYsIDB4YzApOworCisJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpKyspCisJCQkJYXN5bmNfdW53cmFwX2NoYXIobWNzLT5uZXRkZXYsICZtY3MtPnN0YXRzLAorCQkJCQkgICZtY3MtPnJ4X2J1ZmYsIGJ5dGVzW2ldKTsKKworCQkJYXN5bmNfdW53cmFwX2NoYXIobWNzLT5uZXRkZXYsICZtY3MtPnN0YXRzLAorCQkJCSAgJm1jcy0+cnhfYnVmZiwgMHhjMSk7CisJCX0KKwkJLyogTUlSIHNwZWVkICovCisJCWVsc2UgaWYobWNzLT5zcGVlZCA9PSA1NzYwMDAgfHwgbWNzLT5zcGVlZCA9PSAxMTUyMDAwKSB7CisJCQltY3NfdW53cmFwX21pcihtY3MsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCX0KKwkJLyogRklSIHNwZWVkICovCisJCWVsc2UgeworCQkJbWNzX3Vud3JhcF9maXIobWNzLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQl9CisJCW1jcy0+bmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJZG9fZ2V0dGltZW9mZGF5KCZtY3MtPnJ4X3RpbWUpOworCX0KKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKKy8qIFRyYW5zbWl0IGNhbGxiYWNrIGZ1bnRpb24uICAqLworc3RhdGljIHZvaWQgbWNzX3NlbmRfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG1jc19jYiAqbWNzID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbWNzLT5uZXRkZXY7CisKKwlpZiAodW5saWtlbHkobWNzLT5uZXdfc3BlZWQpKQorCQlzY2hlZHVsZV93b3JrKCZtY3MtPndvcmspOworCWVsc2UKKwkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKK30KKworLyogVHJhbnNtaXQgY2FsbGJhY2sgZnVudGlvbi4gICovCitzdGF0aWMgaW50IG1jc19oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWNzX2NiICptY3M7CisJaW50IHdyYXBsZW47CisJaW50IHJldCA9IDA7CisKKworCWlmIChza2IgPT0gTlVMTCB8fCBuZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKwltY3MgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY3MtPmxvY2ssIGZsYWdzKTsKKworCW1jcy0+bmV3X3NwZWVkID0gaXJkYV9nZXRfbmV4dF9zcGVlZChza2IpOworCWlmIChsaWtlbHkobWNzLT5uZXdfc3BlZWQgPT0gbWNzLT5zcGVlZCkpCisJCW1jcy0+bmV3X3NwZWVkID0gMDsKKworCS8qIFNJUiBzcGVlZCAqLworCWlmKG1jcy0+c3BlZWQgPCA1NzYwMDApIHsKKwkJd3JhcGxlbiA9IG1jc193cmFwX3Npcl9za2Ioc2tiLCBtY3MtPm91dF9idWYpOworCX0KKwkvKiBNSVIgc3BlZWQgKi8KKwllbHNlIGlmKG1jcy0+c3BlZWQgPT0gNTc2MDAwIHx8IG1jcy0+c3BlZWQgPT0gMTE1MjAwMCkgeworCQl3cmFwbGVuID0gbWNzX3dyYXBfbWlyX3NrYihza2IsIG1jcy0+b3V0X2J1Zik7CisJfQorCS8qIEZJUiBzcGVlZCAqLworCWVsc2UgeworCQl3cmFwbGVuID0gbWNzX3dyYXBfZmlyX3NrYihza2IsIG1jcy0+b3V0X2J1Zik7CisJfQorCXVzYl9maWxsX2J1bGtfdXJiKG1jcy0+dHhfdXJiLCBtY3MtPnVzYmRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKG1jcy0+dXNiZGV2LCBtY3MtPmVwX291dCksCisJCQkgIG1jcy0+b3V0X2J1Ziwgd3JhcGxlbiwgbWNzX3NlbmRfaXJxLCBtY3MpOworCisJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihtY3MtPnR4X3VyYiwgR0ZQX0FUT01JQykpKSB7CisJCUlSREFfRVJST1IoImZhaWxlZCB0eF91cmI6ICVkIiwgcmV0KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRU5PREVWOgorCQljYXNlIC1FUElQRToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbWNzLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5kZXYpOworCQl9CisJfSBlbHNlIHsKKwkJbWNzLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCW1jcy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfQorCisJZGV2X2tmcmVlX3NrYihza2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlIGluIHRoZQorICogc3lzdGVtLiAgTmVlZCB0byB2ZXJpZnkgdGhlIGRldmljZSBhbmQgaWYgaXQgaXMsIHRoZW4gc3RhcnQgaGFuZGxpbmcgaXQuCisgKi8KK3N0YXRpYyBpbnQgbWNzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOworCXN0cnVjdCBtY3NfY2IgKm1jczsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCW5kZXYgPSBhbGxvY19pcmRhZGV2KHNpemVvZigqbWNzKSk7CisJaWYgKCFuZGV2KQorCQlnb3RvIGVycm9yMTsKKworCUlSREFfREVCVUcoMSwgIk1DUzc3ODAgVVNCLUlyREEgYnJpZGdlIGZvdW5kIGF0ICVkLiIsIHVkZXYtPmRldm51bSk7CisKKwkvKiB3aGF0IGlzIGl0IHJlYWx5IGZvcj8gKi8KKwlTRVRfTU9EVUxFX09XTkVSKG5kZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZpbnRmLT5kZXYpOworCisJcmV0ID0gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24odWRldik7CisJaWYgKHJldCAhPSAwKSB7CisJCUlSREFfRVJST1IoIm1jczc3ODA6IHVzYiByZXNldCBjb25maWd1cmF0aW9uIGZhaWxlZCIpOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwltY3MgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwltY3MtPnVzYmRldiA9IHVkZXY7CisJbWNzLT5uZXRkZXYgPSBuZGV2OworCXNwaW5fbG9ja19pbml0KCZtY3MtPmxvY2spOworCisJLyogSW5pdGlhbGl6ZSBRb1MgZm9yIHRoaXMgZGV2aWNlICovCisJaXJkYV9pbml0X21heF9xb3NfY2FwYWJpbGllcygmbWNzLT5xb3MpOworCisJLyogVGhhdCdzIHRoZSBSeCBjYXBhYmlsaXR5LiAqLworCW1jcy0+cW9zLmJhdWRfcmF0ZS5iaXRzICY9CisJICAgIElSXzI0MDAgfCBJUl85NjAwIHwgSVJfMTkyMDAgfCBJUl8zODQwMCB8IElSXzU3NjAwIHwgSVJfMTE1MjAwCisJCXwgSVJfNTc2MDAwIHwgSVJfMTE1MjAwMCB8IChJUl80MDAwMDAwIDw8IDgpOworCisKKwltY3MtPnFvcy5taW5fdHVybl90aW1lLmJpdHMgJj0gcW9zX210dF9iaXRzOworCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJm1jcy0+cW9zKTsKKworCS8qIFNwZWVkIGNoYW5nZSB3b3JrIGluaXRpYWxpc2F0aW9uKi8KKwlJTklUX1dPUksoJm1jcy0+d29yaywgbWNzX3NwZWVkX3dvcmssIG1jcyk7CisKKwkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KKwluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtY3NfaGFyZF94bWl0OworCW5kZXYtPm9wZW4gPSBtY3NfbmV0X29wZW47CisJbmRldi0+c3RvcCA9IG1jc19uZXRfY2xvc2U7CisJbmRldi0+Z2V0X3N0YXRzID0gbWNzX25ldF9nZXRfc3RhdHM7CisJbmRldi0+ZG9faW9jdGwgPSBtY3NfbmV0X2lvY3RsOworCisJaWYgKCFpbnRmLT5jdXJfYWx0c2V0dGluZykKKwkJZ290byBlcnJvcjI7CisKKwlyZXQgPSBtY3NfZmluZF9lbmRwb2ludHMobWNzLCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQsCisJCQkJIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMpOworCWlmICghcmV0KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3IyOworCX0KKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXJyb3IyOworCisJSVJEQV9ERUJVRygxLCAiSXJEQTogUmVnaXN0ZXJlZCBNb3NDaGlwIE1DUzc3ODAgZGV2aWNlIGFzICVzIiwKKwkJICAgbmRldi0+bmFtZSk7CisKKwltY3MtPnRyYW5zY2VpdmVyX3R5cGUgPSB0cmFuc2NlaXZlcl90eXBlOworCW1jcy0+c2lyX3R3ZWFrID0gc2lyX3R3ZWFrOworCW1jcy0+cmVjZWl2ZV9tb2RlID0gcmVjZWl2ZV9tb2RlOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtY3MpOworCXJldHVybiAwOworCisJZXJyb3IyOgorCQlmcmVlX25ldGRldihuZGV2KTsKKworCWVycm9yMToKKwkJcmV0dXJuIHJldDsKK30KKworLyogVGhlIGN1cnJlbnQgZGV2aWNlIGlzIHJlbW92ZWQsIHRoZSBVU0IgbGF5ZXIgdGVsbHMgdXMgdG8gc2h1dCBkb3duLiAqLworc3RhdGljIHZvaWQgbWNzX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IG1jc19jYiAqbWNzID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmICghbWNzKQorCQlyZXR1cm47CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJdW5yZWdpc3Rlcl9uZXRkZXYobWNzLT5uZXRkZXYpOworCWZyZWVfbmV0ZGV2KG1jcy0+bmV0ZGV2KTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJSVJEQV9ERUJVRygwLCAiTUNTNzc4MCBub3cgZGlzY29ubmVjdGVkLiIpOworfQorCisvKiBNb2R1bGUgaW5zZXJ0aW9uICovCitzdGF0aWMgaW50IF9faW5pdCBtY3NfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZtY3NfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQlJUkRBX0VSUk9SKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KK21vZHVsZV9pbml0KG1jc19pbml0KTsKKworLyogTW9kdWxlIHJlbW92YWwgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBtY3NfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZtY3NfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1jc19leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmggYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTcyM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBGaWxlbmFtZTogICAgICBtY3M3NzgwLmgKKyogVmVyc2lvbjogICAgICAgMC4yLWFscGhhCisqIERlc2NyaXB0aW9uOiAgIElyZGEgTW9zQ2hpcCBVU0IgRG9uZ2xlCisqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbAorKiBBdXRob3JzOiAgICAgICBMdWthc3ogU3RlbG1hY2ggPHN0bG1hbkBwb2N6dGEuZm0+CisqCQkgQnJpYW4gUHVnaCA8YnB1Z2hAY3MucGR4LmVkdT4KKyoKKyogICAgICAgQ29weXJpZ2h0IChDKSAyMDA1LCBMdWthc3ogU3RlbG1hY2ggPHN0bG1hbkBwb2N6dGEuZm0+CisqICAgICAgIENvcHlyaWdodCAoQykgMjAwNSwgQnJpYW4gUHVnaCA8YnB1Z2hAY3MucGR4LmVkdT4KKyoKKyogICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyogICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyogICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyogICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyoKKyogICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqICAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqICAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX01DUzc3ODBfSAorI2RlZmluZSBfTUNTNzc4MF9ICisKKyNkZWZpbmUgTUNTX01PREVfU0lSCQkwCisjZGVmaW5lIE1DU19NT0RFX01JUgkJMQorI2RlZmluZSBNQ1NfTU9ERV9GSVIJCTIKKworI2RlZmluZSBNQ1NfQ1RSTF9USU1FT1VUCTUwMAorI2RlZmluZSBNQ1NfWE1JVF9USU1FT1VUCTUwMAorLyogUG9zc2libGUgdHJhbnNjZWl2ZXIgdHlwZXMgKi8KKyNkZWZpbmUgTUNTX1RTQ19WSVNIQVkJCTAJLyogVmlzaGF5IFRGRCwgZGVmYXVsdCBjaG9pY2UgKi8KKyNkZWZpbmUgTUNTX1RTQ19BR0lMRU5UCQkxCS8qIEFnaWxlbnQgMzYwMi8zNjAwICovCisjZGVmaW5lIE1DU19UU0NfU0hBUlAJCTIJLyogU2hhcnAgR1AyVzEwMDBZUCAqLworCisvKiBSZXF1ZXN0cyAqLworI2RlZmluZSBNQ1NfUkRfUlRZUEUgMHhDMAorI2RlZmluZSBNQ1NfV1JfUlRZUEUgMHg0MAorI2RlZmluZSBNQ1NfUkRSRVEgICAgMHgwRgorI2RlZmluZSBNQ1NfV1JSRVEgICAgMHgwRQorCisvKiBSZWdpc3RlciAweDAwICovCisjZGVmaW5lIE1DU19NT0RFX1JFRwkwCisjZGVmaW5lIE1DU19GSVIJCSgoX191MTYpMHgwMDAxKQorI2RlZmluZSBNQ1NfU0lSMTZVUwkoKF9fdTE2KTB4MDAwMikKKyNkZWZpbmUgTUNTX0JCVEcJKChfX3UxNikweDAwMDQpCisjZGVmaW5lIE1DU19BU0sJCSgoX191MTYpMHgwMDA4KQorI2RlZmluZSBNQ1NfUEFSSVRZCSgoX191MTYpMHgwMDEwKQorCisvKiBTSVIvTUlSIHNwZWVkIGNvbnN0YW50cyAqLworI2RlZmluZSBNQ1NfU1BFRURfU0hJRlQJICAgIDUKKyNkZWZpbmUgTUNTX1NQRUVEX01BU0sJICAgICgoX191MTYpMHgwMEUwKQorI2RlZmluZSBNQ1NfU1BFRUQoeCkJICAgICgoeCAmIE1DU19TUEVFRF9NQVNLKSA+PiBNQ1NfU1BFRURfU0hJRlQpCisjZGVmaW5lIE1DU19TUEVFRF8yNDAwCSAgICAoKDAgPDwgTUNTX1NQRUVEX1NISUZUKSAmIE1DU19TUEVFRF9NQVNLKQorI2RlZmluZSBNQ1NfU1BFRURfOTYwMAkgICAgKCgxIDw8IE1DU19TUEVFRF9TSElGVCkgJiBNQ1NfU1BFRURfTUFTSykKKyNkZWZpbmUgTUNTX1NQRUVEXzE5MjAwCSAgICAoKDIgPDwgTUNTX1NQRUVEX1NISUZUKSAmIE1DU19TUEVFRF9NQVNLKQorI2RlZmluZSBNQ1NfU1BFRURfMzg0MDAJICAgICgoMyA8PCBNQ1NfU1BFRURfU0hJRlQpICYgTUNTX1NQRUVEX01BU0spCisjZGVmaW5lIE1DU19TUEVFRF81NzYwMAkgICAgKCg0IDw8IE1DU19TUEVFRF9TSElGVCkgJiBNQ1NfU1BFRURfTUFTSykKKyNkZWZpbmUgTUNTX1NQRUVEXzExNTIwMCAgICAoKDUgPDwgTUNTX1NQRUVEX1NISUZUKSAmIE1DU19TUEVFRF9NQVNLKQorI2RlZmluZSBNQ1NfU1BFRURfNTc2MDAwICAgICgoNiA8PCBNQ1NfU1BFRURfU0hJRlQpICYgTUNTX1NQRUVEX01BU0spCisjZGVmaW5lIE1DU19TUEVFRF8xMTUyMDAwICAgKCg3IDw8IE1DU19TUEVFRF9TSElGVCkgJiBNQ1NfU1BFRURfTUFTSykKKworI2RlZmluZSBNQ1NfUExMUFdETgkoKF9fdTE2KTB4MDEwMCkKKyNkZWZpbmUgTUNTX0RSSVZFUgkoKF9fdTE2KTB4MDIwMCkKKyNkZWZpbmUgTUNTX0RURAkJKChfX3UxNikweDA0MDApCisjZGVmaW5lIE1DU19ESVIJCSgoX191MTYpMHgwODAwKQorI2RlZmluZSBNQ1NfU0lQRU4JKChfX3UxNikweDEwMDApCisjZGVmaW5lIE1DU19TRU5EU0lQCSgoX191MTYpMHgyMDAwKQorI2RlZmluZSBNQ1NfQ0hHRElSCSgoX191MTYpMHg0MDAwKQorI2RlZmluZSBNQ1NfUkVTRVQJKChfX3UxNikweDgwMDApCisKKy8qIFJlZ2lzdGVyIDB4MDIgKi8KKyNkZWZpbmUgTUNTX1hDVlJfUkVHCTIKKyNkZWZpbmUgTUNTX01PREUwCSgoX191MTYpMHgwMDAxKQorI2RlZmluZSBNQ1NfU1RGSVIJKChfX3UxNikweDAwMDIpCisjZGVmaW5lIE1DU19YQ1ZSX0NPTkYJKChfX3UxNikweDAwMDQpCisjZGVmaW5lIE1DU19SWEZBU1QJKChfX3UxNikweDAwMDgpCisvKiBUWENVUiBbNjo0XSAqLworI2RlZmluZSBNQ1NfVFhDVVJfU0hJRlQJNAorI2RlZmluZSBNQ1NfVFhDVVJfTUFTSwkoKF9fdTE2KTB4MDA3MCkKKyNkZWZpbmUgTUNTX1RYQ1VSKHgpCSgoeCAmIE1DU19UWENVUl9NQVNLKSA+PiBNQ1NfVFhDVVJfU0hJRlQpCisjZGVmaW5lIE1DU19TRVRUWENVUih4LHkpIFwKKwkoKHggJiB+TUNTX1RYQ1VSX01BU0spIHwgKHkgPDwgTUNTX1RYQ1VSX1NISUZUKSAmIE1DU19UWENVUl9NQVNLKQorCisjZGVmaW5lIE1DU19NT0RFMQkoKF9fdTE2KTB4MDA4MCkKKyNkZWZpbmUgTUNTX1NNT0RFMAkoKF9fdTE2KTB4MDEwMCkKKyNkZWZpbmUgTUNTX1NNT0RFMQkoKF9fdTE2KTB4MDIwMCkKKyNkZWZpbmUgTUNTX0lOVlRYCSgoX191MTYpMHgwNDAwKQorI2RlZmluZSBNQ1NfSU5WUlgJKChfX3UxNikweDA4MDApCisKKyNkZWZpbmUgTUNTX01JTlJYUFdfUkVHCTQKKworI2RlZmluZSBNQ1NfUkVTVl9SRUcgNworI2RlZmluZSBNQ1NfSVJJTlRYCSgoX191MTYpMHgwMDAxKQorI2RlZmluZSBNQ1NfSVJJTlJYCSgoX191MTYpMHgwMDAyKQorCitzdHJ1Y3QgbWNzX2NiIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwkvKiBpbml0OiBwcm9iZV9pcmRhICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsJLyogbmV0d29yayBsYXllciAqLworCXN0cnVjdCBpcmxhcF9jYiAqaXJsYXA7CS8qIFRoZSBsaW5rIGxheWVyIHdlIGFyZSBiaW5kZWQgdG8gKi8KKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJLyogbmV0d29yayBzdGF0aXN0aWNzICovCisJc3RydWN0IHFvc19pbmZvIHFvczsKKwl1bnNpZ25lZCBpbnQgc3BlZWQ7CS8qIEN1cnJlbnQgc3BlZWQgKi8KKwl1bnNpZ25lZCBpbnQgbmV3X3NwZWVkOwkvKiBuZXcgc3BlZWQgKi8KKworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOyAvKiBDaGFuZ2Ugc3BlZWQgd29yayAqLworCisJc3RydWN0IHNrX2J1ZmYgKnR4X3BlbmRpbmc7CisJY2hhciBpbl9idWZbNDA5Nl07CS8qIHRyYW5zbWl0L3JlY2VpdmUgYnVmZmVyICovCisJY2hhciBvdXRfYnVmWzQwOTZdOwkvKiB0cmFuc21pdC9yZWNlaXZlIGJ1ZmZlciAqLworCV9fdTggKmZpZm9fc3RhdHVzOworCisJaW9idWZmX3QgcnhfYnVmZjsJLyogcmVjZWl2ZSB1bndyYXAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCB0aW1ldmFsIHJ4X3RpbWU7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCByZWNlaXZpbmc7CisKKwlfX3U4IGVwX2luOworCV9fdTggZXBfb3V0OworCisJc3RydWN0IHVyYiAqcnhfdXJiOworCXN0cnVjdCB1cmIgKnR4X3VyYjsKKworCWludCB0cmFuc2NlaXZlcl90eXBlOworCWludCBzaXJfdHdlYWs7CisJaW50IHJlY2VpdmVfbW9kZTsKK307CisKK3N0YXRpYyBpbnQgbWNzX3NldF9yZWcoc3RydWN0IG1jc19jYiAqbWNzLCBfX3UxNiByZWcsIF9fdTE2IHZhbCk7CitzdGF0aWMgaW50IG1jc19nZXRfcmVnKHN0cnVjdCBtY3NfY2IgKm1jcywgX191MTYgcmVnLCBfX3UxNiAqIHZhbCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG1jc19zZXR1cF90cmFuc2NlaXZlcl92aXNoYXkoc3RydWN0IG1jc19jYiAqbWNzKTsKK3N0YXRpYyBpbmxpbmUgaW50IG1jc19zZXR1cF90cmFuc2NlaXZlcl9hZ2lsZW50KHN0cnVjdCBtY3NfY2IgKm1jcyk7CitzdGF0aWMgaW5saW5lIGludCBtY3Nfc2V0dXBfdHJhbnNjZWl2ZXJfc2hhcnAoc3RydWN0IG1jc19jYiAqbWNzKTsKK3N0YXRpYyBpbmxpbmUgaW50IG1jc19zZXR1cF90cmFuc2NlaXZlcihzdHJ1Y3QgbWNzX2NiICptY3MpOworc3RhdGljIGlubGluZSBpbnQgbWNzX3dyYXBfc2lyX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICogYnVmKTsKK3N0YXRpYyB1bnNpZ25lZCBtY3Nfd3JhcF9maXJfc2tiKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fdTggKmJ1Zik7CitzdGF0aWMgdW5zaWduZWQgbWNzX3dyYXBfbWlyX3NrYihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICpidWYpOworc3RhdGljIHZvaWQgbWNzX3Vud3JhcF9taXIoc3RydWN0IG1jc19jYiAqbWNzLCBfX3U4ICpidWYsIGludCBsZW4pOworc3RhdGljIHZvaWQgbWNzX3Vud3JhcF9maXIoc3RydWN0IG1jc19jYiAqbWNzLCBfX3U4ICpidWYsIGludCBsZW4pOworc3RhdGljIGlubGluZSBpbnQgbWNzX3NldHVwX3VyYnMoc3RydWN0IG1jc19jYiAqbWNzKTsKK3N0YXRpYyBpbmxpbmUgaW50IG1jc19yZWNlaXZlX3N0YXJ0KHN0cnVjdCBtY3NfY2IgKm1jcyk7CitzdGF0aWMgaW5saW5lIGludCBtY3NfZmluZF9lbmRwb2ludHMoc3RydWN0IG1jc19jYiAqbWNzLAorCQkJCSAgICAgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgaW50IGVwbnVtKTsKKworc3RhdGljIGludCBtY3Nfc3BlZWRfY2hhbmdlKHN0cnVjdCBtY3NfY2IgKm1jcyk7CisKK3N0YXRpYyBpbnQgbWNzX25ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgbWNzX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgbWNzX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICptY3NfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKworc3RhdGljIHZvaWQgbWNzX3JlY2VpdmVfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgbWNzX3NlbmRfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGludCBtY3NfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCitzdGF0aWMgaW50IG1jc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgbWNzX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCisjZW5kaWYJCQkJLyogX01DUzc3ODBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDMxODY3ZTQuLmQ2MWIyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhcC5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGFfZGV2aWNlLmg+CkBAIC0xNzMsOSArMTc0LDcgQEAKICAgICAgICAgc3RydWN0IHFvc19pbmZvICAgcW9zOwogCXVuc2lnbmVkIAkgIHNwZWVkOwkvKiBDdXJyZW50IHNwZWVkICovCiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCB0aHJfd2FpdDsJLyogdHJhbnNtaXQgdGhyZWFkIHdha2V1cCAqLwotCXN0cnVjdCBjb21wbGV0aW9uIHRocl9leGl0ZWQ7Ci0JcGlkX3QJCSAgdGhyX3BpZDsKKyAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7ICAgICAvKiB0cmFuc21pdCB0aHJlYWQgKi8KIAogCXN0cnVjdCBza19idWZmCSAgKnR4X3BlbmRpbmc7CiAJdm9pZAkJICAqaW9fYnVmOwkvKiB0cmFuc21pdC9yZWNlaXZlIGJ1ZmZlciAqLwpAQCAtNTc3LDcgKzU3Niw3IEBACiAJU0tCX0xJTkVBUl9BU1NFUlQoc2tiKTsKIAogCXNrYiA9IHhjaGcoJnN0aXItPnR4X3BlbmRpbmcsIHNrYik7Ci0Jd2FrZV91cCgmc3Rpci0+dGhyX3dhaXQpOworICAgICAgICB3YWtlX3VwX3Byb2Nlc3Moc3Rpci0+dGhyZWFkKTsKIAkKIAkvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gdW5sZXNzIHN0b3Avd2FrZXVwIHByb2JsZW0gKi8KIAlpZiAodW5saWtlbHkoc2tiKSkgewpAQCAtNzUzLDEzICs3NTIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzdGlyLT5uZXRkZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWRhZW1vbml6ZSgiJXMiLCBkZXYtPm5hbWUpOwotCWFsbG93X3NpZ25hbChTSUdURVJNKTsKLQotCXdoaWxlIChuZXRpZl9ydW5uaW5nKGRldikKLQkgICAgICAgJiYgbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KQotCSAgICAgICAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JeworICAgICAgICB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogI2lmZGVmIENPTkZJR19QTQogCQkvKiBpZiBzdXNwZW5kaW5nLCB0aGVuIHBvd2VyIG9mZiBhbmQgd2FpdCAqLwogCQlpZiAodW5saWtlbHkoZnJlZXppbmcoY3VycmVudCkpKSB7CkBAIC04MTMsMTAgKzgwNiwxMSBAQAogCQl9CiAKIAkJLyogc2xlZXAgaWYgbm90aGluZyB0byBzZW5kICovCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzdGlyLT50aHJfd2FpdCwgc3Rpci0+dHhfcGVuZGluZyk7Ci0JfQorICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisgICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKIAotCWNvbXBsZXRlX2FuZF9leGl0ICgmc3Rpci0+dGhyX2V4aXRlZCwgMCk7CisJfQorICAgICAgICByZXR1cm4gMDsKIH0KIAogCkBAIC04NTksNyArODUzLDcgQEAKIAkJd2FybigiJXM6IHVzYiByZWNlaXZlIHN1Ym1pdCBlcnJvcjogJWQiLAogCQkJc3Rpci0+bmV0ZGV2LT5uYW1lLCBlcnIpOwogCQlzdGlyLT5yZWNlaXZpbmcgPSAwOwotCQl3YWtlX3VwKCZzdGlyLT50aHJfd2FpdCk7CisJCXdha2VfdXBfcHJvY2VzcyhzdGlyLT50aHJlYWQpOwogCX0KIH0KIApAQCAtOTI4LDEwICs5MjIsMTAgQEAKIAl9CiAKIAkvKiogU3RhcnQga2VybmVsIHRocmVhZCBmb3IgdHJhbnNtaXQuICAqLwotCXN0aXItPnRocl9waWQgPSBrZXJuZWxfdGhyZWFkKHN0aXJfdHJhbnNtaXRfdGhyZWFkLCBzdGlyLAotCQkJCSAgICAgIENMT05FX0ZTfENMT05FX0ZJTEVTKTsKLQlpZiAoc3Rpci0+dGhyX3BpZCA8IDApIHsKLQkJZXJyID0gc3Rpci0+dGhyX3BpZDsKKwlzdGlyLT50aHJlYWQgPSBrdGhyZWFkX3J1bihzdGlyX3RyYW5zbWl0X3RocmVhZCwgc3RpciwKKwkJCQkgICAiJXMiLCBzdGlyLT5uZXRkZXYtPm5hbWUpOworICAgICAgICBpZiAoSVNfRVJSKHN0aXItPnRocmVhZCkpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBQVFJfRVJSKHN0aXItPnRocmVhZCk7CiAJCWVycigic3RpcjQyMDA6IHVuYWJsZSB0byBzdGFydCBrZXJuZWwgdGhyZWFkIik7CiAJCWdvdG8gZXJyX291dDY7CiAJfQpAQCAtOTY4LDggKzk2Miw3IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCiAJLyogS2lsbCB0cmFuc21pdCB0aHJlYWQgKi8KLQlraWxsX3Byb2Moc3Rpci0+dGhyX3BpZCwgU0lHVEVSTSwgMSk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmc3Rpci0+dGhyX2V4aXRlZCk7CisJa3RocmVhZF9zdG9wKHN0aXItPnRocmVhZCk7CiAJa2ZyZWUoc3Rpci0+Zmlmb19zdGF0dXMpOwogCiAJLyogTW9wIHVwIHJlY2VpdmUgdXJiJ3MgKi8KQEAgLTEwODQsOSArMTA3Nyw2IEBACiAJc3Rpci0+cW9zLm1pbl90dXJuX3RpbWUuYml0cyAgICY9IHFvc19tdHRfYml0czsKIAlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKCZzdGlyLT5xb3MpOwogCi0JaW5pdF9jb21wbGV0aW9uICgmc3Rpci0+dGhyX2V4aXRlZCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCAoJnN0aXItPnRocl93YWl0KTsKLQogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwogCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gc3Rpcl9oYXJkX3htaXQ7CiAJbmV0LT5vcGVuICAgICAgICAgICAgPSBzdGlyX25ldF9vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCA5N2E0OWUwLi5kNzBiOWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJCQkgICAgfHwgIChub3cudHZfc2VjPT1yZWFkeS50dl9zZWMgJiYgbm93LnR2X3VzZWM+PXJlYWR5LnR2X3VzZWMpKQogCQkJICAgIAlicmVhazsKIAkJCXVkZWxheSgxMDApOwotCQkJLyogbXVzdCBub3Qgc2xlZXAgaGVyZSAtIHdlIGFyZSBjYWxsZWQgdW5kZXIgeG1pdF9sb2NrISAqLworCQkJLyogbXVzdCBub3Qgc2xlZXAgaGVyZSAtIGNhbGxlZCB1bmRlciBuZXRpZl90eF9sb2NrISAqLwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXhnYi9NYWtlZmlsZQppbmRleCA3YzdhZmYxLi5hOGEyZDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyAKLSMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDAyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCmluZGV4IGM4MzI3MWIuLmE4M2VmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC04NCw3ICs4NCwxMiBAQAogI2RlZmluZSBJWEdCX0RCRyhhcmdzLi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgSVhHQl9FUlIoYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSICJpeGdiOiAiIGFyZ3MpCisjZGVmaW5lIFBGWCAiaXhnYjogIgorI2RlZmluZSBEUFJJTlRLKG5sZXZlbCwga2xldmVsLCBmbXQsIGFyZ3MuLi4pIFwKKwkodm9pZCkoKE5FVElGX01TR18jI25sZXZlbCAmIGFkYXB0ZXItPm1zZ19lbmFibGUpICYmIFwKKwlwcmludGsoS0VSTl8jI2tsZXZlbCBQRlggIiVzOiAlczogIiBmbXQsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgXAorCQlfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKSkKKwogCiAvKiBUWC9SWCBkZXNjcmlwdG9yIGRlZmluZXMgKi8KICNkZWZpbmUgREVGQVVMVF9UWEQJIDI1NgpAQCAtMTc1LDYgKzE4MCw3IEBACiAJdWludDY0X3QgaHdfY3N1bV90eF9nb29kOwogCXVpbnQ2NF90IGh3X2NzdW1fdHhfZXJyb3I7CiAJdWludDMyX3QgdHhfaW50X2RlbGF5OworCXVpbnQzMl90IHR4X3RpbWVvdXRfY291bnQ7CiAJYm9vbGVhbl90IHR4X2ludF9kZWxheV9lbmFibGU7CiAJYm9vbGVhbl90IGRldGVjdF90eF9odW5nOwogCkBAIC0xOTIsNyArMTk4LDkgQEAKIAogCS8qIHN0cnVjdHMgZGVmaW5lZCBpbiBpeGdiX2h3LmggKi8KIAlzdHJ1Y3QgaXhnYl9odyBodzsKKwl1MTYgbXNnX2VuYWJsZTsKIAlzdHJ1Y3QgaXhnYl9od19zdGF0cyBzdGF0czsKKwl1aW50MzJfdCBhbGxvY19yeF9idWZmX2ZhaWxlZDsKICNpZmRlZiBDT05GSUdfUENJX01TSQogCWJvb2xlYW5fdCBoYXZlX21zaTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYwppbmRleCA2NjFhNDZiLi44MzU3YzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuaAppbmRleCA1MTkwYWE4Li5iZjZmYTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZWUuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKaW5kZXggZDM4YWRlNS4uY2YxOWI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC00NCw2ICs0NCw4IEBACiBleHRlcm4gdm9pZCBpeGdiX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgaXhnYl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7CiAKKyNkZWZpbmUgSVhHQl9BTExfUkFSX0VOVFJJRVMgMTYKKwogc3RydWN0IGl4Z2Jfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKIAlpbnQgc2l6ZW9mX3N0YXQ7CkBAIC03Niw2ICs3OCw3IEBACiAJeyJ0eF9oZWFydGJlYXRfZXJyb3JzIiwgSVhHQl9TVEFUKG5ldF9zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKX0sCiAJeyJ0eF93aW5kb3dfZXJyb3JzIiwgSVhHQl9TVEFUKG5ldF9zdGF0cy50eF93aW5kb3dfZXJyb3JzKX0sCiAJeyJ0eF9kZWZlcnJlZF9vayIsIElYR0JfU1RBVChzdGF0cy5kYyl9LAorCXsidHhfdGltZW91dF9jb3VudCIsIElYR0JfU1RBVCh0eF90aW1lb3V0X2NvdW50KSB9LAogCXsicnhfbG9uZ19sZW5ndGhfZXJyb3JzIiwgSVhHQl9TVEFUKHN0YXRzLnJvYyl9LAogCXsicnhfc2hvcnRfbGVuZ3RoX2Vycm9ycyIsIElYR0JfU1RBVChzdGF0cy5ydWMpfSwKICNpZmRlZiBORVRJRl9GX1RTTwpAQCAtMTE3LDYgKzEyMCwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpeGdiX3NldF9zcGVlZF9kdXBsZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkvKiBiZSBvcHRpbWlzdGljIGFib3V0IG91ciBsaW5rLCBzaW5jZSB3ZSB3ZXJlIHVwIGJlZm9yZSAqLworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAxMDAwMDsKKwlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOworCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Cit9CisKIHN0YXRpYyBpbnQKIGl4Z2Jfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKQEAgLTEzMCwxMiArMTQzLDcgQEAKIAkJaXhnYl9kb3duKGFkYXB0ZXIsIFRSVUUpOwogCQlpeGdiX3Jlc2V0KGFkYXB0ZXIpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwotCQkvKiBiZSBvcHRpbWlzdGljIGFib3V0IG91ciBsaW5rLCBzaW5jZSB3ZSB3ZXJlIHVwIGJlZm9yZSAqLwotCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMTAwMDA7Ci0JCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gRlVMTF9EVVBMRVg7Ci0JCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwotCQkKKwkJaXhnYl9zZXRfc3BlZWRfZHVwbGV4KG5ldGRldik7CiAJfSBlbHNlCiAJCWl4Z2JfcmVzZXQoYWRhcHRlcik7CiAKQEAgLTE4MywxMSArMTkxLDcgQEAKIAlpZihuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKIAkJaXhnYl9kb3duKGFkYXB0ZXIsIFRSVUUpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwotCQkvKiBiZSBvcHRpbWlzdGljIGFib3V0IG91ciBsaW5rLCBzaW5jZSB3ZSB3ZXJlIHVwIGJlZm9yZSAqLwotCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMTAwMDA7Ci0JCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gRlVMTF9EVVBMRVg7Ci0JCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQlpeGdiX3NldF9zcGVlZF9kdXBsZXgobmV0ZGV2KTsKIAl9IGVsc2UKIAkJaXhnYl9yZXNldChhZGFwdGVyKTsKIAkJCkBAIC0yMTIsMTEgKzIxNiw3IEBACiAJaWYobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCWl4Z2JfZG93bihhZGFwdGVyLFRSVUUpOwogCQlpeGdiX3VwKGFkYXB0ZXIpOwotCQkvKiBiZSBvcHRpbWlzdGljIGFib3V0IG91ciBsaW5rLCBzaW5jZSB3ZSB3ZXJlIHVwIGJlZm9yZSAqLwotCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMTAwMDA7Ci0JCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gRlVMTF9EVVBMRVg7Ci0JCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQlpeGdiX3NldF9zcGVlZF9kdXBsZXgobmV0ZGV2KTsKIAl9IGVsc2UKIAkJaXhnYl9yZXNldChhZGFwdGVyKTsKIAlyZXR1cm4gMDsKQEAgLTI1MSw2ICsyNTEsMTkgQEAKIH0gCiAjZW5kaWYgLyogTkVUSUZfRl9UU08gKi8KIAorc3RhdGljIHVpbnQzMl90CitpeGdiX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBhZGFwdGVyLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZAoraXhnYl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlhZGFwdGVyLT5tc2dfZW5hYmxlID0gZGF0YTsKK30KICNkZWZpbmUgSVhHQl9HRVRfU1RBVChfQV8sIF9SXykgX0FfLT5zdGF0cy5fUl8KIAogc3RhdGljIGludCAKQEAgLTMwMyw3ICszMTYsNyBAQAogCSpyZWcrKyA9IElYR0JfUkVBRF9SRUcoaHcsIFJYQ1NVTSk7CS8qICAyMCAqLwogCiAJLyogdGhlcmUgYXJlIDE2IFJBUiBlbnRyaWVzIGluIGhhcmR3YXJlLCB3ZSBvbmx5IHVzZSAzICovCi0JZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCWZvcihpID0gMDsgaSA8IElYR0JfQUxMX1JBUl9FTlRSSUVTOyBpKyspIHsKIAkJKnJlZysrID0gSVhHQl9SRUFEX1JFR19BUlJBWShodywgUkFMLCAoaSA8PCAxKSk7IC8qMjEsLi4uLDUxICovCiAJCSpyZWcrKyA9IElYR0JfUkVBRF9SRUdfQVJSQVkoaHcsIFJBSCwgKGkgPDwgMSkpOyAvKjIyLC4uLiw1MiAqLwogCX0KQEAgLTU5MywxMSArNjA2LDcgQEAKIAkJYWRhcHRlci0+dHhfcmluZyA9IHR4X25ldzsKIAkJaWYoKGVyciA9IGl4Z2JfdXAoYWRhcHRlcikpKQogCQkJcmV0dXJuIGVycjsKLQkJLyogYmUgb3B0aW1pc3RpYyBhYm91dCBvdXIgbGluaywgc2luY2Ugd2Ugd2VyZSB1cCBiZWZvcmUgKi8KLQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDEwMDAwOwotCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IEZVTExfRFVQTEVYOwotCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJaXhnYl9zZXRfc3BlZWRfZHVwbGV4KG5ldGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03MTQsNiArNzIzLDggQEAKIAkuc2V0X3R4X2NzdW0gPSBpeGdiX3NldF90eF9jc3VtLAogCS5nZXRfc2cJPSBldGh0b29sX29wX2dldF9zZywKIAkuc2V0X3NnCT0gZXRodG9vbF9vcF9zZXRfc2csCisJLmdldF9tc2dsZXZlbCA9IGl4Z2JfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgPSBpeGdiX3NldF9tc2dsZXZlbCwKICNpZmRlZiBORVRJRl9GX1RTTwogCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAogCS5zZXRfdHNvID0gaXhnYl9zZXRfdHNvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwppbmRleCA2MjBjYWQ0Li5mN2ZhMTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuaAppbmRleCAzODJjNjMwLi5jYjQ1Njg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuaAorKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtNTcsNiArNTcsNyBAQAogdHlwZWRlZiBlbnVtIHsKIAlpeGdiX21lZGlhX3R5cGVfdW5rbm93biA9IDAsCiAJaXhnYl9tZWRpYV90eXBlX2ZpYmVyID0gMSwKKwlpeGdiX21lZGlhX3R5cGVfY29wcGVyID0gMiwKIAlpeGdiX251bV9tZWRpYV90eXBlcwogfSBpeGdiX21lZGlhX3R5cGU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9pZHMuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9pZHMuaAppbmRleCBhZWUyMDdlLi40MGEwODVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaWRzLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2lkcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC00Myw2ICs0Myw4IEBACiAjZGVmaW5lIElYR0JfU1VCREVWSUNFX0lEX0ExMUYgICAgICAweEExMUYgICAKICNkZWZpbmUgSVhHQl9TVUJERVZJQ0VfSURfQTAxRiAgICAgIDB4QTAxRiAgIAogCi0jZW5kaWYgLyogI2lmbmRlZiBfSVhHQl9JRFNfSF8gKi8KKyNkZWZpbmUgSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9DWDQgICAweDEwOUUKKyNkZWZpbmUgSVhHQl9TVUJERVZJQ0VfSURfQTAwQyAgMHhBMDBDCiAKKyNlbmRpZiAvKiAjaWZuZGVmIF9JWEdCX0lEU19IXyAqLwogLyogRW5kIG9mIEZpbGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCmluZGV4IGNmZDY3ZDguLjU3MDA2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIApAQCAtMjgsMjIgKzI4LDYgQEAKIAogI2luY2x1ZGUgIml4Z2IuaCIKIAotLyogQ2hhbmdlIExvZwotICogMS4wLjk2IDA0LzE5LzA1Ci0gKiAtIE1ha2UgbmVlZGxlc3NseSBnbG9iYWwgY29kZSBzdGF0aWMgLS0gYnVua0BzdHVzdGEuZGUKLSAqIC0gZXRodG9vbCBjbGVhbnVwIC0tIHNoZW1taW5nZXJAb3NkbC5vcmcKLSAqIC0gU3VwcG9ydCBmb3IgTU9EVUxFX1ZFUlNJT04gLS0gbGludmlsbGVAdHV4ZHJpdmVyLmNvbQotICogLSBhZGQgc2tiX2hlYWRlcl9jbG9uZWQgY2hlY2sgdG8gdGhlIHRzbyBwYXRoIC0tIGhlcmJlcnRAYXBhbmEub3JnLmF1Ci0gKiAxLjAuODggMDEvMDUvMDUKLSAqIC0gaW5jbHVkZSBmaXggdG8gdGhlIGNvbmRpdGlvbiB0aGF0IGRldGVybWluZXMgd2hlbiB0byBxdWl0IE5BUEkgLSBSb2JlcnQgT2xzc29uCi0gKiAtIHVzZSBuZXRpZl9wb2xsX3tkaXNhYmxlL2VuYWJsZX0gdG8gc3luY2hyb25pemUgYmV0d2VlbiBOQVBJIGFuZCBpL2YgdXAvZG93bgotICogMS4wLjg0IDEwLzI2LzA0Ci0gKiAtIHJlc2V0IGJ1ZmZlcl9pbmZvLT5kbWEgaW4gVHggcmVzb3VyY2UgY2xlYW51cCBsb2dpYwotICogMS4wLjgzIDEwLzEyLzA0Ci0gKiAtIHNwYXJzZSBjbGVhbnVwIC0gc2hlbW1pbmdlckBvc2RsLm9yZwotICogLSBmaXggdHggcmVzb3VyY2UgY2xlYW51cCBsb2dpYwotICovCi0KIGNoYXIgaXhnYl9kcml2ZXJfbmFtZVtdID0gIml4Z2IiOwogc3RhdGljIGNoYXIgaXhnYl9kcml2ZXJfc3RyaW5nW10gPSAiSW50ZWwoUikgUFJPLzEwR2JFIE5ldHdvcmsgRHJpdmVyIjsKIApAQCAtNTIsOSArMzYsOSBAQAogI2Vsc2UKICNkZWZpbmUgRFJJVkVSTkFQSSAiLU5BUEkiCiAjZW5kaWYKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMTAwLWsyIkRSSVZFUk5BUEkKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMTA5LWsyIkRSSVZFUk5BUEkKIGNoYXIgaXhnYl9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047Ci1zdGF0aWMgY2hhciBpeGdiX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA1IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY2hhciBpeGdiX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA2IEludGVsIENvcnBvcmF0aW9uLiI7CiAKIC8qIGl4Z2JfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKICAqCkBAIC02Nyw2ICs1MSw4IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYl9wY2lfdGJsW10gPSB7CiAJe0lOVEVMX1ZFTkRPUl9JRCwgSVhHQl9ERVZJQ0VfSURfODI1OTdFWCwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe0lOVEVMX1ZFTkRPUl9JRCwgSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9DWDQsCisJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtJTlRFTF9WRU5ET1JfSUQsIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfU1IsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXtJTlRFTF9WRU5ET1JfSUQsIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfTFIsICAKQEAgLTE0OCw2ICsxMzQsMTEgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIAorI2RlZmluZSBERUZBVUxUX0RFQlVHX0xFVkVMX1NISUZUIDMKK3N0YXRpYyBpbnQgZGVidWcgPSBERUZBVUxUX0RFQlVHX0xFVkVMX1NISUZUOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwPW5vbmUsLi4uLDE2PWFsbCkiKTsKKwogLyogc29tZSBkZWZpbmVzIGZvciBjb250cm9sbGluZyBkZXNjcmlwdG9yIGZldGNoZXMgaW4gaC93ICovCiAjZGVmaW5lIFJYRENUTF9XVEhSRVNIX0RFRkFVTFQgMTYJLyogY2hpcCB3cml0ZXMgYmFjayBhdCB0aGlzIG1hbnkgb3IgUlhUMCAqLwogI2RlZmluZSBSWERDVExfUFRIUkVTSF9ERUZBVUxUIDAJCS8qIGNoaXAgY29uc2lkZXJzIHByZWZlY2ggYmVsb3cKQEAgLTE5Niw3ICsxODcsNyBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGl4Z2JfaXJxX2Rpc2FibGUoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKQEAgLTIxMCw3ICsyMDEsNyBAQAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGl4Z2JfaXJxX2VuYWJsZShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKQogewogCWlmKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFkYXB0ZXItPmlycV9zZW0pKSB7CkBAIC0yMzEsNiArMjIyLDcgQEAKIAogCS8qIGhhcmR3YXJlIGhhcyBiZWVuIHJlc2V0LCB3ZSBuZWVkIHRvIHJlbG9hZCBzb21lIHRoaW5ncyAqLwogCisJaXhnYl9yYXJfc2V0KGh3LCBuZXRkZXYtPmRldl9hZGRyLCAwKTsKIAlpeGdiX3NldF9tdWx0aShuZXRkZXYpOwogCiAJaXhnYl9yZXN0b3JlX3ZsYW4oYWRhcHRlcik7CkBAIC0yNDAsNiArMjMyLDkgQEAKIAlpeGdiX2NvbmZpZ3VyZV9yeChhZGFwdGVyKTsKIAlpeGdiX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlcik7CiAKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgYW5kIGdldCB0aGUgaGFyZHdhcmUgaW50byBhIGtub3duIHN0YXRlICovCisJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIDB4ZmZmZmZmZmYpOworCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAl7CiAJYm9vbGVhbl90IHBjaXggPSAoSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUykgJiAKQEAgLTI0OSw3ICsyNDQsNyBAQAogCWlmICghcGNpeCkKIAkgICBhZGFwdGVyLT5oYXZlX21zaSA9IEZBTFNFOwogCWVsc2UgaWYoKGVyciA9IHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpKSkgewotCQlwcmludGsgKEtFUk5fRVJSCisJCURQUklOVEsoUFJPQkUsIEVSUiwKIAkJICJVbmFibGUgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CiAJCWFkYXB0ZXItPmhhdmVfbXNpID0gRkFMU0U7CiAJCS8qIHByb2NlZWQgdG8gdHJ5IHRvIHJlcXVlc3QgcmVndWxhciBpbnRlcnJ1cHQgKi8KQEAgLTI1OSwxMSArMjU0LDExIEBACiAjZW5kaWYKIAlpZigoZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmaXhnYl9pbnRyLAogCQkJCSAgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLAotCQkJCSAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSkKKwkJCSAgICAgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldikpKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwKKwkJICJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKLQotCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgZ2V0IHRoZSBoYXJkd2FyZSBpbnRvIGEga25vd24gc3RhdGUgKi8KLQlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgMHhmZmZmZmZmZik7CisJfQogCiAJaWYoKGh3LT5tYXhfZnJhbWVfc2l6ZSAhPSBtYXhfZnJhbWUpIHx8CiAJCShody0+bWF4X2ZyYW1lX3NpemUgIT0KQEAgLTI4NSwxMSArMjgwLDEyIEBACiAJfQogCiAJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7Ci0JaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCiAjaWZkZWYgQ09ORklHX0lYR0JfTkFQSQogCW5ldGlmX3BvbGxfZW5hYmxlKG5ldGRldik7CiAjZW5kaWYKKwlpeGdiX2lycV9lbmFibGUoYWRhcHRlcik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI2LDcgKzMyMiw3IEBACiAKIAlpeGdiX2FkYXB0ZXJfc3RvcCgmYWRhcHRlci0+aHcpOwogCWlmKCFpeGdiX2luaXRfaHcoJmFkYXB0ZXItPmh3KSkKLQkJSVhHQl9EQkcoIml4Z2JfaW5pdF9odyBmYWlsZWQuXG4iKTsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiaXhnYl9pbml0X2h3IGZhaWxlZC5cbiIpOwogfQogCiAvKioKQEAgLTM2Myw3ICszNTksOCBAQAogCX0gZWxzZSB7CiAJCWlmKChlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgfHwKIAkJICAgKGVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpKSB7Ci0JCQlJWEdCX0VSUigiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAiaXhnYjogTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9kbWFfbWFzazsKIAkJfQogCQlwY2lfdXNpbmdfZGFjID0gMDsKQEAgLTM4OCw2ICszODUsNyBAQAogCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKIAlhZGFwdGVyLT5wZGV2ID0gcGRldjsKIAlhZGFwdGVyLT5ody5iYWNrID0gYWRhcHRlcjsKKwlhZGFwdGVyLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIERFRkFVTFRfREVCVUdfTEVWRUxfU0hJRlQpOwogCiAJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBCQVJfMCk7CiAJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIEJBUl8wKTsKQEAgLTQxNiw3ICs0MTQsNyBAQAogCW5ldGRldi0+Y2hhbmdlX210dSA9ICZpeGdiX2NoYW5nZV9tdHU7CiAJaXhnYl9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAluZXRkZXYtPnR4X3RpbWVvdXQgPSAmaXhnYl90eF90aW1lb3V0OwotCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogI2lmZGVmIENPTkZJR19JWEdCX05BUEkKIAluZXRkZXYtPnBvbGwgPSAmaXhnYl9jbGVhbjsKIAluZXRkZXYtPndlaWdodCA9IDY0OwpAQCAtNDI4LDYgKzQyNiw3IEBACiAJbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBpeGdiX25ldHBvbGw7CiAjZW5kaWYKIAorCXN0cmNweShuZXRkZXYtPm5hbWUsIHBjaV9uYW1lKHBkZXYpKTsKIAluZXRkZXYtPm1lbV9zdGFydCA9IG1taW9fc3RhcnQ7CiAJbmV0ZGV2LT5tZW1fZW5kID0gbW1pb19zdGFydCArIG1taW9fbGVuOwogCW5ldGRldi0+YmFzZV9hZGRyID0gYWRhcHRlci0+aHcuaW9fYmFzZTsKQEAgLTQ0OSw2ICs0NDgsOSBAQAogI2lmZGVmIE5FVElGX0ZfVFNPCiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKICNlbmRpZgorI2lmZGVmIE5FVElGX0ZfTExUWAorCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworI2VuZGlmCiAKIAlpZihwY2lfdXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKQEAgLTQ1Niw3ICs0NTgsNyBAQAogCS8qIG1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KIAogCWlmKCFpeGdiX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bSgmYWRhcHRlci0+aHcpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVGhlIEVFUFJPTSBDaGVja3N1bSBJcyBOb3QgVmFsaWRcbiIpOworCQlEUFJJTlRLKFBST0JFLCBFUlIsICJUaGUgRUVQUk9NIENoZWNrc3VtIElzIE5vdCBWYWxpZFxuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyX2VlcHJvbTsKIAl9CkBAIC00NjUsNiArNDY3LDcgQEAKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCiAJaWYoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIkludmFsaWQgTUFDIEFkZHJlc3NcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9lZXByb207CiAJfQpAQCAtNDc4LDYgKzQ4MSw3IEBACiAJSU5JVF9XT1JLKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2ssCiAJCSAgKHZvaWQgKCopKHZvaWQgKikpaXhnYl90eF90aW1lb3V0X3Rhc2ssIG5ldGRldik7CiAKKwlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKIAlpZigoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKQogCQlnb3RvIGVycl9yZWdpc3RlcjsKIApAQCAtNDg2LDggKzQ5MCw3IEBACiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogSW50ZWwoUikgUFJPLzEwR2JFIE5ldHdvcmsgQ29ubmVjdGlvblxuIiwKLQkJICAgbmV0ZGV2LT5uYW1lKTsKKwlEUFJJTlRLKFBST0JFLCBJTkZPLCAiSW50ZWwoUikgUFJPLzEwR2JFIE5ldHdvcmsgQ29ubmVjdGlvblxuIik7CiAJaXhnYl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOwogCS8qIHJlc2V0IHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MgKi8KIApAQCAtNTU3LDE3ICs1NjAsMTcgQEAKIAlody0+c3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CiAJaHctPnN1YnN5c3RlbV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CiAKLQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSVhHQl9SWEJVRkZFUl8yMDQ4OwotCiAJaHctPm1heF9mcmFtZV9zaXplID0gbmV0ZGV2LT5tdHUgKyBFTkVUX0hFQURFUl9TSVpFICsgRU5FVF9GQ1NfTEVOR1RIOworCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBody0+bWF4X2ZyYW1lX3NpemU7CiAKIAlpZigoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYKQotCSAgIHx8KGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9MUikKLQkgICB8fChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfU1IpKQorCSAgIHx8IChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfQ1g0KQorCSAgIHx8IChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfTFIpCisJICAgfHwgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9TUikpCiAJCQlody0+bWFjX3R5cGUgPSBpeGdiXzgyNTk3OwogCWVsc2UgewogCQkvKiBzaG91bGQgbmV2ZXIgaGF2ZSBsb2FkZWQgb24gdGhpcyBkZXZpY2UgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJpeGdiOiB1bnN1cHBvcnRlZCBkZXZpY2UgaWRcbiIpOworCQlEUFJJTlRLKFBST0JFLCBFUlIsICJ1bnN1cHBvcnRlZCBkZXZpY2UgaWRcbiIpOwogCX0KIAogCS8qIGVuYWJsZSBmbG93IGNvbnRyb2wgdG8gYmUgcHJvZ3JhbW1lZCAqLwpAQCAtNjY1LDYgKzY2OCw4IEBACiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYl9idWZmZXIpICogdHhkci0+Y291bnQ7CiAJdHhkci0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmKCF0eGRyLT5idWZmZXJfaW5mbykgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsCisJCSAiVW5hYmxlIHRvIGFsbG9jYXRlIHRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZyBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KHR4ZHItPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKQEAgLTY3Nyw2ICs2ODIsOCBAQAogCXR4ZHItPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eGRyLT5zaXplLCAmdHhkci0+ZG1hKTsKIAlpZighdHhkci0+ZGVzYykgewogCQl2ZnJlZSh0eGRyLT5idWZmZXJfaW5mbyk7CisJCURQUklOVEsoUFJPQkUsIEVSUiwKKwkJICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvciBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KHR4ZHItPmRlc2MsIDAsIHR4ZHItPnNpemUpOwpAQCAtNzUwLDYgKzc1Nyw4IEBACiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYl9idWZmZXIpICogcnhkci0+Y291bnQ7CiAJcnhkci0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmKCFyeGRyLT5idWZmZXJfaW5mbykgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsCisJCSAiVW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldChyeGRyLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CkBAIC03NjMsNiArNzcyLDggQEAKIAogCWlmKCFyeGRyLT5kZXNjKSB7CiAJCXZmcmVlKHJ4ZHItPmJ1ZmZlcl9pbmZvKTsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSByZWNlaXZlIGRlc2NyaXB0b3JzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldChyeGRyLT5kZXNjLCAwLCByeGRyLT5zaXplKTsKQEAgLTc5NCwyMSArODA1LDE0IEBACiAKIAlyY3RsIHw9IElYR0JfUkNUTF9TRUNSQzsKIAotCXN3aXRjaCAoYWRhcHRlci0+cnhfYnVmZmVyX2xlbikgewotCWNhc2UgSVhHQl9SWEJVRkZFUl8yMDQ4OgotCWRlZmF1bHQ6CisJaWYgKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPD0gSVhHQl9SWEJVRkZFUl8yMDQ4KQogCQlyY3RsIHw9IElYR0JfUkNUTF9CU0laRV8yMDQ4OwotCQlicmVhazsKLQljYXNlIElYR0JfUlhCVUZGRVJfNDA5NjoKKwllbHNlIGlmIChhZGFwdGVyLT5yeF9idWZmZXJfbGVuIDw9IElYR0JfUlhCVUZGRVJfNDA5NikKIAkJcmN0bCB8PSBJWEdCX1JDVExfQlNJWkVfNDA5NjsKLQkJYnJlYWs7Ci0JY2FzZSBJWEdCX1JYQlVGRkVSXzgxOTI6CisJZWxzZSBpZiAoYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA8PSBJWEdCX1JYQlVGRkVSXzgxOTIpCiAJCXJjdGwgfD0gSVhHQl9SQ1RMX0JTSVpFXzgxOTI7Ci0JCWJyZWFrOwotCWNhc2UgSVhHQl9SWEJVRkZFUl8xNjM4NDoKKwllbHNlIGlmIChhZGFwdGVyLT5yeF9idWZmZXJfbGVuIDw9IElYR0JfUlhCVUZGRVJfMTYzODQpCiAJCXJjdGwgfD0gSVhHQl9SQ1RMX0JTSVpFXzE2Mzg0OwotCQlicmVhazsKLQl9CiAKIAlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJDVEwsIHJjdGwpOwogfQpAQCAtODk4LDIyICs5MDIsMjUgQEAKIAlhZGFwdGVyLT50eF9yaW5nLmRlc2MgPSBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBpeGdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCWlmKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UocGRldiwKLQkJCSAgIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkgICBidWZmZXJfaW5mby0+bGVuZ3RoLAotCQkJICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCX0KLQlpZihidWZmZXJfaW5mby0+c2tiKSB7CisKKwlpZiAoYnVmZmVyX2luZm8tPmRtYSkKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwgYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisKKwlpZiAoYnVmZmVyX2luZm8tPnNrYikKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7Ci0JCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwotCX0KKworCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKKwkvKiB0aGVzZSBmaWVsZHMgbXVzdCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgaW4gdHgKKwkgKiBidWZmZXJfaW5mby0+bGVuZ3RoID0gMDsKKwkgKiBidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IDA7ICovCiB9CiAKIC8qKgpAQCAtMTExMiw4ICsxMTE5LDggQEAKIAogCWlmKGFkYXB0ZXItPmh3LmxpbmtfdXApIHsKIAkJaWYoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiaXhnYjogJXMgTklDIExpbmsgaXMgVXAgJWQgTWJwcyAlc1xuIiwKLQkJCQkgICBuZXRkZXYtPm5hbWUsIDEwMDAwLCAiRnVsbCBEdXBsZXgiKTsKKwkJCURQUklOVEsoTElOSywgSU5GTywKKwkJCSAgICAgICAgIk5JQyBMaW5rIGlzIFVwIDEwMDAwIE1icHMgRnVsbCBEdXBsZXhcbiIpOwogCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDEwMDAwOwogCQkJYWRhcHRlci0+bGlua19kdXBsZXggPSBGVUxMX0RVUExFWDsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKQEAgLTExMjMsOSArMTEzMCw3IEBACiAJCWlmKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CiAJCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IDA7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgIml4Z2I6ICVzIE5JQyBMaW5rIGlzIERvd25cbiIsCi0JCQkJICAgbmV0ZGV2LT5uYW1lKTsKKwkJCURQUklOVEsoTElOSywgSU5GTywgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIApAQCAtMTE1OCw3ICsxMTYzLDcgQEAKICNkZWZpbmUgSVhHQl9UWF9GTEFHU19WTEFOCQkweDAwMDAwMDAyCiAjZGVmaW5lIElYR0JfVFhfRkxBR1NfVFNPCQkweDAwMDAwMDA0CiAKLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBpeGdiX3RzbyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogI2lmZGVmIE5FVElGX0ZfVFNPCkBAIC0xMjIwLDcgKzEyMjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2xlYW5fdAorc3RhdGljIGJvb2xlYW5fdAogaXhnYl90eF9jc3VtKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl4Z2JfY29udGV4dF9kZXNjICpjb250ZXh0X2Rlc2M7CkBAIC0xMjU4LDcgKzEyNjMsNyBAQAogI2RlZmluZSBJWEdCX01BWF9UWERfUFdSCTE0CiAjZGVmaW5lIElYR0JfTUFYX0RBVEFfUEVSX1RYRAkoMTw8SVhHQl9NQVhfVFhEX1BXUikKIAotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbnQKIGl4Z2JfdHhfbWFwKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCiAJICAgIHVuc2lnbmVkIGludCBmaXJzdCkKIHsKQEAgLTEyODQsNiArMTI4OSw3IEBACiAJCQkJc2l6ZSwKIAkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IDA7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwpAQCAtMTMwOSw2ICsxMzE1LDcgQEAKIAkJCQkJc2l6ZSwKIAkJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CisJCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IDA7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CkBAIC0xMzIzLDcgKzEzMzAsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogaXhnYl90eF9xdWV1ZShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLCBpbnQgY291bnQsIGludCB2bGFuX2lkLGludCB0eF9mbGFncykKIHsKIAlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKQEAgLTEzOTUsMTMgKzE0MDIsMjYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisjaWZkZWYgTkVUSUZfRl9MTFRYCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmICghc3Bpbl90cnlsb2NrKCZhZGFwdGVyLT50eF9sb2NrKSkgeworCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKKwl9CisjZWxzZQogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7CisjZW5kaWYKKwogCWlmKHVubGlrZWx5KElYR0JfREVTQ19VTlVTRUQoJmFkYXB0ZXItPnR4X3JpbmcpIDwgREVTQ19ORUVERUQpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KKworI2lmbmRlZiBORVRJRl9GX0xMVFgKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7CisjZW5kaWYKIAogCWlmKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBJWEdCX1RYX0ZMQUdTX1ZMQU47CkBAIC0xNDEzLDEwICsxNDMzLDEzIEBACiAJdHNvID0gaXhnYl90c28oYWRhcHRlciwgc2tiKTsKIAlpZiAodHNvIDwgMCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworI2lmZGVmIE5FVElGX0ZfTExUWAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7CisjZW5kaWYKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQlpZiAodHNvKQorCWlmIChsaWtlbHkodHNvKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19UU087CiAJZWxzZSBpZihpeGdiX3R4X2NzdW0oYWRhcHRlciwgc2tiKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19DU1VNOwpAQCAtMTQyNiw3ICsxNDQ5LDE1IEBACiAKIAluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXJldHVybiAwOworI2lmZGVmIE5FVElGX0ZfTExUWAorCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwlpZih1bmxpa2VseShJWEdCX0RFU0NfVU5VU0VEKCZhZGFwdGVyLT50eF9yaW5nKSA8IERFU0NfTkVFREVEKSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOworCisjZW5kaWYKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKQEAgLTE0NDgsNiArMTQ3OSw3IEBACiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKKwlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CiAJaXhnYl9kb3duKGFkYXB0ZXIsIFRSVUUpOwogCWl4Z2JfdXAoYWRhcHRlcik7CiB9CkBAIC0xNDg2LDI4ICsxNTE4LDE1IEBACiAKIAlpZigobWF4X2ZyYW1lIDwgSVhHQl9NSU5fRU5FVF9GUkFNRV9TSVpFX1dJVEhPVVRfRkNTICsgRU5FVF9GQ1NfTEVOR1RIKQogCSAgIHx8IChtYXhfZnJhbWUgPiBJWEdCX01BWF9KVU1CT19GUkFNRV9TSVpFICsgRU5FVF9GQ1NfTEVOR1RIKSkgewotCQlJWEdCX0VSUigiSW52YWxpZCBNVFUgc2V0dGluZ1xuIik7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIkludmFsaWQgTVRVIHNldHRpbmcgJWRcbiIsIG5ld19tdHUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZigobWF4X2ZyYW1lIDw9IElYR0JfTUFYX0VORVRfRlJBTUVfU0laRV9XSVRIT1VUX0ZDUyArIEVORVRfRkNTX0xFTkdUSCkKLQkgICB8fCAobWF4X2ZyYW1lIDw9IElYR0JfUlhCVUZGRVJfMjA0OCkpIHsKLQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IElYR0JfUlhCVUZGRVJfMjA0ODsKLQotCX0gZWxzZSBpZihtYXhfZnJhbWUgPD0gSVhHQl9SWEJVRkZFUl80MDk2KSB7Ci0JCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBJWEdCX1JYQlVGRkVSXzQwOTY7Ci0KLQl9IGVsc2UgaWYobWF4X2ZyYW1lIDw9IElYR0JfUlhCVUZGRVJfODE5MikgewotCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSVhHQl9SWEJVRkZFUl84MTkyOwotCi0JfSBlbHNlIHsKLQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IElYR0JfUlhCVUZGRVJfMTYzODQ7Ci0JfQorCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBtYXhfZnJhbWU7CiAKIAluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAKLQlpZihvbGRfbWF4X2ZyYW1lICE9IG1heF9mcmFtZSAmJiBuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQorCWlmICgob2xkX21heF9mcmFtZSAhPSBtYXhfZnJhbWUpICYmIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQlpeGdiX2Rvd24oYWRhcHRlciwgVFJVRSk7CiAJCWl4Z2JfdXAoYWRhcHRlcik7CiAJfQpAQCAtMTc2NSwyMyArMTc4NCw0MyBAQAogCiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CiAKLQlzcGluX2xvY2soJmFkYXB0ZXItPnR4X2xvY2spOwotCWlmKGNsZWFuZWQgJiYgbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICYmIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgotCSAgIChJWEdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID4gSVhHQl9UWF9RVUVVRV9XQUtFKSkgewotCi0JCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSkgeworCQlzcGluX2xvY2soJmFkYXB0ZXItPnR4X2xvY2spOworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICYmIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgorCQkgICAgKElYR0JfREVTQ19VTlVTRUQodHhfcmluZykgPiBJWEdCX1RYX1FVRVVFX1dBS0UpKQorCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKIAogCWlmKGFkYXB0ZXItPmRldGVjdF90eF9odW5nKSB7CiAJCS8qIGRldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKIAkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaSAqLwogCQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IEZBTFNFOwotCQlpZih0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEgJiYKLQkJICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wICsgSFopCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLmRtYSAmJgorCQkgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArIEhaKQogCQkgICAmJiAhKElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYKLQkJCUlYR0JfU1RBVFVTX1RYT0ZGKSkKKwkJICAgICAgICBJWEdCX1NUQVRVU19UWE9GRikpIHsKKwkJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLworCQkJRFBSSU5USyhEUlYsIEVSUiwgIkRldGVjdGVkIFR4IFVuaXQgSGFuZ1xuIgorCQkJCQkiICBUREggICAgICAgICAgICAgICAgICA8JXg+XG4iCisJCQkJCSIgIFREVCAgICAgICAgICAgICAgICAgIDwleD5cbiIKKwkJCQkJIiAgbmV4dF90b191c2UgICAgICAgICAgPCV4PlxuIgorCQkJCQkiICBuZXh0X3RvX2NsZWFuICAgICAgICA8JXg+XG4iCisJCQkJCSJidWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXVxuIgorCQkJCQkiICB0aW1lX3N0YW1wICAgICAgICAgICA8JWx4PlxuIgorCQkJCQkiICBuZXh0X3RvX3dhdGNoICAgICAgICA8JXg+XG4iCisJCQkJCSIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iCisJCQkJCSIgIG5leHRfdG9fd2F0Y2guc3RhdHVzIDwleD5cbiIsCisJCQkJSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRESCksCisJCQkJSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFREVCksCisJCQkJdHhfcmluZy0+bmV4dF90b191c2UsCisJCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKKwkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJZW9wLAorCQkJCWppZmZpZXMsCisJCQkJZW9wX2Rlc2MtPnN0YXR1cyk7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCX0KIAl9CiAKIAlyZXR1cm4gY2xlYW5lZDsKQEAgLTE3OTQsNyArMTgzMyw3IEBACiAgKiBAc2tfYnVmZjogc29ja2V0IGJ1ZmZlciB3aXRoIHJlY2VpdmVkIGRhdGEKICAqKi8KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogaXhnYl9yeF9jaGVja3N1bShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLAogCQkgc3RydWN0IGl4Z2JfcnhfZGVzYyAqcnhfZGVzYywKIAkJIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xODU4LDYgKzE4OTcsNyBAQAogI2VuZGlmCiAJCXN0YXR1cyA9IHJ4X2Rlc2MtPnN0YXR1czsKIAkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAKIAkJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIApAQCAtMTkwMiw2ICsxOTQyLDI2IEBACiAJCQlnb3RvIHJ4ZGVzY19kb25lOwogCQl9CiAKKwkJLyogY29kZSBhZGRlZCBmb3IgY29weWJyZWFrLCB0aGlzIHNob3VsZCBpbXByb3ZlCisJCSAqIHBlcmZvcm1hbmNlIGZvciBzbWFsbCBwYWNrZXRzIHdpdGggbGFyZ2UgYW1vdW50cworCQkgKiBvZiByZWFzc2VtYmx5IGJlaW5nIGRvbmUgaW4gdGhlIHN0YWNrICovCisjZGVmaW5lIElYR0JfQ0JfTEVOR1RIIDI1NgorCQlpZiAobGVuZ3RoIDwgSVhHQl9DQl9MRU5HVEgpIHsKKwkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0KKwkJCSAgICBkZXZfYWxsb2Nfc2tiKGxlbmd0aCArIE5FVF9JUF9BTElHTik7CisJCQlpZiAobmV3X3NrYikgeworCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIE5FVF9JUF9BTElHTik7CisJCQkJbmV3X3NrYi0+ZGV2ID0gbmV0ZGV2OworCQkJCW1lbWNweShuZXdfc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOLAorCQkJCSAgICAgICBza2ItPmRhdGEgLSBORVRfSVBfQUxJR04sCisJCQkJICAgICAgIGxlbmd0aCArIE5FVF9JUF9BTElHTik7CisJCQkJLyogc2F2ZSB0aGUgc2tiIGluIGJ1ZmZlcl9pbmZvIGFzIGdvb2QgKi8KKwkJCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQkJCXNrYiA9IG5ld19za2I7CisJCQl9CisJCX0KKwkJLyogZW5kIGNvcHlicmVhayBjb2RlICovCisKIAkJLyogR29vZCBSZWNlaXZlICovCiAJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCkBAIC0xOTMxLDcgKzE5OTEsNiBAQAogcnhkZXNjX2RvbmU6CiAJCS8qIGNsZWFuIHVwIGRlc2NyaXB0b3IsIG1pZ2h0IGJlIHdyaXR0ZW4gb3ZlciBieSBodyAqLwogCQlyeF9kZXNjLT5zdGF0dXMgPSAwOwotCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAogCQkvKiB1c2UgcHJlZmV0Y2hlZCB2YWx1ZXMgKi8KIAkJcnhfZGVzYyA9IG5leHRfcnhkOwpAQCAtMTk3MSwxMiArMjAzMCwxOCBAQAogCiAJLyogbGVhdmUgdGhyZWUgZGVzY3JpcHRvcnMgdW51c2VkICovCiAJd2hpbGUoLS1jbGVhbmNvdW50ID4gMikgewotCQlyeF9kZXNjID0gSVhHQl9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKKwkJLyogcmVjeWNsZSEgaXRzIGdvb2QgZm9yIHlvdSAqLworCQlpZiAoIShza2IgPSBidWZmZXJfaW5mby0+c2tiKSkKKwkJCXNrYiA9IGRldl9hbGxvY19za2IoYWRhcHRlci0+cnhfYnVmZmVyX2xlbgorCQkJICAgICAgICAgICAgICAgICAgICArIE5FVF9JUF9BTElHTik7CisJCWVsc2UgeworCQkJc2tiX3RyaW0oc2tiLCAwKTsKKwkJCWdvdG8gbWFwX3NrYjsKKwkJfQogCi0JCXNrYiA9IGRldl9hbGxvY19za2IoYWRhcHRlci0+cnhfYnVmZmVyX2xlbiArIE5FVF9JUF9BTElHTik7Ci0KLQkJaWYodW5saWtlbHkoIXNrYikpIHsKKwkJaWYgKHVubGlrZWx5KCFza2IpKSB7CiAJCQkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kICovCisJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTk5MCwzMyArMjA1NSwzNiBAQAogCiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7CiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOwotCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsCi0JCQkJICAgc2tiLT5kYXRhLAotCQkJCSAgIGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4sCi0JCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKK21hcF9za2I6CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5kYXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cnhfYnVmZmVyX2xlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKKwkJcnhfZGVzYyA9IElYR0JfUlhfREVTQygqcnhfcmluZywgaSk7CiAJCXJ4X2Rlc2MtPmJ1ZmZfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOwogCQkvKiBndWFyYW50ZWUgREQgYml0IG5vdCBzZXQgbm93IGJlZm9yZSBoL3cgZ2V0cyBkZXNjcmlwdG9yCiAJCSAqIHRoaXMgaXMgdGhlIHJlc3Qgb2YgdGhlIHdvcmthcm91bmQgZm9yIGgvdyBkb3VibGUgCiAJCSAqIHdyaXRlYmFjay4gKi8KIAkJcnhfZGVzYy0+c3RhdHVzID0gMDsKIAotCQlpZigoaSAmIH4obnVtX2dyb3VwX3RhaWxfd3JpdGVzLSAxKSkgPT0gaSkgewotCQkJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKLQkJCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5Ci0JCQkgKiBhcHBsaWNhYmxlIGZvciB3ZWFrLW9yZGVyZWQgbWVtb3J5IG1vZGVsIGFyY2hzLAotCQkJICogc3VjaCBhcyBJQS02NCkuICovCi0JCQl3bWIoKTsKLQotCQkJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRFQsIGkpOwotCQl9CiAKIAkJaWYoKytpID09IHJ4X3JpbmctPmNvdW50KSBpID0gMDsKIAkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJfQogCi0JcnhfcmluZy0+bmV4dF90b191c2UgPSBpOworCWlmIChsaWtlbHkocnhfcmluZy0+bmV4dF90b191c2UgIT0gaSkpIHsKKwkJcnhfcmluZy0+bmV4dF90b191c2UgPSBpOworCQlpZiAodW5saWtlbHkoaS0tID09IDApKQorCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOworCisJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93CisJCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CisJCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsIHN1Y2gKKwkJICogYXMgSUEtNjQpLiAqLworCQl3bWIoKTsKKwkJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRFQsIGkpOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2Jfb3NkZXAuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCmluZGV4IGRiYTIwNDguLmVlOTgyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfcGFyYW0uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9wYXJhbS5jCmluZGV4IDhhODNkZmQuLjM5ZmJlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9wYXJhbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCkBAIC03Niw3ICs3Niw3IEBACiAgKiAgLSAyIC0gVHggb25seSwgZ2VuZXJhdGUgUEFVU0UgZnJhbWVzIGJ1dCBpZ25vcmUgdGhlbSBvbiByZWNlaXZlCiAgKiAgLSAzIC0gRnVsbCBGbG93IENvbnRyb2wgU3VwcG9ydAogICoKLSAqIERlZmF1bHQgVmFsdWU6IFJlYWQgZmxvdyBjb250cm9sIHNldHRpbmdzIGZyb20gdGhlIEVFUFJPTQorICogRGVmYXVsdCBWYWx1ZTogMiAtIFR4IG9ubHkgKHNpbGljb24gYnVnIGF2b2lkYW5jZSkKICAqLwogCiBJWEdCX1BBUkFNKEZsb3dDb250cm9sLCAiRmxvdyBDb250cm9sIHNldHRpbmciKTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogICoKICAqIFZhbGlkIFJhbmdlOiAxIC0gNjU1MzUgCiAgKgotICogRGVmYXVsdCBWYWx1ZTogIDI1NiAoMHgxMDApCisgKiBEZWZhdWx0IFZhbHVlOiAgNjU1MzUgKDB4ZmZmZikgKHdlJ2xsIHNlbmQgYW4geG9uIGlmIHdlIHJlY292ZXIpCiAgKi8KIAogSVhHQl9QQVJBTShGQ1JlcVRpbWVvdXQsICJGbG93IENvbnRyb2wgUmVxdWVzdCBUaW1lb3V0Iik7CkBAIC0xNjUsOCArMTY1LDYgQEAKIAogI2RlZmluZSBYU1VNUlhfREVGQVVMVAkJIE9QVElPTl9FTkFCTEVECiAKLSNkZWZpbmUgRkxPV19DT05UUk9MX0ZVTEwJICAgaXhnYl9mY19mdWxsCi0jZGVmaW5lIEZMT1dfQ09OVFJPTF9ERUZBVUxUICBGTE9XX0NPTlRST0xfRlVMTAogI2RlZmluZSBERUZBVUxUX0ZDUlRMCSAgCQkweDI4MDAwCiAjZGVmaW5lIERFRkFVTFRfRkNSVEgJCQkweDMwMDAwCiAjZGVmaW5lIE1JTl9GQ1JUTAkJCSAgICAgIDAKQEAgLTE3NCw5ICsxNzIsOSBAQAogI2RlZmluZSBNSU5fRkNSVEgJCQkgICAgICA4CiAjZGVmaW5lIE1BWF9GQ1JUSAkJCTB4M0ZGRjAKIAotI2RlZmluZSBERUZBVUxUX0ZDUEFVU0UJCSAgCTB4MTAwCS8qIHRoaXMgbWF5IGJlIHRvbyBsb25nICovCiAjZGVmaW5lIE1JTl9GQ1BBVVNFCQkJICAgICAgMQogI2RlZmluZSBNQVhfRkNQQVVTRQkJCSAweGZmZmYKKyNkZWZpbmUgREVGQVVMVF9GQ1BBVVNFCQkgIAkgMHhGRkZGIC8qIHRoaXMgbWF5IGJlIHRvbyBsb25nICovCiAKIHN0cnVjdCBpeGdiX29wdGlvbiB7CiAJZW51bSB7IGVuYWJsZV9vcHRpb24sIHJhbmdlX29wdGlvbiwgbGlzdF9vcHRpb24gfSB0eXBlOwpAQCAtMzM2LDcgKzMzNCw3IEBACiAJCQkudHlwZSA9IGxpc3Rfb3B0aW9uLAogCQkJLm5hbWUgPSAiRmxvdyBDb250cm9sIiwKIAkJCS5lcnIgID0gInJlYWRpbmcgZGVmYXVsdCBzZXR0aW5ncyBmcm9tIEVFUFJPTSIsCi0JCQkuZGVmICA9IGl4Z2JfZmNfZnVsbCwKKwkJCS5kZWYgID0gaXhnYl9mY190eF9wYXVzZSwKIAkJCS5hcmcgID0geyAubCA9IHsgLm5yID0gTElTVF9MRU4oZmNfbGlzdCksCiAJCQkJCSAucCA9IGZjX2xpc3QgfX0KIAkJfTsKQEAgLTM2NSw4ICszNjMsOCBAQAogCQl9IGVsc2UgewogCQkJYWRhcHRlci0+aHcuZmMuaGlnaF93YXRlciA9IG9wdC5kZWY7CiAJCX0KLQkJaWYoIShhZGFwdGVyLT5ody5mYy50eXBlICYgaXhnYl9mY19yeF9wYXVzZSkgKQotCQkJcHJpbnRrIChLRVJOX0lORk8gCisJCWlmICghKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3R4X3BhdXNlKSApCisJCQlwcmludGsgKEtFUk5fSU5GTwogCQkJCSJJZ25vcmluZyBSeEZDSGlnaFRocmVzaCB3aGVuIG5vIFJ4RkNcbiIpOwogCX0KIAl7IC8qIFJlY2VpdmUgRmxvdyBDb250cm9sIExvdyBUaHJlc2hvbGQgKi8KQEAgLTM4NSw4ICszODMsOCBAQAogCQl9IGVsc2UgewogCQkJYWRhcHRlci0+aHcuZmMubG93X3dhdGVyID0gb3B0LmRlZjsKIAkJfQotCQlpZighKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3J4X3BhdXNlKSApCi0JCQlwcmludGsgKEtFUk5fSU5GTyAKKwkJaWYgKCEoYWRhcHRlci0+aHcuZmMudHlwZSAmIGl4Z2JfZmNfdHhfcGF1c2UpICkKKwkJCXByaW50ayAoS0VSTl9JTkZPCiAJCQkJIklnbm9yaW5nIFJ4RkNMb3dUaHJlc2ggd2hlbiBubyBSeEZDXG4iKTsKIAl9CiAJeyAvKiBGbG93IENvbnRyb2wgUGF1c2UgVGltZSBSZXF1ZXN0Ki8KQEAgLTQwNiwxMiArNDA0LDEyIEBACiAJCX0gZWxzZSB7CiAJCQlhZGFwdGVyLT5ody5mYy5wYXVzZV90aW1lID0gb3B0LmRlZjsKIAkJfQotCQlpZighKGFkYXB0ZXItPmh3LmZjLnR5cGUgJiBpeGdiX2ZjX3J4X3BhdXNlKSApCi0JCQlwcmludGsgKEtFUk5fSU5GTyAKKwkJaWYgKCEoYWRhcHRlci0+aHcuZmMudHlwZSAmIGl4Z2JfZmNfdHhfcGF1c2UpICkKKwkJCXByaW50ayAoS0VSTl9JTkZPCiAJCQkJIklnbm9yaW5nIEZDUmVxVGltZW91dCB3aGVuIG5vIFJ4RkNcbiIpOwogCX0KIAkvKiBoaWdoIGxvdyBhbmQgc3BhY2luZyBjaGVjayBmb3IgcnggZmxvdyBjb250cm9sIHRocmVzaG9sZHMgKi8KLQlpZiAoYWRhcHRlci0+aHcuZmMudHlwZSAmIGl4Z2JfZmNfcnhfcGF1c2UpIHsKKwlpZiAoYWRhcHRlci0+aHcuZmMudHlwZSAmIGl4Z2JfZmNfdHhfcGF1c2UpIHsKIAkJLyogaGlnaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsb3cgKi8KIAkJaWYgKGFkYXB0ZXItPmh3LmZjLmhpZ2hfd2F0ZXIgPCAoYWRhcHRlci0+aHcuZmMubG93X3dhdGVyICsgOCkpIHsKIAkJCS8qIHNldCBkZWZhdWx0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggNDExZjRkOC4uNjI1ZmY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCX0KIAogCWlmIChoYXNfdGlueV91bmFsaWduZWRfZnJhZ3Moc2tiKSkgewotCQlpZiAoKHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSkgeworCQlpZiAoX19za2JfbGluZWFyaXplKHNrYikpIHsKIAkJCXN0YXRzLT50eF9kcm9wcGVkKys7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBsaW5lYXJpemUgdGlueSAiCiAJCQkJCSJ1bmFsaWduZWQgZnJhZ21lbnRcbiIsIGRldi0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L215cmkxMGdlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjg5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBNeXJpY29tIE15cmktMTBHIGV0aGVybmV0IGRyaXZlcgorIworCitvYmotJChDT05GSUdfTVlSSTEwR0UpICs9IG15cmkxMGdlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZmViNTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0wLDAgKzEsMjg2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG15cmkxMGdlLmM6IE15cmljb20gTXlyaS0xMEcgRXRoZXJuZXQgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNeXJpY29tLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBNeXJpY29tLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCisgKiBJZiB0aGUgZWVwcm9tIG9uIHlvdXIgYm9hcmQgaXMgbm90IHJlY2VudCBlbm91Z2gsIHlvdSB3aWxsIG5lZWQgdG8gZ2V0IGEKKyAqIG5ld2VyIGZpcm13YXJlIGltYWdlIGF0OgorICogICBodHRwOi8vd3d3Lm15cmkuY29tL3Njcy9kb3dubG9hZC1NeXJpMTBHRS5odG1sCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICAgPGhlbHBAbXlyaS5jb20+CisgKiAgIE15cmljb20sIEluYy4sIDMyNU4gU2FudGEgQW5pdGEgQXZlbnVlLCBBcmNhZGlhLCBDQSA5MTAwNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2lmZGVmIENPTkZJR19NVFJSCisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibXlyaTEwZ2VfbWNwLmgiCisjaW5jbHVkZSAibXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCIKKworI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS4wLjAiCisKK01PRFVMRV9ERVNDUklQVElPTigiTXlyaWNvbSAxMEcgZHJpdmVyICgxMEdiRSkiKTsKK01PRFVMRV9BVVRIT1IoIk1haW50YWluZXI6IGhlbHBAbXlyaS5jb20iKTsKK01PRFVMRV9WRVJTSU9OKE1ZUkkxMEdFX1ZFUlNJT05fU1RSKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKKworI2RlZmluZSBNWVJJMTBHRV9NQVhfRVRIRVJfTVRVIDkwMTQKKworI2RlZmluZSBNWVJJMTBHRV9FVEhfU1RPUFBFRCAwCisjZGVmaW5lIE1ZUkkxMEdFX0VUSF9TVE9QUElORyAxCisjZGVmaW5lIE1ZUkkxMEdFX0VUSF9TVEFSVElORyAyCisjZGVmaW5lIE1ZUkkxMEdFX0VUSF9SVU5OSU5HIDMKKyNkZWZpbmUgTVlSSTEwR0VfRVRIX09QRU5fRkFJTEVEIDQKKworI2RlZmluZSBNWVJJMTBHRV9FRVBST01fU1RSSU5HU19TSVpFIDI1NgorI2RlZmluZSBNWVJJMTBHRV9NQVhfU0VORF9ERVNDX1RTTyAoKDY1NTM2IC8gMjA0OCkgKiAyKQorCisjZGVmaW5lIE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSAweGZmZmZmZmZmCisjZGVmaW5lIE1ZUkkxMEdFX05PX1JFU1BPTlNFX1JFU1VMVCAweGZmZmZmZmZmCisKK3N0cnVjdCBteXJpMTBnZV9yeF9idWZmZXJfc3RhdGUgeworCXN0cnVjdCBza19idWZmICpza2I7CisJIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoYnVzKQorCSBERUNMQVJFX1BDSV9VTk1BUF9MRU4obGVuKQorfTsKKworc3RydWN0IG15cmkxMGdlX3R4X2J1ZmZlcl9zdGF0ZSB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgbGFzdDsKKwkgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihidXMpCisJIERFQ0xBUkVfUENJX1VOTUFQX0xFTihsZW4pCit9OworCitzdHJ1Y3QgbXlyaTEwZ2VfY21kIHsKKwl1MzIgZGF0YTA7CisJdTMyIGRhdGExOworCXUzMiBkYXRhMjsKK307CisKK3N0cnVjdCBteXJpMTBnZV9yeF9idWYgeworCXN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2IF9faW9tZW0gKmxhbmFpOwkvKiBsYW5haSBwdHIgZm9yIHJlY3YgcmluZyAqLworCXU4IF9faW9tZW0gKndjX2ZpZm87CS8qIHcvYyByeCBkbWEgYWRkciBmaWZvIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiAqc2hhZG93OwkvKiBob3N0IHNoYWRvdyBvZiByZWN2IHJpbmcgKi8KKwlzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmZmVyX3N0YXRlICppbmZvOworCWludCBjbnQ7CisJaW50IGFsbG9jX2ZhaWw7CisJaW50IG1hc2s7CQkvKiBudW1iZXIgb2Ygcnggc2xvdHMgLTEgKi8KK307CisKK3N0cnVjdCBteXJpMTBnZV90eF9idWYgeworCXN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kIF9faW9tZW0gKmxhbmFpOwkvKiBsYW5haSBwdHIgZm9yIHNlbmRxICovCisJdTggX19pb21lbSAqd2NfZmlmbzsJLyogdy9jIHNlbmQgZmlmbyBhZGRyZXNzICovCisJc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgKnJlcV9saXN0OwkvKiBob3N0IHNoYWRvdyBvZiBzZW5kcSAqLworCWNoYXIgKnJlcV9ieXRlczsKKwlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmZmVyX3N0YXRlICppbmZvOworCWludCBtYXNrOwkJLyogbnVtYmVyIG9mIHRyYW5zbWl0IHNsb3RzIC0xICAqLworCWludCBib3VuZGFyeTsJCS8qIGJvdW5kYXJ5IHRyYW5zbWl0cyBjYW5ub3QgY3Jvc3MgKi8KKwlpbnQgcmVxIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsJLyogdHJhbnNtaXQgc2xvdHMgc3VibWl0dGVkICAgICAqLworCWludCBwa3Rfc3RhcnQ7CQkvKiBwYWNrZXRzIHN0YXJ0ZWQgKi8KKwlpbnQgZG9uZSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CS8qIHRyYW5zbWl0IHNsb3RzIGNvbXBsZXRlZCAgICAgKi8KKwlpbnQgcGt0X2RvbmU7CQkvKiBwYWNrZXRzIGNvbXBsZXRlZCAqLworfTsKKworc3RydWN0IG15cmkxMGdlX3J4X2RvbmUgeworCXN0cnVjdCBtY3Bfc2xvdCAqZW50cnk7CisJZG1hX2FkZHJfdCBidXM7CisJaW50IGNudDsKKwlpbnQgaWR4OworfTsKKworc3RydWN0IG15cmkxMGdlX3ByaXYgeworCWludCBydW5uaW5nOwkJLyogcnVubmluZz8gICAgICAgICAgICAgKi8KKwlpbnQgY3N1bV9mbGFnOwkJLyogcnhfY3N1bXM/ICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmIHR4OwkvKiB0cmFuc21pdCByaW5nICAgICAgICAqLworCXN0cnVjdCBteXJpMTBnZV9yeF9idWYgcnhfc21hbGw7CisJc3RydWN0IG15cmkxMGdlX3J4X2J1ZiByeF9iaWc7CisJc3RydWN0IG15cmkxMGdlX3J4X2RvbmUgcnhfZG9uZTsKKwlpbnQgc21hbGxfYnl0ZXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwl1OCBfX2lvbWVtICpzcmFtOworCWludCBzcmFtX3NpemU7CisJdW5zaWduZWQgbG9uZyBib2FyZF9zcGFuOworCXVuc2lnbmVkIGxvbmcgaW9tZW1fYmFzZTsKKwl1MzIgX19pb21lbSAqaXJxX2NsYWltOworCXUzMiBfX2lvbWVtICppcnFfZGVhc3NlcnQ7CisJY2hhciAqbWFjX2FkZHJfc3RyaW5nOworCXN0cnVjdCBtY3BfY21kX3Jlc3BvbnNlICpjbWQ7CisJZG1hX2FkZHJfdCBjbWRfYnVzOworCXN0cnVjdCBtY3BfaXJxX2RhdGEgKmZ3X3N0YXRzOworCWRtYV9hZGRyX3QgZndfc3RhdHNfYnVzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCWludCBtc2lfZW5hYmxlZDsKKwl1bnNpZ25lZCBpbnQgbGlua19zdGF0ZTsKKwl1bnNpZ25lZCBpbnQgcmRtYV90YWdzX2F2YWlsYWJsZTsKKwlpbnQgaW50cl9jb2FsX2RlbGF5OworCXUzMiBfX2lvbWVtICppbnRyX2NvYWxfZGVsYXlfcHRyOworCWludCBtdHJyOworCWludCB3YWtlX3F1ZXVlOworCWludCBzdG9wX3F1ZXVlOworCWludCBkb3duX2NudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkb3duX3dxOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3YXRjaGRvZ193b3JrOworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOworCWludCB3YXRjaGRvZ190eF9kb25lOworCWludCB3YXRjaGRvZ19yZXNldHM7CisJaW50IHR4X2xpbmVhcml6ZWQ7CisJaW50IHBhdXNlOworCWNoYXIgKmZ3X25hbWU7CisJY2hhciBlZXByb21fc3RyaW5nc1tNWVJJMTBHRV9FRVBST01fU1RSSU5HU19TSVpFXTsKKwljaGFyIGZ3X3ZlcnNpb25bMTI4XTsKKwl1OCBtYWNfYWRkcls2XTsJCS8qIGVlcHJvbSBtYWMgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgc2VyaWFsX251bWJlcjsKKwlpbnQgdmVuZG9yX3NwZWNpZmljX29mZnNldDsKKwl1MzIgZGV2Y3RsOworCXUxNiBtc2lfZmxhZ3M7CisJdTMyIHBtX3N0YXRlWzE2XTsKKwl1MzIgcmVhZF9kbWE7CisJdTMyIHdyaXRlX2RtYTsKKwl1MzIgcmVhZF93cml0ZV9kbWE7Cit9OworCitzdGF0aWMgY2hhciAqbXlyaTEwZ2VfZndfdW5hbGlnbmVkID0gIm15cmkxMGdlX2V0aHBfejhlLmRhdCI7CitzdGF0aWMgY2hhciAqbXlyaTEwZ2VfZndfYWxpZ25lZCA9ICJteXJpMTBnZV9ldGhfejhlLmRhdCI7CisKK3N0YXRpYyBjaGFyICpteXJpMTBnZV9md19uYW1lID0gTlVMTDsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9md19uYW1lLCBjaGFycCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9md19uYW1lLCAiRmlybXdhcmUgaW1hZ2UgbmFtZVxuIik7CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfZWNyY19lbmFibGUgPSAxOworbW9kdWxlX3BhcmFtKG15cmkxMGdlX2VjcmNfZW5hYmxlLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9lY3JjX2VuYWJsZSwgIkVuYWJsZSBFeHRlbmRlZCBDUkMgb24gUENJLUVcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX21heF9pbnRyX3Nsb3RzID0gMTAyNDsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9tYXhfaW50cl9zbG90cywgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfbWF4X2ludHJfc2xvdHMsICJJbnRlcnJ1cHQgcXVldWUgc2xvdHNcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX3NtYWxsX2J5dGVzID0gLTE7CS8qIC0xID09IGF1dG8gKi8KK21vZHVsZV9wYXJhbShteXJpMTBnZV9zbWFsbF9ieXRlcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX3NtYWxsX2J5dGVzLCAiVGhyZXNob2xkIG9mIHNtYWxsIHBhY2tldHNcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX21zaSA9IDE7CS8qIGVuYWJsZSBtc2kgYnkgZGVmYXVsdCAqLworbW9kdWxlX3BhcmFtKG15cmkxMGdlX21zaSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfbXNpLCAiRW5hYmxlIE1lc3NhZ2UgU2lnbmFsbGVkIEludGVycnVwdHNcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX2ludHJfY29hbF9kZWxheSA9IDI1OworbW9kdWxlX3BhcmFtKG15cmkxMGdlX2ludHJfY29hbF9kZWxheSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfaW50cl9jb2FsX2RlbGF5LCAiSW50ZXJydXB0IGNvYWxlc2NpbmcgZGVsYXlcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX2Zsb3dfY29udHJvbCA9IDE7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2VfZmxvd19jb250cm9sLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9mbG93X2NvbnRyb2wsICJQYXVzZSBwYXJhbWV0ZXJcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX2RlYXNzZXJ0X3dhaXQgPSAxOworbW9kdWxlX3BhcmFtKG15cmkxMGdlX2RlYXNzZXJ0X3dhaXQsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9kZWFzc2VydF93YWl0LAorCQkgIldhaXQgd2hlbiBkZWFzc2VydGluZyBsZWdhY3kgaW50ZXJydXB0c1xuIik7CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfZm9yY2VfZmlybXdhcmUgPSAwOworbW9kdWxlX3BhcmFtKG15cmkxMGdlX2ZvcmNlX2Zpcm13YXJlLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9mb3JjZV9maXJtd2FyZSwKKwkJICJGb3JjZSBmaXJtd2FyZSB0byBhc3N1bWUgYWxpZ25lZCBjb21wbGV0aW9uc1xuIik7CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2Vfc2tiX2Nyb3NzXzRrID0gMDsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9za2JfY3Jvc3NfNGssIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9za2JfY3Jvc3NfNGssCisJCSAiQ2FuIGEgc21hbGwgc2tiIGNyb3NzIGEgNEtCIGJvdW5kYXJ5P1xuIik7CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfaW5pdGlhbF9tdHUgPSBNWVJJMTBHRV9NQVhfRVRIRVJfTVRVIC0gRVRIX0hMRU47Cittb2R1bGVfcGFyYW0obXlyaTEwZ2VfaW5pdGlhbF9tdHUsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX2luaXRpYWxfbXR1LCAiSW5pdGlhbCBNVFVcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX25hcGlfd2VpZ2h0ID0gNjQ7Cittb2R1bGVfcGFyYW0obXlyaTEwZ2VfbmFwaV93ZWlnaHQsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX25hcGlfd2VpZ2h0LCAiU2V0IE5BUEkgd2VpZ2h0XG4iKTsKKworc3RhdGljIGludCBteXJpMTBnZV93YXRjaGRvZ190aW1lb3V0ID0gMTsKK21vZHVsZV9wYXJhbShteXJpMTBnZV93YXRjaGRvZ190aW1lb3V0LCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV93YXRjaGRvZ190aW1lb3V0LCAiU2V0IHdhdGNoZG9nIHRpbWVvdXRcbiIpOworCitzdGF0aWMgaW50IG15cmkxMGdlX21heF9pcnFfbG9vcHMgPSAxMDQ4NTc2OworbW9kdWxlX3BhcmFtKG15cmkxMGdlX21heF9pcnFfbG9vcHMsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX21heF9pcnFfbG9vcHMsCisJCSAiU2V0IHN0dWNrIGxlZ2FjeSBJUlEgZGV0ZWN0aW9uIHRocmVzaG9sZFxuIik7CisKKyNkZWZpbmUgTVlSSTEwR0VfRldfT0ZGU0VUIDEwMjQqMTAyNAorI2RlZmluZSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoWCkgXAorKHNpemVvZiAoWCkgPT0gOCkgPyAoKHUzMikoKHU2NCkoWCkgPj4gMzIpKSA6ICgwKQorI2RlZmluZSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihYKSAoKHUzMikoWCkpCisKKyNkZWZpbmUgbXlyaTEwZ2VfcGlvX2NvcHkodG8sZnJvbSxzaXplKSBfX2lvd3JpdGU2NF9jb3B5KHRvLGZyb20sc2l6ZS84KQorCitzdGF0aWMgaW50CitteXJpMTBnZV9zZW5kX2NtZChzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCB1MzIgY21kLAorCQkgIHN0cnVjdCBteXJpMTBnZV9jbWQgKmRhdGEsIGludCBhdG9taWMpCit7CisJc3RydWN0IG1jcF9jbWQgKmJ1ZjsKKwljaGFyIGJ1Zl9ieXRlc1tzaXplb2YoKmJ1ZikgKyA4XTsKKwlzdHJ1Y3QgbWNwX2NtZF9yZXNwb25zZSAqcmVzcG9uc2UgPSBtZ3AtPmNtZDsKKwljaGFyIF9faW9tZW0gKmNtZF9hZGRyID0gbWdwLT5zcmFtICsgTVhHRUZXX0NNRF9PRkZTRVQ7CisJdTMyIGRtYV9sb3csIGRtYV9oaWdoLCByZXN1bHQsIHZhbHVlOworCWludCBzbGVlcF90b3RhbCA9IDA7CisKKwkvKiBlbnN1cmUgYnVmIGlzIGFsaWduZWQgdG8gOCBieXRlcyAqLworCWJ1ZiA9IChzdHJ1Y3QgbWNwX2NtZCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWJ1Zl9ieXRlcywgOCk7CisKKwlidWYtPmRhdGEwID0gaHRvbmwoZGF0YS0+ZGF0YTApOworCWJ1Zi0+ZGF0YTEgPSBodG9ubChkYXRhLT5kYXRhMSk7CisJYnVmLT5kYXRhMiA9IGh0b25sKGRhdGEtPmRhdGEyKTsKKwlidWYtPmNtZCA9IGh0b25sKGNtZCk7CisJZG1hX2xvdyA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+Y21kX2J1cyk7CisJZG1hX2hpZ2ggPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5jbWRfYnVzKTsKKworCWJ1Zi0+cmVzcG9uc2VfYWRkci5sb3cgPSBodG9ubChkbWFfbG93KTsKKwlidWYtPnJlc3BvbnNlX2FkZHIuaGlnaCA9IGh0b25sKGRtYV9oaWdoKTsKKwlyZXNwb25zZS0+cmVzdWx0ID0gTVlSSTEwR0VfTk9fUkVTUE9OU0VfUkVTVUxUOworCW1iKCk7CisJbXlyaTEwZ2VfcGlvX2NvcHkoY21kX2FkZHIsIGJ1Ziwgc2l6ZW9mKCpidWYpKTsKKworCS8qIHdhaXQgdXAgdG8gMTVtcy4gTG9uZ2VzdCBjb21tYW5kIGlzIHRoZSBETUEgYmVuY2htYXJrLAorCSAqIHdoaWNoIGlzIGNhcHBlZCBhdCA1bXMsIGJ1dCBydW5zIGZyb20gYSB0aW1lb3V0IGhhbmRsZXIKKwkgKiB0aGF0IHJ1bnMgZXZlcnkgNy44bXMuIFNvIGEgMTVtcyB0aW1lb3V0IGxlYXZlcyB1cyB3aXRoCisJICogYSAyLjJtcyBtYXJnaW4KKwkgKi8KKwlpZiAoYXRvbWljKSB7CisJCS8qIGlmIGF0b21pYyBpcyBzZXQsIGRvIG5vdCBzbGVlcCwKKwkJICogYW5kIHRyeSB0byBnZXQgdGhlIGNvbXBsZXRpb24gcXVpY2tseQorCQkgKiAoMW1zIHdpbGwgYmUgZW5vdWdoIGZvciB0aG9zZSBjb21tYW5kcykgKi8KKwkJZm9yIChzbGVlcF90b3RhbCA9IDA7CisJCSAgICAgc2xlZXBfdG90YWwgPCAxMDAwCisJCSAgICAgJiYgcmVzcG9uc2UtPnJlc3VsdCA9PSBNWVJJMTBHRV9OT19SRVNQT05TRV9SRVNVTFQ7CisJCSAgICAgc2xlZXBfdG90YWwgKz0gMTApCisJCQl1ZGVsYXkoMTApOworCX0gZWxzZSB7CisJCS8qIHVzZSBtc2xlZXAgZm9yIG1vc3QgY29tbWFuZCAqLworCQlmb3IgKHNsZWVwX3RvdGFsID0gMDsKKwkJICAgICBzbGVlcF90b3RhbCA8IDE1CisJCSAgICAgJiYgcmVzcG9uc2UtPnJlc3VsdCA9PSBNWVJJMTBHRV9OT19SRVNQT05TRV9SRVNVTFQ7CisJCSAgICAgc2xlZXBfdG90YWwrKykKKwkJCW1zbGVlcCgxKTsKKwl9CisKKwlyZXN1bHQgPSBudG9obChyZXNwb25zZS0+cmVzdWx0KTsKKwl2YWx1ZSA9IG50b2hsKHJlc3BvbnNlLT5kYXRhKTsKKwlpZiAocmVzdWx0ICE9IE1ZUkkxMEdFX05PX1JFU1BPTlNFX1JFU1VMVCkgeworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCWRhdGEtPmRhdGEwID0gdmFsdWU7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJm1ncC0+cGRldi0+ZGV2LAorCQkJCSJjb21tYW5kICVkIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJY21kLCByZXN1bHQpOworCQkJcmV0dXJuIC1FTlhJTzsKKwkJfQorCX0KKworCWRldl9lcnIoJm1ncC0+cGRldi0+ZGV2LCAiY29tbWFuZCAlZCB0aW1lZCBvdXQsIHJlc3VsdCA9ICVkXG4iLAorCQljbWQsIHJlc3VsdCk7CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qCisgKiBUaGUgZWVwcm9tIHN0cmluZ3Mgb24gdGhlIGxhbmFpWCBoYXZlIHRoZSBmb3JtYXQKKyAqIFNOPXhcMAorICogTUFDPXg6eDp4Ong6eDp4XDAKKyAqIFBUOmRkZCBtbW0geHggeHg6eHg6eHggeHhcMAorICogUFY6ZGRkIG1tbSB4eCB4eDp4eDp4eCB4eFwwCisgKi8KK3N0YXRpYyBpbnQgbXlyaTEwZ2VfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQoreworCWNoYXIgKnB0ciwgKmxpbWl0OworCWludCBpOworCisJcHRyID0gbWdwLT5lZXByb21fc3RyaW5nczsKKwlsaW1pdCA9IG1ncC0+ZWVwcm9tX3N0cmluZ3MgKyBNWVJJMTBHRV9FRVBST01fU1RSSU5HU19TSVpFOworCisJd2hpbGUgKCpwdHIgIT0gJ1wwJyAmJiBwdHIgPCBsaW1pdCkgeworCQlpZiAobWVtY21wKHB0ciwgIk1BQz0iLCA0KSA9PSAwKSB7CisJCQlwdHIgKz0gNDsKKwkJCW1ncC0+bWFjX2FkZHJfc3RyaW5nID0gcHRyOworCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkJCWlmICgocHRyICsgMikgPiBsaW1pdCkKKwkJCQkJZ290byBhYm9ydDsKKwkJCQltZ3AtPm1hY19hZGRyW2ldID0KKwkJCQkgICAgc2ltcGxlX3N0cnRvdWwocHRyLCAmcHRyLCAxNik7CisJCQkJcHRyICs9IDE7CisJCQl9CisJCX0KKwkJaWYgKG1lbWNtcCgoY29uc3Qgdm9pZCAqKXB0ciwgIlNOPSIsIDMpID09IDApIHsKKwkJCXB0ciArPSAzOworCQkJbWdwLT5zZXJpYWxfbnVtYmVyID0gc2ltcGxlX3N0cnRvdWwocHRyLCAmcHRyLCAxMCk7CisJCX0KKwkJd2hpbGUgKHB0ciA8IGxpbWl0ICYmICpwdHIrKykgOworCX0KKworCXJldHVybiAwOworCithYm9ydDoKKwlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwgImZhaWxlZCB0byBwYXJzZSBlZXByb21fc3RyaW5nc1xuIik7CisJcmV0dXJuIC1FTlhJTzsKK30KKworLyoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIHBlcmlvZGljIFJETUFzIGZyb20gdGhlIGhvc3QgdG8gbWFrZSBjZXJ0YWluCisgKiBjaGlwc2V0cyByZXNlbmQgZHJvcHBlZCBQQ0llIG1lc3NhZ2VzCisgKi8KKworc3RhdGljIHZvaWQgbXlyaTEwZ2VfZHVtbXlfcmRtYShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBpbnQgZW5hYmxlKQoreworCWNoYXIgX19pb21lbSAqc3VibWl0OworCXUzMiBidWZbMTZdOworCXUzMiBkbWFfbG93LCBkbWFfaGlnaDsKKwlpbnQgaTsKKworCS8qIGNsZWFyIGNvbmZpcm1hdGlvbiBhZGRyICovCisJbWdwLT5jbWQtPmRhdGEgPSAwOworCW1iKCk7CisKKwkvKiBzZW5kIGEgcmRtYSBjb21tYW5kIHRvIHRoZSBQQ0llIGVuZ2luZSwgYW5kIHdhaXQgZm9yIHRoZQorCSAqIHJlc3BvbnNlIGluIHRoZSBjb25maXJtYXRpb24gYWRkcmVzcy4gIFRoZSBmaXJtd2FyZSBzaG91bGQKKwkgKiB3cml0ZSBhIC0xIHRoZXJlIHRvIGluZGljYXRlIGl0IGlzIGFsaXZlIGFuZCB3ZWxsCisJICovCisJZG1hX2xvdyA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+Y21kX2J1cyk7CisJZG1hX2hpZ2ggPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5jbWRfYnVzKTsKKworCWJ1ZlswXSA9IGh0b25sKGRtYV9oaWdoKTsJLyogY29uZmlybSBhZGRyIE1TVyAqLworCWJ1ZlsxXSA9IGh0b25sKGRtYV9sb3cpOwkvKiBjb25maXJtIGFkZHIgTFNXICovCisJYnVmWzJdID0gaHRvbmwoTVlSSTEwR0VfTk9fQ09ORklSTV9EQVRBKTsJLyogY29uZmlybSBkYXRhICovCisJYnVmWzNdID0gaHRvbmwoZG1hX2hpZ2gpOwkvKiBkdW1teSBhZGRyIE1TVyAqLworCWJ1Zls0XSA9IGh0b25sKGRtYV9sb3cpOwkvKiBkdW1teSBhZGRyIExTVyAqLworCWJ1Zls1XSA9IGh0b25sKGVuYWJsZSk7CS8qIGVuYWJsZT8gKi8KKworCXN1Ym1pdCA9IG1ncC0+c3JhbSArIDB4ZmMwMWMwOworCisJbXlyaTEwZ2VfcGlvX2NvcHkoc3VibWl0LCAmYnVmLCBzaXplb2YoYnVmKSk7CisJZm9yIChpID0gMDsgbWdwLT5jbWQtPmRhdGEgIT0gTVlSSTEwR0VfTk9fQ09ORklSTV9EQVRBICYmIGkgPCAyMDsgaSsrKQorCQltc2xlZXAoMSk7CisJaWYgKG1ncC0+Y21kLT5kYXRhICE9IE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSkKKwkJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsICJkdW1teSByZG1hICVzIGZhaWxlZFxuIiwKKwkJCShlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIikpOworfQorCitzdGF0aWMgaW50CitteXJpMTBnZV92YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLAorCQkJICAgc3RydWN0IG1jcF9nZW5faGVhZGVyICpoZHIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm1ncC0+cGRldi0+ZGV2OworCWludCBtYWpvciwgbWlub3I7CisKKwkvKiBjaGVjayBmaXJtd2FyZSB0eXBlICovCisJaWYgKG50b2hsKGhkci0+bWNwX3R5cGUpICE9IE1DUF9UWVBFX0VUSCkgeworCQlkZXZfZXJyKGRldiwgIkJhZCBmaXJtd2FyZSB0eXBlOiAweCV4XG4iLCBudG9obChoZHItPm1jcF90eXBlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNhdmUgZmlybXdhcmUgdmVyc2lvbiBmb3IgZXRodG9vbCAqLworCXN0cm5jcHkobWdwLT5md192ZXJzaW9uLCBoZHItPnZlcnNpb24sIHNpemVvZihtZ3AtPmZ3X3ZlcnNpb24pKTsKKworCXNzY2FuZihtZ3AtPmZ3X3ZlcnNpb24sICIlZC4lZCIsICZtYWpvciwgJm1pbm9yKTsKKworCWlmICghKG1ham9yID09IE1YR0VGV19WRVJTSU9OX01BSk9SICYmIG1pbm9yID09IE1YR0VGV19WRVJTSU9OX01JTk9SKSkgeworCQlkZXZfZXJyKGRldiwgIkZvdW5kIGZpcm13YXJlIHZlcnNpb24gJXNcbiIsIG1ncC0+ZndfdmVyc2lvbik7CisJCWRldl9lcnIoZGV2LCAiRHJpdmVyIG5lZWRzICVkLiVkXG4iLCBNWEdFRldfVkVSU0lPTl9NQUpPUiwKKwkJCU1YR0VGV19WRVJTSU9OX01JTk9SKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX2xvYWRfaG90cGx1Z19maXJtd2FyZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCB1MzIgKiBzaXplKQoreworCXVuc2lnbmVkIGNyYywgcmVyZWFkX2NyYzsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZ3AtPnBkZXYtPmRldjsKKwlzdHJ1Y3QgbWNwX2dlbl9oZWFkZXIgKmhkcjsKKwlzaXplX3QgaGRyX29mZnNldDsKKwlpbnQgc3RhdHVzOworCisJaWYgKChzdGF0dXMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbWdwLT5md19uYW1lLCBkZXYpKSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gbG9hZCAlcyBmaXJtd2FyZSBpbWFnZSB2aWEgaG90cGx1Z1xuIiwKKwkJCW1ncC0+ZndfbmFtZSk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gYWJvcnRfd2l0aF9ub3RoaW5nOworCX0KKworCS8qIGNoZWNrIHNpemUgKi8KKworCWlmIChmdy0+c2l6ZSA+PSBtZ3AtPnNyYW1fc2l6ZSAtIE1ZUkkxMEdFX0ZXX09GRlNFVCB8fAorCSAgICBmdy0+c2l6ZSA8IE1DUF9IRUFERVJfUFRSX09GRlNFVCArIDQpIHsKKwkJZGV2X2VycihkZXYsICJGaXJtd2FyZSBzaXplIGludmFsaWQ6JWRcbiIsIChpbnQpZnctPnNpemUpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGFib3J0X3dpdGhfZnc7CisJfQorCisJLyogY2hlY2sgaWQgKi8KKwloZHJfb2Zmc2V0ID0gbnRvaGwoKih1MzIgKikgKGZ3LT5kYXRhICsgTUNQX0hFQURFUl9QVFJfT0ZGU0VUKSk7CisJaWYgKChoZHJfb2Zmc2V0ICYgMykgfHwgaGRyX29mZnNldCArIHNpemVvZigqaGRyKSA+IGZ3LT5zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiQmFkIGZpcm13YXJlIGZpbGVcbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGFib3J0X3dpdGhfZnc7CisJfQorCWhkciA9ICh2b2lkICopKGZ3LT5kYXRhICsgaGRyX29mZnNldCk7CisKKwlzdGF0dXMgPSBteXJpMTBnZV92YWxpZGF0ZV9maXJtd2FyZShtZ3AsIGhkcik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGFib3J0X3dpdGhfZnc7CisKKwljcmMgPSBjcmMzMih+MCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwlpZiAobWdwLT50eC5ib3VuZGFyeSA9PSAyMDQ4KSB7CisJCS8qIEF2b2lkIFBDSSBidXJzdCBvbiBjaGlwc2V0IHdpdGggdW5hbGlnbmVkIGNvbXBsZXRpb25zLiAqLworCQlpbnQgaTsKKwkJX19pb21lbSB1MzIgKnB0ciA9IChfX2lvbWVtIHUzMiAqKSAobWdwLT5zcmFtICsKKwkJCQkJCSAgICBNWVJJMTBHRV9GV19PRkZTRVQpOworCQlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemUgLyA0OyBpKyspIHsKKwkJCV9fcmF3X3dyaXRlbCgoKHUzMiAqKSBmdy0+ZGF0YSlbaV0sIHB0ciArIGkpOworCQkJd21iKCk7CisJCX0KKwl9IGVsc2UgeworCQlteXJpMTBnZV9waW9fY29weShtZ3AtPnNyYW0gKyBNWVJJMTBHRV9GV19PRkZTRVQsIGZ3LT5kYXRhLAorCQkJCSAgZnctPnNpemUpOworCX0KKwkvKiBjb3JydXB0aW9uIGNoZWNraW5nIGlzIGdvb2QgZm9yIHBhcml0eSByZWNvdmVyeSBhbmQgYnVnZ3kgY2hpcHNldCAqLworCW1lbWNweV9mcm9taW8oZnctPmRhdGEsIG1ncC0+c3JhbSArIE1ZUkkxMEdFX0ZXX09GRlNFVCwgZnctPnNpemUpOworCXJlcmVhZF9jcmMgPSBjcmMzMih+MCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwlpZiAoY3JjICE9IHJlcmVhZF9jcmMpIHsKKwkJZGV2X2VycihkZXYsICJDUkMgZmFpbGVkKGZ3LWxlbj0ldSksIGdvdCAweCV4IChleHBlY3QgMHgleClcbiIsCisJCQkodW5zaWduZWQpZnctPnNpemUsIHJlcmVhZF9jcmMsIGNyYyk7CisJCXN0YXR1cyA9IC1FSU87CisJCWdvdG8gYWJvcnRfd2l0aF9mdzsKKwl9CisJKnNpemUgPSAodTMyKSBmdy0+c2l6ZTsKKworYWJvcnRfd2l0aF9mdzoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworYWJvcnRfd2l0aF9ub3RoaW5nOgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfYWRvcHRfcnVubmluZ19maXJtd2FyZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQoreworCXN0cnVjdCBtY3BfZ2VuX2hlYWRlciAqaGRyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZ3AtPnBkZXYtPmRldjsKKwljb25zdCBzaXplX3QgYnl0ZXMgPSBzaXplb2Yoc3RydWN0IG1jcF9nZW5faGVhZGVyKTsKKwlzaXplX3QgaGRyX29mZnNldDsKKwlpbnQgc3RhdHVzOworCisJLyogZmluZCBydW5uaW5nIGZpcm13YXJlIGhlYWRlciAqLworCWhkcl9vZmZzZXQgPSBudG9obChfX3Jhd19yZWFkbChtZ3AtPnNyYW0gKyBNQ1BfSEVBREVSX1BUUl9PRkZTRVQpKTsKKworCWlmICgoaGRyX29mZnNldCAmIDMpIHx8IGhkcl9vZmZzZXQgKyBzaXplb2YoKmhkcikgPiBtZ3AtPnNyYW1fc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIlJ1bm5pbmcgZmlybXdhcmUgaGFzIGJhZCBoZWFkZXIgb2Zmc2V0ICglZClcbiIsCisJCQkoaW50KWhkcl9vZmZzZXQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBjb3B5IGhlYWRlciBvZiBydW5uaW5nIGZpcm13YXJlIGZyb20gU1JBTSB0byBob3N0IG1lbW9yeSB0bworCSAqIHZhbGlkYXRlIGZpcm13YXJlICovCisJaGRyID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKGhkciA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IG1hbGxvYyBmaXJtd2FyZSBoZHJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5X2Zyb21pbyhoZHIsIG1ncC0+c3JhbSArIGhkcl9vZmZzZXQsIGJ5dGVzKTsKKwlzdGF0dXMgPSBteXJpMTBnZV92YWxpZGF0ZV9maXJtd2FyZShtZ3AsIGhkcik7CisJa2ZyZWUoaGRyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX2xvYWRfZmlybXdhcmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwljaGFyIF9faW9tZW0gKnN1Ym1pdDsKKwl1MzIgYnVmWzE2XTsKKwl1MzIgZG1hX2xvdywgZG1hX2hpZ2gsIHNpemU7CisJaW50IHN0YXR1cywgaTsKKworCXNpemUgPSAwOworCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfaG90cGx1Z19maXJtd2FyZShtZ3AsICZzaXplKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl93YXJuKCZtZ3AtPnBkZXYtPmRldiwgImhvdHBsdWcgZmlybXdhcmUgbG9hZGluZyBmYWlsZWRcbiIpOworCisJCS8qIERvIG5vdCBhdHRlbXB0IHRvIGFkb3B0IGZpcm13YXJlIGlmIHRoZXJlCisJCSAqIHdhcyBhIGJhZCBjcmMgKi8KKwkJaWYgKHN0YXR1cyA9PSAtRUlPKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQlzdGF0dXMgPSBteXJpMTBnZV9hZG9wdF9ydW5uaW5nX2Zpcm13YXJlKG1ncCk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJZGV2X2VycigmbWdwLT5wZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBhZG9wdCBydW5uaW5nIGZpcm13YXJlXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJZGV2X2luZm8oJm1ncC0+cGRldi0+ZGV2LAorCQkJICJTdWNjZXNzZnVsbHkgYWRvcHRlZCBydW5uaW5nIGZpcm13YXJlXG4iKTsKKwkJaWYgKG1ncC0+dHguYm91bmRhcnkgPT0gNDA5NikgeworCQkJZGV2X3dhcm4oJm1ncC0+cGRldi0+ZGV2LAorCQkJCSAiVXNpbmcgZmlybXdhcmUgY3VycmVudGx5IHJ1bm5pbmcgb24gTklDIgorCQkJCSAiLiAgRm9yIG9wdGltYWxcbiIpOworCQkJZGV2X3dhcm4oJm1ncC0+cGRldi0+ZGV2LAorCQkJCSAicGVyZm9ybWFuY2UgY29uc2lkZXIgbG9hZGluZyBvcHRpbWl6ZWQgIgorCQkJCSAiZmlybXdhcmVcbiIpOworCQkJZGV2X3dhcm4oJm1ncC0+cGRldi0+ZGV2LCAidmlhIGhvdHBsdWdcbiIpOworCQl9CisKKwkJbWdwLT5md19uYW1lID0gImFkb3B0ZWQiOworCQltZ3AtPnR4LmJvdW5kYXJ5ID0gMjA0ODsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBjbGVhciBjb25maXJtYXRpb24gYWRkciAqLworCW1ncC0+Y21kLT5kYXRhID0gMDsKKwltYigpOworCisJLyogc2VuZCBhIHJlbG9hZCBjb21tYW5kIHRvIHRoZSBib290c3RyYXAgTUNQLCBhbmQgd2FpdCBmb3IgdGhlCisJICogIHJlc3BvbnNlIGluIHRoZSBjb25maXJtYXRpb24gYWRkcmVzcy4gIFRoZSBmaXJtd2FyZSBzaG91bGQKKwkgKiB3cml0ZSBhIC0xIHRoZXJlIHRvIGluZGljYXRlIGl0IGlzIGFsaXZlIGFuZCB3ZWxsCisJICovCisJZG1hX2xvdyA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+Y21kX2J1cyk7CisJZG1hX2hpZ2ggPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5jbWRfYnVzKTsKKworCWJ1ZlswXSA9IGh0b25sKGRtYV9oaWdoKTsJLyogY29uZmlybSBhZGRyIE1TVyAqLworCWJ1ZlsxXSA9IGh0b25sKGRtYV9sb3cpOwkvKiBjb25maXJtIGFkZHIgTFNXICovCisJYnVmWzJdID0gaHRvbmwoTVlSSTEwR0VfTk9fQ09ORklSTV9EQVRBKTsJLyogY29uZmlybSBkYXRhICovCisKKwkvKiBGSVg6IEFsbCBuZXdlc3QgZmlybXdhcmUgc2hvdWxkIHVuLXByb3RlY3QgdGhlIGJvdHRvbSBvZgorCSAqIHRoZSBzcmFtIGJlZm9yZSBoYW5kb2ZmLiBIb3dldmVyLCB0aGUgdmVyeSBmaXJzdCBpbnRlcmZhY2VzCisJICogZG8gbm90LiBUaGVyZWZvcmUgdGhlIGhhbmRvZmYgY29weSBtdXN0IHNraXAgdGhlIGZpcnN0IDggYnl0ZXMKKwkgKi8KKwlidWZbM10gPSBodG9ubChNWVJJMTBHRV9GV19PRkZTRVQgKyA4KTsJLyogd2hlcmUgdGhlIGNvZGUgc3RhcnRzICovCisJYnVmWzRdID0gaHRvbmwoc2l6ZSAtIDgpOwkvKiBsZW5ndGggb2YgY29kZSAqLworCWJ1Zls1XSA9IGh0b25sKDgpOwkvKiB3aGVyZSB0byBjb3B5IHRvICovCisJYnVmWzZdID0gaHRvbmwoMCk7CS8qIHdoZXJlIHRvIGp1bXAgdG8gKi8KKworCXN1Ym1pdCA9IG1ncC0+c3JhbSArIDB4ZmMwMDAwOworCisJbXlyaTEwZ2VfcGlvX2NvcHkoc3VibWl0LCAmYnVmLCBzaXplb2YoYnVmKSk7CisJbWIoKTsKKwltc2xlZXAoMSk7CisJbWIoKTsKKwlpID0gMDsKKwl3aGlsZSAobWdwLT5jbWQtPmRhdGEgIT0gTVlSSTEwR0VfTk9fQ09ORklSTV9EQVRBICYmIGkgPCAyMCkgeworCQltc2xlZXAoMSk7CisJCWkrKzsKKwl9CisJaWYgKG1ncC0+Y21kLT5kYXRhICE9IE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSkgeworCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwgImhhbmRvZmYgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJZGV2X2luZm8oJm1ncC0+cGRldi0+ZGV2LCAiaGFuZG9mZiBjb25maXJtZWRcbiIpOworCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCBtZ3AtPnR4LmJvdW5kYXJ5ICE9IDQwOTYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfdXBkYXRlX21hY19hZGRyZXNzKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AsIHU4ICogYWRkcikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfY21kIGNtZDsKKwlpbnQgc3RhdHVzOworCisJY21kLmRhdGEwID0gKChhZGRyWzBdIDw8IDI0KSB8IChhZGRyWzFdIDw8IDE2KQorCQkgICAgIHwgKGFkZHJbMl0gPDwgOCkgfCBhZGRyWzNdKTsKKworCWNtZC5kYXRhMSA9ICgoYWRkcls0XSA8PCA4KSB8IChhZGRyWzVdKSk7CisKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19TRVRfTUFDX0FERFJFU1MsICZjbWQsIDApOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfY2hhbmdlX3BhdXNlKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AsIGludCBwYXVzZSkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfY21kIGNtZDsKKwlpbnQgc3RhdHVzLCBjdGw7CisKKwljdGwgPSBwYXVzZSA/IE1YR0VGV19FTkFCTEVfRkxPV19DT05UUk9MIDogTVhHRUZXX0RJU0FCTEVfRkxPV19DT05UUk9MOworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgY3RsLCAmY21kLCAwKTsKKworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgdG8gc2V0IGZsb3cgY29udHJvbCBtb2RlXG4iLAorCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwltZ3AtPnBhdXNlID0gcGF1c2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitteXJpMTBnZV9jaGFuZ2VfcHJvbWlzYyhzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBpbnQgcHJvbWlzYywgaW50IGF0b21pYykKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfY21kIGNtZDsKKwlpbnQgc3RhdHVzLCBjdGw7CisKKwljdGwgPSBwcm9taXNjID8gTVhHRUZXX0VOQUJMRV9QUk9NSVNDIDogTVhHRUZXX0RJU0FCTEVfUFJPTUlTQzsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIGN0bCwgJmNtZCwgYXRvbWljKTsKKwlpZiAoc3RhdHVzKQorCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogRmFpbGVkIHRvIHNldCBwcm9taXNjIG1vZGVcbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfcmVzZXQoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfY21kIGNtZDsKKwlpbnQgc3RhdHVzOworCXNpemVfdCBieXRlczsKKwl1MzIgbGVuOworCisJLyogdHJ5IHRvIHNlbmQgYSByZXNldCBjb21tYW5kIHRvIHRoZSBjYXJkIHRvIHNlZSBpZiBpdAorCSAqIGlzIGFsaXZlICovCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfUkVTRVQsICZjbWQsIDApOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwgImZhaWxlZCByZXNldFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogTm93IGV4Y2hhbmdlIGluZm9ybWF0aW9uIGFib3V0IGludGVycnVwdHMgICovCisKKwlieXRlcyA9IG15cmkxMGdlX21heF9pbnRyX3Nsb3RzICogc2l6ZW9mKCptZ3AtPnJ4X2RvbmUuZW50cnkpOworCW1lbXNldChtZ3AtPnJ4X2RvbmUuZW50cnksIDAsIGJ5dGVzKTsKKwljbWQuZGF0YTAgPSAodTMyKSBieXRlczsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX0lOVFJRX1NJWkUsICZjbWQsIDApOworCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+cnhfZG9uZS5idXMpOworCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihtZ3AtPnJ4X2RvbmUuYnVzKTsKKwlzdGF0dXMgfD0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9JTlRSUV9ETUEsICZjbWQsIDApOworCisJc3RhdHVzIHw9CisJICAgIG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfSVJRX0FDS19PRkZTRVQsICZjbWQsIDApOworCW1ncC0+aXJxX2NsYWltID0gKF9faW9tZW0gdTMyICopIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCWlmICghbWdwLT5tc2lfZW5hYmxlZCkgeworCQlzdGF0dXMgfD0gbXlyaTEwZ2Vfc2VuZF9jbWQKKwkJICAgIChtZ3AsIE1YR0VGV19DTURfR0VUX0lSUV9ERUFTU0VSVF9PRkZTRVQsICZjbWQsIDApOworCQltZ3AtPmlycV9kZWFzc2VydCA9IChfX2lvbWVtIHUzMiAqKSAobWdwLT5zcmFtICsgY21kLmRhdGEwKTsKKworCX0KKwlzdGF0dXMgfD0gbXlyaTEwZ2Vfc2VuZF9jbWQKKwkgICAgKG1ncCwgTVhHRUZXX0NNRF9HRVRfSU5UUl9DT0FMX0RFTEFZX09GRlNFVCwgJmNtZCwgMCk7CisJbWdwLT5pbnRyX2NvYWxfZGVsYXlfcHRyID0gKF9faW9tZW0gdTMyICopIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwgImZhaWxlZCBzZXQgaW50ZXJydXB0IHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlfX3Jhd193cml0ZWwoaHRvbmwobWdwLT5pbnRyX2NvYWxfZGVsYXkpLCBtZ3AtPmludHJfY29hbF9kZWxheV9wdHIpOworCisJLyogUnVuIGEgc21hbGwgRE1BIHRlc3QuCisJICogVGhlIG1hZ2ljIG11bHRpcGxpZXJzIHRvIHRoZSBsZW5ndGggdGVsbCB0aGUgZmlybXdhcmUKKwkgKiB0byBkbyBETUEgcmVhZCwgd3JpdGUsIG9yIHJlYWQrd3JpdGUgdGVzdHMuICBUaGUKKwkgKiByZXN1bHRzIGFyZSByZXR1cm5lZCBpbiBjbWQuZGF0YTAuICBUaGUgdXBwZXIgMTYKKwkgKiBiaXRzIG9yIHRoZSByZXR1cm4gaXMgdGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgY29tcGxldGVkLgorCSAqIFRoZSBsb3dlciAxNiBiaXRzIGlzIHRoZSB0aW1lIGluIDAuNXVzIHRpY2tzIHRoYXQgdGhlCisJICogdHJhbnNmZXJzIHRvb2sgdG8gY29tcGxldGUuCisJICovCisKKwlsZW4gPSBtZ3AtPnR4LmJvdW5kYXJ5OworCisJY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIobWdwLT5yeF9kb25lLmJ1cyk7CisJY21kLmRhdGExID0gTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKG1ncC0+cnhfZG9uZS5idXMpOworCWNtZC5kYXRhMiA9IGxlbiAqIDB4MTAwMDA7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfRE1BX1RFU1QsICZjbWQsIDApOworCWlmIChzdGF0dXMgPT0gMCkKKwkJbWdwLT5yZWFkX2RtYSA9ICgoY21kLmRhdGEwID4+IDE2KSAqIGxlbiAqIDIpIC8KKwkJICAgIChjbWQuZGF0YTAgJiAweGZmZmYpOworCWVsc2UKKwkJZGV2X3dhcm4oJm1ncC0+cGRldi0+ZGV2LCAiRE1BIHJlYWQgYmVuY2htYXJrIGZhaWxlZDogJWRcbiIsCisJCQkgc3RhdHVzKTsKKwljbWQuZGF0YTAgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihtZ3AtPnJ4X2RvbmUuYnVzKTsKKwljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIobWdwLT5yeF9kb25lLmJ1cyk7CisJY21kLmRhdGEyID0gbGVuICogMHgxOworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0RNQV9URVNULCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzID09IDApCisJCW1ncC0+d3JpdGVfZG1hID0gKChjbWQuZGF0YTAgPj4gMTYpICogbGVuICogMikgLworCQkgICAgKGNtZC5kYXRhMCAmIDB4ZmZmZik7CisJZWxzZQorCQlkZXZfd2FybigmbWdwLT5wZGV2LT5kZXYsICJETUEgd3JpdGUgYmVuY2htYXJrIGZhaWxlZDogJWRcbiIsCisJCQkgc3RhdHVzKTsKKworCWNtZC5kYXRhMCA9IE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKG1ncC0+cnhfZG9uZS5idXMpOworCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihtZ3AtPnJ4X2RvbmUuYnVzKTsKKwljbWQuZGF0YTIgPSBsZW4gKiAweDEwMDAxOworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0RNQV9URVNULCAmY21kLCAwKTsKKwlpZiAoc3RhdHVzID09IDApCisJCW1ncC0+cmVhZF93cml0ZV9kbWEgPSAoKGNtZC5kYXRhMCA+PiAxNikgKiBsZW4gKiAyICogMikgLworCQkgICAgKGNtZC5kYXRhMCAmIDB4ZmZmZik7CisJZWxzZQorCQlkZXZfd2FybigmbWdwLT5wZGV2LT5kZXYsCisJCQkgIkRNQSByZWFkL3dyaXRlIGJlbmNobWFyayBmYWlsZWQ6ICVkXG4iLCBzdGF0dXMpOworCisJbWVtc2V0KG1ncC0+cnhfZG9uZS5lbnRyeSwgMCwgYnl0ZXMpOworCisJLyogcmVzZXQgbWNwL2RyaXZlciBzaGFyZWQgc3RhdGUgYmFjayB0byAwICovCisJbWdwLT50eC5yZXEgPSAwOworCW1ncC0+dHguZG9uZSA9IDA7CisJbWdwLT50eC5wa3Rfc3RhcnQgPSAwOworCW1ncC0+dHgucGt0X2RvbmUgPSAwOworCW1ncC0+cnhfYmlnLmNudCA9IDA7CisJbWdwLT5yeF9zbWFsbC5jbnQgPSAwOworCW1ncC0+cnhfZG9uZS5pZHggPSAwOworCW1ncC0+cnhfZG9uZS5jbnQgPSAwOworCXN0YXR1cyA9IG15cmkxMGdlX3VwZGF0ZV9tYWNfYWRkcmVzcyhtZ3AsIG1ncC0+ZGV2LT5kZXZfYWRkcik7CisJbXlyaTEwZ2VfY2hhbmdlX3Byb21pc2MobWdwLCAwLCAwKTsKKwlteXJpMTBnZV9jaGFuZ2VfcGF1c2UobWdwLCBtZ3AtPnBhdXNlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK215cmkxMGdlX3N1Ym1pdF84cngoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3JlY3YgX19pb21lbSAqIGRzdCwKKwkJICAgIHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2ICpzcmMpCit7CisJdTMyIGxvdzsKKworCWxvdyA9IHNyYy0+YWRkcl9sb3c7CisJc3JjLT5hZGRyX2xvdyA9IERNQV8zMkJJVF9NQVNLOworCW15cmkxMGdlX3Bpb19jb3B5KGRzdCwgc3JjLCA4ICogc2l6ZW9mKCpzcmMpKTsKKwltYigpOworCXNyYy0+YWRkcl9sb3cgPSBsb3c7CisJX19yYXdfd3JpdGVsKGxvdywgJmRzdC0+YWRkcl9sb3cpOworCW1iKCk7Cit9CisKKy8qCisgKiBTZXQgb2Ygcm91dGluZXMgdG8gZ2V0IGEgbmV3IHJlY2VpdmUgYnVmZmVyLiAgQW55IGJ1ZmZlciB3aGljaAorICogY3Jvc3NlcyBhIDRLQiBib3VuZGFyeSBtdXN0IHN0YXJ0IG9uIGEgNEtCIGJvdW5kYXJ5IGR1ZSB0byBQQ0llCisgKiB3ZG1hIHJlc3RyaWN0aW9ucy4gV2UgYWxzbyB0cnkgdG8gYWxpZ24gYW55IHNtYWxsZXIgYWxsb2NhdGlvbiB0bworICogYXQgbGVhc3QgYSAxNiBieXRlIGJvdW5kYXJ5IGZvciBlZmZpY2llbmN5LiAgV2UgYXNzdW1lIHRoZSBsaW51eAorICogbWVtb3J5IGFsbG9jYXRvciB3b3JrcyBieSBwb3dlcnMgb2YgMiwgYW5kIHdpbGwgbm90IHJldHVybiBtZW1vcnkKKyAqIHNtYWxsZXIgdGhhbiAyS0Igd2hpY2ggY3Jvc3NlcyBhIDRLQiBib3VuZGFyeS4gIElmIGl0IGRvZXMsIHdlIGZhbGwKKyAqIGJhY2sgdG8gYWxsb2NhdGluZyAyeCBhcyBtdWNoIHNwYWNlIGFzIHJlcXVpcmVkLgorICoKKyAqIFdlIGludGVuZCB0byByZXBsYWNlIGxhcmdlICg+NEtCKSBza2IgYWxsb2NhdGlvbnMgYnkgdXNpbmcKKyAqIHBhZ2VzIGRpcmVjdGx5IGFuZCBidWlsZGluZyBhIGZyYWdsaXN0IGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpteXJpMTBnZV9hbGxvY19iaWcoaW50IGJ5dGVzKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBkYXRhLCByb3VuZHVwOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihieXRlcyArIDQwOTYgKyBNWEdFRldfUEFEKTsKKwlpZiAoc2tiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogQ29ycmVjdCBza2ItPnRydWVzaXplIHNvIHRoYXQgc29ja2V0IGJ1ZmZlcgorCSAqIGFjY291bnRpbmcgaXMgbm90IGNvbmZ1c2VkIHRoZSByb3VuZGluZyB3ZSBtdXN0CisJICogZG8gdG8gc2F0aXNmeSBhbGlnbm1lbnQgY29uc3RyYWludHMuCisJICovCisJc2tiLT50cnVlc2l6ZSAtPSA0MDk2OworCisJZGF0YSA9ICh1bnNpZ25lZCBsb25nKShza2ItPmRhdGEpOworCXJvdW5kdXAgPSAoLWRhdGEpICYgKDQwOTUpOworCXNrYl9yZXNlcnZlKHNrYiwgcm91bmR1cCk7CisJcmV0dXJuIHNrYjsKK30KKworLyogQWxsb2NhdGUgMnggYXMgbXVjaCBzcGFjZSBhcyByZXF1aXJlZCBhbmQgdXNlIHdoaWNoZXZlciBwb3J0aW9uCisgKiBkb2VzIG5vdCBjcm9zcyBhIDRLQiBib3VuZGFyeSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbXlyaTEwZ2VfYWxsb2Nfc21hbGxfc2FmZSh1bnNpZ25lZCBpbnQgYnl0ZXMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBsb25nIGRhdGEsIGJvdW5kYXJ5OworCisJc2tiID0gZGV2X2FsbG9jX3NrYigyICogKGJ5dGVzICsgTVhHRUZXX1BBRCkgLSAxKTsKKwlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIENvcnJlY3Qgc2tiLT50cnVlc2l6ZSBzbyB0aGF0IHNvY2tldCBidWZmZXIKKwkgKiBhY2NvdW50aW5nIGlzIG5vdCBjb25mdXNlZCB0aGUgcm91bmRpbmcgd2UgbXVzdAorCSAqIGRvIHRvIHNhdGlzZnkgYWxpZ25tZW50IGNvbnN0cmFpbnRzLgorCSAqLworCXNrYi0+dHJ1ZXNpemUgLT0gYnl0ZXMgKyBNWEdFRldfUEFEOworCisJZGF0YSA9ICh1bnNpZ25lZCBsb25nKShza2ItPmRhdGEpOworCWJvdW5kYXJ5ID0gKGRhdGEgKyA0MDk1VUwpICYgfjQwOTVVTDsKKwlpZiAoKGJvdW5kYXJ5IC0gZGF0YSkgPj0gKGJ5dGVzICsgTVhHRUZXX1BBRCkpCisJCXJldHVybiBza2I7CisKKwlza2JfcmVzZXJ2ZShza2IsIGJvdW5kYXJ5IC0gZGF0YSk7CisJcmV0dXJuIHNrYjsKK30KKworLyogQWxsb2NhdGUganVzdCBlbm91Z2ggc3BhY2UsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgYWxsb2NhdGVkCisgKiBzcGFjZSBkb2VzIG5vdCBjcm9zcyBhIDRLQiBib3VuZGFyeSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbXlyaTEwZ2VfYWxsb2Nfc21hbGwoaW50IGJ5dGVzKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyByb3VuZHVwLCBkYXRhLCBlbmQ7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGJ5dGVzICsgMTYgKyBNWEdFRldfUEFEKTsKKwlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFJvdW5kIGFsbG9jYXRlZCBidWZmZXIgdG8gMTYgYnl0ZSBib3VuZGFyeSAqLworCWRhdGEgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhKTsKKwlyb3VuZHVwID0gKC1kYXRhKSAmIDE1VUw7CisJc2tiX3Jlc2VydmUoc2tiLCByb3VuZHVwKTsKKwkvKiBWZXJpZnkgdGhhdCB0aGUgZGF0YSBidWZmZXIgZG9lcyBub3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5ICovCisJZGF0YSA9ICh1bnNpZ25lZCBsb25nKShza2ItPmRhdGEpOworCWVuZCA9IGRhdGEgKyBieXRlcyArIE1YR0VGV19QQUQgLSAxOworCWlmICh1bmxpa2VseSgoKGVuZCA+PiAxMikgIT0gKGRhdGEgPj4gMTIpKSAmJiAoZGF0YSAmIDQwOTVVTCkpKSB7CisJCXByaW50ayhLRVJOX05PVElDRQorCQkgICAgICAgIm15cmkxMGdlX2FsbG9jX3NtYWxsOiBzbWFsbCBza2IgY3Jvc3NlZCA0S0IgYm91bmRhcnlcbiIpOworCQlteXJpMTBnZV9za2JfY3Jvc3NfNGsgPSAxOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlza2IgPSBteXJpMTBnZV9hbGxvY19zbWFsbF9zYWZlKGJ5dGVzKTsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK215cmkxMGdlX2dldGJ1ZihzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmICpyeCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBieXRlcywKKwkJaW50IGlkeCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgYnVzOworCWludCBsZW4sIHJldHZhbCA9IDA7CisKKwlieXRlcyArPSBWTEFOX0hMRU47CS8qIGFjY291bnQgZm9yIDgwMi4xcSB2bGFuIHRhZyAqLworCisJaWYgKChieXRlcyArIE1YR0VGV19QQUQpID4gKDQwOTYgLSAxNikgLyogbGludXggb3ZlcmhlYWQgKi8gKQorCQlza2IgPSBteXJpMTBnZV9hbGxvY19iaWcoYnl0ZXMpOworCWVsc2UgaWYgKG15cmkxMGdlX3NrYl9jcm9zc180aykKKwkJc2tiID0gbXlyaTEwZ2VfYWxsb2Nfc21hbGxfc2FmZShieXRlcyk7CisJZWxzZQorCQlza2IgPSBteXJpMTBnZV9hbGxvY19zbWFsbChieXRlcyk7CisKKwlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CisJCXJ4LT5hbGxvY19mYWlsKys7CisJCXJldHZhbCA9IC1FTk9CVUZTOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogc2V0IGxlbiBzbyB0aGF0IGl0IG9ubHkgY292ZXJzIHRoZSBhcmVhIHdlCisJICogbmVlZCBtYXBwZWQgZm9yIERNQSAqLworCWxlbiA9IGJ5dGVzICsgTVhHRUZXX1BBRDsKKworCWJ1cyA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXJ4LT5pbmZvW2lkeF0uc2tiID0gc2tiOworCXBjaV91bm1hcF9hZGRyX3NldCgmcngtPmluZm9baWR4XSwgYnVzLCBidXMpOworCXBjaV91bm1hcF9sZW5fc2V0KCZyeC0+aW5mb1tpZHhdLCBsZW4sIGxlbik7CisJcngtPnNoYWRvd1tpZHhdLmFkZHJfbG93ID0gaHRvbmwoTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIoYnVzKSk7CisJcngtPnNoYWRvd1tpZHhdLmFkZHJfaGlnaCA9IGh0b25sKE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihidXMpKTsKKworZG9uZToKKwkvKiBjb3B5IDggZGVzY3JpcHRvcnMgKDY0LWJ5dGVzKSB0byB0aGUgbWNwIGF0IGEgdGltZSAqLworCWlmICgoaWR4ICYgNykgPT0gNykgeworCQlpZiAocngtPndjX2ZpZm8gPT0gTlVMTCkKKwkJCW15cmkxMGdlX3N1Ym1pdF84cngoJnJ4LT5sYW5haVtpZHggLSA3XSwKKwkJCQkJICAgICZyeC0+c2hhZG93W2lkeCAtIDddKTsKKwkJZWxzZSB7CisJCQltYigpOworCQkJbXlyaTEwZ2VfcGlvX2NvcHkocngtPndjX2ZpZm8sCisJCQkJCSAgJnJ4LT5zaGFkb3dbaWR4IC0gN10sIDY0KTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXlyaTEwZ2Vfdmxhbl9pcF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBod19jc3VtKQoreworCXN0cnVjdCB2bGFuX2hkciAqdmggPSAoc3RydWN0IHZsYW5faGRyICopKHNrYi0+ZGF0YSk7CisKKwlpZiAoKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfODAyMVEpKSAmJgorCSAgICAodmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApIHx8CisJICAgICB2aC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHsKKwkJc2tiLT5jc3VtID0gaHdfY3N1bTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9IVzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworbXlyaTEwZ2VfcnhfZG9uZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmICpyeCwKKwkJIGludCBieXRlcywgaW50IGxlbiwgaW50IGNzdW0pCit7CisJZG1hX2FkZHJfdCBidXM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaWR4LCB1bm1hcF9sZW47CisKKwlpZHggPSByeC0+Y250ICYgcngtPm1hc2s7CisJcngtPmNudCsrOworCisJLyogc2F2ZSBhIHBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIHNrYiAqLworCXNrYiA9IHJ4LT5pbmZvW2lkeF0uc2tiOworCWJ1cyA9IHBjaV91bm1hcF9hZGRyKCZyeC0+aW5mb1tpZHhdLCBidXMpOworCXVubWFwX2xlbiA9IHBjaV91bm1hcF9sZW4oJnJ4LT5pbmZvW2lkeF0sIGxlbik7CisKKwkvKiB0cnkgdG8gcmVwbGFjZSB0aGUgcmVjZWl2ZWQgc2tiICovCisJaWYgKG15cmkxMGdlX2dldGJ1ZihyeCwgbWdwLT5wZGV2LCBieXRlcywgaWR4KSkgeworCQkvKiBkcm9wIHRoZSBmcmFtZSAtLSB0aGUgb2xkIHNrYnVmIGlzIHJlLWN5Y2xlZCAqLworCQltZ3AtPnN0YXRzLnJ4X2Ryb3BwZWQgKz0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogdW5tYXAgdGhlIHJlY3ZkIHNrYiAqLworCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LCBidXMsIHVubWFwX2xlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCS8qIG1jcCBpbXBsaWNpdGx5IHNraXBzIDFzdCBieXRlcyBzbyB0aGF0IHBhY2tldCBpcyBwcm9wZXJseQorCSAqIGFsaWduZWQgKi8KKwlza2JfcmVzZXJ2ZShza2IsIE1YR0VGV19QQUQpOworCisJLyogc2V0IHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lICovCisJc2tiX3B1dChza2IsIGxlbik7CisKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBtZ3AtPmRldik7CisJc2tiLT5kZXYgPSBtZ3AtPmRldjsKKwlpZiAobWdwLT5jc3VtX2ZsYWcpIHsKKwkJaWYgKChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQKSkgfHwKKwkJICAgIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQVjYpKSkgeworCQkJc2tiLT5jc3VtID0gbnRvaHMoKHUxNikgY3N1bSk7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0hXOworCQl9IGVsc2UKKwkJCW15cmkxMGdlX3ZsYW5faXBfY3N1bShza2IsIG50b2hzKCh1MTYpIGNzdW0pKTsKKwl9CisKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCW1ncC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG15cmkxMGdlX3R4X2RvbmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgaW50IG1jcF9pbmRleCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1ncC0+cGRldjsKKwlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmICp0eCA9ICZtZ3AtPnR4OworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGlkeCwgbGVuOworCWludCBsaW1pdCA9IDA7CisKKwl3aGlsZSAodHgtPnBrdF9kb25lICE9IG1jcF9pbmRleCkgeworCQlpZHggPSB0eC0+ZG9uZSAmIHR4LT5tYXNrOworCQlza2IgPSB0eC0+aW5mb1tpZHhdLnNrYjsKKworCQkvKiBNYXJrIGFzIGZyZWUgKi8KKwkJdHgtPmluZm9baWR4XS5za2IgPSBOVUxMOworCQlpZiAodHgtPmluZm9baWR4XS5sYXN0KSB7CisJCQl0eC0+cGt0X2RvbmUrKzsKKwkJCXR4LT5pbmZvW2lkeF0ubGFzdCA9IDA7CisJCX0KKwkJdHgtPmRvbmUrKzsKKwkJbGVuID0gcGNpX3VubWFwX2xlbigmdHgtPmluZm9baWR4XSwgbGVuKTsKKwkJcGNpX3VubWFwX2xlbl9zZXQoJnR4LT5pbmZvW2lkeF0sIGxlbiwgMCk7CisJCWlmIChza2IpIHsKKwkJCW1ncC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQltZ3AtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQlpZiAobGVuKQorCQkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwKKwkJCQkJCSBwY2lfdW5tYXBfYWRkcigmdHgtPmluZm9baWR4XSwKKwkJCQkJCQkJYnVzKSwgbGVuLAorCQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl9IGVsc2UgeworCQkJaWYgKGxlbikKKwkJCQlwY2lfdW5tYXBfcGFnZShwZGV2LAorCQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoJnR4LT5pbmZvW2lkeF0sCisJCQkJCQkJICAgICAgYnVzKSwgbGVuLAorCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCX0KKworCQkvKiBsaW1pdCBwb3RlbnRpYWwgZm9yIGxpdmVsb2NrIGJ5IG9ubHkgaGFuZGxpbmcKKwkJICogMiBmdWxsIHR4IHJpbmdzIHBlciBjYWxsICovCisJCWlmICh1bmxpa2VseSgrK2xpbWl0ID4gMiAqIHR4LT5tYXNrKSkKKwkJCWJyZWFrOworCX0KKwkvKiBzdGFydCB0aGUgcXVldWUgaWYgd2UndmUgc3RvcHBlZCBpdCAqLworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG1ncC0+ZGV2KQorCSAgICAmJiB0eC0+cmVxIC0gdHgtPmRvbmUgPCAodHgtPm1hc2sgPj4gMSkpIHsKKwkJbWdwLT53YWtlX3F1ZXVlKys7CisJCW5ldGlmX3dha2VfcXVldWUobWdwLT5kZXYpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG15cmkxMGdlX2NsZWFuX3J4X2RvbmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgaW50ICpsaW1pdCkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcnhfZG9uZSAqcnhfZG9uZSA9ICZtZ3AtPnJ4X2RvbmU7CisJdW5zaWduZWQgbG9uZyByeF9ieXRlcyA9IDA7CisJdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzID0gMDsKKwl1bnNpZ25lZCBsb25nIHJ4X29rOworCisJaW50IGlkeCA9IHJ4X2RvbmUtPmlkeDsKKwlpbnQgY250ID0gcnhfZG9uZS0+Y250OworCXUxNiBsZW5ndGg7CisJdTE2IGNoZWNrc3VtOworCisJd2hpbGUgKHJ4X2RvbmUtPmVudHJ5W2lkeF0ubGVuZ3RoICE9IDAgJiYgKmxpbWl0ICE9IDApIHsKKwkJbGVuZ3RoID0gbnRvaHMocnhfZG9uZS0+ZW50cnlbaWR4XS5sZW5ndGgpOworCQlyeF9kb25lLT5lbnRyeVtpZHhdLmxlbmd0aCA9IDA7CisJCWNoZWNrc3VtID0gbnRvaHMocnhfZG9uZS0+ZW50cnlbaWR4XS5jaGVja3N1bSk7CisJCWlmIChsZW5ndGggPD0gbWdwLT5zbWFsbF9ieXRlcykKKwkJCXJ4X29rID0gbXlyaTEwZ2VfcnhfZG9uZShtZ3AsICZtZ3AtPnJ4X3NtYWxsLAorCQkJCQkJIG1ncC0+c21hbGxfYnl0ZXMsCisJCQkJCQkgbGVuZ3RoLCBjaGVja3N1bSk7CisJCWVsc2UKKwkJCXJ4X29rID0gbXlyaTEwZ2VfcnhfZG9uZShtZ3AsICZtZ3AtPnJ4X2JpZywKKwkJCQkJCSBtZ3AtPmRldi0+bXR1ICsgRVRIX0hMRU4sCisJCQkJCQkgbGVuZ3RoLCBjaGVja3N1bSk7CisJCXJ4X3BhY2tldHMgKz0gcnhfb2s7CisJCXJ4X2J5dGVzICs9IHJ4X29rICogKHVuc2lnbmVkIGxvbmcpbGVuZ3RoOworCQljbnQrKzsKKwkJaWR4ID0gY250ICYgKG15cmkxMGdlX21heF9pbnRyX3Nsb3RzIC0gMSk7CisKKwkJLyogbGltaXQgcG90ZW50aWFsIGZvciBsaXZlbG9jayBieSBvbmx5IGhhbmRsaW5nIGEKKwkJICogbGltaXRlZCBudW1iZXIgb2YgZnJhbWVzLiAqLworCQkoKmxpbWl0KS0tOworCX0KKwlyeF9kb25lLT5pZHggPSBpZHg7CisJcnhfZG9uZS0+Y250ID0gY250OworCW1ncC0+c3RhdHMucnhfcGFja2V0cyArPSByeF9wYWNrZXRzOworCW1ncC0+c3RhdHMucnhfYnl0ZXMgKz0gcnhfYnl0ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteXJpMTBnZV9jaGVja19zdGF0YmxvY2soc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgbWNwX2lycV9kYXRhICpzdGF0cyA9IG1ncC0+Zndfc3RhdHM7CisKKwlpZiAodW5saWtlbHkoc3RhdHMtPnN0YXRzX3VwZGF0ZWQpKSB7CisJCWlmIChtZ3AtPmxpbmtfc3RhdGUgIT0gc3RhdHMtPmxpbmtfdXApIHsKKwkJCW1ncC0+bGlua19zdGF0ZSA9IHN0YXRzLT5saW5rX3VwOworCQkJaWYgKG1ncC0+bGlua19zdGF0ZSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIm15cmkxMGdlOiAlczogbGluayB1cFxuIiwKKwkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJCW5ldGlmX2NhcnJpZXJfb24obWdwLT5kZXYpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJteXJpMTBnZTogJXM6IGxpbmsgZG93blxuIiwKKwkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKG1ncC0+ZGV2KTsKKwkJCX0KKwkJfQorCQlpZiAobWdwLT5yZG1hX3RhZ3NfYXZhaWxhYmxlICE9CisJCSAgICBudG9obChtZ3AtPmZ3X3N0YXRzLT5yZG1hX3RhZ3NfYXZhaWxhYmxlKSkgeworCQkJbWdwLT5yZG1hX3RhZ3NfYXZhaWxhYmxlID0KKwkJCSAgICBudG9obChtZ3AtPmZ3X3N0YXRzLT5yZG1hX3RhZ3NfYXZhaWxhYmxlKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm15cmkxMGdlOiAlczogUkRNQSB0aW1lZCBvdXQhICIKKwkJCSAgICAgICAiJWQgdGFncyBsZWZ0XG4iLCBtZ3AtPmRldi0+bmFtZSwKKwkJCSAgICAgICBtZ3AtPnJkbWFfdGFnc19hdmFpbGFibGUpOworCQl9CisJCW1ncC0+ZG93bl9jbnQgKz0gc3RhdHMtPmxpbmtfZG93bjsKKwkJaWYgKHN0YXRzLT5saW5rX2Rvd24pCisJCQl3YWtlX3VwKCZtZ3AtPmRvd25fd3EpOworCX0KK30KKworc3RhdGljIGludCBteXJpMTBnZV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCAqYnVkZ2V0KQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBteXJpMTBnZV9yeF9kb25lICpyeF9kb25lID0gJm1ncC0+cnhfZG9uZTsKKwlpbnQgbGltaXQsIG9yaWdfbGltaXQsIHdvcmtfZG9uZTsKKworCS8qIHByb2Nlc3MgYXMgbWFueSByeCBldmVudHMgYXMgTkFQSSB3aWxsIGFsbG93ICovCisJbGltaXQgPSBtaW4oKmJ1ZGdldCwgbmV0ZGV2LT5xdW90YSk7CisJb3JpZ19saW1pdCA9IGxpbWl0OworCW15cmkxMGdlX2NsZWFuX3J4X2RvbmUobWdwLCAmbGltaXQpOworCXdvcmtfZG9uZSA9IG9yaWdfbGltaXQgLSBsaW1pdDsKKwkqYnVkZ2V0IC09IHdvcmtfZG9uZTsKKwluZXRkZXYtPnF1b3RhIC09IHdvcmtfZG9uZTsKKworCWlmIChyeF9kb25lLT5lbnRyeVtyeF9kb25lLT5pZHhdLmxlbmd0aCA9PSAwIHx8ICFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJbmV0aWZfcnhfY29tcGxldGUobmV0ZGV2KTsKKwkJX19yYXdfd3JpdGVsKGh0b25sKDMpLCBtZ3AtPmlycV9jbGFpbSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90IG15cmkxMGdlX2ludHIoaW50IGlycSwgdm9pZCAqYXJnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gYXJnOworCXN0cnVjdCBtY3BfaXJxX2RhdGEgKnN0YXRzID0gbWdwLT5md19zdGF0czsKKwlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmICp0eCA9ICZtZ3AtPnR4OworCXUzMiBzZW5kX2RvbmVfY291bnQ7CisJaW50IGk7CisKKwkvKiBtYWtlIHN1cmUgaXQgaXMgb3VyIElSUSwgYW5kIHRoYXQgdGhlIERNQSBoYXMgZmluaXNoZWQgKi8KKwlpZiAodW5saWtlbHkoIXN0YXRzLT52YWxpZCkpCisJCXJldHVybiAoSVJRX05PTkUpOworCisJLyogbG93IGJpdCBpbmRpY2F0ZXMgcmVjZWl2ZXMgYXJlIHByZXNlbnQsIHNvIHNjaGVkdWxlCisJICogbmFwaSBwb2xsIGhhbmRsZXIgKi8KKwlpZiAoc3RhdHMtPnZhbGlkICYgMSkKKwkJbmV0aWZfcnhfc2NoZWR1bGUobWdwLT5kZXYpOworCisJaWYgKCFtZ3AtPm1zaV9lbmFibGVkKSB7CisJCV9fcmF3X3dyaXRlbCgwLCBtZ3AtPmlycV9kZWFzc2VydCk7CisJCWlmICghbXlyaTEwZ2VfZGVhc3NlcnRfd2FpdCkKKwkJCXN0YXRzLT52YWxpZCA9IDA7CisJCW1iKCk7CisJfSBlbHNlCisJCXN0YXRzLT52YWxpZCA9IDA7CisKKwkvKiBXYWl0IGZvciBJUlEgbGluZSB0byBnbyBsb3csIGlmIHVzaW5nIElOVHggKi8KKwlpID0gMDsKKwl3aGlsZSAoMSkgeworCQlpKys7CisJCS8qIGNoZWNrIGZvciB0cmFuc21pdCBjb21wbGV0ZXMgYW5kIHJlY2VpdmVzICovCisJCXNlbmRfZG9uZV9jb3VudCA9IG50b2hsKHN0YXRzLT5zZW5kX2RvbmVfY291bnQpOworCQlpZiAoc2VuZF9kb25lX2NvdW50ICE9IHR4LT5wa3RfZG9uZSkKKwkJCW15cmkxMGdlX3R4X2RvbmUobWdwLCAoaW50KXNlbmRfZG9uZV9jb3VudCk7CisJCWlmICh1bmxpa2VseShpID4gbXlyaTEwZ2VfbWF4X2lycV9sb29wcykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm15cmkxMGdlOiAlczogaXJxIHN0dWNrP1xuIiwKKwkJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCQlzdGF0cy0+dmFsaWQgPSAwOworCQkJc2NoZWR1bGVfd29yaygmbWdwLT53YXRjaGRvZ193b3JrKTsKKwkJfQorCQlpZiAobGlrZWx5KHN0YXRzLT52YWxpZCA9PSAwKSkKKwkJCWJyZWFrOworCQljcHVfcmVsYXgoKTsKKwkJYmFycmllcigpOworCX0KKworCW15cmkxMGdlX2NoZWNrX3N0YXRibG9jayhtZ3ApOworCisJX19yYXdfd3JpdGVsKGh0b25sKDMpLCBtZ3AtPmlycV9jbGFpbSArIDEpOworCXJldHVybiAoSVJRX0hBTkRMRUQpOworfQorCitzdGF0aWMgaW50CitteXJpMTBnZV9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXlyaTEwZ2VfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCAibXlyaTEwZ2UiLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3RybGNweShpbmZvLT52ZXJzaW9uLCBNWVJJMTBHRV9WRVJTSU9OX1NUUiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKKwlzdHJsY3B5KGluZm8tPmZ3X3ZlcnNpb24sIG1ncC0+ZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pKTsKKwlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShtZ3AtPnBkZXYpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKK30KKworc3RhdGljIGludAorbXlyaTEwZ2VfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID0gbWdwLT5pbnRyX2NvYWxfZGVsYXk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK215cmkxMGdlX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW1ncC0+aW50cl9jb2FsX2RlbGF5ID0gY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CisJX19yYXdfd3JpdGVsKGh0b25sKG1ncC0+aW50cl9jb2FsX2RlbGF5KSwgbWdwLT5pbnRyX2NvYWxfZGVsYXlfcHRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK215cmkxMGdlX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXBhdXNlLT5hdXRvbmVnID0gMDsKKwlwYXVzZS0+cnhfcGF1c2UgPSBtZ3AtPnBhdXNlOworCXBhdXNlLT50eF9wYXVzZSA9IG1ncC0+cGF1c2U7Cit9CisKK3N0YXRpYyBpbnQKK215cmkxMGdlX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChwYXVzZS0+dHhfcGF1c2UgIT0gbWdwLT5wYXVzZSkKKwkJcmV0dXJuIG15cmkxMGdlX2NoYW5nZV9wYXVzZShtZ3AsIHBhdXNlLT50eF9wYXVzZSk7CisJaWYgKHBhdXNlLT5yeF9wYXVzZSAhPSBtZ3AtPnBhdXNlKQorCQlyZXR1cm4gbXlyaTEwZ2VfY2hhbmdlX3BhdXNlKG1ncCwgcGF1c2UtPnR4X3BhdXNlKTsKKwlpZiAocGF1c2UtPmF1dG9uZWcgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitteXJpMTBnZV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gbWdwLT5yeF9zbWFsbC5tYXNrICsgMTsKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IG1ncC0+cnhfYmlnLm1hc2sgKyAxOworCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKwlyaW5nLT50eF9tYXhfcGVuZGluZyA9IG1ncC0+cnhfc21hbGwubWFzayArIDE7CisJcmluZy0+cnhfbWluaV9wZW5kaW5nID0gcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZzsKKwlyaW5nLT5yeF9wZW5kaW5nID0gcmluZy0+cnhfbWF4X3BlbmRpbmc7CisJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IHJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nOworCXJpbmctPnR4X3BlbmRpbmcgPSByaW5nLT50eF9tYXhfcGVuZGluZzsKK30KKworc3RhdGljIHUzMiBteXJpMTBnZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmIChtZ3AtPmNzdW1fZmxhZykKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgY3N1bV9lbmFibGVkKQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmIChjc3VtX2VuYWJsZWQpCisJCW1ncC0+Y3N1bV9mbGFnID0gTVhHRUZXX0ZMQUdTX0NLU1VNOworCWVsc2UKKwkJbWdwLT5jc3VtX2ZsYWcgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciBteXJpMTBnZV9nc3RyaW5nc19zdGF0c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CisJInJ4X3BhY2tldHMiLCAidHhfcGFja2V0cyIsICJyeF9ieXRlcyIsICJ0eF9ieXRlcyIsICJyeF9lcnJvcnMiLAorCSJ0eF9lcnJvcnMiLCAicnhfZHJvcHBlZCIsICJ0eF9kcm9wcGVkIiwgIm11bHRpY2FzdCIsICJjb2xsaXNpb25zIiwKKwkicnhfbGVuZ3RoX2Vycm9ycyIsICJyeF9vdmVyX2Vycm9ycyIsICJyeF9jcmNfZXJyb3JzIiwKKwkicnhfZnJhbWVfZXJyb3JzIiwgInJ4X2ZpZm9fZXJyb3JzIiwgInJ4X21pc3NlZF9lcnJvcnMiLAorCSJ0eF9hYm9ydGVkX2Vycm9ycyIsICJ0eF9jYXJyaWVyX2Vycm9ycyIsICJ0eF9maWZvX2Vycm9ycyIsCisJInR4X2hlYXJ0YmVhdF9lcnJvcnMiLCAidHhfd2luZG93X2Vycm9ycyIsCisJLyogZGV2aWNlLXNwZWNpZmljIHN0YXRzICovCisJInJlYWRfZG1hX2J3X01CcyIsICJ3cml0ZV9kbWFfYndfTUJzIiwgInJlYWRfd3JpdGVfZG1hX2J3X01CcyIsCisJInNlcmlhbF9udW1iZXIiLCAidHhfcGt0X3N0YXJ0IiwgInR4X3BrdF9kb25lIiwKKwkidHhfcmVxIiwgInR4X2RvbmUiLCAicnhfc21hbGxfY250IiwgInJ4X2JpZ19jbnQiLAorCSJ3YWtlX3F1ZXVlIiwgInN0b3BfcXVldWUiLCAid2F0Y2hkb2dfcmVzZXRzIiwgInR4X2xpbmVhcml6ZWQiLAorCSJsaW5rX3VwIiwgImRyb3BwZWRfbGlua19vdmVyZmxvdyIsICJkcm9wcGVkX2xpbmtfZXJyb3Jfb3JfZmlsdGVyZWQiLAorCSJkcm9wcGVkX3J1bnQiLCAiZHJvcHBlZF9vdmVycnVuIiwgImRyb3BwZWRfbm9fc21hbGxfYnVmZmVyIiwKKwkiZHJvcHBlZF9ub19iaWdfYnVmZmVyIgorfTsKKworI2RlZmluZSBNWVJJMTBHRV9ORVRfU1RBVFNfTEVOICAgICAgMjEKKyNkZWZpbmUgTVlSSTEwR0VfU1RBVFNfTEVOICBzaXplb2YobXlyaTEwZ2VfZ3N0cmluZ3Nfc3RhdHMpIC8gRVRIX0dTVFJJTkdfTEVOCisKK3N0YXRpYyB2b2lkCitteXJpMTBnZV9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCit7CisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJbWVtY3B5KGRhdGEsICpteXJpMTBnZV9nc3RyaW5nc19zdGF0cywKKwkJICAgICAgIHNpemVvZihteXJpMTBnZV9nc3RyaW5nc19zdGF0cykpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIE1ZUkkxMEdFX1NUQVRTX0xFTjsKK30KKworc3RhdGljIHZvaWQKK215cmkxMGdlX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqIGRhdGEpCit7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVlSSTEwR0VfTkVUX1NUQVRTX0xFTjsgaSsrKQorCQlkYXRhW2ldID0gKCh1bnNpZ25lZCBsb25nICopJm1ncC0+c3RhdHMpW2ldOworCisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJlYWRfZG1hOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53cml0ZV9kbWE7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJlYWRfd3JpdGVfZG1hOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5zZXJpYWxfbnVtYmVyOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT50eC5wa3Rfc3RhcnQ7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnR4LnBrdF9kb25lOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT50eC5yZXE7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnR4LmRvbmU7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJ4X3NtYWxsLmNudDsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+cnhfYmlnLmNudDsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+d2FrZV9xdWV1ZTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+c3RvcF9xdWV1ZTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+d2F0Y2hkb2dfcmVzZXRzOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT50eF9saW5lYXJpemVkOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+bGlua191cCk7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX2xpbmtfb3ZlcmZsb3cpOworCWRhdGFbaSsrXSA9CisJICAgICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9saW5rX2Vycm9yX29yX2ZpbHRlcmVkKTsKKwlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfcnVudCk7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX292ZXJydW4pOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9ub19zbWFsbF9idWZmZXIpOworCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9ub19iaWdfYnVmZmVyKTsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBteXJpMTBnZV9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzID0gbXlyaTEwZ2VfZ2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyA9IG15cmkxMGdlX2dldF9kcnZpbmZvLAorCS5nZXRfY29hbGVzY2UgPSBteXJpMTBnZV9nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZSA9IG15cmkxMGdlX3NldF9jb2FsZXNjZSwKKwkuZ2V0X3BhdXNlcGFyYW0gPSBteXJpMTBnZV9nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0gPSBteXJpMTBnZV9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3JpbmdwYXJhbSA9IG15cmkxMGdlX2dldF9yaW5ncGFyYW0sCisJLmdldF9yeF9jc3VtID0gbXlyaTEwZ2VfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtID0gbXlyaTEwZ2Vfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCisjaWZkZWYgTkVUSUZfRl9UU08KKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKKyNlbmRpZgorCS5nZXRfc3RyaW5ncyA9IG15cmkxMGdlX2dldF9zdHJpbmdzLAorCS5nZXRfc3RhdHNfY291bnQgPSBteXJpMTBnZV9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzID0gbXlyaTEwZ2VfZ2V0X2V0aHRvb2xfc3RhdHMKK307CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfYWxsb2NhdGVfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXN0cnVjdCBteXJpMTBnZV9jbWQgY21kOworCWludCB0eF9yaW5nX3NpemUsIHJ4X3Jpbmdfc2l6ZTsKKwlpbnQgdHhfcmluZ19lbnRyaWVzLCByeF9yaW5nX2VudHJpZXM7CisJaW50IGksIHN0YXR1czsKKwlzaXplX3QgYnl0ZXM7CisKKwltZ3AgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogZ2V0IHJpbmcgc2l6ZXMgKi8KKworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfU0VORF9SSU5HX1NJWkUsICZjbWQsIDApOworCXR4X3Jpbmdfc2l6ZSA9IGNtZC5kYXRhMDsKKwlzdGF0dXMgfD0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9SWF9SSU5HX1NJWkUsICZjbWQsIDApOworCXJ4X3Jpbmdfc2l6ZSA9IGNtZC5kYXRhMDsKKworCXR4X3JpbmdfZW50cmllcyA9IHR4X3Jpbmdfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCk7CisJcnhfcmluZ19lbnRyaWVzID0gcnhfcmluZ19zaXplIC8gc2l6ZW9mKHN0cnVjdCBtY3BfZG1hX2FkZHIpOworCW1ncC0+dHgubWFzayA9IHR4X3JpbmdfZW50cmllcyAtIDE7CisJbWdwLT5yeF9zbWFsbC5tYXNrID0gbWdwLT5yeF9iaWcubWFzayA9IHJ4X3JpbmdfZW50cmllcyAtIDE7CisKKwkvKiBhbGxvY2F0ZSB0aGUgaG9zdCBzaGFkb3cgcmluZ3MgKi8KKworCWJ5dGVzID0gOCArIChNWVJJMTBHRV9NQVhfU0VORF9ERVNDX1RTTyArIDQpCisJICAgICogc2l6ZW9mKCptZ3AtPnR4LnJlcV9saXN0KTsKKwltZ3AtPnR4LnJlcV9ieXRlcyA9IGt6YWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOworCWlmIChtZ3AtPnR4LnJlcV9ieXRlcyA9PSBOVUxMKQorCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKKworCS8qIGVuc3VyZSByZXFfbGlzdCBlbnRyaWVzIGFyZSBhbGlnbmVkIHRvIDggYnl0ZXMgKi8KKwltZ3AtPnR4LnJlcV9saXN0ID0gKHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kICopCisJICAgIEFMSUdOKCh1bnNpZ25lZCBsb25nKW1ncC0+dHgucmVxX2J5dGVzLCA4KTsKKworCWJ5dGVzID0gcnhfcmluZ19lbnRyaWVzICogc2l6ZW9mKCptZ3AtPnJ4X3NtYWxsLnNoYWRvdyk7CisJbWdwLT5yeF9zbWFsbC5zaGFkb3cgPSBremFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAobWdwLT5yeF9zbWFsbC5zaGFkb3cgPT0gTlVMTCkKKwkJZ290byBhYm9ydF93aXRoX3R4X3JlcV9ieXRlczsKKworCWJ5dGVzID0gcnhfcmluZ19lbnRyaWVzICogc2l6ZW9mKCptZ3AtPnJ4X2JpZy5zaGFkb3cpOworCW1ncC0+cnhfYmlnLnNoYWRvdyA9IGt6YWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOworCWlmIChtZ3AtPnJ4X2JpZy5zaGFkb3cgPT0gTlVMTCkKKwkJZ290byBhYm9ydF93aXRoX3J4X3NtYWxsX3NoYWRvdzsKKworCS8qIGFsbG9jYXRlIHRoZSBob3N0IGluZm8gcmluZ3MgKi8KKworCWJ5dGVzID0gdHhfcmluZ19lbnRyaWVzICogc2l6ZW9mKCptZ3AtPnR4LmluZm8pOworCW1ncC0+dHguaW5mbyA9IGt6YWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOworCWlmIChtZ3AtPnR4LmluZm8gPT0gTlVMTCkKKwkJZ290byBhYm9ydF93aXRoX3J4X2JpZ19zaGFkb3c7CisKKwlieXRlcyA9IHJ4X3JpbmdfZW50cmllcyAqIHNpemVvZigqbWdwLT5yeF9zbWFsbC5pbmZvKTsKKwltZ3AtPnJ4X3NtYWxsLmluZm8gPSBremFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAobWdwLT5yeF9zbWFsbC5pbmZvID09IE5VTEwpCisJCWdvdG8gYWJvcnRfd2l0aF90eF9pbmZvOworCisJYnl0ZXMgPSByeF9yaW5nX2VudHJpZXMgKiBzaXplb2YoKm1ncC0+cnhfYmlnLmluZm8pOworCW1ncC0+cnhfYmlnLmluZm8gPSBremFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAobWdwLT5yeF9iaWcuaW5mbyA9PSBOVUxMKQorCQlnb3RvIGFib3J0X3dpdGhfcnhfc21hbGxfaW5mbzsKKworCS8qIEZpbGwgdGhlIHJlY2VpdmUgcmluZ3MgKi8KKworCWZvciAoaSA9IDA7IGkgPD0gbWdwLT5yeF9zbWFsbC5tYXNrOyBpKyspIHsKKwkJc3RhdHVzID0gbXlyaTEwZ2VfZ2V0YnVmKCZtZ3AtPnJ4X3NtYWxsLCBtZ3AtPnBkZXYsCisJCQkJCSBtZ3AtPnNtYWxsX2J5dGVzLCBpKTsKKwkJaWYgKHN0YXR1cykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm15cmkxMGdlOiAlczogYWxsb2NlZCBvbmx5ICVkIHNtYWxsIGJ1ZnNcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKKwkJCWdvdG8gYWJvcnRfd2l0aF9yeF9zbWFsbF9yaW5nOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X2JpZy5tYXNrOyBpKyspIHsKKwkJc3RhdHVzID0KKwkJICAgIG15cmkxMGdlX2dldGJ1ZigmbWdwLT5yeF9iaWcsIG1ncC0+cGRldiwKKwkJCQkgICAgZGV2LT5tdHUgKyBFVEhfSExFTiwgaSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJteXJpMTBnZTogJXM6IGFsbG9jZWQgb25seSAlZCBiaWcgYnVmc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGkpOworCQkJZ290byBhYm9ydF93aXRoX3J4X2JpZ19yaW5nOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Fib3J0X3dpdGhfcnhfYmlnX3Jpbmc6CisJZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X2JpZy5tYXNrOyBpKyspIHsKKwkJaWYgKG1ncC0+cnhfYmlnLmluZm9baV0uc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShtZ3AtPnJ4X2JpZy5pbmZvW2ldLnNrYik7CisJCWlmIChwY2lfdW5tYXBfbGVuKCZtZ3AtPnJ4X2JpZy5pbmZvW2ldLCBsZW4pKQorCQkJcGNpX3VubWFwX3NpbmdsZShtZ3AtPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcigmbWdwLT5yeF9iaWcuaW5mb1tpXSwKKwkJCQkJCQlidXMpLAorCQkJCQkgcGNpX3VubWFwX2xlbigmbWdwLT5yeF9iaWcuaW5mb1tpXSwKKwkJCQkJCSAgICAgICBsZW4pLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9CisKK2Fib3J0X3dpdGhfcnhfc21hbGxfcmluZzoKKwlmb3IgKGkgPSAwOyBpIDw9IG1ncC0+cnhfc21hbGwubWFzazsgaSsrKSB7CisJCWlmIChtZ3AtPnJ4X3NtYWxsLmluZm9baV0uc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShtZ3AtPnJ4X3NtYWxsLmluZm9baV0uc2tiKTsKKwkJaWYgKHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfc21hbGwuaW5mb1tpXSwgbGVuKSkKKwkJCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LAorCQkJCQkgcGNpX3VubWFwX2FkZHIoJm1ncC0+cnhfc21hbGwuaW5mb1tpXSwKKwkJCQkJCQlidXMpLAorCQkJCQkgcGNpX3VubWFwX2xlbigmbWdwLT5yeF9zbWFsbC5pbmZvW2ldLAorCQkJCQkJICAgICAgIGxlbiksCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCX0KKwlrZnJlZShtZ3AtPnJ4X2JpZy5pbmZvKTsKKworYWJvcnRfd2l0aF9yeF9zbWFsbF9pbmZvOgorCWtmcmVlKG1ncC0+cnhfc21hbGwuaW5mbyk7CisKK2Fib3J0X3dpdGhfdHhfaW5mbzoKKwlrZnJlZShtZ3AtPnR4LmluZm8pOworCithYm9ydF93aXRoX3J4X2JpZ19zaGFkb3c6CisJa2ZyZWUobWdwLT5yeF9iaWcuc2hhZG93KTsKKworYWJvcnRfd2l0aF9yeF9zbWFsbF9zaGFkb3c6CisJa2ZyZWUobWdwLT5yeF9zbWFsbC5zaGFkb3cpOworCithYm9ydF93aXRoX3R4X3JlcV9ieXRlczoKKwlrZnJlZShtZ3AtPnR4LnJlcV9ieXRlcyk7CisJbWdwLT50eC5yZXFfYnl0ZXMgPSBOVUxMOworCW1ncC0+dHgucmVxX2xpc3QgPSBOVUxMOworCithYm9ydF93aXRoX25vdGhpbmc6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgbXlyaTEwZ2VfZnJlZV9yaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmICp0eDsKKwlpbnQgaSwgbGVuLCBpZHg7CisKKwltZ3AgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X2JpZy5tYXNrOyBpKyspIHsKKwkJaWYgKG1ncC0+cnhfYmlnLmluZm9baV0uc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShtZ3AtPnJ4X2JpZy5pbmZvW2ldLnNrYik7CisJCWlmIChwY2lfdW5tYXBfbGVuKCZtZ3AtPnJ4X2JpZy5pbmZvW2ldLCBsZW4pKQorCQkJcGNpX3VubWFwX3NpbmdsZShtZ3AtPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcigmbWdwLT5yeF9iaWcuaW5mb1tpXSwKKwkJCQkJCQlidXMpLAorCQkJCQkgcGNpX3VubWFwX2xlbigmbWdwLT5yeF9iaWcuaW5mb1tpXSwKKwkJCQkJCSAgICAgICBsZW4pLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDw9IG1ncC0+cnhfc21hbGwubWFzazsgaSsrKSB7CisJCWlmIChtZ3AtPnJ4X3NtYWxsLmluZm9baV0uc2tiICE9IE5VTEwpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShtZ3AtPnJ4X3NtYWxsLmluZm9baV0uc2tiKTsKKwkJaWYgKHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfc21hbGwuaW5mb1tpXSwgbGVuKSkKKwkJCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LAorCQkJCQkgcGNpX3VubWFwX2FkZHIoJm1ncC0+cnhfc21hbGwuaW5mb1tpXSwKKwkJCQkJCQlidXMpLAorCQkJCQkgcGNpX3VubWFwX2xlbigmbWdwLT5yeF9zbWFsbC5pbmZvW2ldLAorCQkJCQkJICAgICAgIGxlbiksCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCX0KKworCXR4ID0gJm1ncC0+dHg7CisJd2hpbGUgKHR4LT5kb25lICE9IHR4LT5yZXEpIHsKKwkJaWR4ID0gdHgtPmRvbmUgJiB0eC0+bWFzazsKKwkJc2tiID0gdHgtPmluZm9baWR4XS5za2I7CisKKwkJLyogTWFyayBhcyBmcmVlICovCisJCXR4LT5pbmZvW2lkeF0uc2tiID0gTlVMTDsKKwkJdHgtPmRvbmUrKzsKKwkJbGVuID0gcGNpX3VubWFwX2xlbigmdHgtPmluZm9baWR4XSwgbGVuKTsKKwkJcGNpX3VubWFwX2xlbl9zZXQoJnR4LT5pbmZvW2lkeF0sIGxlbiwgMCk7CisJCWlmIChza2IpIHsKKwkJCW1ncC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWlmIChsZW4pCisJCQkJcGNpX3VubWFwX3NpbmdsZShtZ3AtPnBkZXYsCisJCQkJCQkgcGNpX3VubWFwX2FkZHIoJnR4LT5pbmZvW2lkeF0sCisJCQkJCQkJCWJ1cyksIGxlbiwKKwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsZW4pCisJCQkJcGNpX3VubWFwX3BhZ2UobWdwLT5wZGV2LAorCQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoJnR4LT5pbmZvW2lkeF0sCisJCQkJCQkJICAgICAgYnVzKSwgbGVuLAorCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCX0KKwl9CisJa2ZyZWUobWdwLT5yeF9iaWcuaW5mbyk7CisKKwlrZnJlZShtZ3AtPnJ4X3NtYWxsLmluZm8pOworCisJa2ZyZWUobWdwLT50eC5pbmZvKTsKKworCWtmcmVlKG1ncC0+cnhfYmlnLnNoYWRvdyk7CisKKwlrZnJlZShtZ3AtPnJ4X3NtYWxsLnNoYWRvdyk7CisKKwlrZnJlZShtZ3AtPnR4LnJlcV9ieXRlcyk7CisJbWdwLT50eC5yZXFfYnl0ZXMgPSBOVUxMOworCW1ncC0+dHgucmVxX2xpc3QgPSBOVUxMOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXN0cnVjdCBteXJpMTBnZV9jbWQgY21kOworCWludCBzdGF0dXMsIGJpZ19wb3cyOworCisJbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChtZ3AtPnJ1bm5pbmcgIT0gTVlSSTEwR0VfRVRIX1NUT1BQRUQpCisJCXJldHVybiAtRUJVU1k7CisKKwltZ3AtPnJ1bm5pbmcgPSBNWVJJMTBHRV9FVEhfU1RBUlRJTkc7CisJc3RhdHVzID0gbXlyaTEwZ2VfcmVzZXQobWdwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGZhaWxlZCByZXNldFxuIiwgZGV2LT5uYW1lKTsKKwkJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1NUT1BQRUQ7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogZGVjaWRlIHdoYXQgc21hbGwgYnVmZmVyIHNpemUgdG8gdXNlLiAgRm9yIGdvb2QgVENQIHJ4CisJICogcGVyZm9ybWFuY2UsIGl0IGlzIGltcG9ydGFudCB0byBub3QgcmVjZWl2ZSAxNTE0IGJ5dGUKKwkgKiBmcmFtZXMgaW50byBqdW1ibyBidWZmZXJzLCBhcyBpdCBjb25mdXNlcyB0aGUgc29ja2V0IGJ1ZmZlcgorCSAqIGFjY291bnRpbmcgY29kZSwgbGVhZGluZyB0byBkcm9wcyBhbmQgZXJyYXRpYyBwZXJmb3JtYW5jZS4KKwkgKi8KKworCWlmIChkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCisJCW1ncC0+c21hbGxfYnl0ZXMgPSAxMjg7CS8qIGVub3VnaCBmb3IgYSBUQ1AgaGVhZGVyICovCisJZWxzZQorCQltZ3AtPnNtYWxsX2J5dGVzID0gRVRIX0ZSQU1FX0xFTjsJLyogZW5vdWdoIGZvciBhbiBFVEhfREFUQV9MRU4gZnJhbWUgKi8KKworCS8qIE92ZXJyaWRlIHRoZSBzbWFsbCBidWZmZXIgc2l6ZT8gKi8KKwlpZiAobXlyaTEwZ2Vfc21hbGxfYnl0ZXMgPiAwKQorCQltZ3AtPnNtYWxsX2J5dGVzID0gbXlyaTEwZ2Vfc21hbGxfYnl0ZXM7CisKKwkvKiBJZiB0aGUgdXNlciBzZXRzIGFuIG9ic2NlbmVseSBzbWFsbCBNVFUsIGFkanVzdCB0aGUgc21hbGwKKwkgKiBieXRlcyBkb3duIHRvIG5lYXJseSBub3RoaW5nICovCisJaWYgKG1ncC0+c21hbGxfYnl0ZXMgPj0gKGRldi0+bXR1ICsgRVRIX0hMRU4pKQorCQltZ3AtPnNtYWxsX2J5dGVzID0gNjQ7CisKKwkvKiBnZXQgdGhlIGxhbmFpIHBvaW50ZXJzIHRvIHRoZSBzZW5kIGFuZCByZWNlaXZlIHJpbmdzICovCisKKwlzdGF0dXMgfD0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9TRU5EX09GRlNFVCwgJmNtZCwgMCk7CisJbWdwLT50eC5sYW5haSA9CisJICAgIChzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCBfX2lvbWVtICopKG1ncC0+c3JhbSArIGNtZC5kYXRhMCk7CisKKwlzdGF0dXMgfD0KKwkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9TTUFMTF9SWF9PRkZTRVQsICZjbWQsIDApOworCW1ncC0+cnhfc21hbGwubGFuYWkgPQorCSAgICAoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3JlY3YgX19pb21lbSAqKShtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCisJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfQklHX1JYX09GRlNFVCwgJmNtZCwgMCk7CisJbWdwLT5yeF9iaWcubGFuYWkgPQorCSAgICAoc3RydWN0IG1jcF9rcmVxX2V0aGVyX3JlY3YgX19pb21lbSAqKShtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGdldCByaW5nIHNpemVzIG9yIGxvY2F0aW9uc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmIChtZ3AtPm10cnIgPj0gMCkgeworCQltZ3AtPnR4LndjX2ZpZm8gPSAodTggX19pb21lbSAqKSBtZ3AtPnNyYW0gKyAweDIwMDAwMDsKKwkJbWdwLT5yeF9zbWFsbC53Y19maWZvID0gKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgMHgzMDAwMDA7CisJCW1ncC0+cnhfYmlnLndjX2ZpZm8gPSAodTggX19pb21lbSAqKSBtZ3AtPnNyYW0gKyAweDM0MDAwMDsKKwl9IGVsc2UgeworCQltZ3AtPnR4LndjX2ZpZm8gPSBOVUxMOworCQltZ3AtPnJ4X3NtYWxsLndjX2ZpZm8gPSBOVUxMOworCQltZ3AtPnJ4X2JpZy53Y19maWZvID0gTlVMTDsKKwl9CisKKwlzdGF0dXMgPSBteXJpMTBnZV9hbGxvY2F0ZV9yaW5ncyhkZXYpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CisKKwkvKiBGaXJtd2FyZSBuZWVkcyB0aGUgYmlnIGJ1ZmYgc2l6ZSBhcyBhIHBvd2VyIG9mIDIuICBMaWUgYW5kCisJICogdGVsbCBoaW0gdGhlIGJ1ZmZlciBpcyBsYXJnZXIsIGJlY2F1c2Ugd2Ugb25seSB1c2UgMQorCSAqIGJ1ZmZlci9wa3QsIGFuZCB0aGUgbXR1IHdpbGwgcHJldmVudCBvdmVycnVucy4KKwkgKi8KKwliaWdfcG93MiA9IGRldi0+bXR1ICsgRVRIX0hMRU4gKyBNWEdFRldfUEFEOworCXdoaWxlICgoYmlnX3BvdzIgJiAoYmlnX3BvdzIgLSAxKSkgIT0gMCkKKwkJYmlnX3BvdzIrKzsKKworCS8qIG5vdyBnaXZlIGZpcm13YXJlIGJ1ZmZlcnMgc2l6ZXMsIGFuZCBNVFUgKi8KKwljbWQuZGF0YTAgPSBkZXYtPm10dSArIEVUSF9ITEVOICsgVkxBTl9ITEVOOworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9TRVRfTVRVLCAmY21kLCAwKTsKKwljbWQuZGF0YTAgPSBtZ3AtPnNtYWxsX2J5dGVzOworCXN0YXR1cyB8PQorCSAgICBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX1NNQUxMX0JVRkZFUl9TSVpFLCAmY21kLCAwKTsKKwljbWQuZGF0YTAgPSBiaWdfcG93MjsKKwlzdGF0dXMgfD0KKwkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9CSUdfQlVGRkVSX1NJWkUsICZjbWQsIDApOworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IHNldCBidWZmZXIgc2l6ZXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CisJfQorCisJY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIobWdwLT5md19zdGF0c19idXMpOworCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihtZ3AtPmZ3X3N0YXRzX2J1cyk7CisJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9TVEFUU19ETUEsICZjbWQsIDApOworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IHNldCBzdGF0cyBETUFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CisJfQorCisJbWdwLT5saW5rX3N0YXRlID0gLTE7CisJbWdwLT5yZG1hX3RhZ3NfYXZhaWxhYmxlID0gMTU7CisKKwluZXRpZl9wb2xsX2VuYWJsZShtZ3AtPmRldik7CS8qIG11c3QgaGFwcGVuIHByaW9yIHRvIGFueSBpcnEgKi8KKworCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9FVEhFUk5FVF9VUCwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cykgeworCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogQ291bGRuJ3QgYnJpbmcgdXAgbGlua1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKKwl9CisKKwltZ3AtPndha2VfcXVldWUgPSAwOworCW1ncC0+c3RvcF9xdWV1ZSA9IDA7CisJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1JVTk5JTkc7CisJbWdwLT53YXRjaGRvZ190aW1lci5leHBpcmVzID0gamlmZmllcyArIG15cmkxMGdlX3dhdGNoZG9nX3RpbWVvdXQgKiBIWjsKKwlhZGRfdGltZXIoJm1ncC0+d2F0Y2hkb2dfdGltZXIpOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKKworYWJvcnRfd2l0aF9yaW5nczoKKwlteXJpMTBnZV9mcmVlX3JpbmdzKGRldik7CisKK2Fib3J0X3dpdGhfbm90aGluZzoKKwltZ3AtPnJ1bm5pbmcgPSBNWVJJMTBHRV9FVEhfU1RPUFBFRDsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJaW50IHN0YXR1cywgb2xkX2Rvd25fY250OworCisJbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChtZ3AtPnJ1bm5pbmcgIT0gTVlSSTEwR0VfRVRIX1JVTk5JTkcpCisJCXJldHVybiAwOworCisJaWYgKG1ncC0+dHgucmVxX2J5dGVzID09IE5VTEwpCisJCXJldHVybiAwOworCisJZGVsX3RpbWVyX3N5bmMoJm1ncC0+d2F0Y2hkb2dfdGltZXIpOworCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUElORzsKKwluZXRpZl9wb2xsX2Rpc2FibGUobWdwLT5kZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW9sZF9kb3duX2NudCA9IG1ncC0+ZG93bl9jbnQ7CisJbWIoKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfRVRIRVJORVRfRE9XTiwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cykKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IGJyaW5nIGRvd24gbGlua1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisKKwl3YWl0X2V2ZW50X3RpbWVvdXQobWdwLT5kb3duX3dxLCBvbGRfZG93bl9jbnQgIT0gbWdwLT5kb3duX2NudCwgSFopOworCWlmIChvbGRfZG93bl9jbnQgPT0gbWdwLT5kb3duX2NudCkKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXMgbmV2ZXIgZ290IGRvd24gaXJxXG4iLCBkZXYtPm5hbWUpOworCisJbmV0aWZfdHhfZGlzYWJsZShkZXYpOworCisJbXlyaTEwZ2VfZnJlZV9yaW5ncyhkZXYpOworCisJbWdwLT5ydW5uaW5nID0gTVlSSTEwR0VfRVRIX1NUT1BQRUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNvcHkgYW4gYXJyYXkgb2Ygc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQncyB0byB0aGUgbWNwLiAgQ29weQorICogYmFja3dhcmRzIG9uZSBhdCBhIHRpbWUgYW5kIGhhbmRsZSByaW5nIHdyYXBzICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbXlyaTEwZ2Vfc3VibWl0X3JlcV9iYWNrd2FyZHMoc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHgsCisJCQkgICAgICBzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCAqc3JjLCBpbnQgY250KQoreworCWludCBpZHgsIHN0YXJ0aW5nX3Nsb3Q7CisJc3RhcnRpbmdfc2xvdCA9IHR4LT5yZXE7CisJd2hpbGUgKGNudCA+IDEpIHsKKwkJY250LS07CisJCWlkeCA9IChzdGFydGluZ19zbG90ICsgY250KSAmIHR4LT5tYXNrOworCQlteXJpMTBnZV9waW9fY29weSgmdHgtPmxhbmFpW2lkeF0sICZzcmNbY250XSwgc2l6ZW9mKCpzcmMpKTsKKwkJbWIoKTsKKwl9Cit9CisKKy8qCisgKiBjb3B5IGFuIGFycmF5IG9mIHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kJ3MgdG8gdGhlIG1jcC4gIENvcHkKKyAqIGF0IG1vc3QgMzIgYnl0ZXMgYXQgYSB0aW1lLCBzbyBhcyB0byBhdm9pZCBpbnZvbHZpbmcgdGhlIHNvZnR3YXJlCisgKiBwaW8gaGFuZGxlciBpbiB0aGUgbmljLiAgIFdlIHJlLXdyaXRlIHRoZSBmaXJzdCBzZWdtZW50J3MgZmxhZ3MKKyAqIHRvIG1hcmsgdGhlbSB2YWxpZCBvbmx5IGFmdGVyIHdyaXRpbmcgdGhlIGVudGlyZSBjaGFpbi4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK215cmkxMGdlX3N1Ym1pdF9yZXEoc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHgsIHN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kICpzcmMsCisJCSAgICBpbnQgY250KQoreworCWludCBpZHgsIGk7CisJc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgX19pb21lbSAqZHN0cCwgKmRzdDsKKwlzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCAqc3JjcDsKKwl1OCBsYXN0X2ZsYWdzOworCisJaWR4ID0gdHgtPnJlcSAmIHR4LT5tYXNrOworCisJbGFzdF9mbGFncyA9IHNyYy0+ZmxhZ3M7CisJc3JjLT5mbGFncyA9IDA7CisJbWIoKTsKKwlkc3QgPSBkc3RwID0gJnR4LT5sYW5haVtpZHhdOworCXNyY3AgPSBzcmM7CisKKwlpZiAoKGlkeCArIGNudCkgPCB0eC0+bWFzaykgeworCQlmb3IgKGkgPSAwOyBpIDwgKGNudCAtIDEpOyBpICs9IDIpIHsKKwkJCW15cmkxMGdlX3Bpb19jb3B5KGRzdHAsIHNyY3AsIDIgKiBzaXplb2YoKnNyYykpOworCQkJbWIoKTsJLyogZm9yY2Ugd3JpdGUgZXZlcnkgMzIgYnl0ZXMgKi8KKwkJCXNyY3AgKz0gMjsKKwkJCWRzdHAgKz0gMjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHN1Ym1pdCBhbGwgYnV0IHRoZSBmaXJzdCByZXF1ZXN0LCBhbmQgZW5zdXJlCisJCSAqIHRoYXQgaXQgaXMgc3VibWl0dGVkIGJlbG93ICovCisJCW15cmkxMGdlX3N1Ym1pdF9yZXFfYmFja3dhcmRzKHR4LCBzcmMsIGNudCk7CisJCWkgPSAwOworCX0KKwlpZiAoaSA8IGNudCkgeworCQkvKiBzdWJtaXQgdGhlIGZpcnN0IHJlcXVlc3QgKi8KKwkJbXlyaTEwZ2VfcGlvX2NvcHkoZHN0cCwgc3JjcCwgc2l6ZW9mKCpzcmMpKTsKKwkJbWIoKTsJCS8qIGJhcnJpZXIgYmVmb3JlIHNldHRpbmcgdmFsaWQgZmxhZyAqLworCX0KKworCS8qIHJlLXdyaXRlIHRoZSBsYXN0IDMyLWJpdHMgd2l0aCB0aGUgdmFsaWQgZmxhZ3MgKi8KKwlzcmMtPmZsYWdzID0gbGFzdF9mbGFnczsKKwlfX3Jhd193cml0ZWwoKigodTMyICopIHNyYyArIDMpLCAodTMyIF9faW9tZW0gKikgZHN0ICsgMyk7CisJdHgtPnJlcSArPSBjbnQ7CisJbWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitteXJpMTBnZV9zdWJtaXRfcmVxX3djKHN0cnVjdCBteXJpMTBnZV90eF9idWYgKnR4LAorCQkgICAgICAgc3RydWN0IG1jcF9rcmVxX2V0aGVyX3NlbmQgKnNyYywgaW50IGNudCkKK3sKKwl0eC0+cmVxICs9IGNudDsKKwltYigpOworCXdoaWxlIChjbnQgPj0gNCkgeworCQlteXJpMTBnZV9waW9fY29weSh0eC0+d2NfZmlmbywgc3JjLCA2NCk7CisJCW1iKCk7CisJCXNyYyArPSA0OworCQljbnQgLT0gNDsKKwl9CisJaWYgKGNudCA+IDApIHsKKwkJLyogcGFkIGl0IHRvIDY0IGJ5dGVzLiAgVGhlIHNyYyBpcyA2NCBieXRlcyBiaWdnZXIgdGhhbiBpdAorCQkgKiBuZWVkcyB0byBiZSBzbyB0aGF0IHdlIGRvbid0IG92ZXJydW4gaXQgKi8KKwkJbXlyaTEwZ2VfcGlvX2NvcHkodHgtPndjX2ZpZm8gKyAoY250IDw8IDE4KSwgc3JjLCA2NCk7CisJCW1iKCk7CisJfQorfQorCisvKgorICogVHJhbnNtaXQgYSBwYWNrZXQuICBXZSBuZWVkIHRvIHNwbGl0IHRoZSBwYWNrZXQgc28gdGhhdCBhIHNpbmdsZQorICogc2VnbWVudCBkb2VzIG5vdCBjcm9zcyBteXJpMTBnZS0+dHguYm91bmRhcnksIHNvIHRoaXMgbWFrZXMgc2VnbWVudAorICogY291bnRpbmcgdHJpY2t5LiAgU28gcmF0aGVyIHRoYW4gdHJ5IHRvIGNvdW50IHNlZ21lbnRzIHVwIGZyb250LCB3ZQorICoganVzdCBnaXZlIHVwIGlmIHRoZXJlIGFyZSB0b28gZmV3IHNlZ21lbnRzIHRvIGhvbGQgYSByZWFzb25hYmx5CisgKiBmcmFnbWVudGVkIHBhY2tldCBjdXJyZW50bHkgYXZhaWxhYmxlLiAgSWYgd2UgcnVuCisgKiBvdXQgb2Ygc2VnbWVudHMgd2hpbGUgcHJlcGFyaW5nIGEgcGFja2V0IGZvciBETUEsIHdlIGp1c3QgbGluZWFyaXplCisgKiBpdCBhbmQgdHJ5IGFnYWluLgorICovCisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtY3Bfa3JlcV9ldGhlcl9zZW5kICpyZXE7CisJc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHggPSAmbWdwLT50eDsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOworCWRtYV9hZGRyX3QgYnVzOworCXUzMiBsb3csIGhpZ2hfc3dhcHBlZDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBpZHgsIGxhc3RfaWR4LCBhdmFpbCwgZnJhZ19jbnQsIGZyYWdfaWR4LCBjb3VudCwgbXNzLCBtYXhfc2VnbWVudHM7CisJdTE2IHBzZXVkb19oZHJfb2Zmc2V0LCBja3N1bV9vZmZzZXQ7CisJaW50IGN1bV9sZW4sIHNlZ2xlbiwgYm91bmRhcnksIHJkbWFfY291bnQ7CisJdTggZmxhZ3MsIG9kZF9mbGFnOworCithZ2FpbjoKKwlyZXEgPSB0eC0+cmVxX2xpc3Q7CisJYXZhaWwgPSB0eC0+bWFzayAtIDEgLSAodHgtPnJlcSAtIHR4LT5kb25lKTsKKworCW1zcyA9IDA7CisJbWF4X3NlZ21lbnRzID0gTVhHRUZXX01BWF9TRU5EX0RFU0M7CisKKyNpZmRlZiBORVRJRl9GX1RTTworCWlmIChza2ItPmxlbiA+IChkZXYtPm10dSArIEVUSF9ITEVOKSkgeworCQltc3MgPSBza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplOworCQlpZiAobXNzICE9IDApCisJCQltYXhfc2VnbWVudHMgPSBNWVJJMTBHRV9NQVhfU0VORF9ERVNDX1RTTzsKKwl9CisjZW5kaWYJCQkJLypORVRJRl9GX1RTTyAqLworCisJaWYgKCh1bmxpa2VseShhdmFpbCA8IG1heF9zZWdtZW50cykpKSB7CisJCS8qIHdlIGFyZSBvdXQgb2YgdHJhbnNtaXQgcmVzb3VyY2VzICovCisJCW1ncC0+c3RvcF9xdWV1ZSsrOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiAxOworCX0KKworCS8qIFNldHVwIGNoZWNrc3VtIG9mZmxvYWRpbmcsIGlmIG5lZWRlZCAqLworCWNrc3VtX29mZnNldCA9IDA7CisJcHNldWRvX2hkcl9vZmZzZXQgPSAwOworCW9kZF9mbGFnID0gMDsKKwlmbGFncyA9IChNWEdFRldfRkxBR1NfTk9fVFNPIHwgTVhHRUZXX0ZMQUdTX0ZJUlNUKTsKKwlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkgeworCQlja3N1bV9vZmZzZXQgPSAoc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSk7CisJCXBzZXVkb19oZHJfb2Zmc2V0ID0gKHNrYi0+aC5yYXcgKyBza2ItPmNzdW0pIC0gc2tiLT5kYXRhOworCQkvKiBJZiB0aGUgaGVhZGVycyBhcmUgZXhjZXNzaXZlbHkgbGFyZ2UsIHRoZW4gd2UgbXVzdAorCQkgKiBmYWxsIGJhY2sgdG8gYSBzb2Z0d2FyZSBjaGVja3N1bSAqLworCQlpZiAodW5saWtlbHkoY2tzdW1fb2Zmc2V0ID4gMjU1IHx8IHBzZXVkb19oZHJfb2Zmc2V0ID4gMTI3KSkgeworCQkJaWYgKHNrYl9jaGVja3N1bV9oZWxwKHNrYiwgMCkpCisJCQkJZ290byBkcm9wOworCQkJY2tzdW1fb2Zmc2V0ID0gMDsKKwkJCXBzZXVkb19oZHJfb2Zmc2V0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXBzZXVkb19oZHJfb2Zmc2V0ID0gaHRvbnMocHNldWRvX2hkcl9vZmZzZXQpOworCQkJb2RkX2ZsYWcgPSBNWEdFRldfRkxBR1NfQUxJR05fT0REOworCQkJZmxhZ3MgfD0gTVhHRUZXX0ZMQUdTX0NLU1VNOworCQl9CisJfQorCisJY3VtX2xlbiA9IDA7CisKKyNpZmRlZiBORVRJRl9GX1RTTworCWlmIChtc3MpIHsJCS8qIFRTTyAqLworCQkvKiB0aGlzIHJlbW92ZXMgYW55IENLU1VNIGZsYWcgZnJvbSBiZWZvcmUgKi8KKwkJZmxhZ3MgPSAoTVhHRUZXX0ZMQUdTX1RTT19IRFIgfCBNWEdFRldfRkxBR1NfRklSU1QpOworCisJCS8qIG5lZ2F0aXZlIGN1bV9sZW4gc2lnbmlmaWVzIHRvIHRoZQorCQkgKiBzZW5kIGxvb3AgdGhhdCB3ZSBhcmUgc3RpbGwgaW4gdGhlCisJCSAqIGhlYWRlciBwb3J0aW9uIG9mIHRoZSBUU08gcGFja2V0LgorCQkgKiBUU08gaGVhZGVyIG11c3QgYmUgYXQgbW9zdCAxMzQgYnl0ZXMgbG9uZyAqLworCQljdW1fbGVuID0gLSgoc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSkgKyAoc2tiLT5oLnRoLT5kb2ZmIDw8IDIpKTsKKworCQkvKiBmb3IgVFNPLCBwc2V1ZG9faGRyX29mZnNldCBob2xkcyBtc3MuCisJCSAqIFRoZSBmaXJtd2FyZSBmaWd1cmVzIG91dCB3aGVyZSB0byBwdXQKKwkJICogdGhlIGNoZWNrc3VtIGJ5IHBhcnNpbmcgdGhlIGhlYWRlci4gKi8KKwkJcHNldWRvX2hkcl9vZmZzZXQgPSBodG9ucyhtc3MpOworCX0gZWxzZQorI2VuZGlmCQkJCS8qTkVUSUZfRl9UU08gKi8KKwkJLyogTWFyayBzbWFsbCBwYWNrZXRzLCBhbmQgcGFkIG91dCB0aW55IHBhY2tldHMgKi8KKwlpZiAoc2tiLT5sZW4gPD0gTVhHRUZXX1NFTkRfU01BTExfU0laRSkgeworCQlmbGFncyB8PSBNWEdFRldfRkxBR1NfU01BTEw7CisKKwkJLyogcGFkIGZyYW1lcyB0byBhdCBsZWFzdCBFVEhfWkxFTiBieXRlcyAqLworCQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBFVEhfWkxFTikpIHsKKwkJCXNrYiA9IHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKTsKKwkJCWlmIChza2IgPT0gTlVMTCkgeworCQkJCS8qIFRoZSBwYWNrZXQgaXMgZ29uZSwgc28gd2UgbXVzdAorCQkJCSAqIHJldHVybiAwICovCisJCQkJbWdwLT5zdGF0cy50eF9kcm9wcGVkICs9IDE7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQkvKiBhZGp1c3QgdGhlIGxlbiB0byBhY2NvdW50IGZvciB0aGUgemVybyBwYWQKKwkJCSAqIHNvIHRoYXQgdGhlIG5pYyBjYW4ga25vdyBob3cgbG9uZyBpdCBpcyAqLworCQkJc2tiLT5sZW4gPSBFVEhfWkxFTjsKKwkJfQorCX0KKworCS8qIG1hcCB0aGUgc2tiIGZvciBETUEgKi8KKwlsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJaWR4ID0gdHgtPnJlcSAmIHR4LT5tYXNrOworCXR4LT5pbmZvW2lkeF0uc2tiID0gc2tiOworCWJ1cyA9IHBjaV9tYXBfc2luZ2xlKG1ncC0+cGRldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCXBjaV91bm1hcF9hZGRyX3NldCgmdHgtPmluZm9baWR4XSwgYnVzLCBidXMpOworCXBjaV91bm1hcF9sZW5fc2V0KCZ0eC0+aW5mb1tpZHhdLCBsZW4sIGxlbik7CisKKwlmcmFnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJZnJhZ19pZHggPSAwOworCWNvdW50ID0gMDsKKwlyZG1hX2NvdW50ID0gMDsKKworCS8qICJyZG1hX2NvdW50IiBpcyB0aGUgbnVtYmVyIG9mIFJETUFzIGJlbG9uZ2luZyB0byB0aGUKKwkgKiBjdXJyZW50IHBhY2tldCBCRUZPUkUgdGhlIGN1cnJlbnQgc2VuZCByZXF1ZXN0LiBGb3IKKwkgKiBub24tVFNPIHBhY2tldHMsIHRoaXMgaXMgZXF1YWwgdG8gImNvdW50Ii4KKwkgKiBGb3IgVFNPIHBhY2tldHMsIHJkbWFfY291bnQgbmVlZHMgdG8gYmUgcmVzZXQKKwkgKiB0byAwIGFmdGVyIGEgc2VnbWVudCBjdXQuCisJICoKKwkgKiBUaGUgcmRtYV9jb3VudCBmaWVsZCBvZiB0aGUgc2VuZCByZXF1ZXN0IGlzCisJICogdGhlIG51bWJlciBvZiBSRE1BcyBvZiB0aGUgcGFja2V0IHN0YXJ0aW5nIGF0CisJICogdGhhdCByZXF1ZXN0LiBGb3IgVFNPIHNlbmQgcmVxdWVzdHMgd2l0aCBvbmUgb3JlIG1vcmUgY3V0cworCSAqIGluIHRoZSBtaWRkbGUsIHRoaXMgaXMgdGhlIG51bWJlciBvZiBSRE1BcyBzdGFydGluZworCSAqIGFmdGVyIHRoZSBsYXN0IGN1dCBpbiB0aGUgcmVxdWVzdC4gQWxsIHByZXZpb3VzCisJICogc2VnbWVudHMgYmVmb3JlIHRoZSBsYXN0IGN1dCBpbXBsaWNpdGx5IGhhdmUgMSBSRE1BLgorCSAqCisJICogU2luY2UgdGhlIG51bWJlciBvZiBSRE1BcyBpcyBub3Qga25vd24gYmVmb3JlaGFuZCwKKwkgKiBpdCBtdXN0IGJlIGZpbGxlZC1pbiByZXRyb2FjdGl2ZWx5IC0gYWZ0ZXIgZWFjaAorCSAqIHNlZ21lbnRhdGlvbiBjdXQgb3IgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXJlIHBhY2tldC4KKwkgKi8KKworCXdoaWxlICgxKSB7CisJCS8qIEJyZWFrIHRoZSBTS0Igb3IgRnJhZ21lbnQgdXAgaW50byBwaWVjZXMgd2hpY2gKKwkJICogZG8gbm90IGNyb3NzIG1ncC0+dHguYm91bmRhcnkgKi8KKwkJbG93ID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIoYnVzKTsKKwkJaGlnaF9zd2FwcGVkID0gaHRvbmwoTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKGJ1cykpOworCQl3aGlsZSAobGVuKSB7CisJCQl1OCBmbGFnc19uZXh0OworCQkJaW50IGN1bV9sZW5fbmV4dDsKKworCQkJaWYgKHVubGlrZWx5KGNvdW50ID09IG1heF9zZWdtZW50cykpCisJCQkJZ290byBhYm9ydF9saW5lYXJpemU7CisKKwkJCWJvdW5kYXJ5ID0gKGxvdyArIHR4LT5ib3VuZGFyeSkgJiB+KHR4LT5ib3VuZGFyeSAtIDEpOworCQkJc2VnbGVuID0gYm91bmRhcnkgLSBsb3c7CisJCQlpZiAoc2VnbGVuID4gbGVuKQorCQkJCXNlZ2xlbiA9IGxlbjsKKwkJCWZsYWdzX25leHQgPSBmbGFncyAmIH5NWEdFRldfRkxBR1NfRklSU1Q7CisJCQljdW1fbGVuX25leHQgPSBjdW1fbGVuICsgc2VnbGVuOworI2lmZGVmIE5FVElGX0ZfVFNPCisJCQlpZiAobXNzKSB7CS8qIFRTTyAqLworCQkJCShyZXEgLSByZG1hX2NvdW50KS0+cmRtYV9jb3VudCA9IHJkbWFfY291bnQgKyAxOworCisJCQkJaWYgKGxpa2VseShjdW1fbGVuID49IDApKSB7CS8qIHBheWxvYWQgKi8KKwkJCQkJaW50IG5leHRfaXNfZmlyc3QsIGNob3A7CisKKwkJCQkJY2hvcCA9IChjdW1fbGVuX25leHQgPiBtc3MpOworCQkJCQljdW1fbGVuX25leHQgPSBjdW1fbGVuX25leHQgJSBtc3M7CisJCQkJCW5leHRfaXNfZmlyc3QgPSAoY3VtX2xlbl9uZXh0ID09IDApOworCQkJCQlmbGFncyB8PSBjaG9wICogTVhHRUZXX0ZMQUdTX1RTT19DSE9QOworCQkJCQlmbGFnc19uZXh0IHw9IG5leHRfaXNfZmlyc3QgKgorCQkJCQkgICAgTVhHRUZXX0ZMQUdTX0ZJUlNUOworCQkJCQlyZG1hX2NvdW50IHw9IC0oY2hvcCB8IG5leHRfaXNfZmlyc3QpOworCQkJCQlyZG1hX2NvdW50ICs9IGNob3AgJiAhbmV4dF9pc19maXJzdDsKKwkJCQl9IGVsc2UgaWYgKGxpa2VseShjdW1fbGVuX25leHQgPj0gMCkpIHsJLyogaGVhZGVyIGVuZHMgKi8KKwkJCQkJaW50IHNtYWxsOworCisJCQkJCXJkbWFfY291bnQgPSAtMTsKKwkJCQkJY3VtX2xlbl9uZXh0ID0gMDsKKwkJCQkJc2VnbGVuID0gLWN1bV9sZW47CisJCQkJCXNtYWxsID0gKG1zcyA8PSBNWEdFRldfU0VORF9TTUFMTF9TSVpFKTsKKwkJCQkJZmxhZ3NfbmV4dCA9IE1YR0VGV19GTEFHU19UU09fUExEIHwKKwkJCQkJICAgIE1YR0VGV19GTEFHU19GSVJTVCB8CisJCQkJCSAgICAoc21hbGwgKiBNWEdFRldfRkxBR1NfU01BTEwpOworCQkJCX0KKwkJCX0KKyNlbmRpZgkJCQkvKiBORVRJRl9GX1RTTyAqLworCQkJcmVxLT5hZGRyX2hpZ2ggPSBoaWdoX3N3YXBwZWQ7CisJCQlyZXEtPmFkZHJfbG93ID0gaHRvbmwobG93KTsKKwkJCXJlcS0+cHNldWRvX2hkcl9vZmZzZXQgPSBwc2V1ZG9faGRyX29mZnNldDsKKwkJCXJlcS0+cGFkID0gMDsJLyogY29tcGxldGUgc29saWQgMTYtYnl0ZSBibG9jazsgZG9lcyB0aGlzIG1hdHRlcj8gKi8KKwkJCXJlcS0+cmRtYV9jb3VudCA9IDE7CisJCQlyZXEtPmxlbmd0aCA9IGh0b25zKHNlZ2xlbik7CisJCQlyZXEtPmNrc3VtX29mZnNldCA9IGNrc3VtX29mZnNldDsKKwkJCXJlcS0+ZmxhZ3MgPSBmbGFncyB8ICgoY3VtX2xlbiAmIDEpICogb2RkX2ZsYWcpOworCisJCQlsb3cgKz0gc2VnbGVuOworCQkJbGVuIC09IHNlZ2xlbjsKKwkJCWN1bV9sZW4gPSBjdW1fbGVuX25leHQ7CisJCQlmbGFncyA9IGZsYWdzX25leHQ7CisJCQlyZXErKzsKKwkJCWNvdW50Kys7CisJCQlyZG1hX2NvdW50Kys7CisJCQlpZiAodW5saWtlbHkoY2tzdW1fb2Zmc2V0ID4gc2VnbGVuKSkKKwkJCQlja3N1bV9vZmZzZXQgLT0gc2VnbGVuOworCQkJZWxzZQorCQkJCWNrc3VtX29mZnNldCA9IDA7CisJCX0KKwkJaWYgKGZyYWdfaWR4ID09IGZyYWdfY250KQorCQkJYnJlYWs7CisKKwkJLyogbWFwIG5leHQgZnJhZ21lbnQgZm9yIERNQSAqLworCQlpZHggPSAoY291bnQgKyB0eC0+cmVxKSAmIHR4LT5tYXNrOworCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZnJhZ19pZHhdOworCQlmcmFnX2lkeCsrOworCQlsZW4gPSBmcmFnLT5zaXplOworCQlidXMgPSBwY2lfbWFwX3BhZ2UobWdwLT5wZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnR4LT5pbmZvW2lkeF0sIGJ1cywgYnVzKTsKKwkJcGNpX3VubWFwX2xlbl9zZXQoJnR4LT5pbmZvW2lkeF0sIGxlbiwgbGVuKTsKKwl9CisKKwkocmVxIC0gcmRtYV9jb3VudCktPnJkbWFfY291bnQgPSByZG1hX2NvdW50OworI2lmZGVmIE5FVElGX0ZfVFNPCisJaWYgKG1zcykKKwkJZG8geworCQkJcmVxLS07CisJCQlyZXEtPmZsYWdzIHw9IE1YR0VGV19GTEFHU19UU09fTEFTVDsKKwkJfSB3aGlsZSAoIShyZXEtPmZsYWdzICYgKE1YR0VGV19GTEFHU19UU09fQ0hPUCB8CisJCQkJCSBNWEdFRldfRkxBR1NfRklSU1QpKSk7CisjZW5kaWYKKwlpZHggPSAoKGNvdW50IC0gMSkgKyB0eC0+cmVxKSAmIHR4LT5tYXNrOworCXR4LT5pbmZvW2lkeF0ubGFzdCA9IDE7CisJaWYgKHR4LT53Y19maWZvID09IE5VTEwpCisJCW15cmkxMGdlX3N1Ym1pdF9yZXEodHgsIHR4LT5yZXFfbGlzdCwgY291bnQpOworCWVsc2UKKwkJbXlyaTEwZ2Vfc3VibWl0X3JlcV93Yyh0eCwgdHgtPnJlcV9saXN0LCBjb3VudCk7CisJdHgtPnBrdF9zdGFydCsrOworCWlmICgoYXZhaWwgLSBjb3VudCkgPCBNWEdFRldfTUFYX1NFTkRfREVTQykgeworCQltZ3AtPnN0b3BfcXVldWUrKzsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlyZXR1cm4gMDsKKworYWJvcnRfbGluZWFyaXplOgorCS8qIEZyZWUgYW55IERNQSByZXNvdXJjZXMgd2UndmUgYWxsb2NlZCBhbmQgY2xlYXIgb3V0IHRoZSBza2IKKwkgKiBzbG90IHNvIGFzIHRvIG5vdCB0cmlwIHVwIGFzc2VydGlvbnMsIGFuZCB0byBhdm9pZCBhCisJICogZG91YmxlLWZyZWUgaWYgbGluZWFyaXppbmcgZmFpbHMgKi8KKworCWxhc3RfaWR4ID0gKGlkeCArIDEpICYgdHgtPm1hc2s7CisJaWR4ID0gdHgtPnJlcSAmIHR4LT5tYXNrOworCXR4LT5pbmZvW2lkeF0uc2tiID0gTlVMTDsKKwlkbyB7CisJCWxlbiA9IHBjaV91bm1hcF9sZW4oJnR4LT5pbmZvW2lkeF0sIGxlbik7CisJCWlmIChsZW4pIHsKKwkJCWlmICh0eC0+aW5mb1tpZHhdLnNrYiAhPSBOVUxMKQorCQkJCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LAorCQkJCQkJIHBjaV91bm1hcF9hZGRyKCZ0eC0+aW5mb1tpZHhdLAorCQkJCQkJCQlidXMpLCBsZW4sCisJCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQllbHNlCisJCQkJcGNpX3VubWFwX3BhZ2UobWdwLT5wZGV2LAorCQkJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoJnR4LT5pbmZvW2lkeF0sCisJCQkJCQkJICAgICAgYnVzKSwgbGVuLAorCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQlwY2lfdW5tYXBfbGVuX3NldCgmdHgtPmluZm9baWR4XSwgbGVuLCAwKTsKKwkJCXR4LT5pbmZvW2lkeF0uc2tiID0gTlVMTDsKKwkJfQorCQlpZHggPSAoaWR4ICsgMSkgJiB0eC0+bWFzazsKKwl9IHdoaWxlIChpZHggIT0gbGFzdF9pZHgpOworCWlmIChza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm15cmkxMGdlOiAlczogVFNPIGJ1dCB3YW50ZWQgdG8gbGluZWFyaXplPyE/IT9cbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlpZiAoc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpKQorCQlnb3RvIGRyb3A7CisKKwltZ3AtPnR4X2xpbmVhcml6ZWQrKzsKKwlnb3RvIGFnYWluOworCitkcm9wOgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJbWdwLT5zdGF0cy50eF9kcm9wcGVkICs9IDE7CisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpteXJpMTBnZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gJm1ncC0+c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIG15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8qIGNhbiBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dHMsCisJICogcGFzcyAxIHRvIGZvcmNlIGF0b21pY2l0eSBpbiBteXJpMTBnZV9zZW5kX2NtZCgpICovCisJbXlyaTEwZ2VfY2hhbmdlX3Byb21pc2MobmV0ZGV2X3ByaXYoZGV2KSwgZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDLCAxKTsKK30KKworc3RhdGljIGludCBteXJpMTBnZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gYWRkcjsKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHNhLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJc3RhdHVzID0gbXlyaTEwZ2VfdXBkYXRlX21hY19hZGRyZXNzKG1ncCwgc2EtPnNhX2RhdGEpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJteXJpMTBnZTogJXM6IGNoYW5naW5nIG1hYyBhZGRyZXNzIGZhaWxlZCB3aXRoICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIGNoYW5nZSB0aGUgZGV2IHN0cnVjdHVyZSAqLworCW1lbWNweShkZXYtPmRldl9hZGRyLCBzYS0+c2FfZGF0YSwgNik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChFVEhfSExFTiArIG5ld19tdHUgPiBNWVJJMTBHRV9NQVhfRVRIRVJfTVRVKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogbmV3IG10dSAoJWQpIGlzIG5vdCB2YWxpZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbmV3X210dSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwcmludGsoS0VSTl9JTkZPICIlczogY2hhbmdpbmcgbXR1IGZyb20gJWQgdG8gJWRcbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5tdHUsIG5ld19tdHUpOworCWlmIChtZ3AtPnJ1bm5pbmcpIHsKKwkJLyogaWYgd2UgY2hhbmdlIHRoZSBtdHUgb24gYW4gYWN0aXZlIGRldmljZSwgd2UgbXVzdAorCQkgKiByZXNldCB0aGUgZGV2aWNlIHNvIHRoZSBmaXJtd2FyZSBzZWVzIHRoZSBjaGFuZ2UgKi8KKwkJbXlyaTEwZ2VfY2xvc2UoZGV2KTsKKwkJZGV2LT5tdHUgPSBuZXdfbXR1OworCQlteXJpMTBnZV9vcGVuKGRldik7CisJfSBlbHNlCisJCWRldi0+bXR1ID0gbmV3X210dTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIEVuYWJsZSBFQ1JDIHRvIGFsaWduIFBDSS1FIENvbXBsZXRpb24gcGFja2V0cyBvbiBhbiA4LWJ5dGUgYm91bmRhcnkuCisgKiBPbmx5IGRvIGl0IGlmIHRoZSBicmlkZ2UgaXMgYSByb290IHBvcnQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBkaXN0dXJiCisgKiBhbnkgb3RoZXIgZGV2aWNlLCBleGNlcHQgaWYgZm9yY2VkIHdpdGggbXlyaTEwZ2VfZWNyY19lbmFibGUgPiAxLgorICovCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X1BDSUUJMHgwMDVkCisKK3N0YXRpYyB2b2lkIG15cmkxMGdlX2VuYWJsZV9lY3JjKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IG1ncC0+cGRldi0+YnVzLT5zZWxmOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZ3AtPnBkZXYtPmRldjsKKwl1bnNpZ25lZCBjYXA7CisJdW5zaWduZWQgZXJyX2NhcDsKKwl1MTYgdmFsOworCXU4IGV4dF90eXBlOworCWludCByZXQ7CisKKwlpZiAoIW15cmkxMGdlX2VjcmNfZW5hYmxlIHx8ICFicmlkZ2UpCisJCXJldHVybjsKKworCS8qIGNoZWNrIHRoYXQgdGhlIGJyaWRnZSBpcyBhIHJvb3QgcG9ydCAqLworCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlLCBjYXAgKyBQQ0lfQ0FQX0ZMQUdTLCAmdmFsKTsKKwlleHRfdHlwZSA9ICh2YWwgJiBQQ0lfRVhQX0ZMQUdTX1RZUEUpID4+IDQ7CisJaWYgKGV4dF90eXBlICE9IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQpIHsKKwkJaWYgKG15cmkxMGdlX2VjcmNfZW5hYmxlID4gMSkgeworCQkJc3RydWN0IHBjaV9kZXYgKm9sZF9icmlkZ2UgPSBicmlkZ2U7CisKKwkJCS8qIFdhbGsgdGhlIGhpZXJhcmNoeSB1cCB0byB0aGUgcm9vdCBwb3J0CisJCQkgKiB3aGVyZSBFQ1JDIGhhcyB0byBiZSBlbmFibGVkICovCisJCQlkbyB7CisJCQkJYnJpZGdlID0gYnJpZGdlLT5idXMtPnNlbGY7CisJCQkJaWYgKCFicmlkZ2UpIHsKKwkJCQkJZGV2X2VycihkZXYsCisJCQkJCQkiRmFpbGVkIHRvIGZpbmQgcm9vdCBwb3J0IgorCQkJCQkJIiB0byBmb3JjZSBFQ1JDXG4iKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQljYXAgPQorCQkJCSAgICBwY2lfZmluZF9jYXBhYmlsaXR5KGJyaWRnZSwgUENJX0NBUF9JRF9FWFApOworCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwKKwkJCQkJCSAgICAgY2FwICsgUENJX0NBUF9GTEFHUywgJnZhbCk7CisJCQkJZXh0X3R5cGUgPSAodmFsICYgUENJX0VYUF9GTEFHU19UWVBFKSA+PiA0OworCQkJfSB3aGlsZSAoZXh0X3R5cGUgIT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCk7CisKKwkJCWRldl9pbmZvKGRldiwKKwkJCQkgIkZvcmNpbmcgRUNSQyBvbiBub24tcm9vdCBwb3J0ICVzIgorCQkJCSAiIChlbmFibGluZyBvbiByb290IHBvcnQgJXMpXG4iLAorCQkJCSBwY2lfbmFtZShvbGRfYnJpZGdlKSwgcGNpX25hbWUoYnJpZGdlKSk7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiTm90IGVuYWJsaW5nIEVDUkMgb24gbm9uLXJvb3QgcG9ydCAlc1xuIiwKKwkJCQlwY2lfbmFtZShicmlkZ2UpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWNhcCA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGJyaWRnZSwgUENJX0VYVF9DQVBfSURfRVJSKTsKKwkvKiBudmlkaWEgZXh0IGNhcCBpcyBub3QgYWx3YXlzIGxpbmtlZCBpbiBleHQgY2FwIGNoYWluICovCisJaWYgKCFjYXAKKwkgICAgJiYgYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OVklESUEKKwkgICAgJiYgYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X1BDSUUpCisJCWNhcCA9IDB4MTYwOworCisJaWYgKCFjYXApCisJCXJldHVybjsKKworCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2UsIGNhcCArIFBDSV9FUlJfQ0FQLCAmZXJyX2NhcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCByZWFkaW5nIGV4dC1jb25mLXNwYWNlIG9mICVzXG4iLAorCQkJcGNpX25hbWUoYnJpZGdlKSk7CisJCWRldl9lcnIoZGV2LCAiXHQgcGNpPW5vbW1jb25mIGluIHVzZT8gIgorCQkJIm9yIGJ1Z2d5L2luY29tcGxldGUvYWJzZW50IEFDUEkgTUNGRyBhdHRyP1xuIik7CisJCXJldHVybjsKKwl9CisJaWYgKCEoZXJyX2NhcCAmIFBDSV9FUlJfQ0FQX0VDUkNfR0VOQykpCisJCXJldHVybjsKKworCWVycl9jYXAgfD0gUENJX0VSUl9DQVBfRUNSQ19HRU5FOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBjYXAgKyBQQ0lfRVJSX0NBUCwgZXJyX2NhcCk7CisJZGV2X2luZm8oZGV2LCAiRW5hYmxlZCBFQ1JDIG9uIHVwc3RyZWFtIGJyaWRnZSAlc1xuIiwgcGNpX25hbWUoYnJpZGdlKSk7CisJbWdwLT50eC5ib3VuZGFyeSA9IDQwOTY7CisJbWdwLT5md19uYW1lID0gbXlyaTEwZ2VfZndfYWxpZ25lZDsKK30KKworLyoKKyAqIFRoZSBMYW5haSBaOEUgUENJLUUgaW50ZXJmYWNlIGFjaGlldmVzIGhpZ2hlciBSZWFkLURNQSB0aHJvdWdocHV0CisgKiB3aGVuIHRoZSBQQ0ktRSBDb21wbGV0aW9uIHBhY2tldHMgYXJlIGFsaWduZWQgb24gYW4gOC1ieXRlCisgKiBib3VuZGFyeS4gIFNvbWUgUENJLUUgY2hpcCBzZXRzIGFsd2F5cyBhbGlnbiBDb21wbGV0aW9uIHBhY2tldHM7IG9uCisgKiB0aGUgb25lcyB0aGF0IGRvIG5vdCwgdGhlIGFsaWdubWVudCBjYW4gYmUgZW5mb3JjZWQgYnkgZW5hYmxpbmcKKyAqIEVDUkMgZ2VuZXJhdGlvbiAoaWYgc3VwcG9ydGVkKS4KKyAqCisgKiBXaGVuIFBDSS1FIENvbXBsZXRpb24gcGFja2V0cyBhcmUgbm90IGFsaWduZWQsIGl0IGlzIGFjdHVhbGx5IG1vcmUKKyAqIGVmZmljaWVudCB0byBsaW1pdCBSZWFkLURNQSB0cmFuc2FjdGlvbnMgdG8gMktCLCByYXRoZXIgdGhhbiA0S0IuCisgKgorICogSWYgdGhlIGRyaXZlciBjYW4gbmVpdGhlciBlbmFibGUgRUNSQyBub3IgdmVyaWZ5IHRoYXQgaXQgaGFzCisgKiBhbHJlYWR5IGJlZW4gZW5hYmxlZCwgdGhlbiBpdCBtdXN0IHVzZSBhIGZpcm13YXJlIGltYWdlIHdoaWNoIHdvcmtzCisgKiBhcm91bmQgdW5hbGlnbmVkIGNvbXBsZXRpb24gcGFja2V0cyAobXlyaTEwZ2VfZXRocF96OGUuZGF0KSwgYW5kIGl0CisgKiBzaG91bGQgYWxzbyBlbnN1cmUgdGhhdCBpdCBuZXZlciBnaXZlcyB0aGUgZGV2aWNlIGEgUmVhZC1ETUEgd2hpY2ggaXMKKyAqIGxhcmdlciB0aGFuIDJLQiBieSBzZXR0aW5nIHRoZSB0eC5ib3VuZGFyeSB0byAyS0IuICBJZiBFQ1JDIGlzCisgKiBlbmFibGVkLCB0aGVuIHRoZSBkcml2ZXIgc2hvdWxkIHVzZSB0aGUgYWxpZ25lZCAobXlyaTEwZ2VfZXRoX3o4ZS5kYXQpCisgKiBmaXJtd2FyZSBpbWFnZSwgYW5kIHNldCB0eC5ib3VuZGFyeSB0byA0S0IuCisgKi8KKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMjAwMF9QQ0lFCTB4MDEzMgorCitzdGF0aWMgdm9pZCBteXJpMTBnZV9zZWxlY3RfZmlybXdhcmUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gbWdwLT5wZGV2LT5idXMtPnNlbGY7CisKKwltZ3AtPnR4LmJvdW5kYXJ5ID0gMjA0ODsKKwltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md191bmFsaWduZWQ7CisKKwlpZiAobXlyaTEwZ2VfZm9yY2VfZmlybXdhcmUgPT0gMCkgeworCQlteXJpMTBnZV9lbmFibGVfZWNyYyhtZ3ApOworCisJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgdXBzdHJlYW0gYnJpZGdlIGlzIGtub3duIHRvCisJCSAqIHByb3ZpZGUgYWxpZ25lZCBjb21wbGV0aW9ucyAqLworCQlpZiAoYnJpZGdlCisJCSAgICAvKiBTZXJ2ZXJXb3JrcyBIVDIwMDAvSFQxMDAwICovCisJCSAgICAmJiBicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTCisJCSAgICAmJiBicmlkZ2UtPmRldmljZSA9PQorCQkgICAgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDIwMDBfUENJRSkgeworCQkJZGV2X2luZm8oJm1ncC0+cGRldi0+ZGV2LAorCQkJCSAiQXNzdW1pbmcgYWxpZ25lZCBjb21wbGV0aW9ucyAoMHgleDoweCV4KVxuIiwKKwkJCQkgYnJpZGdlLT52ZW5kb3IsIGJyaWRnZS0+ZGV2aWNlKTsKKwkJCW1ncC0+dHguYm91bmRhcnkgPSA0MDk2OworCQkJbWdwLT5md19uYW1lID0gbXlyaTEwZ2VfZndfYWxpZ25lZDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChteXJpMTBnZV9mb3JjZV9maXJtd2FyZSA9PSAxKSB7CisJCQlkZXZfaW5mbygmbWdwLT5wZGV2LT5kZXYsCisJCQkJICJBc3N1bWluZyBhbGlnbmVkIGNvbXBsZXRpb25zIChmb3JjZWQpXG4iKTsKKwkJCW1ncC0+dHguYm91bmRhcnkgPSA0MDk2OworCQkJbWdwLT5md19uYW1lID0gbXlyaTEwZ2VfZndfYWxpZ25lZDsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwKKwkJCQkgIkFzc3VtaW5nIHVuYWxpZ25lZCBjb21wbGV0aW9ucyAoZm9yY2VkKVxuIik7CisJCQltZ3AtPnR4LmJvdW5kYXJ5ID0gMjA0ODsKKwkJCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X3VuYWxpZ25lZDsKKwkJfQorCX0KKwlpZiAobXlyaTEwZ2VfZndfbmFtZSAhPSBOVUxMKSB7CisJCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwgIm92ZXJyaWRpbmcgZmlybXdhcmUgdG8gJXNcbiIsCisJCQkgbXlyaTEwZ2VfZndfbmFtZSk7CisJCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X25hbWU7CisJfQorfQorCitzdGF0aWMgdm9pZCBteXJpMTBnZV9zYXZlX3N0YXRlKHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3ApCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJaW50IGNhcDsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCS8qIG5vdyBzYXZlIFBDSWUgYW5kIE1TSSBzdGF0ZSB0aGF0IExpbnV4IHdpbGwgbm90CisJICogc2F2ZSBmb3IgdXMgKi8KKwljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgY2FwICsgUENJX0VYUF9ERVZDVEwsICZtZ3AtPmRldmN0bCk7CisJY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgY2FwICsgUENJX01TSV9GTEFHUywgJm1ncC0+bXNpX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXlyaTEwZ2VfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWdwLT5wZGV2OworCWludCBjYXA7CisKKwkvKiByZXN0b3JlIFBDSWUgYW5kIE1TSSBzdGF0ZSB0aGF0IGxpbnV4IHdpbGwgbm90ICovCisJY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBjYXAgKyBQQ0lfQ0FQX0lEX0VYUCwgbWdwLT5kZXZjdGwpOworCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0kpOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBjYXAgKyBQQ0lfTVNJX0ZMQUdTLCBtZ3AtPm1zaV9mbGFncyk7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IG15cmkxMGdlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwltZ3AgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKG1ncCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwluZXRkZXYgPSBtZ3AtPmRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm15cmkxMGdlOiBjbG9zaW5nICVzXG4iLCBuZXRkZXYtPm5hbWUpOworCQlydG5sX2xvY2soKTsKKwkJbXlyaTEwZ2VfY2xvc2UobmV0ZGV2KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisJbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIDApOworCWZyZWVfaXJxKHBkZXYtPmlycSwgbWdwKTsKKwlteXJpMTBnZV9zYXZlX3N0YXRlKG1ncCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJaW50IHN0YXR1czsKKwl1MTYgdmVuZG9yOworCisJbWdwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChtZ3AgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbmV0ZGV2ID0gbWdwLT5kZXY7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsJLyogemVyb3MgY29uZiBzcGFjZSBhcyBhIHNpZGUgZWZmZWN0ICovCisJbXNsZWVwKDUpOwkJLyogZ2l2ZSBjYXJkIHRpbWUgdG8gcmVzcG9uZCAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKG1ncC0+cGRldiwgUENJX1ZFTkRPUl9JRCwgJnZlbmRvcik7CisJaWYgKHZlbmRvciA9PSAweGZmZmYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGRldmljZSBkaXNhcHBlYXJlZCFcbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCXJldHVybiAtRUlPOworCX0KKwlteXJpMTBnZV9yZXN0b3JlX3N0YXRlKG1ncCk7CisJcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG15cmkxMGdlX2ludHIsIFNBX1NISVJRLAorCQkJICAgICBuZXRkZXYtPm5hbWUsIG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQlnb3RvIGFib3J0X3dpdGhfbXNpOworCX0KKworCW15cmkxMGdlX3Jlc2V0KG1ncCk7CisJbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIG1ncC0+dHguYm91bmRhcnkgIT0gNDA5Nik7CisKKwkvKiBTYXZlIGNvbmZpZ3VyYXRpb24gc3BhY2UgdG8gYmUgcmVzdG9yZWQgaWYgdGhlCisJICogbmljIHJlc2V0cyBkdWUgdG8gYSBwYXJpdHkgZXJyb3IgKi8KKwlteXJpMTBnZV9zYXZlX3N0YXRlKG1ncCk7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXJ0bmxfbG9jaygpOworCQlteXJpMTBnZV9vcGVuKG5ldGRldik7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKworCXJldHVybiAwOworCithYm9ydF93aXRoX21zaToKKwlyZXR1cm4gLUVJTzsKKworfQorCisjZW5kaWYJCQkJLyogQ09ORklHX1BNICovCisKK3N0YXRpYyB1MzIgbXlyaTEwZ2VfcmVhZF9yZWJvb3Qoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1ncC0+cGRldjsKKwlpbnQgdnMgPSBtZ3AtPnZlbmRvcl9zcGVjaWZpY19vZmZzZXQ7CisJdTMyIHJlYm9vdDsKKworCS8qZW50ZXIgcmVhZDMyIG1vZGUgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgdnMgKyAweDEwLCAweDMpOworCisJLypyZWFkIFJFQk9PVF9TVEFUVVMgKDB4ZmZmZmZmZjApICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCB2cyArIDB4MTgsIDB4ZmZmZmZmZjApOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCB2cyArIDB4MTQsICZyZWJvb3QpOworCXJldHVybiByZWJvb3Q7Cit9CisKKy8qCisgKiBUaGlzIHdhdGNoZG9nIGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgYm9hcmQgaGFzIHN1ZmZlcmVkCisgKiBmcm9tIGEgcGFyaXR5IGVycm9yIGFuZCBuZWVkcyB0byBiZSByZWNvdmVyZWQuCisgKi8KK3N0YXRpYyB2b2lkIG15cmkxMGdlX3dhdGNoZG9nKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gYXJnOworCXUzMiByZWJvb3Q7CisJaW50IHN0YXR1czsKKwl1MTYgY21kLCB2ZW5kb3I7CisKKwltZ3AtPndhdGNoZG9nX3Jlc2V0cysrOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKG1ncC0+cGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCWlmICgoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSA9PSAwKSB7CisJCS8qIEJ1cyBtYXN0ZXIgRE1BIGRpc2FibGVkPyAgQ2hlY2sgdG8gc2VlCisJCSAqIGlmIHRoZSBjYXJkIHJlYm9vdGVkIGR1ZSB0byBhIHBhcml0eSBlcnJvcgorCQkgKiBGb3Igbm93LCBqdXN0IHJlcG9ydCBpdCAqLworCQlyZWJvb3QgPSBteXJpMTBnZV9yZWFkX3JlYm9vdChtZ3ApOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJteXJpMTBnZTogJXM6IE5JQyByZWJvb3RlZCAoMHgleCksIHJlc2V0dGluZ1xuIiwKKwkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCByZWJvb3QpOworCQkvKgorCQkgKiBBIHJlYm9vdGVkIG5pYyB3aWxsIGNvbWUgYmFjayB3aXRoIGNvbmZpZyBzcGFjZSBhcworCQkgKiBpdCB3YXMgYWZ0ZXIgcG93ZXIgd2FzIGFwcGxpZWQgdG8gUENJZSBidXMuCisJCSAqIEF0dGVtcHQgdG8gcmVzdG9yZSBjb25maWcgc3BhY2Ugd2hpY2ggd2FzIHNhdmVkCisJCSAqIHdoZW4gdGhlIGRyaXZlciB3YXMgbG9hZGVkLCBvciB0aGUgbGFzdCB0aW1lIHRoZQorCQkgKiBuaWMgd2FzIHJlc3VtZWQgZnJvbSBwb3dlciBzYXZpbmcgbW9kZS4KKwkJICovCisJCW15cmkxMGdlX3Jlc3RvcmVfc3RhdGUobWdwKTsKKwl9IGVsc2UgeworCQkvKiBpZiB3ZSBnZXQgYmFjayAtMSdzIGZyb20gb3VyIHNsb3QsIHBlcmhhcHMgc29tZWJvZHkKKwkJICogcG93ZXJlZCBvZmYgb3VyIGNhcmQuICBEb24ndCB0cnkgdG8gcmVzZXQgaXQgaW4KKwkJICogdGhpcyBjYXNlICovCisJCWlmIChjbWQgPT0gMHhmZmZmKSB7CisJCQlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIFBDSV9WRU5ET1JfSUQsICZ2ZW5kb3IpOworCQkJaWYgKHZlbmRvciA9PSAweGZmZmYpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIm15cmkxMGdlOiAlczogZGV2aWNlIGRpc2FwcGVhcmVkIVxuIiwKKwkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQkvKiBQZXJoYXBzIGl0IGlzIGEgc29mdHdhcmUgZXJyb3IuICBUcnkgdG8gcmVzZXQgKi8KKworCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogZGV2aWNlIHRpbWVvdXQsIHJlc2V0dGluZ1xuIiwKKwkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXlyaTEwZ2U6ICVzOiAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCBtZ3AtPnR4LnJlcSwgbWdwLT50eC5kb25lLAorCQkgICAgICAgbWdwLT50eC5wa3Rfc3RhcnQsIG1ncC0+dHgucGt0X2RvbmUsCisJCSAgICAgICAoaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPnNlbmRfZG9uZV9jb3VudCkpOworCQltc2xlZXAoMjAwMCk7CisJCXByaW50ayhLRVJOX0lORk8gIm15cmkxMGdlOiAlczogJWQgJWQgJWQgJWQgJWRcbiIsCisJCSAgICAgICBtZ3AtPmRldi0+bmFtZSwgbWdwLT50eC5yZXEsIG1ncC0+dHguZG9uZSwKKwkJICAgICAgIG1ncC0+dHgucGt0X3N0YXJ0LCBtZ3AtPnR4LnBrdF9kb25lLAorCQkgICAgICAgKGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5zZW5kX2RvbmVfY291bnQpKTsKKwl9CisJcnRubF9sb2NrKCk7CisJbXlyaTEwZ2VfY2xvc2UobWdwLT5kZXYpOworCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfZmlybXdhcmUobWdwKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZVxuIiwKKwkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwllbHNlCisJCW15cmkxMGdlX29wZW4obWdwLT5kZXYpOworCXJ0bmxfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBXZSB1c2Ugb3VyIG93biB0aW1lciByb3V0aW5lIHJhdGhlciB0aGFuIHJlbHlpbmcgdXBvbgorICogbmV0ZGV2LT50eF90aW1lb3V0IGJlY2F1c2Ugd2UgaGF2ZSBhIHZlcnkgbGFyZ2UgaGFyZHdhcmUgdHJhbnNtaXQKKyAqIHF1ZXVlLiAgRHVlIHRvIHRoZSBsYXJnZSBxdWV1ZSwgdGhlIG5ldGRldi0+dHhfdGltZW91dCBmdW5jdGlvbgorICogY2Fubm90IGRldGVjdCBhIE5JQyB3aXRoIGEgcGFyaXR5IGVycm9yIGluIGEgdGltZWx5IGZhc2hpb24gaWYgdGhlCisgKiBOSUMgaXMgbGlnaHRseSBsb2FkZWQuCisgKi8KK3N0YXRpYyB2b2lkIG15cmkxMGdlX3dhdGNoZG9nX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CisKKwltZ3AgPSAoc3RydWN0IG15cmkxMGdlX3ByaXYgKilhcmc7CisJaWYgKG1ncC0+dHgucmVxICE9IG1ncC0+dHguZG9uZSAmJgorCSAgICBtZ3AtPnR4LmRvbmUgPT0gbWdwLT53YXRjaGRvZ190eF9kb25lKQorCQkvKiBuaWMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBzdHVjay4uICovCisJCXNjaGVkdWxlX3dvcmsoJm1ncC0+d2F0Y2hkb2dfd29yayk7CisJZWxzZQorCQkvKiByZWFybSB0aW1lciAqLworCQltb2RfdGltZXIoJm1ncC0+d2F0Y2hkb2dfdGltZXIsCisJCQkgIGppZmZpZXMgKyBteXJpMTBnZV93YXRjaGRvZ190aW1lb3V0ICogSFopOworCisJbWdwLT53YXRjaGRvZ190eF9kb25lID0gbWdwLT50eC5kb25lOworfQorCitzdGF0aWMgaW50IG15cmkxMGdlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXNpemVfdCBieXRlczsKKwlpbnQgaTsKKwlpbnQgc3RhdHVzID0gLUVOWElPOworCWludCBjYXA7CisJaW50IGRhY19lbmFibGVkOworCXUxNiB2YWw7CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKm1ncCkpOworCWlmIChuZXRkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBldGhlcm5ldCBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCW1lbXNldChtZ3AsIDAsIHNpemVvZigqbWdwKSk7CisJbWdwLT5kZXYgPSBuZXRkZXY7CisJbWdwLT5wZGV2ID0gcGRldjsKKwltZ3AtPmNzdW1fZmxhZyA9IE1YR0VGV19GTEFHU19DS1NVTTsKKwltZ3AtPnBhdXNlID0gbXlyaTEwZ2VfZmxvd19jb250cm9sOworCW1ncC0+aW50cl9jb2FsX2RlbGF5ID0gbXlyaTEwZ2VfaW50cl9jb2FsX2RlbGF5OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1ncC0+ZG93bl93cSk7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgY2FsbCBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGFib3J0X3dpdGhfbmV0ZGV2OworCX0KKwlteXJpMTBnZV9zZWxlY3RfZmlybXdhcmUobWdwKTsKKworCS8qIEZpbmQgdGhlIHZlbmRvci1zcGVjaWZpYyBjYXAgc28gd2UgY2FuIGNoZWNrCisJICogdGhlIHJlYm9vdCByZWdpc3RlciBsYXRlciBvbiAqLworCW1ncC0+dmVuZG9yX3NwZWNpZmljX29mZnNldAorCSAgICA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9WTkRSKTsKKworCS8qIFNldCBvdXIgbWF4IHJlYWQgcmVxdWVzdCB0byA0S0IgKi8KKwljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoY2FwIDwgNjQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQmFkIFBDSV9DQVBfSURfRVhQIGxvY2F0aW9uICVkXG4iLCBjYXApOworCQlnb3RvIGFib3J0X3dpdGhfbmV0ZGV2OworCX0KKwlzdGF0dXMgPSBwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBjYXAgKyBQQ0lfRVhQX0RFVkNUTCwgJnZhbCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yICVkIHJlYWRpbmcgUENJX0VYUF9ERVZDVExcbiIsCisJCQlzdGF0dXMpOworCQlnb3RvIGFib3J0X3dpdGhfbmV0ZGV2OworCX0KKwl2YWwgPSAodmFsICYgflBDSV9FWFBfREVWQ1RMX1JFQURSUSkgfCAoNSA8PCAxMik7CisJc3RhdHVzID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIGNhcCArIFBDSV9FWFBfREVWQ1RMLCB2YWwpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciAlZCB3cml0aW5nIFBDSV9FWFBfREVWQ1RMXG4iLAorCQkJc3RhdHVzKTsKKwkJZ290byBhYm9ydF93aXRoX25ldGRldjsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwlkYWNfZW5hYmxlZCA9IDE7CisJc3RhdHVzID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRhY19lbmFibGVkID0gMDsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIjY0LWJpdCBwY2kgYWRkcmVzcyBtYXNrIHdhcyByZWZ1c2VkLCB0cnlpbmcgMzItYml0Iik7CisJCXN0YXR1cyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCX0KKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgJWQgc2V0dGluZyBETUEgbWFza1xuIiwgc3RhdHVzKTsKKwkJZ290byBhYm9ydF93aXRoX25ldGRldjsKKwl9CisJbWdwLT5jbWQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCptZ3AtPmNtZCksCisJCQkJICAgICAgJm1ncC0+Y21kX2J1cywgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncC0+Y21kID09IE5VTEwpCisJCWdvdG8gYWJvcnRfd2l0aF9uZXRkZXY7CisKKwltZ3AtPmZ3X3N0YXRzID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqbWdwLT5md19zdGF0cyksCisJCQkJCSAgICZtZ3AtPmZ3X3N0YXRzX2J1cywgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncC0+Zndfc3RhdHMgPT0gTlVMTCkKKwkJZ290byBhYm9ydF93aXRoX2NtZDsKKworCW1ncC0+Ym9hcmRfc3BhbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJbWdwLT5pb21lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCW1ncC0+bXRyciA9IC0xOworI2lmZGVmIENPTkZJR19NVFJSCisJbWdwLT5tdHJyID0gbXRycl9hZGQobWdwLT5pb21lbV9iYXNlLCBtZ3AtPmJvYXJkX3NwYW4sCisJCQkgICAgIE1UUlJfVFlQRV9XUkNPTUIsIDEpOworI2VuZGlmCisJLyogSGFjay4gIG5lZWQgdG8gZ2V0IHJpZCBvZiB0aGVzZSBtYWdpYyBudW1iZXJzICovCisJbWdwLT5zcmFtX3NpemUgPQorCSAgICAyICogMTAyNCAqIDEwMjQgLSAoMiAqICg0OCAqIDEwMjQpICsgKDMyICogMTAyNCkpIC0gMHgxMDA7CisJaWYgKG1ncC0+c3JhbV9zaXplID4gbWdwLT5ib2FyZF9zcGFuKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImJvYXJkIHNwYW4gJWxkIGJ5dGVzIHRvbyBzbWFsbFxuIiwKKwkJCW1ncC0+Ym9hcmRfc3Bhbik7CisJCWdvdG8gYWJvcnRfd2l0aF93YzsKKwl9CisJbWdwLT5zcmFtID0gaW9yZW1hcChtZ3AtPmlvbWVtX2Jhc2UsIG1ncC0+Ym9hcmRfc3Bhbik7CisJaWYgKG1ncC0+c3JhbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkIGZvciAlbGQgYnl0ZXMgYXQgMHglbHhcbiIsCisJCQltZ3AtPmJvYXJkX3NwYW4sIG1ncC0+aW9tZW1fYmFzZSk7CisJCXN0YXR1cyA9IC1FTlhJTzsKKwkJZ290byBhYm9ydF93aXRoX3djOworCX0KKwltZW1jcHlfZnJvbWlvKG1ncC0+ZWVwcm9tX3N0cmluZ3MsCisJCSAgICAgIG1ncC0+c3JhbSArIG1ncC0+c3JhbV9zaXplIC0gTVlSSTEwR0VfRUVQUk9NX1NUUklOR1NfU0laRSwKKwkJICAgICAgTVlSSTEwR0VfRUVQUk9NX1NUUklOR1NfU0laRSk7CisJbWVtc2V0KG1ncC0+ZWVwcm9tX3N0cmluZ3MgKyBNWVJJMTBHRV9FRVBST01fU1RSSU5HU19TSVpFIC0gMiwgMCwgMik7CisJc3RhdHVzID0gbXlyaTEwZ2VfcmVhZF9tYWNfYWRkcihtZ3ApOworCWlmIChzdGF0dXMpCisJCWdvdG8gYWJvcnRfd2l0aF9pb3JlbWFwOworCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSBtZ3AtPm1hY19hZGRyW2ldOworCisJLyogYWxsb2NhdGUgcnggZG9uZSByaW5nICovCisJYnl0ZXMgPSBteXJpMTBnZV9tYXhfaW50cl9zbG90cyAqIHNpemVvZigqbWdwLT5yeF9kb25lLmVudHJ5KTsKKwltZ3AtPnJ4X2RvbmUuZW50cnkgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgYnl0ZXMsCisJCQkJCQkmbWdwLT5yeF9kb25lLmJ1cywgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncC0+cnhfZG9uZS5lbnRyeSA9PSBOVUxMKQorCQlnb3RvIGFib3J0X3dpdGhfaW9yZW1hcDsKKwltZW1zZXQobWdwLT5yeF9kb25lLmVudHJ5LCAwLCBieXRlcyk7CisKKwlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iKTsKKwkJZ290byBhYm9ydF93aXRoX3J4X2RvbmU7CisJfQorCisJc3RhdHVzID0gbXlyaTEwZ2VfcmVzZXQobWdwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHJlc2V0XG4iKTsKKwkJZ290byBhYm9ydF93aXRoX2Zpcm13YXJlOworCX0KKworCWlmIChteXJpMTBnZV9tc2kpIHsKKwkJc3RhdHVzID0gcGNpX2VuYWJsZV9tc2kocGRldik7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiRXJyb3IgJWQgc2V0dGluZyB1cCBNU0k7IGZhbGxpbmcgYmFjayB0byB4UElDXG4iLAorCQkJCXN0YXR1cyk7CisJCWVsc2UKKwkJCW1ncC0+bXNpX2VuYWJsZWQgPSAxOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgbXlyaTEwZ2VfaW50ciwgU0FfU0hJUlEsCisJCQkgICAgIG5ldGRldi0+bmFtZSwgbWdwKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIElSUVxuIik7CisJCWdvdG8gYWJvcnRfd2l0aF9maXJtd2FyZTsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgbWdwKTsKKwlpZiAoKG15cmkxMGdlX2luaXRpYWxfbXR1ICsgRVRIX0hMRU4pID4gTVlSSTEwR0VfTUFYX0VUSEVSX01UVSkKKwkJbXlyaTEwZ2VfaW5pdGlhbF9tdHUgPSBNWVJJMTBHRV9NQVhfRVRIRVJfTVRVIC0gRVRIX0hMRU47CisJaWYgKChteXJpMTBnZV9pbml0aWFsX210dSArIEVUSF9ITEVOKSA8IDY4KQorCQlteXJpMTBnZV9pbml0aWFsX210dSA9IDY4OworCW5ldGRldi0+bXR1ID0gbXlyaTEwZ2VfaW5pdGlhbF9tdHU7CisJbmV0ZGV2LT5vcGVuID0gbXlyaTEwZ2Vfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSBteXJpMTBnZV9jbG9zZTsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG15cmkxMGdlX3htaXQ7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBteXJpMTBnZV9nZXRfc3RhdHM7CisJbmV0ZGV2LT5iYXNlX2FkZHIgPSBtZ3AtPmlvbWVtX2Jhc2U7CisJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisJbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gbXlyaTEwZ2VfY2hhbmdlX210dTsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdDsKKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG15cmkxMGdlX3NldF9tYWNfYWRkcmVzczsKKwluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfVFNPOworCWlmIChkYWNfZW5hYmxlZCkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJbmV0ZGV2LT5wb2xsID0gbXlyaTEwZ2VfcG9sbDsKKwluZXRkZXYtPndlaWdodCA9IG15cmkxMGdlX25hcGlfd2VpZ2h0OworCisJLyogU2F2ZSBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGJlIHJlc3RvcmVkIGlmIHRoZQorCSAqIG5pYyByZXNldHMgZHVlIHRvIGEgcGFyaXR5IGVycm9yICovCisJbXlyaTEwZ2Vfc2F2ZV9zdGF0ZShtZ3ApOworCS8qIFJlc3RvcmUgc3RhdGUgaW1tZWRpYXRlbHkgc2luY2UgcGNpX3NhdmVfbXNpX3N0YXRlIGRpc2FibGVzIE1TSSAqLworCW15cmkxMGdlX3Jlc3RvcmVfc3RhdGUobWdwKTsKKworCS8qIFNldHVwIHRoZSB3YXRjaGRvZyB0aW1lciAqLworCXNldHVwX3RpbWVyKCZtZ3AtPndhdGNoZG9nX3RpbWVyLCBteXJpMTBnZV93YXRjaGRvZ190aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKW1ncCk7CisKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmbXlyaTEwZ2VfZXRodG9vbF9vcHMpOworCUlOSVRfV09SSygmbWdwLT53YXRjaGRvZ193b3JrLCBteXJpMTBnZV93YXRjaGRvZywgbWdwKTsKKwlzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZDogJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8gYWJvcnRfd2l0aF9pcnE7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAibXlyaTEwZ2U6ICVzOiAlcyBJUlEgJWQsIHR4IGJuZHJ5ICVkLCBmdyAlcywgV0MgJXNcbiIsCisJICAgICAgIG5ldGRldi0+bmFtZSwgKG1ncC0+bXNpX2VuYWJsZWQgPyAiTVNJIiA6ICJ4UElDIiksCisJICAgICAgIHBkZXYtPmlycSwgbWdwLT50eC5ib3VuZGFyeSwgbWdwLT5md19uYW1lLAorCSAgICAgICAobWdwLT5tdHJyID49IDAgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKSk7CisKKwlyZXR1cm4gMDsKKworYWJvcnRfd2l0aF9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBtZ3ApOworCWlmIChtZ3AtPm1zaV9lbmFibGVkKQorCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisKK2Fib3J0X3dpdGhfZmlybXdhcmU6CisJbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIDApOworCithYm9ydF93aXRoX3J4X2RvbmU6CisJYnl0ZXMgPSBteXJpMTBnZV9tYXhfaW50cl9zbG90cyAqIHNpemVvZigqbWdwLT5yeF9kb25lLmVudHJ5KTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBieXRlcywKKwkJCSAgbWdwLT5yeF9kb25lLmVudHJ5LCBtZ3AtPnJ4X2RvbmUuYnVzKTsKKworYWJvcnRfd2l0aF9pb3JlbWFwOgorCWlvdW5tYXAobWdwLT5zcmFtKTsKKworYWJvcnRfd2l0aF93YzoKKyNpZmRlZiBDT05GSUdfTVRSUgorCWlmIChtZ3AtPm10cnIgPj0gMCkKKwkJbXRycl9kZWwobWdwLT5tdHJyLCBtZ3AtPmlvbWVtX2Jhc2UsIG1ncC0+Ym9hcmRfc3Bhbik7CisjZW5kaWYKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKm1ncC0+Zndfc3RhdHMpLAorCQkJICBtZ3AtPmZ3X3N0YXRzLCBtZ3AtPmZ3X3N0YXRzX2J1cyk7CisKK2Fib3J0X3dpdGhfY21kOgorCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZigqbWdwLT5jbWQpLAorCQkJICBtZ3AtPmNtZCwgbWdwLT5jbWRfYnVzKTsKKworYWJvcnRfd2l0aF9uZXRkZXY6CisKKwlmcmVlX25ldGRldihuZXRkZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBteXJpMTBnZV9yZW1vdmUKKyAqCisgKiBEb2VzIHdoYXQgaXMgbmVjZXNzYXJ5IHRvIHNodXRkb3duIG9uZSBNeXJpbmV0IGRldmljZS4gQ2FsbGVkCisgKiAgIG9uY2UgZm9yIGVhY2ggTXlyaW5ldCBjYXJkIGJ5IHRoZSBrZXJuZWwgd2hlbiBhIG1vZHVsZSBpcworICogICB1bmxvYWRlZC4KKyAqLworc3RhdGljIHZvaWQgbXlyaTEwZ2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzaXplX3QgYnl0ZXM7CisKKwltZ3AgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKG1ncCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCW5ldGRldiA9IG1ncC0+ZGV2OworCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBtZ3ApOworCWlmIChtZ3AtPm1zaV9lbmFibGVkKQorCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisKKwlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgMCk7CisKKwlieXRlcyA9IG15cmkxMGdlX21heF9pbnRyX3Nsb3RzICogc2l6ZW9mKCptZ3AtPnJ4X2RvbmUuZW50cnkpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGJ5dGVzLAorCQkJICBtZ3AtPnJ4X2RvbmUuZW50cnksIG1ncC0+cnhfZG9uZS5idXMpOworCisJaW91bm1hcChtZ3AtPnNyYW0pOworCisjaWZkZWYgQ09ORklHX01UUlIKKwlpZiAobWdwLT5tdHJyID49IDApCisJCW10cnJfZGVsKG1ncC0+bXRyciwgbWdwLT5pb21lbV9iYXNlLCBtZ3AtPmJvYXJkX3NwYW4pOworI2VuZGlmCisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCptZ3AtPmZ3X3N0YXRzKSwKKwkJCSAgbWdwLT5md19zdGF0cywgbWdwLT5md19zdGF0c19idXMpOworCisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCptZ3AtPmNtZCksCisJCQkgIG1ncC0+Y21kLCBtZ3AtPmNtZF9idXMpOworCisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cit9CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWVJJQ09NX01ZUkkxMEdFX1o4RSAJMHgwMDA4CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBteXJpMTBnZV9wY2lfdGJsW10gPSB7CisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NWVJJQ09NLCBQQ0lfREVWSUNFX0lEX01ZUklDT01fTVlSSTEwR0VfWjhFKX0sCisJezB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG15cmkxMGdlX2RyaXZlciA9IHsKKwkubmFtZSA9ICJteXJpMTBnZSIsCisJLnByb2JlID0gbXlyaTEwZ2VfcHJvYmUsCisJLnJlbW92ZSA9IG15cmkxMGdlX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBteXJpMTBnZV9wY2lfdGJsLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gbXlyaTEwZ2Vfc3VzcGVuZCwKKwkucmVzdW1lID0gbXlyaTEwZ2VfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgX19pbml0IGludCBteXJpMTBnZV9pbml0X21vZHVsZSh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIiVzOiBWZXJzaW9uICVzXG4iLCBteXJpMTBnZV9kcml2ZXIubmFtZSwKKwkgICAgICAgTVlSSTEwR0VfVkVSU0lPTl9TVFIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZteXJpMTBnZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChteXJpMTBnZV9pbml0X21vZHVsZSk7CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBteXJpMTBnZV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXlyaTEwZ2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2V4aXQobXlyaTEwZ2VfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwLmggYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZjYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwLmgKQEAgLTAsMCArMSwyMDUgQEAKKyNpZm5kZWYgX19NWVJJMTBHRV9NQ1BfSF9fCisjZGVmaW5lIF9fTVlSSTEwR0VfTUNQX0hfXworCisjZGVmaW5lIE1YR0VGV19WRVJTSU9OX01BSk9SCTEKKyNkZWZpbmUgTVhHRUZXX1ZFUlNJT05fTUlOT1IJNAorCisvKiA4IEJ5dGVzICovCitzdHJ1Y3QgbWNwX2RtYV9hZGRyIHsKKwl1MzIgaGlnaDsKKwl1MzIgbG93OworfTsKKworLyogNCBCeXRlcyAqLworc3RydWN0IG1jcF9zbG90IHsKKwl1MTYgY2hlY2tzdW07CisJdTE2IGxlbmd0aDsKK307CisKKy8qIDY0IEJ5dGVzICovCitzdHJ1Y3QgbWNwX2NtZCB7CisJdTMyIGNtZDsKKwl1MzIgZGF0YTA7CQkvKiB3aWxsIGJlIGxvdyBwb3J0aW9uIGlmIGRhdGEgPiAzMiBiaXRzICovCisJLyogOCAqLworCXUzMiBkYXRhMTsJCS8qIHdpbGwgYmUgaGlnaCBwb3J0aW9uIGlmIGRhdGEgPiAzMiBiaXRzICovCisJdTMyIGRhdGEyOwkJLyogY3VycmVudGx5IHVudXNlZC4uICovCisJLyogMTYgKi8KKwlzdHJ1Y3QgbWNwX2RtYV9hZGRyIHJlc3BvbnNlX2FkZHI7CisJLyogMjQgKi8KKwl1OCBwYWRbNDBdOworfTsKKworLyogOCBCeXRlcyAqLworc3RydWN0IG1jcF9jbWRfcmVzcG9uc2UgeworCXUzMiBkYXRhOworCXUzMiByZXN1bHQ7Cit9OworCisvKgorICogZmxhZ3MgdXNlZCBpbiBtY3Bfa3JlcV9ldGhlcl9zZW5kX3Q6CisgKgorICogVGhlIFNNQUxMIGZsYWcgaXMgb25seSBuZWVkZWQgaW4gdGhlIGZpcnN0IHNlZ21lbnQuIEl0IGlzIHJhaXNlZAorICogZm9yIHBhY2tldHMgdGhhdCBhcmUgdG90YWwgbGVzcyBvciBlcXVhbCA1MTIgYnl0ZXMuCisgKgorICogVGhlIENLU1VNIGZsYWcgbXVzdCBiZSBzZXQgaW4gYWxsIHNlZ21lbnRzLgorICoKKyAqIFRoZSBQQURERUQgZmxhZ3MgaXMgc2V0IGlmIHRoZSBwYWNrZXQgbmVlZHMgdG8gYmUgcGFkZGVkLCBhbmQgaXQKKyAqIG11c3QgYmUgc2V0IGZvciBhbGwgc2VnbWVudHMuCisgKgorICogVGhlICBNWEdFRldfRkxBR1NfQUxJR05fT0REIG11c3QgYmUgc2V0IGlmIHRoZSBjdW11bGF0aXZlCisgKiBsZW5ndGggb2YgYWxsIHByZXZpb3VzIHNlZ21lbnRzIHdhcyBvZGQuCisgKi8KKworI2RlZmluZSBNWEdFRldfRkxBR1NfU01BTEwgICAgICAweDEKKyNkZWZpbmUgTVhHRUZXX0ZMQUdTX1RTT19IRFIgICAgMHgxCisjZGVmaW5lIE1YR0VGV19GTEFHU19GSVJTVCAgICAgIDB4MgorI2RlZmluZSBNWEdFRldfRkxBR1NfQUxJR05fT0REICAweDQKKyNkZWZpbmUgTVhHRUZXX0ZMQUdTX0NLU1VNICAgICAgMHg4CisjZGVmaW5lIE1YR0VGV19GTEFHU19UU09fTEFTVCAgIDB4OAorI2RlZmluZSBNWEdFRldfRkxBR1NfTk9fVFNPICAgICAweDEwCisjZGVmaW5lIE1YR0VGV19GTEFHU19UU09fQ0hPUCAgIDB4MTAKKyNkZWZpbmUgTVhHRUZXX0ZMQUdTX1RTT19QTEQgICAgMHgyMAorCisjZGVmaW5lIE1YR0VGV19TRU5EX1NNQUxMX1NJWkUgIDE1MjAKKyNkZWZpbmUgTVhHRUZXX01BWF9NVFUgICAgICAgICAgOTQwMAorCit1bmlvbiBtY3BfcHNvX29yX2N1bWxlbiB7CisJdTE2IHBzZXVkb19oZHJfb2Zmc2V0OworCXUxNiBjdW1fbGVuOworfTsKKworI2RlZmluZQlNWEdFRldfTUFYX1NFTkRfREVTQyAxMgorI2RlZmluZSBNWEdFRldfUEFECSAgICAyCisKKy8qIDE2IEJ5dGVzICovCitzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfc2VuZCB7CisJdTMyIGFkZHJfaGlnaDsKKwl1MzIgYWRkcl9sb3c7CisJdTE2IHBzZXVkb19oZHJfb2Zmc2V0OworCXUxNiBsZW5ndGg7CisJdTggcGFkOworCXU4IHJkbWFfY291bnQ7CisJdTggY2tzdW1fb2Zmc2V0OwkvKiB3aGVyZSB0byBzdGFydCBjb21wdXRpbmcgY2tzdW0gKi8KKwl1OCBmbGFnczsJCS8qIGFzIGRlZmluZWQgYWJvdmUgKi8KK307CisKKy8qIDggQnl0ZXMgKi8KK3N0cnVjdCBtY3Bfa3JlcV9ldGhlcl9yZWN2IHsKKwl1MzIgYWRkcl9oaWdoOworCXUzMiBhZGRyX2xvdzsKK307CisKKy8qIENvbW1hbmRzICovCisKKyNkZWZpbmUgTVhHRUZXX0NNRF9PRkZTRVQgMHhmODAwMDAKKworZW51bSBteXJpMTBnZV9tY3BfY21kX3R5cGUgeworCU1YR0VGV19DTURfTk9ORSA9IDAsCisJLyogUmVzZXQgdGhlIG1jcCwgaXQgaXMgbGVmdCBpbiBhIHNhZmUgc3RhdGUsIHdhaXRpbmcKKwkgKiBmb3IgdGhlIGRyaXZlciB0byBzZXQgYWxsIGl0cyBwYXJhbWV0ZXJzICovCisJTVhHRUZXX0NNRF9SRVNFVCwKKworCS8qIGdldCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgZmlybXdhcmUuLgorCSAqIChtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBlZXByb20gc3RyaW5ncy4uPyAqLworCU1YR0VGV19HRVRfTUNQX1ZFUlNJT04sCisKKwkvKiBQYXJhbWV0ZXJzIHdoaWNoIG11c3QgYmUgc2V0IGJ5IHRoZSBkcml2ZXIgYmVmb3JlIGl0IGNhbgorCSAqIGlzc3VlIE1YR0VGV19DTURfRVRIRVJORVRfVVAuIFRoZXkgcGVyc2lzdCB1bnRpbCB0aGUgbmV4dAorCSAqIE1YR0VGV19DTURfUkVTRVQgaXMgaXNzdWVkICovCisKKwlNWEdFRldfQ01EX1NFVF9JTlRSUV9ETUEsCisJTVhHRUZXX0NNRF9TRVRfQklHX0JVRkZFUl9TSVpFLAkvKiBpbiBieXRlcywgcG93ZXIgb2YgMiAqLworCU1YR0VGV19DTURfU0VUX1NNQUxMX0JVRkZFUl9TSVpFLAkvKiBpbiBieXRlcyAqLworCisJLyogUGFyYW1ldGVycyB3aGljaCByZWZlciB0byBsYW5haSBTUkFNIGFkZHJlc3NlcyB3aGVyZSB0aGUKKwkgKiBkcml2ZXIgbXVzdCBpc3N1ZSBQSU8gd3JpdGVzIGZvciB2YXJpb3VzIHRoaW5ncyAqLworCisJTVhHRUZXX0NNRF9HRVRfU0VORF9PRkZTRVQsCisJTVhHRUZXX0NNRF9HRVRfU01BTExfUlhfT0ZGU0VULAorCU1YR0VGV19DTURfR0VUX0JJR19SWF9PRkZTRVQsCisJTVhHRUZXX0NNRF9HRVRfSVJRX0FDS19PRkZTRVQsCisJTVhHRUZXX0NNRF9HRVRfSVJRX0RFQVNTRVJUX09GRlNFVCwKKworCS8qIFBhcmFtZXRlcnMgd2hpY2ggcmVmZXIgdG8gcmluZ3Mgc3RvcmVkIG9uIHRoZSBNQ1AsCisJICogYW5kIHdob3NlIHNpemUgaXMgY29udHJvbGxlZCBieSB0aGUgbWNwICovCisKKwlNWEdFRldfQ01EX0dFVF9TRU5EX1JJTkdfU0laRSwJLyogaW4gYnl0ZXMgKi8KKwlNWEdFRldfQ01EX0dFVF9SWF9SSU5HX1NJWkUsCS8qIGluIGJ5dGVzICovCisKKwkvKiBQYXJhbWV0ZXJzIHdoaWNoIHJlZmVyIHRvIHJpbmdzIHN0b3JlZCBpbiB0aGUgaG9zdCwKKwkgKiBhbmQgd2hvc2Ugc2l6ZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0LiAgTm90ZSB0aGF0CisJICogYWxsIG11c3QgYmUgcGh5c2ljYWxseSBjb250aWd1b3VzIGFuZCBtdXN0IGNvbnRhaW4KKwkgKiBhIHBvd2VyIG9mIDIgbnVtYmVyIG9mIGVudHJpZXMuICAqLworCisJTVhHRUZXX0NNRF9TRVRfSU5UUlFfU0laRSwJLyogaW4gYnl0ZXMgKi8KKworCS8qIGNvbW1hbmQgdG8gYnJpbmcgZXRoZXJuZXQgaW50ZXJmYWNlIHVwLiAgQWJvdmUgcGFyYW1ldGVycworCSAqIChwbHVzIG10dSAmIG1hYyBhZGRyZXNzKSBtdXN0IGhhdmUgYmVlbiBleGNoYW5nZWQgcHJpb3IKKwkgKiB0byBpc3N1aW5nIHRoaXMgY29tbWFuZCAgKi8KKwlNWEdFRldfQ01EX0VUSEVSTkVUX1VQLAorCisJLyogY29tbWFuZCB0byBicmluZyBldGhlcm5ldCBpbnRlcmZhY2UgZG93bi4gIE5vIGZ1cnRoZXIgc2VuZHMKKwkgKiBvciByZWNlaXZlcyBtYXkgYmUgcHJvY2Vzc2VkIHVudGlsIGFuIE1YR0VGV19DTURfRVRIRVJORVRfVVAKKwkgKiBpcyBpc3N1ZWQsIGFuZCBhbGwgaW50ZXJydXB0IHF1ZXVlcyBtdXN0IGJlIGZsdXNoZWQgcHJpb3IKKwkgKiB0byBhY2snaW5nIHRoaXMgY29tbWFuZCAqLworCisJTVhHRUZXX0NNRF9FVEhFUk5FVF9ET1dOLAorCisJLyogY29tbWFuZHMgdGhlIGRyaXZlciBtYXkgaXNzdWUgbGl2ZSwgd2l0aG91dCByZXNldHRpbmcKKwkgKiB0aGUgbmljLiAgTm90ZSB0aGF0IGluY3JlYXNpbmcgdGhlIG10dSAibGl2ZSIgc2hvdWxkCisJICogb25seSBiZSBkb25lIGlmIHRoZSBkcml2ZXIgaGFzIGFscmVhZHkgc3VwcGxpZWQgYnVmZmVycworCSAqIHN1ZmZpY2llbnRseSBsYXJnZSB0byBoYW5kbGUgdGhlIG5ldyBtdHUuICBEZWNyZWFzaW5nCisJICogdGhlIG10dSBsaXZlIGlzIHNhZmUgKi8KKworCU1YR0VGV19DTURfU0VUX01UVSwKKwlNWEdFRldfQ01EX0dFVF9JTlRSX0NPQUxfREVMQVlfT0ZGU0VULAkvKiBpbiBtaWNyb3NlY29uZHMgKi8KKwlNWEdFRldfQ01EX1NFVF9TVEFUU19JTlRFUlZBTCwJLyogaW4gbWljcm9zZWNvbmRzICovCisJTVhHRUZXX0NNRF9TRVRfU1RBVFNfRE1BLAorCisJTVhHRUZXX0VOQUJMRV9QUk9NSVNDLAorCU1YR0VGV19ESVNBQkxFX1BST01JU0MsCisJTVhHRUZXX1NFVF9NQUNfQUREUkVTUywKKworCU1YR0VGV19FTkFCTEVfRkxPV19DT05UUk9MLAorCU1YR0VGV19ESVNBQkxFX0ZMT1dfQ09OVFJPTCwKKworCS8qIGRvIGEgRE1BIHRlc3QKKwkgKiBkYXRhMCxkYXRhMSA9IERNQSBhZGRyZXNzCisJICogZGF0YTIgICAgICAgPSBSRE1BIGxlbmd0aCAoTVNIKSwgV0RNQSBsZW5ndGggKExTSCkKKwkgKiBjb21tYW5kIHJldHVybiBkYXRhID0gcmVwZXRpdGlvbnMgKE1TSCksIDAuNS1tcyB0aWNrcyAoTFNIKQorCSAqLworCU1YR0VGV19ETUFfVEVTVAorfTsKKworZW51bSBteXJpMTBnZV9tY3BfY21kX3N0YXR1cyB7CisJTVhHRUZXX0NNRF9PSyA9IDAsCisJTVhHRUZXX0NNRF9VTktOT1dOLAorCU1YR0VGV19DTURfRVJST1JfUkFOR0UsCisJTVhHRUZXX0NNRF9FUlJPUl9CVVNZLAorCU1YR0VGV19DTURfRVJST1JfRU1QVFksCisJTVhHRUZXX0NNRF9FUlJPUl9DTE9TRUQsCisJTVhHRUZXX0NNRF9FUlJPUl9IQVNIX0VSUk9SLAorCU1YR0VGV19DTURfRVJST1JfQkFEX1BPUlQsCisJTVhHRUZXX0NNRF9FUlJPUl9SRVNPVVJDRVMKK307CisKKy8qIDQwIEJ5dGVzICovCitzdHJ1Y3QgbWNwX2lycV9kYXRhIHsKKwl1MzIgc2VuZF9kb25lX2NvdW50OworCisJdTMyIGxpbmtfdXA7CisJdTMyIGRyb3BwZWRfbGlua19vdmVyZmxvdzsKKwl1MzIgZHJvcHBlZF9saW5rX2Vycm9yX29yX2ZpbHRlcmVkOworCXUzMiBkcm9wcGVkX3J1bnQ7CisJdTMyIGRyb3BwZWRfb3ZlcnJ1bjsKKwl1MzIgZHJvcHBlZF9ub19zbWFsbF9idWZmZXI7CisJdTMyIGRyb3BwZWRfbm9fYmlnX2J1ZmZlcjsKKwl1MzIgcmRtYV90YWdzX2F2YWlsYWJsZTsKKworCXU4IHR4X3N0b3BwZWQ7CisJdTggbGlua19kb3duOworCXU4IHN0YXRzX3VwZGF0ZWQ7CisJdTggdmFsaWQ7Cit9OworCisjZW5kaWYJCQkJLyogX19NWVJJMTBHRV9NQ1BfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODdmNzc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fTVlSSTEwR0VfTUNQX0dFTl9IRUFERVJfSF9fCisjZGVmaW5lIF9fTVlSSTEwR0VfTUNQX0dFTl9IRUFERVJfSF9fCisKKy8qIHRoaXMgZmlsZSBkZWZpbmUgYSBzdGFuZGFyZCBoZWFkZXIgdXNlZCBhcyBhIGZpcnN0IGVudHJ5IHBvaW50IHRvCisgKiBleGNoYW5nZSBpbmZvcm1hdGlvbiBiZXR3ZWVuIGZpcm13YXJlL2RyaXZlciBhbmQgZHJpdmVyLiAgVGhlCisgKiBoZWFkZXIgc3RydWN0dXJlIGNhbiBiZSBhbnl3aGVyZSBpbiB0aGUgbWNwLiBJdCB3aWxsIHVzdWFsbHkgYmUgaW4KKyAqIHRoZSAuZGF0YSBzZWN0aW9uLCBiZWNhdXNlIHNvbWUgZmllbGRzIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGF0CisgKiBjb21waWxlIHRpbWUuCisgKiBUaGUgMzJiaXQgd29yZCBhdCBvZmZzZXQgTVhfSEVBREVSX1BUUl9PRkZTRVQgaW4gdGhlIG1jcCBtdXN0CisgKiBjb250YWlucyB0aGUgbG9jYXRpb24gb2YgdGhlIGhlYWRlci4KKyAqCisgKiBUeXBpY2FsbHkgYSBNQ1Agd2lsbCBzdGFydCB3aXRoIHRoZSBmb2xsb3dpbmc6CisgKiAudGV4dAorICogLnNwYWNlIDUyICAgICEgdG8gaGVscCBjYXRjaCBNRU1PUllfSU5UIGVycm9ycworICogYnQgc3RhcnQgICAgICEganVtcCB0byByZWFsIGNvZGUKKyAqIG5vcAorICogLmxvbmcgX2dlbl9tY3BfaGVhZGVyCisgKgorICogVGhlIHNvdXJjZSB3aWxsIGhhdmUgYSBkZWZpbml0aW9uIGxpa2U6CisgKgorICogbWNwX2dlbl9oZWFkZXJfdCBnZW5fbWNwX2hlYWRlciA9IHsKKyAqIC5oZWFkZXJfbGVuZ3RoID0gc2l6ZW9mKG1jcF9nZW5faGVhZGVyX3QpLAorICogLm1jcF90eXBlID0gTUNQX1RZUEVfWFhYLAorICogLnZlcnNpb24gPSAic29tZXRoaW5nICRJZDogbWNwX2dlbl9oZWFkZXIuaCx2IDEuMiAyMDA2LzA1LzEzIDEwOjA0OjM1IGJnb2dsaW4gRXhwICQiLAorICogLm1jcF9nbG9iYWxzID0gKHVuc2lnbmVkKSZHbG9iYWxzCisgKiB9OworICovCisKKyNkZWZpbmUgTUNQX0hFQURFUl9QVFJfT0ZGU0VUICAweDNjCisKKyNkZWZpbmUgTUNQX1RZUEVfTVggMHg0ZDU4MjAyMAkvKiAiTVggICIgKi8KKyNkZWZpbmUgTUNQX1RZUEVfUENJRSAweDcwNjM2OTY1CS8qICJQQ0lFIiBwY2llLW9ubHkgTUNQICovCisjZGVmaW5lIE1DUF9UWVBFX0VUSCAweDQ1NTQ0ODIwCS8qICJFVEggIiAqLworI2RlZmluZSBNQ1BfVFlQRV9NQ1AwIDB4NGQ0MzUwMzAJLyogIk1DUDAiICovCisKK3N0cnVjdCBtY3BfZ2VuX2hlYWRlciB7CisJLyogdGhlIGZpcnN0IDQgZmllbGRzIGFyZSBmaWxsZWQgYXQgY29tcGlsZSB0aW1lICovCisJdW5zaWduZWQgaGVhZGVyX2xlbmd0aDsKKwl1bnNpZ25lZCBtY3BfdHlwZTsKKwljaGFyIHZlcnNpb25bMTI4XTsKKwl1bnNpZ25lZCBtY3BfZ2xvYmFsczsJLyogcG9pbnRlciB0byBtY3AtdHlwZSBzcGVjaWZpYyBzdHJ1Y3R1cmUgKi8KKworCS8qIGZpbGxlZCBieSB0aGUgTUNQIGF0IHJ1bi10aW1lICovCisJdW5zaWduZWQgc3JhbV9zaXplOworCXVuc2lnbmVkIHN0cmluZ19zcGVjczsJLyogZWl0aGVyIHRoZSBvcmlnaW5hbCBTVFJJTkdfU1BFQ1Mgb3IgYSBzdXBlcnNldCAqLworCXVuc2lnbmVkIHN0cmluZ19zcGVjc19sZW47CisKKwkvKiBGaWVsZHMgYWJvdmUgdGhpcyBjb21tZW50IGFyZSBndWFyYW50ZWVkIHRvIGJlIHByZXNlbnQuCisJICoKKwkgKiBGaWVsZHMgYmVsb3cgdGhpcyBjb21tZW50IGFyZSBleHRlbnNpb25zIGFkZGVkIGluIGxhdGVyIHZlcnNpb25zCisJICogb2YgdGhpcyBzdHJ1Y3QsIGRyaXZlcnMgc2hvdWxkIGNvbXBhcmUgdGhlIGhlYWRlcl9sZW5ndGggYWdhaW5zdAorCSAqIG9mZnNldG9mKGZpZWxkKSB0byBjaGVjayB3ZXRoZXIgYSBnaXZlbiBNQ1AgaW1wbGVtZW50cyB0aGVtLgorCSAqCisJICogTmV2ZXIgcmVtb3ZlIGFueSBmaWVsZC4gIEtlZXAgZXZlcnl0aGluZyBuYXR1cmFsbHkgYWxpZ24uCisJICovCit9OworCisjZW5kaWYJCQkJLyogX19NWVJJMTBHRV9NQ1BfR0VOX0hFQURFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCA5MDYyNzc1Li4yZTRlY2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0zMTgsMTIgKzMxOCwxMiBAQAogVGhlIHJ4IHByb2Nlc3Mgb25seSBydW5zIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gQWNjZXNzIGZyb20gb3V0c2lkZQogdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIG9ubHkgcGVybWl0dGVkIGFmdGVyIGRpc2FibGVfaXJxKCkuCiAKLVRoZSByeCBwcm9jZXNzIHVzdWFsbHkgcnVucyB1bmRlciB0aGUgZGV2LT54bWl0X2xvY2suIElmIG5wLT5pbnRyX3R4X3JlYXAKK1RoZSByeCBwcm9jZXNzIHVzdWFsbHkgcnVucyB1bmRlciB0aGUgbmV0aWZfdHhfbG9jay4gSWYgbnAtPmludHJfdHhfcmVhcAogaXMgc2V0LCB0aGVuIGFjY2VzcyBpcyBwZXJtaXR0ZWQgdW5kZXIgc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spLgogCiBUaHVzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIHRoYXQgd2FudCB0byBhY2Nlc3MgZXZlcnl0aGluZyBtdXN0IGNhbGwKIAlkaXNhYmxlX2lycShkZXYtPmlycSk7Ci0Jc3Bpbl9sb2NrX2JoKGRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCiBJVi4gTm90ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lLmMgYi9kcml2ZXJzL25ldC9uZS5jCmluZGV4IGIzMjc2NTIuLjk2M2ExMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lLmMKKysrIGIvZHJpdmVycy9uZXQvbmUuYwpAQCAtODI5LDcgKzgyOSw3IEBACiBpcyBhdCBib290KSBhbmQgc28gdGhlIHByb2JlIHdpbGwgZ2V0IGNvbmZ1c2VkIGJ5IGFueSBvdGhlciA4MzkwIGNhcmRzLgogSVNBIGRldmljZSBhdXRvcHJvYmVzIG9uIGEgcnVubmluZyBtYWNoaW5lIGFyZSBub3QgcmVjb21tZW5kZWQgYW55d2F5LiAqLwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgdGhpc19kZXYsIGZvdW5kID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUyLmMgYi9kcml2ZXJzL25ldC9uZTIuYwppbmRleCAyYWE3Yjc3Zi4uZWViZjVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmUyLmMKQEAgLTc4MCw3ICs3ODAsNyBAQAogCiAvKiBNb2R1bGUgY29kZSBmaXhlZCBieSBEYXZpZCBXZWluZWhhbGwgKi8KIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgdGhpc19kZXYsIGZvdW5kID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCA2NmU3NGY3Li5iZjU4ZGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogCWlmKCFjb25maWd1cmVkKSB7CiAJCXByaW50aygibmV0Y29uc29sZTogbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCX0KIAogCWlmKG5ldHBvbGxfc2V0dXAoJm5wKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwppbmRleCA0MjYwYzIxLi5hOGY2YmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCkBAIC0xMjA0LDcgKzEyMDQsNyBAQAogCiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAlscC0+bGludXhfc3RhdHMucnhfcGFja2V0cysrOwotCWxwLT5saW51eF9zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlscC0+bGludXhfc3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAlvdXRiKDB4RkYsIGlvYWRkciArIEFNMjE1MF9SQ1ZfTkVYVCk7IC8qIHNraXAgdG8gbmV4dCBmcmFtZSAqLwogCWNvbnRpbnVlOwogICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggZDA5MGRmNC4uNjYxYmZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTEyLDcgKzEyLDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMgLS0gZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKIAogICAgIHBjbmV0X2NzLmMgMS4xNTMgMjAwMy8xMS8wOSAxODo1MzowOQotICAgIAorCiAgICAgVGhlIG5ldHdvcmsgZHJpdmVyIGNvZGUgaXMgYmFzZWQgb24gRG9uYWxkIEJlY2tlcidzIE5FMjAwMCBjb2RlOgogCiAgICAgV3JpdHRlbiAxOTkyLDE5OTMgYnkgRG9uYWxkIEJlY2tlci4KQEAgLTE0Niw3ICsxNDYsNyBAQAogI2RlZmluZSBNSUlfUEhZSURfUkVHMgkJMHgwMwogCiBzdGF0aWMgaHdfaW5mb190IGh3X2luZm9bXSA9IHsKLSAgICB7IC8qIEFjY3RvbiBFTjIyMTIgKi8gMHgwZmYwLCAweDAwLCAweDAwLCAweGU4LCBERUxBWV9PVVRQVVQgfSwgCisgICAgeyAvKiBBY2N0b24gRU4yMjEyICovIDB4MGZmMCwgMHgwMCwgMHgwMCwgMHhlOCwgREVMQVlfT1VUUFVUIH0sCiAgICAgeyAvKiBBbGxpZWQgVGVsZXNpcyBMQS1QQ00gKi8gMHgwZmYwLCAweDAwLCAweDAwLCAweGY0LCAwIH0sCiAgICAgeyAvKiBBUEVYIE11bHRpQ2FyZCAqLyAweDAzZjQsIDB4MDAsIDB4MjAsIDB4ZTUsIDAgfSwKICAgICB7IC8qIEFTQU5URSBGcmllbmRseU5ldCAqLyAweDQ5MTAsIDB4MDAsIDB4MDAsIDB4OTQsCkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICB7IC8qIE5FMjAwMCBDb21wYXRpYmxlICovIDB4MGZmMCwgMHgwMCwgMHhhMCwgMHgwYywgMCB9LAogICAgIHsgLyogTmV0d29yayBHZW5lcmFsIFNuaWZmZXIgKi8gMHgwZmYwLCAweDAwLCAweDAwLCAweDY1LAogICAgICAgSEFTX01JU0NfUkVHIHwgSEFTX0lCTV9NSVNDIH0sCi0gICAgeyAvKiBQYW5hc29uaWMgVkVMMjExICovIDB4MGZmMCwgMHgwMCwgMHg4MCwgMHg0NSwgCisgICAgeyAvKiBQYW5hc29uaWMgVkVMMjExICovIDB4MGZmMCwgMHgwMCwgMHg4MCwgMHg0NSwKICAgICAgIEhBU19NSVNDX1JFRyB8IEhBU19JQk1fTUlTQyB9LAogICAgIHsgLyogUHJlTWF4IFBFLTIwMCAqLyAweDA3ZjAsIDB4MDAsIDB4MjAsIDB4ZTAsIDAgfSwKICAgICB7IC8qIFJQVEkgRVA0MDAgKi8gMHgwMTEwLCAweDAwLCAweDQwLCAweDk1LCAwIH0sCkBAIC0zMzAsNyArMzMwLDcgQEAKIAlmb3IgKGogPSAwOyBqIDwgNjsgaisrKQogCSAgICBkZXYtPmRldl9hZGRyW2pdID0gcmVhZGIoYmFzZSArIChqPDwxKSk7CiAgICAgfQotICAgIAorCiAgICAgaW91bm1hcCh2aXJ0KTsKICAgICBqID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7CiAgICAgaWYgKGogIT0gQ1NfU1VDQ0VTUykKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCWlmIChsaW5rLT5pby5OdW1Qb3J0czIgPiAwKSB7CiAJICAgIC8qIGZvciBtYXN0ZXIvc2xhdmUgbXVsdGlmdW5jdGlvbiBjYXJkcyAqLwogCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IAorCSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9CiAJCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOwogCX0KICAgICB9IGVsc2UgewpAQCAtNTQzLDE5ICs1NDMsMTkgQEAKIAltYW5maWQgPSBsZTE2X3RvX2NwdShidWZbMF0pOwogCXByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CiAgICAgfQotICAgIAorCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKICAgICB3aGlsZSAobGFzdF9yZXQgPT0gQ1NfU1VDQ0VTUykgewogCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CiAJY2lzdHBsX2lvX3QgKmlvID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5LmlvKTsKLQkKKwogCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8CiAJCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDAgfHwKIAkJCWNmZy0+aW5kZXggPT0gMCB8fCBjZmctPmlvLm53aW4gPT0gMCkKIAkJZ290byBuZXh0X2VudHJ5OwotCQorCiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CiAJLyogRm9yIG11bHRpZnVuY3Rpb24gY2FyZHMsIGJ5IGNvbnZlbnRpb24sIHdlIGNvbmZpZ3VyZSB0aGUKIAkgICBuZXR3b3JrIGZ1bmN0aW9uIHdpdGggd2luZG93IDAsIGFuZCBzZXJpYWwgd2l0aCB3aW5kb3cgMSAqLwpAQCAtNTg0LDcgKzU4NCw3IEBACiAgICAgfQogCiAgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLSAgICAKKwogICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIgPT0gOCkgewogCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CkBAIC01OTIsNyArNTkyLDcgQEAKICAgICBpZiAoKG1hbmZpZCA9PSBNQU5GSURfSUJNKSAmJgogCShwcm9kaWQgPT0gUFJPRElEX0lCTV9IT01FX0FORF9BV0FZKSkKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4IHw9IDB4MTA7Ci0gICAgCisKICAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtNjE0LDcgKzYxNCw3IEBACiAJaHdfaW5mbyA9IGdldF9heDg4MTkwKGxpbmspOwogICAgIGlmIChod19pbmZvID09IE5VTEwpCiAJaHdfaW5mbyA9IGdldF9od2lyZWQobGluayk7Ci0gICAgCisKICAgICBpZiAoaHdfaW5mbyA9PSBOVUxMKSB7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJwY25ldF9jczogdW5hYmxlIHRvIHJlYWQgaGFyZHdhcmUgbmV0IgogCSAgICAgICAiIGFkZHJlc3MgZm9yIGlvIGJhc2UgJSMzbHhcbiIsIGRldi0+YmFzZV9hZGRyKTsKQEAgLTYzMSw3ICs2MzEsNyBAQAogCWluZm8tPmZsYWdzICY9IH5VU0VfQklHX0JVRjsKICAgICBpZiAoIXVzZV9iaWdfYnVmKQogCWluZm8tPmZsYWdzICY9IH5VU0VfQklHX0JVRjsKLSAgICAKKwogICAgIGlmIChpbmZvLT5mbGFncyAmIFVTRV9CSUdfQlVGKSB7CiAJc3RhcnRfcGcgPSBTT0NLRVRfU1RBUlRfUEc7CiAJc3RvcF9wZyA9IFNPQ0tFVF9TVE9QX1BHOwpAQCAtOTI5LDcgKzkyOSw3IEBACiAgICAga2lvX2FkZHJfdCBuaWNfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwogICAgIHVfY2hhciB0bXA7Ci0gICAgCisKICAgICBpZiAoaW5mby0+ZmxhZ3MgJiBIQVNfTUlTQ19SRUcpIHsKIAl0bXAgPSBpbmJfcChuaWNfYmFzZSArIFBDTkVUX01JU0MpICYgfjM7CiAJaWYgKGRldi0+aWZfcG9ydCA9PSAyKQpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIAogICAgIGVpX2Nsb3NlKGRldik7CiAgICAgZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0gICAgCisKICAgICBsaW5rLT5vcGVuLS07CiAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogICAgIGRlbF90aW1lcl9zeW5jKCZpbmZvLT53YXRjaGRvZyk7CkBAIC0xMDU0LDEyICsxMDU0LDEyIEBACiAJdWRlbGF5KDEwMCk7CiAgICAgfQogICAgIG91dGJfcChFTklTUl9SRVNFVCwgbmljX2Jhc2UgKyBFTjBfSVNSKTsgLyogQWNrIGludHIuICovCi0gICAgCisKICAgICBpZiAoaSA9PSAxMDApCiAJcHJpbnRrKEtFUk5fRVJSICIlczogcGNuZXRfcmVzZXRfODM5MCgpIGRpZCBub3QgY29tcGxldGUuXG4iLAogCSAgICAgICBkZXYtPm5hbWUpOwogICAgIHNldF9taXNjX3JlZyhkZXYpOwotICAgIAorCiB9IC8qIHBjbmV0X3Jlc2V0XzgzOTAgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xMjMzLDcgKzEyMzMsNyBAQAogCSAgICAgICBkZXYtPm5hbWUsIGVpX3N0YXR1cy5kbWFpbmcsIGVpX3N0YXR1cy5pcnFsb2NrKTsKIAlyZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgZWlfc3RhdHVzLmRtYWluZyB8PSAweDAxOwogICAgIG91dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVEFSVCwgbmljX2Jhc2UgKyBQQ05FVF9DTUQpOwogICAgIG91dGJfcChzaXplb2Yoc3RydWN0IGU4MzkwX3BrdF9oZHIpLCBuaWNfYmFzZSArIEVOMF9SQ05UTE8pOwpAQCAtMTQ1OCw3ICsxNDU4LDcgQEAKICAgICB2b2lkIF9faW9tZW0gKnhmZXJfc3RhcnQgPSBlaV9zdGF0dXMubWVtICsgKFRYX1BBR0VTPDw4KQogCQkJCSsgKHJpbmdfcGFnZSA8PCA4KQogCQkJCS0gKGVpX3N0YXR1cy5yeF9zdGFydF9wYWdlIDw8IDgpOwotICAgIAorCiAgICAgY29weWluKGhkciwgeGZlcl9zdGFydCwgc2l6ZW9mKHN0cnVjdCBlODM5MF9wa3RfaGRyKSk7CiAgICAgLyogRml4IGZvciBiaWcgZW5kaWFuIHN5c3RlbXMgKi8KICAgICBoZHItPmNvdW50ID0gbGUxNl90b19jcHUoaGRyLT5jb3VudCk7CkBAIC0xNDczLDcgKzE0NzMsNyBAQAogICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKFRYX1BBR0VTPDw4KSArIHJpbmdfb2Zmc2V0CiAJCQkJLSAoZWlfc3RhdHVzLnJ4X3N0YXJ0X3BhZ2UgPDwgOCk7CiAgICAgY2hhciAqYnVmID0gc2tiLT5kYXRhOwotICAgIAorCiAgICAgaWYgKG9mZnNldCArIGNvdW50ID4gZWlfc3RhdHVzLnByaXYpIHsKIAkvKiBXZSBtdXN0IHdyYXAgdGhlIGlucHV0IG1vdmUuICovCiAJaW50IHNlbWlfY291bnQgPSBlaV9zdGF0dXMucHJpdiAtIG9mZnNldDsKQEAgLTE1NDEsNyArMTU0MSw3IEBACiAJaW5mby0+YmFzZSA9IE5VTEw7IGxpbmstPndpbiA9IE5VTEw7CiAJZ290byBmYWlsZWQ7CiAgICAgfQotICAgIAorCiAgICAgZWlfc3RhdHVzLm1lbSA9IGluZm8tPmJhc2UgKyBvZmZzZXQ7CiAgICAgZWlfc3RhdHVzLnByaXYgPSByZXEuU2l6ZTsKICAgICBkZXYtPm1lbV9zdGFydCA9ICh1X2xvbmcpZWlfc3RhdHVzLm1lbTsKQEAgLTE3NjgsNiArMTc2OCw4IEBACiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJOREMiLCAiRXRoZXJuZXQiLCAweDAxYzQzYWUxLCAweDAwYjJlOTQxLCAiTkUySy5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIlBNWCAgICIsICJQRS0yMDAiLCAweDM0ZjNmMWM4LCAweDEwYjU5ZjhjLCAiUEUtMjAwLmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiVEFNQVJBQ0siLCAiRXRoZXJuZXQiLCAweGNmNDM0ZmJhLCAweDAwYjJlOTQxLCAidGFtYXJhY2suY2lzIiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJGYXN0IEV0aGVybmV0IiwgIkNGIFNpemUgUEMgQ2FyZCIsICIxLjAiLAorCQkweGI0YmUxNGUzLCAweDQzYWMyMzliLCAweDA4NzdiNjI3KSwKIAlQQ01DSUFfREVWSUNFX05VTEwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgcGNuZXRfaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCAwN2MzMWYxLi5mYzA4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0xNzc0LDggKzE3NzQsNiBAQAogCQlscC0+cnhfZG1hX2FkZHJbaV0gPSAwOwogCX0KIAotCXBjbmV0MzJfZnJlZV9yaW5nKGRldik7Ci0KIAkvKgogCSAqIFN3aXRjaCBiYWNrIHRvIDE2Yml0IG1vZGUgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBkdW1iCiAJICogRE9TIHBhY2tldCBkcml2ZXIgYWZ0ZXIgYSB3YXJtIHJlYm9vdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBmYTM5Yjk0Li5jZGEzZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNDUsNSArNDUsMTEgQEAKIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIGNpczgyMDQKIAorY29uZmlnIFNNU0NfUEhZCisJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIFNNU0MgUEhZcyIKKwlkZXBlbmRzIG9uIFBIWUxJQgorCS0tLWhlbHAtLS0KKwkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgTEFOODNDMTg1IFBIWQorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCBlNDExNmE1Li5kOTYxNDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCkBAIC04LDMgKzgsNCBAQAogb2JqLSQoQ09ORklHX0NJQ0FEQV9QSFkpCSs9IGNpY2FkYS5vCiBvYmotJChDT05GSUdfTFhUX1BIWSkJCSs9IGx4dC5vCiBvYmotJChDT05GSUdfUVNFTUlfUEhZKQkJKz0gcXNlbWkubworb2JqLSQoQ09ORklHX1NNU0NfUEhZKQkJKz0gc21zYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc21zYy5jIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWUzMWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIGRyaXZlcnMvbmV0L3BoeS9zbXNjLmMKKyAqCisgKiBEcml2ZXIgZm9yIFNNU0MgUEhZcworICoKKyAqIEF1dGhvcjogSGVyYmVydCBWYWxlcmlvIFJpZWRlbAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsIDxodnJAZ251Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGIDI5IC8qIEludGVycnVwdCBTb3VyY2UgRmxhZ3MgKi8KKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JTSAgMzAgLyogSW50ZXJydXB0IE1hc2sgKi8KKworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQxICgxPDwxKSAvKiBBdXRvLU5lZ290aWF0aW9uIFBhZ2UgUmVjZWl2ZWQgKi8KKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UMiAoMTw8MikgLyogUGFyYWxsZWwgRGV0ZWN0aW9uIEZhdWx0ICovCisjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVDMgKDE8PDMpIC8qIEF1dG8tTmVnb3RpYXRpb24gTFAgQWNrICovCisjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVDQgKDE8PDQpIC8qIExpbmsgRG93biAqLworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQ1ICgxPDw1KSAvKiBSZW1vdGUgRmF1bHQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNiAoMTw8NikgLyogQXV0by1OZWdvdGlhdGlvbiBjb21wbGV0ZSAqLworI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQ3ICgxPDw3KSAvKiBFTkVSR1lPTiAqLworCisjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVF9BTEwgKDB4MGUpCisKKyNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UX1BIWUxJQl9FVkVOVFMgXAorCShNSUlfTEFOODNDMTg1X0lTRl9JTlQ2IHwgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNCkKKworCitzdGF0aWMgaW50IGxhbjgzYzE4NV9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByYyA9IHBoeV93cml0ZSAocGh5ZGV2LCBNSUlfTEFOODNDMTg1X0lNLAorCQkJKChQSFlfSU5URVJSVVBUX0VOQUJMRUQgPT0gcGh5ZGV2LT5pbnRlcnJ1cHRzKQorCQkJPyBNSUlfTEFOODNDMTg1X0lTRl9JTlRfUEhZTElCX0VWRU5UUworCQkJOiAwKSk7CisKKwlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOworfQorCitzdGF0aWMgaW50IGxhbjgzYzE4NV9hY2tfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJjID0gcGh5X3JlYWQgKHBoeWRldiwgTUlJX0xBTjgzQzE4NV9JU0YpOworCisJcmV0dXJuIHJjIDwgMCA/IHJjIDogMDsKK30KKworc3RhdGljIGludCBsYW44M2MxODVfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlyZXR1cm4gbGFuODNjMTg1X2Fja19pbnRlcnJ1cHQgKHBoeWRldik7Cit9CisKKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGxhbjgzYzE4NV9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSAweDAwMDdjMGEwLCAvKiBPVUk9MHgwMDgwMGYsIE1vZGVsIz0weDBhICovCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiU01TQyBMQU44M0MxODUiLAorCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZQorCQkJCXwgU1VQUE9SVEVEX0FzeW1fUGF1c2UpLAorCS5mbGFncwkJPSBQSFlfSEFTX0lOVEVSUlVQVCB8IFBIWV9IQVNfTUFHSUNBTkVHLAorCisJLyogYmFzaWMgZnVuY3Rpb25zICovCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuY29uZmlnX2luaXQJPSBsYW44M2MxODVfY29uZmlnX2luaXQsCisKKwkvKiBJUlEgcmVsYXRlZCAqLworCS5hY2tfaW50ZXJydXB0CT0gbGFuODNjMTg1X2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyCT0gbGFuODNjMTg1X2NvbmZpZ19pbnRyLAorCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLCB9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbXNjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGh5X2RyaXZlcl9yZWdpc3RlciAoJmxhbjgzYzE4NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc21zY19leGl0KHZvaWQpCit7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODNjMTg1X2RyaXZlcik7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiU01TQyBQSFkgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJIZXJiZXJ0IFZhbGVyaW8gUmllZGVsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHNtc2NfaW5pdCk7Cittb2R1bGVfZXhpdChzbXNjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggYjIwNzNmYy4uMDFjZDhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC0xNjA5LDggKzE2MDksNiBAQAogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlza2IgPSBuczsKIAkJfQotCQllbHNlIGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0+bGVuKSkKLQkJCWdvdG8gZXJyOwogCQllbHNlCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHBvZS5jCmluZGV4IDQ3NWRjOTMuLjBkMTAxYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9lLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2UuYwpAQCAtODYxLDYgKzg2MSw5IEBACiAJCSAqIGdpdmUgZGV2X3F1ZXVlX3htaXQgc29tZXRoaW5nIGl0IGNhbiBmcmVlLgogCQkgKi8KIAkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCisJCWlmIChza2IyID09IE5VTEwpCisJCQlnb3RvIGFib3J0OwogCX0KIAogCXBoID0gKHN0cnVjdCBwcHBvZV9oZHIgKikgc2tiX3B1c2goc2tiMiwgc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDBhZDMzMTAuLjk5NDVjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw4MTY5X3BjaV90YmxbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLAkweDgxNjkpLCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODEyOSksIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssCTB4NDMwMCksIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTZlYywJCQkweDAxMTYpLCB9LAogCXsgUENJX1ZFTkRPUl9JRF9MSU5LU1lTLAkJMHgxMDMyLCBQQ0lfQU5ZX0lELCAweDAwMjQsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLXJlZ3MuaCBiL2RyaXZlcnMvbmV0L3MyaW8tcmVncy5oCmluZGV4IDAwMTc5YmMuLjBlZjUyNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8tcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8tcmVncy5oCkBAIC0xNjcsNiArMTY3LDcgQEAKIAl1OCB1bnVzZWQ0WzB4MDhdOwogCiAJdTY0IGdwaW9faW50X3JlZzsKKyNkZWZpbmUgR1BJT19JTlRfUkVHX0RQX0VSUl9JTlQgICAgICAgICAgICAgICAgQklUKDApCiAjZGVmaW5lIEdQSU9fSU5UX1JFR19MSU5LX0RPV04gICAgICAgICAgICAgICAgIEJJVCgxKQogI2RlZmluZSBHUElPX0lOVF9SRUdfTElOS19VUCAgICAgICAgICAgICAgICAgICBCSVQoMikKIAl1NjQgZ3Bpb19pbnRfbWFzazsKQEAgLTE4Nyw3ICsxODgsNyBAQAogLyogUElDIENvbnRyb2wgcmVnaXN0ZXJzICovCiAJdTY0IHBpY19jb250cm9sOwogI2RlZmluZSBQSUNfQ05UTF9SWF9BTEFSTV9NQVBfMSAgICAgICAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgUElDX0NOVExfU0hBUkVEX1NQTElUUyhuKSAgICAgICAgICAgICAgdkJJVChuLDExLDQpCisjZGVmaW5lIFBJQ19DTlRMX1NIQVJFRF9TUExJVFMobikgICAgICAgICAgICAgIHZCSVQobiwxMSw1KQogCiAJdTY0IHN3YXBwZXJfY3RybDsKICNkZWZpbmUgU1dBUFBFUl9DVFJMX1BJRl9SX0ZFICAgICAgICAgICAgICAgICAgQklUKDApCkBAIC0yNjcsNiArMjY4LDIxIEBACiAKIAkvKiBHZW5lcmFsIENvbmZpZ3VyYXRpb24gKi8KIAl1NjQgbWRpb19jb250cm9sOworI2RlZmluZSBNRElPX01NRF9JTkRYX0FERFIodmFsKQkJdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBNRElPX01NRF9ERVZfQUREUih2YWwpCQl2QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIE1ESU9fTU1EX1BNQV9ERVZfQUREUgkJMHgxCisjZGVmaW5lIE1ESU9fTU1EX1BNRF9ERVZfQUREUgkJMHgxCisjZGVmaW5lIE1ESU9fTU1EX1dJU19ERVZfQUREUgkJMHgyCisjZGVmaW5lIE1ESU9fTU1EX1BDU19ERVZfQUREUgkJMHgzCisjZGVmaW5lIE1ESU9fTU1EX1BIWVhTX0RFVl9BRERSCQkweDQKKyNkZWZpbmUgTURJT19NTVNfUFJUX0FERFIodmFsKQkJdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBNRElPX0NUUkxfU1RBUlRfVFJBTlModmFsKQl2QklUKHZhbCwgNTYsIDQpCisjZGVmaW5lIE1ESU9fT1AodmFsKQkJCXZCSVQodmFsLCA2MCwgMikKKyNkZWZpbmUgTURJT19PUF9BRERSX1RSQU5TCQkweDAKKyNkZWZpbmUgTURJT19PUF9XUklURV9UUkFOUwkJMHgxCisjZGVmaW5lIE1ESU9fT1BfUkVBRF9QT1NUX0lOQ19UUkFOUwkweDIKKyNkZWZpbmUgTURJT19PUF9SRUFEX1RSQU5TCQkweDMKKyNkZWZpbmUgTURJT19NRElPX0RBVEEodmFsKQkJdkJJVCh2YWwsIDMyLCAxNikKIAogCXU2NCBkdHhfY29udHJvbDsKIApAQCAtMjg0LDkgKzMwMCwxMyBAQAogCXU2NCBncGlvX2NvbnRyb2w7CiAjZGVmaW5lIEdQSU9fQ1RSTF9HUElPXzAJCUJJVCg4KQogCXU2NCBtaXNjX2NvbnRyb2w7CisjZGVmaW5lIEVYVF9SRVFfRU4JCQlCSVQoMSkKICNkZWZpbmUgTUlTQ19MSU5LX1NUQUJJTElUWV9QUkQodmFsKSAgIHZCSVQodmFsLDI5LDMpCiAKLQl1OCB1bnVzZWQ3XzFbMHgyNDAgLSAweDIwOF07CisJdTggdW51c2VkN18xWzB4MjMwIC0gMHgyMDhdOworCisJdTY0IHBpY19jb250cm9sMjsKKwl1NjQgaW5pX2RwZXJyX2N0cmw7CiAKIAl1NjQgd3JlcV9zcGxpdF9tYXNrOwogI2RlZmluZQlXUkVRX1NQTElUX01BU0tfU0VUX01BU0sodmFsKQl2QklUKHZhbCwgNTIsIDEyKQpAQCAtNDkzLDYgKzUxMyw3IEBACiAjZGVmaW5lIFBSQ19DVFJMX05PX1NOT09QX0RFU0MgICAgICAgICAgICAgICAgIEJJVCgyMikKICNkZWZpbmUgUFJDX0NUUkxfTk9fU05PT1BfQlVGRiAgICAgICAgICAgICAgICAgQklUKDIzKQogI2RlZmluZSBQUkNfQ1RSTF9CSU1PREFMX0lOVEVSUlVQVCAgICAgICAgICAgICBCSVQoMzcpCisjZGVmaW5lIFBSQ19DVFJMX0dST1VQX1JFQURTICAgICAgICAgICAgICAgICAgIEJJVCgzOCkKICNkZWZpbmUgUFJDX0NUUkxfUlhEX0JBQ0tPRkZfSU5URVJWQUwodmFsKSAgICAgdkJJVCh2YWwsNDAsMjQpCiAKIAl1NjQgcHJjX2FsYXJtX2FjdGlvbjsKQEAgLTU0MSw3ICs1NjIsMTIgQEAKICNkZWZpbmUgUlhfUEFfQ0ZHX0lHTk9SRV9MTENfQ1RSTCAgICAgICAgICBCSVQoMykKICNkZWZpbmUgUlhfUEFfQ0ZHX0lHTk9SRV9MMl9FUlIgICAgICAgICAgICBCSVQoNikKIAotCXU4IHVudXNlZDEyWzB4NzAwIC0gMHgxRDhdOworCXU2NCB1bnVzZWRfMTFfMTsKKworCXU2NCByaW5nX2J1bXBfY291bnRlcjE7CisJdTY0IHJpbmdfYnVtcF9jb3VudGVyMjsKKworCXU4IHVudXNlZDEyWzB4NzAwIC0gMHgxRjBdOwogCiAJdTY0IHJ4ZG1hX2RlYnVnX2N0cmw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCA3OTIwOGY0Li5jYWM5ZmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC0yNiwxNSArMjYsMjIgQEAKICAqCiAgKiBUaGUgbW9kdWxlIGxvYWRhYmxlIHBhcmFtZXRlcnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgYW5kIGEgYnJpZWYKICAqIGV4cGxhaW5hdGlvbiBvZiBhbGwgdGhlIHZhcmlhYmxlcy4KKyAqCiAgKiByeF9yaW5nX251bSA6IFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvZ3JhbSB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgcmluZ3MgdXNlZAogICogaW4gdGhlIGRyaXZlci4KLSAqIHJ4X3Jpbmdfc3o6IFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGVhY2ggcmluZyBjYW4gaGF2ZS4gVGhpcwotICogaXMgYWxzbyBhbiBhcnJheSBvZiBzaXplIDguCisgKiByeF9yaW5nX3N6OiBUaGlzIGRlZmluZXMgdGhlIG51bWJlciBvZiByZWNlaXZlIGJsb2NrcyBlYWNoIHJpbmcgY2FuIGhhdmUuCisgKiAgICAgVGhpcyBpcyBhbHNvIGFuIGFycmF5IG9mIHNpemUgOC4KICAqIHJ4X3JpbmdfbW9kZTogVGhpcyBkZWZpbmVzIHRoZSBvcGVyYXRpb24gbW9kZSBvZiBhbGwgOCByaW5ncy4gVGhlIHZhbGlkCiAgKgkJdmFsdWVzIGFyZSAxLCAyIGFuZCAzLgogICogdHhfZmlmb19udW06IFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIFR4IEZJRk9zIHRoYXRzIHVzZWQgaW50IHRoZSBkcml2ZXIuCiAgKiB0eF9maWZvX2xlbjogVGhpcyB0b28gaXMgYW4gYXJyYXkgb2YgOC4gRWFjaCBlbGVtZW50IGRlZmluZXMgdGhlIG51bWJlciBvZgogICogVHggZGVzY3JpcHRvcnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhY2ggY29ycmVzcG9uZGluZyBGSUZPLgorICogaW50cl90eXBlOiBUaGlzIGRlZmluZXMgdGhlIHR5cGUgb2YgaW50ZXJydXB0LiBUaGUgdmFsdWVzIGNhbiBiZSAwKElOVEEpLAorICogICAgIDEoTVNJKSwgMihNU0lfWCkuIERlZmF1bHQgdmFsdWUgaXMgJzAoSU5UQSknCisgKiBscm86IFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBMYXJnZSBSZWNlaXZlIE9mZmxvYWQgKExSTykgb3Igbm90LgorICogICAgIFBvc3NpYmxlIHZhbHVlcyAnMScgZm9yIGVuYWJsZSAnMCcgZm9yIGRpc2FibGUuIERlZmF1bHQgaXMgJzAnCisgKiBscm9fbWF4X3BrdHM6IFRoaXMgcGFyYW1ldGVyIGRlZmluZXMgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBjYW4gYmUKKyAqICAgICBhZ2dyZWdhdGVkIGFzIGEgc2luZ2xlIGxhcmdlIHBhY2tldAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNzAsNyArNzcsNyBAQAogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjExLjIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMTQuMiIKIAogLyogUzJpbyBEcml2ZXIgbmFtZSAmIHZlcnNpb24uICovCiBzdGF0aWMgY2hhciBzMmlvX2RyaXZlcl9uYW1lW10gPSAiTmV0ZXJpb24iOwpAQCAtMTA2LDE4ICsxMTMsMTQgQEAKICNkZWZpbmUgTE9XCTIKIHN0YXRpYyBpbmxpbmUgaW50IHJ4X2J1ZmZlcl9sZXZlbChuaWNfdCAqIHNwLCBpbnQgcnhiX3NpemUsIGludCByaW5nKQogewotCWludCBsZXZlbCA9IDA7CiAJbWFjX2luZm9fdCAqbWFjX2NvbnRyb2w7CiAKIAltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7Ci0JaWYgKChtYWNfY29udHJvbC0+cmluZ3NbcmluZ10ucGt0X2NudCAtIHJ4Yl9zaXplKSA+IDE2KSB7Ci0JCWxldmVsID0gTE9XOwotCQlpZiAocnhiX3NpemUgPD0gcnhkX2NvdW50W3NwLT5yeGRfbW9kZV0pIHsKLQkJCWxldmVsID0gUEFOSUM7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gbGV2ZWw7CisJaWYgKHJ4Yl9zaXplIDw9IHJ4ZF9jb3VudFtzcC0+cnhkX21vZGVdKQorCQlyZXR1cm4gUEFOSUM7CisJZWxzZSBpZiAoKG1hY19jb250cm9sLT5yaW5nc1tyaW5nXS5wa3RfY250IC0gcnhiX3NpemUpID4gMTYpCisJCXJldHVybiAgTE9XOworCXJldHVybiAwOwogfQogCiAvKiBFdGh0b29sIHJlbGF0ZWQgdmFyaWFibGVzIGFuZCBNYWNyb3MuICovCkBAIC0xMzYsNyArMTM5LDExIEBACiAJeyJ0bWFjX21jc3RfZnJtcyJ9LAogCXsidG1hY19iY3N0X2ZybXMifSwKIAl7InRtYWNfcGF1c2VfY3RybF9mcm1zIn0sCisJeyJ0bWFjX3R0bF9vY3RldHMifSwKKwl7InRtYWNfdWNzdF9mcm1zIn0sCisJeyJ0bWFjX251Y3N0X2ZybXMifSwKIAl7InRtYWNfYW55X2Vycl9mcm1zIn0sCisJeyJ0bWFjX3R0bF9sZXNzX2ZiX29jdGV0cyJ9LAogCXsidG1hY192bGRfaXBfb2N0ZXRzIn0sCiAJeyJ0bWFjX3ZsZF9pcCJ9LAogCXsidG1hY19kcm9wX2lwIn0sCkBAIC0xNTEsMTMgKzE1OCwyNyBAQAogCXsicm1hY192bGRfbWNzdF9mcm1zIn0sCiAJeyJybWFjX3ZsZF9iY3N0X2ZybXMifSwKIAl7InJtYWNfaW5fcm5nX2xlbl9lcnJfZnJtcyJ9LAorCXsicm1hY19vdXRfcm5nX2xlbl9lcnJfZnJtcyJ9LAogCXsicm1hY19sb25nX2ZybXMifSwKIAl7InJtYWNfcGF1c2VfY3RybF9mcm1zIn0sCisJeyJybWFjX3Vuc3VwX2N0cmxfZnJtcyJ9LAorCXsicm1hY190dGxfb2N0ZXRzIn0sCisJeyJybWFjX2FjY2VwdGVkX3Vjc3RfZnJtcyJ9LAorCXsicm1hY19hY2NlcHRlZF9udWNzdF9mcm1zIn0sCiAJeyJybWFjX2Rpc2NhcmRlZF9mcm1zIn0sCisJeyJybWFjX2Ryb3BfZXZlbnRzIn0sCisJeyJybWFjX3R0bF9sZXNzX2ZiX29jdGV0cyJ9LAorCXsicm1hY190dGxfZnJtcyJ9LAogCXsicm1hY191c2l6ZWRfZnJtcyJ9LAogCXsicm1hY19vc2l6ZWRfZnJtcyJ9LAogCXsicm1hY19mcmFnX2ZybXMifSwKIAl7InJtYWNfamFiYmVyX2ZybXMifSwKKwl7InJtYWNfdHRsXzY0X2ZybXMifSwKKwl7InJtYWNfdHRsXzY1XzEyN19mcm1zIn0sCisJeyJybWFjX3R0bF8xMjhfMjU1X2ZybXMifSwKKwl7InJtYWNfdHRsXzI1Nl81MTFfZnJtcyJ9LAorCXsicm1hY190dGxfNTEyXzEwMjNfZnJtcyJ9LAorCXsicm1hY190dGxfMTAyNF8xNTE4X2ZybXMifSwKIAl7InJtYWNfaXAifSwKIAl7InJtYWNfaXBfb2N0ZXRzIn0sCiAJeyJybWFjX2hkcl9lcnJfaXAifSwKQEAgLTE2NiwxMiArMTg3LDgyIEBACiAJeyJybWFjX3RjcCJ9LAogCXsicm1hY191ZHAifSwKIAl7InJtYWNfZXJyX2RycF91ZHAifSwKKwl7InJtYWNfeGdtaWlfZXJyX3N5bSJ9LAorCXsicm1hY19mcm1zX3EwIn0sCisJeyJybWFjX2ZybXNfcTEifSwKKwl7InJtYWNfZnJtc19xMiJ9LAorCXsicm1hY19mcm1zX3EzIn0sCisJeyJybWFjX2ZybXNfcTQifSwKKwl7InJtYWNfZnJtc19xNSJ9LAorCXsicm1hY19mcm1zX3E2In0sCisJeyJybWFjX2ZybXNfcTcifSwKKwl7InJtYWNfZnVsbF9xMCJ9LAorCXsicm1hY19mdWxsX3ExIn0sCisJeyJybWFjX2Z1bGxfcTIifSwKKwl7InJtYWNfZnVsbF9xMyJ9LAorCXsicm1hY19mdWxsX3E0In0sCisJeyJybWFjX2Z1bGxfcTUifSwKKwl7InJtYWNfZnVsbF9xNiJ9LAorCXsicm1hY19mdWxsX3E3In0sCiAJeyJybWFjX3BhdXNlX2NudCJ9LAorCXsicm1hY194Z21paV9kYXRhX2Vycl9jbnQifSwKKwl7InJtYWNfeGdtaWlfY3RybF9lcnJfY250In0sCiAJeyJybWFjX2FjY2VwdGVkX2lwIn0sCiAJeyJybWFjX2Vycl90Y3AifSwKKwl7InJkX3JlcV9jbnQifSwKKwl7Im5ld19yZF9yZXFfY250In0sCisJeyJuZXdfcmRfcmVxX3J0cnlfY250In0sCisJeyJyZF9ydHJ5X2NudCJ9LAorCXsid3JfcnRyeV9yZF9hY2tfY250In0sCisJeyJ3cl9yZXFfY250In0sCisJeyJuZXdfd3JfcmVxX2NudCJ9LAorCXsibmV3X3dyX3JlcV9ydHJ5X2NudCJ9LAorCXsid3JfcnRyeV9jbnQifSwKKwl7IndyX2Rpc2NfY250In0sCisJeyJyZF9ydHJ5X3dyX2Fja19jbnQifSwKKwl7InR4cF93cl9jbnQifSwKKwl7InR4ZF9yZF9jbnQifSwKKwl7InR4ZF93cl9jbnQifSwKKwl7InJ4ZF9yZF9jbnQifSwKKwl7InJ4ZF93cl9jbnQifSwKKwl7InR4Zl9yZF9jbnQifSwKKwl7InJ4Zl93cl9jbnQifSwKKwl7InJtYWNfdHRsXzE1MTlfNDA5NV9mcm1zIn0sCisJeyJybWFjX3R0bF80MDk2XzgxOTFfZnJtcyJ9LAorCXsicm1hY190dGxfODE5Ml9tYXhfZnJtcyJ9LAorCXsicm1hY190dGxfZ3RfbWF4X2ZybXMifSwKKwl7InJtYWNfb3NpemVkX2FsdF9mcm1zIn0sCisJeyJybWFjX2phYmJlcl9hbHRfZnJtcyJ9LAorCXsicm1hY19ndF9tYXhfYWx0X2ZybXMifSwKKwl7InJtYWNfdmxhbl9mcm1zIn0sCisJeyJybWFjX2xlbl9kaXNjYXJkIn0sCisJeyJybWFjX2Zjc19kaXNjYXJkIn0sCisJeyJybWFjX3BmX2Rpc2NhcmQifSwKKwl7InJtYWNfZGFfZGlzY2FyZCJ9LAorCXsicm1hY19yZWRfZGlzY2FyZCJ9LAorCXsicm1hY19ydHNfZGlzY2FyZCJ9LAorCXsicm1hY19pbmdtX2Z1bGxfZGlzY2FyZCJ9LAorCXsibGlua19mYXVsdF9jbnQifSwKIAl7IlxuIERSSVZFUiBTVEFUSVNUSUNTIn0sCiAJeyJzaW5nbGVfYml0X2VjY19lcnJzIn0sCiAJeyJkb3VibGVfYml0X2VjY19lcnJzIn0sCisJeyJwYXJpdHlfZXJyX2NudCJ9LAorCXsic2VyaW91c19lcnJfY250In0sCisJeyJzb2Z0X3Jlc2V0X2NudCJ9LAorCXsiZmlmb19mdWxsX2NudCJ9LAorCXsicmluZ19mdWxsX2NudCJ9LAorCSgiYWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoIiksCisJKCJhbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdyIpLAorCSgiYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2giKSwKKwkoImFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9sb3ciKSwKKwkoImFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoIiksCisJKCJhbGFybV9sYXNlcl9vdXRwdXRfcG93ZXJfbG93IiksCisJKCJ3YXJuX3RyYW5zY2VpdmVyX3RlbXBfaGlnaCIpLAorCSgid2Fybl90cmFuc2NlaXZlcl90ZW1wX2xvdyIpLAorCSgid2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaCIpLAorCSgid2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfbG93IiksCisJKCJ3YXJuX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoIiksCisJKCJ3YXJuX2xhc2VyX291dHB1dF9wb3dlcl9sb3ciKSwKIAkoImxyb19hZ2dyZWdhdGVkX3BrdHMiKSwKIAkoImxyb19mbHVzaF9ib3RoX2NvdW50IiksCiAJKCJscm9fb3V0X29mX3NlcXVlbmNlX3BrdHMiKSwKQEAgLTIyMCw5ICszMTEsNyBAQAogICogdGhlIFhBVUkuCiAgKi8KIAotI2RlZmluZSBTV0lUQ0hfU0lHTgkweEE1QTVBNUE1QTVBNUE1QTVVTEwKICNkZWZpbmUJRU5EX1NJR04JMHgwCi0KIHN0YXRpYyBjb25zdCB1NjQgaGVyY19hY3RfZHR4X2NmZ1tdID0gewogCS8qIFNldCBhZGRyZXNzICovCiAJMHg4MDAwMDUxNTM2NzUwMDAwVUxMLCAweDgwMDAwNTE1MzY3NTAwRTBVTEwsCkBAIC0yNDQsMzcgKzMzMywxOSBAQAogCUVORF9TSUdOCiB9OwogCi1zdGF0aWMgY29uc3QgdTY0IHhlbmFfbWRpb19jZmdbXSA9IHsKLQkvKiBSZXNldCBQTUEgUExMICovCi0JMHhDMDAxMDEwMDAwMDAwMDAwVUxMLCAweEMwMDEwMTAwMDAwMDAwRTBVTEwsCi0JMHhDMDAxMDEwMDAwODAwMEU0VUxMLAotCS8qIFJlbW92ZSBSZXNldCBmcm9tIFBNQSBQTEwgKi8KLQkweEMwMDEwMTAwMDAwMDAwMDBVTEwsIDB4QzAwMTAxMDAwMDAwMDBFMFVMTCwKLQkweEMwMDEwMTAwMDAwMDAwRTRVTEwsCi0JRU5EX1NJR04KLX07Ci0KIHN0YXRpYyBjb25zdCB1NjQgeGVuYV9kdHhfY2ZnW10gPSB7CisJLyogU2V0IGFkZHJlc3MgKi8KIAkweDgwMDAwNTE1MDAwMDAwMDBVTEwsIDB4ODAwMDA1MTUwMDAwMDBFMFVMTCwKLQkweDgwMDAwNTE1RDkzNTAwRTRVTEwsIDB4ODAwMTA1MTUwMDAwMDAwMFVMTCwKLQkweDgwMDEwNTE1MDAwMDAwRTBVTEwsIDB4ODAwMTA1MTUwMDFFMDBFNFVMTCwKKwkvKiBXcml0ZSBkYXRhICovCisJMHg4MDAwMDUxNUQ5MzUwMDA0VUxMLCAweDgwMDAwNTE1RDkzNTAwRTRVTEwsCisJLyogU2V0IGFkZHJlc3MgKi8KKwkweDgwMDEwNTE1MDAwMDAwMDBVTEwsIDB4ODAwMTA1MTUwMDAwMDBFMFVMTCwKKwkvKiBXcml0ZSBkYXRhICovCisJMHg4MDAxMDUxNTAwMUUwMDA0VUxMLCAweDgwMDEwNTE1MDAxRTAwRTRVTEwsCisJLyogU2V0IGFkZHJlc3MgKi8KIAkweDgwMDIwNTE1MDAwMDAwMDBVTEwsIDB4ODAwMjA1MTUwMDAwMDBFMFVMTCwKLQkweDgwMDIwNTE1RjIxMDAwRTRVTEwsCi0JLyogU2V0IFBBRExPT1BCQUNLTiAqLwotCTB4ODAwMjA1MTUwMDAwMDAwMFVMTCwgMHg4MDAyMDUxNTAwMDAwMEUwVUxMLAotCTB4ODAwMjA1MTVCMjAwMDBFNFVMTCwgMHg4MDAzMDUxNTAwMDAwMDAwVUxMLAotCTB4ODAwMzA1MTUwMDAwMDBFMFVMTCwgMHg4MDAzMDUxNUIyMDAwMEU0VUxMLAotCTB4ODAwNDA1MTUwMDAwMDAwMFVMTCwgMHg4MDA0MDUxNTAwMDAwMEUwVUxMLAotCTB4ODAwNDA1MTVCMjAwMDBFNFVMTCwgMHg4MDA1MDUxNTAwMDAwMDAwVUxMLAotCTB4ODAwNTA1MTUwMDAwMDBFMFVMTCwgMHg4MDA1MDUxNUIyMDAwMEU0VUxMLAotCVNXSVRDSF9TSUdOLAotCS8qIFJlbW92ZSBQQURMT09QQkFDS04gKi8KLQkweDgwMDIwNTE1MDAwMDAwMDBVTEwsIDB4ODAwMjA1MTUwMDAwMDBFMFVMTCwKLQkweDgwMDIwNTE1RjIwMDAwRTRVTEwsIDB4ODAwMzA1MTUwMDAwMDAwMFVMTCwKLQkweDgwMDMwNTE1MDAwMDAwRTBVTEwsIDB4ODAwMzA1MTVGMjAwMDBFNFVMTCwKLQkweDgwMDQwNTE1MDAwMDAwMDBVTEwsIDB4ODAwNDA1MTUwMDAwMDBFMFVMTCwKLQkweDgwMDQwNTE1RjIwMDAwRTRVTEwsIDB4ODAwNTA1MTUwMDAwMDAwMFVMTCwKLQkweDgwMDUwNTE1MDAwMDAwRTBVTEwsIDB4ODAwNTA1MTVGMjAwMDBFNFVMTCwKKwkvKiBXcml0ZSBkYXRhICovCisJMHg4MDAyMDUxNUYyMTAwMDA0VUxMLCAweDgwMDIwNTE1RjIxMDAwRTRVTEwsCiAJRU5EX1NJR04KIH07CiAKQEAgLTMwMywxNSArMzc0LDE1IEBACiAvKiBNb2R1bGUgTG9hZGFibGUgcGFyYW1ldGVycy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHhfZmlmb19udW0gPSAxOwogc3RhdGljIHVuc2lnbmVkIGludCB0eF9maWZvX2xlbltNQVhfVFhfRklGT1NdID0KLSAgICB7WzAgLi4uKE1BWF9UWF9GSUZPUyAtIDEpXSA9IDAgfTsKKyAgICB7REVGQVVMVF9GSUZPXzBfTEVOLCBbMSAuLi4oTUFYX1RYX0ZJRk9TIC0gMSldID0gREVGQVVMVF9GSUZPXzFfN19MRU59Owogc3RhdGljIHVuc2lnbmVkIGludCByeF9yaW5nX251bSA9IDE7CiBzdGF0aWMgdW5zaWduZWQgaW50IHJ4X3Jpbmdfc3pbTUFYX1JYX1JJTkdTXSA9Ci0gICAge1swIC4uLihNQVhfUlhfUklOR1MgLSAxKV0gPSAwIH07CisgICAge1swIC4uLihNQVhfUlhfUklOR1MgLSAxKV0gPSBTTUFMTF9CTEtfQ05UfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnRzX2ZybV9sZW5bTUFYX1JYX1JJTkdTXSA9CiAgICAge1swIC4uLihNQVhfUlhfUklOR1MgLSAxKV0gPSAwIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IHJ4X3JpbmdfbW9kZSA9IDE7CiBzdGF0aWMgdW5zaWduZWQgaW50IHVzZV9jb250aW51b3VzX3R4X2ludHJzID0gMTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcm1hY19wYXVzZV90aW1lID0gNjU1MzU7CitzdGF0aWMgdW5zaWduZWQgaW50IHJtYWNfcGF1c2VfdGltZSA9IDB4MTAwOwogc3RhdGljIHVuc2lnbmVkIGludCBtY19wYXVzZV90aHJlc2hvbGRfcTBxMyA9IDE4NzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWNfcGF1c2VfdGhyZXNob2xkX3E0cTcgPSAxODc7CiBzdGF0aWMgdW5zaWduZWQgaW50IHNoYXJlZF9zcGxpdHM7CkBAIC01NDksMTEgKzYyMCw2IEBACiAJCQkJCXJ4X2Jsb2Nrcy0+YmxvY2tfZG1hX2FkZHIgKwogCQkJCQkocnhkX3NpemVbbmljLT5yeGRfbW9kZV0gKiBsKTsKIAkJCX0KLQotCQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1tqXS5ibG9ja192aXJ0X2FkZHIgPQotCQkJCXRtcF92X2FkZHI7Ci0JCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfYmxvY2tzW2pdLmJsb2NrX2RtYV9hZGRyID0KLQkJCQl0bXBfcF9hZGRyOwogCQl9CiAJCS8qIEludGVybGlua2luZyBhbGwgUnggQmxvY2tzICovCiAJCWZvciAoaiA9IDA7IGogPCBibGtfY250OyBqKyspIHsKQEAgLTc3Miw3ICs4MzgsMjEgQEAKIAlyZXR1cm4gbW9kZTsKIH0KIAorI2RlZmluZSBORUNfVkVOSUQgICAweDEwMzMKKyNkZWZpbmUgTkVDX0RFVklEICAgMHgwMTI1CitzdGF0aWMgaW50IHMyaW9fb25fbmVjX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqczJpb19wZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICp0ZGV2ID0gTlVMTDsKKwl3aGlsZSAoKHRkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgdGRldikpICE9IE5VTEwpIHsKKwkJaWYgKCh0ZGV2LT52ZW5kb3IgPT0gTkVDX1ZFTklEKSAmJiAodGRldi0+ZGV2aWNlID09IE5FQ19ERVZJRCkpeworCQkJaWYgKHRkZXYtPmJ1cyA9PSBzMmlvX3BkZXYtPmJ1cy0+cGFyZW50KQorCQkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQogCitzdGF0aWMgaW50IGJ1c19zcGVlZFs4XSA9IHszMywgMTMzLCAxMzMsIDIwMCwgMjY2LCAxMzMsIDIwMCwgMjY2fTsKIC8qKgogICogczJpb19wcmludF9wY2lfbW9kZSAtCiAgKi8KQEAgLTc4OSw2ICs4NjksMTQgQEAKIAlpZiAoIHZhbDY0ICYgUENJX01PREVfVU5LTk9XTl9NT0RFKQogCQlyZXR1cm4gLTE7CS8qIFVua25vd24gUENJIG1vZGUgKi8KIAorCWNvbmZpZy0+YnVzX3NwZWVkID0gYnVzX3NwZWVkW21vZGVdOworCisJaWYgKHMyaW9fb25fbmVjX2JyaWRnZShuaWMtPnBkZXYpKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IERldmljZSBpcyBvbiBQQ0ktRSBidXNcbiIsCisJCQkJCQkJbmljLT5kZXYtPm5hbWUpOworCQlyZXR1cm4gbW9kZTsKKwl9CisKIAlpZiAodmFsNjQgJiBQQ0lfTU9ERV8zMl9CSVRTKSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IERldmljZSBpcyBvbiAzMiBiaXQgIiwgbmljLT5kZXYtPm5hbWUpOwogCX0gZWxzZSB7CkBAIC03OTgsMzUgKzg4NiwyNyBAQAogCXN3aXRjaChtb2RlKSB7CiAJCWNhc2UgUENJX01PREVfUENJXzMzOgogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIzM01IeiBQQ0kgYnVzXG4iKTsKLQkJCWNvbmZpZy0+YnVzX3NwZWVkID0gMzM7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfTU9ERV9QQ0lfNjY6CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIjY2TUh6IFBDSSBidXNcbiIpOwotCQkJY29uZmlnLT5idXNfc3BlZWQgPSAxMzM7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfTU9ERV9QQ0lYX00xXzY2OgogCQkJREJHX1BSSU5UKEVSUl9EQkcsICI2Nk1IeiBQQ0lYKE0xKSBidXNcbiIpOwotCQkJY29uZmlnLT5idXNfc3BlZWQgPSAxMzM7IC8qIEhlcmMgZG91YmxlcyB0aGUgY2xvY2sgcmF0ZSAqLwogCQkJYnJlYWs7CiAJCWNhc2UgUENJX01PREVfUENJWF9NMV8xMDA6CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIjEwME1IeiBQQ0lYKE0xKSBidXNcbiIpOwotCQkJY29uZmlnLT5idXNfc3BlZWQgPSAyMDA7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfTU9ERV9QQ0lYX00xXzEzMzoKIAkJCURCR19QUklOVChFUlJfREJHLCAiMTMzTUh6IFBDSVgoTTEpIGJ1c1xuIik7Ci0JCQljb25maWctPmJ1c19zcGVlZCA9IDI2NjsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9NT0RFX1BDSVhfTTJfNjY6CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIjEzM01IeiBQQ0lYKE0yKSBidXNcbiIpOwotCQkJY29uZmlnLT5idXNfc3BlZWQgPSAxMzM7CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfTU9ERV9QQ0lYX00yXzEwMDoKIAkJCURCR19QUklOVChFUlJfREJHLCAiMjAwTUh6IFBDSVgoTTIpIGJ1c1xuIik7Ci0JCQljb25maWctPmJ1c19zcGVlZCA9IDIwMDsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9NT0RFX1BDSVhfTTJfMTMzOgogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIyNjZNSHogUENJWChNMikgYnVzXG4iKTsKLQkJCWNvbmZpZy0+YnVzX3NwZWVkID0gMjY2OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLTE7CS8qIFVuc3VwcG9ydGVkIGJ1cyBzcGVlZCAqLwpAQCAtODU0LDcgKzkzNCw3IEBACiAJaW50IGksIGo7CiAJbWFjX2luZm9fdCAqbWFjX2NvbnRyb2w7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwotCWludCBtZGlvX2NudCA9IDAsIGR0eF9jbnQgPSAwOworCWludCBkdHhfY250ID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX3NoYXJlOwogCWludCBtZW1fc2l6ZTsKIApAQCAtOTAxLDIwICs5ODEsNiBAQAogCXZhbDY0ID0gZGV2LT5tdHU7CiAJd3JpdGVxKHZCSVQodmFsNjQsIDIsIDE0KSwgJmJhcjAtPnJtYWNfbWF4X3B5bGRfbGVuKTsKIAotCS8qCi0JICogQ29uZmlndXJpbmcgdGhlIFhBVUkgSW50ZXJmYWNlIG9mIFhlbmEuCi0JICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JICogVG8gQ29uZmlndXJlIHRoZSBYZW5hJ3MgWEFVSSwgb25lIGhhcyB0byB3cml0ZSBhIHNlcmllcwotCSAqIG9mIDY0IGJpdCB2YWx1ZXMgaW50byB0d28gcmVnaXN0ZXJzIGluIGEgcGFydGljdWxhcgotCSAqIHNlcXVlbmNlLiBIZW5jZSBhIG1hY3JvICdTV0lUQ0hfU0lHTicgaGFzIGJlZW4gZGVmaW5lZAotCSAqIHdoaWNoIHdpbGwgYmUgZGVmaW5lZCBpbiB0aGUgYXJyYXkgb2YgY29uZmlndXJhdGlvbiB2YWx1ZXMKLQkgKiAoeGVuYV9kdHhfY2ZnICYgeGVuYV9tZGlvX2NmZykgYXQgYXBwcm9wcmlhdGUgcGxhY2VzCi0JICogdG8gc3dpdGNoIHdyaXRpbmcgZnJvbSBvbmUgcmVnc2l0ZXIgdG8gYW5vdGhlci4gV2UgY29udGludWUKLQkgKiB3cml0aW5nIHRoZXNlIHZhbHVlcyB1bnRpbCB3ZSBlbmNvdW50ZXIgdGhlICdFTkRfU0lHTicgbWFjcm8uCi0JICogRm9yIGV4YW1wbGUsIEFmdGVyIG1ha2luZyBhIHNlcmllcyBvZiAyMSB3cml0ZXMgaW50bwotCSAqIGR0eF9jb250cm9sIHJlZ2lzdGVyIHRoZSAnU1dJVENIX1NJR04nIGFwcGVhcnMgYW5kIGhlbmNlIHdlCi0JICogc3RhcnQgd3JpdGluZyBpbnRvIG1kaW9fY29udHJvbCB1bnRpbCB3ZSBlbmNvdW50ZXIgRU5EX1NJR04uCi0JICovCiAJaWYgKG5pYy0+ZGV2aWNlX3R5cGUgJiBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCXdoaWxlIChoZXJjX2FjdF9kdHhfY2ZnW2R0eF9jbnRdICE9IEVORF9TSUdOKSB7CiAJCQlTUEVDSUFMX1JFR19XUklURShoZXJjX2FjdF9kdHhfY2ZnW2R0eF9jbnRdLApAQCAtOTI0LDM1ICs5OTAsMTEgQEAKIAkJCWR0eF9jbnQrKzsKIAkJfQogCX0gZWxzZSB7Ci0JCXdoaWxlICgxKSB7Ci0JCSAgICAgIGR0eF9jZmc6Ci0JCQl3aGlsZSAoeGVuYV9kdHhfY2ZnW2R0eF9jbnRdICE9IEVORF9TSUdOKSB7Ci0JCQkJaWYgKHhlbmFfZHR4X2NmZ1tkdHhfY250XSA9PSBTV0lUQ0hfU0lHTikgewotCQkJCQlkdHhfY250Kys7Ci0JCQkJCWdvdG8gbWRpb19jZmc7Ci0JCQkJfQotCQkJCVNQRUNJQUxfUkVHX1dSSVRFKHhlbmFfZHR4X2NmZ1tkdHhfY250XSwKLQkJCQkJCSAgJmJhcjAtPmR0eF9jb250cm9sLCBVRik7Ci0JCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+ZHR4X2NvbnRyb2wpOwotCQkJCWR0eF9jbnQrKzsKLQkJCX0KLQkJICAgICAgbWRpb19jZmc6Ci0JCQl3aGlsZSAoeGVuYV9tZGlvX2NmZ1ttZGlvX2NudF0gIT0gRU5EX1NJR04pIHsKLQkJCQlpZiAoeGVuYV9tZGlvX2NmZ1ttZGlvX2NudF0gPT0gU1dJVENIX1NJR04pIHsKLQkJCQkJbWRpb19jbnQrKzsKLQkJCQkJZ290byBkdHhfY2ZnOwotCQkJCX0KLQkJCQlTUEVDSUFMX1JFR19XUklURSh4ZW5hX21kaW9fY2ZnW21kaW9fY250XSwKLQkJCQkJCSAgJmJhcjAtPm1kaW9fY29udHJvbCwgVUYpOwotCQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPm1kaW9fY29udHJvbCk7Ci0JCQkJbWRpb19jbnQrKzsKLQkJCX0KLQkJCWlmICgoeGVuYV9kdHhfY2ZnW2R0eF9jbnRdID09IEVORF9TSUdOKSAmJgotCQkJICAgICh4ZW5hX21kaW9fY2ZnW21kaW9fY250XSA9PSBFTkRfU0lHTikpIHsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJZ290byBkdHhfY2ZnOwotCQkJfQorCQl3aGlsZSAoeGVuYV9kdHhfY2ZnW2R0eF9jbnRdICE9IEVORF9TSUdOKSB7CisJCQlTUEVDSUFMX1JFR19XUklURSh4ZW5hX2R0eF9jZmdbZHR4X2NudF0sCisJCQkJCSAgJmJhcjAtPmR0eF9jb250cm9sLCBVRik7CisJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5kdHhfY29udHJvbCk7CisJCQlkdHhfY250Kys7CiAJCX0KIAl9CiAKQEAgLTk5NCwxMSArMTAzNiw2IEBACiAJCX0KIAl9CiAKLQkvKiBFbmFibGUgVHggRklGTyBwYXJ0aXRpb24gMC4gKi8KLQl2YWw2NCA9IHJlYWRxKCZiYXIwLT50eF9maWZvX3BhcnRpdGlvbl8wKTsKLQl2YWw2NCB8PSBCSVQoMCk7CS8qIFRvIGVuYWJsZSB0aGUgRklGTyBwYXJ0aXRpb24uICovCi0Jd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMCk7Ci0KIAkvKgogCSAqIERpc2FibGUgNCBQQ0NzIGZvciBYZW5hMSwgMiBhbmQgMyBhcyBwZXIgSC9XIGJ1ZwogCSAqIFNYRS0wMDggVFJBTlNNSVQgRE1BIEFSQklUUkFUSU9OIElTU1VFLgpAQCAtMTE3Nyw2ICsxMjE0LDExIEBACiAJCWJyZWFrOwogCX0KIAorCS8qIEVuYWJsZSBUeCBGSUZPIHBhcnRpdGlvbiAwLiAqLworCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnR4X2ZpZm9fcGFydGl0aW9uXzApOworCXZhbDY0IHw9IChUWF9GSUZPX1BBUlRJVElPTl9FTik7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMCk7CisKIAkvKiBGaWxsaW5nIHRoZSBSeCByb3VuZCByb2JpbiByZWdpc3RlcnMgYXMgcGVyIHRoZQogCSAqIG51bWJlciBvZiBSaW5ncyBhbmQgc3RlZXJpbmcgYmFzZWQgb24gUW9TLgogICAgICAgICAgKi8KQEAgLTE1NDUsMTkgKzE1ODcsMjYgQEAKIAl2YWw2NCB8PSBQSUNfQ05UTF9TSEFSRURfU1BMSVRTKHNoYXJlZF9zcGxpdHMpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnBpY19jb250cm9sKTsKIAorCWlmIChuaWMtPmNvbmZpZy5idXNfc3BlZWQgPT0gMjY2KSB7CisJCXdyaXRlcShUWFJFUVRPX1ZBTCgweDdmKSB8IFRYUkVRVE9fRU4sICZiYXIwLT50eHJlcXRpbWVvdXQpOworCQl3cml0ZXEoMHgwLCAmYmFyMC0+cmVhZF9yZXRyeV9kZWxheSk7CisJCXdyaXRlcSgweDAsICZiYXIwLT53cml0ZV9yZXRyeV9kZWxheSk7CisJfQorCiAJLyoKIAkgKiBQcm9ncmFtbWluZyB0aGUgSGVyYyB0byBzcGxpdCBldmVyeSB3cml0ZSB0cmFuc2FjdGlvbgogCSAqIHRoYXQgZG9lcyBub3Qgc3RhcnQgb24gYW4gQURCIHRvIHJlZHVjZSBkaXNjb25uZWN0cy4KIAkgKi8KIAlpZiAobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7Ci0JCXZhbDY0ID0gV1JFUV9TUExJVF9NQVNLX1NFVF9NQVNLKDI1NSk7Ci0JCXdyaXRlcSh2YWw2NCwgJmJhcjAtPndyZXFfc3BsaXRfbWFzayk7Ci0JfQotCi0JLyogU2V0dGluZyBMaW5rIHN0YWJpbGl0eSBwZXJpb2QgdG8gNjQgbXMgKi8gCi0JaWYgKG5pYy0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgewotCQl2YWw2NCA9IE1JU0NfTElOS19TVEFCSUxJVFlfUFJEKDMpOworCQl2YWw2NCA9IEVYVF9SRVFfRU4gfCBNSVNDX0xJTktfU1RBQklMSVRZX1BSRCgzKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWlzY19jb250cm9sKTsKKwkJdmFsNjQgPSByZWFkcSgmYmFyMC0+cGljX2NvbnRyb2wyKTsKKwkJdmFsNjQgJj0gfihCSVQoMTMpfEJJVCgxNCl8QklUKDE1KSk7CisJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnBpY19jb250cm9sMik7CisJfQorCWlmIChzdHJzdHIobmljLT5wcm9kdWN0X25hbWUsICJDWDQiKSkgeworCQl2YWw2NCA9IFRNQUNfQVZHX0lQRygweDE3KTsKKwkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dG1hY19hdmdfaXBnKTsKIAl9CiAKIAlyZXR1cm4gU1VDQ0VTUzsKQEAgLTE5NDgsNiArMTk5NywxMCBAQAogCQkJdmFsNjQgfD0gUFJDX0NUUkxfUkNfRU5BQkxFRDsKIAkJZWxzZQogCQkJdmFsNjQgfD0gUFJDX0NUUkxfUkNfRU5BQkxFRCB8IFBSQ19DVFJMX1JJTkdfTU9ERV8zOworCQlpZiAobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKQorCQkJdmFsNjQgfD0gUFJDX0NUUkxfR1JPVVBfUkVBRFM7CisJCXZhbDY0ICY9IH5QUkNfQ1RSTF9SWERfQkFDS09GRl9JTlRFUlZBTCgweEZGRkZGRik7CisJCXZhbDY0IHw9IFBSQ19DVFJMX1JYRF9CQUNLT0ZGX0lOVEVSVkFMKDB4MTAwMCk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnByY19jdHJsX25baV0pOwogCX0KIApAQCAtMjAxOCw2ICsyMDcxLDEzIEBACiAJdmFsNjQgfD0gQURBUFRFUl9FT0lfVFhfT047CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIAorCWlmIChzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWMpID09IE1BQ19STUFDX0VSUl9USU1FUikgeworCQkvKgorCQkgKiBEb250IHNlZSBsaW5rIHN0YXRlIGludGVycnVwdHMgaW5pdGFsbHkgb24gc29tZSBzd2l0Y2hlcywKKwkJICogc28gZGlyZWN0bHkgc2NoZWR1bGluZyB0aGUgbGluayBzdGF0ZSB0YXNrIGhlcmUuCisJCSAqLworCQlzY2hlZHVsZV93b3JrKCZuaWMtPnNldF9saW5rX3Rhc2spOworCX0KIAkvKiBTWEUtMDAyOiBJbml0aWFsaXplIGxpbmsgYW5kIGFjdGl2aXR5IExFRCAqLwogCXN1YmlkID0gbmljLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwogCWlmICgoKHN1YmlkICYgMHhGRikgPj0gMHgwNykgJiYKQEAgLTIwMjksMTIgKzIwODksNiBAQAogCQl3cml0ZXEodmFsNjQsICh2b2lkIF9faW9tZW0gKiliYXIwICsgMHgyNzAwKTsKIAl9CiAKLQkvKgotCSAqIERvbid0IHNlZSBsaW5rIHN0YXRlIGludGVycnVwdHMgb24gY2VydGFpbiBzd2l0Y2hlcywgc28KLQkgKiBkaXJlY3RseSBzY2hlZHVsaW5nIGEgbGluayBzdGF0ZSB0YXNrIGZyb20gaGVyZS4KLQkgKi8KLQlzY2hlZHVsZV93b3JrKCZuaWMtPnNldF9saW5rX3Rhc2spOwotCiAJcmV0dXJuIFNVQ0NFU1M7CiB9CiAvKioKQEAgLTIxMzQsNyArMjE4OCw3IEBACiB7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKIAlyZWdpc3RlciB1NjQgdmFsNjQgPSAwOwotCXUxNiBpbnRlcnJ1cHRpYmxlLCBpOworCXUxNiBpbnRlcnJ1cHRpYmxlOwogCW1hY19pbmZvX3QgKm1hY19jb250cm9sOwogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKIApAQCAtMjE0NywxMiArMjIwMSwxMCBAQAogCWludGVycnVwdGlibGUgfD0gVFhfTUFDX0lOVFIgfCBSWF9NQUNfSU5UUjsKIAllbl9kaXNfYWJsZV9uaWNfaW50cnMobmljLCBpbnRlcnJ1cHRpYmxlLCBESVNBQkxFX0lOVFJTKTsKIAotCS8qICBEaXNhYmxlIFBSQ3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnByY19jdHJsX25baV0pOwotCQl2YWw2NCAmPSB+KCh1NjQpIFBSQ19DVFJMX1JDX0VOQUJMRUQpOwotCQl3cml0ZXEodmFsNjQsICZiYXIwLT5wcmNfY3RybF9uW2ldKTsKLQl9CisJLyogQ2xlYXJpbmcgQWRhcHRlcl9FbiBiaXQgb2YgQURBUFRFUl9DT05UUk9MIFJlZ2lzdGVyICovCisJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKKwl2YWw2NCAmPSB+KEFEQVBURVJfQ05UTF9FTik7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIH0KIAogc3RhdGljIGludCBmaWxsX3J4ZF8zYnVmKG5pY190ICpuaWMsIFJ4RF90ICpyeGRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMjIzMSwxMyArMjI4MywxMiBAQAogCWFsbG9jX2NudCA9IG1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5wa3RfY250IC0KIAkgICAgYXRvbWljX3JlYWQoJm5pYy0+cnhfYnVmc19sZWZ0W3Jpbmdfbm9dKTsKIAorCWJsb2NrX25vMSA9IG1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5yeF9jdXJyX2dldF9pbmZvLmJsb2NrX2luZGV4OworCW9mZjEgPSBtYWNfY29udHJvbC0+cmluZ3NbcmluZ19ub10ucnhfY3Vycl9nZXRfaW5mby5vZmZzZXQ7CiAJd2hpbGUgKGFsbG9jX3RhYiA8IGFsbG9jX2NudCkgewogCQlibG9ja19ubyA9IG1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5yeF9jdXJyX3B1dF9pbmZvLgogCQkgICAgYmxvY2tfaW5kZXg7Ci0JCWJsb2NrX25vMSA9IG1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5yeF9jdXJyX2dldF9pbmZvLgotCQkgICAgYmxvY2tfaW5kZXg7CiAJCW9mZiA9IG1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5yeF9jdXJyX3B1dF9pbmZvLm9mZnNldDsKLQkJb2ZmMSA9IG1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5yeF9jdXJyX2dldF9pbmZvLm9mZnNldDsKIAogCQlyeGRwID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLgogCQkJCXJ4X2Jsb2Nrc1tibG9ja19ub10ucnhkc1tvZmZdLnZpcnRfYWRkcjsKQEAgLTIzMDcsOSArMjM1OCw5IEBACiAJCQltZW1zZXQocnhkcCwgMCwgc2l6ZW9mKFJ4RDFfdCkpOwogCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwogCQkJKChSeEQxX3QqKXJ4ZHApLT5CdWZmZXIwX3B0ciA9IHBjaV9tYXBfc2luZ2xlCi0JCQkgICAgKG5pYy0+cGRldiwgc2tiLT5kYXRhLCBzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJcnhkcC0+Q29udHJvbF8yICY9ICh+TUFTS19CVUZGRVIwX1NJWkVfMSk7Ci0JCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjBfU0laRV8xKHNpemUpOworCQkJICAgIChuaWMtPnBkZXYsIHNrYi0+ZGF0YSwgc2l6ZSAtIE5FVF9JUF9BTElHTiwKKwkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcnhkcC0+Q29udHJvbF8yID0gU0VUX0JVRkZFUjBfU0laRV8xKHNpemUgLSBORVRfSVBfQUxJR04pOwogCiAJCX0gZWxzZSBpZiAobmljLT5yeGRfbW9kZSA+PSBSWERfTU9ERV8zQSkgewogCQkJLyoKQEAgLTI1MTYsNyArMjU2Nyw3IEBACiAJbWFjX2luZm9fdCAqbWFjX2NvbnRyb2w7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwogCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBuaWMtPmJhcjA7Ci0JdTY0IHZhbDY0OworCXU2NCB2YWw2NCA9IDB4RkZGRkZGRkZGRkZGRkZGRlVMTDsKIAlpbnQgaTsKIAogCWF0b21pY19pbmMoJm5pYy0+aXNyX2NudCk7CkBAIC0yNTI4LDggKzI1NzksOCBAQAogCQluaWMtPnBrdHNfdG9fcHJvY2VzcyA9IGRldi0+cXVvdGE7CiAJb3JnX3BrdHNfdG9fcHJvY2VzcyA9IG5pYy0+cGt0c190b19wcm9jZXNzOwogCi0JdmFsNjQgPSByZWFkcSgmYmFyMC0+cnhfdHJhZmZpY19pbnQpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKKwl2YWw2NCA9IHJlYWRsKCZiYXIwLT5yeF90cmFmZmljX2ludCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7CiAJCXJ4X2ludHJfaGFuZGxlcigmbWFjX2NvbnRyb2wtPnJpbmdzW2ldKTsKQEAgLTI1NTQsNyArMjYwNSw4IEBACiAJCX0KIAl9CiAJLyogUmUgZW5hYmxlIHRoZSBSeCBpbnRlcnJ1cHRzLiAqLwotCWVuX2Rpc19hYmxlX25pY19pbnRycyhuaWMsIFJYX1RSQUZGSUNfSU5UUiwgRU5BQkxFX0lOVFJTKTsKKwl3cml0ZXEoMHgwLCAmYmFyMC0+cnhfdHJhZmZpY19tYXNrKTsKKwl2YWw2NCA9IHJlYWRsKCZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCWF0b21pY19kZWMoJm5pYy0+aXNyX2NudCk7CiAJcmV0dXJuIDA7CiAKQEAgLTI2NjYsNiArMjcxOCw3IEBACiAJCQkJCSAoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjJfcHRyLAogCQkJCQkgZGV2LT5tdHUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KKwkJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAkJcnhfb3NtX2hhbmRsZXIocmluZ19kYXRhLCByeGRwKTsKIAkJZ2V0X2luZm8ub2Zmc2V0Kys7CiAJCXJpbmdfZGF0YS0+cnhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPSBnZXRfaW5mby5vZmZzZXQ7CkBAIC0yNzM3LDYgKzI3OTAsMTAgQEAKIAkJaWYgKHR4ZGxwLT5Db250cm9sXzEgJiBUWERfVF9DT0RFKSB7CiAJCQl1bnNpZ25lZCBsb25nIGxvbmcgZXJyOwogCQkJZXJyID0gdHhkbHAtPkNvbnRyb2xfMSAmIFRYRF9UX0NPREU7CisJCQlpZiAoZXJyICYgMHgxKSB7CisJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgorCQkJCQkJcGFyaXR5X2Vycl9jbnQrKzsKKwkJCX0KIAkJCWlmICgoZXJyID4+IDQ4KSA9PSAweEEpIHsKIAkJCQlEQkdfUFJJTlQoVFhfREJHLCAiVHhEIHJldHVybmVkIGR1ZSBcCiB0byBsb3NzIG9mIGxpbmtcbiIpOwpAQCAtMjc2MCw3ICsyODE3LDggQEAKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAogCQlnZXRfaW5mby5vZmZzZXQrKzsKLQkJZ2V0X2luZm8ub2Zmc2V0ICU9IGdldF9pbmZvLmZpZm9fbGVuICsgMTsKKwkJaWYgKGdldF9pbmZvLm9mZnNldCA9PSBnZXRfaW5mby5maWZvX2xlbiArIDEpCisJCQlnZXRfaW5mby5vZmZzZXQgPSAwOwogCQl0eGRscCA9IChUeERfdCAqKSBmaWZvX2RhdGEtPmxpc3RfaW5mbwogCQkgICAgW2dldF9pbmZvLm9mZnNldF0ubGlzdF92aXJ0X2FkZHI7CiAJCWZpZm9fZGF0YS0+dHhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPQpAQCAtMjc3NCw2ICsyODMyLDI1NiBAQAogfQogCiAvKioKKyAqICBzMmlvX21kaW9fd3JpdGUgLSBGdW5jdGlvbiB0byB3cml0ZSBpbiB0byBNRElPIHJlZ2lzdGVycworICogIEBtbWRfdHlwZSA6IE1NRCB0eXBlIHZhbHVlIChQTUEvUE1EL1dJUy9QQ1MvUEhZWFMpCisgKiAgQGFkZHIgICAgIDogYWRkcmVzcyB2YWx1ZQorICogIEB2YWx1ZSAgICA6IGRhdGEgdmFsdWUKKyAqICBAZGV2ICAgICAgOiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCisgKiAgRGVzY3JpcHRpb246CisgKiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHdyaXRlIHZhbHVlcyB0byB0aGUgTURJTyByZWdpc3RlcnMKKyAqICBOT05FCisgKi8KK3N0YXRpYyB2b2lkIHMyaW9fbWRpb193cml0ZSh1MzIgbW1kX3R5cGUsIHU2NCBhZGRyLCB1MTYgdmFsdWUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdTY0IHZhbDY0ID0gMHgwOworCW5pY190ICpzcCA9IGRldi0+cHJpdjsKKwlYRU5BX2Rldl9jb25maWdfdCAqYmFyMCA9IChYRU5BX2Rldl9jb25maWdfdCAqKXNwLT5iYXIwOworCisJLy9hZGRyZXNzIHRyYW5zYWN0aW9uCisJdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQorCQkJfCBNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkKKwkJCXwgTURJT19NTVNfUFJUX0FERFIoMHgwKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXVkZWxheSgxMDApOworCisJLy9EYXRhIHRyYW5zYWN0aW9uCisJdmFsNjQgPSAweDA7CisJdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQorCQkJfCBNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkKKwkJCXwgTURJT19NTVNfUFJUX0FERFIoMHgwKQorCQkJfCBNRElPX01ESU9fREFUQSh2YWx1ZSkKKwkJCXwgTURJT19PUChNRElPX09QX1dSSVRFX1RSQU5TKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKKwl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXVkZWxheSgxMDApOworCisJdmFsNjQgPSAweDA7CisJdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQorCXwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCisJfCBNRElPX01NU19QUlRfQUREUigweDApCisJfCBNRElPX09QKE1ESU9fT1BfUkVBRF9UUkFOUyk7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKKwl2YWw2NCA9IHZhbDY0IHwgTURJT19DVFJMX1NUQVJUX1RSQU5TKDB4RSk7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKKwl1ZGVsYXkoMTAwKTsKKworfQorCisvKioKKyAqICBzMmlvX21kaW9fcmVhZCAtIEZ1bmN0aW9uIHRvIHdyaXRlIGluIHRvIE1ESU8gcmVnaXN0ZXJzCisgKiAgQG1tZF90eXBlIDogTU1EIHR5cGUgdmFsdWUgKFBNQS9QTUQvV0lTL1BDUy9QSFlYUykKKyAqICBAYWRkciAgICAgOiBhZGRyZXNzIHZhbHVlCisgKiAgQGRldiAgICAgIDogcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQorICogIERlc2NyaXB0aW9uOgorICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIHZhbHVlcyB0byB0aGUgTURJTyByZWdpc3RlcnMKKyAqICBOT05FCisgKi8KK3N0YXRpYyB1NjQgczJpb19tZGlvX3JlYWQodTMyIG1tZF90eXBlLCB1NjQgYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1NjQgdmFsNjQgPSAweDA7CisJdTY0IHJ2YWw2NCA9IDB4MDsKKwluaWNfdCAqc3AgPSBkZXYtPnByaXY7CisJWEVOQV9kZXZfY29uZmlnX3QgKmJhcjAgPSAoWEVOQV9kZXZfY29uZmlnX3QgKilzcC0+YmFyMDsKKworCS8qIGFkZHJlc3MgdHJhbnNhY3Rpb24gKi8KKwl2YWw2NCA9IHZhbDY0IHwgTURJT19NTURfSU5EWF9BRERSKGFkZHIpCisJCQl8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQorCQkJfCBNRElPX01NU19QUlRfQUREUigweDApOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CisJdmFsNjQgPSB2YWw2NCB8IE1ESU9fQ1RSTF9TVEFSVF9UUkFOUygweEUpOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CisJdWRlbGF5KDEwMCk7CisKKwkvKiBEYXRhIHRyYW5zYWN0aW9uICovCisJdmFsNjQgPSAweDA7CisJdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQorCQkJfCBNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkKKwkJCXwgTURJT19NTVNfUFJUX0FERFIoMHgwKQorCQkJfCBNRElPX09QKE1ESU9fT1BfUkVBRF9UUkFOUyk7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKKwl2YWw2NCA9IHZhbDY0IHwgTURJT19DVFJMX1NUQVJUX1RSQU5TKDB4RSk7CisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKKwl1ZGVsYXkoMTAwKTsKKworCS8qIFJlYWQgdGhlIHZhbHVlIGZyb20gcmVncyAqLworCXJ2YWw2NCA9IHJlYWRxKCZiYXIwLT5tZGlvX2NvbnRyb2wpOworCXJ2YWw2NCA9IHJ2YWw2NCAmIDB4RkZGRjAwMDA7CisJcnZhbDY0ID0gcnZhbDY0ID4+IDE2OworCXJldHVybiBydmFsNjQ7Cit9CisvKioKKyAqICBzMmlvX2Noa194cGFrX2NvdW50ZXIgLSBGdW5jdGlvbiB0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSB4cGFrIGNvdW50ZXJzCisgKiAgQGNvdW50ZXIgICAgICA6IGNvdXRlciB2YWx1ZSB0byBiZSB1cGRhdGVkCisgKiAgQGZsYWcgICAgICAgICA6IGZsYWcgdG8gaW5kaWNhdGUgdGhlIHN0YXR1cworICogIEB0eXBlICAgICAgICAgOiBjb3VudGVyIHR5cGUKKyAqICBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHhwYWsgY291bnRlcnMgdmFsdWUKKyAqICBOT05FCisgKi8KKworc3RhdGljIHZvaWQgczJpb19jaGtfeHBha19jb3VudGVyKHU2NCAqY291bnRlciwgdTY0ICogcmVnc19zdGF0LCB1MzIgaW5kZXgsIHUxNiBmbGFnLCB1MTYgdHlwZSkKK3sKKwl1NjQgbWFzayA9IDB4MzsKKwl1NjQgdmFsNjQ7CisJaW50IGk7CisJZm9yKGkgPSAwOyBpIDxpbmRleDsgaSsrKQorCQltYXNrID0gbWFzayA8PCAweDI7CisKKwlpZihmbGFnID4gMCkKKwl7CisJCSpjb3VudGVyID0gKmNvdW50ZXIgKyAxOworCQl2YWw2NCA9ICpyZWdzX3N0YXQgJiBtYXNrOworCQl2YWw2NCA9IHZhbDY0ID4+IChpbmRleCAqIDB4Mik7CisJCXZhbDY0ID0gdmFsNjQgKyAxOworCQlpZih2YWw2NCA9PSAzKQorCQl7CisJCQlzd2l0Y2godHlwZSkKKwkJCXsKKwkJCWNhc2UgMToKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIlRha2UgWGZyYW1lIE5JQyBvdXQgb2YgIgorCQkJCQkgICJzZXJ2aWNlLiBFeGNlc3NpdmUgdGVtcGVyYXR1cmVzIG1heSAiCisJCQkJCSAgInJlc3VsdCBpbiBwcmVtYXR1cmUgdHJhbnNjZWl2ZXIgIgorCQkJCQkgICJmYWlsdXJlIFxuIik7CisJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIlRha2UgWGZyYW1lIE5JQyBvdXQgb2YgIgorCQkJCQkgICJzZXJ2aWNlIEV4Y2Vzc2l2ZSBiaWFzIGN1cnJlbnRzIG1heSAiCisJCQkJCSAgImluZGljYXRlIGltbWluZW50IGxhc2VyIGRpb2RlICIKKwkJCQkJICAiZmFpbHVyZSBcbiIpOworCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICJUYWtlIFhmcmFtZSBOSUMgb3V0IG9mICIKKwkJCQkJICAic2VydmljZSBFeGNlc3NpdmUgbGFzZXIgb3V0cHV0ICIKKwkJCQkJICAicG93ZXIgbWF5IHNhdHVyYXRlIGZhci1lbmQgIgorCQkJCQkgICJyZWNlaXZlclxuIik7CisJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICJJbmNvcnJlY3QgWFBBSyBBbGFybSAiCisJCQkJCSAgInR5cGUgXG4iKTsKKwkJCX0KKwkJCXZhbDY0ID0gMHgwOworCQl9CisJCXZhbDY0ID0gdmFsNjQgPDwgKGluZGV4ICogMHgyKTsKKwkJKnJlZ3Nfc3RhdCA9ICgqcmVnc19zdGF0ICYgKH5tYXNrKSkgfCAodmFsNjQpOworCisJfSBlbHNlIHsKKwkJKnJlZ3Nfc3RhdCA9ICpyZWdzX3N0YXQgJiAofm1hc2spOworCX0KK30KKworLyoqCisgKiAgczJpb191cGR0X3hwYWtfY291bnRlciAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgeHBhayBjb3VudGVycworICogIEBkZXYgICAgICAgICA6IHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3QKKyAqICBEZXNjcmlwdGlvbjoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHVwYXRlIHRoZSBzdGF0dXMgb2YgdGhlIHhwYWsgY291bnRlcnMgdmFsdWUKKyAqICBOT05FCisgKi8KK3N0YXRpYyB2b2lkIHMyaW9fdXBkdF94cGFrX2NvdW50ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1MTYgZmxhZyAgPSAweDA7CisJdTE2IHR5cGUgID0gMHgwOworCXUxNiB2YWwxNiA9IDB4MDsKKwl1NjQgdmFsNjQgPSAweDA7CisJdTY0IGFkZHIgID0gMHgwOworCisJbmljX3QgKnNwID0gZGV2LT5wcml2OworCVN0YXRJbmZvX3QgKnN0YXRfaW5mbyA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvOworCisJLyogQ2hlY2sgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgTURJTyBzbGF2ZSAqLworCWFkZHIgPSAweDAwMDA7CisJdmFsNjQgPSAweDA7CisJdmFsNjQgPSBzMmlvX21kaW9fcmVhZChNRElPX01NRF9QTUFfREVWX0FERFIsIGFkZHIsIGRldik7CisJaWYoKHZhbDY0ID09IDB4RkZGRikgfHwgKHZhbDY0ID09IDB4MDAwMCkpCisJeworCQlEQkdfUFJJTlQoRVJSX0RCRywgIkVSUjogTURJTyBzbGF2ZSBhY2Nlc3MgZmFpbGVkIC0gIgorCQkJICAiUmV0dXJuZWQgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBmb3IgdGhlIGV4cGVjdGUgdmFsdWUgb2YgMjA0MCBhdCBQTUEgYWRkcmVzcyAweDAwMDAgKi8KKwlpZih2YWw2NCAhPSAweDIwNDApCisJeworCQlEQkdfUFJJTlQoRVJSX0RCRywgIkluY29ycmVjdCB2YWx1ZSBhdCBQTUEgYWRkcmVzcyAweDAwMDAgLSAiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJSZXR1cm5lZDogJWxseC0gRXhwZWN0ZWQ6IDB4MjA0MFxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBMb2FkaW5nIHRoZSBET00gcmVnaXN0ZXIgdG8gTURJTyByZWdpc3RlciAqLworCWFkZHIgPSAweEExMDA7CisJczJpb19tZGlvX3dyaXRlKE1ESU9fTU1EX1BNQV9ERVZfQUREUiwgYWRkciwgdmFsMTYsIGRldik7CisJdmFsNjQgPSBzMmlvX21kaW9fcmVhZChNRElPX01NRF9QTUFfREVWX0FERFIsIGFkZHIsIGRldik7CisKKwkvKiBSZWFkaW5nIHRoZSBBbGFybSBmbGFncyAqLworCWFkZHIgPSAweEEwNzA7CisJdmFsNjQgPSAweDA7CisJdmFsNjQgPSBzMmlvX21kaW9fcmVhZChNRElPX01NRF9QTUFfREVWX0FERFIsIGFkZHIsIGRldik7CisKKwlmbGFnID0gQ0hFQ0tCSVQodmFsNjQsIDB4Nyk7CisJdHlwZSA9IDE7CisJczJpb19jaGtfeHBha19jb3VudGVyKCZzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2gsCisJCQkJJnN0YXRfaW5mby0+eHBha19zdGF0LnhwYWtfcmVnc19zdGF0LAorCQkJCTB4MCwgZmxhZywgdHlwZSk7CisKKwlpZihDSEVDS0JJVCh2YWw2NCwgMHg2KSkKKwkJc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9sb3crKzsKKworCWZsYWcgPSBDSEVDS0JJVCh2YWw2NCwgMHgzKTsKKwl0eXBlID0gMjsKKwlzMmlvX2Noa194cGFrX2NvdW50ZXIoJnN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoLAorCQkJCSZzdGF0X2luZm8tPnhwYWtfc3RhdC54cGFrX3JlZ3Nfc3RhdCwKKwkJCQkweDIsIGZsYWcsIHR5cGUpOworCisJaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MikpCisJCXN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9sb3crKzsKKworCWZsYWcgPSBDSEVDS0JJVCh2YWw2NCwgMHgxKTsKKwl0eXBlID0gMzsKKwlzMmlvX2Noa194cGFrX2NvdW50ZXIoJnN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoLAorCQkJCSZzdGF0X2luZm8tPnhwYWtfc3RhdC54cGFrX3JlZ3Nfc3RhdCwKKwkJCQkweDQsIGZsYWcsIHR5cGUpOworCisJaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MCkpCisJCXN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9sb3crKzsKKworCS8qIFJlYWRpbmcgdGhlIFdhcm5pbmcgZmxhZ3MgKi8KKwlhZGRyID0gMHhBMDc0OworCXZhbDY0ID0gMHgwOworCXZhbDY0ID0gczJpb19tZGlvX3JlYWQoTURJT19NTURfUE1BX0RFVl9BRERSLCBhZGRyLCBkZXYpOworCisJaWYoQ0hFQ0tCSVQodmFsNjQsIDB4NykpCisJCXN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoKys7CisKKwlpZihDSEVDS0JJVCh2YWw2NCwgMHg2KSkKKwkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl90cmFuc2NlaXZlcl90ZW1wX2xvdysrOworCisJaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MykpCisJCXN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2grKzsKKworCWlmKENIRUNLQklUKHZhbDY0LCAweDIpKQorCQlzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9sb3crKzsKKworCWlmKENIRUNLQklUKHZhbDY0LCAweDEpKQorCQlzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoKys7CisKKwlpZihDSEVDS0JJVCh2YWw2NCwgMHgwKSkKKwkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9vdXRwdXRfcG93ZXJfbG93Kys7Cit9CisKKy8qKgogICogIGFsYXJtX2ludHJfaGFuZGxlciAtIEFsYXJtIEludGVycnJ1cHQgaGFuZGxlcgogICogIEBuaWM6IGRldmljZSBwcml2YXRlIHZhcmlhYmxlCiAgKiAgRGVzY3JpcHRpb246IElmIHRoZSBpbnRlcnJ1cHQgd2FzIG5laXRoZXIgYmVjYXVzZSBvZiBSeCBwYWNrZXQgb3IgVHgKQEAgLTI3OTAsNiArMzA5OCwxOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgbmljLT5kZXY7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKIAlyZWdpc3RlciB1NjQgdmFsNjQgPSAwLCBlcnJfcmVnID0gMDsKKwl1NjQgY250OworCWludCBpOworCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5yaW5nX2Z1bGxfY250ID0gMDsKKwkvKiBIYW5kbGluZyB0aGUgWFBBSyBjb3VudGVycyB1cGRhdGUgKi8KKwlpZihuaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnhwYWtfc3RhdC54cGFrX3RpbWVyX2NvdW50IDwgNzIwMDApIHsKKwkJLyogd2FpdGluZyBmb3IgYW4gaG91ciAqLworCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnhwYWtfc3RhdC54cGFrX3RpbWVyX2NvdW50Kys7CisJfSBlbHNlIHsKKwkJczJpb191cGR0X3hwYWtfY291bnRlcihkZXYpOworCQkvKiByZXNldCB0aGUgY291bnQgdG8gemVybyAqLworCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnhwYWtfc3RhdC54cGFrX3RpbWVyX2NvdW50ID0gMDsKKwl9CiAKIAkvKiBIYW5kbGluZyBsaW5rIHN0YXR1cyBjaGFuZ2UgZXJyb3IgSW50ciAqLwogCWlmIChzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWMpID09IE1BQ19STUFDX0VSUl9USU1FUikgewpAQCAtMjgxNiw2ICszMTM2LDggQEAKIAkJCQkJICAgICBNQ19FUlJfUkVHX01JUklfRUNDX0RCX0VSUl8xKSkgewogCQkJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQkJCXNjaGVkdWxlX3dvcmsoJm5pYy0+cnN0X3RpbWVyX3Rhc2spOworCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCisJCQkJCQkJc29mdF9yZXNldF9jbnQrKzsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0yODI3LDExICszMTQ5LDEzIEBACiAJLyogSW4gY2FzZSBvZiBhIHNlcmlvdXMgZXJyb3IsIHRoZSBkZXZpY2Ugd2lsbCBiZSBSZXNldC4gKi8KIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5zZXJyX3NvdXJjZSk7CiAJaWYgKHZhbDY0ICYgU0VSUl9TT1VSQ0VfQU5ZKSB7CisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5zZXJpb3VzX2Vycl9jbnQrKzsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGluZGljYXRlcyAiLCBkZXYtPm5hbWUpOwogCQlEQkdfUFJJTlQoRVJSX0RCRywgInNlcmlvdXMgZXJyb3IgJWxseCEhXG4iLCAKIAkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJc2NoZWR1bGVfd29yaygmbmljLT5yc3RfdGltZXJfdGFzayk7CisJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5zb2Z0X3Jlc2V0X2NudCsrOwogCX0KIAogCS8qCkBAIC0yODQ5LDYgKzMxNzMsMzUgQEAKIAkJYWMgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIAkJc2NoZWR1bGVfd29yaygmbmljLT5zZXRfbGlua190YXNrKTsKIAl9CisJLyogQ2hlY2sgZm9yIGRhdGEgcGFyaXR5IGVycm9yICovCisJdmFsNjQgPSByZWFkcSgmYmFyMC0+cGljX2ludF9zdGF0dXMpOworCWlmICh2YWw2NCAmIFBJQ19JTlRfR1BJTykgeworCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5ncGlvX2ludF9yZWcpOworCQlpZiAodmFsNjQgJiBHUElPX0lOVF9SRUdfRFBfRVJSX0lOVCkgeworCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnBhcml0eV9lcnJfY250Kys7CisJCQlzY2hlZHVsZV93b3JrKCZuaWMtPnJzdF90aW1lcl90YXNrKTsKKwkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5zb2Z0X3Jlc2V0X2NudCsrOworCQl9CisJfQorCisJLyogQ2hlY2sgZm9yIHJpbmcgZnVsbCBjb3VudGVyICovCisJaWYgKG5pYy0+ZGV2aWNlX3R5cGUgJiBYRlJBTUVfSUlfREVWSUNFKSB7CisJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJpbmdfYnVtcF9jb3VudGVyMSk7CisJCWZvciAoaT0wOyBpPDQ7IGkrKykgeworCQkJY250ID0gKCB2YWw2NCAmIHZCSVQoMHhGRkZGLChpKjE2KSwxNikpOworCQkJY250ID4+PSA2NCAtICgoaSsxKSoxNik7CisJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQucmluZ19mdWxsX2NudAorCQkJCSs9IGNudDsKKwkJfQorCisJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJpbmdfYnVtcF9jb3VudGVyMik7CisJCWZvciAoaT0wOyBpPDQ7IGkrKykgeworCQkJY250ID0gKCB2YWw2NCAmIHZCSVQoMHhGRkZGLChpKjE2KSwxNikpOworCQkJY250ID4+PSA2NCAtICgoaSsxKSoxNik7CisJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQucmluZ19mdWxsX2NudAorCQkJCSs9IGNudDsKKwkJfQorCX0KIAogCS8qIE90aGVyIHR5cGUgb2YgaW50ZXJydXB0cyBhcmUgbm90IGJlaW5nIGhhbmRsZWQgbm93LCAgVE9ETyAqLwogfQpAQCAtMjg2NCwyMyArMzIxNywyNiBAQAogICogICBTVUNDRVNTIG9uIHN1Y2Nlc3MgYW5kIEZBSUxVUkUgb24gZmFpbHVyZS4KICAqLwogCi1zdGF0aWMgaW50IHdhaXRfZm9yX2NtZF9jb21wbGV0ZShuaWNfdCAqIHNwKQorc3RhdGljIGludCB3YWl0X2Zvcl9jbWRfY29tcGxldGUodm9pZCAqYWRkciwgdTY0IGJ1c3lfYml0KQogewotCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAlpbnQgcmV0ID0gRkFJTFVSRSwgY250ID0gMDsKIAl1NjQgdmFsNjQ7CiAKIAl3aGlsZSAoVFJVRSkgewotCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7Ci0JCWlmICghKHZhbDY0ICYgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcpKSB7CisJCXZhbDY0ID0gcmVhZHEoYWRkcik7CisJCWlmICghKHZhbDY0ICYgYnVzeV9iaXQpKSB7CiAJCQlyZXQgPSBTVUNDRVNTOwogCQkJYnJlYWs7CiAJCX0KLQkJbXNsZWVwKDUwKTsKKworCQlpZihpbl9pbnRlcnJ1cHQoKSkKKwkJCW1kZWxheSg1MCk7CisJCWVsc2UKKwkJCW1zbGVlcCg1MCk7CisKIAkJaWYgKGNudCsrID4gMTApCiAJCQlicmVhazsKIAl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTE5LDYgKzMyNzUsOSBAQAogCSAqIFBDSSB3cml0ZSB0byBzd19yZXNldCByZWdpc3RlciBpcyBkb25lIGJ5IHRoaXMgdGltZS4KIAkgKi8KIAltc2xlZXAoMjUwKTsKKwlpZiAoc3Ryc3RyKHNwLT5wcm9kdWN0X25hbWUsICJDWDQiKSkgeworCQltc2xlZXAoNzUwKTsKKwl9CiAKIAkvKiBSZXN0b3JlIHRoZSBQQ0kgc3RhdGUgc2F2ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAqLwogCXBjaV9yZXN0b3JlX3N0YXRlKHNwLT5wZGV2KTsKQEAgLTMxMzcsNyArMzQ5Niw3IEBACiAJdTY0IHZhbDY0OwogCWludCBpOwogCi0JZm9yIChpPTA7IGk8IE1BWF9SRVFVRVNURURfTVNJX1g7IGkrKykgeworCWZvciAoaT0wOyBpPCBuaWMtPmF2YWlsX21zaXhfdmVjdG9yczsgaSsrKSB7CiAJCXdyaXRlcShuaWMtPm1zaXhfaW5mb1tpXS5hZGRyLCAmYmFyMC0+eG1zaV9hZGRyZXNzKTsKIAkJd3JpdGVxKG5pYy0+bXNpeF9pbmZvW2ldLmRhdGEsICZiYXIwLT54bXNpX2RhdGEpOwogCQl2YWw2NCA9IChCSVQoNykgfCBCSVQoMTUpIHwgdkJJVChpLCAyNiwgNikpOwpAQCAtMzE1Niw3ICszNTE1LDcgQEAKIAlpbnQgaTsKIAogCS8qIFN0b3JlIGFuZCBkaXNwbGF5ICovCi0JZm9yIChpPTA7IGk8IE1BWF9SRVFVRVNURURfTVNJX1g7IGkrKykgeworCWZvciAoaT0wOyBpPCBuaWMtPmF2YWlsX21zaXhfdmVjdG9yczsgaSsrKSB7CiAJCXZhbDY0ID0gKEJJVCgxNSkgfCB2QklUKGksIDI2LCA2KSk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnhtc2lfYWNjZXNzKTsKIAkJaWYgKHdhaXRfZm9yX21zaXhfdHJhbnMobmljLCBpKSkgewpAQCAtMzI4NCwxNSArMzY0MywyNCBAQAogCQl3cml0ZXEodHhfbWF0LCAmYmFyMC0+dHhfbWF0MF9uWzddKTsKIAl9CiAKKwluaWMtPmF2YWlsX21zaXhfdmVjdG9ycyA9IDA7CiAJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5pYy0+cGRldiwgbmljLT5lbnRyaWVzLCBNQVhfUkVRVUVTVEVEX01TSV9YKTsKKwkvKiBXZSBmYWlsIGluaXQgaWYgZXJyb3Igb3Igd2UgZ2V0IGxlc3MgdmVjdG9ycyB0aGFuIG1pbiByZXF1aXJlZCAqLworCWlmIChyZXQgPj0gKG5pYy0+Y29uZmlnLnR4X2ZpZm9fbnVtICsgbmljLT5jb25maWcucnhfcmluZ19udW0gKyAxKSkgeworCQluaWMtPmF2YWlsX21zaXhfdmVjdG9ycyA9IHJldDsKKwkJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5pYy0+cGRldiwgbmljLT5lbnRyaWVzLCByZXQpOworCX0KIAlpZiAocmV0KSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVuYWJsaW5nIE1TSVggZmFpbGVkXG4iLCBuaWMtPmRldi0+bmFtZSk7CiAJCWtmcmVlKG5pYy0+ZW50cmllcyk7CiAJCWtmcmVlKG5pYy0+czJpb19lbnRyaWVzKTsKIAkJbmljLT5lbnRyaWVzID0gTlVMTDsKIAkJbmljLT5zMmlvX2VudHJpZXMgPSBOVUxMOworCQluaWMtPmF2YWlsX21zaXhfdmVjdG9ycyA9IDA7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwlpZiAoIW5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzKQorCQluaWMtPmF2YWlsX21zaXhfdmVjdG9ycyA9IE1BWF9SRVFVRVNURURfTVNJX1g7CiAKIAkvKgogCSAqIFRvIGVuYWJsZSBNU0ktWCwgTVNJIGFsc28gbmVlZHMgdG8gYmUgZW5hYmxlZCwgZHVlIHRvIGEgYnVnCkBAIC0zMzI1LDggKzM2OTMsNiBAQAogewogCW5pY190ICpzcCA9IGRldi0+cHJpdjsKIAlpbnQgZXJyID0gMDsKLQlpbnQgaTsKLQl1MTYgbXNpX2NvbnRyb2w7IC8qIFRlbXAgdmFyaWFibGUgKi8KIAogCS8qCiAJICogTWFrZSBzdXJlIHlvdSBoYXZlIGxpbmsgb2ZmIGJ5IGRlZmF1bHQgZXZlcnkgdGltZQpAQCAtMzMzNiwxMSArMzcwMiwxNCBAQAogCXNwLT5sYXN0X2xpbmtfc3RhdGUgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSBIL1cgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JaWYgKHMyaW9fY2FyZF91cChzcCkpIHsKKwllcnIgPSBzMmlvX2NhcmRfdXAoc3ApOworCWlmIChlcnIpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogSC9XIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJCSAgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBod19pbml0X2ZhaWxlZDsKKwkJaWYgKGVyciA9PSAtRU5PREVWKQorCQkJZ290byBod19pbml0X2ZhaWxlZDsKKwkJZWxzZQorCQkJZ290byBod19lbmFibGVfZmFpbGVkOwogCX0KIAogCS8qIFN0b3JlIHRoZSB2YWx1ZXMgb2YgdGhlIE1TSVggdGFibGUgaW4gdGhlIG5pY190IHN0cnVjdHVyZSAqLwpAQCAtMzM1Nyw2ICszNzI2LDggQEAKIAkJfQogCX0KIAlpZiAoc3AtPmludHJfdHlwZSA9PSBNU0lfWCkgeworCQlpbnQgaTsKKwogCQlmb3IgKGk9MTsgKHNwLT5zMmlvX2VudHJpZXNbaV0uaW5fdXNlID09IE1TSVhfRkxHKTsgaSsrKSB7CiAJCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS50eXBlID09IE1TSVhfRklGT19UWVBFKSB7CiAJCQkJc3ByaW50ZihzcC0+ZGVzYzEsICIlczpNU0ktWC0lZC1UWCIsCkBAIC0zNDA5LDI0ICszNzgwLDI2IEBACiBpc3JfcmVnaXN0cmF0aW9uX2ZhaWxlZDoKIAlkZWxfdGltZXJfc3luYygmc3AtPmFsYXJtX3RpbWVyKTsKIAlpZiAoc3AtPmludHJfdHlwZSA9PSBNU0lfWCkgewotCQlpZiAoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKLQkJCWZvciAoaT0xOyAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gCisJCWludCBpOworCQl1MTYgbXNpX2NvbnRyb2w7IC8qIFRlbXAgdmFyaWFibGUgKi8KKworCQlmb3IgKGk9MTsgKHNwLT5zMmlvX2VudHJpZXNbaV0uaW5fdXNlID09IAogCQkJCU1TSVhfUkVHSVNURVJFRF9TVUNDRVNTKTsgaSsrKSB7Ci0JCQkJaW50IHZlY3RvciA9IHNwLT5lbnRyaWVzW2ldLnZlY3RvcjsKLQkJCQl2b2lkICphcmcgPSBzcC0+czJpb19lbnRyaWVzW2ldLmFyZzsKKwkJCWludCB2ZWN0b3IgPSBzcC0+ZW50cmllc1tpXS52ZWN0b3I7CisJCQl2b2lkICphcmcgPSBzcC0+czJpb19lbnRyaWVzW2ldLmFyZzsKIAotCQkJCWZyZWVfaXJxKHZlY3RvciwgYXJnKTsKLQkJCX0KLQkJCXBjaV9kaXNhYmxlX21zaXgoc3AtPnBkZXYpOwotCi0JCQkvKiBUZW1wICovCi0JCQlwY2lfcmVhZF9jb25maWdfd29yZChzcC0+cGRldiwgMHg0MiwgJm1zaV9jb250cm9sKTsKLQkJCW1zaV9jb250cm9sICY9IDB4RkZGRTsgLyogRGlzYWJsZSBNU0kgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfd29yZChzcC0+cGRldiwgMHg0MiwgbXNpX2NvbnRyb2wpOworCQkJZnJlZV9pcnEodmVjdG9yLCBhcmcpOwogCQl9CisJCXBjaV9kaXNhYmxlX21zaXgoc3AtPnBkZXYpOworCisJCS8qIFRlbXAgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoc3AtPnBkZXYsIDB4NDIsICZtc2lfY29udHJvbCk7CisJCW1zaV9jb250cm9sICY9IDB4RkZGRTsgLyogRGlzYWJsZSBNU0kgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNwLT5wZGV2LCAweDQyLCBtc2lfY29udHJvbCk7CiAJfQogCWVsc2UgaWYgKHNwLT5pbnRyX3R5cGUgPT0gTVNJKQogCQlwY2lfZGlzYWJsZV9tc2koc3AtPnBkZXYpOworaHdfZW5hYmxlX2ZhaWxlZDoKIAlzMmlvX3Jlc2V0KHNwKTsKIGh3X2luaXRfZmFpbGVkOgogCWlmIChzcC0+aW50cl90eXBlID09IE1TSV9YKSB7CkBAIC0zNDU0LDM1ICszODI3LDEyIEBACiBzdGF0aWMgaW50IHMyaW9fY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7Ci0JaW50IGk7Ci0JdTE2IG1zaV9jb250cm9sOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJLyogUmVzZXQgY2FyZCwga2lsbCB0YXNrbGV0IGFuZCBmcmVlIFR4IGFuZCBSeCBidWZmZXJzLiAqLwotCXMyaW9fY2FyZF9kb3duKHNwKTsKKwlzMmlvX2NhcmRfZG93bihzcCwgMSk7CiAKLQlpZiAoc3AtPmludHJfdHlwZSA9PSBNU0lfWCkgewotCQlpZiAoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKLQkJCWZvciAoaT0xOyAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gCi0JCQkJCU1TSVhfUkVHSVNURVJFRF9TVUNDRVNTKTsgaSsrKSB7Ci0JCQkJaW50IHZlY3RvciA9IHNwLT5lbnRyaWVzW2ldLnZlY3RvcjsKLQkJCQl2b2lkICphcmcgPSBzcC0+czJpb19lbnRyaWVzW2ldLmFyZzsKLQotCQkJCWZyZWVfaXJxKHZlY3RvciwgYXJnKTsKLQkJCX0KLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHNwLT5wZGV2LCAweDQyLCAmbXNpX2NvbnRyb2wpOwotCQkJbXNpX2NvbnRyb2wgJj0gMHhGRkZFOyAvKiBEaXNhYmxlIE1TSSAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNwLT5wZGV2LCAweDQyLCBtc2lfY29udHJvbCk7Ci0KLQkJCXBjaV9kaXNhYmxlX21zaXgoc3AtPnBkZXYpOwotCQl9Ci0JfQotCWVsc2UgewotCQlmcmVlX2lycShzcC0+cGRldi0+aXJxLCBkZXYpOwotCQlpZiAoc3AtPmludHJfdHlwZSA9PSBNU0kpCi0JCQlwY2lfZGlzYWJsZV9tc2koc3AtPnBkZXYpOwotCX0JCiAJc3AtPmRldmljZV9jbG9zZV9mbGFnID0gVFJVRTsJLyogRGV2aWNlIGlzIHNodXQgZG93bi4gKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTM1NDUsNyArMzg5NSw4IEBACiAKIAlxdWV1ZV9sZW4gPSBtYWNfY29udHJvbC0+Zmlmb3NbcXVldWVdLnR4X2N1cnJfcHV0X2luZm8uZmlmb19sZW4gKyAxOwogCS8qIEF2b2lkICJwdXQiIHBvaW50ZXIgZ29pbmcgYmV5b25kICJnZXQiIHBvaW50ZXIgKi8KLQlpZiAodHhkcC0+SG9zdF9Db250cm9sIHx8ICgoKHB1dF9vZmYgKyAxKSAlIHF1ZXVlX2xlbikgPT0gZ2V0X29mZikpIHsKKwlpZiAodHhkcC0+SG9zdF9Db250cm9sIHx8CisJCSAgICgocHV0X29mZisxKSA9PSBxdWV1ZV9sZW4gPyAwIDogKHB1dF9vZmYrMSkpID09IGdldF9vZmYpIHsKIAkJREJHX1BSSU5UKFRYX0RCRywgIkVycm9yIGluIHhtaXQsIE5vIGZyZWUgVFhEcy5cbiIpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTM2NTUsMTEgKzQwMDYsMTMgQEAKIAltbWlvd2IoKTsKIAogCXB1dF9vZmYrKzsKLQlwdXRfb2ZmICU9IG1hY19jb250cm9sLT5maWZvc1txdWV1ZV0udHhfY3Vycl9wdXRfaW5mby5maWZvX2xlbiArIDE7CisJaWYgKHB1dF9vZmYgPT0gbWFjX2NvbnRyb2wtPmZpZm9zW3F1ZXVlXS50eF9jdXJyX3B1dF9pbmZvLmZpZm9fbGVuICsgMSkKKwkJcHV0X29mZiA9IDA7CiAJbWFjX2NvbnRyb2wtPmZpZm9zW3F1ZXVlXS50eF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IHB1dF9vZmY7CiAKIAkvKiBBdm9pZCAicHV0IiBwb2ludGVyIGdvaW5nIGJleW9uZCAiZ2V0IiBwb2ludGVyICovCi0JaWYgKCgocHV0X29mZiArIDEpICUgcXVldWVfbGVuKSA9PSBnZXRfb2ZmKSB7CisJaWYgKCgocHV0X29mZisxKSA9PSBxdWV1ZV9sZW4gPyAwIDogKHB1dF9vZmYrMSkpID09IGdldF9vZmYpIHsKKwkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuZmlmb19mdWxsX2NudCsrOwogCQlEQkdfUFJJTlQoVFhfREJHLAogCQkJICAiTm8gZnJlZSBUeERzIGZvciB4bWl0LCBQdXQ6IDB4JXggR2V0OjB4JXhcbiIsCiAJCQkgIHB1dF9vZmYsIGdldF9vZmYpOwpAQCAtMzc5NSw3ICs0MTQ4LDYgQEAKIAlhdG9taWNfZGVjKCZzcC0+aXNyX2NudCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQotCiBzdGF0aWMgdm9pZCBzMmlvX3R4cGljX2ludHJfaGFuZGxlKG5pY190ICpzcCkKIHsKIAlYRU5BX2Rldl9jb25maWdfdCBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CkBAIC0zODA2LDQxICs0MTU4LDU2IEBACiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X3JlZyk7CiAJCWlmICgodmFsNjQgJiBHUElPX0lOVF9SRUdfTElOS19ET1dOKSAmJgogCQkgICAgKHZhbDY0ICYgR1BJT19JTlRfUkVHX0xJTktfVVApKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyB1bnN0YWJsZSBzdGF0ZSBzbyBjbGVhciBib3RoIHVwL2Rvd24KKwkJCSAqIGludGVycnVwdCBhbmQgYWRhcHRlciB0byByZS1ldmFsdWF0ZSB0aGUgbGluayBzdGF0ZS4KKwkJCSAqLwogCQkJdmFsNjQgfD0gIEdQSU9fSU5UX1JFR19MSU5LX0RPV047CiAJCQl2YWw2NCB8PSBHUElPX0lOVF9SRUdfTElOS19VUDsKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9faW50X3JlZyk7Ci0JCQlnb3RvIG1hc2tpbmc7CisJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5ncGlvX2ludF9tYXNrKTsKKwkJCXZhbDY0ICY9IH4oR1BJT19JTlRfTUFTS19MSU5LX1VQIHwKKwkJCQkgICBHUElPX0lOVF9NQVNLX0xJTktfRE9XTik7CisJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ncGlvX2ludF9tYXNrKTsKIAkJfQorCQllbHNlIGlmICh2YWw2NCAmIEdQSU9fSU5UX1JFR19MSU5LX1VQKSB7CisJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX3N0YXR1cyk7CisJCQlpZiAodmVyaWZ5X3hlbmFfcXVpZXNjZW5jZShzcCwgdmFsNjQsCisJCQkJCQkgICBzcC0+ZGV2aWNlX2VuYWJsZWRfb25jZSkpIHsKKwkJCQkvKiBFbmFibGUgQWRhcHRlciAqLworCQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfY29udHJvbCk7CisJCQkJdmFsNjQgfD0gQURBUFRFUl9DTlRMX0VOOworCQkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmFkYXB0ZXJfY29udHJvbCk7CisJCQkJdmFsNjQgfD0gQURBUFRFUl9MRURfT047CisJCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKKwkJCQlpZiAoIXNwLT5kZXZpY2VfZW5hYmxlZF9vbmNlKQorCQkJCQlzcC0+ZGV2aWNlX2VuYWJsZWRfb25jZSA9IDE7CiAKLQkJaWYgKCgoc3AtPmxhc3RfbGlua19zdGF0ZSA9PSBMSU5LX1VQKSAmJgotCQkJKHZhbDY0ICYgR1BJT19JTlRfUkVHX0xJTktfRE9XTikpIHx8Ci0JCSgoc3AtPmxhc3RfbGlua19zdGF0ZSA9PSBMSU5LX0RPV04pICYmCi0JCSh2YWw2NCAmIEdQSU9fSU5UX1JFR19MSU5LX1VQKSkpIHsKLQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOwotCQkJdmFsNjQgfD0gIEdQSU9fSU5UX01BU0tfTElOS19ET1dOOwotCQkJdmFsNjQgfD0gR1BJT19JTlRfTUFTS19MSU5LX1VQOwotCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfbWFzayk7Ci0JCQlzMmlvX3NldF9saW5rKCh1bnNpZ25lZCBsb25nKXNwKTsKLQkJfQotbWFza2luZzoKLQkJaWYgKHNwLT5sYXN0X2xpbmtfc3RhdGUgPT0gTElOS19VUCkgewotCQkJLyplbmFibGUgZG93biBpbnRlcnJ1cHQgKi8KLQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOwotCQkJLyogdW5tYXNrcyBsaW5rIGRvd24gaW50ciAqLwotCQkJdmFsNjQgJj0gIH5HUElPX0lOVF9NQVNLX0xJTktfRE9XTjsKLQkJCS8qIG1hc2tzIGxpbmsgdXAgaW50ciAqLwotCQkJdmFsNjQgfD0gR1BJT19JTlRfTUFTS19MSU5LX1VQOwotCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfbWFzayk7Ci0JCX0gZWxzZSB7Ci0JCQkvKmVuYWJsZSBVUCBJbnRlcnJ1cHQgKi8KLQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOwotCQkJLyogdW5tYXNrcyBsaW5rIHVwIGludGVycnVwdCAqLwotCQkJdmFsNjQgJj0gfkdQSU9fSU5UX01BU0tfTElOS19VUDsKLQkJCS8qIG1hc2tzIGxpbmsgZG93biBpbnRlcnJ1cHQgKi8KLQkJCXZhbDY0IHw9ICBHUElPX0lOVF9NQVNLX0xJTktfRE9XTjsKLQkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9faW50X21hc2spOworCQkJCXMyaW9fbGluayhzcCwgTElOS19VUCk7CisJCQkJLyoKKwkJCQkgKiB1bm1hc2sgbGluayBkb3duIGludGVycnVwdCBhbmQgbWFzayBsaW5rLXVwCisJCQkJICogaW50cgorCQkJCSAqLworCQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOworCQkJCXZhbDY0ICY9IH5HUElPX0lOVF9NQVNLX0xJTktfRE9XTjsKKwkJCQl2YWw2NCB8PSBHUElPX0lOVF9NQVNLX0xJTktfVVA7CisJCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CisKKwkJCX0KKwkJfWVsc2UgaWYgKHZhbDY0ICYgR1BJT19JTlRfUkVHX0xJTktfRE9XTikgeworCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9zdGF0dXMpOworCQkJaWYgKHZlcmlmeV94ZW5hX3F1aWVzY2VuY2Uoc3AsIHZhbDY0LAorCQkJCQkJICAgc3AtPmRldmljZV9lbmFibGVkX29uY2UpKSB7CisJCQkJczJpb19saW5rKHNwLCBMSU5LX0RPV04pOworCQkJCS8qIExpbmsgaXMgZG93biBzbyB1bm1ha3MgbGluayB1cCBpbnRlcnJ1cHQgKi8KKwkJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5ncGlvX2ludF9tYXNrKTsKKwkJCQl2YWw2NCAmPSB+R1BJT19JTlRfTUFTS19MSU5LX1VQOworCQkJCXZhbDY0IHw9IEdQSU9fSU5UX01BU0tfTElOS19ET1dOOworCQkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9faW50X21hc2spOworCQkJfQogCQl9CiAJfQorCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOwogfQogCiAvKioKQEAgLTM4NjMsNyArNDIzMCw3IEBACiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAlpbnQgaTsKLQl1NjQgcmVhc29uID0gMCwgdmFsNjQ7CisJdTY0IHJlYXNvbiA9IDAsIHZhbDY0LCBvcmdfbWFzazsKIAltYWNfaW5mb190ICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAKQEAgLTM4ODcsNDMgKzQyNTQsNDEgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAorCXZhbDY0ID0gMHhGRkZGRkZGRkZGRkZGRkZGVUxMOworCS8qIFN0b3JlIGN1cnJlbnQgbWFzayBiZWZvcmUgbWFza2luZyBhbGwgaW50ZXJydXB0cyAqLworCW9yZ19tYXNrID0gcmVhZHEoJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOworCiAjaWZkZWYgQ09ORklHX1MySU9fTkFQSQogCWlmIChyZWFzb24gJiBHRU5fSU5UUl9SWFRSQUZGSUMpIHsKIAkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KSkgewotCQkJZW5fZGlzX2FibGVfbmljX2ludHJzKHNwLCBSWF9UUkFGRklDX0lOVFIsCi0JCQkJCSAgICAgIERJU0FCTEVfSU5UUlMpOworCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfdHJhZmZpY19tYXNrKTsKIAkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKIAkJfQogCX0KICNlbHNlCi0JLyogSWYgSW50ciBpcyBiZWNhdXNlIG9mIFJ4IFRyYWZmaWMgKi8KLQlpZiAocmVhc29uICYgR0VOX0lOVFJfUlhUUkFGRklDKSB7Ci0JCS8qCi0JCSAqIHJ4X3RyYWZmaWNfaW50IHJlZyBpcyBhbiBSMSByZWdpc3Rlciwgd3JpdGluZyBhbGwgMSdzCi0JCSAqIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgY2F1c2luZyBiaXQgZ2V0J3MKLQkJICogY2xlYXJlZCBhbmQgaGVuY2UgYSByZWFkIGNhbiBiZSBhdm9pZGVkLgotCQkgKi8KLQkJdmFsNjQgPSAweEZGRkZGRkZGRkZGRkZGRkZVTEw7Ci0JCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKLQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQkJcnhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+cmluZ3NbaV0pOwotCQl9CisJLyoKKwkgKiBSeCBoYW5kbGVyIGlzIGNhbGxlZCBieSBkZWZhdWx0LCB3aXRob3V0IGNoZWNraW5nIGZvciB0aGUKKwkgKiBjYXVzZSBvZiBpbnRlcnJ1cHQuCisJICogcnhfdHJhZmZpY19pbnQgcmVnIGlzIGFuIFIxIHJlZ2lzdGVyLCB3cml0aW5nIGFsbCAxJ3MKKwkgKiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBhY3R1YWwgaW50ZXJydXB0IGNhdXNpbmcgYml0IGdldCdzCisJICogY2xlYXJlZCBhbmQgaGVuY2UgYSByZWFkIGNhbiBiZSBhdm9pZGVkLgorCSAqLworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7CisJCXJ4X2ludHJfaGFuZGxlcigmbWFjX2NvbnRyb2wtPnJpbmdzW2ldKTsKIAl9CiAjZW5kaWYKIAotCS8qIElmIEludHIgaXMgYmVjYXVzZSBvZiBUeCBUcmFmZmljICovCi0JaWYgKHJlYXNvbiAmIEdFTl9JTlRSX1RYVFJBRkZJQykgewotCQkvKgotCQkgKiB0eF90cmFmZmljX2ludCByZWcgaXMgYW4gUjEgcmVnaXN0ZXIsIHdyaXRpbmcgYWxsIDEncwotCQkgKiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBhY3R1YWwgaW50ZXJydXB0IGNhdXNpbmcgYml0IGdldCdzCi0JCSAqIGNsZWFyZWQgYW5kIGhlbmNlIGEgcmVhZCBjYW4gYmUgYXZvaWRlZC4KLQkJICovCi0JCXZhbDY0ID0gMHhGRkZGRkZGRkZGRkZGRkZGVUxMOwotCQl3cml0ZXEodmFsNjQsICZiYXIwLT50eF90cmFmZmljX2ludCk7CisJLyoKKwkgKiB0eF90cmFmZmljX2ludCByZWcgaXMgYW4gUjEgcmVnaXN0ZXIsIHdyaXRpbmcgYWxsIDEncworCSAqIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgY2F1c2luZyBiaXQgZ2V0J3MKKwkgKiBjbGVhcmVkIGFuZCBoZW5jZSBhIHJlYWQgY2FuIGJlIGF2b2lkZWQuCisJICovCisJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHhfdHJhZmZpY19pbnQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspCi0JCQl0eF9pbnRyX2hhbmRsZXIoJm1hY19jb250cm9sLT5maWZvc1tpXSk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspCisJCXR4X2ludHJfaGFuZGxlcigmbWFjX2NvbnRyb2wtPmZpZm9zW2ldKTsKIAogCWlmIChyZWFzb24gJiBHRU5fSU5UUl9UWFBJQykKIAkJczJpb190eHBpY19pbnRyX2hhbmRsZShzcCk7CkBAIC0zOTQ5LDYgKzQzMTQsNyBAQAogCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiBpbiBJU1IhIVxuIik7CiAJCQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOwogCQkJCQlhdG9taWNfZGVjKCZzcC0+aXNyX2NudCk7CisJCQkJCXdyaXRlcShvcmdfbWFzaywgJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOwogCQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCQkJfQogCQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOwpAQCAtMzk2NCw3ICs0MzMwLDcgQEAKIAkJfQogCX0KICNlbmRpZgotCisJd3JpdGVxKG9yZ19tYXNrLCAmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CiAJYXRvbWljX2RlYygmc3AtPmlzcl9jbnQpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTQwNjcsNyArNDQzMyw4IEBACiAJCSAgICBSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQoTUFDX01DX0FMTF9NQ19BRERSX09GRlNFVCk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAkJLyogV2FpdCB0aWxsIGNvbW1hbmQgY29tcGxldGVzICovCi0JCXdhaXRfZm9yX2NtZF9jb21wbGV0ZShzcCk7CisJCXdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCisJCQkJICAgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcpOwogCiAJCXNwLT5tX2Nhc3RfZmxnID0gMTsKIAkJc3AtPmFsbF9tdWx0aV9wb3MgPSBNQUNfTUNfQUxMX01DX0FERFJfT0ZGU0VUOwpAQCAtNDA4Miw3ICs0NDQ5LDggQEAKIAkJICAgIFJNQUNfQUREUl9DTURfTUVNX09GRlNFVChzcC0+YWxsX211bHRpX3Bvcyk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAkJLyogV2FpdCB0aWxsIGNvbW1hbmQgY29tcGxldGVzICovCi0JCXdhaXRfZm9yX2NtZF9jb21wbGV0ZShzcCk7CisJCXdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCisJCQkJICAgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcpOwogCiAJCXNwLT5tX2Nhc3RfZmxnID0gMDsKIAkJc3AtPmFsbF9tdWx0aV9wb3MgPSAwOwpAQCAtNDE0Nyw3ICs0NTE1LDggQEAKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAogCQkJLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0ZXMgKi8KLQkJCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoc3ApKSB7CisJCQlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKKwkJCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORykpIHsKIAkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBBZGRpbmcgIiwKIAkJCQkJICBkZXYtPm5hbWUpOwogCQkJCURCR19QUklOVChFUlJfREJHLCAiTXVsdGljYXN0cyBmYWlsZWRcbiIpOwpAQCAtNDE3Nyw3ICs0NTQ2LDggQEAKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAogCQkJLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0ZXMgKi8KLQkJCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoc3ApKSB7CisJCQlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKKwkJCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORykpIHsKIAkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBBZGRpbmcgIiwKIAkJCQkJICBkZXYtPm5hbWUpOwogCQkJCURCR19QUklOVChFUlJfREJHLCAiTXVsdGljYXN0cyBmYWlsZWRcbiIpOwpAQCAtNDIyMiw3ICs0NTkyLDggQEAKIAkgICAgUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKDApOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAkvKiBXYWl0IHRpbGwgY29tbWFuZCBjb21wbGV0ZXMgKi8KLQlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKHNwKSkgeworCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAorCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORykpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogc2V0X21hY19hZGRyIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIEZBSUxVUkU7CiAJfQpAQCAtNDYxOSw2ICs0OTkwLDQ0IEBACiAJfQogCXJldHVybiByZXQ7CiB9CitzdGF0aWMgdm9pZCBzMmlvX3ZwZF9yZWFkKG5pY190ICpuaWMpCit7CisJdTggdnBkX2RhdGFbMjU2XSxkYXRhOworCWludCBpPTAsIGNudCwgZmFpbCA9IDA7CisJaW50IHZwZF9hZGRyID0gMHg4MDsKKworCWlmIChuaWMtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKKwkJc3RyY3B5KG5pYy0+cHJvZHVjdF9uYW1lLCAiWGZyYW1lIElJIDEwR2JFIG5ldHdvcmsgYWRhcHRlciIpOworCQl2cGRfYWRkciA9IDB4ODA7CisJfQorCWVsc2UgeworCQlzdHJjcHkobmljLT5wcm9kdWN0X25hbWUsICJYZnJhbWUgSSAxMEdiRSBuZXR3b3JrIGFkYXB0ZXIiKTsKKwkJdnBkX2FkZHIgPSAweDUwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz00ICkgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmljLT5wZGV2LCAodnBkX2FkZHIgKyAyKSwgaSk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5pYy0+cGRldiwgICh2cGRfYWRkciArIDIpLCAmZGF0YSk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShuaWMtPnBkZXYsICh2cGRfYWRkciArIDMpLCAwKTsKKwkJZm9yIChjbnQgPSAwOyBjbnQgPDU7IGNudCsrKSB7CisJCQltc2xlZXAoMik7CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShuaWMtPnBkZXYsICh2cGRfYWRkciArIDMpLCAmZGF0YSk7CisJCQlpZiAoZGF0YSA9PSAweDgwKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChjbnQgPj0gNSkgeworCQkJREJHX1BSSU5UKEVSUl9EQkcsICJSZWFkIG9mIFZQRCBkYXRhIGZhaWxlZFxuIik7CisJCQlmYWlsID0gMTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChuaWMtPnBkZXYsICAodnBkX2FkZHIgKyA0KSwKKwkJCQkgICAgICAodTMyICopJnZwZF9kYXRhW2ldKTsKKwl9CisJaWYgKCghZmFpbCkgJiYgKHZwZF9kYXRhWzFdIDwgVlBEX1BST0RVQ1RfTkFNRV9MRU4pKSB7CisJCW1lbXNldChuaWMtPnByb2R1Y3RfbmFtZSwgMCwgdnBkX2RhdGFbMV0pOworCQltZW1jcHkobmljLT5wcm9kdWN0X25hbWUsICZ2cGRfZGF0YVszXSwgdnBkX2RhdGFbMV0pOworCX0KK30KIAogLyoqCiAgKiAgczJpb19ldGh0b29sX2dlZXByb20gIC0gcmVhZHMgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgRWVwcm9tLgpAQCAtNDkzMSw4ICs1MzQwLDEwIEBACiAJdTY0IHZhbDY0OwogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9zdGF0dXMpOwotCWlmICh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX1JNQUNfTE9DQUxfRkFVTFQpCisJaWYoIShMSU5LX0lTX1VQKHZhbDY0KSkpCiAJCSpkYXRhID0gMTsKKwllbHNlCisJCSpkYXRhID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtNTExMiw3ICs1NTIzLDYgQEAKIAlpbnQgaSA9IDA7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCVN0YXRJbmZvX3QgKnN0YXRfaW5mbyA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvOwotCXU2NCB0bXA7CiAKIAlzMmlvX3VwZHRfc3RhdHMoc3ApOwogCXRtcF9zdGF0c1tpKytdID0KQEAgLTUxMjksOSArNTUzOSwxOSBAQAogCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19iY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2Jjc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnRtYWNfcGF1c2VfY3RybF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPQorICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3R0bF9vY3RldHNfb2Zsb3cpIDw8IDMyIHwKKyAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdHRsX29jdGV0cyk7CisJdG1wX3N0YXRzW2krK10gPQorICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3Vjc3RfZnJtc19vZmxvdykgPDwgMzIgfAorICAgICAgICAgICAgICAgIGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY191Y3N0X2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0KKyAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19udWNzdF9mcm1zX29mbG93KSA8PCAzMiB8CisgICAgICAgICAgICAgICAgbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX251Y3N0X2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KIAkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfYW55X2Vycl9mcm1zX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19hbnlfZXJyX2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+dG1hY190dGxfbGVzc19mYl9vY3RldHMpOwogCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT50bWFjX3ZsZF9pcF9vY3RldHMpOwogCXRtcF9zdGF0c1tpKytdID0KIAkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdmxkX2lwX29mbG93KSA8PCAzMiB8CkBAIC01MTYzLDExICs1NTgzLDI3IEBACiAJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsZF9iY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsZF9iY3N0X2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2luX3JuZ19sZW5fZXJyX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX291dF9ybmdfbGVuX2Vycl9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19sb25nX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3BhdXNlX2N0cmxfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdW5zdXBfY3RybF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPQorICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9vY3RldHNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9vY3RldHMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9CisgICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfYWNjZXB0ZWRfdWNzdF9mcm1zX29mbG93KQorCQk8PCAzMiB8IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF91Y3N0X2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0KKyAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF9udWNzdF9mcm1zX29mbG93KQorICAgICAgICAgICAgICAgICA8PCAzMiB8IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF9udWNzdF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9CiAJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Rpc2NhcmRlZF9mcm1zX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kaXNjYXJkZWRfZnJtcyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0KKyAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2V2ZW50c19vZmxvdykKKyAgICAgICAgICAgICAgICAgPDwgMzIgfCBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZHJvcF9ldmVudHMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfbGVzc19mYl9vY3RldHMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQogCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191c2l6ZWRfZnJtc19vZmxvdykgPDwgMzIgfAogCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdXNpemVkX2ZybXMpOwpAQCAtNTE4MCw0MCArNTYxNiwxMjkgQEAKIAl0bXBfc3RhdHNbaSsrXSA9CiAJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2phYmJlcl9mcm1zX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19qYWJiZXJfZnJtcyk7Ci0JdG1wX3N0YXRzW2krK10gPSAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pcF9vZmxvdykgPDwgMzIgfAorCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF82NF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzY1XzEyN19mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzEyOF8yNTVfZnJtcyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF8yNTZfNTExX2ZybXMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfNTEyXzEwMjNfZnJtcyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF8xMDI0XzE1MThfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPQorCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pcF9vZmxvdykgPDwgMzIgfAogCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaXApOwogCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2lwX29jdGV0cyk7CiAJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaGRyX2Vycl9pcCk7Ci0JdG1wX3N0YXRzW2krK10gPSAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2lwX29mbG93KSA8PCAzMiB8CisJdG1wX3N0YXRzW2krK10gPQorCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2lwX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2lwKTsKLQl0bXBfc3RhdHNbaSsrXSA9ICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ljbXBfb2Zsb3cpIDw8IDMyIHwKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ljbXBfb2Zsb3cpIDw8IDMyIHwKIAkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ljbXApOwogCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3RjcCk7Ci0JdG1wX3N0YXRzW2krK10gPSAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191ZHBfb2Zsb3cpIDw8IDMyIHwKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3VkcF9vZmxvdykgPDwgMzIgfAogCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdWRwKTsKIAl0bXBfc3RhdHNbaSsrXSA9CiAJCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Vycl9kcnBfdWRwX29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19lcnJfZHJwX3VkcCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfeGdtaWlfZXJyX3N5bSk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTApOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3ExKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xMik7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTMpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3E0KTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xNSk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTYpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3E3KTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xMCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTEpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3EyKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xMyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTQpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3E1KTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xNik7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTcpOwogCXRtcF9zdGF0c1tpKytdID0KIAkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcGF1c2VfY250X29mbG93KSA8PCAzMiB8CiAJCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19wYXVzZV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3hnbWlpX2RhdGFfZXJyX2NudCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3hnbWlpX2N0cmxfZXJyX2NudCk7CiAJdG1wX3N0YXRzW2krK10gPQogCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF9pcF9vZmxvdykgPDwgMzIgfAogCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfYWNjZXB0ZWRfaXApOwogCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Vycl90Y3ApOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yZF9yZXFfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bmV3X3JkX3JlcV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5uZXdfcmRfcmVxX3J0cnlfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cmRfcnRyeV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT53cl9ydHJ5X3JkX2Fja19jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT53cl9yZXFfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bmV3X3dyX3JlcV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5uZXdfd3JfcmVxX3J0cnlfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+d3JfcnRyeV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT53cl9kaXNjX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJkX3J0cnlfd3JfYWNrX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnR4cF93cl9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT50eGRfcmRfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dHhkX3dyX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJ4ZF9yZF9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yeGRfd3JfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dHhmX3JkX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJ4Zl93cl9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF8xNTE5XzQwOTVfZnJtcyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF80MDk2XzgxOTFfZnJtcyk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF84MTkyX21heF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsX2d0X21heF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfb3NpemVkX2FsdF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfamFiYmVyX2FsdF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZ3RfbWF4X2FsdF9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdmxhbl9mcm1zKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfbGVuX2Rpc2NhcmQpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mY3NfZGlzY2FyZCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3BmX2Rpc2NhcmQpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kYV9kaXNjYXJkKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcmVkX2Rpc2NhcmQpOworICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19ydHNfZGlzY2FyZCk7CisgICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2luZ21fZnVsbF9kaXNjYXJkKTsKKyAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPmxpbmtfZmF1bHRfY250KTsKIAl0bXBfc3RhdHNbaSsrXSA9IDA7CiAJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc2luZ2xlX2VjY19lcnJzOwogCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmRvdWJsZV9lY2NfZXJyczsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5wYXJpdHlfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5zZXJpb3VzX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc29mdF9yZXNldF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZmlmb19mdWxsX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yaW5nX2Z1bGxfY250OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9sb3c7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9sb3c7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV9sYXNlcl9vdXRwdXRfcG93ZXJfaGlnaDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9sb3c7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX3RyYW5zY2VpdmVyX3RlbXBfaGlnaDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9sb3c7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfbG93OworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9vdXRwdXRfcG93ZXJfaGlnaDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdzsKIAl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5jbHViYmVkX2ZybXNfY250OwogCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnNlbmRpbmdfYm90aDsKIAl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5vdXRvZl9zZXF1ZW5jZV9wa3RzOwogCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmZsdXNoX21heF9wa3RzOwotCXRtcCA9IDA7CiAJaWYgKHN0YXRfaW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zKSB7Ci0JCXRtcCA9IHN0YXRfaW5mby0+c3dfc3RhdC5zdW1fYXZnX3BrdHNfYWdncmVnYXRlZDsKLQkJZG9fZGl2KHRtcCwgc3RhdF9pbmZvLT5zd19zdGF0Lm51bV9hZ2dyZWdhdGlvbnMpOworCQl1NjQgdG1wID0gc3RhdF9pbmZvLT5zd19zdGF0LnN1bV9hdmdfcGt0c19hZ2dyZWdhdGVkOworCQlpbnQgY291bnQgPSAwOworCQkvKiAKKwkJICogU2luY2UgNjQtYml0IGRpdmlkZSBkb2VzIG5vdCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsCisJCSAqIGRvIHJlcGVhdGVkIHN1YnRyYWN0aW9uLgorCQkgKi8KKwkJd2hpbGUgKHRtcCA+PSBzdGF0X2luZm8tPnN3X3N0YXQubnVtX2FnZ3JlZ2F0aW9ucykgeworCQkJdG1wIC09IHN0YXRfaW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zOworCQkJY291bnQrKzsKKwkJfQorCQl0bXBfc3RhdHNbaSsrXSA9IGNvdW50OwogCX0KLQl0bXBfc3RhdHNbaSsrXSA9IHRtcDsKKwllbHNlCisJCXRtcF9zdGF0c1tpKytdID0gMDsKIH0KIAogc3RhdGljIGludCBzMmlvX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MzUxLDcgKzU4NzYsNyBAQAogCiAJZGV2LT5tdHUgPSBuZXdfbXR1OwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJczJpb19jYXJkX2Rvd24oc3ApOworCQlzMmlvX2NhcmRfZG93bihzcCwgMCk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJaWYgKHMyaW9fY2FyZF91cChzcCkpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IERldmljZSBicmluZyB1cCBmYWlsZWRcbiIsCkBAIC01NDg5LDEyICs2MDE0LDE3MiBAQAogCWNsZWFyX2JpdCgwLCAmKG5pYy0+bGlua19zdGF0ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBzMmlvX2NhcmRfZG93bihuaWNfdCAqIHNwKQorc3RhdGljIGludCBzZXRfcnhkX2J1ZmZlcl9wb2ludGVyKG5pY190ICpzcCwgUnhEX3QgKnJ4ZHAsIGJ1ZmZBZGRfdCAqYmEsCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgdTY0ICp0ZW1wMCwgdTY0ICp0ZW1wMSwKKwkJCSAgIHU2NCAqdGVtcDIsIGludCBzaXplKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzcC0+ZGV2OworCXN0cnVjdCBza19idWZmICpmcmFnX2xpc3Q7CisKKwlpZiAoKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8xKSAmJiAocnhkcC0+SG9zdF9Db250cm9sID09IDApKSB7CisJCS8qIGFsbG9jYXRlIHNrYiAqLworCQlpZiAoKnNrYikgeworCQkJREJHX1BSSU5UKElORk9fREJHLCAiU0tCIGlzIG5vdCBOVUxMXG4iKTsKKwkJCS8qCisJCQkgKiBBcyBSeCBmcmFtZSBhcmUgbm90IGdvaW5nIHRvIGJlIHByb2Nlc3NlZCwKKwkJCSAqIHVzaW5nIHNhbWUgbWFwcGVkIGFkZHJlc3MgZm9yIHRoZSBSeGQKKwkJCSAqIGJ1ZmZlciBwb2ludGVyCisJCQkgKi8KKwkJCSgoUnhEMV90KilyeGRwKS0+QnVmZmVyMF9wdHIgPSAqdGVtcDA7CisJCX0gZWxzZSB7CisJCQkqc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKKwkJCWlmICghKCpza2IpKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogT3V0IG9mICIsIGRldi0+bmFtZSk7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICJtZW1vcnkgdG8gYWxsb2NhdGUgU0tCc1xuIik7CisJCQkJcmV0dXJuIC1FTk9NRU0gOworCQkJfQorCQkJLyogc3RvcmluZyB0aGUgbWFwcGVkIGFkZHIgaW4gYSB0ZW1wIHZhcmlhYmxlCisJCQkgKiBzdWNoIGl0IHdpbGwgYmUgdXNlZCBmb3IgbmV4dCByeGQgd2hvc2UKKwkJCSAqIEhvc3QgQ29udHJvbCBpcyBOVUxMCisJCQkgKi8KKwkJCSgoUnhEMV90KilyeGRwKS0+QnVmZmVyMF9wdHIgPSAqdGVtcDAgPQorCQkJCXBjaV9tYXBfc2luZ2xlKCBzcC0+cGRldiwgKCpza2IpLT5kYXRhLAorCQkJCQlzaXplIC0gTkVUX0lQX0FMSUdOLAorCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcnhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpICgqc2tiKTsKKwkJfQorCX0gZWxzZSBpZiAoKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgJiYgKHJ4ZHAtPkhvc3RfQ29udHJvbCA9PSAwKSkgeworCQkvKiBUd28gYnVmZmVyIE1vZGUgKi8KKwkJaWYgKCpza2IpIHsKKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMl9wdHIgPSAqdGVtcDI7CisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjBfcHRyID0gKnRlbXAwOworCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIxX3B0ciA9ICp0ZW1wMTsKKwkJfSBlbHNlIHsKKwkJCSpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOworCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIyX3B0ciA9ICp0ZW1wMiA9CisJCQkJcGNpX21hcF9zaW5nbGUoc3AtPnBkZXYsICgqc2tiKS0+ZGF0YSwKKwkJCQkJICAgICAgIGRldi0+bXR1ICsgNCwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjBfcHRyID0gKnRlbXAwID0KKwkJCQlwY2lfbWFwX3NpbmdsZSggc3AtPnBkZXYsIGJhLT5iYV8wLCBCVUYwX0xFTiwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZykgKCpza2IpOworCisJCQkvKiBCdWZmZXItMSB3aWxsIGJlIGR1bW15IGJ1ZmZlciBub3QgdXNlZCAqLworCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIxX3B0ciA9ICp0ZW1wMSA9CisJCQkJcGNpX21hcF9zaW5nbGUoc3AtPnBkZXYsIGJhLT5iYV8xLCBCVUYxX0xFTiwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0KKwl9IGVsc2UgaWYgKChyeGRwLT5Ib3N0X0NvbnRyb2wgPT0gMCkpIHsKKwkJLyogVGhyZWUgYnVmZmVyIG1vZGUgKi8KKwkJaWYgKCpza2IpIHsKKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMF9wdHIgPSAqdGVtcDA7CisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyID0gKnRlbXAxOworCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIyX3B0ciA9ICp0ZW1wMjsKKwkJfSBlbHNlIHsKKwkJCSpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOworCisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjBfcHRyID0gKnRlbXAwID0KKwkJCQlwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwgYmEtPmJhXzAsIEJVRjBfTEVOLAorCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCS8qIEJ1ZmZlci0xIHJlY2VpdmVzIEwzL0w0IGhlYWRlcnMgKi8KKwkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMV9wdHIgPSAqdGVtcDEgPQorCQkJCXBjaV9tYXBfc2luZ2xlKCBzcC0+cGRldiwgKCpza2IpLT5kYXRhLAorCQkJCQkJbDNsNGhkcl9zaXplICsgNCwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkvKgorCQkJICogc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Qgd2lsbCBoYXZlIEw0CisJCQkgKiBkYXRhIHBheWxvYWQKKwkJCSAqLworCQkJc2tiX3NoaW5mbygqc2tiKS0+ZnJhZ19saXN0ID0gZGV2X2FsbG9jX3NrYihkZXYtPm10dSArCisJCQkJCQkJCSAgIEFMSUdOX1NJWkUpOworCQkJaWYgKHNrYl9zaGluZm8oKnNrYiktPmZyYWdfbGlzdCA9PSBOVUxMKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogZGV2X2FsbG9jX3NrYiBcCisJCQkJCSAgZmFpbGVkXG4gIiwgZGV2LT5uYW1lKTsKKwkJCQlyZXR1cm4gLUVOT01FTSA7CisJCQl9CisJCQlmcmFnX2xpc3QgPSBza2Jfc2hpbmZvKCpza2IpLT5mcmFnX2xpc3Q7CisJCQlmcmFnX2xpc3QtPm5leHQgPSBOVUxMOworCQkJLyoKKwkJCSAqIEJ1ZmZlci0yIHJlY2VpdmVzIEw0IGRhdGEgcGF5bG9hZAorCQkJICovCisJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjJfcHRyID0gKnRlbXAyID0KKwkJCQlwY2lfbWFwX3NpbmdsZSggc3AtPnBkZXYsIGZyYWdfbGlzdC0+ZGF0YSwKKwkJCQkJCWRldi0+bXR1LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQl9CisJfQorCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgc2V0X3J4ZF9idWZmZXJfc2l6ZShuaWNfdCAqc3AsIFJ4RF90ICpyeGRwLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKKwlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpIHsKKwkJcnhkcC0+Q29udHJvbF8yID0gU0VUX0JVRkZFUjBfU0laRV8xKCBzaXplIC0gTkVUX0lQX0FMSUdOKTsKKwl9IGVsc2UgaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgeworCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzMoQlVGMF9MRU4pOworCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjFfU0laRV8zKDEpOworCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjJfU0laRV8zKCBkZXYtPm10dSArIDQpOworCX0gZWxzZSB7CisJCXJ4ZHAtPkNvbnRyb2xfMiA9IFNFVF9CVUZGRVIwX1NJWkVfMyhCVUYwX0xFTik7CisJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMV9TSVpFXzMobDNsNGhkcl9zaXplICsgNCk7CisJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMl9TSVpFXzMoZGV2LT5tdHUpOworCX0KK30KKworc3RhdGljICBpbnQgcnhkX293bmVyX2JpdF9yZXNldChuaWNfdCAqc3ApCit7CisJaW50IGksIGosIGssIGJsa19jbnQgPSAwLCBzaXplOworCW1hY19pbmZvX3QgKiBtYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJnNwLT5jb25maWc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CisJUnhEX3QgKnJ4ZHAgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCWJ1ZmZBZGRfdCAqYmEgPSBOVUxMOworCXU2NCB0ZW1wMF82NCA9IDAsIHRlbXAxXzY0ID0gMCwgdGVtcDJfNjQgPSAwOworCisJLyogQ2FsY3VsYXRlIHRoZSBzaXplIGJhc2VkIG9uIHJpbmcgbW9kZSAqLworCXNpemUgPSBkZXYtPm10dSArIEhFQURFUl9FVEhFUk5FVF9JSV84MDJfM19TSVpFICsKKwkJSEVBREVSXzgwMl8yX1NJWkUgKyBIRUFERVJfU05BUF9TSVpFOworCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkKKwkJc2l6ZSArPSBORVRfSVBfQUxJR047CisJZWxzZSBpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKQorCQlzaXplID0gZGV2LT5tdHUgKyBBTElHTl9TSVpFICsgQlVGMF9MRU4gKyA0OworCWVsc2UKKwkJc2l6ZSA9IGwzbDRoZHJfc2l6ZSArIEFMSUdOX1NJWkUgKyBCVUYwX0xFTiArIDQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7CisJCWJsa19jbnQgPSBjb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkIC8KKwkJCShyeGRfY291bnRbc3AtPnJ4ZF9tb2RlXSArMSk7CisKKwkJZm9yIChqID0gMDsgaiA8IGJsa19jbnQ7IGorKykgeworCQkJZm9yIChrID0gMDsgayA8IHJ4ZF9jb3VudFtzcC0+cnhkX21vZGVdOyBrKyspIHsKKwkJCQlyeGRwID0gbWFjX2NvbnRyb2wtPnJpbmdzW2ldLgorCQkJCQlyeF9ibG9ja3Nbal0ucnhkc1trXS52aXJ0X2FkZHI7CisJCQkJaWYoc3AtPnJ4ZF9tb2RlID49IFJYRF9NT0RFXzNBKQorCQkJCQliYSA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV0uYmFbal1ba107CisJCQkJc2V0X3J4ZF9idWZmZXJfcG9pbnRlcihzcCwgcnhkcCwgYmEsCisJCQkJCQkgICAgICAgJnNrYiwodTY0ICopJnRlbXAwXzY0LAorCQkJCQkJICAgICAgICh1NjQgKikmdGVtcDFfNjQsCisJCQkJCQkgICAgICAgKHU2NCAqKSZ0ZW1wMl82NCwgc2l6ZSk7CisKKwkJCQlzZXRfcnhkX2J1ZmZlcl9zaXplKHNwLCByeGRwLCBzaXplKTsKKwkJCQl3bWIoKTsKKwkJCQkvKiBmbGlwIHRoZSBPd25lcnNoaXAgYml0IHRvIEhhcmR3YXJlICovCisJCQkJcnhkcC0+Q29udHJvbF8xIHw9IFJYRF9PV05fWEVOQTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgdm9pZCBzMmlvX2NhcmRfZG93bihuaWNfdCAqIHNwLCBpbnQgZmxhZykKIHsKIAlpbnQgY250ID0gMDsKIAlYRU5BX2Rldl9jb25maWdfdCBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlyZWdpc3RlciB1NjQgdmFsNjQgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzcC0+ZGV2OwogCiAJZGVsX3RpbWVyX3N5bmMoJnNwLT5hbGFybV90aW1lcik7CiAJLyogSWYgczJpb19zZXRfbGluayB0YXNrIGlzIGV4ZWN1dGluZywgd2FpdCB0aWxsIGl0IGNvbXBsZXRlcy4gKi8KQEAgLTU1MDUsMTIgKzYxOTAsNTEgQEAKIAogCS8qIGRpc2FibGUgVHggYW5kIFJ4IHRyYWZmaWMgb24gdGhlIE5JQyAqLwogCXN0b3BfbmljKHNwKTsKKwlpZiAoZmxhZykgeworCQlpZiAoc3AtPmludHJfdHlwZSA9PSBNU0lfWCkgeworCQkJaW50IGk7CisJCQl1MTYgbXNpX2NvbnRyb2w7CisKKwkJCWZvciAoaT0xOyAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0KKwkJCQlNU0lYX1JFR0lTVEVSRURfU1VDQ0VTUyk7IGkrKykgeworCQkJCWludCB2ZWN0b3IgPSBzcC0+ZW50cmllc1tpXS52ZWN0b3I7CisJCQkJdm9pZCAqYXJnID0gc3AtPnMyaW9fZW50cmllc1tpXS5hcmc7CisKKwkJCQlmcmVlX2lycSh2ZWN0b3IsIGFyZyk7CisJCQl9CisJCQlwY2lfcmVhZF9jb25maWdfd29yZChzcC0+cGRldiwgMHg0MiwgJm1zaV9jb250cm9sKTsKKwkJCW1zaV9jb250cm9sICY9IDB4RkZGRTsgLyogRGlzYWJsZSBNU0kgKi8KKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChzcC0+cGRldiwgMHg0MiwgbXNpX2NvbnRyb2wpOworCQkJcGNpX2Rpc2FibGVfbXNpeChzcC0+cGRldik7CisJCX0gZWxzZSB7CisJCQlmcmVlX2lycShzcC0+cGRldi0+aXJxLCBkZXYpOworCQkJaWYgKHNwLT5pbnRyX3R5cGUgPT0gTVNJKQorCQkJCXBjaV9kaXNhYmxlX21zaShzcC0+cGRldik7CisJCX0KKwl9CisJLyogV2FpdGluZyB0aWxsIGFsbCBJbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIGNvbXBsZXRlICovCisJY250ID0gMDsKKwlkbyB7CisJCW1zbGVlcCgxMCk7CisJCWlmICghYXRvbWljX3JlYWQoJnNwLT5pc3JfY250KSkKKwkJCWJyZWFrOworCQljbnQrKzsKKwl9IHdoaWxlKGNudCA8IDUpOwogCiAJLyogS2lsbCB0YXNrbGV0LiAqLwogCXRhc2tsZXRfa2lsbCgmc3AtPnRhc2spOwogCiAJLyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBRdWllc2NlbnQgYW5kIHRoZW4gUmVzZXQgdGhlIE5JQyAqLwogCWRvIHsKKwkJLyogQXMgcGVyIHRoZSBIVyByZXF1aXJlbWVudCB3ZSBuZWVkIHRvIHJlcGxlbmlzaCB0aGUKKwkJICogcmVjZWl2ZSBidWZmZXIgdG8gYXZvaWQgdGhlIHJpbmcgYnVtcC4gU2luY2UgdGhlcmUgaXMKKwkJICogbm8gaW50ZW50aW9uIG9mIHByb2Nlc3NpbmcgdGhlIFJ4IGZyYW1lIGF0IHRoaXMgcG9pbnR3ZSBhcmUKKwkJICoganVzdCBzZXR0dGluZyB0aGUgb3duZXJzaGlwIGJpdCBvZiByeGQgaW4gRWFjaCBSeAorCQkgKiByaW5nIHRvIEhXIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIGJ1ZmZlciBzaXplCisJCSAqIGJhc2VkIG9uIHRoZSByaW5nIG1vZGUKKwkJICovCisJCXJ4ZF9vd25lcl9iaXRfcmVzZXQoc3ApOworCiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfc3RhdHVzKTsKIAkJaWYgKHZlcmlmeV94ZW5hX3F1aWVzY2VuY2Uoc3AsIHZhbDY0LCBzcC0+ZGV2aWNlX2VuYWJsZWRfb25jZSkpIHsKIAkJCWJyZWFrOwpAQCAtNTUyOCwxNSArNjI1Miw2IEBACiAJfSB3aGlsZSAoMSk7CiAJczJpb19yZXNldChzcCk7CiAKLQkvKiBXYWl0aW5nIHRpbGwgYWxsIEludGVycnVwdCBoYW5kbGVycyBhcmUgY29tcGxldGUgKi8KLQljbnQgPSAwOwotCWRvIHsKLQkJbXNsZWVwKDEwKTsKLQkJaWYgKCFhdG9taWNfcmVhZCgmc3AtPmlzcl9jbnQpKQotCQkJYnJlYWs7Ci0JCWNudCsrOwotCX0gd2hpbGUoY250IDwgNSk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3AtPnR4X2xvY2ssIGZsYWdzKTsKIAkvKiBGcmVlIGFsbCBUeCBidWZmZXJzICovCiAJZnJlZV90eF9idWZmZXJzKHNwKTsKQEAgLTU2MzcsNyArNjM1Miw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwogCW5pY190ICpzcCA9IGRldi0+cHJpdjsKIAotCXMyaW9fY2FyZF9kb3duKHNwKTsKKwlzMmlvX2NhcmRfZG93bihzcCwgMCk7CiAJaWYgKHMyaW9fY2FyZF91cChzcCkpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGJyaW5nIHVwIGZhaWxlZFxuIiwKIAkJCSAgZGV2LT5uYW1lKTsKQEAgLTU2NjcsNiArNjM4Miw3IEBACiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCXNjaGVkdWxlX3dvcmsoJnNwLT5yc3RfdGltZXJfdGFzayk7CisJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnNvZnRfcmVzZXRfY250Kys7CiAJfQogfQogCkBAIC01Njk1LDE4ICs2NDExLDMzIEBACiAJCSgodW5zaWduZWQgbG9uZykgcnhkcC0+SG9zdF9Db250cm9sKTsKIAlpbnQgcmluZ19ubyA9IHJpbmdfZGF0YS0+cmluZ19ubzsKIAl1MTYgbDNfY3N1bSwgbDRfY3N1bTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXJyID0gcnhkcC0+Q29udHJvbF8xICYgUlhEX1RfQ09ERTsKIAlscm9fdCAqbHJvOwogCiAJc2tiLT5kZXYgPSBkZXY7Ci0JaWYgKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9UX0NPREUpIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVyciA9IHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9UX0NPREU7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IFJ4IGVycm9yIFZhbHVlOiAweCVsbHhcbiIsCi0JCQkgIGRldi0+bmFtZSwgZXJyKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlzcC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwotCQlhdG9taWNfZGVjKCZzcC0+cnhfYnVmc19sZWZ0W3Jpbmdfbm9dKTsKLQkJcnhkcC0+SG9zdF9Db250cm9sID0gMDsKLQkJcmV0dXJuIDA7CisKKwlpZiAoZXJyKSB7CisJCS8qIENoZWNrIGZvciBwYXJpdHkgZXJyb3IgKi8KKwkJaWYgKGVyciAmIDB4MSkgeworCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQucGFyaXR5X2Vycl9jbnQrKzsKKwkJfQorCisJCS8qCisJCSogRHJvcCB0aGUgcGFja2V0IGlmIGJhZCB0cmFuc2ZlciBjb2RlLiBFeGNlcHRpb24gYmVpbmcKKwkJKiAweDUsIHdoaWNoIGNvdWxkIGJlIGR1ZSB0byB1bnN1cHBvcnRlZCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIuCisJCSogSW4gdGhpcyBjYXNlLCB3ZSBsZXQgc3RhY2sgaGFuZGxlIHRoZSBwYWNrZXQuCisJCSogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgc2luY2UgY2hlY2tzdW0gd2lsbCBiZSBpbmNvcnJlY3QsCisJCSogc3RhY2sgd2lsbCB2YWxpZGF0ZSB0aGUgc2FtZS4KKwkJKi8KKwkJaWYgKGVyciAmJiAoKGVyciA+PiA0OCkgIT0gMHg1KSkgeworCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUnggZXJyb3IgVmFsdWU6IDB4JWxseFxuIiwKKwkJCQlkZXYtPm5hbWUsIGVycik7CisJCQlzcC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJYXRvbWljX2RlYygmc3AtPnJ4X2J1ZnNfbGVmdFtyaW5nX25vXSk7CisJCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAwOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAkvKiBVcGRhdGluZyBzdGF0aXN0aWNzICovCkBAIC01NzkyLDYgKzY1MjMsOSBAQAogCQkJCQkJY2xlYXJfbHJvX3Nlc3Npb24obHJvKTsKIAkJCQkJCWdvdG8gc2VuZF91cDsKIAkJCQkJY2FzZSAwOiAvKiBzZXNzaW9ucyBleGNlZWRlZCAqLworCQkJCQljYXNlIC0xOiAvKiBub24tVENQIG9yIG5vdAorCQkJCQkJICAqIEwyIGFnZ3JlZ2F0YWJsZQorCQkJCQkJICAqLwogCQkJCQljYXNlIDU6IC8qCiAJCQkJCQkgKiBGaXJzdCBwa3QgaW4gc2Vzc2lvbiBub3QKIAkJCQkJCSAqIEwzL0w0IGFnZ3JlZ2F0YWJsZQpAQCAtNTkxOCwxMyArNjY1Miw2IEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNwLT5wZGV2LCBQQ0lfQ09NTUFORCwKIAkJCSAgICAgIChwY2lfY21kIHwgUENJX0NPTU1BTkRfUEFSSVRZKSk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoc3AtPnBkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7Ci0KLQkvKiBGb3JjaWJseSBkaXNhYmxpbmcgcmVsYXhlZCBvcmRlcmluZyBjYXBhYmlsaXR5IG9mIHRoZSBjYXJkLiAqLwotCXBjaXhfY21kICY9IDB4ZmZmZDsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoc3AtPnBkZXYsIFBDSVhfQ09NTUFORF9SRUdJU1RFUiwKLQkJCSAgICAgIHBjaXhfY21kKTsKLQlwY2lfcmVhZF9jb25maWdfd29yZChzcC0+cGRldiwgUENJWF9DT01NQU5EX1JFR0lTVEVSLAotCQkJICAgICAmKHBjaXhfY21kKSk7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIlJhZ2hhdmVuZHJhIEtvdXNoaWsgPHJhZ2hhdmVuZHJhLmtvdXNoaWtAbmV0ZXJpb24uY29tPiIpOwpAQCAtNTk1NCw2ICs2NjgxLDU1IEBACiBtb2R1bGVfcGFyYW0obHJvLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtKGxyb19tYXhfcGt0cywgaW50LCAwKTsKIAorc3RhdGljIGludCBzMmlvX3ZlcmlmeV9wYXJtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCAqZGV2X2ludHJfdHlwZSkKK3sKKwlpZiAoIHR4X2ZpZm9fbnVtID4gOCkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCBudW1iZXIgb2YgVHggZmlmb3Mgbm90ICIKKwkJCSAic3VwcG9ydGVkXG4iKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBEZWZhdWx0IHRvIDggVHggZmlmb3NcbiIpOworCQl0eF9maWZvX251bSA9IDg7CisJfQorCWlmICggcnhfcmluZ19udW0gPiA4KSB7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIG51bWJlciBvZiBSeCByaW5ncyBub3QgIgorCQkJICJzdXBwb3J0ZWRcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERlZmF1bHQgdG8gOCBSeCByaW5nc1xuIik7CisJCXJ4X3JpbmdfbnVtID0gODsKKwl9CisjaWZkZWYgQ09ORklHX1MySU9fTkFQSQorCWlmICgqZGV2X2ludHJfdHlwZSAhPSBJTlRBKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogTkFQSSBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuICIKKwkJCSAgIk1TSS9NU0ktWCBpcyBlbmFibGVkLiBEZWZhdWx0aW5nIHRvIElOVEFcbiIpOworCQkqZGV2X2ludHJfdHlwZSA9IElOVEE7CisJfQorI2VuZGlmCisjaWZuZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKCpkZXZfaW50cl90eXBlICE9IElOVEEpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBUaGlzIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IgorCQkJICAiTVNJL01TSS1YLiBEZWZhdWx0aW5nIHRvIElOVEFcbiIpOworCQkqZGV2X2ludHJfdHlwZSA9IElOVEE7CisJfQorI2Vsc2UKKwlpZiAoKmRldl9pbnRyX3R5cGUgPiBNU0lfWCkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFdyb25nIGludHJfdHlwZSByZXF1ZXN0ZWQuICIKKwkJCSAgIkRlZmF1bHRpbmcgdG8gSU5UQVxuIik7CisJCSpkZXZfaW50cl90eXBlID0gSU5UQTsKKwl9CisjZW5kaWYKKwlpZiAoKCpkZXZfaW50cl90eXBlID09IE1TSV9YKSAmJgorCQkJKChwZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9IRVJDX1dJTikgJiYKKwkJCShwZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9IRVJDX1VOSSkpKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogWGZyYW1lIEkgZG9lcyBub3Qgc3VwcG9ydCBNU0lfWC4gIiAKKwkJCQkJIkRlZmF1bHRpbmcgdG8gSU5UQVxuIik7CisJCSpkZXZfaW50cl90eXBlID0gSU5UQTsKKwl9CisJaWYgKHJ4X3JpbmdfbW9kZSA+IDMpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBSZXF1ZXN0ZWQgcmluZyBtb2RlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERlZmF1bHRpbmcgdG8gMy1idWZmZXIgbW9kZVxuIik7CisJCXJ4X3JpbmdfbW9kZSA9IDM7CisJfQorCXJldHVybiBTVUNDRVNTOworfQorCiAvKioKICAqICBzMmlvX2luaXRfbmljIC0gSW5pdGlhbGl6YXRpb24gb2YgdGhlIGFkYXB0ZXIgLgogICogIEBwZGV2IDogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIFBDSSByZWxhdGVkIGluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UuCkBAIC01OTg0LDE1ICs2NzYwLDggQEAKIAlpbnQgbW9kZTsKIAl1OCBkZXZfaW50cl90eXBlID0gaW50cl90eXBlOwogCi0jaWZkZWYgQ09ORklHX1MySU9fTkFQSQotCWlmIChkZXZfaW50cl90eXBlICE9IElOVEEpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJOQVBJIGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gTVNJL01TSS1YIFwKLWlzIGVuYWJsZWQuIERlZmF1bHRpbmcgdG8gSU5UQVxuIik7Ci0JCWRldl9pbnRyX3R5cGUgPSBJTlRBOwotCX0KLQllbHNlCi0JCURCR19QUklOVChFUlJfREJHLCAiTkFQSSBzdXBwb3J0IGhhcyBiZWVuIGVuYWJsZWRcbiIpOwotI2VuZGlmCisJaWYgKChyZXQgPSBzMmlvX3ZlcmlmeV9wYXJtKHBkZXYsICZkZXZfaW50cl90eXBlKSkpCisJCXJldHVybiByZXQ7CiAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywKQEAgLTYwMTcsMTQgKzY3ODYsNiBAQAogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQotCWlmICgoZGV2X2ludHJfdHlwZSA9PSBNU0lfWCkgJiYgCi0JCQkoKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0hFUkNfV0lOKSAmJgotCQkJKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0hFUkNfVU5JKSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJYZnJhbWUgSSBkb2VzIG5vdCBzdXBwb3J0IE1TSV9YLiBcCi1EZWZhdWx0aW5nIHRvIElOVEFcbiIpOwotCQlkZXZfaW50cl90eXBlID0gSU5UQTsKLQl9CiAJaWYgKGRldl9pbnRyX3R5cGUgIT0gTVNJX1gpIHsKIAkJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgczJpb19kcml2ZXJfbmFtZSkpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiUmVxdWVzdCBSZWdpb25zIGZhaWxlZFxuIiksCkBAIC02MTAwLDggKzY4NjEsNiBAQAogCWNvbmZpZyA9ICZzcC0+Y29uZmlnOwogCiAJLyogVHggc2lkZSBwYXJhbWV0ZXJzLiAqLwotCWlmICh0eF9maWZvX2xlblswXSA9PSAwKQotCQl0eF9maWZvX2xlblswXSA9IERFRkFVTFRfRklGT19MRU47IC8qIERlZmF1bHQgdmFsdWUuICovCiAJY29uZmlnLT50eF9maWZvX251bSA9IHR4X2ZpZm9fbnVtOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfVFhfRklGT1M7IGkrKykgewogCQljb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiA9IHR4X2ZpZm9fbGVuW2ldOwpAQCAtNjEyNSw4ICs2ODg0LDYgQEAKIAljb25maWctPm1heF90eGRzID0gTUFYX1NLQl9GUkFHUyArIDI7CiAKIAkvKiBSeCBzaWRlIHBhcmFtZXRlcnMuICovCi0JaWYgKHJ4X3Jpbmdfc3pbMF0gPT0gMCkKLQkJcnhfcmluZ19zelswXSA9IFNNQUxMX0JMS19DTlQ7IC8qIERlZmF1bHQgdmFsdWUuICovCiAJY29uZmlnLT5yeF9yaW5nX251bSA9IHJ4X3JpbmdfbnVtOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfUlhfUklOR1M7IGkrKykgewogCQljb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkID0gcnhfcmluZ19zeltpXSAqCkBAIC02MjY3LDggKzcwMjQsOCBAQAogCXZhbDY0ID0gUk1BQ19BRERSX0NNRF9NRU1fUkQgfCBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CiAJICAgIFJNQUNfQUREUl9DTURfTUVNX09GRlNFVCgwICsgTUFDX01BQ19BRERSX1NUQVJUX09GRlNFVCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwotCXdhaXRfZm9yX2NtZF9jb21wbGV0ZShzcCk7Ci0KKwl3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAorCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORyk7CiAJdG1wNjQgPSByZWFkcSgmYmFyMC0+cm1hY19hZGRyX2RhdGEwX21lbSk7CiAJbWFjX2Rvd24gPSAodTMyKSB0bXA2NDsKIAltYWNfdXAgPSAodTMyKSAodG1wNjQgPj4gMzIpOwpAQCAtNjMyMiw4MiArNzA3OSw2MyBAQAogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIHJlZ2lzdGVyX2ZhaWxlZDsKIAl9Ci0KLQlpZiAoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBOZXRlcmlvbiBYZnJhbWUgSUkgMTBHYkUgYWRhcHRlciAiLAotCQkJICBkZXYtPm5hbWUpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgIihyZXYgJWQpLCBWZXJzaW9uICVzIiwKKwlzMmlvX3ZwZF9yZWFkKHNwKTsKKwlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBOZXRlcmlvbiAlcyIsZGV2LT5uYW1lLCBzcC0+cHJvZHVjdF9uYW1lKTsKKwlEQkdfUFJJTlQoRVJSX0RCRywgIihyZXYgJWQpLCBEcml2ZXIgdmVyc2lvbiAlc1xuIiwKIAkJCQlnZXRfeGVuYV9yZXZfaWQoc3AtPnBkZXYpLAogCQkJCXMyaW9fZHJpdmVyX3ZlcnNpb24pOwotCQlzd2l0Y2goc3AtPmludHJfdHlwZSkgewotCQkJY2FzZSBJTlRBOgotCQkJCURCR19QUklOVChFUlJfREJHLCAiLCBJbnRyIHR5cGUgSU5UQSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNU0k6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIsIEludHIgdHlwZSBNU0kiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTVNJX1g6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIsIEludHIgdHlwZSBNU0ktWCIpOwotCQkJCWJyZWFrOwotCQl9Ci0KLQkJREJHX1BSSU5UKEVSUl9EQkcsICJcbkNvcHlyaWdodChjKSAyMDAyLTIwMDUgTmV0ZXJpb24gSW5jLlxuIik7Ci0JCURCR19QUklOVChFUlJfREJHLCAiTUFDIEFERFI6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCURCR19QUklOVChFUlJfREJHLCAiQ29weXJpZ2h0KGMpIDIwMDItMjAwNSBOZXRlcmlvbiBJbmMuXG4iKTsKKwlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNQUMgQUREUjogIgorCQkJICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIGRldi0+bmFtZSwKIAkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclswXSwKIAkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclsxXSwKIAkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclsyXSwKIAkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclszXSwKIAkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkcls0XSwKIAkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkcls1XSk7CisJaWYgKHNwLT5kZXZpY2VfdHlwZSAmIFhGUkFNRV9JSV9ERVZJQ0UpIHsKIAkJbW9kZSA9IHMyaW9fcHJpbnRfcGNpX21vZGUoc3ApOwogCQlpZiAobW9kZSA8IDApIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiIFVuc3VwcG9ydGVkIFBDSSBidXMgbW9kZSAiKTsKKwkJCURCR19QUklOVChFUlJfREJHLCAiIFVuc3VwcG9ydGVkIFBDSSBidXMgbW9kZVxuIik7CiAJCQlyZXQgPSAtRUJBRFNMVDsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCQlnb3RvIHNldF9zd2FwX2ZhaWxlZDsKIAkJfQotCX0gZWxzZSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IE5ldGVyaW9uIFhmcmFtZSBJIDEwR2JFIGFkYXB0ZXIgIiwKLQkJCSAgZGV2LT5uYW1lKTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIocmV2ICVkKSwgVmVyc2lvbiAlcyIsCi0JCQkJCWdldF94ZW5hX3Jldl9pZChzcC0+cGRldiksCi0JCQkJCXMyaW9fZHJpdmVyX3ZlcnNpb24pOwotCQlzd2l0Y2goc3AtPmludHJfdHlwZSkgewotCQkJY2FzZSBJTlRBOgotCQkJCURCR19QUklOVChFUlJfREJHLCAiLCBJbnRyIHR5cGUgSU5UQSIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNU0k6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIsIEludHIgdHlwZSBNU0kiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTVNJX1g6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIsIEludHIgdHlwZSBNU0ktWCIpOwotCQkJCWJyZWFrOwotCQl9Ci0JCURCR19QUklOVChFUlJfREJHLCAiXG5Db3B5cmlnaHQoYykgMjAwMi0yMDA1IE5ldGVyaW9uIEluYy5cbiIpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgIk1BQyBBRERSOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclswXSwKLQkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclsxXSwKLQkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclsyXSwKLQkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclszXSwKLQkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkcls0XSwKLQkJCSAgc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkcls1XSk7CiAJfQotCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpCi0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IDItQnVmZmVyIG1vZGUgc3VwcG9ydCBoYXMgYmVlbiAiCi0JCQkgICJlbmFibGVkXG4iLGRldi0+bmFtZSk7Ci0JaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQSkKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogMy1CdWZmZXIgbW9kZSBzdXBwb3J0IGhhcyBiZWVuICIKLQkJCSAgImVuYWJsZWRcbiIsZGV2LT5uYW1lKTsKLQorCXN3aXRjaChzcC0+cnhkX21vZGUpIHsKKwkJY2FzZSBSWERfTU9ERV8xOgorCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogMS1CdWZmZXIgcmVjZWl2ZSBtb2RlIGVuYWJsZWRcbiIsCisJCQkJCQlkZXYtPm5hbWUpOworCQkgICAgYnJlYWs7CisJCWNhc2UgUlhEX01PREVfM0I6CisJCSAgICBEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiAyLUJ1ZmZlciByZWNlaXZlIG1vZGUgZW5hYmxlZFxuIiwKKwkJCQkJCWRldi0+bmFtZSk7CisJCSAgICBicmVhazsKKwkJY2FzZSBSWERfTU9ERV8zQToKKwkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IDMtQnVmZmVyIHJlY2VpdmUgbW9kZSBlbmFibGVkXG4iLAorCQkJCQkJZGV2LT5uYW1lKTsKKwkJICAgIGJyZWFrOworCX0KKyNpZmRlZiBDT05GSUdfUzJJT19OQVBJCisJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTkFQSSBlbmFibGVkXG4iLCBkZXYtPm5hbWUpOworI2VuZGlmCisJc3dpdGNoKHNwLT5pbnRyX3R5cGUpIHsKKwkJY2FzZSBJTlRBOgorCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogSW50ZXJydXB0IHR5cGUgSU5UQVxuIiwgZGV2LT5uYW1lKTsKKwkJICAgIGJyZWFrOworCQljYXNlIE1TSToKKwkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IEludGVycnVwdCB0eXBlIE1TSVxuIiwgZGV2LT5uYW1lKTsKKwkJICAgIGJyZWFrOworCQljYXNlIE1TSV9YOgorCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogSW50ZXJydXB0IHR5cGUgTVNJLVhcbiIsIGRldi0+bmFtZSk7CisJCSAgICBicmVhazsKKwl9CiAJaWYgKHNwLT5scm8pCiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IExhcmdlIHJlY2VpdmUgb2ZmbG9hZCBlbmFibGVkXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJCSAgZGV2LT5uYW1lKTsKIAogCS8qIEluaXRpYWxpemUgZGV2aWNlIG5hbWUgKi8KLQlzdHJjcHkoc3AtPm5hbWUsIGRldi0+bmFtZSk7Ci0JaWYgKHNwLT5kZXZpY2VfdHlwZSAmIFhGUkFNRV9JSV9ERVZJQ0UpCi0JCXN0cmNhdChzcC0+bmFtZSwgIjogTmV0ZXJpb24gWGZyYW1lIElJIDEwR2JFIGFkYXB0ZXIiKTsKLQllbHNlCi0JCXN0cmNhdChzcC0+bmFtZSwgIjogTmV0ZXJpb24gWGZyYW1lIEkgMTBHYkUgYWRhcHRlciIpOworCXNwcmludGYoc3AtPm5hbWUsICIlcyBOZXRlcmlvbiAlcyIsIGRldi0+bmFtZSwgc3AtPnByb2R1Y3RfbmFtZSk7CiAKIAkvKiBJbml0aWFsaXplIGJpbW9kYWwgSW50ZXJydXB0cyAqLwogCXNwLT5jb25maWcuYmltb2RhbCA9IGJpbW9kYWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmggYi9kcml2ZXJzL25ldC9zMmlvLmgKaW5kZXggMGEwYjViMi4uMzIwMzczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5oCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uaApAQCAtMzEsNiArMzEsOCBAQAogI2RlZmluZSBTVUNDRVNTIDAKICNkZWZpbmUgRkFJTFVSRSAtMQogCisjZGVmaW5lIENIRUNLQklUKHZhbHVlLCBuYml0KSAodmFsdWUgJiAoMSA8PCBuYml0KSkKKwogLyogTWF4aW11bSB0aW1lIHRvIGZsaWNrZXIgTEVEIHdoZW4gYXNrZWQgdG8gaWRlbnRpZnkgTklDIHVzaW5nIGV0aHRvb2wgKi8KICNkZWZpbmUgTUFYX0ZMSUNLRVJfVElNRQk2MDAwMCAvKiA2MCBTZWNzICovCiAKQEAgLTc4LDYgKzgwLDExIEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHNpbmdsZV9lY2NfZXJyczsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZG91YmxlX2VjY19lcnJzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBwYXJpdHlfZXJyX2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2VyaW91c19lcnJfY250OworCXVuc2lnbmVkIGxvbmcgbG9uZyBzb2Z0X3Jlc2V0X2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZmlmb19mdWxsX2NudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmluZ19mdWxsX2NudDsKIAkvKiBMUk8gc3RhdGlzdGljcyAqLwogCXVuc2lnbmVkIGxvbmcgbG9uZyBjbHViYmVkX2ZybXNfY250OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzZW5kaW5nX2JvdGg7CkBAIC04Nyw2ICs5NCwyNSBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBudW1fYWdncmVnYXRpb25zOwogfSBzd1N0YXRfdDsKIAorLyogWHBhayByZWxlYXRlZCBhbGFybSBhbmQgd2FybmluZ3MgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1NjQgYWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoOworCXU2NCBhbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdzsKKwl1NjQgYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2g7CisJdTY0IGFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9sb3c7CisJdTY0IGFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOworCXU2NCBhbGFybV9sYXNlcl9vdXRwdXRfcG93ZXJfbG93OworCXU2NCB3YXJuX3RyYW5zY2VpdmVyX3RlbXBfaGlnaDsKKwl1NjQgd2Fybl90cmFuc2NlaXZlcl90ZW1wX2xvdzsKKwl1NjQgd2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaDsKKwl1NjQgd2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfbG93OworCXU2NCB3YXJuX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOworCXU2NCB3YXJuX2xhc2VyX291dHB1dF9wb3dlcl9sb3c7CisJdTY0IHhwYWtfcmVnc19zdGF0OworCXUzMiB4cGFrX3RpbWVyX2NvdW50OworfSB4cGFrU3RhdF90OworCisKIC8qIFRoZSBzdGF0aXN0aWNzIGJsb2NrIG9mIFhlbmEgKi8KIHR5cGVkZWYgc3RydWN0IHN0YXRfYmxvY2sgewogLyogVHggTUFDIHN0YXRpc3RpY3MgY291bnRlcnMuICovCkBAIC0yNjMsNyArMjg5LDkgQEAKIAl1MzIgcm1hY19hY2NlcHRlZF9pcF9vZmxvdzsKIAl1MzIgcmVzZXJ2ZWRfMTQ7CiAJdTMyIGxpbmtfZmF1bHRfY250OworCXU4ICBidWZmZXJbMjBdOwogCXN3U3RhdF90IHN3X3N0YXQ7CisJeHBha1N0YXRfdCB4cGFrX3N0YXQ7CiB9IFN0YXRJbmZvX3Q7CiAKIC8qCkBAIC02NTksNyArNjg3LDggQEAKIH0gdXNyX2FkZHJfdDsKIAogLyogRGVmYXVsdCBUdW5hYmxlIHBhcmFtZXRlcnMgb2YgdGhlIE5JQy4gKi8KLSNkZWZpbmUgREVGQVVMVF9GSUZPX0xFTiA0MDk2CisjZGVmaW5lIERFRkFVTFRfRklGT18wX0xFTiA0MDk2CisjZGVmaW5lIERFRkFVTFRfRklGT18xXzdfTEVOIDUxMgogI2RlZmluZSBTTUFMTF9CTEtfQ05UCTMwCiAjZGVmaW5lIExBUkdFX0JMS19DTlQJMTAwCiAKQEAgLTczMiw3ICs3NjEsNyBAQAogCWludCBkZXZpY2VfY2xvc2VfZmxhZzsKIAlpbnQgZGV2aWNlX2VuYWJsZWRfb25jZTsKIAotCWNoYXIgbmFtZVs1MF07CisJY2hhciBuYW1lWzYwXTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFzazsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRhc2tsZXRfc3RhdHVzOwogCkBAIC04MDMsNiArODMyLDggQEAKIAljaGFyIGRlc2MxWzM1XTsKIAljaGFyIGRlc2MyWzM1XTsKIAorCWludCBhdmFpbF9tc2l4X3ZlY3RvcnM7IC8qIE5vLiBvZiBNU0ktWCB2ZWN0b3JzIGdyYW50ZWQgYnkgc3lzdGVtICovCisKIAlzdHJ1Y3QgbXNpeF9pbmZvX3N0IG1zaXhfaW5mb1sweDNmXTsKIAogI2RlZmluZSBYRlJBTUVfSV9ERVZJQ0UJCTEKQEAgLTgyNCw2ICs4NTUsOCBAQAogCXNwaW5sb2NrX3QJcnhfbG9jazsKIAlhdG9taWNfdAlpc3JfY250OwogCXU2NCAqdWZvX2luX2JhbmRfdjsKKyNkZWZpbmUgVlBEX1BST0RVQ1RfTkFNRV9MRU4gNTAKKwl1OCAgcHJvZHVjdF9uYW1lW1ZQRF9QUk9EVUNUX05BTUVfTEVOXTsKIH07CiAKICNkZWZpbmUgUkVTRVRfRVJST1IgMTsKQEAgLTg0OCwyOCArODgxLDMyIEBACiAJd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsKIAl3cml0ZWwoKHUzMikgKHZhbCA+PiAzMiksIChhZGRyICsgNCkpOwogfQorI2VuZGlmCiAKLS8qIEluIDMyIGJpdCBtb2Rlcywgc29tZSByZWdpc3RlcnMgaGF2ZSB0byBiZSB3cml0dGVuIGluIGEKLSAqIHBhcnRpY3VsYXIgb3JkZXIgdG8gZXhwZWN0IGNvcnJlY3QgaGFyZHdhcmUgb3BlcmF0aW9uLiBUaGUKLSAqIG1hY3JvIFNQRUNJQUxfUkVHX1dSSVRFIGlzIHVzZWQgdG8gcGVyZm9ybSBzdWNoIG9yZGVyZWQKLSAqIHdyaXRlcy4gRGVmaW5lcyBVRiAoVXBwZXIgRmlyc3QpIGFuZCBMRiAoTG93ZXIgRmlyc3QpIHdpbGwKLSAqIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcmVxdWlyZWQgd3JpdGUgb3JkZXIuCisvKiAKKyAqIFNvbWUgcmVnaXN0ZXJzIGhhdmUgdG8gYmUgd3JpdHRlbiBpbiBhIHBhcnRpY3VsYXIgb3JkZXIgdG8gCisgKiBleHBlY3QgY29ycmVjdCBoYXJkd2FyZSBvcGVyYXRpb24uIFRoZSBtYWNybyBTUEVDSUFMX1JFR19XUklURSAKKyAqIGlzIHVzZWQgdG8gcGVyZm9ybSBzdWNoIG9yZGVyZWQgd3JpdGVzLiBEZWZpbmVzIFVGIChVcHBlciBGaXJzdCkgCisgKiBhbmQgTEYgKExvd2VyIEZpcnN0KSB3aWxsIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcmVxdWlyZWQgd3JpdGUgb3JkZXIuCiAgKi8KICNkZWZpbmUgVUYJMQogI2RlZmluZSBMRgkyCiBzdGF0aWMgaW5saW5lIHZvaWQgU1BFQ0lBTF9SRUdfV1JJVEUodTY0IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyLCBpbnQgb3JkZXIpCiB7CisJdTMyIHJldDsKKwogCWlmIChvcmRlciA9PSBMRikgewogCQl3cml0ZWwoKHUzMikgKHZhbCksIGFkZHIpOworCQlyZXQgPSByZWFkbChhZGRyKTsKIAkJd3JpdGVsKCh1MzIpICh2YWwgPj4gMzIpLCAoYWRkciArIDQpKTsKKwkJcmV0ID0gcmVhZGwoYWRkciArIDQpOwogCX0gZWxzZSB7CiAJCXdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7CisJCXJldCA9IHJlYWRsKGFkZHIgKyA0KTsKIAkJd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsKKwkJcmV0ID0gcmVhZGwoYWRkcik7CiAJfQogfQotI2Vsc2UKLSNkZWZpbmUgU1BFQ0lBTF9SRUdfV1JJVEUodmFsLCBhZGRyLCBkdW1teSkgd3JpdGVxKHZhbCwgYWRkcikKLSNlbmRpZgogCiAvKiAgSW50ZXJydXB0IHJlbGF0ZWQgdmFsdWVzIG9mIFhlbmEgKi8KIApAQCAtOTY1LDcgKzEwMDIsNyBAQAogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiBzdGF0aWMgdm9pZCBzMmlvX3NldF9saW5rKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgaW50IHMyaW9fc2V0X3N3YXBwZXIobmljX3QgKiBzcCk7Ci1zdGF0aWMgdm9pZCBzMmlvX2NhcmRfZG93bihuaWNfdCAqbmljKTsKK3N0YXRpYyB2b2lkIHMyaW9fY2FyZF9kb3duKG5pY190ICpuaWMsIGludCBmbGFnKTsKIHN0YXRpYyBpbnQgczJpb19jYXJkX3VwKG5pY190ICpuaWMpOwogc3RhdGljIGludCBnZXRfeGVuYV9yZXZfaWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogc3RhdGljIHZvaWQgcmVzdG9yZV94bXNpX2RhdGEobmljX3QgKm5pYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IGY1YTNiZjQuLmQwNTg3NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyogc2lzOTAwLmM6IEEgU2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IGRyaXZlciBmb3IgTGludXguCiAgICBDb3B5cmlnaHQgMTk5OSBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnBvcmF0aW9uIAotICAgUmV2aXNpb246CTEuMDguMDkgU2VwLiAxOSAyMDA1CisgICBSZXZpc2lvbjoJMS4wOC4xMCBBcHIuIDIgMjAwNgogICAgCiAgICBNb2RpZmllZCBmcm9tIHRoZSBkcml2ZXIgd2hpY2ggaXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IERvbmFsZCBCZWNrZXIuCiAgICAKQEAgLTE3LDkgKzE3LDEwIEBACiAgICBTaVMgNzAxNCBTaW5nbGUgQ2hpcCAxMDBCQVNFLVRYLzEwQkFTRS1UIFBoeXNpY2FsIExheWVyIFNvbHV0aW9uLAogICAgcHJlbGltaW5hcnkgUmV2LiAxLjAgSmFuLiAxOCwgMTk5OAogCisgICBSZXYgMS4wOC4xMCBBcHIuICAyIDIwMDYgRGFuaWVsZSBWZW56YW5vIGFkZCB2bGFuIChqdW1ibyBwYWNrZXRzKSBzdXBwb3J0CiAgICBSZXYgMS4wOC4wOSBTZXAuIDE5IDIwMDUgRGFuaWVsZSBWZW56YW5vIGFkZCBXYWtlIG9uIExBTiBzdXBwb3J0CiAgICBSZXYgMS4wOC4wOCBKYW4uIDIyIDIwMDUgRGFuaWVsZSBWZW56YW5vIHVzZSBuZXRpZl9tc2cgZm9yIGRlYnVnZ2luZyBtZXNzYWdlcwotICAgUmV2IDEuMDguMDcgTm92LiAgMiAyMDAzIERhbmllbGUgVmVuemFubyA8d2VidmVuemFAbGliZXJvLml0PiBhZGQgc3VzcGVuZC9yZXN1bWUgc3VwcG9ydAorICAgUmV2IDEuMDguMDcgTm92LiAgMiAyMDAzIERhbmllbGUgVmVuemFubyA8dmVuemFAYnJvd25oYXQub3JnPiBhZGQgc3VzcGVuZC9yZXN1bWUgc3VwcG9ydAogICAgUmV2IDEuMDguMDYgU2VwLiAyNCAyMDAyIE11ZmFzYSBZYW5nIGJ1ZyBmaXggZm9yIFR4IHRpbWVvdXQgJiBhZGQgU2lTOTYzIHN1cHBvcnQKICAgIFJldiAxLjA4LjA1IEp1bi4gIDYgMjAwMiBNdWZhc2EgWWFuZyBidWcgZml4IGZvciByZWFkX2VlcHJvbSAmIFR4IGRlc2NyaXB0b3Igb3Zlci1ib3VuZGFyeQogICAgUmV2IDEuMDguMDQgQXByLiAyNSAyMDAyIE11ZmFzYSBZYW5nIDxtdWZhc2FAc2lzLmNvbS50dz4gYWRkZWQgU2lTOTYyIHN1cHBvcnQKQEAgLTc3LDcgKzc4LDcgQEAKICNpbmNsdWRlICJzaXM5MDAuaCIKIAogI2RlZmluZSBTSVM5MDBfTU9EVUxFX05BTUUgInNpczkwMCIKLSNkZWZpbmUgU0lTOTAwX0RSVl9WRVJTSU9OICJ2MS4wOC4wOSBTZXAuIDE5IDIwMDUiCisjZGVmaW5lIFNJUzkwMF9EUlZfVkVSU0lPTiAidjEuMDguMTAgQXByLiAyIDIwMDYiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KIEtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CkBAIC0xNDAyLDYgKzE0MDMsMTEgQEAKIAkJcnhfZmxhZ3MgfD0gUnhBVFg7CiAJfQogCisjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCisJLyogQ2FuIGFjY2VwdCBKdW1ibyBwYWNrZXQgKi8KKwlyeF9mbGFncyB8PSBSeEFKQUI7CisjZW5kaWYKKwogCW91dGwgKHR4X2ZsYWdzLCBpb2FkZHIgKyB0eGNmZyk7CiAJb3V0bCAocnhfZmxhZ3MsIGlvYWRkciArIHJ4Y2ZnKTsKIH0KQEAgLTE3MTQsMTggKzE3MjAsMjYgQEAKIAogCXdoaWxlIChyeF9zdGF0dXMgJiBPV04pIHsKIAkJdW5zaWduZWQgaW50IHJ4X3NpemU7CisJCXVuc2lnbmVkIGludCBkYXRhX3NpemU7CiAKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKIAotCQlyeF9zaXplID0gKHJ4X3N0YXR1cyAmIERTSVpFKSAtIENSQ19TSVpFOworCQlkYXRhX3NpemUgPSByeF9zdGF0dXMgJiBEU0laRTsKKwkJcnhfc2l6ZSA9IGRhdGFfc2l6ZSAtIENSQ19TSVpFOworCisjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCisJCS8qIGBgVE9PTE9ORycnIGZsYWcgbWVhbnMganVtYm8gcGFja2V0IHJlY2l2ZWQuICovCisJCWlmICgocnhfc3RhdHVzICYgVE9PTE9ORykgJiYgZGF0YV9zaXplIDw9IE1BWF9GUkFNRV9TSVpFKQorCQkJcnhfc3RhdHVzICY9ICh+ICgodW5zaWduZWQgaW50KVRPT0xPTkcpKTsKKyNlbmRpZgogCiAJCWlmIChyeF9zdGF0dXMgJiAoQUJPUlR8T1ZFUlJVTnxUT09MT05HfFJVTlR8UlhJU0VSUnxDUkNFUlJ8RkFFUlIpKSB7CiAJCQkvKiBjb3JydXB0ZWQgcGFja2V0IHJlY2VpdmVkICovCiAJCQlpZiAobmV0aWZfbXNnX3J4X2VycihzaXNfcHJpdikpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDb3JydXB0ZWQgcGFja2V0ICIKLQkJCQkgICAgICAgInJlY2VpdmVkLCBidWZmZXIgc3RhdHVzID0gMHglOC44eC5cbiIsCi0JCQkJICAgICAgIG5ldF9kZXYtPm5hbWUsIHJ4X3N0YXR1cyk7CisJCQkJICAgICAgICJyZWNlaXZlZCwgYnVmZmVyIHN0YXR1cyA9IDB4JTguOHgvJWQuXG4iLAorCQkJCSAgICAgICBuZXRfZGV2LT5uYW1lLCByeF9zdGF0dXMsIGRhdGFfc2l6ZSk7CiAJCQlzaXNfcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlpZiAocnhfc3RhdHVzICYgT1ZFUlJVTikKIAkJCQlzaXNfcHJpdi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5oIGIvZHJpdmVycy9uZXQvc2lzOTAwLmgKaW5kZXggNTAzMjM5NC4uNDgzNGUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmgKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmgKQEAgLTMxMCw4ICszMTAsMTQgQEAKICNkZWZpbmUgQ1JDX1NJWkUgICAgICAgICAgICAgICAgNAogI2RlZmluZSBNQUNfSEVBREVSX1NJWkUgICAgICAgICAxNAogCi0jZGVmaW5lIFRYX0JVRl9TSVpFICAgICAxNTM2Ci0jZGVmaW5lIFJYX0JVRl9TSVpFICAgICAxNTM2CisjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAoMTUxOCArIDQpCisjZWxzZQorI2RlZmluZSBNQVhfRlJBTUVfU0laRSAgMTUxOAorI2VuZGlmIC8qIENPTkZJR19WTEFOXzgwMl8xUSAqLworCisjZGVmaW5lIFRYX0JVRl9TSVpFICAgICAoTUFYX0ZSQU1FX1NJWkUrMTgpCisjZGVmaW5lIFJYX0JVRl9TSVpFICAgICAoTUFYX0ZSQU1FX1NJWkUrMTgpCiAKICNkZWZpbmUgTlVNX1RYX0RFU0MgICAgIDE2ICAgICAgCS8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTlVNX1JYX0RFU0MgICAgIDE2ICAgICAgIAkvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggNWNhNWExYi4uNTM2ZGQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtNDQsMTIgKzQ0LDEzIEBACiAjaW5jbHVkZSAic2tnZS5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkic2tnZSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjUiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKIAogI2RlZmluZSBERUZBVUxUX1RYX1JJTkdfU0laRQkxMjgKICNkZWZpbmUgREVGQVVMVF9SWF9SSU5HX1NJWkUJNTEyCiAjZGVmaW5lIE1BWF9UWF9SSU5HX1NJWkUJMTAyNAorI2RlZmluZSBUWF9MT1dfV0FURVIJCShNQVhfU0tCX0ZSQUdTICsgMSkKICNkZWZpbmUgTUFYX1JYX1JJTkdfU0laRQk0MDk2CiAjZGVmaW5lIFJYX0NPUFlfVEhSRVNIT0xECTEyOAogI2RlZmluZSBSWF9CVUZfU0laRQkJMTUzNgpAQCAtNDAxLDcgKzQwMiw3IEBACiAJaW50IGVycjsKIAogCWlmIChwLT5yeF9wZW5kaW5nID09IDAgfHwgcC0+cnhfcGVuZGluZyA+IE1BWF9SWF9SSU5HX1NJWkUgfHwKLQkgICAgcC0+dHhfcGVuZGluZyA8IE1BWF9TS0JfRlJBR1MrMSB8fCBwLT50eF9wZW5kaW5nID4gTUFYX1RYX1JJTkdfU0laRSkKKwkgICAgcC0+dHhfcGVuZGluZyA8IFRYX0xPV19XQVRFUiB8fCBwLT50eF9wZW5kaW5nID4gTUFYX1RYX1JJTkdfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlza2dlLT5yeF9yaW5nLmNvdW50ID0gcC0+cnhfcGVuZGluZzsKQEAgLTYwMyw3ICs2MDQsNyBAQAogCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwogCWludCBwb3J0ID0gc2tnZS0+cG9ydDsKIAotCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwltdXRleF9sb2NrKCZody0+cGh5X211dGV4KTsKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7CiAJCXN3aXRjaCAobW9kZSkgewogCQljYXNlIExFRF9NT0RFX09GRjoKQEAgLTY2Myw3ICs2NjQsNyBAQAogCQkJCSAgICAgUEhZX01fTEVEX01PX1JYKE1PX0xFRF9PTikpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZody0+cGh5X2xvY2spOworCW11dGV4X3VubG9jaygmaHctPnBoeV9tdXRleCk7CiB9CiAKIC8qIGJsaW5rIExFRCdzIGZvciBmaW5kaW5nIGJvYXJkICovCkBAIC0yMDM4LDcgKzIwMzksNyBAQAogCW5ldGlmX3N0b3BfcXVldWUoc2tnZS0+bmV0ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihza2dlLT5uZXRkZXYpOwogCi0Jc3Bpbl9sb2NrX2JoKCZody0+cGh5X2xvY2spOworCW11dGV4X2xvY2soJmh3LT5waHlfbXV0ZXgpOwogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpIHsKIAkJZ2VuZXNpc19yZXNldChodywgcG9ydCk7CiAJCWdlbmVzaXNfbWFjX2luaXQoaHcsIHBvcnQpOwpAQCAtMjA0Niw3ICsyMDQ3LDcgQEAKIAkJeXVrb25fcmVzZXQoaHcsIHBvcnQpOwogCQl5dWtvbl9pbml0KGh3LCBwb3J0KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKIH0KIAogLyogQmFzaWMgTUlJIHN1cHBvcnQgKi8KQEAgLTIwNjcsMTIgKzIwNjgsMTIgQEAKIAkJLyogZmFsbHRocnUgKi8KIAljYXNlIFNJT0NHTUlJUkVHOiB7CiAJCXUxNiB2YWwgPSAwOwotCQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJCW11dGV4X2xvY2soJmh3LT5waHlfbXV0ZXgpOwogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQogCQkJZXJyID0gX194bV9waHlfcmVhZChodywgc2tnZS0+cG9ydCwgZGF0YS0+cmVnX251bSAmIDB4MWYsICZ2YWwpOwogCQllbHNlCiAJCQllcnIgPSBfX2dtX3BoeV9yZWFkKGh3LCBza2dlLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgJnZhbCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZody0+cGh5X2xvY2spOworCQltdXRleF91bmxvY2soJmh3LT5waHlfbXV0ZXgpOwogCQlkYXRhLT52YWxfb3V0ID0gdmFsOwogCQlicmVhazsKIAl9CkBAIC0yMDgxLDE0ICsyMDgyLDE0IEBACiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJc3Bpbl9sb2NrX2JoKCZody0+cGh5X2xvY2spOworCQltdXRleF9sb2NrKCZody0+cGh5X211dGV4KTsKIAkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKIAkJCWVyciA9IHhtX3BoeV93cml0ZShodywgc2tnZS0+cG9ydCwgZGF0YS0+cmVnX251bSAmIDB4MWYsCiAJCQkJICAgZGF0YS0+dmFsX2luKTsKIAkJZWxzZQogCQkJZXJyID0gZ21fcGh5X3dyaXRlKGh3LCBza2dlLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKIAkJCQkgICBkYXRhLT52YWxfaW4pOwotCQlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBlcnI7CkBAIC0yMTkxLDEyICsyMTkyLDEyIEBACiAJCWdvdG8gZnJlZV9yeF9yaW5nOwogCiAJLyogSW5pdGlhbGl6ZSBNQUMgKi8KLQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfbG9jaygmaHctPnBoeV9tdXRleCk7CiAJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykKIAkJZ2VuZXNpc19tYWNfaW5pdChodywgcG9ydCk7CiAJZWxzZQogCQl5dWtvbl9tYWNfaW5pdChodywgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKIAogCS8qIENvbmZpZ3VyZSBSQU1idWZmZXJzICovCiAJY2h1bmsgPSBody0+cmFtX3NpemUgLyAoKGh3LT5wb3J0cyArIDEpKjIpOwpAQCAtMjMwMiwyMSArMjMwMywyMCBAQAogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwotCXN0cnVjdCBza2dlX3JpbmcgKnJpbmcgPSAmc2tnZS0+dHhfcmluZzsKIAlzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplOwogCXN0cnVjdCBza2dlX3R4X2Rlc2MgKnRkOwogCWludCBpOwogCXUzMiBjb250cm9sLCBsZW47CiAJdTY0IG1hcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc2tiID0gc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pOwogCWlmICghc2tiKQogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCi0JaWYgKCFzcGluX3RyeWxvY2soJnNrZ2UtPnR4X2xvY2spKSB7CisJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpKQogCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KIAkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0JfQogCiAJaWYgKHVubGlrZWx5KHNrZ2VfYXZhaWwoJnNrZ2UtPnR4X3JpbmcpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CkBAIC0yMzI1LDEyICsyMzI1LDEzIEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZza2dlLT50eF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JZSA9IHJpbmctPnRvX3VzZTsKKwllID0gc2tnZS0+dHhfcmluZy50b191c2U7CiAJdGQgPSBlLT5kZXNjOworCUJVR19PTih0ZC0+Y29udHJvbCAmIEJNVV9PV04pOwogCWUtPnNrYiA9IHNrYjsKIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCW1hcCA9IHBjaV9tYXBfc2luZ2xlKGh3LT5wZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CkBAIC0yMzcxLDggKzIzNzIsMTAgQEAKIAkJCQkJICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAKIAkJCWUgPSBlLT5uZXh0OwotCQkJZS0+c2tiID0gTlVMTDsKKwkJCWUtPnNrYiA9IHNrYjsKIAkJCXRmID0gZS0+ZGVzYzsKKwkJCUJVR19PTih0Zi0+Y29udHJvbCAmIEJNVV9PV04pOworCiAJCQl0Zi0+ZG1hX2xvID0gbWFwOwogCQkJdGYtPmRtYV9oaSA9ICh1NjQpIG1hcCA+PiAzMjsKIAkJCXBjaV91bm1hcF9hZGRyX3NldChlLCBtYXBhZGRyLCBtYXApOwpAQCAtMjM4OSw1NiArMjM5Miw2OCBAQAogCiAJc2tnZV93cml0ZTgoaHcsIFFfQUREUih0eHFhZGRyW3NrZ2UtPnBvcnRdLCBRX0NTUiksIENTUl9TVEFSVCk7CiAKLQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChza2dlKSkKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X3F1ZXVlZChza2dlKSkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVldWVkLCBzbG90ICV0ZCwgbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlIC0gcmluZy0+c3RhcnQsIHNrYi0+bGVuKTsKKwkJICAgICAgIGRldi0+bmFtZSwgZSAtIHNrZ2UtPnR4X3Jpbmcuc3RhcnQsIHNrYi0+bGVuKTsKIAotCXJpbmctPnRvX3VzZSA9IGUtPm5leHQ7Ci0JaWYgKHNrZ2VfYXZhaWwoJnNrZ2UtPnR4X3JpbmcpIDw9IE1BWF9TS0JfRlJBR1MgKyAxKSB7CisJc2tnZS0+dHhfcmluZy50b191c2UgPSBlLT5uZXh0OworCWlmIChza2dlX2F2YWlsKCZza2dlLT50eF9yaW5nKSA8PSBUWF9MT1dfV0FURVIpIHsKIAkJcHJfZGVidWcoIiVzOiB0cmFuc21pdCBxdWV1ZSBmdWxsXG4iLCBkZXYtPm5hbWUpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJfQogCi0JbW1pb3diKCk7Ci0Jc3Bpbl91bmxvY2soJnNrZ2UtPnR4X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrZ2UtPnR4X2xvY2ssIGZsYWdzKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIHZvaWQgc2tnZV90eF9jb21wbGV0ZShzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlLCBzdHJ1Y3Qgc2tnZV9lbGVtZW50ICpsYXN0KQorCisvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWluZyBlbGVtZW50ICovCitzdGF0aWMgdm9pZCBza2dlX3R4X2ZyZWUoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSwgc3RydWN0IHNrZ2VfZWxlbWVudCAqZSwKKwkJCSB1MzIgY29udHJvbCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNrZ2UtPmh3LT5wZGV2OwotCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7CiAKLQlmb3IgKGUgPSBza2dlLT50eF9yaW5nLnRvX2NsZWFuOyBlICE9IGxhc3Q7IGUgPSBlLT5uZXh0KSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBlLT5za2I7Ci0JCWludCBpOworCUJVR19PTighZS0+c2tiKTsKIAotCQllLT5za2IgPSBOVUxMOworCS8qIHNrYiBoZWFkZXIgdnMuIGZyYWdtZW50ICovCisJaWYgKGNvbnRyb2wgJiBCTVVfU1RGKQogCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGUsIG1hcGFkZHIpLAotCQkJCSBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkgcGNpX3VubWFwX2xlbihlLCBtYXBsZW4pLAorCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwllbHNlCisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGUsIG1hcGFkZHIpLAorCQkJICAgICAgIHBjaV91bm1hcF9sZW4oZSwgbWFwbGVuKSwKKwkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7Ci0JCQllID0gZS0+bmV4dDsKLQkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGUsIG1hcGFkZHIpLAotCQkJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUsCi0JCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQl9CisJaWYgKGNvbnRyb2wgJiBCTVVfRU9GKSB7CisJCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfZG9uZShza2dlKSkpCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiB0eCBkb25lIHNsb3QgJXRkXG4iLAorCQkJICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgZSAtIHNrZ2UtPnR4X3Jpbmcuc3RhcnQpOwogCi0JCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoZS0+c2tiKTsKIAl9Ci0Jc2tnZS0+dHhfcmluZy50b19jbGVhbiA9IGU7CisJZS0+c2tiID0gTlVMTDsKIH0KIAorLyogRnJlZSBhbGwgYnVmZmVycyBpbiB0cmFuc21pdCByaW5nICovCiBzdGF0aWMgdm9pZCBza2dlX3R4X2NsZWFuKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpCiB7CisJc3RydWN0IHNrZ2VfZWxlbWVudCAqZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2JoKCZza2dlLT50eF9sb2NrKTsKLQlza2dlX3R4X2NvbXBsZXRlKHNrZ2UsIHNrZ2UtPnR4X3JpbmcudG9fdXNlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpOworCWZvciAoZSA9IHNrZ2UtPnR4X3JpbmcudG9fY2xlYW47IGUgIT0gc2tnZS0+dHhfcmluZy50b191c2U7IGUgPSBlLT5uZXh0KSB7CisJCXN0cnVjdCBza2dlX3R4X2Rlc2MgKnRkID0gZS0+ZGVzYzsKKwkJc2tnZV90eF9mcmVlKHNrZ2UsIGUsIHRkLT5jb250cm9sKTsKKwkJdGQtPmNvbnRyb2wgPSAwOworCX0KKworCXNrZ2UtPnR4X3JpbmcudG9fY2xlYW4gPSBlOwogCW5ldGlmX3dha2VfcXVldWUoc2tnZS0+bmV0ZGV2KTsKLQlzcGluX3VubG9ja19iaCgmc2tnZS0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBza2dlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI2NjQsMzIgKzI2NzksMjggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgc2tnZV90eF9kb25lKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpCisvKiBGcmVlIGFsbCBidWZmZXJzIGluIFR4IHJpbmcgd2hpY2ggYXJlIG5vIGxvbmdlciBvd25lZCBieSBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIHNrZ2VfdHhpcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tnZV9yaW5nICpyaW5nID0gJnNrZ2UtPnR4X3Jpbmc7Ci0Jc3RydWN0IHNrZ2VfZWxlbWVudCAqZSwgKmxhc3Q7CisJc3RydWN0IHNrZ2VfZWxlbWVudCAqZTsKKworCXJtYigpOwogCiAJc3Bpbl9sb2NrKCZza2dlLT50eF9sb2NrKTsKLQlsYXN0ID0gcmluZy0+dG9fY2xlYW47CiAJZm9yIChlID0gcmluZy0+dG9fY2xlYW47IGUgIT0gcmluZy0+dG9fdXNlOyBlID0gZS0+bmV4dCkgewogCQlzdHJ1Y3Qgc2tnZV90eF9kZXNjICp0ZCA9IGUtPmRlc2M7CiAKIAkJaWYgKHRkLT5jb250cm9sICYgQk1VX09XTikKIAkJCWJyZWFrOwogCi0JCWlmICh0ZC0+Y29udHJvbCAmIEJNVV9FT0YpIHsKLQkJCWxhc3QgPSBlLT5uZXh0OwotCQkJaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9kb25lKHNrZ2UpKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiB0eCBkb25lIHNsb3QgJXRkXG4iLAotCQkJCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIGUgLSByaW5nLT5zdGFydCk7Ci0JCX0KKwkJc2tnZV90eF9mcmVlKHNrZ2UsIGUsIHRkLT5jb250cm9sKTsKIAl9CisJc2tnZS0+dHhfcmluZy50b19jbGVhbiA9IGU7CiAKLQlza2dlX3R4X2NvbXBsZXRlKHNrZ2UsIGxhc3QpOwotCi0Jc2tnZV93cml0ZTgoc2tnZS0+aHcsIFFfQUREUih0eHFhZGRyW3NrZ2UtPnBvcnRdLCBRX0NTUiksIENTUl9JUlFfQ0xfRik7Ci0KLQlpZiAoc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPiBNQVhfU0tCX0ZSQUdTICsgMSkKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChza2dlLT5uZXRkZXYpCisJICAgICYmIHNrZ2VfYXZhaWwoJnNrZ2UtPnR4X3JpbmcpID4gVFhfTE9XX1dBVEVSKQogCQluZXRpZl93YWtlX3F1ZXVlKHNrZ2UtPm5ldGRldik7CiAKIAlzcGluX3VubG9jaygmc2tnZS0+dHhfbG9jayk7CkBAIC0yNzA0LDggKzI3MTUsNiBAQAogCWludCB0b19kbyA9IG1pbihkZXYtPnF1b3RhLCAqYnVkZ2V0KTsKIAlpbnQgd29ya19kb25lID0gMDsKIAotCXNrZ2VfdHhfZG9uZShza2dlKTsKLQogCWZvciAoZSA9IHJpbmctPnRvX2NsZWFuOyBwcmVmZXRjaChlLT5uZXh0KSwgd29ya19kb25lIDwgdG9fZG87IGUgPSBlLT5uZXh0KSB7CiAJCXN0cnVjdCBza2dlX3J4X2Rlc2MgKnJkID0gZS0+ZGVzYzsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTI3MzcsMTAgKzI3NDYsMTIgQEAKIAkJcmV0dXJuIDE7IC8qIG5vdCBkb25lICovCiAKIAluZXRpZl9yeF9jb21wbGV0ZShkZXYpOwotCW1taW93YigpOwogCi0gIAlody0+aW50cl9tYXNrIHw9IHNrZ2UtPnBvcnQgPT0gMCA/IChJU19SMV9GfElTX1hBMV9GKSA6IChJU19SMl9GfElTX1hBMl9GKTsKKwlzcGluX2xvY2tfaXJxKCZody0+aHdfbG9jayk7CisJaHctPmludHJfbWFzayB8PSByeGlycW1hc2tbc2tnZS0+cG9ydF07CiAgIAlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOworCW1taW93YigpOworCXNwaW5fdW5sb2NrX2lycSgmaHctPmh3X2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODQ3LDE2ICsyODU4LDE2IEBACiB9CiAKIC8qCi0gKiBJbnRlcnJ1cHQgZnJvbSBQSFkgYXJlIGhhbmRsZWQgaW4gdGFza2xldCAoc29mdCBpcnEpCisgKiBJbnRlcnJ1cHQgZnJvbSBQSFkgYXJlIGhhbmRsZWQgaW4gd29yayBxdWV1ZQogICogYmVjYXVzZSBhY2Nlc3NpbmcgcGh5IHJlZ2lzdGVycyByZXF1aXJlcyBzcGluIHdhaXQgd2hpY2ggbWlnaHQKICAqIGNhdXNlIGV4Y2VzcyBpbnRlcnJ1cHQgbGF0ZW5jeS4KICAqLwotc3RhdGljIHZvaWQgc2tnZV9leHRpcnEodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgc2tnZV9leHRpcnEodm9pZCAqYXJnKQogewotCXN0cnVjdCBza2dlX2h3ICpodyA9IChzdHJ1Y3Qgc2tnZV9odyAqKSBkYXRhOworCXN0cnVjdCBza2dlX2h3ICpodyA9IGFyZzsKIAlpbnQgcG9ydDsKIAotCXNwaW5fbG9jaygmaHctPnBoeV9sb2NrKTsKKwltdXRleF9sb2NrKCZody0+cGh5X211dGV4KTsKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgaHctPnBvcnRzOyBwb3J0KyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbcG9ydF07CiAJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjg2OCwxMCArMjg3OSwxMiBAQAogCQkJCWJjb21fcGh5X2ludHIoc2tnZSk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKIAorCXNwaW5fbG9ja19pcnEoJmh3LT5od19sb2NrKTsKIAlody0+aW50cl9tYXNrIHw9IElTX0VYVF9SRUc7CiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwlzcGluX3VubG9ja19pcnEoJmh3LT5od19sb2NrKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHNrZ2VfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMjg4NCw1NCArMjg5Nyw2OCBAQAogCWlmIChzdGF0dXMgPT0gMCkKIAkJcmV0dXJuIElSUV9OT05FOwogCisJc3Bpbl9sb2NrKCZody0+aHdfbG9jayk7CisJc3RhdHVzICY9IGh3LT5pbnRyX21hc2s7CiAJaWYgKHN0YXR1cyAmIElTX0VYVF9SRUcpIHsKIAkJaHctPmludHJfbWFzayAmPSB+SVNfRVhUX1JFRzsKLQkJdGFza2xldF9zY2hlZHVsZSgmaHctPmV4dF90YXNrbGV0KTsKKwkJc2NoZWR1bGVfd29yaygmaHctPnBoeV93b3JrKTsKIAl9CiAKLQlpZiAoc3RhdHVzICYgKElTX1IxX0Z8SVNfWEExX0YpKSB7CisJaWYgKHN0YXR1cyAmIElTX1hBMV9GKSB7CisJCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIoUV9YQTEsIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKKwkJc2tnZV90eGlycShody0+ZGV2WzBdKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgSVNfUjFfRikgewogCQlza2dlX3dyaXRlOChodywgUV9BRERSKFFfUjEsIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKLQkJaHctPmludHJfbWFzayAmPSB+KElTX1IxX0Z8SVNfWEExX0YpOworCQlody0+aW50cl9tYXNrICY9IH5JU19SMV9GOwogCQluZXRpZl9yeF9zY2hlZHVsZShody0+ZGV2WzBdKTsKIAl9CiAKLQlpZiAoc3RhdHVzICYgKElTX1IyX0Z8SVNfWEEyX0YpKSB7Ci0JCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIoUV9SMiwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOwotCQlody0+aW50cl9tYXNrICY9IH4oSVNfUjJfRnxJU19YQTJfRik7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKGh3LT5kZXZbMV0pOwotCX0KLQotCWlmIChsaWtlbHkoKHN0YXR1cyAmIGh3LT5pbnRyX21hc2spID09IDApKQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLQlpZiAoc3RhdHVzICYgSVNfUEFfVE9fUlgxKSB7Ci0JCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2WzBdKTsKLQkJKytza2dlLT5uZXRfc3RhdHMucnhfb3Zlcl9lcnJvcnM7Ci0JCXNrZ2Vfd3JpdGUxNihodywgQjNfUEFfQ1RSTCwgUEFfQ0xSX1RPX1JYMSk7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIElTX1BBX1RPX1JYMikgewotCQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoaHctPmRldlsxXSk7Ci0JCSsrc2tnZS0+bmV0X3N0YXRzLnJ4X292ZXJfZXJyb3JzOwotCQlza2dlX3dyaXRlMTYoaHcsIEIzX1BBX0NUUkwsIFBBX0NMUl9UT19SWDIpOwotCX0KLQogCWlmIChzdGF0dXMgJiBJU19QQV9UT19UWDEpCiAJCXNrZ2Vfd3JpdGUxNihodywgQjNfUEFfQ1RSTCwgUEFfQ0xSX1RPX1RYMSk7CiAKLQlpZiAoc3RhdHVzICYgSVNfUEFfVE9fVFgyKQotCQlza2dlX3dyaXRlMTYoaHcsIEIzX1BBX0NUUkwsIFBBX0NMUl9UT19UWDIpOworCWlmIChzdGF0dXMgJiBJU19QQV9UT19SWDEpIHsKKwkJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGh3LT5kZXZbMF0pOworCisJCSsrc2tnZS0+bmV0X3N0YXRzLnJ4X292ZXJfZXJyb3JzOworCQlza2dlX3dyaXRlMTYoaHcsIEIzX1BBX0NUUkwsIFBBX0NMUl9UT19SWDEpOworCX0KKwogCiAJaWYgKHN0YXR1cyAmIElTX01BQzEpCiAJCXNrZ2VfbWFjX2ludHIoaHcsIDApOwogCi0JaWYgKHN0YXR1cyAmIElTX01BQzIpCi0JCXNrZ2VfbWFjX2ludHIoaHcsIDEpOworCWlmIChody0+ZGV2WzFdKSB7CisJCWlmIChzdGF0dXMgJiBJU19YQTJfRikgeworCQkJc2tnZV93cml0ZTgoaHcsIFFfQUREUihRX1hBMiwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOworCQkJc2tnZV90eGlycShody0+ZGV2WzFdKTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBJU19SMl9GKSB7CisJCQlza2dlX3dyaXRlOChodywgUV9BRERSKFFfUjIsIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKKwkJCWh3LT5pbnRyX21hc2sgJj0gfklTX1IyX0Y7CisJCQluZXRpZl9yeF9zY2hlZHVsZShody0+ZGV2WzFdKTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBJU19QQV9UT19SWDIpIHsKKwkJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2WzFdKTsKKwkJCSsrc2tnZS0+bmV0X3N0YXRzLnJ4X292ZXJfZXJyb3JzOworCQkJc2tnZV93cml0ZTE2KGh3LCBCM19QQV9DVFJMLCBQQV9DTFJfVE9fUlgyKTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBJU19QQV9UT19UWDIpCisJCQlza2dlX3dyaXRlMTYoaHcsIEIzX1BBX0NUUkwsIFBBX0NMUl9UT19UWDIpOworCisJCWlmIChzdGF0dXMgJiBJU19NQUMyKQorCQkJc2tnZV9tYWNfaW50cihodywgMSk7CisJfQogCiAJaWYgKHN0YXR1cyAmIElTX0hXX0VSUikKIAkJc2tnZV9lcnJvcl9pcnEoaHcpOwogCiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwlzcGluX3VubG9jaygmaHctPmh3X2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjk1Nyw3ICsyOTg0LDcgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAotCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwltdXRleF9sb2NrKCZody0+cGh5X211dGV4KTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOwogCW1lbWNweV90b2lvKGh3LT5yZWdzICsgQjJfTUFDXzEgKyBwb3J0KjgsCiAJCSAgICBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CkBAIC0yOTcwLDcgKzI5OTcsNyBAQAogCQlnbWFfc2V0X2FkZHIoaHcsIHBvcnQsIEdNX1NSQ19BRERSXzFMLCBkZXYtPmRldl9hZGRyKTsKIAkJZ21hX3NldF9hZGRyKGh3LCBwb3J0LCBHTV9TUkNfQUREUl8yTCwgZGV2LT5kZXZfYWRkcik7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZody0+cGh5X2xvY2spOworCW11dGV4X3VubG9jaygmaHctPnBoeV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwODIsNiArMzEwOSw3IEBACiAJZWxzZQogCQlody0+cmFtX3NpemUgPSB0OCAqIDQwOTY7CiAKKwlzcGluX2xvY2tfaW5pdCgmaHctPmh3X2xvY2spOwogCWh3LT5pbnRyX21hc2sgPSBJU19IV19FUlIgfCBJU19FWFRfUkVHIHwgSVNfUE9SVF8xOwogCWlmIChody0+cG9ydHMgPiAxKQogCQlody0+aW50cl9tYXNrIHw9IElTX1BPUlRfMjsKQEAgLTMxNTAsMTQgKzMxNzgsMTQgQEAKIAogCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CiAKLQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CisJbXV0ZXhfbG9jaygmaHctPnBoeV9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCiAJCQlnZW5lc2lzX3Jlc2V0KGh3LCBpKTsKIAkJZWxzZQogCQkJeXVrb25fcmVzZXQoaHcsIGkpOwogCX0KLQlzcGluX3VubG9ja19iaCgmaHctPnBoeV9sb2NrKTsKKwltdXRleF91bmxvY2soJmh3LT5waHlfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMzA1LDggKzMzMzMsOCBAQAogCX0KIAogCWh3LT5wZGV2ID0gcGRldjsKLQlzcGluX2xvY2tfaW5pdCgmaHctPnBoeV9sb2NrKTsKLQl0YXNrbGV0X2luaXQoJmh3LT5leHRfdGFza2xldCwgc2tnZV9leHRpcnEsICh1bnNpZ25lZCBsb25nKSBodyk7CisJbXV0ZXhfaW5pdCgmaHctPnBoeV9tdXRleCk7CisJSU5JVF9XT1JLKCZody0+cGh5X3dvcmssIHNrZ2VfZXh0aXJxLCBodyk7CiAKIAlody0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIDB4NDAwMCk7CiAJaWYgKCFody0+cmVncykgewpAQCAtMzMzNCw2ICszMzYyLDE0IEBACiAJaWYgKChkZXYgPSBza2dlX2RldmluaXQoaHcsIDAsIHVzaW5nX2RhYykpID09IE5VTEwpCiAJCWdvdG8gZXJyX291dF9sZWRfb2ZmOwogCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBiYWQgKHplcm8/KSBldGhlcm5ldCBhZGRyZXNzIGluIHJvbVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OworCX0KKworCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2VcbiIsCkBAIC0zMzg4LDExICszNDI0LDE1IEBACiAJZGV2MCA9IGh3LT5kZXZbMF07CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2MCk7CiAKKwlzcGluX2xvY2tfaXJxKCZody0+aHdfbG9jayk7CisJaHctPmludHJfbWFzayA9IDA7CiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwlzcGluX3VubG9ja19pcnEoJmh3LT5od19sb2NrKTsKKwogCXNrZ2Vfd3JpdGUxNihodywgQjBfTEVELCBMRURfU1RBVF9PRkYpOwogCXNrZ2Vfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19SU1RfU0VUKTsKIAotCXRhc2tsZXRfa2lsbCgmaHctPmV4dF90YXNrbGV0KTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBodyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuaCBiL2RyaXZlcnMvbmV0L3NrZ2UuaAppbmRleCAxZjFjZTg4Li5lZDE5ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmgKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5oCkBAIC0yMzg4LDYgKzIzODgsNyBAQAogc3RydWN0IHNrZ2VfaHcgewogCXZvaWQgX19pb21lbSAgCSAgICAgKnJlZ3M7CiAJc3RydWN0IHBjaV9kZXYJICAgICAqcGRldjsKKwlzcGlubG9ja190CSAgICAgaHdfbG9jazsKIAl1MzIJCSAgICAgaW50cl9tYXNrOwogCXN0cnVjdCBuZXRfZGV2aWNlICAgICpkZXZbMl07CiAKQEAgLTIzOTksOSArMjQwMCw4IEBACiAJdTMyCSAgICAgCSAgICAgcmFtX3NpemU7CiAJdTMyCSAgICAgCSAgICAgcmFtX29mZnNldDsKIAl1MTYJCSAgICAgcGh5X2FkZHI7Ci0KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXh0X3Rhc2tsZXQ7Ci0Jc3BpbmxvY2tfdAkgICAgIHBoeV9sb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdCAgIHBoeV93b3JrOworCXN0cnVjdCBtdXRleAkgICAgIHBoeV9tdXRleDsKIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDk1OTEwOTYuLmZiYTFlNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0xODcsMTIgKzE4NywxMSBAQAogCXJldHVybiB2OwogfQogCi1zdGF0aWMgaW50IHNreTJfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBza3kyX2h3ICpodywgcGNpX3Bvd2VyX3Qgc3RhdGUpCitzdGF0aWMgdm9pZCBza3kyX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHBjaV9wb3dlcl90IHN0YXRlKQogewogCXUxNiBwb3dlcl9jb250cm9sOwogCXUzMiByZWcxOwogCWludCB2YXV4OwotCWludCByZXQgPSAwOwogCiAJcHJfZGVidWcoInNreTJfc2V0X3Bvd2VyX3N0YXRlICVkXG4iLCBzdGF0ZSk7CiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7CkBAIC0yNzUsMTIgKzI3NCwxMCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmtub3duIHBvd2VyIHN0YXRlICVkXG4iLCBzdGF0ZSk7Ci0JCXJldCA9IC0xOwogCX0KIAogCXNreTJfcGNpX3dyaXRlMTYoaHcsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgcG93ZXJfY29udHJvbCk7CiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfcGh5X3Jlc2V0KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKQEAgLTIxNjQsNiArMjE2MSwxMyBAQAogLyogSWYgaWRsZSB0aGVuIGZvcmNlIGEgZmFrZSBzb2Z0IE5BUEkgcG9sbCBvbmNlIGEgc2Vjb25kCiAgKiB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBzaGFyaW5nIGFuIGVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdC4KICAqLworc3RhdGljIGlubGluZSB2b2lkIHNreTJfaWRsZV9zdGFydChzdHJ1Y3Qgc2t5Ml9odyAqaHcpCit7CisJaWYgKGlkbGVfdGltZW91dCA+IDApCisJCW1vZF90aW1lcigmaHctPmlkbGVfdGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlkbGVfdGltZW91dCkpOworfQorCiBzdGF0aWMgdm9pZCBza3kyX2lkbGUodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gKHN0cnVjdCBza3kyX2h3ICopIGFyZzsKQEAgLTIxODMsNiArMjE4Nyw5IEBACiAJaW50IHdvcmtfZG9uZSA9IDA7CiAJdTMyIHN0YXR1cyA9IHNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9FSVNSKTsKIAorCWlmICghfnN0YXR1cykKKwkJZ290byBvdXQ7CisKIAlpZiAoc3RhdHVzICYgWTJfSVNfSFdfRVJSKQogCQlza3kyX2h3X2ludHIoaHcpOwogCkBAIC0yMjE5LDcgKzIyMjYsNyBAQAogCiAJaWYgKHNreTJfbW9yZV93b3JrKGh3KSkKIAkJcmV0dXJuIDE7Ci0KK291dDoKIAluZXRpZl9yeF9jb21wbGV0ZShkZXYwKTsKIAogCXNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9MSVNSKTsKQEAgLTIyNDgsOCArMjI1NSwxMCBAQAogc3RhdGljIHZvaWQgc2t5Ml9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjAgPSBza3kyLT5ody0+ZGV2WzBdOwogCi0Jc2t5Ml9pbnRyKHNreTItPmh3LT5wZGV2LT5pcnEsIHNreTItPmh3LCBOVUxMKTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYwKSkKKwkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYwKTsKIH0KICNlbmRpZgogCkBAIC0zMzUwLDkgKzMzNTksNyBAQAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfQkFTRSk7CiAKIAlzZXR1cF90aW1lcigmaHctPmlkbGVfdGltZXIsIHNreTJfaWRsZSwgKHVuc2lnbmVkIGxvbmcpIGh3KTsKLQlpZiAoaWRsZV90aW1lb3V0ID4gMCkKLQkJbW9kX3RpbWVyKCZody0+aWRsZV90aW1lciwKLQkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaWRsZV90aW1lb3V0KSk7CisJc2t5Ml9pZGxlX3N0YXJ0KGh3KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CiAKQEAgLTM0MjUsOCArMzQzMiwxNCBAQAogewogCXN0cnVjdCBza3kyX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgaTsKKwlwY2lfcG93ZXJfdCBwc3RhdGUgPSBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKTsKIAotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwlpZiAoIShwc3RhdGUgPT0gUENJX0QzaG90IHx8IHBzdGF0ZSA9PSBQQ0lfRDNjb2xkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZWxfdGltZXJfc3luYygmaHctPmlkbGVfdGltZXIpOworCisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwogCiAJCWlmIChkZXYpIHsKQEAgLTM0MzUsMTAgKzM0NDgsMTQgQEAKIAogCQkJc2t5Ml9kb3duKGRldik7CiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJCQluZXRpZl9wb2xsX2Rpc2FibGUoZGV2KTsKIAkJfQogCX0KIAotCXJldHVybiBza3kyX3NldF9wb3dlcl9zdGF0ZShodywgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJc2t5Ml9zZXRfcG93ZXJfc3RhdGUoaHcsIHBzdGF0ZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zNDQ4LDI3ICszNDY1LDMxIEBACiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKLQllcnIgPSBza3kyX3NldF9wb3dlcl9zdGF0ZShodywgUENJX0QwKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwlza3kyX3NldF9wb3dlcl9zdGF0ZShodywgUENJX0QwKTsKIAogCWVyciA9IHNreTJfcmVzZXQoaHcpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfQkFTRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CiAJCWlmIChkZXYgJiYgbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJCQluZXRpZl9wb2xsX2VuYWJsZShkZXYpOworCiAJCQllcnIgPSBza3kyX3VwKGRldik7CiAJCQlpZiAoZXJyKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNvdWxkIG5vdCB1cDogJWRcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKIAkJCQlkZXZfY2xvc2UoZGV2KTsKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCX0KKworCXNreTJfaWRsZV9zdGFydChodyk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKaW5kZXggM2RiMzBjZC4uNWI0ZTg1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKKysrIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCiAvKiBUaGlzIGlzIHNldCB1cCBzbyB0aGF0IG9ubHkgYSBzaW5nbGUgYXV0b3Byb2JlIHRha2VzIHBsYWNlIHBlciBjYWxsLgogSVNBIGRldmljZSBhdXRvcHJvYmVzIG9uIGEgcnVubmluZyBtYWNoaW5lIGFyZSBub3QgcmVjb21tZW5kZWQuICovCi1pbnQKK2ludCBfX2luaXQKIGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jCmluZGV4IGIzZTM5N2QuLmZmOWJkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMKKysrIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYwpAQCAtNDIxLDcgKzQyMSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNNQyBVbHRyYTMyIEVJU0EgZXRoZXJuZXQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWludCB0aGlzX2RldiwgZm91bmQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkODcwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMCwwICsxLDIzMDcgQEAKKy8qCisgKiBzbWM5MTF4LmMKKyAqIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFNNU0MncyBMQU45MTF7NSw2LDcsOH0gc2luZ2xlLWNoaXAgRXRoZXJuZXQgZGV2aWNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU2Vuc29yaWEgQ29ycAorICoJICAgRGVyaXZlZCBmcm9tIHRoZSB1bmlmaWVkIFNNQzkxeCBkcml2ZXIgYnkgTmljb2xhcyBQaXRyZQorICoJICAgYW5kIHRoZSBzbXNjOTExeC5jIHJlZmVyZW5jZSBkcml2ZXIgYnkgU01TQworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBBcmd1bWVudHM6CisgKgkgd2F0Y2hkb2cgID0gVFggd2F0Y2hkb2cgdGltZW91dAorICoJIHR4X2ZpZm9fa2IgPSBTaXplIG9mIFRYIEZJRk8gaW4gS0IKKyAqCisgKiBIaXN0b3J5OgorICoJICAwNC8xNi8wNQlEdXN0aW4gTWNJbnRpcmUJCSBJbml0aWFsIHZlcnNpb24KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0KKwkgInNtYzkxMXguYzogdjEuMCAwNC0xNi0yMDA1IGJ5IER1c3RpbiBNY0ludGlyZSA8ZHVzdGluQHNlbnNvcmlhLmNvbT5cbiI7CisKKy8qIERlYnVnZ2luZyBvcHRpb25zICovCisjZGVmaW5lIEVOQUJMRV9TTUNfREVCVUdfUlgJCTAKKyNkZWZpbmUgRU5BQkxFX1NNQ19ERUJVR19UWAkJMAorI2RlZmluZSBFTkFCTEVfU01DX0RFQlVHX0RNQQkJMAorI2RlZmluZSBFTkFCTEVfU01DX0RFQlVHX1BLVFMJCTAKKyNkZWZpbmUgRU5BQkxFX1NNQ19ERUJVR19NSVNDCQkwCisjZGVmaW5lIEVOQUJMRV9TTUNfREVCVUdfRlVOQwkJMAorCisjZGVmaW5lIFNNQ19ERUJVR19SWAkJKChFTkFCTEVfU01DX0RFQlVHX1JYCT8gMSA6IDApIDw8IDApCisjZGVmaW5lIFNNQ19ERUJVR19UWAkJKChFTkFCTEVfU01DX0RFQlVHX1RYCT8gMSA6IDApIDw8IDEpCisjZGVmaW5lIFNNQ19ERUJVR19ETUEJCSgoRU5BQkxFX1NNQ19ERUJVR19ETUEJPyAxIDogMCkgPDwgMikKKyNkZWZpbmUgU01DX0RFQlVHX1BLVFMJCSgoRU5BQkxFX1NNQ19ERUJVR19QS1RTID8gMSA6IDApIDw8IDMpCisjZGVmaW5lIFNNQ19ERUJVR19NSVNDCQkoKEVOQUJMRV9TTUNfREVCVUdfTUlTQyA/IDEgOiAwKSA8PCA0KQorI2RlZmluZSBTTUNfREVCVUdfRlVOQwkJKChFTkFCTEVfU01DX0RFQlVHX0ZVTkMgPyAxIDogMCkgPDwgNSkKKworI2lmbmRlZiBTTUNfREVCVUcKKyNkZWZpbmUgU01DX0RFQlVHCSAoIFNNQ19ERUJVR19SWAkgIHwgXAorCQkJICAgU01DX0RFQlVHX1RYCSAgfCBcCisJCQkgICBTTUNfREVCVUdfRE1BICB8IFwKKwkJCSAgIFNNQ19ERUJVR19QS1RTIHwgXAorCQkJICAgU01DX0RFQlVHX01JU0MgfCBcCisJCQkgICBTTUNfREVCVUdfRlVOQyAgIFwKKwkJCSApCisjZW5kaWYKKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgInNtYzkxMXguaCIKKworLyoKKyAqIFRyYW5zbWl0IHRpbWVvdXQsIGRlZmF1bHQgNSBzZWNvbmRzLgorICovCitzdGF0aWMgaW50IHdhdGNoZG9nID0gNTAwMDsKK21vZHVsZV9wYXJhbSh3YXRjaGRvZywgaW50LCAwNDAwKTsKK01PRFVMRV9QQVJNX0RFU0Mod2F0Y2hkb2csICJ0cmFuc21pdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyIpOworCitzdGF0aWMgaW50IHR4X2ZpZm9fa2I9ODsKK21vZHVsZV9wYXJhbSh0eF9maWZvX2tiLCBpbnQsIDA0MDApOworTU9EVUxFX1BBUk1fREVTQyh0eF9maWZvX2tiLCJ0cmFuc21pdCBGSUZPIHNpemUgaW4gS0IgKDE8eDwxNSkoZGVmYXVsdD04KSIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBUaGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgdGhlIGRyaXZlci4gIElmIHlvdSBhcmUgY2hhbmdpbmcgYW55dGhpbmcKKyAqIGhlcmUgd2l0aCB0aGUgU01DIHN0dWZmLCB5b3Ugc2hvdWxkIGhhdmUgdGhlIGRhdGFzaGVldCBhbmQga25vdworICogd2hhdCB5b3UgYXJlIGRvaW5nLgorICovCisjZGVmaW5lIENBUkROQU1FICJzbWM5MTF4IgorCisvKgorICogVXNlIHBvd2VyLWRvd24gZmVhdHVyZSBvZiB0aGUgY2hpcAorICovCisjZGVmaW5lIFBPV0VSX0RPV04JCSAxCisKKworLyogc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGRyaXZlci4uICovCitzdHJ1Y3Qgc21jOTExeF9sb2NhbCB7CisJLyoKKwkgKiBJZiBJIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUgRE1BIGlzIGZpbmlzaGVkIGFuZCByZWFkeSB0byByZWxvYWQgYQorCSAqIHBhY2tldCwgSSB3aWxsIHN0b3JlIHRoZSBza2J1ZmYgaGVyZS4gVGhlbiwgdGhlIERNQSB3aWxsIHNlbmQgaXQKKwkgKiBvdXQgYW5kIGZyZWUgaXQuCisJICovCisJc3RydWN0IHNrX2J1ZmYgKnBlbmRpbmdfdHhfc2tiOworCisJLyoKKwkgKiB0aGVzZSBhcmUgdGhpbmdzIHRoYXQgdGhlIGtlcm5lbCB3YW50cyBtZSB0byBrZWVwLCBzbyB1c2VycworCSAqIGNhbiBmaW5kIG91dCBzZW1pLXVzZWxlc3Mgc3RhdGlzdGljcyBvZiBob3cgd2VsbCB0aGUgY2FyZCBpcworCSAqIHBlcmZvcm1pbmcKKwkgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKworCS8qIHZlcnNpb24vcmV2aXNpb24gb2YgdGhlIFNNQzkxMXggY2hpcCAqLworCXUxNiB2ZXJzaW9uOworCXUxNiByZXZpc2lvbjsKKworCS8qIEZJRk8gc2l6ZXMgKi8KKwlpbnQgdHhfZmlmb19rYjsKKwlpbnQgdHhfZmlmb19zaXplOworCWludCByeF9maWZvX3NpemU7CisJaW50IGFmY19jZmc7CisKKwkvKiBDb250YWlucyB0aGUgY3VycmVudCBhY3RpdmUgcmVjZWl2ZS9waHkgbW9kZSAqLworCWludCBjdGxfcmZkdXBseDsKKwlpbnQgY3RsX3JzcGVlZDsKKworCXUzMiBtc2dfZW5hYmxlOworCXUzMiBwaHlfdHlwZTsKKwlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpOworCisJLyogd29yayBxdWV1ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBwaHlfY29uZmlndXJlOworCWludCB3b3JrX3BlbmRpbmc7CisKKwlpbnQgdHhfdGhyb3R0bGU7CisJc3BpbmxvY2tfdCBsb2NrOworCisjaWZkZWYgU01DX1VTRV9ETUEKKwkvKiBETUEgbmVlZHMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNoaXAgKi8KKwl1X2xvbmcgcGh5c2FkZHI7CisJaW50IHJ4ZG1hOworCWludCB0eGRtYTsKKwlpbnQgcnhkbWFfYWN0aXZlOworCWludCB0eGRtYV9hY3RpdmU7CisJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfcnhfc2tiOworCXN0cnVjdCBza19idWZmICpjdXJyZW50X3R4X3NrYjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisjZW5kaWYKK307CisKKyNpZiBTTUNfREVCVUcgPiAwCisjZGVmaW5lIERCRyhuLCBhcmdzLi4uKQkJCQkgXAorCWRvIHsJCQkJCSBcCisJCWlmIChTTUNfREVCVUcgJiAobikpCQkgXAorCQkJcHJpbnRrKGFyZ3MpOwkJIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFBSSU5USyhhcmdzLi4uKSAgIHByaW50ayhhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKG4sIGFyZ3MuLi4pICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBQUklOVEsoYXJncy4uLikgICBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQorI2VuZGlmCisKKyNpZiBTTUNfREVCVUdfUEtUUyA+IDAKK3N0YXRpYyB2b2lkIFBSSU5UX1BLVCh1X2NoYXIgKmJ1ZiwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKwlpbnQgcmVtYWluZGVyOworCWludCBsaW5lczsKKworCWxpbmVzID0gbGVuZ3RoIC8gMTY7CisJcmVtYWluZGVyID0gbGVuZ3RoICUgMTY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGluZXMgOyBpICsrKSB7CisJCWludCBjdXI7CisJCWZvciAoY3VyID0gMDsgY3VyIDwgODsgY3VyKyspIHsKKwkJCXVfY2hhciBhLCBiOworCQkJYSA9ICpidWYrKzsKKwkJCWIgPSAqYnVmKys7CisJCQlwcmludGsoIiUwMnglMDJ4ICIsIGEsIGIpOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJlbWFpbmRlci8yIDsgaSsrKSB7CisJCXVfY2hhciBhLCBiOworCQlhID0gKmJ1ZisrOworCQliID0gKmJ1ZisrOworCQlwcmludGsoIiUwMnglMDJ4ICIsIGEsIGIpOworCX0KKwlwcmludGsoIlxuIik7Cit9CisjZWxzZQorI2RlZmluZSBQUklOVF9QS1QoeC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKy8qIHRoaXMgZW5hYmxlcyBhbiBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIFNNQ19FTkFCTEVfSU5UKHgpIGRvIHsJCQkJXAorCXVuc2lnbmVkIGludCAgX19tYXNrOwkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQlcCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJCVwKKwlfX21hc2sgPSBTTUNfR0VUX0lOVF9FTigpOwkJCVwKKwlfX21hc2sgfD0gKHgpOwkJCQkJXAorCVNNQ19TRVRfSU5UX0VOKF9fbWFzayk7CQkJCVwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgX19mbGFncyk7CVwKK30gd2hpbGUgKDApCisKKy8qIHRoaXMgZGlzYWJsZXMgYW4gaW50ZXJydXB0IGZyb20gdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIFNNQ19ESVNBQkxFX0lOVCh4KSBkbyB7CQkJCVwKKwl1bnNpZ25lZCBpbnQgIF9fbWFzazsJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJXAorCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgX19mbGFncyk7CQlcCisJX19tYXNrID0gU01DX0dFVF9JTlRfRU4oKTsJCQlcCisJX19tYXNrICY9IH4oeCk7CQkJCQlcCisJU01DX1NFVF9JTlRfRU4oX19tYXNrKTsJCQkJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBfX2ZsYWdzKTsJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIHRoaXMgZG9lcyBhIHNvZnQgcmVzZXQgb24gdGhlIGRldmljZQorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCByZWcsIHRpbWVvdXQ9MCwgcmVzZXRzPTE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCS8qCSBUYWtlIG91dCBvZiBQTSBzZXR0aW5nIGZpcnN0ICovCisJaWYgKChTTUNfR0VUX1BNVF9DVFJMKCkgJiBQTVRfQ1RSTF9SRUFEWV8pID09IDApIHsKKwkJLyogV3JpdGUgdG8gdGhlIGJ5dGV0ZXN0IHdpbGwgdGFrZSBvdXQgb2YgcG93ZXJkb3duICovCisJCVNNQ19TRVRfQllURV9URVNUKDApOworCQl0aW1lb3V0PTEwOworCQlkbyB7CisJCQl1ZGVsYXkoMTApOworCQkJcmVnID0gU01DX0dFVF9QTVRfQ1RSTCgpICYgUE1UX0NUUkxfUkVBRFlfOworCQl9IHdoaWxlICggdGltZW91dC0tICYmICFyZWcpOworCQlpZiAodGltZW91dCA9PSAwKSB7CisJCQlQUklOVEsoIiVzOiBzbWM5MTF4X3Jlc2V0IHRpbWVvdXQgd2FpdGluZyBmb3IgUE0gcmVzdG9yZVxuIiwgZGV2LT5uYW1lKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlTTUNfU0VUX0lOVF9FTigwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKHJlc2V0cy0tKSB7CisJCVNNQ19TRVRfSFdfQ0ZHKEhXX0NGR19TUlNUXyk7CisJCXRpbWVvdXQ9MTA7CisJCWRvIHsKKwkJCXVkZWxheSgxMCk7CisJCQlyZWcgPSBTTUNfR0VUX0hXX0NGRygpOworCQkJLyogSWYgY2hpcCBpbmRpY2F0ZXMgcmVzZXQgdGltZW91dCB0aGVuIHRyeSBhZ2FpbiAqLworCQkJaWYgKHJlZyAmIEhXX0NGR19TUlNUX1RPXykgeworCQkJCVBSSU5USygiJXM6IGNoaXAgcmVzZXQgdGltZW91dCwgcmV0cnlpbmcuLi5cbiIsIGRldi0+bmFtZSk7CisJCQkJcmVzZXRzKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gd2hpbGUgKCB0aW1lb3V0LS0gJiYgKHJlZyAmIEhXX0NGR19TUlNUXykpOworCX0KKwlpZiAodGltZW91dCA9PSAwKSB7CisJCVBSSU5USygiJXM6IHNtYzkxMXhfcmVzZXQgdGltZW91dCB3YWl0aW5nIGZvciByZXNldFxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG1ha2Ugc3VyZSBFRVBST00gaGFzIGZpbmlzaGVkIGxvYWRpbmcgYmVmb3JlIHNldHRpbmcgR1BJT19DRkcgKi8KKwl0aW1lb3V0PTEwMDA7CisJd2hpbGUgKCB0aW1lb3V0LS0gJiYgKFNNQ19HRVRfRTJQX0NNRCgpICYgRTJQX0NNRF9FUENfQlVTWV8pKSB7CisJCXVkZWxheSgxMCk7CisJfQorCWlmICh0aW1lb3V0ID09IDApeworCQlQUklOVEsoIiVzOiBzbWM5MTF4X3Jlc2V0IHRpbWVvdXQgd2FpdGluZyBmb3IgRUVQUk9NIGJ1c3lcbiIsIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbml0aWFsaXplIGludGVycnVwdHMgKi8KKwlTTUNfU0VUX0lOVF9FTigwKTsKKwlTTUNfQUNLX0lOVCgtMSk7CisKKwkvKiBSZXNldCB0aGUgRklGTyBsZXZlbCBhbmQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCisJU01DX1NFVF9IV19DRkcoKGxwLT50eF9maWZvX2tiICYgMHhGKSA8PCAxNik7CisvL1RPRE86IEZpZ3VyZSBvdXQgd2hhdCBhcHByb3ByaWF0ZSBwYXVzZSB0aW1lIGlzCisJU01DX1NFVF9GTE9XKEZMT1dfRkNQVF8gfCBGTE9XX0ZDRU5fKTsKKwlTTUNfU0VUX0FGQ19DRkcobHAtPmFmY19jZmcpOworCisKKwkvKiBTZXQgdG8gTEVEIG91dHB1dHMgKi8KKwlTTUNfU0VUX0dQSU9fQ0ZHKDB4NzAwNzAwMDApOworCisJLyoKKwkgKiBEZWFzc2VydCBJUlEgZm9yIDEqMTB1cyBmb3IgZWRnZSB0eXBlIGludGVycnVwdHMKKwkgKiBhbmQgZHJpdmUgSVJRIHBpbiBwdXNoLXB1bGwKKwkgKi8KKwlTTUNfU0VUX0lSUV9DRkcoICgxIDw8IDI0KSB8IElOVF9DRkdfSVJRX0VOXyB8IElOVF9DRkdfSVJRX1RZUEVfICk7CisKKwkvKiBjbGVhciBhbnl0aGluZyBzYXZlZCAqLworCWlmIChscC0+cGVuZGluZ190eF9za2IgIT0gTlVMTCkgeworCQlkZXZfa2ZyZWVfc2tiIChscC0+cGVuZGluZ190eF9za2IpOworCQlscC0+cGVuZGluZ190eF9za2IgPSBOVUxMOworCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCX0KK30KKworLyoKKyAqIEVuYWJsZSBJbnRlcnJ1cHRzLCBSZWNlaXZlLCBhbmQgVHJhbnNtaXQKKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbWFzaywgY2ZnLCBjcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJU01DX1NFVF9NQUNfQUREUihkZXYtPmRldl9hZGRyKTsKKworCS8qIEVuYWJsZSBUWCAqLworCWNmZyA9IFNNQ19HRVRfSFdfQ0ZHKCk7CisJY2ZnICY9IEhXX0NGR19UWF9GSUZfU1pfIHwgMHhGRkY7CisJY2ZnIHw9IEhXX0NGR19TRl87CisJU01DX1NFVF9IV19DRkcoY2ZnKTsKKwlTTUNfU0VUX0ZJRk9fVERBKDB4RkYpOworCS8qIFVwZGF0ZSBUWCBzdGF0cyBvbiBldmVyeSA2NCBwYWNrZXRzIHJlY2VpdmVkIG9yIGV2ZXJ5IDEgc2VjICovCisJU01DX1NFVF9GSUZPX1RTTCg2NCk7CisJU01DX1NFVF9HUFRfQ0ZHKEdQVF9DRkdfVElNRVJfRU5fIHwgMTAwMDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJU01DX0dFVF9NQUNfQ1IoY3IpOworCWNyIHw9IE1BQ19DUl9UWEVOXyB8IE1BQ19DUl9IQkRJU187CisJU01DX1NFVF9NQUNfQ1IoY3IpOworCVNNQ19TRVRfVFhfQ0ZHKFRYX0NGR19UWF9PTl8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBBZGQgMiBieXRlIHBhZGRpbmcgdG8gc3RhcnQgb2YgcGFja2V0cyAqLworCVNNQ19TRVRfUlhfQ0ZHKCgyPDw4KSAmIFJYX0NGR19SWERPRkZfKTsKKworCS8qIFR1cm4gb24gcmVjZWl2ZXIgYW5kIGVuYWJsZSBSWCAqLworCWlmIChjciAmIE1BQ19DUl9SWEVOXykKKwkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBSZWNlaXZlciBhbHJlYWR5IGVuYWJsZWRcbiIsIGRldi0+bmFtZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlTTUNfU0VUX01BQ19DUiggY3IgfCBNQUNfQ1JfUlhFTl8gKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCisJLyogSW50ZXJydXB0IG9uIGV2ZXJ5IHJlY2VpdmVkIHBhY2tldCAqLworCVNNQ19TRVRfRklGT19SU0EoMHgwMSk7CisJU01DX1NFVF9GSUZPX1JTTCgweDAwKTsKKworCS8qIG5vdywgZW5hYmxlIGludGVycnVwdHMgKi8KKwltYXNrID0gSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1RTRkxfRU5fIHwgSU5UX0VOX1JTRkxfRU5fIHwKKwkJSU5UX0VOX0dQVF9JTlRfRU5fIHwgSU5UX0VOX1JYREZIX0lOVF9FTl8gfCBJTlRfRU5fUlhFX0VOXyB8CisJCUlOVF9FTl9QSFlfSU5UX0VOXzsKKwlpZiAoSVNfUkVWX0EobHAtPnJldmlzaW9uKSkKKwkJbWFza3w9SU5UX0VOX1JERkxfRU5fOworCWVsc2UgeworCQltYXNrfD1JTlRfRU5fUkRGT19FTl87CisJfQorCVNNQ19FTkFCTEVfSU5UKG1hc2spOworfQorCisvKgorICogdGhpcyBwdXRzIHRoZSBkZXZpY2UgaW4gYW4gaW5hY3RpdmUgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9zaHV0ZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBjcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgQ0FSRE5BTUUsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBEaXNhYmxlIElSUSdzICovCisJU01DX1NFVF9JTlRfRU4oMCk7CisKKwkvKiBUdXJuIG9mIFJ4IGFuZCBUWCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCVNNQ19HRVRfTUFDX0NSKGNyKTsKKwljciAmPSB+KE1BQ19DUl9UWEVOXyB8IE1BQ19DUl9SWEVOXyB8IE1BQ19DUl9IQkRJU18pOworCVNNQ19TRVRfTUFDX0NSKGNyKTsKKwlTTUNfU0VUX1RYX0NGRyhUWF9DRkdfU1RPUF9UWF8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWM5MTF4X2Ryb3BfcGt0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgZmlmb19jb3VudCwgdGltZW91dCwgcmVnOworCisJREJHKFNNQ19ERUJVR19GVU5DIHwgU01DX0RFQlVHX1JYLCAiJXM6IC0tPiAlc1xuIiwgQ0FSRE5BTUUsIF9fRlVOQ1RJT05fXyk7CisJZmlmb19jb3VudCA9IFNNQ19HRVRfUlhfRklGT19JTkYoKSAmIDB4RkZGRjsKKwlpZiAoZmlmb19jb3VudCA8PSA0KSB7CisJCS8qIE1hbnVhbGx5IGR1bXAgdGhlIHBhY2tldCBkYXRhICovCisJCXdoaWxlIChmaWZvX2NvdW50LS0pCisJCQlTTUNfR0VUX1JYX0ZJRk8oKTsKKwl9IGVsc2UJIHsKKwkJLyogRmFzdCBmb3J3YXJkIHRocm91Z2ggdGhlIGJhZCBwYWNrZXQgKi8KKwkJU01DX1NFVF9SWF9EUF9DVFJMKFJYX0RQX0NUUkxfRkZXRF9CVVNZXyk7CisJCXRpbWVvdXQ9NTA7CisJCWRvIHsKKwkJCXVkZWxheSgxMCk7CisJCQlyZWcgPSBTTUNfR0VUX1JYX0RQX0NUUkwoKSAmIFJYX0RQX0NUUkxfRkZXRF9CVVNZXzsKKwkJfSB3aGlsZSAoIHRpbWVvdXQtLSAmJiByZWcpOworCQlpZiAodGltZW91dCA9PSAwKSB7CisJCQlQUklOVEsoIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIFJYIGZhc3QgZm9yd2FyZFxuIiwgZGV2LT5uYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHByb2NlZHVyZSB0byBoYW5kbGUgdGhlIHJlY2VpcHQgb2YgYSBwYWNrZXQuCisgKiBJdCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGNoZWNraW5nIGZvciBwYWNrZXQgcHJlc2VuY2UgaW4KKyAqIHRoZSBSWCBzdGF0dXMgRklGTy4JIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNwaW4gbG9jaworICogYWxyZWFkeSBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQJIHNtYzkxMXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBwa3RfbGVuLCBzdGF0dXM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCisJREJHKFNNQ19ERUJVR19GVU5DIHwgU01DX0RFQlVHX1JYLCAiJXM6IC0tPiAlc1xuIiwKKwkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IFNNQ19HRVRfUlhfU1RTX0ZJRk8oKTsKKwlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJ4IHBrdCBsZW4gJWQgc3RhdHVzIDB4JTA4eCBcbiIsCisJCWRldi0+bmFtZSwgKHN0YXR1cyAmIDB4M2ZmZjAwMDApID4+IDE2LCBzdGF0dXMgJiAweGMwMDBmZmZmKTsKKwlwa3RfbGVuID0gKHN0YXR1cyAmIFJYX1NUU19QS1RfTEVOXykgPj4gMTY7CisJaWYgKHN0YXR1cyAmIFJYX1NUU19FU18pIHsKKwkJLyogRGVhbCB3aXRoIGEgYmFkIHBhY2tldCAqLworCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBSWF9TVFNfQ1JDX0VSUl8pCisJCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQllbHNlIHsKKwkJCWlmIChzdGF0dXMgJiBSWF9TVFNfTEVOX0VSUl8pCisJCQkJbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCWlmIChzdGF0dXMgJiBSWF9TVFNfTUNBU1RfKQorCQkJCWxwLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJfQorCQkvKiBSZW1vdmUgdGhlIGJhZCBwYWNrZXQgZGF0YSBmcm9tIHRoZSBSWCBGSUZPICovCisJCXNtYzkxMXhfZHJvcF9wa3QoZGV2KTsKKwl9IGVsc2UgeworCQkvKiBSZWNlaXZlIGEgdmFsaWQgcGFja2V0ICovCisJCS8qIEFsbG9jIGEgYnVmZmVyIHdpdGggZXh0cmEgcm9vbSBmb3IgRE1BIGFsaWdubWVudCAqLworCQlza2I9ZGV2X2FsbG9jX3NrYihwa3RfbGVuKzMyKTsKKwkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgeworCQkJUFJJTlRLKCAiJXM6IExvdyBtZW1vcnksIHJjdmQgcGFja2V0IGRyb3BwZWQuXG4iLAorCQkJCWRldi0+bmFtZSk7CisJCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJc21jOTExeF9kcm9wX3BrdChkZXYpOworCQkJcmV0dXJuOworCQl9CisJCS8qIEFsaWduIElQIGhlYWRlciB0byAzMiBiaXRzCisJCSAqIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gYWRkIGEgMgorCQkgKiBieXRlIHBhZGRpbmcgdG8gdGhlIHBhY2tldCBzdGFydCwgc28gd2UgcmVhbGx5CisJCSAqIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG9yaWduYWwgZGF0YSBwb2ludGVyICovCisJCWRhdGEgPSBza2ItPmRhdGE7CisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJCXNrYl9wdXQoc2tiLHBrdF9sZW4tNCk7CisjaWZkZWYgU01DX1VTRV9ETUEKKwkJeworCQl1bnNpZ25lZCBpbnQgZmlmbzsKKwkJLyogTG93ZXIgdGhlIEZJRk8gdGhyZXNob2xkIGlmIHBvc3NpYmxlICovCisJCWZpZm8gPSBTTUNfR0VUX0ZJRk9fSU5UKCk7CisJCWlmIChmaWZvICYgMHhGRikgZmlmby0tOworCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFNldHRpbmcgUlggc3RhdCBGSUZPIHRocmVzaG9sZCB0byAlZFxuIiwKKwkJCWRldi0+bmFtZSwgZmlmbyAmIDB4ZmYpOworCQlTTUNfU0VUX0ZJRk9fSU5UKGZpZm8pOworCQkvKiBTZXR1cCBSWCBETUEgKi8KKwkJU01DX1NFVF9SWF9DRkcoUlhfQ0ZHX1JYX0VORF9BTEdOMTZfIHwgKCgyPDw4KSAmIFJYX0NGR19SWERPRkZfKSk7CisJCWxwLT5yeGRtYV9hY3RpdmUgPSAxOworCQlscC0+Y3VycmVudF9yeF9za2IgPSBza2I7CisJCVNNQ19QVUxMX0RBVEEoZGF0YSwgKHBrdF9sZW4rMisxNSkgJiB+MTUpOworCQkvKiBQYWNrZXQgcHJvY2Vzc2luZyBkZWZlcnJlZCB0byBETUEgUlggaW50ZXJydXB0ICovCisJCX0KKyNlbHNlCisJCVNNQ19TRVRfUlhfQ0ZHKFJYX0NGR19SWF9FTkRfQUxHTjRfIHwgKCgyPDw4KSAmIFJYX0NGR19SWERPRkZfKSk7CisJCVNNQ19QVUxMX0RBVEEoZGF0YSwgcGt0X2xlbisyKzMpOworCisJCURCRyhTTUNfREVCVUdfUEtUUywgIiVzOiBSZWNlaXZlZCBwYWNrZXRcbiIsIGRldi0+bmFtZSwpOworCQlQUklOVF9QS1QoZGF0YSwgKChwa3RfbGVuIC0gNCkgPD0gNjQpID8gcGt0X2xlbiAtIDQgOiA2NCk7CisJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCXNrYi0+ZGV2ID0gZGV2OworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCQluZXRpZl9yeChza2IpOworCQlscC0+c3RhdHMucnhfcGFja2V0cysrOworCQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbi00OworI2VuZGlmCisJfQorfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgdG8gYWN0dWFsbHkgc2VuZCBhIHBhY2tldCB0byB0aGUgY2hpcC4KKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9oYXJkd2FyZV9zZW5kX3BrdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBjbWRBLCBjbWRCLCBsZW47CisJdW5zaWduZWQgY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMgfCBTTUNfREVCVUdfVFgsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisJQlVHX09OKGxwLT5wZW5kaW5nX3R4X3NrYiA9PSBOVUxMKTsKKworCXNrYiA9IGxwLT5wZW5kaW5nX3R4X3NrYjsKKwlscC0+cGVuZGluZ190eF9za2IgPSBOVUxMOworCisJLyogY21kQSB7MjU6MjRdIGRhdGEgYWxpZ25tZW50IFsyMDoxNl0gc3RhcnQgb2Zmc2V0IFsxMDowXSBidWZmZXIgbGVuZ3RoICovCisJLyogY21kQiB7MzE6MTZdIHBrdCB0YWcgWzEwOjBdIGxlbmd0aCAqLworI2lmZGVmIFNNQ19VU0VfRE1BCisJLyogMTYgYnl0ZSBidWZmZXIgYWxpZ25tZW50IG1vZGUgKi8KKwlidWYgPSAoY2hhciopKCh1MzIpKHNrYi0+ZGF0YSkgJiB+MHhGKTsKKwlsZW4gPSAoc2tiLT5sZW4gKyAweEYgKyAoKHUzMilza2ItPmRhdGEgJiAweEYpKSAmIH4weEY7CisJY21kQSA9ICgxPDwyNCkgfCAoKCh1MzIpc2tiLT5kYXRhICYgMHhGKTw8MTYpIHwKKwkJCVRYX0NNRF9BX0lOVF9GSVJTVF9TRUdfIHwgVFhfQ01EX0FfSU5UX0xBU1RfU0VHXyB8CisJCQlza2ItPmxlbjsKKyNlbHNlCisJYnVmID0gKGNoYXIqKSgodTMyKXNrYi0+ZGF0YSAmIH4weDMpOworCWxlbiA9IChza2ItPmxlbiArIDMgKyAoKHUzMilza2ItPmRhdGEgJiAzKSkgJiB+MHgzOworCWNtZEEgPSAoKCh1MzIpc2tiLT5kYXRhICYgMHgzKSA8PCAxNikgfAorCQkJVFhfQ01EX0FfSU5UX0ZJUlNUX1NFR18gfCBUWF9DTURfQV9JTlRfTEFTVF9TRUdfIHwKKwkJCXNrYi0+bGVuOworI2VuZGlmCisJLyogdGFnIGlzIHBhY2tldCBsZW5ndGggc28gd2UgY2FuIHVzZSB0aGlzIGluIHN0YXRzIHVwZGF0ZSBsYXRlciAqLworCWNtZEIgPSAoc2tiLT5sZW4gIDw8IDE2KSB8IChza2ItPmxlbiAmIDB4N0ZGKTsKKworCURCRyhTTUNfREVCVUdfVFgsICIlczogVFggUEtUIExFTkdUSCAweCUwNHggKCVkKSBCVUYgMHglcCBDTURBIDB4JTA4eCBDTURCIDB4JTA4eFxuIiwKKwkJIGRldi0+bmFtZSwgbGVuLCBsZW4sIGJ1ZiwgY21kQSwgY21kQik7CisJU01DX1NFVF9UWF9GSUZPKGNtZEEpOworCVNNQ19TRVRfVFhfRklGTyhjbWRCKTsKKworCURCRyhTTUNfREVCVUdfUEtUUywgIiVzOiBUcmFuc21pdHRlZCBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisJUFJJTlRfUEtUKGJ1ZiwgbGVuIDw9IDY0ID8gbGVuIDogNjQpOworCisJLyogU2VuZCBwa3QgdmlhIFBJTyBvciBETUEgKi8KKyNpZmRlZiBTTUNfVVNFX0RNQQorCWxwLT5jdXJyZW50X3R4X3NrYiA9IHNrYjsKKwlTTUNfUFVTSF9EQVRBKGJ1ZiwgbGVuKTsKKwkvKiBETUEgY29tcGxldGUgSVJRIHdpbGwgZnJlZSBidWZmZXIgYW5kIHNldCBqaWZmaWVzICovCisjZWxzZQorCVNNQ19QVVNIX0RBVEEoYnVmLCBsZW4pOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCWlmICghbHAtPnR4X3Rocm90dGxlKSB7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlTTUNfRU5BQkxFX0lOVChJTlRfRU5fVERGQV9FTl8gfCBJTlRfRU5fVFNGTF9FTl8pOworfQorCisvKgorICogU2luY2UgSSBhbSBub3Qgc3VyZSBpZiBJIHdpbGwgaGF2ZSBlbm91Z2ggcm9vbSBpbiB0aGUgY2hpcCdzIHJhbQorICogdG8gc3RvcmUgdGhlIHBhY2tldCwgSSBjYWxsIHRoaXMgcm91dGluZSB3aGljaCBlaXRoZXIgc2VuZHMgaXQKKyAqIG5vdywgb3Igc2V0IHRoZSBjYXJkIHRvIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgd2hlbiByZWFkeQorICogZm9yIHRoZSBwYWNrZXQuCisgKi8KK3N0YXRpYyBpbnQgc21jOTExeF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IGZyZWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRyhTTUNfREVCVUdfRlVOQyB8IFNNQ19ERUJVR19UWCwgIiVzOiAtLT4gJXNcbiIsCisJCWRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCUJVR19PTihscC0+cGVuZGluZ190eF9za2IgIT0gTlVMTCk7CisKKwlmcmVlID0gU01DX0dFVF9UWF9GSUZPX0lORigpICYgVFhfRklGT19JTkZfVERGUkVFXzsKKwlEQkcoU01DX0RFQlVHX1RYLCAiJXM6IFRYIGZyZWUgc3BhY2UgJWRcbiIsIGRldi0+bmFtZSwgZnJlZSk7CisKKwkvKiBUdXJuIG9mZiB0aGUgZmxvdyB3aGVuIHJ1bm5pbmcgb3V0IG9mIHNwYWNlIGluIEZJRk8gKi8KKwlpZiAoZnJlZSA8PSBTTUM5MTFYX1RYX0ZJRk9fTE9XX1RIUkVTSE9MRCkgeworCQlEQkcoU01DX0RFQlVHX1RYLCAiJXM6IERpc2FibGluZyBkYXRhIGZsb3cgZHVlIHRvIGxvdyBGSUZPIHNwYWNlICglZClcbiIsCisJCQlkZXYtPm5hbWUsIGZyZWUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJLyogUmVlbmFibGUgd2hlbiBhdCBsZWFzdCAxIHBhY2tldCBvZiBzaXplIE1UVSBwcmVzZW50ICovCisJCVNNQ19TRVRfRklGT19UREEoKFNNQzkxMVhfVFhfRklGT19MT1dfVEhSRVNIT0xEKS82NCk7CisJCWxwLT50eF90aHJvdHRsZSA9IDE7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBEcm9wIHBhY2tldHMgd2hlbiB3ZSBydW4gb3V0IG9mIHNwYWNlIGluIFRYIEZJRk8KKwkgKiBBY2NvdW50IGZvciBvdmVyaGVhZCByZXF1aXJlZCBmb3I6CisJICoKKwkgKgkgIFR4IGNvbW1hbmQgd29yZHMJCQkgOCBieXRlcworCSAqCSAgU3RhcnQgb2Zmc2V0CQkJCSAxNSBieXRlcworCSAqCSAgRW5kIHBhZGRpbmcJCQkJIDE1IGJ5dGVzCisJICovCisJaWYgKHVubGlrZWx5KGZyZWUgPCAoc2tiLT5sZW4gKyA4ICsgMTUgKyAxNSkpKSB7CisJCXByaW50aygiJXM6IE5vIFR4IGZyZWUgc3BhY2UgJWQgPCAlZFxuIiwKKwkJCWRldi0+bmFtZSwgZnJlZSwgc2tiLT5sZW4pOworCQlscC0+cGVuZGluZ190eF9za2IgPSBOVUxMOworCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWxwLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgU01DX1VTRV9ETUEKKwl7CisJCS8qIElmIHRoZSBETUEgaXMgYWxyZWFkeSBydW5uaW5nIHRoZW4gZGVmZXIgdGhpcyBwYWNrZXQgVHggdW50aWwKKwkJICogdGhlIERNQSBJUlEgc3RhcnRzIGl0CisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGxwLT50eGRtYV9hY3RpdmUpIHsKKwkJCURCRyhTTUNfREVCVUdfVFggfCBTTUNfREVCVUdfRE1BLCAiJXM6IFR4IERNQSBydW5uaW5nLCBkZWZlcnJpbmcgcGFja2V0XG4iLCBkZXYtPm5hbWUpOworCQkJbHAtPnBlbmRpbmdfdHhfc2tiID0gc2tiOworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19ETUEsICIlczogQWN0aXZhdGluZyBUeCBETUFcbiIsIGRldi0+bmFtZSk7CisJCQlscC0+dHhkbWFfYWN0aXZlID0gMTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCX0KKyNlbmRpZgorCWxwLT5wZW5kaW5nX3R4X3NrYiA9IHNrYjsKKwlzbWM5MTF4X2hhcmR3YXJlX3NlbmRfcGt0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaGFuZGxlcyBhIFRYIHN0YXR1cyBpbnRlcnJ1cHQsIHdoaWNoIGlzIG9ubHkgY2FsbGVkIHdoZW46CisgKiAtIGEgVFggZXJyb3Igb2NjdXJyZWQsIG9yCisgKiAtIFRYIG9mIGEgcGFja2V0IGNvbXBsZXRlZC4KKyAqLworc3RhdGljIHZvaWQgc21jOTExeF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdHhfc3RhdHVzOworCisJREJHKFNNQ19ERUJVR19GVU5DIHwgU01DX0RFQlVHX1RYLCAiJXM6IC0tPiAlc1xuIiwKKwkJZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJLyogQ29sbGVjdCB0aGUgVFggc3RhdHVzICovCisJd2hpbGUgKCgoU01DX0dFVF9UWF9GSUZPX0lORigpICYgVFhfRklGT19JTkZfVFNVU0VEXykgPj4gMTYpICE9IDApIHsKKwkJREJHKFNNQ19ERUJVR19UWCwgIiVzOiBUeCBzdGF0IEZJRk8gdXNlZCAweCUwNHhcbiIsCisJCQlkZXYtPm5hbWUsCisJCQkoU01DX0dFVF9UWF9GSUZPX0lORigpICYgVFhfRklGT19JTkZfVFNVU0VEXykgPj4gMTYpOworCQl0eF9zdGF0dXMgPSBTTUNfR0VUX1RYX1NUU19GSUZPKCk7CisJCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWxwLT5zdGF0cy50eF9ieXRlcys9dHhfc3RhdHVzPj4xNjsKKwkJREJHKFNNQ19ERUJVR19UWCwgIiVzOiBUeCBGSUZPIHRhZyAweCUwNHggc3RhdHVzIDB4JTA0eFxuIiwKKwkJCWRldi0+bmFtZSwgKHR4X3N0YXR1cyAmIDB4ZmZmZjAwMDApID4+IDE2LAorCQkJdHhfc3RhdHVzICYgMHgwMDAwZmZmZik7CisJCS8qIGNvdW50IFR4IGVycm9ycywgYnV0IGlnbm9yZSBsb3N0IGNhcnJpZXIgZXJyb3JzIHdoZW4gaW4KKwkJICogZnVsbC1kdXBsZXggbW9kZSAqLworCQlpZiAoKHR4X3N0YXR1cyAmIFRYX1NUU19FU18pICYmICEobHAtPmN0bF9yZmR1cGx4ICYmCisJCSAgICAhKHR4X3N0YXR1cyAmIDB4MDAwMDAzMDYpKSkgeworCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCQl9CisJCWlmICh0eF9zdGF0dXMgJiBUWF9TVFNfTUFOWV9DT0xMXykgeworCQkJbHAtPnN0YXRzLmNvbGxpc2lvbnMrPTE2OworCQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCX0gZWxzZSB7CisJCQlscC0+c3RhdHMuY29sbGlzaW9ucys9KHR4X3N0YXR1cyAmIFRYX1NUU19DT0xMX0NOVF8pID4+IDM7CisJCX0KKwkJLyogY2FycmllciBlcnJvciBvbmx5IGhhcyBtZWFuaW5nIGZvciBoYWxmLWR1cGxleCBjb21tdW5pY2F0aW9uICovCisJCWlmICgodHhfc3RhdHVzICYgKFRYX1NUU19MT0NfIHwgVFhfU1RTX05PX0NBUlJfKSkgJiYKKwkJICAgICFscC0+Y3RsX3JmZHVwbHgpIHsKKwkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh0eF9zdGF0dXMgJiBUWF9TVFNfTEFURV9DT0xMXykgeworCQkJbHAtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQl9CisJfQorfQorCisKKy8qLS0tUEhZIENPTlRST0wgQU5EIENPTkZJR1VSQVRJT04tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogUmVhZHMgYSByZWdpc3RlciBmcm9tIHRoZSBNSUkgTWFuYWdlbWVudCBzZXJpYWwgaW50ZXJmYWNlCisgKi8KKworc3RhdGljIGludCBzbWM5MTF4X3BoeV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlhZGRyLCBpbnQgcGh5cmVnKQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IHBoeWRhdGE7CisKKwlTTUNfR0VUX01JSShwaHlyZWcsIHBoeWFkZHIsIHBoeWRhdGEpOworCisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IHBoeWFkZHI9MHgleCwgcGh5cmVnPTB4JTAyeCwgcGh5ZGF0YT0weCUwNHhcbiIsCisJCV9fRlVOQ1RJT05fXywgcGh5YWRkciwgcGh5cmVnLCBwaHlkYXRhKTsKKwlyZXR1cm4gcGh5ZGF0YTsKK30KKworCisvKgorICogV3JpdGVzIGEgcmVnaXN0ZXIgdG8gdGhlIE1JSSBNYW5hZ2VtZW50IHNlcmlhbCBpbnRlcmZhY2UKKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9waHlfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeWFkZHIsIGludCBwaHlyZWcsCisJCQlpbnQgcGh5ZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IHBoeWFkZHI9MHgleCwgcGh5cmVnPTB4JXgsIHBoeWRhdGE9MHgleFxuIiwKKwkJX19GVU5DVElPTl9fLCBwaHlhZGRyLCBwaHlyZWcsIHBoeWRhdGEpOworCisJU01DX1NFVF9NSUkocGh5cmVnLCBwaHlhZGRyLCBwaHlkYXRhKTsKK30KKworLyoKKyAqIEZpbmRzIGFuZCByZXBvcnRzIHRoZSBQSFkgYWRkcmVzcyAoMTE1IGFuZCAxMTcgaGF2ZSBleHRlcm5hbAorICogUEhZIGludGVyZmFjZSAxMTggaGFzIGludGVybmFsIG9ubHkKKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9waHlfZGV0ZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBwaHlhZGRyOworCXVuc2lnbmVkIGludCBjZmcsIGlkMSwgaWQyOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJbHAtPnBoeV90eXBlID0gMDsKKworCS8qCisJICogU2NhbiBhbGwgMzIgUEhZIGFkZHJlc3NlcyBpZiBuZWNlc3NhcnksIHN0YXJ0aW5nIGF0CisJICogUEhZIzEgdG8gUEhZIzMxLCBhbmQgdGhlbiBQSFkjMCBsYXN0LgorCSAqLworCXN3aXRjaChscC0+dmVyc2lvbikgeworCQljYXNlIDB4MTE1OgorCQljYXNlIDB4MTE3OgorCQkJY2ZnID0gU01DX0dFVF9IV19DRkcoKTsKKwkJCWlmIChjZmcgJiBIV19DRkdfRVhUX1BIWV9ERVRfKSB7CisJCQkJY2ZnICY9IH5IV19DRkdfUEhZX0NMS19TRUxfOworCQkJCWNmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfQ0xLX0RJU187CisJCQkJU01DX1NFVF9IV19DRkcoY2ZnKTsKKwkJCQl1ZGVsYXkoMTApOyAvKiBXYWl0IGZvciBjbG9ja3MgdG8gc3RvcCAqLworCisJCQkJY2ZnIHw9IEhXX0NGR19FWFRfUEhZX0VOXzsKKwkJCQlTTUNfU0VUX0hXX0NGRyhjZmcpOworCQkJCXVkZWxheSgxMCk7IC8qIFdhaXQgZm9yIGNsb2NrcyB0byBzdG9wICovCisKKwkJCQljZmcgJj0gfkhXX0NGR19QSFlfQ0xLX1NFTF87CisJCQkJY2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9FWFRfUEhZXzsKKwkJCQlTTUNfU0VUX0hXX0NGRyhjZmcpOworCQkJCXVkZWxheSgxMCk7IC8qIFdhaXQgZm9yIGNsb2NrcyB0byBzdG9wICovCisKKwkJCQljZmcgfD0gSFdfQ0ZHX1NNSV9TRUxfOworCQkJCVNNQ19TRVRfSFdfQ0ZHKGNmZyk7CisKKwkJCQlmb3IgKHBoeWFkZHIgPSAxOyBwaHlhZGRyIDwgMzI7ICsrcGh5YWRkcikgeworCisJCQkJCS8qIFJlYWQgdGhlIFBIWSBpZGVudGlmaWVycyAqLworCQkJCQlTTUNfR0VUX1BIWV9JRDEocGh5YWRkciAmIDMxLCBpZDEpOworCQkJCQlTTUNfR0VUX1BIWV9JRDIocGh5YWRkciAmIDMxLCBpZDIpOworCisJCQkJCS8qIE1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIGlkZW50aWZpZXIgKi8KKwkJCQkJaWYgKGlkMSAhPSAweDAwMDAgJiYgaWQxICE9IDB4ZmZmZiAmJgorCQkJCQkgICAgaWQxICE9IDB4ODAwMCAmJiBpZDIgIT0gMHgwMDAwICYmCisJCQkJCSAgICBpZDIgIT0gMHhmZmZmICYmIGlkMiAhPSAweDgwMDApIHsKKwkJCQkJCS8qIFNhdmUgdGhlIFBIWSdzIGFkZHJlc3MgKi8KKwkJCQkJCWxwLT5taWkucGh5X2lkID0gcGh5YWRkciAmIDMxOworCQkJCQkJbHAtPnBoeV90eXBlID0gaWQxIDw8IDE2IHwgaWQyOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCWRlZmF1bHQ6CisJCQkvKiBJbnRlcm5hbCBtZWRpYSBvbmx5ICovCisJCQlTTUNfR0VUX1BIWV9JRDEoMSwgaWQxKTsKKwkJCVNNQ19HRVRfUEhZX0lEMigxLCBpZDIpOworCQkJLyogU2F2ZSB0aGUgUEhZJ3MgYWRkcmVzcyAqLworCQkJbHAtPm1paS5waHlfaWQgPSAxOworCQkJbHAtPnBoeV90eXBlID0gaWQxIDw8IDE2IHwgaWQyOworCX0KKworCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBwaHlfaWQxPTB4JXgsIHBoeV9pZDI9MHgleCBwaHlhZGRyPTB4JWRcbiIsCisJCWRldi0+bmFtZSwgaWQxLCBpZDIsIGxwLT5taWkucGh5X2lkKTsKK30KKworLyoKKyAqIFNldHMgdGhlIFBIWSB0byBhIGNvbmZpZ3VyYXRpb24gYXMgZGV0ZXJtaW5lZCBieSB0aGUgdXNlci4KKyAqIENhbGxlZCB3aXRoIHNwaW5fbG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IHNtYzkxMXhfcGh5X2ZpeGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCBwaHlhZGRyID0gbHAtPm1paS5waHlfaWQ7CisJaW50IGJtY3I7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBFbnRlciBMaW5rIERpc2FibGUgc3RhdGUgKi8KKwlTTUNfR0VUX1BIWV9CTUNSKHBoeWFkZHIsIGJtY3IpOworCWJtY3IgfD0gQk1DUl9QRE9XTjsKKwlTTUNfU0VUX1BIWV9CTUNSKHBoeWFkZHIsIGJtY3IpOworCisJLyoKKwkgKiBTZXQgb3VyIGZpeGVkIGNhcGFiaWxpdGllcworCSAqIERpc2FibGUgYXV0by1uZWdvdGlhdGlvbgorCSAqLworCWJtY3IgJj0gfkJNQ1JfQU5FTkFCTEU7CisJaWYgKGxwLT5jdGxfcmZkdXBseCkKKwkJYm1jciB8PSBCTUNSX0ZVTExEUExYOworCisJaWYgKGxwLT5jdGxfcnNwZWVkID09IDEwMCkKKwkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOworCisJLyogV3JpdGUgb3VyIGNhcGFiaWxpdGllcyB0byB0aGUgcGh5IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlTTUNfU0VUX1BIWV9CTUNSKHBoeWFkZHIsIGJtY3IpOworCisJLyogUmUtQ29uZmlndXJlIHRoZSBSZWNlaXZlL1BoeSBDb250cm9sIHJlZ2lzdGVyICovCisJYm1jciAmPSB+Qk1DUl9QRE9XTjsKKwlTTUNfU0VUX1BIWV9CTUNSKHBoeWFkZHIsIGJtY3IpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBzbWM5MTF4X3BoeV9yZXNldCAtIHJlc2V0IHRoZSBwaHkKKyAqIEBkZXY6IG5ldCBkZXZpY2UKKyAqIEBwaHk6IHBoeSBhZGRyZXNzCisgKgorICogSXNzdWUgYSBzb2Z0d2FyZSByZXNldCBmb3IgdGhlIHNwZWNpZmllZCBQSFkgYW5kCisgKiB3YWl0IHVwIHRvIDEwMG1zIGZvciB0aGUgcmVzZXQgdG8gY29tcGxldGUuCSBXZSBzaG91bGQKKyAqIG5vdCBhY2Nlc3MgdGhlIFBIWSBmb3IgNTBtcyBhZnRlciBpc3N1aW5nIHRoZSByZXNldC4KKyAqCisgKiBUaGUgdGltZSB0byB3YWl0IGFwcGVhcnMgdG8gYmUgZGVwZW5kZW50IG9uIHRoZSBQSFkuCisgKgorICovCitzdGF0aWMgaW50IHNtYzkxMXhfcGh5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHkpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCB0aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJlZzsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXMoKVxuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJcmVnID0gU01DX0dFVF9QTVRfQ1RSTCgpOworCXJlZyAmPSB+MHhmZmZmZjAzMDsKKwlyZWcgfD0gUE1UX0NUUkxfUEhZX1JTVF87CisJU01DX1NFVF9QTVRfQ1RSTChyZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJZm9yICh0aW1lb3V0ID0gMjsgdGltZW91dDsgdGltZW91dC0tKSB7CisJCW1zbGVlcCg1MCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlyZWcgPSBTTUNfR0VUX1BNVF9DVFJMKCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCWlmICghKHJlZyAmIFBNVF9DVFJMX1BIWV9SU1RfKSkgeworCQkJLyogZXh0cmEgZGVsYXkgcmVxdWlyZWQgYmVjYXVzZSB0aGUgcGh5IG1heQorCQkJICogbm90IGJlIGNvbXBsZXRlZCB3aXRoIGl0cyByZXNldAorCQkJICogd2hlbiBQSFlfQkNSX1JFU0VUXyBpcyBjbGVhcmVkLiAyNTZ1cworCQkJICogc2hvdWxkIHN1ZmZpY2UsIGJ1dCB1c2UgNTAwdXMgdG8gYmUgc2FmZQorCQkJICovCisJCQl1ZGVsYXkoNTAwKTsKKwkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVnICYgUE1UX0NUUkxfUEhZX1JTVF87Cit9CisKKy8qCisgKiBzbWM5MTF4X3BoeV9wb3dlcmRvd24gLSBwb3dlcmRvd24gcGh5CisgKiBAZGV2OiBuZXQgZGV2aWNlCisgKiBAcGh5OiBwaHkgYWRkcmVzcworICoKKyAqIFBvd2VyIGRvd24gdGhlIHNwZWNpZmllZCBQSFkKKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9waHlfcG93ZXJkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHkpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgYm1jcjsKKworCS8qIEVudGVyIExpbmsgRGlzYWJsZSBzdGF0ZSAqLworCVNNQ19HRVRfUEhZX0JNQ1IocGh5LCBibWNyKTsKKwlibWNyIHw9IEJNQ1JfUERPV047CisJU01DX1NFVF9QSFlfQk1DUihwaHksIGJtY3IpOworfQorCisvKgorICogc21jOTExeF9waHlfY2hlY2tfbWVkaWEgLSBjaGVjayB0aGUgbWVkaWEgc3RhdHVzIGFuZCBhZGp1c3QgQk1DUgorICogQGRldjogbmV0IGRldmljZQorICogQGluaXQ6IHNldCB0cnVlIGZvciBpbml0aWFsaXNhdGlvbgorICoKKyAqIFNlbGVjdCBkdXBsZXggbW9kZSBkZXBlbmRpbmcgb24gbmVnb3RpYXRpb24gc3RhdGUuCVRoaXMKKyAqIGFsc28gdXBkYXRlcyBvdXIgY2FycmllciBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9waHlfY2hlY2tfbWVkaWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluaXQpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCBwaHlhZGRyID0gbHAtPm1paS5waHlfaWQ7CisJdW5zaWduZWQgaW50IGJtY3IsIGNyOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKG1paV9jaGVja19tZWRpYSgmbHAtPm1paSwgbmV0aWZfbXNnX2xpbmsobHApLCBpbml0KSkgeworCQkvKiBkdXBsZXggc3RhdGUgaGFzIGNoYW5nZWQgKi8KKwkJU01DX0dFVF9QSFlfQk1DUihwaHlhZGRyLCBibWNyKTsKKwkJU01DX0dFVF9NQUNfQ1IoY3IpOworCQlpZiAobHAtPm1paS5mdWxsX2R1cGxleCkgeworCQkJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IENvbmZpZ3VyaW5nIGZvciBmdWxsLWR1cGxleCBtb2RlXG4iLCBkZXYtPm5hbWUpOworCQkJYm1jciB8PSBCTUNSX0ZVTExEUExYOworCQkJY3IgfD0gTUFDX0NSX1JDVk9XTl87CisJCX0gZWxzZSB7CisJCQlEQkcoU01DX0RFQlVHX01JU0MsICIlczogQ29uZmlndXJpbmcgZm9yIGhhbGYtZHVwbGV4IG1vZGVcbiIsIGRldi0+bmFtZSk7CisJCQlibWNyICY9IH5CTUNSX0ZVTExEUExYOworCQkJY3IgJj0gfk1BQ19DUl9SQ1ZPV05fOworCQl9CisJCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgYm1jcik7CisJCVNNQ19TRVRfTUFDX0NSKGNyKTsKKwl9Cit9CisKKy8qCisgKiBDb25maWd1cmVzIHRoZSBzcGVjaWZpZWQgUEhZIHRocm91Z2ggdGhlIE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZQorICogdXNpbmcgQXV0b25lZ290aWF0aW9uLgorICogQ2FsbHMgc21jOTExeF9waHlfZml4ZWQoKSBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGEgY2VydGFpbiBjb25maWcuCisgKiBJZiBSUEMgQU5FRyBiaXQgaXMgc2V0LCB0aGUgbWVkaWEgc2VsZWN0aW9uIGlzIGRlcGVuZGVudCBwdXJlbHkgb24KKyAqIHRoZSBzZWxlY3Rpb24gYnkgdGhlIE1JSSAoZWl0aGVyIGluIHRoZSBNSUkgQk1DUiByZWcgb3IgdGhlIHJlc3VsdAorICogb2YgYXV0b25lZ290aWF0aW9uLikgIElmIHRoZSBSUEMgQU5FRyBiaXQgaXMgY2xlYXJlZCwgdGhlIHNlbGVjdGlvbgorICogaXMgY29udHJvbGxlZCBieSB0aGUgUlBDIFNQRUVEIGFuZCBSUEMgRFBMWCBiaXRzLgorICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9jb25maWd1cmUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHBoeWFkZHIgPSBscC0+bWlpLnBoeV9pZDsKKwlpbnQgbXlfcGh5X2NhcHM7IC8qIE15IFBIWSBjYXBhYmlsaXRpZXMgKi8KKwlpbnQgbXlfYWRfY2FwczsgLyogTXkgQWR2ZXJ0aXNlZCBjYXBhYmlsaXRpZXMgKi8KKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzKClcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgcGh5X3R5cGUgaXMgemVyby4KKwkgKi8KKwlpZiAobHAtPnBoeV90eXBlID09IDApCisJCSBnb3RvIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZV9leGl0OworCisJaWYgKHNtYzkxMXhfcGh5X3Jlc2V0KGRldiwgcGh5YWRkcikpIHsKKwkJcHJpbnRrKCIlczogUEhZIHJlc2V0IHRpbWVkIG91dFxuIiwgZGV2LT5uYW1lKTsKKwkJZ290byBzbWM5MTF4X3BoeV9jb25maWd1cmVfZXhpdDsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIEVuYWJsZSBQSFkgSW50ZXJydXB0cyAoZm9yIHJlZ2lzdGVyIDE4KQorCSAqIEludGVycnVwdHMgbGlzdGVkIGhlcmUgYXJlIGVuYWJsZWQKKwkgKi8KKwlTTUNfU0VUX1BIWV9JTlRfTUFTSyhwaHlhZGRyLCBQSFlfSU5UX01BU0tfRU5FUkdZX09OXyB8CisJCSBQSFlfSU5UX01BU0tfQU5FR19DT01QXyB8IFBIWV9JTlRfTUFTS19SRU1PVEVfRkFVTFRfIHwKKwkJIFBIWV9JTlRfTUFTS19MSU5LX0RPV05fKTsKKworCS8qIElmIHRoZSB1c2VyIHJlcXVlc3RlZCBubyBhdXRvIG5lZywgdGhlbiBnbyBzZXQgaGlzIHJlcXVlc3QgKi8KKwlpZiAobHAtPm1paS5mb3JjZV9tZWRpYSkgeworCQlzbWM5MTF4X3BoeV9maXhlZChkZXYpOworCQlnb3RvIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZV9leGl0OworCX0KKworCS8qIENvcHkgb3VyIGNhcGFiaWxpdGllcyBmcm9tIE1JSV9CTVNSIHRvIE1JSV9BRFZFUlRJU0UgKi8KKwlTTUNfR0VUX1BIWV9CTVNSKHBoeWFkZHIsIG15X3BoeV9jYXBzKTsKKwlpZiAoIShteV9waHlfY2FwcyAmIEJNU1JfQU5FR0NBUEFCTEUpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkF1dG8gbmVnb3RpYXRpb24gTk9UIHN1cHBvcnRlZFxuIik7CisJCXNtYzkxMXhfcGh5X2ZpeGVkKGRldik7CisJCWdvdG8gc21jOTExeF9waHlfY29uZmlndXJlX2V4aXQ7CisJfQorCisJLyogQ1NNQSBjYXBhYmxlIHcvIGJvdGggcGF1c2VzICovCisJbXlfYWRfY2FwcyA9IEFEVkVSVElTRV9DU01BIHwgQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOworCisJaWYgKG15X3BoeV9jYXBzICYgQk1TUl8xMDBCQVNFNCkKKwkJbXlfYWRfY2FwcyB8PSBBRFZFUlRJU0VfMTAwQkFTRTQ7CisJaWYgKG15X3BoeV9jYXBzICYgQk1TUl8xMDBGVUxMKQorCQlteV9hZF9jYXBzIHw9IEFEVkVSVElTRV8xMDBGVUxMOworCWlmIChteV9waHlfY2FwcyAmIEJNU1JfMTAwSEFMRikKKwkJbXlfYWRfY2FwcyB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKKwlpZiAobXlfcGh5X2NhcHMgJiBCTVNSXzEwRlVMTCkKKwkJbXlfYWRfY2FwcyB8PSBBRFZFUlRJU0VfMTBGVUxMOworCWlmIChteV9waHlfY2FwcyAmIEJNU1JfMTBIQUxGKQorCQlteV9hZF9jYXBzIHw9IEFEVkVSVElTRV8xMEhBTEY7CisKKwkvKiBEaXNhYmxlIGNhcGFiaWxpdGllcyBub3Qgc2VsZWN0ZWQgYnkgb3VyIHVzZXIgKi8KKwlpZiAobHAtPmN0bF9yc3BlZWQgIT0gMTAwKQorCQlteV9hZF9jYXBzICY9IH4oQURWRVJUSVNFXzEwMEJBU0U0fEFEVkVSVElTRV8xMDBGVUxMfEFEVkVSVElTRV8xMDBIQUxGKTsKKworCSBpZiAoIWxwLT5jdGxfcmZkdXBseCkKKwkJbXlfYWRfY2FwcyAmPSB+KEFEVkVSVElTRV8xMDBGVUxMfEFEVkVSVElTRV8xMEZVTEwpOworCisJLyogVXBkYXRlIG91ciBBdXRvLU5lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyICovCisJU01DX1NFVF9QSFlfTUlJX0FEVihwaHlhZGRyLCBteV9hZF9jYXBzKTsKKwlscC0+bWlpLmFkdmVydGlzaW5nID0gbXlfYWRfY2FwczsKKworCS8qCisJICogUmVhZCB0aGUgcmVnaXN0ZXIgYmFjay4JIFdpdGhvdXQgdGhpcywgaXQgYXBwZWFycyB0aGF0IHdoZW4KKwkgKiBhdXRvLW5lZ290aWF0aW9uIGlzIHJlc3RhcnRlZCwgc29tZXRpbWVzIGl0IGlzbid0IHJlYWR5IGFuZAorCSAqIHRoZSBsaW5rIGRvZXMgbm90IGNvbWUgdXAuCisJICovCisJdWRlbGF5KDEwKTsKKwlTTUNfR0VUX1BIWV9NSUlfQURWKHBoeWFkZHIsIHN0YXR1cyk7CisKKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogcGh5IGNhcHM9MHglMDR4XG4iLCBkZXYtPm5hbWUsIG15X3BoeV9jYXBzKTsKKwlEQkcoU01DX0RFQlVHX01JU0MsICIlczogcGh5IGFkdmVydGlzZWQgY2Fwcz0weCUwNHhcbiIsIGRldi0+bmFtZSwgbXlfYWRfY2Fwcyk7CisKKwkvKiBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gcHJvY2VzcyBpbiBvcmRlciB0byBhZHZlcnRpc2UgbXkgY2FwcyAqLworCVNNQ19TRVRfUEhZX0JNQ1IocGh5YWRkciwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKworCXNtYzkxMXhfcGh5X2NoZWNrX21lZGlhKGRldiwgMSk7CisKK3NtYzkxMXhfcGh5X2NvbmZpZ3VyZV9leGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJbHAtPndvcmtfcGVuZGluZyA9IDA7Cit9CisKKy8qCisgKiBzbWM5MTF4X3BoeV9pbnRlcnJ1cHQKKyAqCisgKiBQdXJwb3NlOiAgSGFuZGxlIGludGVycnVwdHMgcmVsYXRpbmcgdG8gUEhZIHJlZ2lzdGVyIDE4LiBUaGlzIGlzCisgKgkgY2FsbGVkIGZyb20gdGhlICJoYXJkIiBpbnRlcnJ1cHQgaGFuZGxlciB1bmRlciBvdXIgcHJpdmF0ZSBzcGlubG9jay4KKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9waHlfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCBwaHlhZGRyID0gbHAtPm1paS5waHlfaWQ7CisJaW50IHN0YXR1czsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCWlmIChscC0+cGh5X3R5cGUgPT0gMCkKKwkJcmV0dXJuOworCisJc21jOTExeF9waHlfY2hlY2tfbWVkaWEoZGV2LCAwKTsKKwkvKiByZWFkIHRvIGNsZWFyIHN0YXR1cyBiaXRzICovCisJU01DX0dFVF9QSFlfSU5UX1NSQyhwaHlhZGRyLHN0YXR1cyk7CisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IFBIWSBpbnRlcnJ1cHQgc3RhdHVzIDB4JTA0eFxuIiwKKwkJZGV2LT5uYW1lLCBzdGF0dXMgJiAweGZmZmYpOworCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBBRkNfQ0ZHIDB4JTA4eFxuIiwKKwkJZGV2LT5uYW1lLCBTTUNfR0VUX0FGQ19DRkcoKSk7Cit9CisKKy8qLS0tIEVORCBQSFkgQ09OVFJPTCBBTkQgQ09ORklHVVJBVElPTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVGhpcyBpcyB0aGUgbWFpbiByb3V0aW5lIG9mIHRoZSBkcml2ZXIsIHRvIGhhbmRsZSB0aGUgZGV2aWNlIHdoZW4KKyAqIGl0IG5lZWRzIHNvbWUgYXR0ZW50aW9uLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc21jOTExeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBtYXNrLCB0aW1lb3V0OworCXVuc2lnbmVkIGludCByeF9vdmVycnVuPTAsIGNyLCBwa3RzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKworCS8qIFNwdXJpb3VzIGludGVycnVwdCBjaGVjayAqLworCWlmICgoU01DX0dFVF9JUlFfQ0ZHKCkgJiAoSU5UX0NGR19JUlFfSU5UXyB8IElOVF9DRkdfSVJRX0VOXykpICE9CisJCShJTlRfQ0ZHX0lSUV9JTlRfIHwgSU5UX0NGR19JUlFfRU5fKSkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJbWFzayA9IFNNQ19HRVRfSU5UX0VOKCk7CisJU01DX1NFVF9JTlRfRU4oMCk7CisKKwkvKiBzZXQgYSB0aW1lb3V0IHZhbHVlLCBzbyBJIGRvbid0IHN0YXkgaGVyZSBmb3JldmVyICovCisJdGltZW91dCA9IDg7CisKKworCWRvIHsKKwkJc3RhdHVzID0gU01DX0dFVF9JTlQoKTsKKworCQlEQkcoU01DX0RFQlVHX01JU0MsICIlczogSU5UIDB4JTA4eCBNQVNLIDB4JTA4eCBPVVRTSURFIE1BU0sgMHglMDh4XG4iLAorCQkJZGV2LT5uYW1lLCBzdGF0dXMsIG1hc2ssIHN0YXR1cyAmIH5tYXNrKTsKKworCQlzdGF0dXMgJj0gbWFzazsKKwkJaWYgKCFzdGF0dXMpCisJCQlicmVhazsKKworCQkvKiBIYW5kbGUgU1cgaW50ZXJydXB0IGNvbmRpdGlvbiAqLworCQlpZiAoc3RhdHVzICYgSU5UX1NUU19TV19JTlRfKSB7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1NXX0lOVF8pOworCQkJbWFzayAmPSB+SU5UX0VOX1NXX0lOVF9FTl87CisJCX0KKwkJLyogSGFuZGxlIHZhcmlvdXMgZXJyb3IgY29uZGl0aW9ucyAqLworCQlpZiAoc3RhdHVzICYgSU5UX1NUU19SWEVfKSB7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1JYRV8pOworCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQl9CisJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1JYREZIX0lOVF8pIHsKKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfUlhERkhfSU5UXyk7CisJCQlscC0+c3RhdHMucnhfZHJvcHBlZCs9U01DX0dFVF9SWF9EUk9QKCk7CisJCSB9CisJCS8qIFVuZG9jdW1lbnRlZCBpbnRlcnJ1cHQtd2hhdCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gaGVyZT8gKi8KKwkJaWYgKHN0YXR1cyAmIElOVF9TVFNfUlhERl9JTlRfKSB7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1JYREZfSU5UXyk7CisJCX0KKworCQkvKiBSeCBEYXRhIEZJRk8gZXhjZWVkcyBzZXQgbGV2ZWwgKi8KKwkJaWYgKHN0YXR1cyAmIElOVF9TVFNfUkRGTF8pIHsKKwkJCWlmIChJU19SRVZfQShscC0+cmV2aXNpb24pKSB7CisJCQkJcnhfb3ZlcnJ1bj0xOworCQkJCVNNQ19HRVRfTUFDX0NSKGNyKTsKKwkJCQljciAmPSB+TUFDX0NSX1JYRU5fOworCQkJCVNNQ19TRVRfTUFDX0NSKGNyKTsKKwkJCQlEQkcoU01DX0RFQlVHX1JYLCAiJXM6IFJYIG92ZXJydW5cbiIsIGRldi0+bmFtZSk7CisJCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQkJfQorCQkJU01DX0FDS19JTlQoSU5UX1NUU19SREZMXyk7CisJCX0KKwkJaWYgKHN0YXR1cyAmIElOVF9TVFNfUkRGT18pIHsKKwkJCWlmICghSVNfUkVWX0EobHAtPnJldmlzaW9uKSkgeworCQkJCVNNQ19HRVRfTUFDX0NSKGNyKTsKKwkJCQljciAmPSB+TUFDX0NSX1JYRU5fOworCQkJCVNNQ19TRVRfTUFDX0NSKGNyKTsKKwkJCQlyeF9vdmVycnVuPTE7CisJCQkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBSWCBvdmVycnVuXG4iLCBkZXYtPm5hbWUpOworCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCX0KKwkJCVNNQ19BQ0tfSU5UKElOVF9TVFNfUkRGT18pOworCQl9CisJCS8qIEhhbmRsZSByZWNlaXZlIGNvbmRpdGlvbiAqLworCQlpZiAoKHN0YXR1cyAmIElOVF9TVFNfUlNGTF8pIHx8IHJ4X292ZXJydW4pIHsKKwkJCXVuc2lnbmVkIGludCBmaWZvOworCQkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBSWCBpcnFcbiIsIGRldi0+bmFtZSk7CisJCQlmaWZvID0gU01DX0dFVF9SWF9GSUZPX0lORigpOworCQkJcGt0cyA9IChmaWZvICYgUlhfRklGT19JTkZfUlhTVVNFRF8pID4+IDE2OworCQkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBSeCBGSUZPIHBrdHMgJWQsIGJ5dGVzICVkXG4iLAorCQkJCWRldi0+bmFtZSwgcGt0cywgZmlmbyAmIDB4RkZGRiApOworCQkJaWYgKHBrdHMgIT0gMCkgeworI2lmZGVmIFNNQ19VU0VfRE1BCisJCQkJdW5zaWduZWQgaW50IGZpZm87CisJCQkJaWYgKGxwLT5yeGRtYV9hY3RpdmUpeworCQkJCQlEQkcoU01DX0RFQlVHX1JYIHwgU01DX0RFQlVHX0RNQSwKKwkJCQkJCSIlczogUlggRE1BIGFjdGl2ZVxuIiwgZGV2LT5uYW1lKTsKKwkJCQkJLyogVGhlIERNQSBpcyBhbHJlYWR5IHJ1bm5pbmcgc28gdXAgdGhlIElSUSB0aHJlc2hvbGQgKi8KKwkJCQkJZmlmbyA9IFNNQ19HRVRfRklGT19JTlQoKSAmIH4weEZGOworCQkJCQlmaWZvIHw9IHBrdHMgJiAweEZGOworCQkJCQlEQkcoU01DX0RFQlVHX1JYLAorCQkJCQkJIiVzOiBTZXR0aW5nIFJYIHN0YXQgRklGTyB0aHJlc2hvbGQgdG8gJWRcbiIsCisJCQkJCQlkZXYtPm5hbWUsIGZpZm8gJiAweGZmKTsKKwkJCQkJU01DX1NFVF9GSUZPX0lOVChmaWZvKTsKKwkJCQl9IGVsc2UKKyNlbmRpZgorCQkJCXNtYzkxMXhfcmN2KGRldik7CisJCQl9CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1JTRkxfKTsKKwkJfQorCQkvKiBIYW5kbGUgdHJhbnNtaXQgRklGTyBhdmFpbGFibGUgKi8KKwkJaWYgKHN0YXR1cyAmIElOVF9TVFNfVERGQV8pIHsKKwkJCURCRyhTTUNfREVCVUdfVFgsICIlczogVFggZGF0YSBGSUZPIHNwYWNlIGF2YWlsYWJsZSBpcnFcbiIsIGRldi0+bmFtZSk7CisJCQlTTUNfU0VUX0ZJRk9fVERBKDB4RkYpOworCQkJbHAtPnR4X3Rocm90dGxlID0gMDsKKyNpZmRlZiBTTUNfVVNFX0RNQQorCQkJaWYgKCFscC0+dHhkbWFfYWN0aXZlKQorI2VuZGlmCisJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkJU01DX0FDS19JTlQoSU5UX1NUU19UREZBXyk7CisJCX0KKwkJLyogSGFuZGxlIHRyYW5zbWl0IGRvbmUgY29uZGl0aW9uICovCisjaWYgMQorCQlpZiAoc3RhdHVzICYgKElOVF9TVFNfVFNGTF8gfCBJTlRfU1RTX0dQVF9JTlRfKSkgeworCQkJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19NSVNDLAorCQkJCSIlczogVHggc3RhdCBGSUZPIGxpbWl0ICglZCkgL0dQVCBpcnFcbiIsCisJCQkJZGV2LT5uYW1lLCAoU01DX0dFVF9GSUZPX0lOVCgpICYgMHgwMGZmMDAwMCkgPj4gMTYpOworCQkJc21jOTExeF90eChkZXYpOworCQkJU01DX1NFVF9HUFRfQ0ZHKEdQVF9DRkdfVElNRVJfRU5fIHwgMTAwMDApOworCQkJU01DX0FDS19JTlQoSU5UX1NUU19UU0ZMXyk7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1RTRkxfIHwgSU5UX1NUU19HUFRfSU5UXyk7CisJCX0KKyNlbHNlCisJCWlmIChzdGF0dXMgJiBJTlRfU1RTX1RTRkxfKSB7CisJCQlEQkcoU01DX0RFQlVHX1RYLCAiJXM6IFRYIHN0YXR1cyBGSUZPIGxpbWl0ICglZCkgaXJxIFxuIiwgZGV2LT5uYW1lLCApOworCQkJc21jOTExeF90eChkZXYpOworCQkJU01DX0FDS19JTlQoSU5UX1NUU19UU0ZMXyk7CisJCX0KKworCQlpZiAoc3RhdHVzICYgSU5UX1NUU19HUFRfSU5UXykgeworCQkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBJUlFfQ0ZHIDB4JTA4eCBGSUZPX0lOVCAweCUwOHggUlhfQ0ZHIDB4JTA4eFxuIiwKKwkJCQlkZXYtPm5hbWUsCisJCQkJU01DX0dFVF9JUlFfQ0ZHKCksCisJCQkJU01DX0dFVF9GSUZPX0lOVCgpLAorCQkJCVNNQ19HRVRfUlhfQ0ZHKCkpOworCQkJREJHKFNNQ19ERUJVR19SWCwgIiVzOiBSeCBTdGF0IEZJRk8gVXNlZCAweCUwMnggIgorCQkJCSJEYXRhIEZJRk8gVXNlZCAweCUwNHggU3RhdCBGSUZPIDB4JTA4eFxuIiwKKwkJCQlkZXYtPm5hbWUsCisJCQkJKFNNQ19HRVRfUlhfRklGT19JTkYoKSAmIDB4MDBmZjAwMDApID4+IDE2LAorCQkJCVNNQ19HRVRfUlhfRklGT19JTkYoKSAmIDB4ZmZmZiwKKwkJCQlTTUNfR0VUX1JYX1NUU19GSUZPX1BFRUsoKSk7CisJCQlTTUNfU0VUX0dQVF9DRkcoR1BUX0NGR19USU1FUl9FTl8gfCAxMDAwMCk7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX0dQVF9JTlRfKTsKKwkJfQorI2VuZGlmCisKKwkJLyogSGFuZGxlIFBIWSBpbnRlcnVwdCBjb25kaXRpb24gKi8KKwkJaWYgKHN0YXR1cyAmIElOVF9TVFNfUEhZX0lOVF8pIHsKKwkJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBQSFkgaXJxXG4iLCBkZXYtPm5hbWUpOworCQkJc21jOTExeF9waHlfaW50ZXJydXB0KGRldik7CisJCQlTTUNfQUNLX0lOVChJTlRfU1RTX1BIWV9JTlRfKTsKKwkJfQorCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwkvKiByZXN0b3JlIG1hc2sgc3RhdGUgKi8KKwlTTUNfU0VUX0lOVF9FTihtYXNrKTsKKworCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBJbnRlcnJ1cHQgZG9uZSAoJWQgbG9vcHMpXG4iLAorCQlkZXYtPm5hbWUsIDgtdGltZW91dCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCisJREJHKDMsICIlczogSW50ZXJydXB0IGRvbmUgKCVkIGxvb3BzKVxuIiwgZGV2LT5uYW1lLCA4LXRpbWVvdXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgU01DX1VTRV9ETUEKK3N0YXRpYyB2b2lkCitzbWM5MTF4X3R4X2RtYV9pcnEoaW50IGRtYSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbHAtPmN1cnJlbnRfdHhfc2tiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisKKwlEQkcoU01DX0RFQlVHX1RYIHwgU01DX0RFQlVHX0RNQSwgIiVzOiBUWCBETUEgaXJxIGhhbmRsZXJcbiIsIGRldi0+bmFtZSk7CisJLyogQ2xlYXIgdGhlIERNQSBpbnRlcnJ1cHQgc291cmNlcyAqLworCVNNQ19ETUFfQUNLX0lSUShkZXYsIGRtYSk7CisJQlVHX09OKHNrYiA9PSBOVUxMKTsKKwlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHR4X2RtYWJ1ZiwgdHhfZG1hbGVuLCBETUFfVE9fREVWSUNFKTsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCWxwLT5jdXJyZW50X3R4X3NrYiA9IE5VTEw7CisJaWYgKGxwLT5wZW5kaW5nX3R4X3NrYiAhPSBOVUxMKQorCQlzbWM5MTF4X2hhcmR3YXJlX3NlbmRfcGt0KGRldik7CisJZWxzZSB7CisJCURCRyhTTUNfREVCVUdfVFggfCBTTUNfREVCVUdfRE1BLAorCQkJIiVzOiBObyBwZW5kaW5nIFR4IHBhY2tldHMuIERNQSBkaXNhYmxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCWxwLT50eGRtYV9hY3RpdmUgPSAwOworCQlpZiAoIWxwLT50eF90aHJvdHRsZSkgeworCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJfQorCisJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19ETUEsCisJCSIlczogVFggRE1BIGlycSBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7Cit9CitzdGF0aWMgdm9pZAorc21jOTExeF9yeF9kbWFfaXJxKGludCBkbWEsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbHAtPmN1cnJlbnRfcnhfc2tiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHBrdHM7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICIlczogLS0+ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisJREJHKFNNQ19ERUJVR19SWCB8IFNNQ19ERUJVR19ETUEsICIlczogUlggRE1BIGlycSBoYW5kbGVyXG4iLCBkZXYtPm5hbWUpOworCS8qIENsZWFyIHRoZSBETUEgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwlTTUNfRE1BX0FDS19JUlEoZGV2LCBkbWEpOworCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgcnhfZG1hYnVmLCByeF9kbWFsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJQlVHX09OKHNrYiA9PSBOVUxMKTsKKwlscC0+Y3VycmVudF9yeF9za2IgPSBOVUxMOworCVBSSU5UX1BLVChza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCXNrYi0+ZGV2ID0gZGV2OworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJbmV0aWZfcngoc2tiKTsKKwlscC0+c3RhdHMucnhfcGFja2V0cysrOworCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCXBrdHMgPSAoU01DX0dFVF9SWF9GSUZPX0lORigpICYgUlhfRklGT19JTkZfUlhTVVNFRF8pID4+IDE2OworCWlmIChwa3RzICE9IDApIHsKKwkJc21jOTExeF9yY3YoZGV2KTsKKwl9ZWxzZSB7CisJCWxwLT5yeGRtYV9hY3RpdmUgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCURCRyhTTUNfREVCVUdfUlggfCBTTUNfREVCVUdfRE1BLAorCQkiJXM6IFJYIERNQSBpcnEgY29tcGxldGVkLiBETUEgUlggRklGTyBQS1RTICVkXG4iLAorCQlkZXYtPm5hbWUsIHBrdHMpOworfQorI2VuZGlmCSAvKiBTTUNfVVNFX0RNQSAqLworCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKy8qCisgKiBQb2xsaW5nIHJlY2VpdmUgLSB1c2VkIGJ5IG5ldGNvbnNvbGUgYW5kIG90aGVyIGRpYWdub3N0aWMgdG9vbHMKKyAqIHRvIGFsbG93IG5ldHdvcmsgaS9vIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQgc21jOTExeF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJc21jOTExeF9pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldiwgTlVMTCk7CisJZW5hYmxlX2lycShkZXYtPmlycSk7Cit9CisjZW5kaWYKKworLyogT3VyIHdhdGNoZG9nIHRpbWVkIG91dC4gQ2FsbGVkIGJ5IHRoZSBuZXR3b3JraW5nIGxheWVyICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IHN0YXR1cywgbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJc3RhdHVzID0gU01DX0dFVF9JTlQoKTsKKwltYXNrID0gU01DX0dFVF9JTlRfRU4oKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBJTlQgMHglMDJ4IE1BU0sgMHglMDJ4IFxuIiwKKwkJZGV2LT5uYW1lLCBzdGF0dXMsIG1hc2spOworCisJLyogRHVtcCB0aGUgY3VycmVudCBUWCBGSUZPIGNvbnRlbnRzIGFuZCByZXN0YXJ0ICovCisJbWFzayA9IFNNQ19HRVRfVFhfQ0ZHKCk7CisJU01DX1NFVF9UWF9DRkcobWFzayB8IFRYX0NGR19UWFNfRFVNUF8gfCBUWF9DRkdfVFhEX0RVTVBfKTsKKwkvKgorCSAqIFJlY29uZmlndXJpbmcgdGhlIFBIWSBkb2Vzbid0IHNlZW0gbGlrZSBhIGJhZCBpZGVhIGhlcmUsIGJ1dAorCSAqIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZSgpIGNhbGxzIG1zbGVlcCgpIHdoaWNoIGNhbGxzIHNjaGVkdWxlX3RpbWVvdXQoKQorCSAqIHdoaWNoIGNhbGxzIHNjaGVkdWxlKCkuCSBIZW5jZSB3ZSB1c2UgYSB3b3JrIHF1ZXVlLgorCSAqLworCWlmIChscC0+cGh5X3R5cGUgIT0gMCkgeworCQlpZiAoc2NoZWR1bGVfd29yaygmbHAtPnBoeV9jb25maWd1cmUpKSB7CisJCQlscC0+d29ya19wZW5kaW5nID0gMTsKKwkJfQorCX0KKworCS8qIFdlIGNhbiBhY2NlcHQgVFggcGFja2V0cyBhZ2FpbiAqLworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSB3aWxsLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBwYXNzZWQgdG8gaXQsCisgKiBlaXRoZXIgbWFrZSBpdCBhY2NlcHQgbXVsdGljYXN0IHBhY2tldHMsIGdvIGludG8KKyAqIHByb21pc2N1b3VzIG1vZGUgKGZvciBUQ1BEVU1QIGFuZCBjb3VzaW5zKSBvciBhY2NlcHQKKyAqIGEgc2VsZWN0IHNldCBvZiBtdWx0aWNhc3QgcGFja2V0cworICovCitzdGF0aWMgdm9pZCBzbWM5MTF4X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgbXVsdGljYXN0X3RhYmxlWzJdOworCXVuc2lnbmVkIGludCBtY3IsIHVwZGF0ZV9tdWx0aWNhc3QgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJLyogdGFibGUgZm9yIGZsaXBwaW5nIHRoZSBvcmRlciBvZiA1IGJpdHMgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbnZlcnQ1W10gPQorCQl7MHgwMCwgMHgxMCwgMHgwOCwgMHgxOCwgMHgwNCwgMHgxNCwgMHgwQywgMHgxQywKKwkJIDB4MDIsIDB4MTIsIDB4MEEsIDB4MUEsIDB4MDYsIDB4MTYsIDB4MEUsIDB4MUUsCisJCSAweDAxLCAweDExLCAweDA5LCAweDE5LCAweDA1LCAweDE1LCAweDBELCAweDFELAorCQkgMHgwMywgMHgxMywgMHgwQiwgMHgxQiwgMHgwNywgMHgxNywgMHgwRiwgMHgxRn07CisKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCVNNQ19HRVRfTUFDX0NSKG1jcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKworCQlEQkcoU01DX0RFQlVHX01JU0MsICIlczogUkNSX1BSTVNcbiIsIGRldi0+bmFtZSk7CisJCW1jciB8PSBNQUNfQ1JfUFJNU187CisJfQorCS8qCisJICogSGVyZSwgSSBhbSBzZXR0aW5nIHRoaXMgdG8gYWNjZXB0IGFsbCBtdWx0aWNhc3QgcGFja2V0cy4KKwkgKiBJIGRvbid0IG5lZWQgdG8gemVybyB0aGUgbXVsdGljYXN0IHRhYmxlLCBiZWNhdXNlIHRoZSBmbGFnIGlzCisJICogY2hlY2tlZCBiZWZvcmUgdGhlIHRhYmxlIGlzCisJICovCisJZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50ID4gMTYpIHsKKwkJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IFJDUl9BTE1VTFxuIiwgZGV2LT5uYW1lKTsKKwkJbWNyIHw9IE1BQ19DUl9NQ1BBU187CisJfQorCisJLyoKKwkgKiBUaGlzIHNldHMgdGhlIGludGVybmFsIGhhcmR3YXJlIHRhYmxlIHRvIGZpbHRlciBvdXQgdW53YW50ZWQKKwkgKiBtdWx0aWNhc3QgcGFja2V0cyBiZWZvcmUgdGhleSB0YWtlIHVwIG1lbW9yeS4KKwkgKgorCSAqIFRoZSBTTUMgY2hpcCB1c2VzIGEgaGFzaCB0YWJsZSB3aGVyZSB0aGUgaGlnaCA2IGJpdHMgb2YgdGhlIENSQyBvZgorCSAqIGFkZHJlc3MgYXJlIHRoZSBvZmZzZXQgaW50byB0aGUgdGFibGUuCUlmIHRoYXQgYml0IGlzIDEsIHRoZW4gdGhlCisJICogbXVsdGljYXN0IHBhY2tldCBpcyBhY2NlcHRlZC4gIE90aGVyd2lzZSwgaXQncyBkcm9wcGVkIHNpbGVudGx5LgorCSAqCisJICogVG8gdXNlIHRoZSA2IGJpdHMgYXMgYW4gb2Zmc2V0IGludG8gdGhlIHRhYmxlLCB0aGUgaGlnaCAxIGJpdCBpcworCSAqIHRoZSBudW1iZXIgb2YgdGhlIDMyIGJpdCByZWdpc3Rlciwgd2hpbGUgdGhlIGxvdyA1IGJpdHMgYXJlIHRoZSBiaXQKKwkgKiB3aXRoaW4gdGhhdCByZWdpc3Rlci4KKwkgKi8KKwllbHNlIGlmIChkZXYtPm1jX2NvdW50KSAgeworCQlpbnQgaTsKKwkJc3RydWN0IGRldl9tY19saXN0ICpjdXJfYWRkcjsKKworCQkvKiBTZXQgdGhlIEhhc2ggcGVyZmVjIG1vZGUgKi8KKwkJbWNyIHw9IE1BQ19DUl9IUEZJTFRfOworCisJCS8qIHN0YXJ0IHdpdGggYSB0YWJsZSBvZiBhbGwgemVyb3M6IHJlamVjdCBhbGwgKi8KKwkJbWVtc2V0KG11bHRpY2FzdF90YWJsZSwgMCwgc2l6ZW9mKG11bHRpY2FzdF90YWJsZSkpOworCisJCWN1cl9hZGRyID0gZGV2LT5tY19saXN0OworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBjdXJfYWRkciA9IGN1cl9hZGRyLT5uZXh0KSB7CisJCQlpbnQgcG9zaXRpb247CisKKwkJCS8qIGRvIHdlIGhhdmUgYSBwb2ludGVyIGhlcmU/ICovCisJCQlpZiAoIWN1cl9hZGRyKQorCQkJCWJyZWFrOworCQkJLyogbWFrZSBzdXJlIHRoaXMgaXMgYSBtdWx0aWNhc3QgYWRkcmVzcyAtCisJCQkJc2hvdWxkbid0IHRoaXMgYmUgYSBnaXZlbiBpZiB3ZSBoYXZlIGl0IGhlcmUgPyAqLworCQkJaWYgKCEoKmN1cl9hZGRyLT5kbWlfYWRkciAmIDEpKQorCQkJCSBjb250aW51ZTsKKworCQkJLyogb25seSB1c2UgdGhlIGxvdyBvcmRlciBiaXRzICovCisJCQlwb3NpdGlvbiA9IGNyYzMyX2xlKH4wLCBjdXJfYWRkci0+ZG1pX2FkZHIsIDYpICYgMHgzZjsKKworCQkJLyogZG8gc29tZSBtZXNzeSBzd2FwcGluZyB0byBwdXQgdGhlIGJpdCBpbiB0aGUgcmlnaHQgc3BvdCAqLworCQkJbXVsdGljYXN0X3RhYmxlW2ludmVydDVbcG9zaXRpb24mMHgxRl0mMHgxXSB8PQorCQkJCSgxPDxpbnZlcnQ1Wyhwb3NpdGlvbj4+MSkmMHgxRl0pOworCQl9CisKKwkJLyogYmUgc3VyZSBJIGdldCByaWQgb2YgZmxhZ3MgSSBtaWdodCBoYXZlIHNldCAqLworCQltY3IgJj0gfihNQUNfQ1JfUFJNU18gfCBNQUNfQ1JfTUNQQVNfKTsKKworCQkvKiBub3csIHRoZSB0YWJsZSBjYW4gYmUgbG9hZGVkIGludG8gdGhlIGNoaXBzZXQgKi8KKwkJdXBkYXRlX211bHRpY2FzdCA9IDE7CisJfSBlbHNlCSB7CisJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiB+KE1BQ19DUl9QUk1TX3xNQUNfQ1JfTUNQQVNfKVxuIiwKKwkJCWRldi0+bmFtZSk7CisJCW1jciAmPSB+KE1BQ19DUl9QUk1TXyB8IE1BQ19DUl9NQ1BBU18pOworCisJCS8qCisJCSAqIHNpbmNlIEknbSBkaXNhYmxpbmcgYWxsIG11bHRpY2FzdCBlbnRpcmVseSwgSSBuZWVkIHRvCisJCSAqIGNsZWFyIHRoZSBtdWx0aWNhc3QgbGlzdAorCQkgKi8KKwkJbWVtc2V0KG11bHRpY2FzdF90YWJsZSwgMCwgc2l6ZW9mKG11bHRpY2FzdF90YWJsZSkpOworCQl1cGRhdGVfbXVsdGljYXN0ID0gMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlTTUNfU0VUX01BQ19DUihtY3IpOworCWlmICh1cGRhdGVfbXVsdGljYXN0KSB7CisJCURCRyhTTUNfREVCVUdfTUlTQywKKwkJCSIlczogdXBkYXRlIG1jYXN0IGhhc2ggdGFibGUgMHglMDh4IDB4JTA4eFxuIiwKKwkJCWRldi0+bmFtZSwgbXVsdGljYXN0X3RhYmxlWzBdLCBtdWx0aWNhc3RfdGFibGVbMV0pOworCQlTTUNfU0VUX0hBU0hMKG11bHRpY2FzdF90YWJsZVswXSk7CisJCVNNQ19TRVRfSEFTSEgobXVsdGljYXN0X3RhYmxlWzFdKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKK30KKworCisvKgorICogT3BlbiBhbmQgSW5pdGlhbGl6ZSB0aGUgYm9hcmQKKyAqCisgKiBTZXQgdXAgZXZlcnl0aGluZywgcmVzZXQgdGhlIGNhcmQsIGV0Yy4uCisgKi8KK3N0YXRpYyBpbnQKK3NtYzkxMXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgYWRkcmVzcyBpcyB2YWxpZC4gIElmIGl0cyBub3QsIHJlZnVzZQorCSAqIHRvIGJyaW5nIHRoZSBkZXZpY2UgdXAuCSBUaGUgdXNlciBtdXN0IHNwZWNpZnkgYW4KKwkgKiBhZGRyZXNzIHVzaW5nIGlmY29uZmlnIGV0aDAgaHcgZXRoZXIgeHg6eHg6eHg6eHg6eHg6eHgKKwkgKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJUFJJTlRLKCIlczogbm8gdmFsaWQgZXRoZXJuZXQgaHcgYWRkclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcmVzZXQgdGhlIGhhcmR3YXJlICovCisJc21jOTExeF9yZXNldChkZXYpOworCisJLyogQ29uZmlndXJlIHRoZSBQSFksIGluaXRpYWxpemUgdGhlIGxpbmsgc3RhdGUgKi8KKwlzbWM5MTF4X3BoeV9jb25maWd1cmUoZGV2KTsKKworCS8qIFR1cm4gb24gVHggKyBSeCAqLworCXNtYzkxMXhfZW5hYmxlKGRldik7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzbWM5MTF4X2Nsb3NlCisgKgorICogdGhpcyBtYWtlcyB0aGUgYm9hcmQgY2xlYW4gdXAgZXZlcnl0aGluZyB0aGF0IGl0IGNhbgorICogYW5kIG5vdCB0YWxrIHRvIHRoZSBvdXRzaWRlIHdvcmxkLgkgQ2F1c2VkIGJ5CisgKiBhbiAnaWZjb25maWcgZXRoWCBkb3duJworICovCitzdGF0aWMgaW50IHNtYzkxMXhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwkvKiBjbGVhciBldmVyeXRoaW5nICovCisJc21jOTExeF9zaHV0ZG93bihkZXYpOworCisJaWYgKGxwLT5waHlfdHlwZSAhPSAwKSB7CisJCS8qIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gY2FsbHMgdG8KKwkJICogc21jOTExeF9waHlfY29uZmlndXJlIGFyZSBwZW5kaW5nLgorCisJCSAqIGZsdXNoX3NjaGVkdWxlZF93b3JrKCkgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHdlCisJCSAqIGFyZSBydW5uaW5nIHdpdGggdGhlIG5ldGxpbmsgc2VtYXBob3JlIGhlbGQgKGZyb20KKwkJICogZGV2aW5ldF9pb2N0bCgpKSBhbmQgdGhlIHBlbmRpbmcgd29yayBxdWV1ZQorCQkgKiBjb250YWlucyBsaW5rd2F0Y2hfZXZlbnQoKSAoc2NoZWR1bGVkIGJ5CisJCSAqIG5ldGlmX2NhcnJpZXJfb2ZmKCkgYWJvdmUpLiBsaW5rd2F0Y2hfZXZlbnQoKSBhbHNvCisJCSAqIHdhbnRzIHRoZSBuZXRsaW5rIHNlbWFwaG9yZS4KKwkJICovCisJCXdoaWxlIChscC0+d29ya19wZW5kaW5nKQorCQkJc2NoZWR1bGUoKTsKKwkJc21jOTExeF9waHlfcG93ZXJkb3duKGRldiwgbHAtPm1paS5waHlfaWQpOworCX0KKworCWlmIChscC0+cGVuZGluZ190eF9za2IpIHsKKwkJZGV2X2tmcmVlX3NrYihscC0+cGVuZGluZ190eF9za2IpOworCQlscC0+cGVuZGluZ190eF9za2IgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yIGNsb3NlZC4KKyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbWM5MTF4X3F1ZXJ5X3N0YXRpc3RpY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCisJcmV0dXJuICZscC0+c3RhdHM7Cit9CisKKy8qCisgKiBFdGh0b29sIHN1cHBvcnQKKyAqLworc3RhdGljIGludAorc21jOTExeF9ldGh0b29sX2dldHNldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlpbnQgcmV0LCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKwljbWQtPm1heHR4cGt0ID0gMTsKKwljbWQtPm1heHJ4cGt0ID0gMTsKKworCWlmIChscC0+cGh5X3R5cGUgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gbWlpX2V0aHRvb2xfZ3NldCgmbHAtPm1paSwgY21kKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQljbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCVNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCVNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BVUk7CisKKwkJaWYgKGxwLT5jdGxfcnNwZWVkID09IDEwKQorCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQllbHNlIGlmIChscC0+Y3RsX3JzcGVlZCA9PSAxMDApCisJCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOworCisJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJaWYgKGxwLT5taWkucGh5X2lkPT0xKQorCQkJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJCWVsc2UKKwkJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCQljbWQtPnBvcnQgPSAwOworCQlTTUNfR0VUX1BIWV9TUEVDSUFMKGxwLT5taWkucGh5X2lkLCBzdGF0dXMpOworCQljbWQtPmR1cGxleCA9CisJCQkoc3RhdHVzICYgKFBIWV9TUEVDSUFMX1NQRF8xMEZVTExfIHwgUEhZX1NQRUNJQUxfU1BEXzEwMEZVTExfKSkgPworCQkJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc21jOTExeF9ldGh0b29sX3NldHNldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGxwLT5waHlfdHlwZSAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBtaWlfZXRodG9vbF9zc2V0KCZscC0+bWlpLCBjbWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCWlmIChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFIHx8CisJCQljbWQtPnNwZWVkICE9IFNQRUVEXzEwIHx8CisJCQkoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHx8CisJCQkoY21kLT5wb3J0ICE9IFBPUlRfVFAgJiYgY21kLT5wb3J0ICE9IFBPUlRfQVVJKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWxwLT5jdGxfcmZkdXBseCA9IGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMOworCisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3NtYzkxMXhfZXRodG9vbF9nZXRkcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RybmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCB2ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldi0+Y2xhc3NfZGV2LmRldi0+YnVzX2lkLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfbndheXJlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGxwLT5waHlfdHlwZSAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBtaWlfbndheV9yZXN0YXJ0KCZscC0+bWlpKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIHNtYzkxMXhfZXRodG9vbF9nZXRtc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIGxwLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBzbWM5MTF4X2V0aHRvb2xfc2V0bXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJbHAtPm1zZ19lbmFibGUgPSBsZXZlbDsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfZ2V0cmVnc2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8qIFN5c3RlbSByZWdzICsgTUFDIHJlZ3MgKyBQSFkgcmVncyAqLworCXJldHVybiAoKChFMlBfQ01EIC0gSURfUkVWKS80ICsgMSkgKworCQkJKFdVQ1NSIC0gTUFDX0NSKSsxICsgMzIpICogc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB2b2lkIHNtYzkxMXhfZXRodG9vbF9nZXRyZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkJCQkJIHN0cnVjdCBldGh0b29sX3JlZ3MqIHJlZ3MsIHZvaWQgKmJ1ZikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnLGksaj0wOworCXUzMiAqZGF0YSA9ICh1MzIqKWJ1ZjsKKworCXJlZ3MtPnZlcnNpb24gPSBscC0+dmVyc2lvbjsKKwlmb3IoaT1JRF9SRVY7aTw9RTJQX0NNRDtpKz00KSB7CisJCWRhdGFbaisrXSA9IFNNQ19pbmwoaW9hZGRyLGkpOworCX0KKwlmb3IoaT1NQUNfQ1I7aTw9V1VDU1I7aSsrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlTTUNfR0VUX01BQ19DU1IoaSwgcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZGF0YVtqKytdID0gcmVnOworCX0KKwlmb3IoaT0wO2k8PTMxO2krKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJU01DX0dFVF9NSUkoaSwgbHAtPm1paS5waHlfaWQsIHJlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCWRhdGFbaisrXSA9IHJlZyAmIDB4RkZGRjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc21jOTExeF9ldGh0b29sX3dhaXRfZWVwcm9tX3JlYWR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKwlpbnQgZTJwX2NtZDsKKworCWUycF9jbWQgPSBTTUNfR0VUX0UyUF9DTUQoKTsKKwlmb3IodGltZW91dD0xMDsoZTJwX2NtZCAmIEUyUF9DTURfRVBDX0JVU1lfKSAmJiB0aW1lb3V0OyB0aW1lb3V0LS0pIHsKKwkJaWYgKGUycF9jbWQgJiBFMlBfQ01EX0VQQ19USU1FT1VUXykgeworCQkJUFJJTlRLKCIlczogJXMgdGltZW91dCB3YWl0aW5nIGZvciBFRVBST00gdG8gcmVzcG9uZFxuIiwKKwkJCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQltZGVsYXkoMSk7CisJCWUycF9jbWQgPSBTTUNfR0VUX0UyUF9DTUQoKTsKKwl9CisJaWYgKHRpbWVvdXQgPT0gMCkgeworCQlQUklOVEsoIiVzOiAlcyB0aW1lb3V0IHdhaXRpbmcgZm9yIEVFUFJPTSBDTUQgbm90IGJ1c3lcbiIsCisJCQlkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc21jOTExeF9ldGh0b29sX3dyaXRlX2VlcHJvbV9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCQkJCQkJCQlpbnQgY21kLCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IHNtYzkxMXhfZXRodG9vbF93YWl0X2VlcHJvbV9yZWFkeShkZXYpKSE9MCkKKwkJcmV0dXJuIHJldDsKKwlTTUNfU0VUX0UyUF9DTUQoRTJQX0NNRF9FUENfQlVTWV8gfAorCQkoKGNtZCkgJiAoMHg3PDwyOCkpIHwKKwkJKChhZGRyKSAmIDB4RkYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc21jOTExeF9ldGh0b29sX3JlYWRfZWVwcm9tX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCQkJCQkJCQl1OCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IHNtYzkxMXhfZXRodG9vbF93YWl0X2VlcHJvbV9yZWFkeShkZXYpKSE9MCkKKwkJcmV0dXJuIHJldDsKKwkqZGF0YSA9IFNNQ19HRVRfRTJQX0RBVEEoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc21jOTExeF9ldGh0b29sX3dyaXRlX2VlcHJvbV9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkJCQkJCQkJIHU4IGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlpbnQgcmV0OworCisJaWYgKChyZXQgPSBzbWM5MTF4X2V0aHRvb2xfd2FpdF9lZXByb21fcmVhZHkoZGV2KSkhPTApCisJCXJldHVybiByZXQ7CisJU01DX1NFVF9FMlBfREFUQShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2V0aHRvb2xfZ2V0ZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkJCQkgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwl1OCBlZWJ1ZltTTUM5MTFYX0VFUFJPTV9MRU5dOworCWludCBpLCByZXQ7CisKKwlmb3IoaT0wO2k8U01DOTExWF9FRVBST01fTEVOO2krKykgeworCQlpZiAoKHJldD1zbWM5MTF4X2V0aHRvb2xfd3JpdGVfZWVwcm9tX2NtZChkZXYsIEUyUF9DTURfRVBDX0NNRF9SRUFEXywgaSApKSE9MCkKKwkJCXJldHVybiByZXQ7CisJCWlmICgocmV0PXNtYzkxMXhfZXRodG9vbF9yZWFkX2VlcHJvbV9ieXRlKGRldiwgJmVlYnVmW2ldKSkhPTApCisJCQlyZXR1cm4gcmV0OworCQl9CisJbWVtY3B5KGRhdGEsIGVlYnVmK2VlcHJvbS0+b2Zmc2V0LCBlZXByb20tPmxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21jOTExeF9ldGh0b29sX3NldGVlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJCQkJICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQoreworCWludCBpLCByZXQ7CisKKwkvKiBFbmFibGUgZXJhc2UgKi8KKwlpZiAoKHJldD1zbWM5MTF4X2V0aHRvb2xfd3JpdGVfZWVwcm9tX2NtZChkZXYsIEUyUF9DTURfRVBDX0NNRF9FV0VOXywgMCApKSE9MCkKKwkJcmV0dXJuIHJldDsKKwlmb3IoaT1lZXByb20tPm9mZnNldDtpPChlZXByb20tPm9mZnNldCtlZXByb20tPmxlbik7aSsrKSB7CisJCS8qIGVyYXNlIGJ5dGUgKi8KKwkJaWYgKChyZXQ9c21jOTExeF9ldGh0b29sX3dyaXRlX2VlcHJvbV9jbWQoZGV2LCBFMlBfQ01EX0VQQ19DTURfRVJBU0VfLCBpICkpIT0wKQorCQkJcmV0dXJuIHJldDsKKwkJLyogd3JpdGUgYnl0ZSAqLworCQlpZiAoKHJldD1zbWM5MTF4X2V0aHRvb2xfd3JpdGVfZWVwcm9tX2J5dGUoZGV2LCAqZGF0YSkpIT0wKQorCQkJIHJldHVybiByZXQ7CisJCWlmICgocmV0PXNtYzkxMXhfZXRodG9vbF93cml0ZV9lZXByb21fY21kKGRldiwgRTJQX0NNRF9FUENfQ01EX1dSSVRFXywgaSApKSE9MCkKKwkJCXJldHVybiByZXQ7CisJCX0KKwkgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21jOTExeF9ldGh0b29sX2dldGVlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkgcmV0dXJuIFNNQzkxMVhfRUVQUk9NX0xFTjsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBzbWM5MTF4X2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MJID0gc21jOTExeF9ldGh0b29sX2dldHNldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJID0gc21jOTExeF9ldGh0b29sX3NldHNldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkgPSBzbWM5MTF4X2V0aHRvb2xfZ2V0ZHJ2aW5mbywKKwkuZ2V0X21zZ2xldmVsCSA9IHNtYzkxMXhfZXRodG9vbF9nZXRtc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCSA9IHNtYzkxMXhfZXRodG9vbF9zZXRtc2dsZXZlbCwKKwkubndheV9yZXNldCA9IHNtYzkxMXhfZXRodG9vbF9ud2F5cmVzZXQsCisJLmdldF9saW5rCSA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yZWdzX2xlbgkgPSBzbWM5MTF4X2V0aHRvb2xfZ2V0cmVnc2xlbiwKKwkuZ2V0X3JlZ3MJID0gc21jOTExeF9ldGh0b29sX2dldHJlZ3MsCisJLmdldF9lZXByb21fbGVuID0gc21jOTExeF9ldGh0b29sX2dldGVlcHJvbV9sZW4sCisJLmdldF9lZXByb20gPSBzbWM5MTF4X2V0aHRvb2xfZ2V0ZWVwcm9tLAorCS5zZXRfZWVwcm9tID0gc21jOTExeF9ldGh0b29sX3NldGVlcHJvbSwKK307CisKKy8qCisgKiBzbWM5MTF4X2ZpbmRpcnEKKyAqCisgKiBUaGlzIHJvdXRpbmUgaGFzIGEgc2ltcGxlIHB1cnBvc2UgLS0gbWFrZSB0aGUgU01DIGNoaXAgZ2VuZXJhdGUgYW4KKyAqIGludGVycnVwdCwgc28gYW4gYXV0by1kZXRlY3Qgcm91dGluZSBjYW4gZGV0ZWN0IGl0LCBhbmQgZmluZCB0aGUgSVJRLAorICovCitzdGF0aWMgaW50IF9faW5pdCBzbWM5MTF4X2ZpbmRpcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IHRpbWVvdXQgPSAyMDsKKwl1bnNpZ25lZCBsb25nIGNvb2tpZTsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIi0tPiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWNvb2tpZSA9IHByb2JlX2lycV9vbigpOworCisJLyoKKwkgKiBGb3JjZSBhIFNXIGludGVycnVwdAorCSAqLworCisJU01DX1NFVF9JTlRfRU4oSU5UX0VOX1NXX0lOVF9FTl8pOworCisJLyoKKwkgKiBXYWl0IHVudGlsIHBvc2l0aXZlIHRoYXQgdGhlIGludGVycnVwdCBoYXMgYmVlbiBnZW5lcmF0ZWQKKwkgKi8KKwlkbyB7CisJCWludCBpbnRfc3RhdHVzOworCQl1ZGVsYXkoMTApOworCQlpbnRfc3RhdHVzID0gU01DX0dFVF9JTlRfRU4oKTsKKwkJaWYgKGludF9zdGF0dXMgJiBJTlRfRU5fU1dfSU5UX0VOXykKKwkJCSBicmVhazsJCS8qIGdvdCB0aGUgaW50ZXJydXB0ICovCisJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCS8qCisJICogdGhlcmUgaXMgcmVhbGx5IG5vdGhpbmcgdGhhdCBJIGNhbiBkbyBoZXJlIGlmIHRpbWVvdXQgZmFpbHMsCisJICogYXMgYXV0b2lycV9yZXBvcnQgd2lsbCByZXR1cm4gYSAwIGFueXdheSwgd2hpY2ggaXMgd2hhdCBJCisJICogd2FudCBpbiB0aGlzIGNhc2UuCSBQbHVzLCB0aGUgY2xlYW4gdXAgaXMgbmVlZGVkIGluIGJvdGgKKwkgKiBjYXNlcy4KKwkgKi8KKworCS8qIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFnYWluICovCisJU01DX1NFVF9JTlRfRU4oMCk7CisKKwkvKiBhbmQgcmV0dXJuIHdoYXQgSSBmb3VuZCAqLworCXJldHVybiBwcm9iZV9pcnFfb2ZmKGNvb2tpZSk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogc21jOTExeF9wcm9iZSh1bnNpZ25lZCBsb25nIGlvYWRkcikKKyAqCisgKiBQdXJwb3NlOgorICoJIFRlc3RzIHRvIHNlZSBpZiBhIGdpdmVuIGlvYWRkciBwb2ludHMgdG8gYW4gU01DOTExeCBjaGlwLgorICoJIFJldHVybnMgYSAwIG9uIHN1Y2Nlc3MKKyAqCisgKiBBbGdvcml0aG06CisgKgkgKDEpIHNlZSBpZiB0aGUgZW5kaWFuIHdvcmQgaXMgT0sKKyAqCSAoMSkgc2VlIGlmIEkgcmVjb2duaXplIHRoZSBjaGlwIElEIGluIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RlcgorICoKKyAqIEhlcmUgSSBkbyB0eXBpY2FsIGluaXRpYWxpemF0aW9uIHRhc2tzLgorICoKKyAqIG8gIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSBpZiBuZWVkZWQKKyAqIG8gIHByaW50IG91dCBteSB2YW5pdHkgbWVzc2FnZSBpZiBub3QgZG9uZSBzbyBhbHJlYWR5CisgKiBvICBwcmludCBvdXQgd2hhdCB0eXBlIG9mIGhhcmR3YXJlIGlzIGRldGVjdGVkCisgKiBvICBwcmludCBvdXQgdGhlIGV0aGVybmV0IGFkZHJlc3MKKyAqIG8gIGZpbmQgdGhlIElSUQorICogbyAgc2V0IHVwIG15IHByaXZhdGUgZGF0YQorICogbyAgY29uZmlndXJlIHRoZSBkZXYgc3RydWN0dXJlIHdpdGggbXkgc3Vicm91dGluZXMKKyAqIG8gIGFjdHVhbGx5IEdSQUIgdGhlIGlycS4KKyAqIG8gIEdSQUIgdGhlIHJlZ2lvbgorICovCitzdGF0aWMgaW50IF9faW5pdCBzbWM5MTF4X3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGksIHJldHZhbDsKKwl1bnNpZ25lZCBpbnQgdmFsLCBjaGlwX2lkLCByZXZpc2lvbjsKKwljb25zdCBjaGFyICp2ZXJzaW9uX3N0cmluZzsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIiVzOiAtLT4gJXNcbiIsIGRldi0+bmFtZSwgX19GVU5DVElPTl9fKTsKKworCS8qIEZpcnN0LCBzZWUgaWYgdGhlIGVuZGlhbiB3b3JkIGlzIHJlY29nbml6ZWQgKi8KKwl2YWwgPSBTTUNfR0VUX0JZVEVfVEVTVCgpOworCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBlbmRpYW4gcHJvYmUgcmV0dXJuZWQgMHglMDR4XG4iLCBDQVJETkFNRSwgdmFsKTsKKwlpZiAodmFsICE9IDB4ODc2NTQzMjEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGNoaXAgZW5kaWFuIDB4MDgleFxuIix2YWwpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJLyoKKwkgKiBjaGVjayBpZiB0aGUgcmV2aXNpb24gcmVnaXN0ZXIgaXMgc29tZXRoaW5nIHRoYXQgSQorCSAqIHJlY29nbml6ZS4JVGhlc2UgbWlnaHQgbmVlZCB0byBiZSBhZGRlZCB0byBsYXRlciwKKwkgKiBhcyBmdXR1cmUgcmV2aXNpb25zIGNvdWxkIGJlIGFkZGVkLgorCSAqLworCWNoaXBfaWQgPSBTTUNfR0VUX1BOKCk7CisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IGlkIHByb2JlIHJldHVybmVkIDB4JTA0eFxuIiwgQ0FSRE5BTUUsIGNoaXBfaWQpOworCWZvcihpPTA7Y2hpcF9pZHNbaV0uaWQgIT0gMDsgaSsrKSB7CisJCWlmIChjaGlwX2lkc1tpXS5pZCA9PSBjaGlwX2lkKSBicmVhazsKKwl9CisJaWYgKCFjaGlwX2lkc1tpXS5pZCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVua25vd24gY2hpcCBJRCAlMDR4XG4iLCBjaGlwX2lkKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0OworCX0KKwl2ZXJzaW9uX3N0cmluZyA9IGNoaXBfaWRzW2ldLm5hbWU7CisKKwlyZXZpc2lvbiA9IFNNQ19HRVRfUkVWKCk7CisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IHJldmlzaW9uID0gMHglMDR4XG4iLCBDQVJETkFNRSwgcmV2aXNpb24pOworCisJLyogQXQgdGhpcyBwb2ludCBJJ2xsIGFzc3VtZSB0aGF0IHRoZSBjaGlwIGlzIGFuIFNNQzkxMXguICovCisJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IEZvdW5kIGEgJXNcbiIsIENBUkROQU1FLCBjaGlwX2lkc1tpXS5uYW1lKTsKKworCS8qIFZhbGlkYXRlIHRoZSBUWCBGSUZPIHNpemUgcmVxdWVzdGVkICovCisJaWYgKCh0eF9maWZvX2tiIDwgMikgfHwgKHR4X2ZpZm9fa2IgPiAxNCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIFRYIEZJRk8gc2l6ZSByZXF1ZXN0ZWQgJWRcbiIsIHR4X2ZpZm9fa2IpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJLyogZmlsbCBpbiBzb21lIG9mIHRoZSBmaWVsZHMgKi8KKwlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKKwlscC0+dmVyc2lvbiA9IGNoaXBfaWRzW2ldLmlkOworCWxwLT5yZXZpc2lvbiA9IHJldmlzaW9uOworCWxwLT50eF9maWZvX2tiID0gdHhfZmlmb19rYjsKKwkvKiBSZXZlcnNlIGNhbGN1bGF0ZSB0aGUgUlggRklGTyBzaXplIGZyb20gdGhlIFRYICovCisJbHAtPnR4X2ZpZm9fc2l6ZT0obHAtPnR4X2ZpZm9fa2I8PDEwKSAtIDUxMjsKKwlscC0+cnhfZmlmb19zaXplPSAoKDB4NDAwMCAtIDUxMiAtIGxwLT50eF9maWZvX3NpemUpIC8gMTYpICogMTU7CisKKwkvKiBTZXQgdGhlIGF1dG9tYXRpYyBmbG93IGNvbnRyb2wgdmFsdWVzICovCisJc3dpdGNoKGxwLT50eF9maWZvX2tiKSB7CisJCS8qCisJCSAqCSBBRkNfSEkgaXMgYWJvdXQgKChSeCBEYXRhIEZpZm8gU2l6ZSkqMi8zKS82NAorCQkgKgkgQUZDX0xPIGlzIEFGQ19ISS8yCisJCSAqCSBCQUNLX0RVUiBpcyBhYm91dCA1dVMqKEFGQ19MTykgcm91bmRlZCBkb3duCisJCSAqLworCQljYXNlIDI6LyogMTM0NDAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDA4QzQ2QUY7YnJlYWs7CisJCWNhc2UgMzovKiAxMjQ4MCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDgyNDE5RjticmVhazsKKwkJY2FzZSA0Oi8qIDExNTIwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwNzgzQzlGO2JyZWFrOworCQljYXNlIDU6LyogMTA1NjAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDA2RTM3NEY7YnJlYWs7CisJCWNhc2UgNjovKiA5NjAwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwNjQzMjhGO2JyZWFrOworCQljYXNlIDc6LyogODY0MCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDVBMkQ3RjticmVhazsKKwkJY2FzZSA4Oi8qIDc2ODAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDA1MDI4N0Y7YnJlYWs7CisJCWNhc2UgOTovKiA2NzIwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwNDYyMzZGO2JyZWFrOworCQljYXNlIDEwOi8qIDU3NjAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDAzQzFFNkY7YnJlYWs7CisJCWNhc2UgMTE6LyogNDgwMCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDMyMTk1RjticmVhazsKKwkJLyoKKwkJICoJIEFGQ19ISSBpcyB+MTUyMCBieXRlcyBsZXNzIHRoYW4gUlggRGF0YSBGaWZvIFNpemUKKwkJICoJIEFGQ19MTyBpcyBBRkNfSEkvMgorCQkgKgkgQkFDS19EVVIgaXMgYWJvdXQgNXVTKihBRkNfTE8pIHJvdW5kZWQgZG93bgorCQkgKi8KKwkJY2FzZSAxMjovKiAzODQwIFJ4IERhdGEgRmlmbyBTaXplICovCisJCQlscC0+YWZjX2NmZz0weDAwMjQxMjRGO2JyZWFrOworCQljYXNlIDEzOi8qIDI4ODAgUnggRGF0YSBGaWZvIFNpemUgKi8KKwkJCWxwLT5hZmNfY2ZnPTB4MDAxNTA3M0Y7YnJlYWs7CisJCWNhc2UgMTQ6LyogMTkyMCBSeCBEYXRhIEZpZm8gU2l6ZSAqLworCQkJbHAtPmFmY19jZmc9MHgwMDA2MDMyRjticmVhazsKKwkJIGRlZmF1bHQ6CisJCQkgUFJJTlRLKCIlczogRVJST1IgLS0gbm8gQUZDX0NGRyBzZXR0aW5nIGZvdW5kIiwKKwkJCQlkZXYtPm5hbWUpOworCQkJIGJyZWFrOworCX0KKworCURCRyhTTUNfREVCVUdfTUlTQyB8IFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19SWCwKKwkJIiVzOiB0eF9maWZvICVkIHJ4X2ZpZm8gJWQgYWZjX2NmZyAweCUwOHhcbiIsIENBUkROQU1FLAorCQlscC0+dHhfZmlmb19zaXplLCBscC0+cnhfZmlmb19zaXplLCBscC0+YWZjX2NmZyk7CisKKwlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOworCisJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCVNNQ19HRVRfTUFDX0FERFIoZGV2LT5kZXZfYWRkcik7CisKKwkvKiBub3csIHJlc2V0IHRoZSBjaGlwLCBhbmQgcHV0IGl0IGludG8gYSBrbm93biBzdGF0ZSAqLworCXNtYzkxMXhfcmVzZXQoZGV2KTsKKworCS8qCisJICogSWYgZGV2LT5pcnEgaXMgMCwgdGhlbiB0aGUgZGV2aWNlIGhhcyB0byBiZSBiYW5nZWQgb24gdG8gc2VlCisJICogd2hhdCB0aGUgSVJRIGlzLgorCSAqCisJICogU3BlY2lmeWluZyBhbiBJUlEgaXMgZG9uZSB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHVzZXIga25vd3MKKwkgKiB3aGF0IChzKWhlIGlzIGRvaW5nLiAgTm8gY2hlY2tpbmcgaXMgZG9uZSEhISEKKwkgKi8KKwlpZiAoZGV2LT5pcnEgPCAxKSB7CisJCWludCB0cmlhbHM7CisKKwkJdHJpYWxzID0gMzsKKwkJd2hpbGUgKHRyaWFscy0tKSB7CisJCQlkZXYtPmlycSA9IHNtYzkxMXhfZmluZGlycShpb2FkZHIpOworCQkJaWYgKGRldi0+aXJxKQorCQkJCWJyZWFrOworCQkJLyoga2ljayB0aGUgY2FyZCBhbmQgdHJ5IGFnYWluICovCisJCQlzbWM5MTF4X3Jlc2V0KGRldik7CisJCX0KKwl9CisJaWYgKGRldi0+aXJxID09IDApIHsKKwkJcHJpbnRrKCIlczogQ291bGRuJ3QgYXV0b2RldGVjdCB5b3VyIElSUS4gVXNlIGlycT14eC5cbiIsCisJCQlkZXYtPm5hbWUpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWRldi0+aXJxID0gaXJxX2Nhbm9uaWNhbGl6ZShkZXYtPmlycSk7CisKKwkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldCB2YWx1ZXMuICovCisJZXRoZXJfc2V0dXAoZGV2KTsKKworCWRldi0+b3BlbiA9IHNtYzkxMXhfb3BlbjsKKwlkZXYtPnN0b3AgPSBzbWM5MTF4X2Nsb3NlOworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc21jOTExeF9oYXJkX3N0YXJ0X3htaXQ7CisJZGV2LT50eF90aW1lb3V0ID0gc21jOTExeF90aW1lb3V0OworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKHdhdGNoZG9nKTsKKwlkZXYtPmdldF9zdGF0cyA9IHNtYzkxMXhfcXVlcnlfc3RhdGlzdGljczsKKwlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNtYzkxMXhfc2V0X211bHRpY2FzdF9saXN0OworCWRldi0+ZXRodG9vbF9vcHMgPSAmc21jOTExeF9ldGh0b29sX29wczsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCWRldi0+cG9sbF9jb250cm9sbGVyID0gc21jOTExeF9wb2xsX2NvbnRyb2xsZXI7CisjZW5kaWYKKworCUlOSVRfV09SSygmbHAtPnBoeV9jb25maWd1cmUsIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZSwgZGV2KTsKKwlscC0+bWlpLnBoeV9pZF9tYXNrID0gMHgxZjsKKwlscC0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CisJbHAtPm1paS5mb3JjZV9tZWRpYSA9IDA7CisJbHAtPm1paS5mdWxsX2R1cGxleCA9IDA7CisJbHAtPm1paS5kZXYgPSBkZXY7CisJbHAtPm1paS5tZGlvX3JlYWQgPSBzbWM5MTF4X3BoeV9yZWFkOworCWxwLT5taWkubWRpb193cml0ZSA9IHNtYzkxMXhfcGh5X3dyaXRlOworCisJLyoKKwkgKiBMb2NhdGUgdGhlIHBoeSwgaWYgYW55LgorCSAqLworCXNtYzkxMXhfcGh5X2RldGVjdChkZXYpOworCisJLyogU2V0IGRlZmF1bHQgcGFyYW1ldGVycyAqLworCWxwLT5tc2dfZW5hYmxlID0gTkVUSUZfTVNHX0xJTks7CisJbHAtPmN0bF9yZmR1cGx4ID0gMTsKKwlscC0+Y3RsX3JzcGVlZCA9IDEwMDsKKworCS8qIEdyYWIgdGhlIElSUSAqLworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmc21jOTExeF9pbnRlcnJ1cHQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfb3V0OworCisJc2V0X2lycV90eXBlKGRldi0+aXJxLCBJUlFUX0ZBTExJTkcpOworCisjaWZkZWYgU01DX1VTRV9ETUEKKwlscC0+cnhkbWEgPSBTTUNfRE1BX1JFUVVFU1QoZGV2LCBzbWM5MTF4X3J4X2RtYV9pcnEpOworCWxwLT50eGRtYSA9IFNNQ19ETUFfUkVRVUVTVChkZXYsIHNtYzkxMXhfdHhfZG1hX2lycSk7CisJbHAtPnJ4ZG1hX2FjdGl2ZSA9IDA7CisJbHAtPnR4ZG1hX2FjdGl2ZSA9IDA7CisJZGV2LT5kbWEgPSBscC0+cnhkbWE7CisjZW5kaWYKKworCXJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZXR2YWwgPT0gMCkgeworCQkvKiBub3csIHByaW50IG91dCB0aGUgY2FyZCBpbmZvLCBpbiBhIHNob3J0IGZvcm1hdC4uICovCisJCXByaW50aygiJXM6ICVzIChyZXYgJWQpIGF0ICUjbHggSVJRICVkIiwKKwkJCWRldi0+bmFtZSwgdmVyc2lvbl9zdHJpbmcsIGxwLT5yZXZpc2lvbiwKKwkJCWRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSk7CisKKyNpZmRlZiBTTUNfVVNFX0RNQQorCQlpZiAobHAtPnJ4ZG1hICE9IC0xKQorCQkJcHJpbnRrKCIgUlhETUEgJWQgIiwgbHAtPnJ4ZG1hKTsKKworCQlpZiAobHAtPnR4ZG1hICE9IC0xKQorCQkJcHJpbnRrKCJUWERNQSAlZCIsIGxwLT50eGRtYSk7CisjZW5kaWYKKwkJcHJpbnRrKCJcbiIpOworCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJCXByaW50aygiJXM6IEludmFsaWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MuIFBsZWFzZSAiCisJCQkJCSJzZXQgdXNpbmcgaWZjb25maWdcbiIsIGRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQkvKiBQcmludCB0aGUgRXRoZXJuZXQgYWRkcmVzcyAqLworCQkJcHJpbnRrKCIlczogRXRoZXJuZXQgYWRkcjogIiwgZGV2LT5uYW1lKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQkJcHJpbnRrKCIlMi4yeDoiLCBkZXYtPmRldl9hZGRyW2ldKTsKKwkJCXByaW50aygiJTIuMnhcbiIsIGRldi0+ZGV2X2FkZHJbNV0pOworCQl9CisKKwkJaWYgKGxwLT5waHlfdHlwZSA9PSAwKSB7CisJCQlQUklOVEsoIiVzOiBObyBQSFkgZm91bmRcbiIsIGRldi0+bmFtZSk7CisJCX0gZWxzZSBpZiAoKGxwLT5waHlfdHlwZSAmIH4weGZmKSA9PSBMQU45MTFYX0lOVEVSTkFMX1BIWV9JRCkgeworCQkJUFJJTlRLKCIlczogTEFOOTExeCBJbnRlcm5hbCBQSFlcbiIsIGRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQlQUklOVEsoIiVzOiBFeHRlcm5hbCBQSFkgMHglMDh4XG4iLCBkZXYtPm5hbWUsIGxwLT5waHlfdHlwZSk7CisJCX0KKwl9CisKK2Vycl9vdXQ6CisjaWZkZWYgU01DX1VTRV9ETUEKKwlpZiAocmV0dmFsKSB7CisJCWlmIChscC0+cnhkbWEgIT0gLTEpIHsKKwkJCVNNQ19ETUFfRlJFRShkZXYsIGxwLT5yeGRtYSk7CisJCX0KKwkJaWYgKGxwLT50eGRtYSAhPSAtMSkgeworCQkJU01DX0RNQV9GUkVFKGRldiwgbHAtPnR4ZG1hKTsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBzbWM5MTF4X2luaXQodm9pZCkKKyAqCisgKgkgIE91dHB1dDoKKyAqCSAwIC0tPiB0aGVyZSBpcyBhIGRldmljZQorICoJIGFueXRoaW5nIGVsc2UsIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgc21jOTExeF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgKmFkZHI7CisJaW50IHJldDsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIi0tPiAlc1xuIiwgIF9fRlVOQ1RJT05fXyk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFJlcXVlc3QgdGhlIHJlZ2lvbnMuCisJICovCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgU01DOTExWF9JT19FWFRFTlQsIENBUkROQU1FKSkgeworCQkgcmV0ID0gLUVCVVNZOworCQkgZ290byBvdXQ7CisJfQorCisJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc21jOTExeF9sb2NhbCkpOworCWlmICghbmRldikgeworCQlwcmludGsoIiVzOiBjb3VsZCBub3QgYWxsb2NhdGUgZGV2aWNlLlxuIiwgQ0FSRE5BTUUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHJlbGVhc2VfMTsKKwl9CisJU0VUX01PRFVMRV9PV05FUihuZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKKworCW5kZXYtPmRtYSA9ICh1bnNpZ25lZCBjaGFyKS0xOworCW5kZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlhZGRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBTTUM5MTFYX0lPX0VYVEVOVCk7CisJaWYgKCFhZGRyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcmVsZWFzZV9ib3RoOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOworCXJldCA9IHNtYzkxMXhfcHJvYmUobmRldiwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlpb3VubWFwKGFkZHIpOworcmVsZWFzZV9ib3RoOgorCQlmcmVlX25ldGRldihuZGV2KTsKK3JlbGVhc2VfMToKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIFNNQzkxMVhfSU9fRVhURU5UKTsKK291dDoKKwkJcHJpbnRrKCIlczogbm90IGZvdW5kICglZCkuXG4iLCBDQVJETkFNRSwgcmV0KTsKKwl9CisjaWZkZWYgU01DX1VTRV9ETUEKKwllbHNlIHsKKwkJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJCWxwLT5waHlzYWRkciA9IHJlcy0+c3RhcnQ7CisJCWxwLT5kZXYgPSAmcGRldi0+ZGV2OworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJREJHKFNNQ19ERUJVR19GVU5DLCAiLS0+ICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CisKKwlmcmVlX2lycShuZGV2LT5pcnEsIG5kZXYpOworCisjaWZkZWYgU01DX1VTRV9ETUEKKwl7CisJCXN0cnVjdCBzbWM5MTF4X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOworCQlpZiAobHAtPnJ4ZG1hICE9IC0xKSB7CisJCQlTTUNfRE1BX0ZSRUUoZGV2LCBscC0+cnhkbWEpOworCQl9CisJCWlmIChscC0+dHhkbWEgIT0gLTEpIHsKKwkJCVNNQ19ETUFfRlJFRShkZXYsIGxwLT50eGRtYSk7CisJCX0KKwl9CisjZW5kaWYKKwlpb3VubWFwKCh2b2lkICopbmRldi0+YmFzZV9hZGRyKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBTTUM5MTFYX0lPX0VYVEVOVCk7CisKKwlmcmVlX25ldGRldihuZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbWM5MTF4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKKworCURCRyhTTUNfREVCVUdfRlVOQywgIi0tPiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAobmRldikgeworCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQkJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKKwkJCXNtYzkxMXhfc2h1dGRvd24obmRldik7CisjaWYgUE9XRVJfRE9XTgorCQkJLyogU2V0IEQyIC0gRW5lcmd5IGRldGVjdCBvbmx5IHNldHRpbmcgKi8KKwkJCVNNQ19TRVRfUE1UX0NUUkwoMjw8MTIpOworI2VuZGlmCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21jOTExeF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlEQkcoU01DX0RFQlVHX0ZVTkMsICItLT4gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKG5kZXYpIHsKKwkJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJCXNtYzkxMXhfcmVzZXQobmRldik7CisJCQlzbWM5MTF4X2VuYWJsZShuZGV2KTsKKwkJCWlmIChscC0+cGh5X3R5cGUgIT0gMCkKKwkJCQlzbWM5MTF4X3BoeV9jb25maWd1cmUobmRldik7CisJCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbWM5MTF4X2RyaXZlciA9IHsKKwkucHJvYmUJCSA9IHNtYzkxMXhfZHJ2X3Byb2JlLAorCS5yZW1vdmUJID0gc21jOTExeF9kcnZfcmVtb3ZlLAorCS5zdXNwZW5kCSA9IHNtYzkxMXhfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkgPSBzbWM5MTF4X2Rydl9yZXN1bWUsCisJLmRyaXZlcgkgPSB7CisJCS5uYW1lCSA9IENBUkROQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbWM5MTF4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbWM5MTF4X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbWM5MTF4X2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21jOTExeF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzbWM5MTF4X2luaXQpOworbW9kdWxlX2V4aXQoc21jOTExeF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjJhNzEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCkBAIC0wLDAgKzEsODM1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC4gc21jOTExeC5oIC0gbWFjcm9zIGZvciBTTVNDJ3MgTEFOOTExezUsNiw3LDh9IHNpbmdsZS1jaGlwIEV0aGVybmV0IGRldmljZS4KKyAuCisgLiBDb3B5cmlnaHQgKEMpIDIwMDUgU2Vuc29yaWEgQ29ycC4KKyAuIERlcml2ZWQgZnJvbSB0aGUgdW5pZmllZCBTTUM5MXggZHJpdmVyIGJ5IE5pY29sYXMgUGl0cmUKKyAuCisgLiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIC4gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAuIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgLiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIC4KKyAuIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIC4gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAuIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAuIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgLgorIC4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAuIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgLiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgLgorIC4gSW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZmlsZSB3YXMgb2J0YWluZWQgZnJvbSB0aGUgTEFOOTExOAorIC4gbWFudWFsIGZyb20gU01DLiAgVG8gZ2V0IGEgY29weSwgaWYgeW91IHJlYWxseSB3YW50IG9uZSwgeW91IGNhbiBmaW5kCisgLiBpbmZvcm1hdGlvbiB1bmRlciB3d3cuc21zYy5jb20uCisgLgorIC4gQXV0aG9ycworIC4JIER1c3RpbiBNY0ludGlyZQkJIDxkdXN0aW5Ac2Vuc29yaWEuY29tPgorIC4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmbmRlZiBfU01DOTExWF9IXworI2RlZmluZSBfU01DOTExWF9IXworCisvKgorICogVXNlIHRoZSBETUEgZmVhdHVyZSBvbiBQWEEgY2hpcHMKKyAqLworI2lmZGVmIENPTkZJR19BUkNIX1BYQQorICAjZGVmaW5lIFNNQ19VU0VfUFhBX0RNQQkxCisgICNkZWZpbmUgU01DX1VTRV8xNkJJVAkJMAorICAjZGVmaW5lIFNNQ19VU0VfMzJCSVQJCTEKKyNlbmRpZgorCisKKy8qCisgKiBEZWZpbmUgdGhlIGJ1cyB3aWR0aCBzcGVjaWZpYyBJTyBtYWNyb3MKKyAqLworCisjaWYJU01DX1VTRV8xNkJJVAorI2RlZmluZSBTTUNfaW5iKGEsIHIpCQkJIHJlYWRiKChhKSArIChyKSkKKyNkZWZpbmUgU01DX2ludyhhLCByKQkJCSByZWFkdygoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbmwoYSwgcikJCQkgKChTTUNfaW53KGEsIHIpICYgMHhGRkZGKSsoU01DX2ludyhhKzIsIHIpPDwxNikpCisjZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpCQkgd3JpdGViKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dHcodiwgYSwgcikJCSB3cml0ZXcodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKSAJCQkgXAorCWRvewkJCQkJIFwKKwkJIHdyaXRlbCh2ICYgMHhGRkZGLCAoYSkgKyAocikpOwkgXAorCQkgd3JpdGVsKHYgPj4gMTYsIChhKSArIChyKSArIDIpOyBcCisJIH0gd2hpbGUgKDApCisjZGVmaW5lIFNNQ19pbnNsKGEsIHIsIHAsIGwpCSByZWFkc3coKHNob3J0KikoKGEpICsgKHIpKSwgcCwgbCoyKQorI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJIHdyaXRlc3coKHNob3J0KikoKGEpICsgKHIpKSwgcCwgbCoyKQorCisjZWxpZglTTUNfVVNFXzMyQklUCisjZGVmaW5lIFNNQ19pbmIoYSwgcikJCSByZWFkYigoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbncoYSwgcikJCSByZWFkdygoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbmwoYSwgcikJCSByZWFkbCgoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpCSB3cml0ZWIodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKQkgd3JpdGVsKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJIHJlYWRzbCgoaW50KikoKGEpICsgKHIpKSwgcCwgbCkKKyNkZWZpbmUgU01DX291dHNsKGEsIHIsIHAsIGwpCSB3cml0ZXNsKChpbnQqKSgoYSkgKyAocikpLCBwLCBsKQorCisjZW5kaWYgLyogU01DX1VTRV8xNkJJVCAqLworCisKKworI2lmCSBTTUNfVVNFX1BYQV9ETUEKKyNkZWZpbmUgU01DX1VTRV9ETUEKKworLyoKKyAqIERlZmluZSB0aGUgcmVxdWVzdCBhbmQgZnJlZSBmdW5jdGlvbnMKKyAqIFRoZXNlIGFyZSB1bmZvcnR1bmF0ZWx5IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhcyBubyBnZW5lcmljIGFsbG9jYXRpb24KKyAqIG1lY2hhbmlzbSBleGl0cworICovCisjZGVmaW5lIFNNQ19ETUFfUkVRVUVTVChkZXYsIGhhbmRsZXIpIFwKKwkgcHhhX3JlcXVlc3RfZG1hKGRldi0+bmFtZSwgRE1BX1BSSU9fTE9XLCBoYW5kbGVyLCBkZXYpCisKKyNkZWZpbmUgU01DX0RNQV9GUkVFKGRldiwgZG1hKSBcCisJIHB4YV9mcmVlX2RtYShkbWEpCisKKyNkZWZpbmUgU01DX0RNQV9BQ0tfSVJRKGRldiwgZG1hKQkJCQkJXAorewkJCQkJCQkJCVwKKwlpZiAoRENTUihkbWEpICYgRENTUl9CVVNFUlIpIHsJCQkJCVwKKwkJcHJpbnRrKCIlczogRE1BICVkIGJ1cyBlcnJvciFcbiIsIGRldi0+bmFtZSwgZG1hKTsJXAorCX0JCQkJCQkJCVwKKwlEQ1NSKGRtYSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CQlcCit9CisKKy8qCisgKiBVc2UgYSBETUEgZm9yIFJYIGFuZCBUWCBwYWNrZXRzLgorICovCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKworc3RhdGljIGRtYV9hZGRyX3QgcnhfZG1hYnVmLCB0eF9kbWFidWY7CitzdGF0aWMgaW50IHJ4X2RtYWxlbiwgdHhfZG1hbGVuOworCisjaWZkZWYgU01DX2luc2wKKyN1bmRlZiBTTUNfaW5zbAorI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKSBcCisJc21jX3B4YV9kbWFfaW5zbChscC0+ZGV2LCBhLCBscC0+cGh5c2FkZHIsIHIsIGxwLT5yeGRtYSwgcCwgbCkKKworc3RhdGljIGlubGluZSB2b2lkCitzbWNfcHhhX2RtYV9pbnNsKHN0cnVjdCBkZXZpY2UgKmRldiwgdV9sb25nIGlvYWRkciwgdV9sb25nIHBoeXNhZGRyLAorCQlpbnQgcmVnLCBpbnQgZG1hLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwkvKiA2NCBiaXQgYWxpZ25tZW50IGlzIHJlcXVpcmVkIGZvciBtZW1vcnkgdG8gbWVtb3J5IERNQSAqLworCWlmICgobG9uZylidWYgJiA0KSB7CisJCSooKHUzMiAqKWJ1ZikgPSBTTUNfaW5sKGlvYWRkciwgcmVnKTsKKwkJYnVmICs9IDQ7CisJCWxlbi0tOworCX0KKworCWxlbiAqPSA0OworCXJ4X2RtYWJ1ZiA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYnVmLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CisJcnhfZG1hbGVuID0gbGVuOworCURDU1IoZG1hKSA9IERDU1JfTk9ERVNDOworCURUQURSKGRtYSkgPSByeF9kbWFidWY7CisJRFNBRFIoZG1hKSA9IHBoeXNhZGRyICsgcmVnOworCURDTUQoZG1hKSA9IChEQ01EX0lOQ1RSR0FERFIgfCBEQ01EX0JVUlNUMzIgfAorCQlEQ01EX1dJRFRINCB8IERDTURfRU5ESVJRRU4gfCAoRENNRF9MRU5HVEggJiByeF9kbWFsZW4pKTsKKwlEQ1NSKGRtYSkgPSBEQ1NSX05PREVTQyB8IERDU1JfUlVOOworfQorI2VuZGlmCisKKyNpZmRlZiBTTUNfaW5zdworI3VuZGVmIFNNQ19pbnN3CisjZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpIFwKKwlzbWNfcHhhX2RtYV9pbnN3KGxwLT5kZXYsIGEsIGxwLT5waHlzYWRkciwgciwgbHAtPnJ4ZG1hLCBwLCBsKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NtY19weGFfZG1hX2luc3coc3RydWN0IGRldmljZSAqZGV2LCB1X2xvbmcgaW9hZGRyLCB1X2xvbmcgcGh5c2FkZHIsCisJCWludCByZWcsIGludCBkbWEsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCS8qIDY0IGJpdCBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSB0byBtZW1vcnkgRE1BICovCisJd2hpbGUgKChsb25nKWJ1ZiAmIDYpIHsKKwkJKigodTE2ICopYnVmKSA9IFNNQ19pbncoaW9hZGRyLCByZWcpOworCQlidWYgKz0gMjsKKwkJbGVuLS07CisJfQorCisJbGVuICo9IDI7CisJcnhfZG1hYnVmID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWYsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlyeF9kbWFsZW4gPSBsZW47CisJRENTUihkbWEpID0gRENTUl9OT0RFU0M7CisJRFRBRFIoZG1hKSA9IHJ4X2RtYWJ1ZjsKKwlEU0FEUihkbWEpID0gcGh5c2FkZHIgKyByZWc7CisJRENNRChkbWEpID0gKERDTURfSU5DVFJHQUREUiB8IERDTURfQlVSU1QzMiB8CisJCURDTURfV0lEVEgyIHwgRENNRF9FTkRJUlFFTiB8IChEQ01EX0xFTkdUSCAmIHJ4X2RtYWxlbikpOworCURDU1IoZG1hKSA9IERDU1JfTk9ERVNDIHwgRENTUl9SVU47Cit9CisjZW5kaWYKKworI2lmZGVmIFNNQ19vdXRzbAorI3VuZGVmIFNNQ19vdXRzbAorI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkgXAorCSBzbWNfcHhhX2RtYV9vdXRzbChscC0+ZGV2LCBhLCBscC0+cGh5c2FkZHIsIHIsIGxwLT50eGRtYSwgcCwgbCkKKworc3RhdGljIGlubGluZSB2b2lkCitzbWNfcHhhX2RtYV9vdXRzbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVfbG9uZyBpb2FkZHIsIHVfbG9uZyBwaHlzYWRkciwKKwkJaW50IHJlZywgaW50IGRtYSwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJLyogNjQgYml0IGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgbWVtb3J5IHRvIG1lbW9yeSBETUEgKi8KKwlpZiAoKGxvbmcpYnVmICYgNCkgeworCQlTTUNfb3V0bCgqKCh1MzIgKilidWYpLCBpb2FkZHIsIHJlZyk7CisJCWJ1ZiArPSA0OworCQlsZW4tLTsKKwl9CisKKwlsZW4gKj0gNDsKKwl0eF9kbWFidWYgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgbGVuLCBETUFfVE9fREVWSUNFKTsKKwl0eF9kbWFsZW4gPSBsZW47CisJRENTUihkbWEpID0gRENTUl9OT0RFU0M7CisJRFNBRFIoZG1hKSA9IHR4X2RtYWJ1ZjsKKwlEVEFEUihkbWEpID0gcGh5c2FkZHIgKyByZWc7CisJRENNRChkbWEpID0gKERDTURfSU5DU1JDQUREUiB8IERDTURfQlVSU1QzMiB8CisJCURDTURfV0lEVEg0IHwgRENNRF9FTkRJUlFFTiB8IChEQ01EX0xFTkdUSCAmIHR4X2RtYWxlbikpOworCURDU1IoZG1hKSA9IERDU1JfTk9ERVNDIHwgRENTUl9SVU47Cit9CisjZW5kaWYKKworI2lmZGVmIFNNQ19vdXRzdworI3VuZGVmIFNNQ19vdXRzdworI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkgXAorCXNtY19weGFfZG1hX291dHN3KGxwLT5kZXYsIGEsIGxwLT5waHlzYWRkciwgciwgbHAtPnR4ZG1hLCBwLCBsKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NtY19weGFfZG1hX291dHN3KHN0cnVjdCBkZXZpY2UgKmRldiwgdV9sb25nIGlvYWRkciwgdV9sb25nIHBoeXNhZGRyLAorCQkgIGludCByZWcsIGludCBkbWEsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCS8qIDY0IGJpdCBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIG1lbW9yeSB0byBtZW1vcnkgRE1BICovCisJd2hpbGUgKChsb25nKWJ1ZiAmIDYpIHsKKwkJU01DX291dHcoKigodTE2ICopYnVmKSwgaW9hZGRyLCByZWcpOworCQlidWYgKz0gMjsKKwkJbGVuLS07CisJfQorCisJbGVuICo9IDI7CisJdHhfZG1hYnVmID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWYsIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJdHhfZG1hbGVuID0gbGVuOworCURDU1IoZG1hKSA9IERDU1JfTk9ERVNDOworCURTQURSKGRtYSkgPSB0eF9kbWFidWY7CisJRFRBRFIoZG1hKSA9IHBoeXNhZGRyICsgcmVnOworCURDTUQoZG1hKSA9IChEQ01EX0lOQ1NSQ0FERFIgfCBEQ01EX0JVUlNUMzIgfAorCQlEQ01EX1dJRFRIMiB8IERDTURfRU5ESVJRRU4gfCAoRENNRF9MRU5HVEggJiB0eF9kbWFsZW4pKTsKKwlEQ1NSKGRtYSkgPSBEQ1NSX05PREVTQyB8IERDU1JfUlVOOworfQorI2VuZGlmCisKKyNlbmRpZgkgLyogU01DX1VTRV9QWEFfRE1BICovCisKKworLyogQ2hpcCBQYXJhbWV0ZXJzIGFuZCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFNNQzkxMVhfVFhfRklGT19MT1dfVEhSRVNIT0xECSgxNTM2KjIpCisKKyNkZWZpbmUgU01DOTExWF9JT19FWFRFTlQJIDB4MTAwCisKKyNkZWZpbmUgU01DOTExWF9FRVBST01fTEVOCSA3CisKKy8qIEJlbG93IGFyZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0IGRlZmluaXRpb25zCisgKiBvZiB0aGUgTGFuOTExeCBtZW1vcnkgc3BhY2UKKyAqLworI2RlZmluZSBSWF9EQVRBX0ZJRk8JCSAoMHgwMCkKKworI2RlZmluZSBUWF9EQVRBX0ZJRk8JCSAoMHgyMCkKKyNkZWZpbmUJVFhfQ01EX0FfSU5UX09OX0NPTVBfCQkoMHg4MDAwMDAwMCkKKyNkZWZpbmUJVFhfQ01EX0FfSU5UX0JVRl9FTkRfQUxHTl8JKDB4MDMwMDAwMDApCisjZGVmaW5lCVRYX0NNRF9BX0lOVF80X0JZVEVfQUxHTl8JKDB4MDAwMDAwMDApCisjZGVmaW5lCVRYX0NNRF9BX0lOVF8xNl9CWVRFX0FMR05fCSgweDAxMDAwMDAwKQorI2RlZmluZQlUWF9DTURfQV9JTlRfMzJfQllURV9BTEdOXwkoMHgwMjAwMDAwMCkKKyNkZWZpbmUJVFhfQ01EX0FfSU5UX0RBVEFfT0ZGU0VUXwkoMHgwMDFGMDAwMCkKKyNkZWZpbmUJVFhfQ01EX0FfSU5UX0ZJUlNUX1NFR18JCSgweDAwMDAyMDAwKQorI2RlZmluZQlUWF9DTURfQV9JTlRfTEFTVF9TRUdfCQkoMHgwMDAwMTAwMCkKKyNkZWZpbmUJVFhfQ01EX0FfQlVGX1NJWkVfCQkoMHgwMDAwMDdGRikKKyNkZWZpbmUJVFhfQ01EX0JfUEtUX1RBR18JCSgweEZGRkYwMDAwKQorI2RlZmluZQlUWF9DTURfQl9BRERfQ1JDX0RJU0FCTEVfCSgweDAwMDAyMDAwKQorI2RlZmluZQlUWF9DTURfQl9ESVNBQkxFX1BBRERJTkdfCSgweDAwMDAxMDAwKQorI2RlZmluZQlUWF9DTURfQl9QS1RfQllURV9MRU5HVEhfCSgweDAwMDAwN0ZGKQorCisjZGVmaW5lIFJYX1NUQVRVU19GSUZPCQkoMHg0MCkKKyNkZWZpbmUJUlhfU1RTX1BLVF9MRU5fCQkJKDB4M0ZGRjAwMDApCisjZGVmaW5lCVJYX1NUU19FU18JCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUJUlhfU1RTX0JDU1RfCQkJKDB4MDAwMDIwMDApCisjZGVmaW5lCVJYX1NUU19MRU5fRVJSXwkJCSgweDAwMDAxMDAwKQorI2RlZmluZQlSWF9TVFNfUlVOVF9FUlJfCQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUJUlhfU1RTX01DQVNUXwkJCSgweDAwMDAwNDAwKQorI2RlZmluZQlSWF9TVFNfVE9PX0xPTkdfCQkoMHgwMDAwMDA4MCkKKyNkZWZpbmUJUlhfU1RTX0NPTExfCQkJKDB4MDAwMDAwNDApCisjZGVmaW5lCVJYX1NUU19FVEhfVFlQRV8JCSgweDAwMDAwMDIwKQorI2RlZmluZQlSWF9TVFNfV0RPR19UTVRfCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUJUlhfU1RTX01JSV9FUlJfCQkJKDB4MDAwMDAwMDgpCisjZGVmaW5lCVJYX1NUU19EUklCQkxJTkdfCQkoMHgwMDAwMDAwNCkKKyNkZWZpbmUJUlhfU1RTX0NSQ19FUlJfCQkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIFJYX1NUQVRVU19GSUZPX1BFRUsgCSgweDQ0KQorI2RlZmluZSBUWF9TVEFUVVNfRklGTwkJKDB4NDgpCisjZGVmaW5lCVRYX1NUU19UQUdfCQkJKDB4RkZGRjAwMDApCisjZGVmaW5lCVRYX1NUU19FU18JCQkoMHgwMDAwODAwMCkKKyNkZWZpbmUJVFhfU1RTX0xPQ18JCQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUJVFhfU1RTX05PX0NBUlJfCQkJKDB4MDAwMDA0MDApCisjZGVmaW5lCVRYX1NUU19MQVRFX0NPTExfCQkoMHgwMDAwMDIwMCkKKyNkZWZpbmUJVFhfU1RTX01BTllfQ09MTF8JCSgweDAwMDAwMTAwKQorI2RlZmluZQlUWF9TVFNfQ09MTF9DTlRfCQkoMHgwMDAwMDA3OCkKKyNkZWZpbmUJVFhfU1RTX01BTllfREVGRVJfCQkoMHgwMDAwMDAwNCkKKyNkZWZpbmUJVFhfU1RTX1VOREVSUlVOXwkJKDB4MDAwMDAwMDIpCisjZGVmaW5lCVRYX1NUU19ERUZFUlJFRF8JCSgweDAwMDAwMDAxKQorI2RlZmluZSBUWF9TVEFUVVNfRklGT19QRUVLCSgweDRDKQorI2RlZmluZSBJRF9SRVYJCQkoMHg1MCkKKyNkZWZpbmUJSURfUkVWX0NISVBfSURfCQkJKDB4RkZGRjAwMDApICAvKiBSTyAqLworI2RlZmluZQlJRF9SRVZfUkVWX0lEXwkJCSgweDAwMDBGRkZGKSAgLyogUk8gKi8KKworI2RlZmluZSBJTlRfQ0ZHCQkJKDB4NTQpCisjZGVmaW5lCUlOVF9DRkdfSU5UX0RFQVNfCQkoMHhGRjAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfQ0ZHX0lOVF9ERUFTX0NMUl8JCSgweDAwMDA0MDAwKQorI2RlZmluZQlJTlRfQ0ZHX0lOVF9ERUFTX1NUU18JCSgweDAwMDAyMDAwKQorI2RlZmluZQlJTlRfQ0ZHX0lSUV9JTlRfCQkoMHgwMDAwMTAwMCkgIC8qIFJPICovCisjZGVmaW5lCUlOVF9DRkdfSVJRX0VOXwkJCSgweDAwMDAwMTAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9DRkdfSVJRX1BPTF8JCSgweDAwMDAwMDEwKSAgLyogUi9XIE5vdCBBZmZlY3RlZCBieSBTVyBSZXNldCAqLworI2RlZmluZQlJTlRfQ0ZHX0lSUV9UWVBFXwkJKDB4MDAwMDAwMDEpICAvKiBSL1cgTm90IEFmZmVjdGVkIGJ5IFNXIFJlc2V0ICovCisKKyNkZWZpbmUgSU5UX1NUUwkJCSgweDU4KQorI2RlZmluZQlJTlRfU1RTX1NXX0lOVF8JCQkoMHg4MDAwMDAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19UWFNUT1BfSU5UXwkJKDB4MDIwMDAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUlhTVE9QX0lOVF8JCSgweDAxMDAwMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1JYREZIX0lOVF8JCSgweDAwODAwMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1JYREZfSU5UXwkJKDB4MDA0MDAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfVFhfSU9DXwkJCSgweDAwMjAwMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1JYRF9JTlRfCQkoMHgwMDEwMDAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19HUFRfSU5UXwkJKDB4MDAwODAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUEhZX0lOVF8JCSgweDAwMDQwMDAwKSAgLyogUk8gKi8KKyNkZWZpbmUJSU5UX1NUU19QTUVfSU5UXwkJKDB4MDAwMjAwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfVFhTT18JCQkoMHgwMDAxMDAwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19SV1RfCQkJKDB4MDAwMDgwMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUlhFXwkJCSgweDAwMDA0MDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1RYRV8JCQkoMHgwMDAwMjAwMCkgIC8qIFIvV0MgKi8KKy8vI2RlZmluZQlJTlRfU1RTX0VSWF8JCSgweDAwMDAxMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1RERlVfCQkJKDB4MDAwMDA4MDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfVERGT18JCQkoMHgwMDAwMDQwMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19UREZBXwkJCSgweDAwMDAwMjAwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1RTRkZfCQkJKDB4MDAwMDAxMDApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfVFNGTF8JCQkoMHgwMDAwMDA4MCkgIC8qIFIvV0MgKi8KKy8vI2RlZmluZQlJTlRfU1RTX1JYREZfCQkoMHgwMDAwMDA0MCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19SREZPXwkJCSgweDAwMDAwMDQwKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX1JERkxfCQkJKDB4MDAwMDAwMjApICAvKiBSL1dDICovCisjZGVmaW5lCUlOVF9TVFNfUlNGRl8JCQkoMHgwMDAwMDAxMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJSU5UX1NUU19SU0ZMXwkJCSgweDAwMDAwMDA4KSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX0dQSU8yX0lOVF8JCSgweDAwMDAwMDA0KSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX0dQSU8xX0lOVF8JCSgweDAwMDAwMDAyKSAgLyogUi9XQyAqLworI2RlZmluZQlJTlRfU1RTX0dQSU8wX0lOVF8JCSgweDAwMDAwMDAxKSAgLyogUi9XQyAqLworCisjZGVmaW5lIElOVF9FTgkJCSgweDVDKQorI2RlZmluZQlJTlRfRU5fU1dfSU5UX0VOXwkJKDB4ODAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RYU1RPUF9JTlRfRU5fCQkoMHgwMjAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUlhTVE9QX0lOVF9FTl8JCSgweDAxMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9SWERGSF9JTlRfRU5fCQkoMHgwMDgwMDAwMCkgIC8qIFIvVyAqLworLy8jZGVmaW5lCUlOVF9FTl9SWERGX0lOVF9FTl8JCSgweDAwNDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9USU9DX0lOVF9FTl8JCSgweDAwMjAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9SWERfSU5UX0VOXwkJKDB4MDAxMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX0dQVF9JTlRfRU5fCQkoMHgwMDA4MDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUEhZX0lOVF9FTl8JCSgweDAwMDQwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9QTUVfSU5UX0VOXwkJKDB4MDAwMjAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1RYU09fRU5fCQkJKDB4MDAwMTAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1JXVF9FTl8JCQkoMHgwMDAwODAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fUlhFX0VOXwkJCSgweDAwMDA0MDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9UWEVfRU5fCQkJKDB4MDAwMDIwMDApICAvKiBSL1cgKi8KKy8vI2RlZmluZQlJTlRfRU5fRVJYX0VOXwkJCSgweDAwMDAxMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9UREZVX0VOXwkJCSgweDAwMDAwODAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9UREZPX0VOXwkJCSgweDAwMDAwNDAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9UREZBX0VOXwkJCSgweDAwMDAwMjAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9UU0ZGX0VOXwkJCSgweDAwMDAwMTAwKSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9UU0ZMX0VOXwkJCSgweDAwMDAwMDgwKSAgLyogUi9XICovCisvLyNkZWZpbmUJSU5UX0VOX1JYREZfRU5fCQkJKDB4MDAwMDAwNDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1JERk9fRU5fCQkJKDB4MDAwMDAwNDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1JERkxfRU5fCQkJKDB4MDAwMDAwMjApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1JTRkZfRU5fCQkJKDB4MDAwMDAwMTApICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX1JTRkxfRU5fCQkJKDB4MDAwMDAwMDgpICAvKiBSL1cgKi8KKyNkZWZpbmUJSU5UX0VOX0dQSU8yX0lOVF8JCSgweDAwMDAwMDA0KSAgLyogUi9XICovCisjZGVmaW5lCUlOVF9FTl9HUElPMV9JTlRfCQkoMHgwMDAwMDAwMikgIC8qIFIvVyAqLworI2RlZmluZQlJTlRfRU5fR1BJTzBfSU5UXwkJKDB4MDAwMDAwMDEpICAvKiBSL1cgKi8KKworI2RlZmluZSBCWVRFX1RFU1QJCSgweDY0KQorI2RlZmluZSBGSUZPX0lOVAkJKDB4NjgpCisjZGVmaW5lCUZJRk9fSU5UX1RYX0FWQUlMX0xFVkVMXwkoMHhGRjAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlGSUZPX0lOVF9UWF9TVFNfTEVWRUxfCQkoMHgwMEZGMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlGSUZPX0lOVF9SWF9BVkFJTF9MRVZFTF8JKDB4MDAwMEZGMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJRklGT19JTlRfUlhfU1RTX0xFVkVMXwkJKDB4MDAwMDAwRkYpICAvKiBSL1cgKi8KKworI2RlZmluZSBSWF9DRkcJCQkoMHg2QykKKyNkZWZpbmUJUlhfQ0ZHX1JYX0VORF9BTEdOXwkJKDB4QzAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJCVJYX0NGR19SWF9FTkRfQUxHTjRfCQkoMHgwMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJUlhfQ0ZHX1JYX0VORF9BTEdOMTZfCQkoMHg0MDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJUlhfQ0ZHX1JYX0VORF9BTEdOMzJfCQkoMHg4MDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlSWF9DRkdfUlhfRE1BX0NOVF8JCSgweDBGRkYwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCVJYX0NGR19SWF9EVU1QXwkJCSgweDAwMDA4MDAwKSAgLyogUi9XICovCisjZGVmaW5lCVJYX0NGR19SWERPRkZfCQkJKDB4MDAwMDFGMDApICAvKiBSL1cgKi8KKy8vI2RlZmluZQlSWF9DRkdfUlhCQURfCQkJKDB4MDAwMDAwMDEpICAvKiBSL1cgKi8KKworI2RlZmluZSBUWF9DRkcJCQkoMHg3MCkKKy8vI2RlZmluZQlUWF9DRkdfVFhfRE1BX0xWTF8JCSgweEUwMDAwMDAwKQkgLyogUi9XICovCisvLyNkZWZpbmUJVFhfQ0ZHX1RYX0RNQV9DTlRfCQkoMHgwRkZGMDAwMCkJIC8qIFIvVyBTZWxmIENsZWFyaW5nICovCisjZGVmaW5lCVRYX0NGR19UWFNfRFVNUF8JCSgweDAwMDA4MDAwKSAgLyogU2VsZiBDbGVhcmluZyAqLworI2RlZmluZQlUWF9DRkdfVFhEX0RVTVBfCQkoMHgwMDAwNDAwMCkgIC8qIFNlbGYgQ2xlYXJpbmcgKi8KKyNkZWZpbmUJVFhfQ0ZHX1RYU0FPXwkJCSgweDAwMDAwMDA0KSAgLyogUi9XICovCisjZGVmaW5lCVRYX0NGR19UWF9PTl8JCQkoMHgwMDAwMDAwMikgIC8qIFIvVyAqLworI2RlZmluZQlUWF9DRkdfU1RPUF9UWF8JCQkoMHgwMDAwMDAwMSkgIC8qIFNlbGYgQ2xlYXJpbmcgKi8KKworI2RlZmluZSBIV19DRkcJCQkoMHg3NCkKKyNkZWZpbmUJSFdfQ0ZHX1RUTV8JCQkoMHgwMDIwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlIV19DRkdfU0ZfCQkJKDB4MDAxMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJSFdfQ0ZHX1RYX0ZJRl9TWl8JCSgweDAwMEYwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUhXX0NGR19UUl8JCQkoMHgwMDAwMzAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlIV19DRkdfUEhZX0NMS19TRUxfCQkoMHgwMDAwMDA2MCkgIC8qIFIvVyAqLworI2RlZmluZQkJIEhXX0NGR19QSFlfQ0xLX1NFTF9JTlRfUEhZXyAJKDB4MDAwMDAwMDApIC8qIFIvVyAqLworI2RlZmluZQkJIEhXX0NGR19QSFlfQ0xLX1NFTF9FWFRfUEhZXyAJKDB4MDAwMDAwMjApIC8qIFIvVyAqLworI2RlZmluZQkJIEhXX0NGR19QSFlfQ0xLX1NFTF9DTEtfRElTXyAJKDB4MDAwMDAwNDApIC8qIFIvVyAqLworI2RlZmluZQlIV19DRkdfU01JX1NFTF8JCQkoMHgwMDAwMDAxMCkgIC8qIFIvVyAqLworI2RlZmluZQlIV19DRkdfRVhUX1BIWV9ERVRfCQkoMHgwMDAwMDAwOCkgIC8qIFJPICovCisjZGVmaW5lCUhXX0NGR19FWFRfUEhZX0VOXwkJKDB4MDAwMDAwMDQpICAvKiBSL1cgKi8KKyNkZWZpbmUJSFdfQ0ZHXzMyXzE2X0JJVF9NT0RFXwkJKDB4MDAwMDAwMDQpICAvKiBSTyAqLworI2RlZmluZQlIV19DRkdfU1JTVF9UT18JCQkoMHgwMDAwMDAwMikgIC8qIFJPICovCisjZGVmaW5lCUhXX0NGR19TUlNUXwkJCSgweDAwMDAwMDAxKSAgLyogU2VsZiBDbGVhcmluZyAqLworCisjZGVmaW5lIFJYX0RQX0NUUkwJCSgweDc4KQorI2RlZmluZQlSWF9EUF9DVFJMX1JYX0ZGV0RfCQkoMHg4MDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlSWF9EUF9DVFJMX0ZGV0RfQlVTWV8JCSgweDgwMDAwMDAwKSAgLyogUk8gKi8KKworI2RlZmluZSBSWF9GSUZPX0lORgkJKDB4N0MpCisjZGVmaW5lCSBSWF9GSUZPX0lORl9SWFNVU0VEXwkJKDB4MDBGRjAwMDApICAvKiBSTyAqLworI2RlZmluZQkgUlhfRklGT19JTkZfUlhEVVNFRF8JCSgweDAwMDBGRkZGKSAgLyogUk8gKi8KKworI2RlZmluZSBUWF9GSUZPX0lORgkJKDB4ODApCisjZGVmaW5lCVRYX0ZJRk9fSU5GX1RTVVNFRF8JCSgweDAwRkYwMDAwKSAgLyogUk8gKi8KKyNkZWZpbmUJVFhfRklGT19JTkZfVERGUkVFXwkJKDB4MDAwMEZGRkYpICAvKiBSTyAqLworCisjZGVmaW5lIFBNVF9DVFJMCQkoMHg4NCkKKyNkZWZpbmUJUE1UX0NUUkxfUE1fTU9ERV8JCSgweDAwMDAzMDAwKSAgLyogU2VsZiBDbGVhcmluZyAqLworI2RlZmluZQlQTVRfQ1RSTF9QSFlfUlNUXwkJKDB4MDAwMDA0MDApICAvKiBTZWxmIENsZWFyaW5nICovCisjZGVmaW5lCVBNVF9DVFJMX1dPTF9FTl8JCSgweDAwMDAwMjAwKSAgLyogUi9XICovCisjZGVmaW5lCVBNVF9DVFJMX0VEX0VOXwkJCSgweDAwMDAwMTAwKSAgLyogUi9XICovCisjZGVmaW5lCVBNVF9DVFJMX1BNRV9UWVBFXwkJKDB4MDAwMDAwNDApICAvKiBSL1cgTm90IEFmZmVjdGVkIGJ5IFNXIFJlc2V0ICovCisjZGVmaW5lCVBNVF9DVFJMX1dVUFNfCQkJKDB4MDAwMDAwMzApICAvKiBSL1dDICovCisjZGVmaW5lCQlQTVRfQ1RSTF9XVVBTX05PV0FLRV8JCSgweDAwMDAwMDAwKSAgLyogUi9XQyAqLworI2RlZmluZQkJUE1UX0NUUkxfV1VQU19FRF8JCSgweDAwMDAwMDEwKSAgLyogUi9XQyAqLworI2RlZmluZQkJUE1UX0NUUkxfV1VQU19XT0xfCQkoMHgwMDAwMDAyMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJCVBNVF9DVFJMX1dVUFNfTVVMVElfCQkoMHgwMDAwMDAzMCkgIC8qIFIvV0MgKi8KKyNkZWZpbmUJUE1UX0NUUkxfUE1FX0lORF8JCSgweDAwMDAwMDA4KSAgLyogUi9XICovCisjZGVmaW5lCVBNVF9DVFJMX1BNRV9QT0xfCQkoMHgwMDAwMDAwNCkgIC8qIFIvVyAqLworI2RlZmluZQlQTVRfQ1RSTF9QTUVfRU5fCQkoMHgwMDAwMDAwMikgIC8qIFIvVyBOb3QgQWZmZWN0ZWQgYnkgU1cgUmVzZXQgKi8KKyNkZWZpbmUJUE1UX0NUUkxfUkVBRFlfCQkJKDB4MDAwMDAwMDEpICAvKiBSTyAqLworCisjZGVmaW5lIEdQSU9fQ0ZHCQkoMHg4OCkKKyNkZWZpbmUJR1BJT19DRkdfTEVEM19FTl8JCSgweDQwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0xFRDJfRU5fCQkoMHgyMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19MRUQxX0VOXwkJKDB4MTAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJTzJfSU5UX1BPTF8JCSgweDA0MDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU8xX0lOVF9QT0xfCQkoMHgwMjAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19HUElPMF9JTlRfUE9MXwkJKDB4MDEwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfRUVQUl9FTl8JCSgweDAwNzAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9CVUYyXwkJKDB4MDAwNDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0JVRjFfCQkoMHgwMDAyMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19HUElPQlVGMF8JCSgweDAwMDEwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9ESVIyXwkJKDB4MDAwMDA0MDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BJT19DRkdfR1BJT0RJUjFfCQkoMHgwMDAwMDIwMCkgIC8qIFIvVyAqLworI2RlZmluZQlHUElPX0NGR19HUElPRElSMF8JCSgweDAwMDAwMTAwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9ENF8JCSgweDAwMDAwMDEwKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9EM18JCSgweDAwMDAwMDA4KSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9EMl8JCSgweDAwMDAwMDA0KSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9EMV8JCSgweDAwMDAwMDAyKSAgLyogUi9XICovCisjZGVmaW5lCUdQSU9fQ0ZHX0dQSU9EMF8JCSgweDAwMDAwMDAxKSAgLyogUi9XICovCisKKyNkZWZpbmUgR1BUX0NGRwkJCSgweDhDKQorI2RlZmluZQlHUFRfQ0ZHX1RJTUVSX0VOXwkJKDB4MjAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJR1BUX0NGR19HUFRfTE9BRF8JCSgweDAwMDBGRkZGKSAgLyogUi9XICovCisKKyNkZWZpbmUgR1BUX0NOVAkJCSgweDkwKQorI2RlZmluZQlHUFRfQ05UX0dQVF9DTlRfCQkoMHgwMDAwRkZGRikgIC8qIFJPICovCisKKyNkZWZpbmUgRU5ESUFOCQkJKDB4OTgpCisjZGVmaW5lIEZSRUVfUlVOCQkoMHg5QykKKyNkZWZpbmUgUlhfRFJPUAkJCSgweEEwKQorI2RlZmluZSBNQUNfQ1NSX0NNRAkJKDB4QTQpCisjZGVmaW5lCSBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8JCSgweDgwMDAwMDAwKSAgLyogU2VsZiBDbGVhcmluZyAqLworI2RlZmluZQkgTUFDX0NTUl9DTURfUl9OT1RfV18JCSgweDQwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCSBNQUNfQ1NSX0NNRF9DU1JfQUREUl8JCSgweDAwMDAwMEZGKSAgLyogUi9XICovCisKKyNkZWZpbmUgTUFDX0NTUl9EQVRBCQkoMHhBOCkKKyNkZWZpbmUgQUZDX0NGRwkJCSgweEFDKQorI2RlZmluZQkJQUZDX0NGR19BRkNfSElfCQkJKDB4MDBGRjAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJCUFGQ19DRkdfQUZDX0xPXwkJCSgweDAwMDBGRjAwKSAgLyogUi9XICovCisjZGVmaW5lCQlBRkNfQ0ZHX0JBQ0tfRFVSXwkJKDB4MDAwMDAwRjApICAvKiBSL1cgKi8KKyNkZWZpbmUJCUFGQ19DRkdfRkNNVUxUXwkJCSgweDAwMDAwMDA4KSAgLyogUi9XICovCisjZGVmaW5lCQlBRkNfQ0ZHX0ZDQlJEXwkJCSgweDAwMDAwMDA0KSAgLyogUi9XICovCisjZGVmaW5lCQlBRkNfQ0ZHX0ZDQUREXwkJCSgweDAwMDAwMDAyKSAgLyogUi9XICovCisjZGVmaW5lCQlBRkNfQ0ZHX0ZDQU5ZXwkJCSgweDAwMDAwMDAxKSAgLyogUi9XICovCisKKyNkZWZpbmUgRTJQX0NNRAkJCSgweEIwKQorI2RlZmluZQlFMlBfQ01EX0VQQ19CVVNZXwkJKDB4ODAwMDAwMDApICAvKiBTZWxmIENsZWFyaW5nICovCisjZGVmaW5lCUUyUF9DTURfRVBDX0NNRF8JCQkoMHg3MDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJRTJQX0NNRF9FUENfQ01EX1JFQURfCQkoMHgwMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJRTJQX0NNRF9FUENfQ01EX0VXRFNfCQkoMHgxMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJRTJQX0NNRF9FUENfQ01EX0VXRU5fCQkoMHgyMDAwMDAwMCkgIC8qIFIvVyAqLworI2RlZmluZQkJRTJQX0NNRF9FUENfQ01EX1dSSVRFXwkJKDB4MzAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJCUUyUF9DTURfRVBDX0NNRF9XUkFMXwkJKDB4NDAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJCUUyUF9DTURfRVBDX0NNRF9FUkFTRV8JCSgweDUwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlFMlBfQ01EX0VQQ19DTURfRVJBTF8JCSgweDYwMDAwMDAwKSAgLyogUi9XICovCisjZGVmaW5lCQlFMlBfQ01EX0VQQ19DTURfUkVMT0FEXwkJKDB4NzAwMDAwMDApICAvKiBSL1cgKi8KKyNkZWZpbmUJRTJQX0NNRF9FUENfVElNRU9VVF8JCSgweDAwMDAwMjAwKSAgLyogUk8gKi8KKyNkZWZpbmUJRTJQX0NNRF9NQUNfQUREUl9MT0FERURfCSgweDAwMDAwMTAwKSAgLyogUk8gKi8KKyNkZWZpbmUJRTJQX0NNRF9FUENfQUREUl8JCSgweDAwMDAwMEZGKSAgLyogUi9XICovCisKKyNkZWZpbmUgRTJQX0RBVEEJCSgweEI0KQorI2RlZmluZQlFMlBfREFUQV9FRVBST01fREFUQV8JCSgweDAwMDAwMEZGKSAgLyogUi9XICovCisvKiBlbmQgb2YgTEFOIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJpdCBkZWZpbml0aW9ucyAqLworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNQUMgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIChJbmRpcmVjdCBBZGRyZXNzKQorICogT2Zmc2V0ICh0aHJvdWdoIHRoZSBNQUNfQ1NSIENNRCBhbmQgREFUQSBwb3J0KQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICovCisjZGVmaW5lIE1BQ19DUgkJCSgweDAxKSAgLyogUi9XICovCisKKy8qIE1BQ19DUiAtIE1BQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1BQ19DUl9SWEFMTF8JCQkoMHg4MDAwMDAwMCkKKy8vIFRPRE86IGRlbGV0ZSB0aGlzIGJpdD8gSXQgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgZGF0YSBzaGVldC4KKyNkZWZpbmUgTUFDX0NSX0hCRElTXwkJCSgweDEwMDAwMDAwKQorI2RlZmluZSBNQUNfQ1JfUkNWT1dOXwkJCSgweDAwODAwMDAwKQorI2RlZmluZSBNQUNfQ1JfTE9PUEJLXwkJCSgweDAwMjAwMDAwKQorI2RlZmluZSBNQUNfQ1JfRkRQWF8JCQkoMHgwMDEwMDAwMCkKKyNkZWZpbmUgTUFDX0NSX01DUEFTXwkJCSgweDAwMDgwMDAwKQorI2RlZmluZSBNQUNfQ1JfUFJNU18JCQkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgTUFDX0NSX0lOVkZJTFRfCQkJKDB4MDAwMjAwMDApCisjZGVmaW5lIE1BQ19DUl9QQVNTQkFEXwkJCSgweDAwMDEwMDAwKQorI2RlZmluZSBNQUNfQ1JfSEZJTFRfCQkJKDB4MDAwMDgwMDApCisjZGVmaW5lIE1BQ19DUl9IUEZJTFRfCQkJKDB4MDAwMDIwMDApCisjZGVmaW5lIE1BQ19DUl9MQ09MTF8JCQkoMHgwMDAwMTAwMCkKKyNkZWZpbmUgTUFDX0NSX0JDQVNUXwkJCSgweDAwMDAwODAwKQorI2RlZmluZSBNQUNfQ1JfRElTUlRZXwkJCSgweDAwMDAwNDAwKQorI2RlZmluZSBNQUNfQ1JfUEFEU1RSXwkJCSgweDAwMDAwMTAwKQorI2RlZmluZSBNQUNfQ1JfQk9MTVRfTUFTS18JCSgweDAwMDAwMEMwKQorI2RlZmluZSBNQUNfQ1JfREZDSEtfCQkJKDB4MDAwMDAwMjApCisjZGVmaW5lIE1BQ19DUl9UWEVOXwkJCSgweDAwMDAwMDA4KQorI2RlZmluZSBNQUNfQ1JfUlhFTl8JCQkoMHgwMDAwMDAwNCkKKworI2RlZmluZSBBRERSSAkJCSgweDAyKQkgIC8qIFIvVyBtYXNrIDB4MDAwMEZGRkZVTCAqLworI2RlZmluZSBBRERSTAkJCSgweDAzKQkgIC8qIFIvVyBtYXNrIDB4RkZGRkZGRkZVTCAqLworI2RlZmluZSBIQVNISAkJCSgweDA0KQkgIC8qIFIvVyAqLworI2RlZmluZSBIQVNITAkJCSgweDA1KQkgIC8qIFIvVyAqLworCisjZGVmaW5lIE1JSV9BQ0MJCQkoMHgwNikJICAvKiBSL1cgKi8KKyNkZWZpbmUgTUlJX0FDQ19QSFlfQUREUl8JCSgweDAwMDBGODAwKQorI2RlZmluZSBNSUlfQUNDX01JSVJJTkRBXwkJKDB4MDAwMDA3QzApCisjZGVmaW5lIE1JSV9BQ0NfTUlJX1dSSVRFXwkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1JSV9BQ0NfTUlJX0JVU1lfCQkoMHgwMDAwMDAwMSkKKworI2RlZmluZSBNSUlfREFUQQkJKDB4MDcpCSAgLyogUi9XIG1hc2sgMHgwMDAwRkZGRlVMICovCisKKyNkZWZpbmUgRkxPVwkJCSgweDA4KQkgIC8qIFIvVyAqLworI2RlZmluZSBGTE9XX0ZDUFRfCQkJKDB4RkZGRjAwMDApCisjZGVmaW5lIEZMT1dfRkNQQVNTXwkJCSgweDAwMDAwMDA0KQorI2RlZmluZSBGTE9XX0ZDRU5fCQkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIEZMT1dfRkNCU1lfCQkJKDB4MDAwMDAwMDEpCisKKyNkZWZpbmUgVkxBTjEJCQkoMHgwOSkJICAvKiBSL1cgbWFzayAweDAwMDBGRkZGVUwgKi8KKyNkZWZpbmUgVkxBTjFfVlRJMV8JCQkoMHgwMDAwZmZmZikKKworI2RlZmluZSBWTEFOMgkJCSgweDBBKQkgIC8qIFIvVyBtYXNrIDB4MDAwMEZGRkZVTCAqLworI2RlZmluZSBWTEFOMl9WVEkyXwkJCSgweDAwMDBmZmZmKQorCisjZGVmaW5lIFdVRkYJCQkoMHgwQikJICAvKiBXTyAqLworCisjZGVmaW5lIFdVQ1NSCQkJKDB4MEMpCSAgLyogUi9XICovCisjZGVmaW5lIFdVQ1NSX0dVRV8JCQkoMHgwMDAwMDIwMCkKKyNkZWZpbmUgV1VDU1JfV1VGUl8JCQkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgV1VDU1JfTVBSXwkJCSgweDAwMDAwMDIwKQorI2RlZmluZSBXVUNTUl9XQUtFX0VOXwkJCSgweDAwMDAwMDA0KQorI2RlZmluZSBXVUNTUl9NUEVOXwkJCSgweDAwMDAwMDAyKQorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENoaXAgU3BlY2lmaWMgTUlJIERlZmluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUGh5IHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJpdCBkZWZpbml0aW9ucworICoKKyAqLworCisjZGVmaW5lIFBIWV9NT0RFX0NUUkxfU1RTCSgodTMyKTE3KQkvKiBNb2RlIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisvLyNkZWZpbmUgTU9ERV9DVFJMX1NUU19GQVNUUklQXwkgICgodTE2KTB4NDAwMCkKKyNkZWZpbmUgTU9ERV9DVFJMX1NUU19FRFBXUkRPV05fCSAoKHUxNikweDIwMDApCisvLyNkZWZpbmUgTU9ERV9DVFJMX1NUU19MT1dTUUVOXwkgICAoKHUxNikweDA4MDApCisvLyNkZWZpbmUgTU9ERV9DVFJMX1NUU19NRFBSRUJQXwkgICAoKHUxNikweDA0MDApCisvLyNkZWZpbmUgTU9ERV9DVFJMX1NUU19GQVJMT09QQkFDS18gICgodTE2KTB4MDIwMCkKKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX0ZBU1RFU1RfCSAgICgodTE2KTB4MDEwMCkKKy8vI2RlZmluZSBNT0RFX0NUUkxfU1RTX1JFRkNMS0VOXwkgICAoKHUxNikweDAwMTApCisvLyNkZWZpbmUgTU9ERV9DVFJMX1NUU19QSFlBREJQXwkgICAoKHUxNikweDAwMDgpCisvLyNkZWZpbmUgTU9ERV9DVFJMX1NUU19GT1JDRV9HX0xJTktfICgodTE2KTB4MDAwNCkKKyNkZWZpbmUgTU9ERV9DVFJMX1NUU19FTkVSR1lPTl8JIAkoKHUxNikweDAwMDIpCisKKyNkZWZpbmUgUEhZX0lOVF9TUkMJCQkoKHUzMikyOSkKKyNkZWZpbmUgUEhZX0lOVF9TUkNfRU5FUkdZX09OXwkJCSgodTE2KTB4MDA4MCkKKyNkZWZpbmUgUEhZX0lOVF9TUkNfQU5FR19DT01QXwkJCSgodTE2KTB4MDA0MCkKKyNkZWZpbmUgUEhZX0lOVF9TUkNfUkVNT1RFX0ZBVUxUXwkJKCh1MTYpMHgwMDIwKQorI2RlZmluZSBQSFlfSU5UX1NSQ19MSU5LX0RPV05fCQkJKCh1MTYpMHgwMDEwKQorI2RlZmluZSBQSFlfSU5UX1NSQ19BTkVHX0xQX0FDS18JCSgodTE2KTB4MDAwOCkKKyNkZWZpbmUgUEhZX0lOVF9TUkNfUEFSX0RFVF9GQVVMVF8JCSgodTE2KTB4MDAwNCkKKyNkZWZpbmUgUEhZX0lOVF9TUkNfQU5FR19QR1JYXwkJCSgodTE2KTB4MDAwMikKKworI2RlZmluZSBQSFlfSU5UX01BU0sJCQkoKHUzMikzMCkKKyNkZWZpbmUgUEhZX0lOVF9NQVNLX0VORVJHWV9PTl8JCQkoKHUxNikweDAwODApCisjZGVmaW5lIFBIWV9JTlRfTUFTS19BTkVHX0NPTVBfCQkJKCh1MTYpMHgwMDQwKQorI2RlZmluZSBQSFlfSU5UX01BU0tfUkVNT1RFX0ZBVUxUXwkJKCh1MTYpMHgwMDIwKQorI2RlZmluZSBQSFlfSU5UX01BU0tfTElOS19ET1dOXwkJCSgodTE2KTB4MDAxMCkKKyNkZWZpbmUgUEhZX0lOVF9NQVNLX0FORUdfTFBfQUNLXwkJKCh1MTYpMHgwMDA4KQorI2RlZmluZSBQSFlfSU5UX01BU0tfUEFSX0RFVF9GQVVMVF8JCSgodTE2KTB4MDAwNCkKKyNkZWZpbmUgUEhZX0lOVF9NQVNLX0FORUdfUEdSWF8JCQkoKHUxNikweDAwMDIpCisKKyNkZWZpbmUgUEhZX1NQRUNJQUwJCQkoKHUzMikzMSkKKyNkZWZpbmUgUEhZX1NQRUNJQUxfQU5FR19ET05FXwkJCSgodTE2KTB4MTAwMCkKKyNkZWZpbmUgUEhZX1NQRUNJQUxfUkVTXwkJCSgodTE2KTB4MDA0MCkKKyNkZWZpbmUgUEhZX1NQRUNJQUxfUkVTX01BU0tfCQkJKCh1MTYpMHgwRkUxKQorI2RlZmluZSBQSFlfU1BFQ0lBTF9TUERfCQkJKCh1MTYpMHgwMDFDKQorI2RlZmluZSBQSFlfU1BFQ0lBTF9TUERfMTBIQUxGXwkJCSgodTE2KTB4MDAwNCkKKyNkZWZpbmUgUEhZX1NQRUNJQUxfU1BEXzEwRlVMTF8JCQkoKHUxNikweDAwMTQpCisjZGVmaW5lIFBIWV9TUEVDSUFMX1NQRF8xMDBIQUxGXwkJKCh1MTYpMHgwMDA4KQorI2RlZmluZSBQSFlfU1BFQ0lBTF9TUERfMTAwRlVMTF8JCSgodTE2KTB4MDAxOCkKKworI2RlZmluZSBMQU45MTFYX0lOVEVSTkFMX1BIWV9JRAkJKDB4MDAwN0MwMDApCisKKy8qIENoaXAgSUQgdmFsdWVzICovCisjZGVmaW5lIENISVBfOTExNQkweDExNQorI2RlZmluZSBDSElQXzkxMTYJMHgxMTYKKyNkZWZpbmUgQ0hJUF85MTE3CTB4MTE3CisjZGVmaW5lIENISVBfOTExOAkweDExOAorCitzdHJ1Y3QgY2hpcF9pZCB7CisJdTE2IGlkOworCWNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNoaXBfaWQgY2hpcF9pZHNbXSA9ICB7CisJeyBDSElQXzkxMTUsICJMQU45MTE1IiB9LAorCXsgQ0hJUF85MTE2LCAiTEFOOTExNiIgfSwKKwl7IENISVBfOTExNywgIkxBTjkxMTciIH0sCisJeyBDSElQXzkxMTgsICJMQU45MTE4IiB9LAorCXsgMCwgTlVMTCB9LAorfTsKKworI2RlZmluZSBJU19SRVZfQSh4KQkoKHggJiAweEZGRkYpPT0wKQorCisvKgorICogTWFjcm9zIHRvIGFic3RyYWN0IHJlZ2lzdGVyIGFjY2VzcyBhY2NvcmRpbmcgdG8gdGhlIGRhdGEgYnVzCisgKiBjYXBhYmlsaXRpZXMuICBQbGVhc2UgdXNlIHRob3NlIGFuZCBub3QgdGhlIGluL291dCBwcmltaXRpdmVzLgorICovCisvKiBGSUZPIHJlYWQvd3JpdGUgbWFjcm9zICovCisjZGVmaW5lIFNNQ19QVVNIX0RBVEEocCwgbCkJU01DX291dHNsKCBpb2FkZHIsIFRYX0RBVEFfRklGTywgcCwgKGwpID4+IDIgKQorI2RlZmluZSBTTUNfUFVMTF9EQVRBKHAsIGwpCVNNQ19pbnNsICggaW9hZGRyLCBSWF9EQVRBX0ZJRk8sIHAsIChsKSA+PiAyICkKKyNkZWZpbmUgU01DX1NFVF9UWF9GSUZPKHgpIAlTTUNfb3V0bCggeCwgaW9hZGRyLCBUWF9EQVRBX0ZJRk8gKQorI2RlZmluZSBTTUNfR0VUX1JYX0ZJRk8oKQlTTUNfaW5sKCBpb2FkZHIsIFJYX0RBVEFfRklGTyApCisKKworLyogSS9PIG1hcHBlZCByZWdpc3RlciByZWFkL3dyaXRlIG1hY3JvcyAqLworI2RlZmluZSBTTUNfR0VUX1RYX1NUU19GSUZPKCkJCVNNQ19pbmwoIGlvYWRkciwgVFhfU1RBVFVTX0ZJRk8gKQorI2RlZmluZSBTTUNfR0VUX1JYX1NUU19GSUZPKCkJCVNNQ19pbmwoIGlvYWRkciwgUlhfU1RBVFVTX0ZJRk8gKQorI2RlZmluZSBTTUNfR0VUX1JYX1NUU19GSUZPX1BFRUsoKQlTTUNfaW5sKCBpb2FkZHIsIFJYX1NUQVRVU19GSUZPX1BFRUsgKQorI2RlZmluZSBTTUNfR0VUX1BOKCkJCQkoU01DX2lubCggaW9hZGRyLCBJRF9SRVYgKSA+PiAxNikKKyNkZWZpbmUgU01DX0dFVF9SRVYoKQkJCShTTUNfaW5sKCBpb2FkZHIsIElEX1JFViApICYgMHhGRkZGKQorI2RlZmluZSBTTUNfR0VUX0lSUV9DRkcoKQkJU01DX2lubCggaW9hZGRyLCBJTlRfQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9JUlFfQ0ZHKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBJTlRfQ0ZHICkKKyNkZWZpbmUgU01DX0dFVF9JTlQoKQkJCVNNQ19pbmwoIGlvYWRkciwgSU5UX1NUUyApCisjZGVmaW5lIFNNQ19BQ0tfSU5UKHgpCQkJU01DX291dGwoIHgsIGlvYWRkciwgSU5UX1NUUyApCisjZGVmaW5lIFNNQ19HRVRfSU5UX0VOKCkJCVNNQ19pbmwoIGlvYWRkciwgSU5UX0VOICkKKyNkZWZpbmUgU01DX1NFVF9JTlRfRU4oeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIElOVF9FTiApCisjZGVmaW5lIFNNQ19HRVRfQllURV9URVNUKCkJCVNNQ19pbmwoIGlvYWRkciwgQllURV9URVNUICkKKyNkZWZpbmUgU01DX1NFVF9CWVRFX1RFU1QoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEJZVEVfVEVTVCApCisjZGVmaW5lIFNNQ19HRVRfRklGT19JTlQoKQkJU01DX2lubCggaW9hZGRyLCBGSUZPX0lOVCApCisjZGVmaW5lIFNNQ19TRVRfRklGT19JTlQoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEZJRk9fSU5UICkKKyNkZWZpbmUgU01DX1NFVF9GSUZPX1REQSh4KQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKKwkJaW50IF9fbWFzazsJCQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJXAorCQlfX21hc2sgPSBTTUNfR0VUX0ZJRk9fSU5UKCkgJiB+KDB4RkY8PDI0KTsJXAorCQlTTUNfU0VUX0ZJRk9fSU5UKCBfX21hc2sgfCAoeCk8PDI0ICk7CQlcCisJCWxvY2FsX2lycV9yZXN0b3JlKF9fZmxhZ3MpOwkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBTTUNfU0VUX0ZJRk9fVFNMKHgpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJXAorCQlpbnQgX19tYXNrOwkJCQkJXAorCQlsb2NhbF9pcnFfc2F2ZShfX2ZsYWdzKTsJCQlcCisJCV9fbWFzayA9IFNNQ19HRVRfRklGT19JTlQoKSAmIH4oMHhGRjw8MTYpOwlcCisJCVNNQ19TRVRfRklGT19JTlQoIF9fbWFzayB8ICgoKHgpICYgMHhGRik8PDE2KSk7CVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoX19mbGFncyk7CQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIFNNQ19TRVRfRklGT19SU0EoeCkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQlcCisJCWludCBfX21hc2s7CQkJCQlcCisJCWxvY2FsX2lycV9zYXZlKF9fZmxhZ3MpOwkJCVwKKwkJX19tYXNrID0gU01DX0dFVF9GSUZPX0lOVCgpICYgfigweEZGPDw4KTsJXAorCQlTTUNfU0VUX0ZJRk9fSU5UKCBfX21hc2sgfCAoKCh4KSAmIDB4RkYpPDw4KSk7CVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoX19mbGFncyk7CQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIFNNQ19TRVRfRklGT19SU0woeCkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQlcCisJCWludCBfX21hc2s7CQkJCQlcCisJCWxvY2FsX2lycV9zYXZlKF9fZmxhZ3MpOwkJCVwKKwkJX19tYXNrID0gU01DX0dFVF9GSUZPX0lOVCgpICYgfjB4RkY7CQlcCisJCVNNQ19TRVRfRklGT19JTlQoIF9fbWFzayB8ICgoeCkgJiAweEZGKSk7CVwKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoX19mbGFncyk7CQkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIFNNQ19HRVRfUlhfQ0ZHKCkJCVNNQ19pbmwoIGlvYWRkciwgUlhfQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9SWF9DRkcoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFJYX0NGRyApCisjZGVmaW5lIFNNQ19HRVRfVFhfQ0ZHKCkJCVNNQ19pbmwoIGlvYWRkciwgVFhfQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9UWF9DRkcoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFRYX0NGRyApCisjZGVmaW5lIFNNQ19HRVRfSFdfQ0ZHKCkJCVNNQ19pbmwoIGlvYWRkciwgSFdfQ0ZHICkKKyNkZWZpbmUgU01DX1NFVF9IV19DRkcoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEhXX0NGRyApCisjZGVmaW5lIFNNQ19HRVRfUlhfRFBfQ1RSTCgpCQlTTUNfaW5sKCBpb2FkZHIsIFJYX0RQX0NUUkwgKQorI2RlZmluZSBTTUNfU0VUX1JYX0RQX0NUUkwoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIFJYX0RQX0NUUkwgKQorI2RlZmluZSBTTUNfR0VUX1BNVF9DVFJMKCkJCVNNQ19pbmwoIGlvYWRkciwgUE1UX0NUUkwgKQorI2RlZmluZSBTTUNfU0VUX1BNVF9DVFJMKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBQTVRfQ1RSTCApCisjZGVmaW5lIFNNQ19HRVRfR1BJT19DRkcoKQkJU01DX2lubCggaW9hZGRyLCBHUElPX0NGRyApCisjZGVmaW5lIFNNQ19TRVRfR1BJT19DRkcoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEdQSU9fQ0ZHICkKKyNkZWZpbmUgU01DX0dFVF9SWF9GSUZPX0lORigpCQlTTUNfaW5sKCBpb2FkZHIsIFJYX0ZJRk9fSU5GICkKKyNkZWZpbmUgU01DX1NFVF9SWF9GSUZPX0lORih4KQkJU01DX291dGwoIHgsIGlvYWRkciwgUlhfRklGT19JTkYgKQorI2RlZmluZSBTTUNfR0VUX1RYX0ZJRk9fSU5GKCkJCVNNQ19pbmwoIGlvYWRkciwgVFhfRklGT19JTkYgKQorI2RlZmluZSBTTUNfU0VUX1RYX0ZJRk9fSU5GKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBUWF9GSUZPX0lORiApCisjZGVmaW5lIFNNQ19HRVRfR1BUX0NGRygpCQlTTUNfaW5sKCBpb2FkZHIsIEdQVF9DRkcgKQorI2RlZmluZSBTTUNfU0VUX0dQVF9DRkcoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEdQVF9DRkcgKQorI2RlZmluZSBTTUNfR0VUX1JYX0RST1AoKQkJU01DX2lubCggaW9hZGRyLCBSWF9EUk9QICkKKyNkZWZpbmUgU01DX1NFVF9SWF9EUk9QKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBSWF9EUk9QICkKKyNkZWZpbmUgU01DX0dFVF9NQUNfQ01EKCkJCVNNQ19pbmwoIGlvYWRkciwgTUFDX0NTUl9DTUQgKQorI2RlZmluZSBTTUNfU0VUX01BQ19DTUQoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIE1BQ19DU1JfQ01EICkKKyNkZWZpbmUgU01DX0dFVF9NQUNfREFUQSgpCQlTTUNfaW5sKCBpb2FkZHIsIE1BQ19DU1JfREFUQSApCisjZGVmaW5lIFNNQ19TRVRfTUFDX0RBVEEoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIE1BQ19DU1JfREFUQSApCisjZGVmaW5lIFNNQ19HRVRfQUZDX0NGRygpCQlTTUNfaW5sKCBpb2FkZHIsIEFGQ19DRkcgKQorI2RlZmluZSBTTUNfU0VUX0FGQ19DRkcoeCkJCVNNQ19vdXRsKCB4LCBpb2FkZHIsIEFGQ19DRkcgKQorI2RlZmluZSBTTUNfR0VUX0UyUF9DTUQoKQkJU01DX2lubCggaW9hZGRyLCBFMlBfQ01EICkKKyNkZWZpbmUgU01DX1NFVF9FMlBfQ01EKHgpCQlTTUNfb3V0bCggeCwgaW9hZGRyLCBFMlBfQ01EICkKKyNkZWZpbmUgU01DX0dFVF9FMlBfREFUQSgpCQlTTUNfaW5sKCBpb2FkZHIsIEUyUF9EQVRBICkKKyNkZWZpbmUgU01DX1NFVF9FMlBfREFUQSh4KQkJU01DX291dGwoIHgsIGlvYWRkciwgRTJQX0RBVEEgKQorCisvKiBNQUMgcmVnaXN0ZXIgcmVhZC93cml0ZSBtYWNyb3MgKi8KKyNkZWZpbmUgU01DX0dFVF9NQUNfQ1NSKGEsdikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJCVNNQ19TRVRfTUFDX0NNRChNQUNfQ1NSX0NNRF9DU1JfQlVTWV8gfAkJCVwKKwkJCU1BQ19DU1JfQ01EX1JfTk9UX1dfIHwgKGEpICk7CQkJXAorCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJCXYgPSBTTUNfR0VUX01BQ19EQVRBKCk7CQkJCQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX1NFVF9NQUNfQ1NSKGEsdikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3aGlsZSAoU01DX0dFVF9NQUNfQ01EKCkgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pOwlcCisJCVNNQ19TRVRfTUFDX0RBVEEodik7CQkJCQlcCisJCVNNQ19TRVRfTUFDX0NNRChNQUNfQ1NSX0NNRF9DU1JfQlVTWV8gfCAoYSkgKTsJCVwKKwkJd2hpbGUgKFNNQ19HRVRfTUFDX0NNRCgpICYgTUFDX0NTUl9DTURfQ1NSX0JVU1lfKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIFNNQ19HRVRfTUFDX0NSKHgpCVNNQ19HRVRfTUFDX0NTUiggTUFDX0NSLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9NQUNfQ1IoeCkJU01DX1NFVF9NQUNfQ1NSKCBNQUNfQ1IsIHggKQorI2RlZmluZSBTTUNfR0VUX0FERFJIKHgpCVNNQ19HRVRfTUFDX0NTUiggQUREUkgsIHggKQorI2RlZmluZSBTTUNfU0VUX0FERFJIKHgpCVNNQ19TRVRfTUFDX0NTUiggQUREUkgsIHggKQorI2RlZmluZSBTTUNfR0VUX0FERFJMKHgpCVNNQ19HRVRfTUFDX0NTUiggQUREUkwsIHggKQorI2RlZmluZSBTTUNfU0VUX0FERFJMKHgpCVNNQ19TRVRfTUFDX0NTUiggQUREUkwsIHggKQorI2RlZmluZSBTTUNfR0VUX0hBU0hIKHgpCVNNQ19HRVRfTUFDX0NTUiggSEFTSEgsIHggKQorI2RlZmluZSBTTUNfU0VUX0hBU0hIKHgpCVNNQ19TRVRfTUFDX0NTUiggSEFTSEgsIHggKQorI2RlZmluZSBTTUNfR0VUX0hBU0hMKHgpCVNNQ19HRVRfTUFDX0NTUiggSEFTSEwsIHggKQorI2RlZmluZSBTTUNfU0VUX0hBU0hMKHgpCVNNQ19TRVRfTUFDX0NTUiggSEFTSEwsIHggKQorI2RlZmluZSBTTUNfR0VUX01JSV9BQ0MoeCkJU01DX0dFVF9NQUNfQ1NSKCBNSUlfQUNDLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9NSUlfQUNDKHgpCVNNQ19TRVRfTUFDX0NTUiggTUlJX0FDQywgeCApCisjZGVmaW5lIFNNQ19HRVRfTUlJX0RBVEEoeCkJU01DX0dFVF9NQUNfQ1NSKCBNSUlfREFUQSwgeCApCisjZGVmaW5lIFNNQ19TRVRfTUlJX0RBVEEoeCkJU01DX1NFVF9NQUNfQ1NSKCBNSUlfREFUQSwgeCApCisjZGVmaW5lIFNNQ19HRVRfRkxPVyh4KQkJU01DX0dFVF9NQUNfQ1NSKCBGTE9XLCB4ICkKKyNkZWZpbmUgU01DX1NFVF9GTE9XKHgpCQlTTUNfU0VUX01BQ19DU1IoIEZMT1csIHggKQorI2RlZmluZSBTTUNfR0VUX1ZMQU4xKHgpCVNNQ19HRVRfTUFDX0NTUiggVkxBTjEsIHggKQorI2RlZmluZSBTTUNfU0VUX1ZMQU4xKHgpCVNNQ19TRVRfTUFDX0NTUiggVkxBTjEsIHggKQorI2RlZmluZSBTTUNfR0VUX1ZMQU4yKHgpCVNNQ19HRVRfTUFDX0NTUiggVkxBTjIsIHggKQorI2RlZmluZSBTTUNfU0VUX1ZMQU4yKHgpCVNNQ19TRVRfTUFDX0NTUiggVkxBTjIsIHggKQorI2RlZmluZSBTTUNfU0VUX1dVRkYoeCkJCVNNQ19TRVRfTUFDX0NTUiggV1VGRiwgeCApCisjZGVmaW5lIFNNQ19HRVRfV1VDU1IoeCkJU01DX0dFVF9NQUNfQ1NSKCBXVUNTUiwgeCApCisjZGVmaW5lIFNNQ19TRVRfV1VDU1IoeCkJU01DX1NFVF9NQUNfQ1NSKCBXVUNTUiwgeCApCisKKy8qIFBIWSByZWdpc3RlciByZWFkL3dyaXRlIG1hY3JvcyAqLworI2RlZmluZSBTTUNfR0VUX01JSShhLHBoeSx2KQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1MzIgX192OwkJCQkJXAorCQlkbyB7CQkJCQkJXAorCQkJU01DX0dFVF9NSUlfQUNDKF9fdik7CQkJXAorCQl9IHdoaWxlICggX192ICYgTUlJX0FDQ19NSUlfQlVTWV8gKTsJCVwKKwkJU01DX1NFVF9NSUlfQUNDKCAoKHBoeSk8PDExKSB8ICgoYSk8PDYpIHwJXAorCQkJTUlJX0FDQ19NSUlfQlVTWV8pOwkJCVwKKwkJZG8gewkJCQkJCVwKKwkJCVNNQ19HRVRfTUlJX0FDQyhfX3YpOwkJCVwKKwkJfSB3aGlsZSAoIF9fdiAmIE1JSV9BQ0NfTUlJX0JVU1lfICk7CQlcCisJCVNNQ19HRVRfTUlJX0RBVEEodik7CQkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBTTUNfU0VUX01JSShhLHBoeSx2KQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQl1MzIgX192OwkJCQkJXAorCQlkbyB7CQkJCQkJXAorCQkJU01DX0dFVF9NSUlfQUNDKF9fdik7CQkJXAorCQl9IHdoaWxlICggX192ICYgTUlJX0FDQ19NSUlfQlVTWV8gKTsJCVwKKwkJU01DX1NFVF9NSUlfREFUQSh2KTsJCQkJXAorCQlTTUNfU0VUX01JSV9BQ0MoICgocGh5KTw8MTEpIHwgKChhKTw8NikgfAlcCisJCQlNSUlfQUNDX01JSV9CVVNZXwkgfAkJXAorCQkJTUlJX0FDQ19NSUlfV1JJVEVfICApOwkJCVwKKwkJZG8gewkJCQkJCVwKKwkJCVNNQ19HRVRfTUlJX0FDQyhfX3YpOwkJCVwKKwkJfSB3aGlsZSAoIF9fdiAmIE1JSV9BQ0NfTUlJX0JVU1lfICk7CQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX0dFVF9QSFlfQk1DUihwaHkseCkJCVNNQ19HRVRfTUlJKCBNSUlfQk1DUiwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX1NFVF9QSFlfQk1DUihwaHkseCkJCVNNQ19TRVRfTUlJKCBNSUlfQk1DUiwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX0dFVF9QSFlfQk1TUihwaHkseCkJCVNNQ19HRVRfTUlJKCBNSUlfQk1TUiwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX0dFVF9QSFlfSUQxKHBoeSx4KQkJU01DX0dFVF9NSUkoIE1JSV9QSFlTSUQxLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9JRDIocGh5LHgpCQlTTUNfR0VUX01JSSggTUlJX1BIWVNJRDIsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19HRVRfUEhZX01JSV9BRFYocGh5LHgpCVNNQ19HRVRfTUlJKCBNSUlfQURWRVJUSVNFLCBwaHksIHggKQorI2RlZmluZSBTTUNfU0VUX1BIWV9NSUlfQURWKHBoeSx4KQlTTUNfU0VUX01JSSggTUlJX0FEVkVSVElTRSwgcGh5LCB4ICkKKyNkZWZpbmUgU01DX0dFVF9QSFlfTUlJX0xQQShwaHkseCkJU01DX0dFVF9NSUkoIE1JSV9MUEEsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19TRVRfUEhZX01JSV9MUEEocGh5LHgpCVNNQ19TRVRfTUlJKCBNSUlfTFBBLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9DVFJMX1NUUyhwaHkseCkJU01DX0dFVF9NSUkoIFBIWV9NT0RFX0NUUkxfU1RTLCBwaHksIHggKQorI2RlZmluZSBTTUNfU0VUX1BIWV9DVFJMX1NUUyhwaHkseCkJU01DX1NFVF9NSUkoIFBIWV9NT0RFX0NUUkxfU1RTLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9JTlRfU1JDKHBoeSx4KQlTTUNfR0VUX01JSSggUEhZX0lOVF9TUkMsIHBoeSwgeCApCisjZGVmaW5lIFNNQ19TRVRfUEhZX0lOVF9TUkMocGh5LHgpCVNNQ19TRVRfTUlJKCBQSFlfSU5UX1NSQywgcGh5LCB4ICkKKyNkZWZpbmUgU01DX0dFVF9QSFlfSU5UX01BU0socGh5LHgpCVNNQ19HRVRfTUlJKCBQSFlfSU5UX01BU0ssIHBoeSwgeCApCisjZGVmaW5lIFNNQ19TRVRfUEhZX0lOVF9NQVNLKHBoeSx4KQlTTUNfU0VUX01JSSggUEhZX0lOVF9NQVNLLCBwaHksIHggKQorI2RlZmluZSBTTUNfR0VUX1BIWV9TUEVDSUFMKHBoeSx4KQlTTUNfR0VUX01JSSggUEhZX1NQRUNJQUwsIHBoeSwgeCApCisKKworCisvKiBNaXNjIHJlYWQvd3JpdGUgbWFjcm9zICovCisKKyNpZm5kZWYgU01DX0dFVF9NQUNfQUREUgorI2RlZmluZSBTTUNfR0VUX01BQ19BRERSKGFkZHIpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX3Y7CQkJCVwKKwkJCQkJCQkJXAorCQlTTUNfR0VUX01BQ19DU1IoQUREUkwsIF9fdik7CQkJXAorCQlhZGRyWzBdID0gX192OyBhZGRyWzFdID0gX192ID4+IDg7CQlcCisJCWFkZHJbMl0gPSBfX3YgPj4gMTY7IGFkZHJbM10gPSBfX3YgPj4gMjQ7CVwKKwkJU01DX0dFVF9NQUNfQ1NSKEFERFJILCBfX3YpOwkJCVwKKwkJYWRkcls0XSA9IF9fdjsgYWRkcls1XSA9IF9fdiA+PiA4OwkJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBTTUNfU0VUX01BQ19BRERSKGFkZHIpCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCSBTTUNfU0VUX01BQ19DU1IoQUREUkwsCQkJCVwKKwkJCQkgYWRkclswXSB8CQkJXAorCQkJCShhZGRyWzFdIDw8IDgpIHwJCVwKKwkJCQkoYWRkclsyXSA8PCAxNikgfAkJXAorCQkJCShhZGRyWzNdIDw8IDI0KSk7CQlcCisJCSBTTUNfU0VUX01BQ19DU1IoQUREUkgsIGFkZHJbNF18KGFkZHJbNV0gPDwgOCkpO1wKKwl9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgU01DX1dSSVRFX0VFUFJPTV9DTUQoY21kLCBhZGRyKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd2hpbGUgKFNNQ19HRVRfRTJQX0NNRCgpICYgTUFDX0NTUl9DTURfQ1NSX0JVU1lfKTsJXAorCQlTTUNfU0VUX01BQ19DTUQoTUFDX0NTUl9DTURfUl9OT1RfV18gfCBhICk7CQlcCisJCXdoaWxlIChTTUNfR0VUX01BQ19DTUQoKSAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXyk7CVwKKwl9IHdoaWxlICgwKQorCisjZW5kaWYJIC8qIF9TTUM5MTFYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMgYi9kcml2ZXJzL25ldC9zbWM5MTk0LmMKaW5kZXggZjg2Njk3ZC4uNmNmMTZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTE5NC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwpAQCAtNzMyLDEyICs3MzIsOSBAQAogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgc21jX2luaXQoaW50IHVuaXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc21jX2xvY2FsKSk7Ci0Jc3RhdGljIHN0cnVjdCBkZXZsaXN0ICpzbWNkZXYgPSBzbWNfZGV2bGlzdDsKKwlzdHJ1Y3QgZGV2bGlzdCAqc21jZGV2ID0gc21jX2Rldmxpc3Q7CiAJaW50IGVyciA9IDA7CiAKLSNpZm5kZWYgTk9fQVVUT1BST0JFCi0Jc21jZGV2ID0gc21jX2Rldmxpc3Q7Ci0jZW5kaWYKIAlpZiAoIWRldikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAKQEAgLTE2MDcsNyArMTYwNCw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIlNNQyA5OTE5NCBJUlEgbnVtYmVyIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlmcG9ydCwgIlNNQyA5OTE5NCBpbnRlcmZhY2UgcG9ydCAoMC1kZWZhdWx0LCAxLVRQLCAyLUFVSSkiKTsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaWYgKGlvID09IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggZTFiZTFhZi4uYmY3NzYxMjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMTI5LDYgKzEyOSwyNCBAQAogI2RlZmluZSBTTUNfaW5zYihhLCByLCBwLCBsKQlyZWFkc2IoKGEpICsgKHIpLCBwLCAobCkpCiAjZGVmaW5lIFNNQ19vdXRzYihhLCByLCBwLCBsKQl3cml0ZXNiKChhKSArIChyKSwgcCwgKGwpKQogCisjZWxpZglkZWZpbmVkKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKQorCisjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMAorI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVAkxCisjZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUCTAKKyNkZWZpbmUgU01DX0lPX1NISUZUCQkwCisjZGVmaW5lIFNNQ19OT1dBSVQJCTEKKyNkZWZpbmUgU01DX1VTRV9QWEFfRE1BCQkxCisKKyNkZWZpbmUgU01DX2luYihhLCByKQkJcmVhZGIoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW53KGEsIHIpCQlyZWFkdygoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbmwoYSwgcikJCXJlYWRsKChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dGIodiwgYSwgcikJd3JpdGViKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dHcodiwgYSwgcikJd3JpdGV3KHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dGwodiwgYSwgcikJd3JpdGVsKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkJcmVhZHN3KChhKSArIChyKSwgcCwgbCkKKyNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCXdyaXRlc3coKGEpICsgKHIpLCBwLCBsKQorCiAjZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX0lOTk9LT00pIHx8IFwKIAlkZWZpbmVkKENPTkZJR19NQUNIX01BSU5TVE9ORSkgfHwgXAogCWRlZmluZWQoQ09ORklHX0FSQ0hfUFhBX0lEUCkgfHwgXApAQCAtMjQyLDE1ICsyNjAsMTcgQEAKICNkZWZpbmUgUlBDX0xTQV9ERUZBVUxUCQlSUENfTEVEX1RYX1JYCiAjZGVmaW5lIFJQQ19MU0JfREVGQVVMVAkJUlBDX0xFRF8xMDBfMTAKIAotI2VsaWYJZGVmaW5lZChDT05GSUdfTUFDSF9MUEQ3QTQwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9MUEQ3QTQwNCkKKyNlbGlmICAgZGVmaW5lZChDT05GSUdfTUFDSF9MUEQ3OTUyMCkgXAorICAgICB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0xQRDdBNDAwKSBcCisgICAgIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfTFBEN0E0MDQpCiAKLS8qIFRoZSBMUEQ3QTQwWF9JT0JBUlJJRVIgaXMgbmVjZXNzYXJ5IHRvIG92ZXJjb21lIGEgbWlzbWF0Y2ggYmV0d2VlbgotICogdGhlIHdheSB0aGF0IHRoZSBDUFUgaGFuZGxlcyBjaGlwIHNlbGVjdHMgYW5kIHRoZSB3YXkgdGhhdCB0aGUgU01DCi0gKiBjaGlwIGV4cGVjdHMgdGhlIGNoaXAgc2VsZWN0IHRvIG9wZXJhdGUuICBSZWZlciB0bworLyogVGhlIExQRDdYX0lPQkFSUklFUiBpcyBuZWNlc3NhcnkgdG8gb3ZlcmNvbWUgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICogd2F5IHRoYXQgdGhlIENQVSBoYW5kbGVzIGNoaXAgc2VsZWN0cyBhbmQgdGhlIHdheSB0aGF0IHRoZSBTTUMgY2hpcAorICogZXhwZWN0cyB0aGUgY2hpcCBzZWxlY3QgdG8gb3BlcmF0ZS4gIFJlZmVyIHRvCiAgKiBEb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9JT0JhcnJpZXIgZm9yIGRldGFpbHMuICBUaGUgcmVhZCBmcm9tCi0gKiBJT0JBUlJJRVIgaXMgYSBieXRlIGFzIGEgbGVhc3QtY29tbW9uIGRlbm9taW5hdG9yIG9mIHBvc3NpYmxlCi0gKiByZWdpb25zIHRvIHVzZSBhcyB0aGUgYmFycmllci4gIEl0IHdvdWxkIGJlIHdhc3RlZnVsIHRvIHJlYWQgMzIKLSAqIGJpdHMgZnJvbSBhIGJ5dGUgb3JpZW50ZWQgcmVnaW9uLgorICogSU9CQVJSSUVSIGlzIGEgYnl0ZSwgaW4gb3JkZXIgdGhhdCB3ZSByZWFkIHRoZSBsZWFzdC1jb21tb24KKyAqIGRlbm9taW5hdG9yLiAgSXQgd291bGQgYmUgd2FzdGVmdWwgdG8gcmVhZCAzMiBiaXRzIGZyb20gYW4gOC1iaXQKKyAqIGFjY2Vzc2libGUgcmVnaW9uLgogICoKICAqIFRoZXJlIGlzIG5vIGV4cGxpY2l0IHByb3RlY3Rpb24gYWdhaW5zdCBpbnRlcnJ1cHRzIGludGVydmVuaW5nCiAgKiBiZXR3ZWVuIHRoZSB3cml0ZXcgYW5kIHRoZSBJT0JBUlJJRVIuICBJbiBTTUMgSVNSIHRoZXJlIGlzIGEKQEAgLTI2OSwyNSArMjg5LDM1IEBACiAjZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKICNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAogI2RlZmluZSBTTUNfTk9XQUlUCQkwCi0jZGVmaW5lIExQRDdBNDBYX0lPQkFSUklFUglyZWFkYiAoSU9CQVJSSUVSX1ZJUlQpCisjZGVmaW5lIExQRDdYX0lPQkFSUklFUgkJcmVhZGIgKElPQkFSUklFUl9WSVJUKQogCi0jZGVmaW5lIFNNQ19pbncoYSxyKQkJcmVhZHcgKCh2b2lkKikgKChhKSArIChyKSkpCi0jZGVmaW5lIFNNQ19pbnN3KGEscixwLGwpCXJlYWRzdyAoKHZvaWQqKSAoKGEpICsgKHIpKSwgcCwgbCkKLSNkZWZpbmUgU01DX291dHcodixhLHIpCSAgICAgKHsgd3JpdGV3ICgodiksIChhKSArIChyKSk7IExQRDdBNDBYX0lPQkFSUklFUjsgfSkKKyNkZWZpbmUgU01DX2ludyhhLHIpXAorICAgKHsgdW5zaWduZWQgc2hvcnQgdiA9IHJlYWR3ICgodm9pZCopICgoYSkgKyAocikpKTsgTFBEN1hfSU9CQVJSSUVSOyB2OyB9KQorI2RlZmluZSBTTUNfb3V0dyh2LGEscikJICAoeyB3cml0ZXcgKCh2KSwgKGEpICsgKHIpKTsgTFBEN1hfSU9CQVJSSUVSOyB9KQogCi0jZGVmaW5lIFNNQ19vdXRzdwkJTFBEN0E0MFhfU01DX291dHN3CisjZGVmaW5lIFNNQ19pbnN3CQlMUEQ3X1NNQ19pbnN3CitzdGF0aWMgaW5saW5lIHZvaWQgTFBEN19TTUNfaW5zdyAodW5zaWduZWQgY2hhciogYSwgaW50IHIsCisJCQkJICB1bnNpZ25lZCBjaGFyKiBwLCBpbnQgbCkKK3sKKwl1bnNpZ25lZCBzaG9ydCogcHMgPSAodW5zaWduZWQgc2hvcnQqKSBwOworCXdoaWxlIChsLS0gPiAwKSB7CisJCSpwcysrID0gcmVhZHcgKGEgKyByKTsKKwkJTFBEN1hfSU9CQVJSSUVSOworCX0KK30KIAotc3RhdGljIGlubGluZSB2b2lkIExQRDdBNDBYX1NNQ19vdXRzdyh1bnNpZ25lZCBsb25nIGEsIGludCByLAotCQkJCSAgICAgdW5zaWduZWQgY2hhciogcCwgaW50IGwpCisjZGVmaW5lIFNNQ19vdXRzdwkJTFBEN19TTUNfb3V0c3cKK3N0YXRpYyBpbmxpbmUgdm9pZCBMUEQ3X1NNQ19vdXRzdyAodW5zaWduZWQgY2hhciogYSwgaW50IHIsCisJCQkJICAgdW5zaWduZWQgY2hhciogcCwgaW50IGwpCiB7CiAJdW5zaWduZWQgc2hvcnQqIHBzID0gKHVuc2lnbmVkIHNob3J0KikgcDsKIAl3aGlsZSAobC0tID4gMCkgewogCQl3cml0ZXcgKCpwcysrLCBhICsgcik7Ci0JCUxQRDdBNDBYX0lPQkFSUklFUjsKKwkJTFBEN1hfSU9CQVJSSUVSOwogCX0KIH0KIAotI2RlZmluZSBTTUNfSU5URVJSVVBUX1BSRUFNQkxFCUxQRDdBNDBYX0lPQkFSUklFUgorI2RlZmluZSBTTUNfSU5URVJSVVBUX1BSRUFNQkxFCUxQRDdYX0lPQkFSUklFUgogCiAjZGVmaW5lIFJQQ19MU0FfREVGQVVMVAkJUlBDX0xFRF9UWF9SWAogI2RlZmluZSBSUENfTFNCX0RFRkFVTFQJCVJQQ19MRURfMTAwXzEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKaW5kZXggYjJkZGQ1ZS4uOTI4MmI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYwpAQCAtMzQ1LDkgKzM0NSw5IEBACiAKIHN0YXRpYyBpbnQgYmNtNTQ2MV9lbmFibGVfZmliZXIoc3RydWN0IG1paV9waHkqIHBoeSkKIHsKLSAgICAgICAgcGh5X3dyaXRlKHBoeSwgTUlJX05DT05GSUcsIDB4ZmMwYyk7Ci0gICAgICAgIHBoeV93cml0ZShwaHksIE1JSV9CTUNSLCAweDQxNDApOwotICAgICAgICBwaHlfd3JpdGUocGh5LCBNSUlfTkNPTkZJRywgMHhmYzBiKTsKKwlwaHlfd3JpdGUocGh5LCBNSUlfTkNPTkZJRywgMHhmYzBjKTsKKwlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgMHg0MTQwKTsKKwlwaHlfd3JpdGUocGh5LCBNSUlfTkNPTkZJRywgMHhmYzBiKTsKIAlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgMHgwMTQwKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCA0OWFkNjBiLi5iMmRkZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNjksOCArNjksOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy41OCIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXkgMjIsIDIwMDYiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy42MCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKdW5lIDE3LCAyMDA2IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTIyOSw2ICsyMjksOCBAQAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU1TSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAorCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4NiwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4NywKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4N00sCkBAIC0yOTY1LDYgKzI5NjcsMjcgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciB3ZSBzdXNwZWN0IHRoYXQgdGhlIHN5c3RlbSBjaGlwc2V0IGlzIHJlLQorICogb3JkZXJpbmcgdGhlIHNlcXVlbmNlIG9mIE1NSU8gdG8gdGhlIHR4IHNlbmQgbWFpbGJveC4gVGhlIHN5bXB0b20KKyAqIGlzIGJvZ3VzIHR4IGNvbXBsZXRpb25zLiBXZSB0cnkgdG8gcmVjb3ZlciBieSBzZXR0aW5nIHRoZQorICogVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSIGZsYWcgYW5kIHJlc2V0dGluZyB0aGUgY2hpcCBsYXRlcgorICogaW4gdGhlIHdvcmtxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgdGczX3R4X3JlY292ZXIoc3RydWN0IHRnMyAqdHApCit7CisJQlVHX09OKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKSB8fAorCSAgICAgICB0cC0+d3JpdGUzMl90eF9tYm94ID09IHRnM193cml0ZV9pbmRpcmVjdF9tYm94KTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogVGhlIHN5c3RlbSBtYXkgYmUgcmUtb3JkZXJpbmcgbWVtb3J5LSIKKwkgICAgICAgIm1hcHBlZCBJL08gY3ljbGVzIHRvIHRoZSBuZXR3b3JrIGRldmljZSwgYXR0ZW1wdGluZyB0byAiCisJICAgICAgICJyZWNvdmVyLiBQbGVhc2UgcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHRoZSBkcml2ZXIgbWFpbnRhaW5lciAiCisJICAgICAgICJhbmQgaW5jbHVkZSBzeXN0ZW0gY2hpcHNldCBpbmZvcm1hdGlvbi5cbiIsIHRwLT5kZXYtPm5hbWUpOworCisJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7CisJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HOworCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7Cit9CisKIC8qIFRpZ29uMyBuZXZlciByZXBvcnRzIHBhcnRpYWwgcGFja2V0IHNlbmRzLiAgU28gd2UgZG8gbm90CiAgKiBuZWVkIHNwZWNpYWwgbG9naWMgdG8gaGFuZGxlIFNLQnMgdGhhdCBoYXZlIG5vdCBoYWQgYWxsCiAgKiBvZiB0aGVpciBmcmFncyBzZW50IHlldCwgbGlrZSBTdW5HRU0gZG9lcy4KQEAgLTI5NzcsOSArMzAwMCwxMyBAQAogCXdoaWxlIChzd19pZHggIT0gaHdfaWR4KSB7CiAJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJpID0gJnRwLT50eF9idWZmZXJzW3N3X2lkeF07CiAJCXN0cnVjdCBza19idWZmICpza2IgPSByaS0+c2tiOwotCQlpbnQgaTsKKwkJaW50IGksIHR4X2J1ZyA9IDA7CiAKLQkJQlVHX09OKHNrYiA9PSBOVUxMKTsKKwkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgeworCQkJdGczX3R4X3JlY292ZXIodHApOworCQkJcmV0dXJuOworCQl9CisKIAkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwKIAkJCQkgcGNpX3VubWFwX2FkZHIocmksIG1hcHBpbmcpLAogCQkJCSBza2JfaGVhZGxlbihza2IpLApAQCAtMjk5MCwxMCArMzAxNyw5IEBACiAJCXN3X2lkeCA9IE5FWFRfVFgoc3dfaWR4KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7Ci0JCQlCVUdfT04oc3dfaWR4ID09IGh3X2lkeCk7Ci0KIAkJCXJpID0gJnRwLT50eF9idWZmZXJzW3N3X2lkeF07Ci0JCQlCVUdfT04ocmktPnNrYiAhPSBOVUxMKTsKKwkJCWlmICh1bmxpa2VseShyaS0+c2tiICE9IE5VTEwgfHwgc3dfaWR4ID09IGh3X2lkeCkpCisJCQkJdHhfYnVnID0gMTsKIAogCQkJcGNpX3VubWFwX3BhZ2UodHAtPnBkZXYsCiAJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKHJpLCBtYXBwaW5nKSwKQEAgLTMwMDQsNiArMzAzMCwxMSBAQAogCQl9CiAKIAkJZGV2X2tmcmVlX3NrYihza2IpOworCisJCWlmICh1bmxpa2VseSh0eF9idWcpKSB7CisJCQl0ZzNfdHhfcmVjb3Zlcih0cCk7CisJCQlyZXR1cm47CisJCX0KIAl9CiAKIAl0cC0+dHhfY29ucyA9IHN3X2lkeDsKQEAgLTMzMzEsNiArMzM2MiwxMSBAQAogCS8qIHJ1biBUWCBjb21wbGV0aW9uIHRocmVhZCAqLwogCWlmIChzYmxrLT5pZHhbMF0udHhfY29uc3VtZXIgIT0gdHAtPnR4X2NvbnMpIHsKIAkJdGczX3R4KHRwKTsKKwkJaWYgKHVubGlrZWx5KHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HKSkgeworCQkJbmV0aWZfcnhfY29tcGxldGUobmV0ZGV2KTsKKwkJCXNjaGVkdWxlX3dvcmsoJnRwLT5yZXNldF90YXNrKTsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCiAJLyogcnVuIFJYIHRocmVhZCwgd2l0aGluIHRoZSBib3VuZHMgc2V0IGJ5IE5BUEkuCkBAIC0zMzkxLDEyICszNDI3LDEwIEBACiAJaWYgKGlycV9zeW5jKQogCQl0ZzNfaXJxX3F1aWVzY2UodHApOwogCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwotCXNwaW5fbG9jaygmdHAtPnR4X2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGczX2Z1bGxfdW5sb2NrKHN0cnVjdCB0ZzMgKnRwKQogewotCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CiAJc3Bpbl91bmxvY2tfYmgoJnRwLT5sb2NrKTsKIH0KIApAQCAtMzU3OSw2ICszNjEzLDEzIEBACiAJcmVzdGFydF90aW1lciA9IHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUkVTVEFSVF9USU1FUjsKIAl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUkVTVEFSVF9USU1FUjsKIAorCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykgeworCQl0cC0+d3JpdGUzMl90eF9tYm94ID0gdGczX3dyaXRlMzJfdHhfbWJveDsKKwkJdHAtPndyaXRlMzJfcnhfbWJveCA9IHRnM193cml0ZV9mbHVzaF9yZWczMjsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVI7CisJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkc7CisJfQorCiAJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDApOwogCXRnM19pbml0X2h3KHRwLCAxKTsKIApAQCAtMzcxOCwxNCArMzc1OSwxMSBAQAogCiAJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAotCS8qIE5vIEJIIGRpc2FibGluZyBmb3IgdHhfbG9jayBoZXJlLiAgV2UgYXJlIHJ1bm5pbmcgaW4gQkggZGlzYWJsZWQKLQkgKiBjb250ZXh0IGFuZCBUWCByZWNsYWltIHJ1bnMgdmlhIHRwLT5wb2xsIGluc2lkZSBvZiBhIHNvZnR3YXJlCisJLyogV2UgYXJlIHJ1bm5pbmcgaW4gQkggZGlzYWJsZWQgY29udGV4dCB3aXRoIG5ldGlmX3R4X2xvY2sKKwkgKiBhbmQgVFggcmVjbGFpbSBydW5zIHZpYSB0cC0+cG9sbCBpbnNpZGUgb2YgYSBzb2Z0d2FyZQogCSAqIGludGVycnVwdC4gIEZ1cnRoZXJtb3JlLCBJUlEgcHJvY2Vzc2luZyBydW5zIGxvY2tsZXNzIHNvIHdlIGhhdmUKIAkgKiBubyBJUlEgY29udGV4dCBkZWFkbG9ja3MgdG8gd29ycnkgYWJvdXQgZWl0aGVyLiAgUmVqb2ljZSEKIAkgKi8KLQlpZiAoIXNwaW5fdHJ5bG9jaygmdHAtPnR4X2xvY2spKQotCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKLQogCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkpIHsKIAkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTM3MzQsNyArMzc3Miw2IEBACiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiAiCiAJCQkgICAgICAgInF1ZXVlIGF3YWtlIVxuIiwgZGV2LT5uYW1lKTsKIAkJfQotCQlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0zODE3LDE1ICszODU0LDE2IEBACiAJdHczMl90eF9tYm94KChNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XKSwgZW50cnkpOwogCiAJdHAtPnR4X3Byb2QgPSBlbnRyeTsKLQlpZiAoVFhfQlVGRlNfQVZBSUwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpIHsKKwlpZiAodW5saWtlbHkoVFhfQlVGRlNfQVZBSUwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CisJCXNwaW5fbG9jaygmdHAtPnR4X2xvY2spOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWlmIChUWF9CVUZGU19BVkFJTCh0cCkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCkKIAkJCW5ldGlmX3dha2VfcXVldWUodHAtPmRldik7CisJCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CiAJfQogCiBvdXRfdW5sb2NrOgogICAgIAltbWlvd2IoKTsKLQlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKQEAgLTM4NDQsMTQgKzM4ODIsMTEgQEAKIAogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAKLQkvKiBObyBCSCBkaXNhYmxpbmcgZm9yIHR4X2xvY2sgaGVyZS4gIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkCi0JICogY29udGV4dCBhbmQgVFggcmVjbGFpbSBydW5zIHZpYSB0cC0+cG9sbCBpbnNpZGUgb2YgYSBzb2Z0d2FyZQorCS8qIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkIGNvbnRleHQgd2l0aCBuZXRpZl90eF9sb2NrCisJICogYW5kIFRYIHJlY2xhaW0gcnVucyB2aWEgdHAtPnBvbGwgaW5zaWRlIG9mIGEgc29mdHdhcmUKIAkgKiBpbnRlcnJ1cHQuICBGdXJ0aGVybW9yZSwgSVJRIHByb2Nlc3NpbmcgcnVucyBsb2NrbGVzcyBzbyB3ZSBoYXZlCiAJICogbm8gSVJRIGNvbnRleHQgZGVhZGxvY2tzIHRvIHdvcnJ5IGFib3V0IGVpdGhlci4gIFJlam9pY2UhCiAJICovCi0JaWYgKCFzcGluX3RyeWxvY2soJnRwLT50eF9sb2NrKSkKLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7IAotCiAJaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgewogCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtMzg2MCw3ICszODk1LDYgQEAKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuICIKIAkJCSAgICAgICAicXVldWUgYXdha2UhXG4iLCBkZXYtPm5hbWUpOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTM5OTgsMTUgKzQwMzIsMTYgQEAKIAl0dzMyX3R4X21ib3goKE1BSUxCT1hfU05ESE9TVF9QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1cpLCBlbnRyeSk7CiAKIAl0cC0+dHhfcHJvZCA9IGVudHJ5OwotCWlmIChUWF9CVUZGU19BVkFJTCh0cCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkgeworCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTCh0cCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKKwkJc3Bpbl9sb2NrKCZ0cC0+dHhfbG9jayk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJaWYgKFRYX0JVRkZTX0FWQUlMKHRwKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKQogCQkJbmV0aWZfd2FrZV9xdWV1ZSh0cC0+ZGV2KTsKKwkJc3Bpbl91bmxvY2soJnRwLT50eF9sb2NrKTsKIAl9CiAKIG91dF91bmxvY2s6CiAgICAgCW1taW93YigpOwotCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIApAQCAtNDQ4NSw5ICs0NTIwLDggQEAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGVfc2lnX3ByZV9yZXNldChzdHJ1Y3QgdGczICp0cCwgaW50IGtpbmQpCiB7Ci0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkpCi0JCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZJUk1XQVJFX01CT1gsCi0JCQkgICAgICBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YX01BR0lDMSk7CisJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRklSTVdBUkVfTUJPWCwKKwkJICAgICAgTklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0UpIHsKIAkJc3dpdGNoIChraW5kKSB7CkBAIC00NTY4LDEzICs0NjAyLDEyIEBACiAJdm9pZCAoKndyaXRlX29wKShzdHJ1Y3QgdGczICosIHUzMiwgdTMyKTsKIAlpbnQgaTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpKSB7Ci0JCXRnM19udnJhbV9sb2NrKHRwKTsKLQkJLyogTm8gbWF0Y2hpbmcgdGczX252cmFtX3VubG9jaygpIGFmdGVyIHRoaXMgYmVjYXVzZQotCQkgKiBjaGlwIHJlc2V0IGJlbG93IHdpbGwgdW5kbyB0aGUgbnZyYW0gbG9jay4KLQkJICovCi0JCXRwLT5udnJhbV9sb2NrX2NudCA9IDA7Ci0JfQorCXRnM19udnJhbV9sb2NrKHRwKTsKKworCS8qIE5vIG1hdGNoaW5nIHRnM19udnJhbV91bmxvY2soKSBhZnRlciB0aGlzIGJlY2F1c2UKKwkgKiBjaGlwIHJlc2V0IGJlbG93IHdpbGwgdW5kbyB0aGUgbnZyYW0gbG9jay4KKwkgKi8KKwl0cC0+bnZyYW1fbG9ja19jbnQgPSAwOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUyIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CkBAIC00NzI3LDIwICs0NzYwLDI1IEBACiAJCXR3MzJfZihNQUNfTU9ERSwgMCk7CiAJdWRlbGF5KDQwKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpKSB7Ci0JCS8qIFdhaXQgZm9yIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKLQkJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fRklSTVdBUkVfTUJPWCwgJnZhbCk7Ci0JCQlpZiAodmFsID09IH5OSUNfU1JBTV9GSVJNV0FSRV9NQk9YX01BR0lDMSkKLQkJCQlicmVhazsKLQkJCXVkZWxheSgxMCk7Ci0JCX0KLQkJaWYgKGkgPj0gMTAwMDAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJ0ZzNfcmVzZXRfaHcgdGltZWQgb3V0IGZvciAlcywgIgotCQkJICAgICAgICJmaXJtd2FyZSB3aWxsIG5vdCByZXN0YXJ0IG1hZ2ljPSUwOHhcbiIsCi0JCQkgICAgICAgdHAtPmRldi0+bmFtZSwgdmFsKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9CisJLyogV2FpdCBmb3IgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gdG8gY29tcGxldGUuICovCisJZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fRklSTVdBUkVfTUJPWCwgJnZhbCk7CisJCWlmICh2YWwgPT0gfk5JQ19TUkFNX0ZJUk1XQVJFX01CT1hfTUFHSUMxKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCisJLyogQ2hpcCBtaWdodCBub3QgYmUgZml0dGVkIHdpdGggZmlybWFyZS4gIFNvbWUgU3VuIG9uYm9hcmQKKwkgKiBwYXJ0cyBhcmUgY29uZmlndXJlZCBsaWtlIHRoYXQuICBTbyBkb24ndCBzaWduYWwgdGhlIHRpbWVvdXQKKwkgKiBvZiB0aGUgYWJvdmUgbG9vcCBhcyBhbiBlcnJvciwgYnV0IGRvIHJlcG9ydCB0aGUgbGFjayBvZgorCSAqIHJ1bm5pbmcgZmlybXdhcmUgb25jZS4KKwkgKi8KKwlpZiAoaSA+PSAxMDAwMDAgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVEKSkgeworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRDsKKworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IE5vIGZpcm13YXJlIHJ1bm5pbmcuXG4iLAorCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CiAJfQogCiAJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSAmJgpAQCAtOTA3NSw5ICs5MTEzLDYgQEAKIHsKIAlpbnQgajsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKQotCQlyZXR1cm47Ci0KIAl0dzMyX2YoR1JDX0VFUFJPTV9BRERSLAogCSAgICAgKEVFUFJPTV9BRERSX0ZTTV9SRVNFVCB8CiAJICAgICAgKEVFUFJPTV9ERUZBVUxUX0NMT0NLX1BFUklPRCA8PApAQCAtOTIxMCwxMSArOTI0NSw2IEBACiB7CiAJaW50IHJldDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkF0dGVtcHQgdG8gZG8gbnZyYW1fcmVhZCBvbiBTdW4gNTcwWFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCiAJCXJldHVybiB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20odHAsIG9mZnNldCwgdmFsKTsKIApAQCAtOTQ0NywxMSArOTQ3Nyw2IEBACiB7CiAJaW50IHJldDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkF0dGVtcHQgdG8gZG8gbnZyYW1fd3JpdGUgb24gU3VuIDU3MFhcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSB7CiAJCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsICYKIAkJICAgICAgIH5HUkNfTENMQ1RSTF9HUElPX09VVFBVVDEpOwpAQCAtOTU3OCwxNSArOTYwMywxOSBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NSVNDX0hPU1RfQ1RSTCwKIAkJCSAgICAgICB0cC0+bWlzY19ob3N0X2N0cmwpOwogCisJLyogVGhlIG1lbW9yeSBhcmJpdGVyIGhhcyB0byBiZSBlbmFibGVkIGluIG9yZGVyIGZvciBTUkFNIGFjY2Vzc2VzCisJICogdG8gc3VjY2VlZC4gIE5vcm1hbGx5IG9uIHBvd2VydXAgdGhlIHRnMyBjaGlwIGZpcm13YXJlIHdpbGwgbWFrZQorCSAqIHN1cmUgaXQgaXMgZW5hYmxlZCwgYnV0IG90aGVyIGVudGl0aWVzIHN1Y2ggYXMgc3lzdGVtIG5ldGJvb3QKKwkgKiBjb2RlIG1pZ2h0IGRpc2FibGUgaXQuCisJICovCisJdmFsID0gdHIzMihNRU1BUkJfTU9ERSk7CisJdHczMihNRU1BUkJfTU9ERSwgdmFsIHwgTUVNQVJCX01PREVfRU5BQkxFKTsKKwogCXRwLT5waHlfaWQgPSBQSFlfSURfSU5WQUxJRDsKIAl0cC0+bGVkX2N0cmwgPSBMRURfQ1RSTF9NT0RFX1BIWV8xOwogCi0JLyogRG8gbm90IGV2ZW4gdHJ5IHBva2luZyBhcm91bmQgaW4gaGVyZSBvbiBTdW4gcGFydHMuICAqLwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSB7Ci0JCS8qIEFsbCBTVU4gY2hpcHMgYXJlIGJ1aWx0LWluIExPTXMuICovCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7Ci0JCXJldHVybjsKLQl9CisJLyogQXNzdW1lIGFuIG9uYm9hcmQgZGV2aWNlIGJ5IGRlZmF1bHQuICAqLworCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7CiAKIAl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfU0lHLCAmdmFsKTsKIAlpZiAodmFsID09IE5JQ19TUkFNX0RBVEFfU0lHX01BR0lDKSB7CkBAIC05Njg2LDYgKzk3MTUsOCBAQAogCiAJCWlmIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfRUVQUk9NX1dQKQogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKKwkJZWxzZQorCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7CiAKIAkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19BU0ZfRU5BQkxFKSB7CiAJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VOQUJMRV9BU0Y7CkBAIC05ODM0LDE2ICs5ODY1LDggQEAKIAlpbnQgaTsKIAl1MzIgbWFnaWM7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkgewotCQkvKiBTdW4gZGVjaWRlZCBub3QgdG8gcHV0IHRoZSBuZWNlc3NhcnkgYml0cyBpbiB0aGUKLQkJICogTlZSQU0gb2YgdGhlaXIgb25ib2FyZCB0ZzMgcGFydHMgOigKLQkJICovCi0JCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJTdW4gNTcwWCIpOwotCQlyZXR1cm47Ci0JfQotCiAJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4MCwgJm1hZ2ljKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dF9ub3RfZm91bmQ7CiAKIAlpZiAobWFnaWMgPT0gVEczX0VFUFJPTV9NQUdJQykgewogCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDQpIHsKQEAgLTk4NzQsNiArOTg5Nyw5IEBACiAJCQkJCWJyZWFrOwogCQkJCW1zbGVlcCgxKTsKIAkJCX0KKwkJCWlmICghKHRtcDE2ICYgMHg4MDAwKSkKKwkJCQlnb3RvIG91dF9ub3RfZm91bmQ7CisKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgdnBkX2NhcCArIFBDSV9WUERfREFUQSwKIAkJCQkJICAgICAgJnRtcCk7CiAJCQl0bXAgPSBjcHVfdG9fbGUzMih0bXApOwpAQCAtOTk2NSwzNyArOTk5MSw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1NQQVJDNjQKLXN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19pc19zdW5fNTcwWChzdHJ1Y3QgdGczICp0cCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wZGV2OwotCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3AgPSBwZGV2LT5zeXNkYXRhOwotCi0JaWYgKHBjcCAhPSBOVUxMKSB7Ci0JCWludCBub2RlID0gcGNwLT5wcm9tX25vZGU7Ci0JCXUzMiB2ZW5pZDsKLQkJaW50IGVycjsKLQotCQllcnIgPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsICJzdWJzeXN0ZW0tdmVuZG9yLWlkIiwKLQkJCQkgICAgICAgKGNoYXIgKikgJnZlbmlkLCBzaXplb2YodmVuaWQpKTsKLQkJaWYgKGVyciA9PSAwIHx8IGVyciA9PSAtMSkKLQkJCXJldHVybiAwOwotCQlpZiAodmVuaWQgPT0gUENJX1ZFTkRPUl9JRF9TVU4pCi0JCQlyZXR1cm4gMTsKLQotCQkvKiBURzMgY2hpcHMgb25ib2FyZCB0aGUgU3VuQmxhZGUtMjUwMCBkb24ndCBoYXZlIHRoZQotCQkgKiBzdWJzeXN0ZW0tdmVuZG9yLWlkIHNldCB0byBQQ0lfVkVORE9SX0lEX1NVTiBidXQgdGhleQotCQkgKiBhcmUgZGlzdGluZ3Vpc2hhYmxlIGZyb20gbm9uLVN1biB2YXJpYW50cyBieSBiZWluZwotCQkgKiBuYW1lZCAibmV0d29yayIgYnkgdGhlIGZpcm13YXJlLiAgTm9uLVN1biBjYXJkcyB3aWxsCi0JCSAqIHNob3cgdXAgYXMgYmVpbmcgbmFtZWQgImV0aGVybmV0Ii4KLQkJICovCi0JCWlmICghc3RyY21wKHBjcC0+cHJvbV9uYW1lLCAibmV0d29yayIpKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19nZXRfaW52YXJpYW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKIAlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd3JpdGVfcmVvcmRlcl9jaGlwc2V0c1tdID0gewpAQCAtMTAwMTIsMTEgKzEwMDA3LDYgQEAKIAl1MTYgcGNpX2NtZDsKIAlpbnQgZXJyOwogCi0jaWZkZWYgQ09ORklHX1NQQVJDNjQKLQlpZiAodGczX2lzX3N1bl81NzBYKHRwKSkKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfU1VOXzU3MFg7Ci0jZW5kaWYKLQogCS8qIEZvcmNlIG1lbW9yeSB3cml0ZSBpbnZhbGlkYXRlIG9mZi4gIElmIHdlIGxlYXZlIGl0IG9uLAogCSAqIHRoZW4gb24gNTcwMF9CWCBjaGlwcyB3ZSBoYXZlIHRvIGVuYWJsZSBhIHdvcmthcm91bmQuCiAJICogVGhlIHdvcmthcm91bmQgaXMgdG8gc2V0IHRoZSBURzNQQ0lfRE1BX1JXX0NUUkwgYm91bmRhcnkKQEAgLTEwMzEyLDggKzEwMzAyLDcgQEAKIAlpZiAodHAtPndyaXRlMzIgPT0gdGczX3dyaXRlX2luZGlyZWN0X3JlZzMyIHx8CiAJICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgJiYKIAkgICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fAotCSAgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfU1VOXzU3MFgpKQorCSAgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkpCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHOwogCiAJLyogR2V0IGVlcHJvbSBodyBjb25maWcgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpLgpAQCAtMTA1OTQsOCArMTA1ODMsNyBAQAogI2VuZGlmCiAKIAltYWNfb2Zmc2V0ID0gMHg3YzsKLQlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0ICYmCi0JICAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxHMl9TVU5fNTcwWCkpIHx8CisJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCkgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKIAkJaWYgKHRyMzIoVEczUENJX0RVQUxfTUFDX0NUUkwpICYgRFVBTF9NQUNfQ1RSTF9JRCkKIAkJCW1hY19vZmZzZXQgPSAweGNjOwpAQCAtMTA2MjIsOCArMTA2MTAsNyBAQAogCX0KIAlpZiAoIWFkZHJfb2spIHsKIAkJLyogTmV4dCwgdHJ5IE5WUkFNLiAqLwotCQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMRzJfU1VOXzU3MFgpICYmCi0JCSAgICAhdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyAwLCAmaGkpICYmCisJCWlmICghdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyAwLCAmaGkpICYmCiAJCSAgICAhdGczX252cmFtX3JlYWQodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7CiAJCQlkZXYtPmRldl9hZGRyWzBdID0gKChoaSA+PiAxNikgJiAweGZmKTsKIAkJCWRldi0+ZGV2X2FkZHJbMV0gPSAoKGhpID4+IDI0KSAmIDB4ZmYpOwpAQCAtMTEyOTEsNyArMTEyNzgsNiBAQAogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CiAjaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKIAlkZXYtPnZsYW5fcnhfcmVnaXN0ZXIgPSB0ZzNfdmxhbl9yeF9yZWdpc3RlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggMGUyOWI4OC4uODIwOWRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTIwNzQsMTIgKzIwNzQsMjIgQEAKIAogCS8qIFNNUCBsb2NraW5nIHN0cmF0ZWd5OgogCSAqCi0JICogbG9jazogSGVsZCBkdXJpbmcgYWxsIG9wZXJhdGlvbnMgZXhjZXB0IFRYIHBhY2tldAotCSAqICAgICAgIHByb2Nlc3NpbmcuCisJICogbG9jazogSGVsZCBkdXJpbmcgcmVzZXQsIFBIWSBhY2Nlc3MsIHRpbWVyLCBhbmQgd2hlbgorCSAqICAgICAgIHVwZGF0aW5nIHRnM19mbGFncyBhbmQgdGczX2ZsYWdzMi4KIAkgKgotCSAqIHR4X2xvY2s6IEhlbGQgZHVyaW5nIHRnM19zdGFydF94bWl0IGFuZCB0ZzNfdHgKKwkgKiB0eF9sb2NrOiBIZWxkIGR1cmluZyB0ZzNfc3RhcnRfeG1pdCBhbmQgdGczX3R4IG9ubHkKKwkgKiAgICAgICAgICB3aGVuIGNhbGxpbmcgbmV0aWZfW3N0YXJ0fHN0b3BdX3F1ZXVlLgorCSAqICAgICAgICAgIHRnM19zdGFydF94bWl0IGlzIHByb3RlY3RlZCBieSBuZXRpZl90eF9sb2NrLgogCSAqCiAJICogQm90aCBvZiB0aGVzZSBsb2NrcyBhcmUgdG8gYmUgaGVsZCB3aXRoIEJIIHNhZmV0eS4KKwkgKgorCSAqIEJlY2F1c2UgdGhlIElSUSBoYW5kbGVyLCB0ZzNfcG9sbCwgYW5kIHRnM19zdGFydF94bWl0CisJICogYXJlIHJ1bm5pbmcgbG9ja2xlc3MsIGl0IGlzIG5lY2Vzc2FyeSB0byBjb21wbGV0ZWx5CisJICogcXVpZXNjZSB0aGUgY2hpcCB3aXRoIHRnM19uZXRpZl9zdG9wIGFuZCB0ZzNfZnVsbF9sb2NrCisJICogYmVmb3JlIHJlY29uZmlndXJpbmcgdGhlIGRldmljZS4KKwkgKgorCSAqIGluZGlyZWN0X2xvY2s6IEhlbGQgd2hlbiBhY2Nlc3NpbmcgcmVnaXN0ZXJzIGluZGlyZWN0bHkKKwkgKiAgICAgICAgICAgICAgICB3aXRoIElSUSBkaXNhYmxpbmcuCiAJICovCiAJc3BpbmxvY2tfdAkJCWxvY2s7CiAJc3BpbmxvY2tfdAkJCWluZGlyZWN0X2xvY2s7CkBAIC0yMTU1LDExICsyMTY1LDcgQEAKICNkZWZpbmUgVEczX0ZMQUdfRU5BQkxFX0FTRgkJMHgwMDAwMDAyMAogI2RlZmluZSBURzNfRkxBR181NzAxX1JFR19XUklURV9CVUcJMHgwMDAwMDA0MAogI2RlZmluZSBURzNfRkxBR19QT0xMX1NFUkRFUwkJMHgwMDAwMDA4MAotI2lmIGRlZmluZWQoQ09ORklHX1g4NikKICNkZWZpbmUgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSCTB4MDAwMDAxMDAKLSNlbHNlCi0jZGVmaW5lIFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUgkwCS8qIGRpc2FibGVzIGNvZGUgdG9vICovCi0jZW5kaWYKICNkZWZpbmUgVEczX0ZMQUdfUENJWF9UQVJHRVRfSFdCVUcJMHgwMDAwMDIwMAogI2RlZmluZSBURzNfRkxBR19XT0xfU1BFRURfMTAwTUIJMHgwMDAwMDQwMAogI2RlZmluZSBURzNfRkxBR19XT0xfRU5BQkxFCQkweDAwMDAwODAwCkBAIC0yMTcyLDYgKzIxNzgsNyBAQAogI2RlZmluZSBURzNfRkxBR19QQ0lfSElHSF9TUEVFRAkJMHgwMDA0MDAwMAogI2RlZmluZSBURzNfRkxBR19QQ0lfMzJCSVQJCTB4MDAwODAwMDAKICNkZWZpbmUgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHCTB4MDAxMDAwMDAKKyNkZWZpbmUgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORwkweDAwMjAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1NFUkRFU19XT0xfQ0FQCQkweDAwNDAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFCTB4MDA4MDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfMTBfMTAwX09OTFkJCTB4MDEwMDAwMDAKQEAgLTIxODQsNyArMjE5MSw3IEBACiAjZGVmaW5lIFRHM19GTEFHX0lOSVRfQ09NUExFVEUJCTB4ODAwMDAwMDAKIAl1MzIJCQkJdGczX2ZsYWdzMjsKICNkZWZpbmUgVEczX0ZMRzJfUkVTVEFSVF9USU1FUgkJMHgwMDAwMDAwMQotI2RlZmluZSBURzNfRkxHMl9TVU5fNTcwWAkJMHgwMDAwMDAwMgorLyoJCQkJCTB4MDAwMDAwMDIgYXZhaWxhYmxlICovCiAjZGVmaW5lIFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVECTB4MDAwMDAwMDQKICNkZWZpbmUgVEczX0ZMRzJfSVNfNTc4OAkJMHgwMDAwMDAwOAogI2RlZmluZSBURzNfRkxHMl9NQVhfUlhQRU5EXzY0CQkweDAwMDAwMDEwCkBAIC0yMjE2LDYgKzIyMjMsNyBAQAogI2RlZmluZSBURzNfRkxHMl9IV19UU08JCQkoVEczX0ZMRzJfSFdfVFNPXzEgfCBURzNfRkxHMl9IV19UU09fMikKICNkZWZpbmUgVEczX0ZMRzJfMVNIT1RfTVNJCQkweDEwMDAwMDAwCiAjZGVmaW5lIFRHM19GTEcyX1BIWV9KSVRURVJfQlVHCQkweDIwMDAwMDAwCisjZGVmaW5lIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVECTB4NDAwMDAwMDAKIAogCXUzMgkJCQlzcGxpdF9tb2RlX21heF9yZXFzOwogI2RlZmluZSBTUExJVF9NT0RFXzU3MDRfTUFYX1JFUQkJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IGUzZGQxNDQuLjVmNzQzYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTIyNywxMiArMjI3LDEyIEBACiAJU1JPTUMwSW5mb0xlYWYJCT0gMjcsCiAJTWVkaWFCbG9ja01hc2sJCT0gMHgzZiwKIAlNZWRpYUN1c3RvbUNTUnMJCT0gKDEgPDwgNiksCi0JCisKIAkvKiBQQ0lQTSBiaXRzICovCiAJUE1fU2xlZXAJCT0gKDEgPDwgMzEpLAogCVBNX1Nub296ZQkJPSAoMSA8PCAzMCksCiAJUE1fTWFzawkJCT0gUE1fU2xlZXAgfCBQTV9Tbm9vemUsCi0JCisKIAkvKiBTSUFTdGF0dXMgYml0cyAqLwogCU5XYXlTdGF0ZQkJPSAoMSA8PCAxNCkgfCAoMSA8PCAxMykgfCAoMSA8PCAxMiksCiAJTldheVJlc3RhcnQJCT0gKDEgPDwgMTIpLApAQCAtODU4LDcgKzg1OCw3IEBACiAJCQlyZXR1cm47CiAJCWNwdV9yZWxheCgpOwogCX0KLQkKKwogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0aW1lb3V0IGV4cGlyZWQgc3RvcHBpbmcgRE1BXG4iLCBkZS0+ZGV2LT5uYW1lKTsKIH0KIApAQCAtOTMxLDcgKzkzMSw3IEBACiAJCW1hY21vZGUgfD0gRnVsbER1cGxleDsKIAllbHNlCiAJCW1hY21vZGUgJj0gfkZ1bGxEdXBsZXg7Ci0JCisKIAlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXQgbGluayAlc1xuIgogCQkgICAgICAgS0VSTl9JTkZPICIlczogICAgbW9kZSAweCV4LCBzaWEgMHgleCwweCV4LDB4JXgsMHgleFxuIgpAQCAtOTY2LDkgKzk2Niw5IEBACiAJdTMyIHN0YXR1cyA9IGRyMzIoU0lBU3RhdHVzKTsKIAl1bnNpZ25lZCBpbnQgY2FycmllcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCiAJY2FycmllciA9IChzdGF0dXMgJiBOZXRDeG5FcnIpID8gMCA6IDE7Ci0JCQorCiAJaWYgKGNhcnJpZXIpIHsKIAkJaWYgKGRlLT5tZWRpYV90eXBlICE9IERFX01FRElBX0FVSSAmJiAoc3RhdHVzICYgTGlua0ZhaWxTdGF0dXMpKQogCQkJZ290byBub19saW5rX3lldDsKQEAgLTk4NSw3ICs5ODUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JZGVfbGlua19kb3duKGRlKTsJCisJZGVfbGlua19kb3duKGRlKTsKIAogCWlmIChkZS0+bWVkaWFfbG9jaykKIAkJcmV0dXJuOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAKIAkJCXJldHVybiAwOwogCQlicmVhazsKIAl9Ci0JCisKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTA1MCw5ICsxMDUwLDkgQEAKIAl1MzIgc3RhdHVzID0gZHIzMihTSUFTdGF0dXMpOwogCXVuc2lnbmVkIGludCBjYXJyaWVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAljYXJyaWVyID0gKHN0YXR1cyAmIE5ldEN4bkVycikgPyAwIDogMTsKLQkJCisKIAlpZiAoY2FycmllcikgewogCQlpZiAoKGRlLT5tZWRpYV90eXBlID09IERFX01FRElBX1RQX0FVVE8gfHwKIAkJICAgICBkZS0+bWVkaWFfdHlwZSA9PSBERV9NRURJQV9UUCB8fApAQCAtMTA3Miw3ICsxMDcyLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWRlX2xpbmtfZG93bihkZSk7CQorCWRlX2xpbmtfZG93bihkZSk7CiAKIAkvKiBpZiBtZWRpYSB0eXBlIGxvY2tlZCwgZG9uJ3Qgc3dpdGNoIG1lZGlhICovCiAJaWYgKGRlLT5tZWRpYV9sb2NrKQpAQCAtMTEyNCw3ICsxMTI0LDcgQEAKIAkJdTMyIG5leHRfc3RhdGVzW10gPSB7IERFX01FRElBX0FVSSwgREVfTUVESUFfQk5DLCBERV9NRURJQV9UUF9BVVRPIH07CiAJCWRlX25leHRfbWVkaWEoZGUsIG5leHRfc3RhdGVzLCBBUlJBWV9TSVpFKG5leHRfc3RhdGVzKSk7CiAJfQotCQorCiBzZXRfbWVkaWE6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlLT5sb2NrLCBmbGFncyk7CiAJZGVfc3RvcF9yeHR4KGRlKTsKQEAgLTExNDgsNyArMTE0OCw3IEBACiAJCW1vZF90aW1lcigmZGUtPm1lZGlhX3RpbWVyLCBqaWZmaWVzICsgREVfVElNRVJfTElOSyk7CiAJCXJldHVybjsKIAl9Ci0JCisKIAlCVUdfT04oIShzdGF0dXMgJiBMaW5rRmFpbCkpOwogCiAJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGUtPmRldikpIHsKQEAgLTEyMjcsNyArMTIyNyw3IEBACiAJaW50IHJjOwogCiAJZGVfYWRhcHRlcl93YWtlKGRlKTsKLQkKKwogCW1hY21vZGUgPSBkcjMyKE1hY01vZGUpICYgfk1hY01vZGVDbGVhcjsKIAogCXJjID0gZGVfcmVzZXRfbWFjKGRlKTsKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGUtPmxvY2ssIGZsYWdzKTsKLQkKKwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCiAJZGVfZnJlZV9yaW5ncyhkZSk7CkBAIC0xNDQxLDcgKzE0NDEsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZkZS0+bG9jayk7CiAJZW5hYmxlX2lycShkZXYtPmlycSk7Ci0JCQorCiAJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCiAJX19kZV9nZXRfc3RhdHMoZGUpOwogCkBAIC0xNDUxLDcgKzE0NTEsNyBAQAogCWRlX2luaXRfcmluZ3MoZGUpOwogCiAJZGVfaW5pdF9odyhkZSk7Ci0JCisKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKQEAgLTE0NTksNyArMTQ1OSw3IEBACiB7CiAJaW50IGk7CiAJdTMyICpyYnVmID0gKHUzMiAqKWJ1ZjsKLQkKKwogCS8qIHJlYWQgYWxsIENTUnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgREVfTlVNX1JFR1M7IGkrKykKIAkJcmJ1ZltpXSA9IGRyMzIoaSAqIDgpOwpAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJZWNtZC0+cGh5X2FkZHJlc3MgPSAwOwogCWVjbWQtPmFkdmVydGlzaW5nID0gZGUtPm1lZGlhX2FkdmVydGlzZTsKLQkKKwogCXN3aXRjaCAoZGUtPm1lZGlhX3R5cGUpIHsKIAljYXNlIERFX01FRElBX0FVSToKIAkJZWNtZC0+cG9ydCA9IFBPUlRfQVVJOwpAQCAtMTQ4OSw3ICsxNDg5LDcgQEAKIAkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKIAkJYnJlYWs7CiAJfQotCQorCiAJaWYgKGRyMzIoTWFjTW9kZSkgJiBGdWxsRHVwbGV4KQogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAllbHNlCkBAIC0xNTI5LDcgKzE1MjksNyBAQAogCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCiAJICAgICghKGVjbWQtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF9BdXRvbmVnKSkpCiAJCXJldHVybiAtRUlOVkFMOwotCQorCiAJc3dpdGNoIChlY21kLT5wb3J0KSB7CiAJY2FzZSBQT1JUX0FVSToKIAkJbmV3X21lZGlhID0gREVfTUVESUFfQVVJOwpAQCAtMTU1NCwyMiArMTU1NCwyMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KLQkKKwogCW1lZGlhX2xvY2sgPSAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgPyAwIDogMTsKLQkKKwogCWlmICgobmV3X21lZGlhID09IGRlLT5tZWRpYV90eXBlKSAmJgogCSAgICAobWVkaWFfbG9jayA9PSBkZS0+bWVkaWFfbG9jaykgJiYKIAkgICAgKGVjbWQtPmFkdmVydGlzaW5nID09IGRlLT5tZWRpYV9hZHZlcnRpc2UpKQogCQlyZXR1cm4gMDsgLyogbm90aGluZyB0byBjaGFuZ2UgKi8KLQkgICAgCisKIAlkZV9saW5rX2Rvd24oZGUpOwogCWRlX3N0b3Bfcnh0eChkZSk7Ci0JCisKIAlkZS0+bWVkaWFfdHlwZSA9IG5ld19tZWRpYTsKIAlkZS0+bWVkaWFfbG9jayA9IG1lZGlhX2xvY2s7CiAJZGUtPm1lZGlhX2FkdmVydGlzZSA9IGVjbWQtPmFkdmVydGlzaW5nOwogCWRlX3NldF9tZWRpYShkZSk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxNyw3ICsxODE3LDcgQEAKIAljYXNlIDB4MDIwNDogIGRlLT5tZWRpYV90eXBlID0gREVfTUVESUFfVFBfRkQ7IGJyZWFrOwogCWRlZmF1bHQ6IGRlLT5tZWRpYV90eXBlID0gREVfTUVESUFfVFBfQVVUTzsgYnJlYWs7CiAJfQotCQorCiAJaWYgKG5ldGlmX21zZ19wcm9iZShkZSkpCiAJCXByaW50ayhLRVJOX0lORk8gImRlJWQ6IFNST00gbGVhZiBvZmZzZXQgJXUsIGRlZmF1bHQgbWVkaWEgJXNcbiIsCiAJCSAgICAgICBkZS0+Ym9hcmRfaWR4LCBvZnMsCkBAIC0xODg2LDcgKzE4ODYsNyBAQAogCQkJCSAgICAgICBkZS0+bWVkaWFbaWR4XS5jc3IxMywKIAkJCQkgICAgICAgZGUtPm1lZGlhW2lkeF0uY3NyMTQsCiAJCQkJICAgICAgIGRlLT5tZWRpYVtpZHhdLmNzcjE1KTsKLQkJCQkgICAgICAgCisKIAkJfSBlbHNlIGlmIChuZXRpZl9tc2dfcHJvYmUoZGUpKQogCQkJcHJpbnRrKCJcbiIpOwogCkBAIC0yMTE4LDcgKzIxMTgsNyBAQAogCiAJCXNwaW5fdW5sb2NrX2lycSgmZGUtPmxvY2spOwogCQllbmFibGVfaXJxKGRldi0+aXJxKTsKLQkJCisKIAkJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCiAJCV9fZGVfZ2V0X3N0YXRzKGRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKaW5kZXggZjU2MDk0MS4uZGE4YmQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCkBAIC00MSwxMSArNDEsMTEgQEAKICAgICBEaWdpdGFsIFNlbWljb25kdWN0b3IgICBTUk9NICAgU3BlY2lmaWNhdGlvbi4gICAgVGhlICBkcml2ZXIgICBjdXJyZW50bHkKICAgICByZWNvZ25pc2VzIHRoZSBmb2xsb3dpbmcgY2hpcHM6CiAKLSAgICAgICAgREMyMTA0MCAgKG5vIFNST00pIAotCURDMjEwNDFbQV0gIAotCURDMjExNDBbQV0gCi0JREMyMTE0MiAKLQlEQzIxMTQzIAorICAgICAgICBEQzIxMDQwICAobm8gU1JPTSkKKwlEQzIxMDQxW0FdCisJREMyMTE0MFtBXQorCURDMjExNDIKKwlEQzIxMTQzCiAKICAgICBTbyBmYXIgdGhlIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjYXJkczoKIApAQCAtNTUsNyArNTUsNyBAQAogCVNNQzg0MzIKIAlTTUM5MzMyICh3L25ldyBTUk9NKQogCVpOWVgzMVs0NV0KLQlaTllYMzQ2IDEwLzEwMCA0IHBvcnQgKGNhbiBhY3QgYXMgYSAxMC8xMDAgYnJpZGdlISkgCisJWk5ZWDM0NiAxMC8xMDAgNCBwb3J0IChjYW4gYWN0IGFzIGEgMTAvMTAwIGJyaWRnZSEpCiAKICAgICBUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBhIHJlbGF0aXZlbHkgYnVzeSBuZXR3b3JrIHVzaW5nIHRoZSBERTQyNSwKICAgICBERTQzNCwgREU0MzUgYW5kIERFNTAwIGNhcmRzIGFuZCBiZW5jaG1hcmtlZCB3aXRoICd0dGNwJzogaXQgdHJhbnNmZXJyZWQKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIGxvYWRpbmcgYnk6CiAKICAgICAgICAgICAgICAgICAgICBpbnNtb2QgZGU0eDUgaW89MHhnaGggICAgICAgICAgIHdoZXJlIGcgPSBidXMgbnVtYmVyCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaCA9IGRldmljZSBudW1iZXIgICAKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhoID0gZGV2aWNlIG51bWJlcgogCiAgICAgICAgTkI6IGF1dG9wcm9iaW5nIGZvciBtb2R1bGVzIGlzIG5vdyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4gWW91IG1heSBqdXN0CiAgICAgICAgICAgIHVzZToKQEAgLTEyMCwxMSArMTIwLDExIEBACiAgICAgNCkgaWYgeW91IGFyZSB3YW50aW5nIHRvIGFkZCBhIG5ldyAgY2FyZCwgZ290byA1LiBPdGhlcndpc2UsIHJlY29tcGlsZSBhCiAgICAga2VybmVsIHdpdGggdGhlIGRlNHg1IGNvbmZpZ3VyYXRpb24gdHVybmVkIG9mZiBhbmQgcmVib290LgogICAgIDUpIGluc21vZCBkZTR4NSBbaW89MHhnaGhdCi0gICAgNikgcnVuIHRoZSBuZXQgc3RhcnR1cCBiaXRzIGZvciB5b3VyIG5ldyBldGg/PyBpbnRlcmZhY2UocykgbWFudWFsbHkgCi0gICAgKHVzdWFsbHkgL2V0Yy9yYy5pbmV0WzEyXSBhdCBib290IHRpbWUpLiAKKyAgICA2KSBydW4gdGhlIG5ldCBzdGFydHVwIGJpdHMgZm9yIHlvdXIgbmV3IGV0aD8/IGludGVyZmFjZShzKSBtYW51YWxseQorICAgICh1c3VhbGx5IC9ldGMvcmMuaW5ldFsxMl0gYXQgYm9vdCB0aW1lKS4KICAgICA3KSBlbmpveSEKIAotICAgIFRvIHVubG9hZCBhIG1vZHVsZSwgdHVybiBvZmYgdGhlIGFzc29jaWF0ZWQgaW50ZXJmYWNlKHMpIAorICAgIFRvIHVubG9hZCBhIG1vZHVsZSwgdHVybiBvZmYgdGhlIGFzc29jaWF0ZWQgaW50ZXJmYWNlKHMpCiAgICAgJ2lmY29uZmlnIGV0aD8/IGRvd24nIHRoZW4gJ3JtbW9kIGRlNHg1Jy4KIAogICAgIEF1dG9tZWRpYSBkZXRlY3Rpb24gaXMgaW5jbHVkZWQgc28gdGhhdCBpbiAgcHJpbmNpcGFsIHlvdSBjYW4gZGlzY29ubmVjdApAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgQnkgIGRlZmF1bHQsICB0aGUgZHJpdmVyIHdpbGwgIG5vdyAgIGF1dG9kZXRlY3QgYW55ICBERUNjaGlwIGJhc2VkIGNhcmQuCiAgICAgU2hvdWxkIHlvdSBoYXZlIGEgbmVlZCB0byByZXN0cmljdCB0aGUgZHJpdmVyIHRvIERJR0lUQUwgb25seSBjYXJkcywgeW91CiAgICAgY2FuIGNvbXBpbGUgd2l0aCBhICBERUNfT05MWSBkZWZpbmUsIG9yIGlmICBsb2FkaW5nIGFzIGEgbW9kdWxlLCB1c2UgdGhlCi0gICAgJ2RlY19vbmx5PTEnICBwYXJhbWV0ZXIuIAorICAgICdkZWNfb25seT0xJyAgcGFyYW1ldGVyLgogCiAgICAgSSd2ZSBjaGFuZ2VkIHRoZSB0aW1pbmcgcm91dGluZXMgdG8gIHVzZSB0aGUga2VybmVsIHRpbWVyIGFuZCBzY2hlZHVsaW5nCiAgICAgZnVuY3Rpb25zICBzbyB0aGF0IHRoZSAgaGFuZ3MgIGFuZCBvdGhlciBhc3NvcnRlZCBwcm9ibGVtcyB0aGF0IG9jY3VycmVkCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYWxsb3dlZDoKIAogICAgICAgICAgICAgZmR4ICAgICAgICBmb3IgZnVsbCBkdXBsZXgKLQkgICAgYXV0b3NlbnNlICB0byBzZXQgdGhlIG1lZGlhL3NwZWVkOyB3aXRoIHRoZSBmb2xsb3dpbmcgCisJICAgIGF1dG9zZW5zZSAgdG8gc2V0IHRoZSBtZWRpYS9zcGVlZDsgd2l0aCB0aGUgZm9sbG93aW5nCiAJICAgICAgICAgICAgICAgc3ViLXBhcmFtZXRlcnM6CiAJCSAgICAgICBUUCwgVFBfTlcsIEJOQywgQVVJLCBCTkNfQVVJLCAxMDBNYiwgMTBNYiwgQVVUTwogCkBAIC0yMzUsMTQgKzIzNSwxNCBAQAogICAgIHRoaXMgIGF1dG9tYXRpY2FsbHkgIG9yIGluY2x1ZGUgICNkZWZpbmUgREU0WDVfRk9SQ0VfRUlTQSAgb24gb3IgIGJlZm9yZQogICAgIGxpbmUgMTA0MCBpbiB0aGUgZHJpdmVyLgogCi0gICAgVE8gRE86IAorICAgIFRPIERPOgogICAgIC0tLS0tLQogCiAgICAgUmV2aXNpb24gSGlzdG9yeQogICAgIC0tLS0tLS0tLS0tLS0tLS0KIAogICAgIFZlcnNpb24gICBEYXRlICAgICAgICBEZXNjcmlwdGlvbgotICAKKwogICAgICAgMC4xICAgICAxNy1Ob3YtOTQgICBJbml0aWFsIHdyaXRpbmcuIEFMUEhBIGNvZGUgcmVsZWFzZS4KICAgICAgIDAuMiAgICAgMTMtSmFuLTk1ICAgQWRkZWQgUENJIHN1cHBvcnQgZm9yIERFNDM1J3MuCiAgICAgICAwLjIxICAgIDE5LUphbi05NSAgIEFkZGVkIGF1dG8gbWVkaWEgZGV0ZWN0aW9uLgpAQCAtMjUxLDcgKzI1MSw3IEBACiAJCQkgIEFkZCByZXF1ZXN0L3JlbGVhc2VfcmVnaW9uIGNvZGUuCiAJCQkgIEFkZCBsb2FkYWJsZSBtb2R1bGVzIHN1cHBvcnQgZm9yIFBDSS4KIAkJCSAgQ2xlYW4gdXAgbG9hZGFibGUgbW9kdWxlcyBzdXBwb3J0LgotICAgICAgMC4yMyAgICAyOC1GZWItOTUgICBBZGRlZCBEQzIxMDQxIGFuZCBEQzIxMTQwIHN1cHBvcnQuIAorICAgICAgMC4yMyAgICAyOC1GZWItOTUgICBBZGRlZCBEQzIxMDQxIGFuZCBEQzIxMTQwIHN1cHBvcnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeCBtaXNzZWQgZnJhbWUgY291bnRlciB2YWx1ZSBhbmQgaW5pdGlhbGlzYXRpb24uCiAJCQkgIEZpeGVkIEVJU0EgcHJvYmUuCiAgICAgICAwLjI0ICAgIDExLUFwci05NSAgIENoYW5nZSBkZWxheSByb3V0aW5lIHRvIHVzZSA8bGludXgvdWRlbGF5Pi4KQEAgLTI4MCw3ICsyODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQga2VybmVsIHRpbWVyIGNvZGUgKGgvdyBpcyB0b28gZmxha3kpLgogCQkJICBBZGQgTUlJIGJhc2VkIFBIWSBhdXRvc2Vuc2UuCiAJCQkgIEFkZCBuZXcgbXVsdGljYXN0aW5nIGNvZGUuCi0JCQkgIEFkZCBuZXcgYXV0b3NlbnNlIGFsZ29yaXRobXMgZm9yIG1lZGlhL21vZGUgCisJCQkgIEFkZCBuZXcgYXV0b3NlbnNlIGFsZ29yaXRobXMgZm9yIG1lZGlhL21vZGUKIAkJCSAgc2VsZWN0aW9uIHVzaW5nIGtlcm5lbCBzY2hlZHVsaW5nL3RpbWluZy4KIAkJCSAgUmUtZm9ybWF0dGVkLgogCQkJICBNYWRlIGNoYW5nZXMgc3VnZ2VzdGVkIGJ5IDxqZWZmQHJvdXRlci5wYXRjaC5uZXQ+OgpAQCAtMzA3LDEwICszMDcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIEFjY3RvbiB0byB0aGUgbGlzdCBvZiBicm9rZW4gY2FyZHMuCiAJCQkgIEZpeCBUWCB1bmRlci1ydW4gYnVnIGZvciBub24gREMyMTE0MCBjaGlwcy4KIAkJCSAgRml4IGJvb3QgY29tbWFuZCBwcm9iZSBidWcgaW4gYWxsb2NfZGV2aWNlKCkgYXMKLQkJCSAgIHJlcG9ydGVkIGJ5IDxrb2VuLmdhZGV5bmVAYmFyY28uY29tPiBhbmQgCisJCQkgICByZXBvcnRlZCBieSA8a29lbi5nYWRleW5lQGJhcmNvLmNvbT4gYW5kCiAJCQkgICA8b3JhdmFAbmV0aGVyLnRreS5odXQuZmk+LgogCQkJICBBZGQgY2FjaGUgbG9ja3MgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGFzCi0JCQkgICByZXBvcnRlZCBieSA8Y3NkQG1pY3JvcGxleC5jb20+IGFuZCAKKwkJCSAgIHJlcG9ydGVkIGJ5IDxjc2RAbWljcm9wbGV4LmNvbT4gYW5kCiAJCQkgICA8YmFiYUBiZWNrbWFuLnVpdWMuZWR1Pi4KIAkJCSAgVXBncmFkZWQgYWxsb2NfZGV2aWNlKCkgY29kZS4KICAgICAgIDAuNDMxICAyOC1KdW4tOTYgICAgRml4IHBvdGVudGlhbCBidWcgaW4gcXVldWVfcGt0KCkgZnJvbSBkaXNjdXNzaW9uCkBAIC0zMjIsNyArMzIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBsb29wYmFjayBwYWNrZXQuCiAgICAgICAwLjQ0MiAgIDktU2VwLTk2ICAgIEluY2x1ZGUgQVVJIGluIGRjMjEwNDEgbWVkaWEgcHJpbnRvdXQuIEJ1ZyByZXBvcnRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPGJoYXRAbXVuZG9vay5jcy5tdS5PWi5BVT4KLSAgICAgIDAuNDUgICAgOC1EZWMtOTYgICAgSW5jbHVkZSBlbmRpYW4gZnVuY3Rpb25zIGZvciBQUEMgdXNlLCBmcm9tIHdvcmsgCisgICAgICAwLjQ1ICAgIDgtRGVjLTk2ICAgIEluY2x1ZGUgZW5kaWFuIGZ1bmN0aW9ucyBmb3IgUFBDIHVzZSwgZnJvbSB3b3JrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA8Y29ydEBjcy5ubXQuZWR1PiBhbmQgPGcudGhvbWFzQG9wZW5ncm91cC5vcmc+LgogICAgICAgMC40NTEgIDI4LURlYy05NiAgICBBZGRlZCBmaXggdG8gYWxsb3cgYXV0b3Byb2JlIGZvciBtb2R1bGVzIGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uIGZyb20gPG1qYWNvYkBmZXJhbC5jb20+LgpAQCAtMzQ2LDE0ICszNDYsMTQgQEAKIAkJCSAgIDxwYXViZXJ0QGlyYW0uZXM+LgogICAgICAgMC41MiAgIDI2LUFwci05NyAgICBTb21lIGNoYW5nZXMgbWF5IG5vdCBjcmVkaXQgdGhlIHJpZ2h0IHBlb3BsZSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGRpc2sgY3Jhc2ggbWVhbnQgSSBsb3N0IHNvbWUgbWFpbC4KLQkJCSAgQ2hhbmdlIFJYIGludGVycnVwdCByb3V0aW5lIHRvIGRyb3AgcmF0aGVyIHRoYW4gCi0JCQkgICBkZWZlciBwYWNrZXRzIHRvIGF2b2lkIGhhbmcgcmVwb3J0ZWQgYnkgCisJCQkgIENoYW5nZSBSWCBpbnRlcnJ1cHQgcm91dGluZSB0byBkcm9wIHJhdGhlciB0aGFuCisJCQkgICBkZWZlciBwYWNrZXRzIHRvIGF2b2lkIGhhbmcgcmVwb3J0ZWQgYnkKIAkJCSAgIDxnLnRob21hc0BvcGVuZ3JvdXAub3JnPi4KIAkJCSAgRml4IHNyb21fZXhlYygpIHRvIHJldHVybiBmb3IgQ09NUEFDVCBhbmQgdHlwZSAxCiAJCQkgICBpbmZvYmxvY2tzLgogCQkJICBBZGRlZCBEQzIxMTQyIGFuZCBEQzIxMTQzIGZ1bmN0aW9ucy4KIAkJCSAgQWRkZWQgYnl0ZSBjb3VudGVycyBmcm9tIDxwaGlsQHRhemVuZGEuZGVtb24uY28udWs+Ci0JCQkgIEFkZGVkIFNBX0lOVEVSUlVQVCB0ZW1wb3JhcnkgZml4IGZyb20gCisJCQkgIEFkZGVkIFNBX0lOVEVSUlVQVCB0ZW1wb3JhcnkgZml4IGZyb20KIAkJCSAgIDxtamFjb2JAZmVyYWwuY29tPi4KICAgICAgIDAuNTMgICAxMi1Ob3YtOTcgICAgRml4IHRoZSAqX3Byb2JlKCkgdG8gaW5jbHVkZSAnZXRoPz8nIG5hbWUgZHVyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgbG9hZDogYnVnIHJlcG9ydGVkIGJ5CkBAIC0zNjMsMTAgKzM2MywxMCBAQAogCQkJICBNYWtlIGFib3ZlIHNlYXJjaCBpbmRlcGVuZGVudCBvZiBCSU9TIGRldmljZSBzY2FuCiAJCQkgICBkaXJlY3Rpb24uCiAJCQkgIENvbXBsZXRlZCBEQzIxMTRbMjNdIGF1dG9zZW5zZSBmdW5jdGlvbnMuCi0gICAgICAwLjUzMSAgMjEtRGVjLTk3ICAgIEZpeCBERTUwMC1YQSAxMDBNYi9zIGJ1ZyByZXBvcnRlZCBieSAKKyAgICAgIDAuNTMxICAyMS1EZWMtOTcgICAgRml4IERFNTAwLVhBIDEwME1iL3MgYnVnIHJlcG9ydGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm9iaW5AaW50ZXJjb3JlLmNvbQogCQkJICBGaXggdHlwZTFfaW5mb2Jsb2NrKCkgYnVnIGludHJvZHVjZWQgaW4gMC41MywgZnJvbQotCQkJICAgcHJvYmxlbSByZXBvcnRzIGJ5IAorCQkJICAgcHJvYmxlbSByZXBvcnRzIGJ5CiAJCQkgICA8cGFybWVlQHBvc3RlY3NzLm5jcmZyYW4uZnJhbmNlLm5jci5jb20+IGFuZAogCQkJICAgPGpvQGljZS5kaWxsaW5nZW4uYmF5bmV0LmRlPi4KIAkJCSAgQWRkZWQgYXJndW1lbnQgbGlzdCB0byBzZXQgdXAgZWFjaCBib2FyZCBmcm9tIGVpdGhlcgpAQCAtMzc0LDcgKzM3NCw3IEBACiAJCQkgIEFkZGVkIGdlbmVyaWMgTUlJIFBIWSBmdW5jdGlvbmFsaXR5IHRvIGRlYWwgd2l0aAogCQkJICAgbmV3ZXIgUEhZIGNoaXBzLgogCQkJICBGaXggdGhlIG1lc3MgaW4gMi4xLjY3LgotICAgICAgMC41MzIgICA1LUphbi05OCAgICBGaXggYnVnIGluIG1paV9nZXRfcGh5KCkgcmVwb3J0ZWQgYnkgCisgICAgICAwLjUzMiAgIDUtSmFuLTk4ICAgIEZpeCBidWcgaW4gbWlpX2dldF9waHkoKSByZXBvcnRlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlZGhhdEBjb2NvY28ubmV0Pi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4IGJ1ZyBpbiBwY2lfcHJvYmUoKSBmb3IgNjQgYml0IHN5c3RlbXMgcmVwb3J0ZWQKIAkJCSAgIGJ5IDxiZWxsaW90dEBhY2Nlc3NvbmUuY29tPi4KQEAgLTM5OCw3ICszOTgsNyBAQAogCQkJICAgdmVyc2lvbi4gSSBob3BlIG5vdGhpbmcgaXMgYnJva2VuLi4uCiAgICAgICAgICAgCQkgIEFkZCBUWCBkb25lIGludGVycnVwdCBtb2RpZmljYXRpb24gZnJvbSBzdWdnZXN0aW9uCiAJCQkgICBieSA8QXVzdGluLkRvbm5lbGx5QGNsLmNhbS5hYy51az4uCi0JCQkgIEZpeCBpc19hbmNfY2FwYWJsZSgpIGJ1ZyByZXBvcnRlZCBieSAKKwkJCSAgRml4IGlzX2FuY19jYXBhYmxlKCkgYnVnIHJlcG9ydGVkIGJ5CiAJCQkgICA8QXVzdGluLkRvbm5lbGx5QGNsLmNhbS5hYy51az4uCiAJCQkgIEZpeCB0eXBlWzEzXV9pbmZvYmxvY2soKSBidWc6IGR1cmluZyBNSUkgc2VhcmNoLCBQSFkKIAkJCSAgIGxwLT5yc3Qgbm90IHJ1biBiZWNhdXNlIGxwLT5pYm4gbm90IGluaXRpYWxpc2VkIC0KQEAgLTQxMyw3ICs0MTMsNyBAQAogCQkJICBBZGQgYW5fZXhjZXB0aW9uKCkgZm9yIG9sZCBaWU5YMzQ2IGFuZCBmaXggY29tcGlsZQogCQkJICAgd2FybmluZyBvbiBQUEMgJiBTUEFSQywgZnJvbSA8ZWNkQHNreW5ldC5iZT4uCiAJCQkgIEZpeCBsYXN0UENJIHRvIGNvcnJlY3RseSB3b3JrIHdpdGggY29tcGlsZWQgaW4KLQkJCSAgIGtlcm5lbHMgYW5kIG1vZHVsZXMgZnJvbSBidWcgcmVwb3J0IGJ5IAorCQkJICAga2VybmVscyBhbmQgbW9kdWxlcyBmcm9tIGJ1ZyByZXBvcnQgYnkKIAkJCSAgIDxabGF0a28uQ2FsdXNpY0BDQVJOZXQuaHI+IGV0IGFsLgogICAgICAgMC41NDIgIDE1LVNlcC05OCAgICBGaXggZGMyMTE0eF9hdXRvY29uZigpIHRvIHN0b3AgbXVsdGlwbGUgbWVzc2FnZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gbWVkaWEgaXMgdW5jb25uZWN0ZWQuCkBAIC00MjUsNyArNDI1LDcgQEAKICAgICAgIDAuNTQ0ICAgOC1NYXktOTkgICAgRml4IGZvciBidWdneSBTUk9NIGluIE1vdG9yb2xhIGVtYmVkZGVkIGJvYXJkcyB1c2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAyMTE0MyBieSA8bW1wb3J0ZXJAaG9tZS5jb20+LgogCQkJICBDaGFuZ2UgUENJL0VJU0EgYnVzIHByb2Jpbmcgb3JkZXIuCi0gICAgICAwLjU0NSAgMjgtTm92LTk5ICAgIEZ1cnRoZXIgTW90byBTUk9NIGJ1ZyBmaXggZnJvbSAKKyAgICAgIDAuNTQ1ICAyOC1Ob3YtOTkgICAgRnVydGhlciBNb3RvIFNST00gYnVnIGZpeCBmcm9tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bXBvcnRlckBlbmcubWNkLm1vdC5jb20+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSBkb3VibGUgY2hlY2tpbmcgZm9yIERFQlVHX1JYIGluIGRlNHg1X2RiZ19yeCgpCiAJCQkgICBmcm9tIHJlcG9ydCBieSA8Z2VlcnRAbGludXgtbTY4ay5vcmc+CkBAIC00MzQsOCArNDM0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICdwYicsIG9uIGEgbm9uIGRlNHg1IFBDSSBkZXZpY2UsIGluIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgYSBQQ0kgYnJpZGdlIChERUMgY2hpcCAyMTE1MikuIFRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BiJyBpcyBub3cgb25seSBpbml0aWFsaXplZCBpZiBhIGRlNHg1IGNoaXAgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQuIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZyYW5jZUBoYW5kaGVsZHMub3JnPiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZyYW5jZUBoYW5kaGVsZHMub3JnPgogICAgICAgMC41NDcgIDA4LU5vdi0wMSAgICBVc2UgbGlicmFyeSBjcmMzMiBmdW5jdGlvbnMgYnkgPE1hdHRfRG9tc2NoQGRlbGwuY29tPgogICAgICAgMC41NDggIDMwLUF1Zy0wMyAgICBCaWcgMi42IGNsZWFudXAuIFBvcnRlZCB0byBQQ0kvRUlTQSBwcm9iaW5nIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpYyBETUEgQVBJcy4gRml4ZWQgREU0MjUgc3VwcG9ydCBvbiBBbHBoYS4KQEAgLTU4NCw3ICs1ODQsNyBAQAogCiAvKgogKiogQWxsb3cgcGVyIGFkYXB0ZXIgc2V0IHVwLiBGb3IgbW9kdWxlcyB0aGlzIGlzIHNpbXBseSBhIGNvbW1hbmQgbGluZQotKiogcGFyYW1ldGVyLCBlLmcuOiAKKyoqIHBhcmFtZXRlciwgZS5nLjoKICoqIGluc21vZCBkZTR4NSBhcmdzPSdldGgxOmZkeCBhdXRvc2Vuc2U9Qk5DIGV0aDA6YXV0b3NlbnNlPTEwME1iJy4KICoqCiAqKiBGb3IgYSBjb21waWxlZCBpbiBkcml2ZXIsIHBsYWNlIGUuZy4KQEAgLTY1NSw3ICs2NTUsNyBAQAogKiogTWVtb3J5IEFsaWdubWVudC4gRWFjaCBkZXNjcmlwdG9yIGlzIDQgbG9uZ3dvcmRzIGxvbmcuIFRvIGZvcmNlIGEKICoqIHBhcnRpY3VsYXIgYWxpZ25tZW50IG9uIHRoZSBUWCBkZXNjcmlwdG9yLCBhZGp1c3QgREVTQ19TS0lQX0xFTiBhbmQKICoqIERFU0NfQUxJR04uIEFMSUdOIGFsaWducyB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcHJpdmF0ZSBtZW1vcnkgYXJlYQotKiogYW5kIGhlbmNlIHRoZSBSWCBkZXNjcmlwdG9yIHJpbmcncyBmaXJzdCBlbnRyeS4gCisqKiBhbmQgaGVuY2UgdGhlIFJYIGRlc2NyaXB0b3IgcmluZydzIGZpcnN0IGVudHJ5LgogKi8KICNkZWZpbmUgREU0WDVfQUxJR040ICAgICAgKCh1X2xvbmcpNCAtIDEpICAgICAvKiAxIGxvbmd3b3JkIGFsaWduICovCiAjZGVmaW5lIERFNFg1X0FMSUdOOCAgICAgICgodV9sb25nKTggLSAxKSAgICAgLyogMiBsb25nd29yZCBhbGlnbiAqLwpAQCAtMTA4MSw4ICsxMDgxLDggQEAKICAgICBtZGVsYXkoMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgMm1zICovXAogfQogCi0MCi1zdGF0aWMgaW50IF9fZGV2aW5pdCAKKworc3RhdGljIGludCBfX2RldmluaXQKIGRlNHg1X2h3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9sb25nIGlvYmFzZSwgc3RydWN0IGRldmljZSAqZ2VuZGV2KQogewogICAgIGNoYXIgbmFtZVtERTRYNV9OQU1FX0xFTkdUSCArIDFdOwpAQCAtMTEwMiwxMiArMTEwMiwxMiBAQAogICAgIG1kZWxheSgxMCk7CiAKICAgICBSRVNFVF9ERTRYNTsKLSAgICAKKwogICAgIGlmICgoaW5sKERFNFg1X1NUUykgJiAoU1RTX1RTIHwgU1RTX1JTKSkgIT0gMCkgewogCXJldHVybiAtRU5YSU87ICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXJkd2FyZSBjb3VsZCBub3QgcmVzZXQgKi8KICAgICB9Ci0gICAgCi0gICAgLyogCisKKyAgICAvKgogICAgICoqIE5vdyBmaW5kIG91dCB3aGF0IGtpbmQgb2YgREMyMTA0MC9EQzIxMDQxL0RDMjExNDAgYm9hcmQgd2UgaGF2ZS4KICAgICAqLwogICAgIGxwLT51c2VTUk9NID0gRkFMU0U7CkBAIC0xMTE2LDIxICsxMTE2LDIxIEBACiAgICAgfSBlbHNlIHsKIAlFSVNBX3NpZ25hdHVyZShuYW1lLCBnZW5kZXYpOwogICAgIH0KLSAgICAKKwogICAgIGlmICgqbmFtZSA9PSAnXDAnKSB7ICAgICAgICAgICAgICAgICAgICAgLyogTm90IGZvdW5kIGEgYm9hcmQgc2lnbmF0dXJlICovCiAJcmV0dXJuIC1FTlhJTzsKICAgICB9Ci0gICAgCisKICAgICBkZXYtPmJhc2VfYWRkciA9IGlvYmFzZTsKICAgICBwcmludGsgKCIlczogJXMgYXQgMHglMDRseCIsIGdlbmRldi0+YnVzX2lkLCBuYW1lLCBpb2Jhc2UpOwotICAgIAorCiAgICAgcHJpbnRrKCIsIGgvdyBhZGRyZXNzICIpOwogICAgIHN0YXR1cyA9IGdldF9od19hZGRyKGRldik7CiAgICAgZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOIC0gMTsgaSsrKSB7ICAgICAvKiBnZXQgdGhlIGV0aGVybmV0IGFkZHIuICovCiAJcHJpbnRrKCIlMi4yeDoiLCBkZXYtPmRldl9hZGRyW2ldKTsKICAgICB9CiAgICAgcHJpbnRrKCIlMi4yeCxcbiIsIGRldi0+ZGV2X2FkZHJbaV0pOwotICAgIAorCiAgICAgaWYgKHN0YXR1cyAhPSAwKSB7CiAJcHJpbnRrKCIgICAgICB3aGljaCBoYXMgYW4gRXRoZXJuZXQgUFJPTSBDUkMgZXJyb3IuXG4iKTsKIAlyZXR1cm4gLUVOWElPOwpAQCAtMTE3MSwxMCArMTE3MSwxMCBAQAogCX0KIAogCWxwLT50eF9yaW5nID0gbHAtPnJ4X3JpbmcgKyBOVU1fUlhfREVTQzsKLQkgICAgCisKIAkvKgogCSoqIFNldCB1cCB0aGUgUlggZGVzY3JpcHRvciByaW5nIChJbnRlbHMpCi0JKiogQWxsb2NhdGUgY29udGlndW91cyByZWNlaXZlIGJ1ZmZlcnMsIGxvbmcgd29yZCBhbGlnbmVkIChBbHBoYXMpIAorCSoqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgcmVjZWl2ZSBidWZmZXJzLCBsb25nIHdvcmQgYWxpZ25lZCAoQWxwaGFzKQogCSovCiAjaWYgIWRlZmluZWQoX19hbHBoYV9fKSAmJiAhZGVmaW5lZChfX3Bvd2VycGNfXykgJiYgIWRlZmluZWQoX19zcGFyY192OV9fKSAmJiAhZGVmaW5lZChERTRYNV9ET19NRU1DUFkpCiAJZm9yIChpPTA7IGk8TlVNX1JYX0RFU0M7IGkrKykgewpAQCAtMTIxMCw3ICsxMjEwLDcgQEAKIAogCWxwLT5yeFJpbmdTaXplID0gTlVNX1JYX0RFU0M7CiAJbHAtPnR4UmluZ1NpemUgPSBOVU1fVFhfREVTQzsKLQkgICAgCisKIAkvKiBXcml0ZSB0aGUgZW5kIG9mIGxpc3QgbWFya2VyIHRvIHRoZSBkZXNjcmlwdG9yIGxpc3RzICovCiAJbHAtPnJ4X3JpbmdbbHAtPnJ4UmluZ1NpemUgLSAxXS5kZXMxIHw9IGNwdV90b19sZTMyKFJEX1JFUik7CiAJbHAtPnR4X3JpbmdbbHAtPnR4UmluZ1NpemUgLSAxXS5kZXMxIHw9IGNwdV90b19sZTMyKFREX1RFUik7CkBAIC0xMjE5LDcgKzEyMTksNyBAQAogCW91dGwobHAtPmRtYV9yaW5ncywgREU0WDVfUlJCQSk7CiAJb3V0bChscC0+ZG1hX3JpbmdzICsgTlVNX1JYX0RFU0MgKiBzaXplb2Yoc3RydWN0IGRlNHg1X2Rlc2MpLAogCSAgICAgREU0WDVfVFJCQSk7Ci0JICAgIAorCiAJLyogSW5pdGlhbGlzZSB0aGUgSVJRIG1hc2sgYW5kIEVuYWJsZS9EaXNhYmxlICovCiAJbHAtPmlycV9tYXNrID0gSU1SX1JJTSB8IElNUl9USU0gfCBJTVJfVFVNIHwgSU1SX1VOTTsKIAlscC0+aXJxX2VuICAgPSBJTVJfTklNIHwgSU1SX0FJTTsKQEAgLTEyNTIsNyArMTI1Miw3IEBACiAJaWYgKChscC0+Y2hpcHNldCAhPSBEQzIxMDQwKSAmJiAobHAtPmNoaXBzZXQgIT0gREMyMTA0MSkpIHsKIAkgICAgbWlpX2dldF9waHkoZGV2KTsKIAl9Ci0JCisKICNpZm5kZWYgX19zcGFyY192OV9fCiAJcHJpbnRrKCIgICAgICBhbmQgcmVxdWlyZXMgSVJRJWQgKHByb3ZpZGVkIGJ5ICVzKS5cbiIsIGRldi0+aXJxLAogI2Vsc2UKQEAgLTEyNjAsMTEgKzEyNjAsMTEgQEAKICNlbmRpZgogCSAgICAgICAoKGxwLT5idXMgPT0gUENJKSA/ICJQQ0kgQklPUyIgOiAiRUlTQSBDTkZHIikpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChkZTR4NV9kZWJ1ZyAmIERFQlVHX1ZFUlNJT04pIHsKIAlwcmludGsodmVyc2lvbik7CiAgICAgfQotICAgIAorCiAgICAgLyogVGhlIERFNFg1LXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCiAgICAgU0VUX01PRFVMRV9PV05FUihkZXYpOwogICAgIFNFVF9ORVRERVZfREVWKGRldiwgZ2VuZGV2KTsKQEAgLTEyNzQsMjMgKzEyNzQsMjMgQEAKICAgICBkZXYtPmdldF9zdGF0cyA9ICZkZTR4NV9nZXRfc3RhdHM7CiAgICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwogICAgIGRldi0+ZG9faW9jdGwgPSAmZGU0eDVfaW9jdGw7Ci0gICAgCisKICAgICBkZXYtPm1lbV9zdGFydCA9IDA7Ci0gICAgCisKICAgICAvKiBGaWxsIGluIHRoZSBnZW5lcmljIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KICAgICBpZiAoKHN0YXR1cyA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KSkpIHsKIAkgICAgZG1hX2ZyZWVfY29oZXJlbnQgKGdlbmRldiwgbHAtPmRtYV9zaXplLAogCQkJICAgICAgIGxwLT5yeF9yaW5nLCBscC0+ZG1hX3JpbmdzKTsKIAkgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAgCisKICAgICAvKiBMZXQgdGhlIGFkYXB0ZXIgc2xlZXAgdG8gc2F2ZSBwb3dlciAqLwogICAgIHlhd24oZGV2LCBTTEVFUCk7Ci0gICAgCisKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi0MCisKIHN0YXRpYyBpbnQKIGRlNHg1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEzMTIsMTUgKzEzMTIsMTUgQEAKICAgICAqLwogICAgIHlhd24oZGV2LCBXQUtFVVApOwogCi0gICAgLyogCi0gICAgKiogUmUtaW5pdGlhbGl6ZSB0aGUgREU0WDUuLi4gCisgICAgLyoKKyAgICAqKiBSZS1pbml0aWFsaXplIHRoZSBERTRYNS4uLgogICAgICovCiAgICAgc3RhdHVzID0gZGU0eDVfaW5pdChkZXYpOwogICAgIHNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CiAgICAgbHAtPnN0YXRlID0gT1BFTjsKICAgICBkZTR4NV9kYmdfb3BlbihkZXYpOwotICAgIAotICAgIGlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgKHZvaWQgKilkZTR4NV9pbnRlcnJ1cHQsIFNBX1NISVJRLCAKKworICAgIGlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgKHZvaWQgKilkZTR4NV9pbnRlcnJ1cHQsIFNBX1NISVJRLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHAtPmFkYXB0ZXJfbmFtZSwgZGV2KSkgewogCXByaW50aygiZGU0eDVfb3BlbigpOiBSZXF1ZXN0ZWQgSVJRJWQgaXMgYnVzeSAtIGF0dGVtcGluZyBGQVNUL1NIQVJFLi4uIiwgZGV2LT5pcnEpOwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZGU0eDVfaW50ZXJydXB0LCBTQV9JTlRFUlJVUFQgfCBTQV9TSElSUSwKQEAgLTEzNDAsMTEgKzEzNDAsMTEgQEAKIAogICAgIGxwLT5pbnRlcnJ1cHQgPSBVTk1BU0tfSU5URVJSVVBUUzsKICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLSAgICAKKwogICAgIFNUQVJUX0RFNFg1OwotCQorCiAgICAgZGU0eDVfc2V0dXBfaW50cihkZXYpOwotICAgIAorCiAgICAgaWYgKGRlNHg1X2RlYnVnICYgREVCVUdfT1BFTikgewogCXByaW50aygiXHRzdHM6ICAweCUwOHhcbiIsIGlubChERTRYNV9TVFMpKTsKIAlwcmludGsoIlx0Ym1yOiAgMHglMDh4XG4iLCBpbmwoREU0WDVfQk1SKSk7CkBAIC0xMzU1LDcgKzEzNTUsNyBAQAogCXByaW50aygiXHRzdHJyOiAweCUwOHhcbiIsIGlubChERTRYNV9TVFJSKSk7CiAJcHJpbnRrKCJcdHNpZ3I6IDB4JTA4eFxuIiwgaW5sKERFNFg1X1NJR1IpKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMzY5LDE1ICsxMzY5LDE1IEBACiAqLwogc3RhdGljIGludAogZGU0eDVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoteyAgCit7CiAgICAgLyogTG9jayBvdXQgb3RoZXIgcHJvY2Vzc2VzIHdoaWxzdCBzZXR0aW5nIHVwIHRoZSBoYXJkd2FyZSAqLwogICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAKKwogICAgIGRlNHg1X3N3X3Jlc2V0KGRldik7Ci0gICAgCisKICAgICAvKiBBdXRvY29uZmlndXJlIHRoZSBjb25uZWN0ZWQgcG9ydCAqLwogICAgIGF1dG9jb25mX21lZGlhKGRldik7Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTM4OCw3ICsxMzg4LDcgQEAKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IGksIGosIHN0YXR1cyA9IDA7CiAgICAgczMyIGJtciwgb21yOwotICAgIAorCiAgICAgLyogU2VsZWN0IHRoZSBNSUkgb3IgU1JMIHBvcnQgbm93IGFuZCBSRVNFVCB0aGUgTUFDICovCiAgICAgaWYgKCFscC0+dXNlU1JPTSkgewogCWlmIChscC0+cGh5W2xwLT5hY3RpdmVdLmlkICE9IDApIHsKQEAgLTEzOTksNyArMTM5OSw3IEBACiAJZGU0eDVfc3dpdGNoX21hY19wb3J0KGRldik7CiAgICAgfQogCi0gICAgLyogCisgICAgLyoKICAgICAqKiBTZXQgdGhlIHByb2dyYW1tYWJsZSBidXJzdCBsZW5ndGggdG8gOCBsb25nd29yZHMgZm9yIGFsbCB0aGUgREMyMTE0MAogICAgICoqIEZhc3Rlcm5ldCBjaGlwcyBhbmQgNCBsb25nd29yZHMgZm9yIGFsbCBvdGhlcnM6IERNQSBlcnJvcnMgcmVzdWx0CiAgICAgKiogd2l0aG91dCB0aGVzZSB2YWx1ZXMuIENhY2hlIGFsaWduIDE2IGxvbmcuCkBAIC0xNDE2LDIzICsxNDE2LDIzIEBACiAgICAgb3V0bChscC0+ZG1hX3JpbmdzLCBERTRYNV9SUkJBKTsKICAgICBvdXRsKGxwLT5kbWFfcmluZ3MgKyBOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgZGU0eDVfZGVzYyksCiAJIERFNFg1X1RSQkEpOwotICAgIAorCiAgICAgbHAtPnJ4X25ldyA9IGxwLT5yeF9vbGQgPSAwOwogICAgIGxwLT50eF9uZXcgPSBscC0+dHhfb2xkID0gMDsKLSAgICAKKwogICAgIGZvciAoaSA9IDA7IGkgPCBscC0+cnhSaW5nU2l6ZTsgaSsrKSB7CiAJbHAtPnJ4X3JpbmdbaV0uc3RhdHVzID0gY3B1X3RvX2xlMzIoUl9PV04pOwogICAgIH0KLSAgICAKKwogICAgIGZvciAoaSA9IDA7IGkgPCBscC0+dHhSaW5nU2l6ZTsgaSsrKSB7CiAJbHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gY3B1X3RvX2xlMzIoMCk7CiAgICAgfQotICAgIAorCiAgICAgYmFycmllcigpOwogCiAgICAgLyogQnVpbGQgdGhlIHNldHVwIGZyYW1lIGRlcGVuZGluZyBvbiBmaWx0ZXJpbmcgbW9kZSAqLwogICAgIFNldE11bHRpY2FzdEZpbHRlcihkZXYpOwotICAgIAorCiAgICAgbG9hZF9wYWNrZXQoZGV2LCBscC0+c2V0dXBfZnJhbWUsIFBFUkZFQ1RfRnxURF9TRVR8U0VUVVBfRlJBTUVfTEVOLCAoc3RydWN0IHNrX2J1ZmYgKikxKTsKICAgICBvdXRsKG9tcnxPTVJfU1QsIERFNFg1X09NUik7CiAKQEAgLTE0NDUsMTggKzE0NDUsMTggQEAKICAgICBvdXRsKG9tciwgREU0WDVfT01SKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9wIGV2ZXJ5dGhpbmchICovCiAKICAgICBpZiAoaiA9PSAwKSB7Ci0JcHJpbnRrKCIlczogU2V0dXAgZnJhbWUgdGltZWQgb3V0LCBzdGF0dXMgJTA4eFxuIiwgZGV2LT5uYW1lLCAKKwlwcmludGsoIiVzOiBTZXR1cCBmcmFtZSB0aW1lZCBvdXQsIHN0YXR1cyAlMDh4XG4iLCBkZXYtPm5hbWUsCiAJICAgICAgIGlubChERTRYNV9TVFMpKTsKIAlzdGF0dXMgPSAtRUlPOwogICAgIH0KLSAgICAKKwogICAgIGxwLT50eF9uZXcgPSAoKytscC0+dHhfbmV3KSAlIGxwLT50eFJpbmdTaXplOwogICAgIGxwLT50eF9vbGQgPSBscC0+dHhfbmV3OwogCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotLyogCisvKgogKiogV3JpdGVzIGEgc29ja2V0IGJ1ZmZlciBhZGRyZXNzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSB0cmFuc21pdCBkZXNjcmlwdG9yLgogKi8KIHN0YXRpYyBpbnQKQEAgLTE0NjksOSArMTQ2OSw5IEBACiAKICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAgICAgaWYgKGxwLT50eF9lbmFibGUgPT0gTk8pIHsgICAgICAgICAgICAgICAgICAgLyogQ2Fubm90IHNlbmQgZm9yIG5vdyAqLwotCXJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCXJldHVybiAtMTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICoqIENsZWFuIG91dCB0aGUgVFggcmluZyBhc3luY2hyb25vdXNseSB0byBpbnRlcnJ1cHRzIC0gc29tZXRpbWVzIHRoZQogICAgICoqIGludGVycnVwdHMgYXJlIGxvc3QgYnkgZGVsYXllZCBkZXNjcmlwdG9yIHN0YXR1cyB1cGRhdGVzIHJlbGF0aXZlIHRvCkBAIC0xNDgyLDcgKzE0ODIsNyBAQAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKICAgICAvKiBUZXN0IGlmIGNhY2hlIGlzIGFscmVhZHkgbG9ja2VkIC0gcmVxdWV1ZSBza2IgaWYgc28gKi8KLSAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZscC0+Y2FjaGUubG9jaykgJiYgIWxwLT5pbnRlcnJ1cHQpIAorICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopJmxwLT5jYWNoZS5sb2NrKSAmJiAhbHAtPmludGVycnVwdCkKIAlyZXR1cm4gLTE7CiAKICAgICAvKiBUcmFuc21pdCBkZXNjcmlwdG9yIHJpbmcgZnVsbCBvciBzdGFsZSBza2IgKi8KQEAgLTE1MDksMTAgKzE1MDksMTAgQEAKIAkgICAgbG9hZF9wYWNrZXQoZGV2LCBza2ItPmRhdGEsIFREX0lDIHwgVERfTFMgfCBURF9GUyB8IHNrYi0+bGVuLCBza2IpOwogIAkgICAgbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCSAgICBvdXRsKFBPTExfREVNQU5ELCBERTRYNV9UUEQpOy8qIFN0YXJ0IHRoZSBUWCAqLwotCQkKKwogCSAgICBscC0+dHhfbmV3ID0gKCsrbHAtPnR4X25ldykgJSBscC0+dHhSaW5nU2l6ZTsKIAkgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCSAgICAKKwogCSAgICBpZiAoVFhfQlVGRlNfQVZBSUwpIHsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsgICAgICAgICAvKiBBbm90aGVyIHBrdCBtYXkgYmUgcXVldWVkICovCiAJICAgIH0KQEAgLTE1MjEsMTUgKzE1MjEsMTUgQEAKIAl9CiAJaWYgKHNrYikgZGU0eDVfcHV0Yl9jYWNoZShkZXYsIHNrYik7CiAgICAgfQotICAgIAorCiAgICAgbHAtPmNhY2hlLmxvY2sgPSAwOwogCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKLSoqIFRoZSBERTRYNSBpbnRlcnJ1cHQgaGFuZGxlci4gCi0qKiAKKyoqIFRoZSBERTRYNSBpbnRlcnJ1cHQgaGFuZGxlci4KKyoqCiAqKiBJL08gUmVhZC9Xcml0ZXMgdGhyb3VnaCBpbnRlcm1lZGlhdGUgUENJIGJyaWRnZXMgYXJlIG5ldmVyICdwb3N0ZWQnLAogKiogc28gdGhhdCB0aGUgYXNzZXJ0ZWQgaW50ZXJydXB0IGFsd2F5cyBoYXMgc29tZSByZWFsIGRhdGEgdG8gd29yayB3aXRoIC0KICoqIGlmIHRoZXNlIEkvTyBhY2Nlc3NlcyBhcmUgZXZlciBjaGFuZ2VkIHRvIG1lbW9yeSBhY2Nlc3NlcywgZW5zdXJlIHRoZQpAQCAtMTU0Niw3ICsxNTQ2LDcgQEAKICAgICBzMzIgaW1yLCBvbXIsIHN0cywgbGltaXQ7CiAgICAgdV9sb25nIGlvYmFzZTsKICAgICB1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDA7Ci0gICAgCisKICAgICBpZiAoZGV2ID09IE5VTEwpIHsKIAlwcmludGsgKCJkZTR4NV9pbnRlcnJ1cHQoKTogaXJxICVkIGZvciB1bmtub3duIGRldmljZS5cbiIsIGlycSk7CiAJcmV0dXJuIElSUV9OT05FOwpAQCAtMTU1NCwzNSArMTU1NCwzNSBAQAogICAgIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBzcGluX2xvY2soJmxwLT5sb2NrKTsKICAgICBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLQkKKwogICAgIERJU0FCTEVfSVJRczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgbm9uIHJlLWVudHJhbmN5ICovCiAKICAgICBpZiAodGVzdF9hbmRfc2V0X2JpdChNQVNLX0lOVEVSUlVQVFMsICh2b2lkKikgJmxwLT5pbnRlcnJ1cHQpKQogCXByaW50aygiJXM6IFJlLWVudGVyaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci5cbiIsIGRldi0+bmFtZSk7CiAKICAgICBzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpOwotCQorCiAgICAgZm9yIChsaW1pdD0wOyBsaW1pdDw4OyBsaW1pdCsrKSB7CiAJc3RzID0gaW5sKERFNFg1X1NUUyk7ICAgICAgICAgICAgLyogUmVhZCBJUlEgc3RhdHVzICovCiAJb3V0bChzdHMsIERFNFg1X1NUUyk7ICAgICAgICAgICAgLyogUmVzZXQgdGhlIGJvYXJkIGludGVycnVwdHMgKi8KLQkgICAgCisKIAlpZiAoIShzdHMgJiBscC0+aXJxX21hc2spKSBicmVhazsvKiBBbGwgZG9uZSAqLwogCWhhbmRsZWQgPSAxOwotCSAgICAKKwogCWlmIChzdHMgJiAoU1RTX1JJIHwgU1RTX1JVKSkgICAgIC8qIFJ4IGludGVycnVwdCAocGFja2V0W3NdIGFycml2ZWQpICovCiAJICBkZTR4NV9yeChkZXYpOwotCSAgICAKKwogCWlmIChzdHMgJiAoU1RTX1RJIHwgU1RTX1RVKSkgICAgIC8qIFR4IGludGVycnVwdCAocGFja2V0IHNlbnQpICovCi0JICBkZTR4NV90eChkZXYpOyAKLQkgICAgCisJICBkZTR4NV90eChkZXYpOworCiAJaWYgKHN0cyAmIFNUU19MTkYpIHsgICAgICAgICAgICAgLyogVFAgTGluayBoYXMgZmFpbGVkICovCiAJICAgIGxwLT5pcnFfbWFzayAmPSB+SU1SX0xGTTsKIAl9Ci0JICAgIAorCiAJaWYgKHN0cyAmIFNUU19VTkYpIHsgICAgICAgICAgICAgLyogVHJhbnNtaXQgdW5kZXJydW4gKi8KIAkgICAgZGU0eDVfdHh1cihkZXYpOwogCX0KLQkgICAgCisKIAlpZiAoc3RzICYgU1RTX1NFKSB7ICAgICAgICAgICAgICAvKiBCdXMgRXJyb3IgKi8KIAkgICAgU1RPUF9ERTRYNTsKIAkgICAgcHJpbnRrKCIlczogRmF0YWwgYnVzIGVycm9yIG9jY3VycmVkLCBzdHM9JSM4eCwgZGV2aWNlIHN0b3BwZWQuXG4iLApAQCAtMTYwMyw3ICsxNjAzLDcgQEAKICAgICBscC0+aW50ZXJydXB0ID0gVU5NQVNLX0lOVEVSUlVQVFM7CiAgICAgRU5BQkxFX0lSUXM7CiAgICAgc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKLSAgICAKKwogICAgIHJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0xNjE0LDExICsxNjE0LDExIEBACiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIGludCBlbnRyeTsKICAgICBzMzIgc3RhdHVzOwotICAgIAorCiAgICAgZm9yIChlbnRyeT1scC0+cnhfbmV3OyAoczMyKWxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpPj0wOwogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeT1scC0+cnhfbmV3KSB7CiAJc3RhdHVzID0gKHMzMilsZTMyX3RvX2NwdShscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKLQkKKwogCWlmIChscC0+cnhfb3ZmKSB7CiAJICAgIGlmIChpbmwoREU0WDVfTUZDKSAmIE1GQ19GT0NNKSB7CiAJCWRlNHg1X3J4X292ZmMoZGV2KTsKQEAgLTE2MjksNyArMTYyOSw3IEBACiAJaWYgKHN0YXR1cyAmIFJEX0ZTKSB7ICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgc3RhcnQgb2YgZnJhbWUgKi8KIAkgICAgbHAtPnJ4X29sZCA9IGVudHJ5OwogCX0KLQkKKwogCWlmIChzdGF0dXMgJiBSRF9MUykgeyAgICAgICAgICAgICAgICAgLyogVmFsaWQgZnJhbWUgc3RhdHVzICovCiAJICAgIGlmIChscC0+dHhfZW5hYmxlKSBscC0+bGlua09LKys7CiAJICAgIGlmIChzdGF0dXMgJiBSRF9FUykgewkgICAgICAvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCkBAIC0xNjQ2LDkgKzE2NDYsOSBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlzaG9ydCBwa3RfbGVuID0gKHNob3J0KShsZTMyX3RvX2NwdShscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKQogCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gMTYpIC0gNDsKLQkJCisKIAkJaWYgKChza2IgPSBkZTR4NV9hbGxvY19yeF9idWZmKGRldiwgZW50cnksIHBrdF9sZW4pKSA9PSBOVUxMKSB7Ci0JCSAgICBwcmludGsoIiVzOiBJbnN1ZmZpY2llbnQgbWVtb3J5OyBudWtpbmcgcGFja2V0LlxuIiwgCisJCSAgICBwcmludGsoIiVzOiBJbnN1ZmZpY2llbnQgbWVtb3J5OyBudWtpbmcgcGFja2V0LlxuIiwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKIAkJICAgIGxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCX0gZWxzZSB7CkBAIC0xNjU4LDE0ICsxNjU4LDE0IEBACiAJCSAgICBza2ItPnByb3RvY29sPWV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwogCQkgICAgZGU0eDVfbG9jYWxfc3RhdHMoZGV2LCBza2ItPmRhdGEsIHBrdF9sZW4pOwogCQkgICAgbmV0aWZfcngoc2tiKTsKLQkJICAgIAorCiAJCSAgICAvKiBVcGRhdGUgc3RhdHMgKi8KIAkJICAgIGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCSAgICBscC0+c3RhdHMucnhfcGFja2V0cysrOwogIAkJICAgIGxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCQl9CiAJICAgIH0KLQkgICAgCisKIAkgICAgLyogQ2hhbmdlIGJ1ZmZlciBvd25lcnNoaXAgZm9yIHRoaXMgZnJhbWUsIGJhY2sgdG8gdGhlIGFkYXB0ZXIgKi8KIAkgICAgZm9yICg7bHAtPnJ4X29sZCE9ZW50cnk7bHAtPnJ4X29sZD0oKytscC0+cnhfb2xkKSVscC0+cnhSaW5nU2l6ZSkgewogCQlscC0+cnhfcmluZ1tscC0+cnhfb2xkXS5zdGF0dXMgPSBjcHVfdG9fbGUzMihSX09XTik7CkBAIC0xNjc0LDEzICsxNjc0LDEzIEBACiAJICAgIGxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgPSBjcHVfdG9fbGUzMihSX09XTik7CiAJICAgIGJhcnJpZXIoKTsKIAl9Ci0JCisKIAkvKgogCSoqIFVwZGF0ZSBlbnRyeSBpbmZvcm1hdGlvbgogCSovCiAJbHAtPnJ4X25ldyA9ICgrK2xwLT5yeF9uZXcpICUgbHAtPnJ4UmluZ1NpemU7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE3MDUsMjAgKzE3MDUsMjAgQEAKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IGVudHJ5OwogICAgIHMzMiBzdGF0dXM7Ci0gICAgCisKICAgICBmb3IgKGVudHJ5ID0gbHAtPnR4X29sZDsgZW50cnkgIT0gbHAtPnR4X25ldzsgZW50cnkgPSBscC0+dHhfb2xkKSB7CiAJc3RhdHVzID0gKHMzMilsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKIAlpZiAoc3RhdHVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBub3Qgc2VudCB5ZXQgKi8KIAkgICAgYnJlYWs7CiAJfSBlbHNlIGlmIChzdGF0dXMgIT0gMHg3ZmZmZmZmZikgeyAgICAvKiBOb3Qgc2V0dXAgZnJhbWUgKi8KIAkgICAgaWYgKHN0YXR1cyAmIFREX0VTKSB7ICAgICAgICAgICAgIC8qIEFuIGVycm9yIGhhcHBlbmVkICovCi0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsgCisJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJaWYgKHN0YXR1cyAmIFREX05DKSBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJaWYgKHN0YXR1cyAmIFREX0xDKSBscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgVERfVUYpIGxwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgVERfRUMpIGxwLT5wa3RTdGF0cy5leGNlc3NpdmVfY29sbGlzaW9ucysrOwogCQlpZiAoc3RhdHVzICYgVERfREUpIGxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCSAgICAKKwogCQlpZiAoVFhfUEtUX1BFTkRJTkcpIHsKIAkJICAgIG91dGwoUE9MTF9ERU1BTkQsIERFNFg1X1RQRCk7LyogUmVzdGFydCBhIHN0YWxsZWQgVFggKi8KIAkJfQpAQCAtMTcyNywxNCArMTcyNywxNCBAQAogCQlpZiAobHAtPnR4X2VuYWJsZSkgbHAtPmxpbmtPSysrOwogCSAgICB9CiAJICAgIC8qIFVwZGF0ZSB0aGUgY29sbGlzaW9uIGNvdW50ZXIgKi8KLQkgICAgbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKChzdGF0dXMgJiBURF9FQykgPyAxNiA6IAorCSAgICBscC0+c3RhdHMuY29sbGlzaW9ucyArPSAoKHN0YXR1cyAmIFREX0VDKSA/IDE2IDoKIAkJCQkgICAgICAgICAgICAgICAgICAgICAgKChzdGF0dXMgJiBURF9DQykgPj4gMykpOwogCiAJICAgIC8qIEZyZWUgdGhlIGJ1ZmZlci4gKi8KIAkgICAgaWYgKGxwLT50eF9za2JbZW50cnldICE9IE5VTEwpCiAJICAgIAlkZTR4NV9mcmVlX3R4X2J1ZmYobHAsIGVudHJ5KTsKIAl9Ci0JCisKIAkvKiBVcGRhdGUgYWxsIHRoZSBwb2ludGVycyAqLwogCWxwLT50eF9vbGQgPSAoKytscC0+dHhfb2xkKSAlIGxwLT50eFJpbmdTaXplOwogICAgIH0KQEAgLTE3NDYsNyArMTc0Niw3IEBACiAJZWxzZQogCSAgICBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogICAgIH0KLQkKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNzU1LDkgKzE3NTUsOSBAQAogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgaW50IG5leHRfdGljayA9IERFNFg1X0FVVE9TRU5TRV9NUzsKLSAgICAKKwogICAgIGRpc2FibGVfYXN0KGRldik7Ci0gICAgCisKICAgICBpZiAobHAtPnVzZVNST00pIHsKIAluZXh0X3RpY2sgPSBzcm9tX2F1dG9jb25mKGRldik7CiAgICAgfSBlbHNlIGlmIChscC0+Y2hpcHNldCA9PSBEQzIxMTQwKSB7CkBAIC0xNzY5LDcgKzE3NjksNyBAQAogICAgIH0KICAgICBscC0+bGlua09LID0gMDsKICAgICBlbmFibGVfYXN0KGRldiwgbmV4dF90aWNrKTsKLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNzkyLDExICsxNzkyLDExIEBACiAJfQogCW91dGwob21yIHwgT01SX1NUIHwgT01SX1NSLCBERTRYNV9PTVIpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogZGU0eDVfcnhfb3ZmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xODEzLDcgKzE4MTMsNyBAQAogICAgIH0KIAogICAgIG91dGwob21yLCBERTRYNV9PTVIpOwotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE4MjMsMjIgKzE4MjMsMjIgQEAKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBzMzIgaW1yLCBvbXI7Ci0gICAgCisKICAgICBkaXNhYmxlX2FzdChkZXYpOwogCiAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgIAorCiAgICAgaWYgKGRlNHg1X2RlYnVnICYgREVCVUdfQ0xPU0UpIHsKIAlwcmludGsoIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlOC44eC5cbiIsCiAJICAgICAgIGRldi0+bmFtZSwgaW5sKERFNFg1X1NUUykpOwogICAgIH0KLSAgICAKLSAgICAvKiAKKworICAgIC8qCiAgICAgKiogV2Ugc3RvcCB0aGUgREU0WDUgaGVyZS4uLiBtYXNrIGludGVycnVwdHMgYW5kIHN0b3AgVFggJiBSWAogICAgICovCiAgICAgRElTQUJMRV9JUlFzOwogICAgIFNUT1BfREU0WDU7Ci0gICAgCisKICAgICAvKiBGcmVlIHRoZSBhc3NvY2lhdGVkIGlycSAqLwogICAgIGZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogICAgIGxwLT5zdGF0ZSA9IENMT1NFRDsKQEAgLTE4NDYsMTAgKzE4NDYsMTAgQEAKICAgICAvKiBGcmVlIGFueSBzb2NrZXQgYnVmZmVycyAqLwogICAgIGRlNHg1X2ZyZWVfcnhfYnVmZnMoZGV2KTsKICAgICBkZTR4NV9mcmVlX3R4X2J1ZmZzKGRldik7Ci0gICAgCisKICAgICAvKiBQdXQgdGhlIGFkYXB0ZXIgdG8gc2xlZXAgdG8gc2F2ZSBwb3dlciAqLwogICAgIHlhd24oZGV2LCBTTEVFUCk7Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTg1OCw5ICsxODU4LDkgQEAKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICAKKwogICAgIGxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gKGludCkoaW5sKERFNFg1X01GQykgJiAoTUZDX09WRkwgfCBNRkNfQ05UUikpOwotICAgIAorCiAgICAgcmV0dXJuICZscC0+c3RhdHM7CiB9CiAKQEAgLTE4ODYsNyArMTg4Niw3IEBACiAJICAgICAgICgqKHMxNiAqKSZidWZbNF0gPT0gKihzMTYgKikmZGV2LT5kZXZfYWRkcls0XSkpIHsKICAgICAgICAgbHAtPnBrdFN0YXRzLnVuaWNhc3QrKzsKICAgICB9Ci0JCQorCiAgICAgbHAtPnBrdFN0YXRzLmJpbnNbMF0rKzsgICAgICAgLyogRHVwbGljYXRlcyBzdGF0cy5yeF9wYWNrZXRzICovCiAgICAgaWYgKGxwLT5wa3RTdGF0cy5iaW5zWzBdID09IDApIHsgLyogUmVzZXQgY291bnRlcnMgKi8KICAgICAgICAgbWVtc2V0KChjaGFyICopJmxwLT5wa3RTdGF0cywgMCwgc2l6ZW9mKGxwLT5wa3RTdGF0cykpOwpAQCAtMTkzNywxMSArMTkzNywxMSBAQAogCSAgICBvbXIgPSBpbmwoREU0WDVfT01SKTsKIAkgICAgb21yIHw9IE9NUl9QUjsKIAkgICAgb3V0bChvbXIsIERFNFg1X09NUik7Ci0JfSBlbHNlIHsgCisJfSBlbHNlIHsKIAkgICAgU2V0TXVsdGljYXN0RmlsdGVyKGRldik7Ci0JICAgIGxvYWRfcGFja2V0KGRldiwgbHAtPnNldHVwX2ZyYW1lLCBURF9JQyB8IFBFUkZFQ1RfRiB8IFREX1NFVCB8IAorCSAgICBsb2FkX3BhY2tldChkZXYsIGxwLT5zZXR1cF9mcmFtZSwgVERfSUMgfCBQRVJGRUNUX0YgfCBURF9TRVQgfAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRVUF9GUkFNRV9MRU4sIChzdHJ1Y3Qgc2tfYnVmZiAqKTEpOwotCSAgICAKKwogCSAgICBscC0+dHhfbmV3ID0gKCsrbHAtPnR4X25ldykgJSBscC0+dHhSaW5nU2l6ZTsKIAkgICAgb3V0bChQT0xMX0RFTUFORCwgREU0WDVfVFBEKTsgICAgICAgLyogU3RhcnQgdGhlIFRYICovCiAJICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwpAQCAtMTk2OSwyMCArMTk2OSwyMCBAQAogICAgIG9tciA9IGlubChERTRYNV9PTVIpOwogICAgIG9tciAmPSB+KE9NUl9QUiB8IE9NUl9QTSk7CiAgICAgcGEgPSBidWlsZF9zZXR1cF9mcmFtZShkZXYsIEFMTCk7ICAgICAgICAvKiBCdWlsZCB0aGUgYmFzaWMgZnJhbWUgKi8KLSAgICAKKwogICAgIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiAxNCkpIHsKIAlvbXIgfD0gT01SX1BNOyAgICAgICAgICAgICAgICAgICAgICAgLyogUGFzcyBhbGwgbXVsdGljYXN0cyAqLwogICAgIH0gZWxzZSBpZiAobHAtPnNldHVwX2YgPT0gSEFTSF9QRVJGKSB7ICAgLyogSGFzaCBGaWx0ZXJpbmcgKi8KIAlmb3IgKGk9MDtpPGRldi0+bWNfY291bnQ7aSsrKSB7ICAgICAgLyogZm9yIGVhY2ggYWRkcmVzcyBpbiB0aGUgbGlzdCAqLwogCSAgICBhZGRycz1kbWktPmRtaV9hZGRyOwogCSAgICBkbWk9ZG1pLT5uZXh0OwotCSAgICBpZiAoKCphZGRycyAmIDB4MDEpID09IDEpIHsgICAgICAvKiBtdWx0aWNhc3QgYWRkcmVzcz8gKi8gCisJICAgIGlmICgoKmFkZHJzICYgMHgwMSkgPT0gMSkgeyAgICAgIC8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHJzKTsKIAkJaGFzaGNvZGUgPSBjcmMgJiBIQVNIX0JJVFM7ICAvKiBoYXNoY29kZSBpcyA5IExTYiBvZiBDUkMgKi8KLQkJCisKIAkJYnl0ZSA9IGhhc2hjb2RlID4+IDM7ICAgICAgICAvKiBiaXRbMy04XSAtPiBieXRlIGluIGZpbHRlciAqLwogCQliaXQgPSAxIDw8IChoYXNoY29kZSAmIDB4MDcpOy8qIGJpdFswLTJdIC0+IGJpdCBpbiBieXRlICovCi0JCQorCiAJCWJ5dGUgPDw9IDE7ICAgICAgICAgICAgICAgICAgLyogY2FsYyBvZmZzZXQgaW50byBzZXR1cCBmcmFtZSAqLwogCQlpZiAoYnl0ZSAmIDB4MDIpIHsKIAkJICAgIGJ5dGUgLT0gMTsKQEAgLTE5OTQsMTQgKzE5OTQsMTQgQEAKIAlmb3IgKGo9MDsgajxkZXYtPm1jX2NvdW50OyBqKyspIHsKIAkgICAgYWRkcnM9ZG1pLT5kbWlfYWRkcjsKIAkgICAgZG1pPWRtaS0+bmV4dDsKLQkgICAgZm9yIChpPTA7IGk8RVRIX0FMRU47IGkrKykgeyAKKwkgICAgZm9yIChpPTA7IGk8RVRIX0FMRU47IGkrKykgewogCQkqKHBhICsgKGkmMSkpID0gKmFkZHJzKys7CiAJCWlmIChpICYgMHgwMSkgcGEgKz0gNDsKIAkgICAgfQogCX0KICAgICB9CiAgICAgb3V0bChvbXIsIERFNFg1X09NUik7Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTIwMzEsMTggKzIwMzEsMTggQEAKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIHJlbGVhc2VfcmVnXzE7CiAJfQotCQorCiAJaWYgKCEoZGV2ID0gYWxsb2NfZXRoZXJkZXYgKHNpemVvZiAoc3RydWN0IGRlNHg1X3ByaXZhdGUpKSkpIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJZ290byByZWxlYXNlX3JlZ18yOwogCX0KIAlscCA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAljZmlkID0gKHUzMikgaW5sKFBDSV9DRklEKTsKIAlscC0+Y2ZydiA9ICh1X3Nob3J0KSBpbmwoUENJX0NGUlYpOwogCWRldmljZSA9IChjZmlkID4+IDgpICYgMHgwMGZmZmYwMDsKIAl2ZW5kb3IgPSAodV9zaG9ydCkgY2ZpZDsKLQkgICAgCisKIAkvKiBSZWFkIHRoZSBFSVNBIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCiAJcmVndmFsID0gaW5iKEVJU0FfUkVHMCkgJiAoRVIwX0lOVEwgfCBFUjBfSU5UVCk7CiAjaWZkZWYgQ09ORklHX0FMUEhBCkBAIC0yMDUwLDcgKzIwNTAsNyBAQAogCSAqIGNhcmUgYWJvdXQgdGhlIEVJU0EgY29uZmlndXJhdGlvbiwgYW5kIHRodXMgZG9lc24ndAogCSAqIGNvbmZpZ3VyZSB0aGUgUExYIGJyaWRnZSBwcm9wZXJseS4gT2ggd2VsbC4uLiBTaW1wbHkgbWltaWMKIAkgKiB0aGUgRUlTQSBjb25maWcgZmlsZSB0byBzb3J0IGl0IG91dC4gKi8KLQkKKwogCS8qIEVJU0EgUkVHMTogQXNzZXJ0IERlY0NoaXAgMjEwNDAgSFcgUmVzZXQgKi8KIAlvdXRiIChFUjFfSUFNIHwgMSwgRUlTQV9SRUcxKTsKIAltZGVsYXkgKDEpOwpAQCAtMjA2MSwxMiArMjA2MSwxMiBAQAogCiAJLyogRUlTQSBSRUczOiBSL1cgQnVyc3QgVHJhbnNmZXIgRW5hYmxlICovCiAJb3V0YiAoRVIzX0JXRSB8IEVSM19CUkUsIEVJU0FfUkVHMyk7Ci0JCisKIAkvKiAzMl9iaXQgc2xhdmUvbWFzdGVyLCBQcmVlbXB0IFRpbWU9MjMgYmNsa3MsIFVubGF0Y2hlZCBJbnRlcnJ1cHQgKi8KIAlvdXRiIChFUjBfQlNXIHwgRVIwX0JNVyB8IEVSMF9FUFQgfCByZWd2YWwsIEVJU0FfUkVHMCk7CiAjZW5kaWYKIAlpcnEgPSBkZTR4NV9pcnFbKHJlZ3ZhbCA+PiAxKSAmIDB4MDNdOwotCQorCiAJaWYgKGlzX0RDMjExNHgpIHsKIAkgICAgZGV2aWNlID0gKChscC0+Y2ZydiAmIENGUlZfUk4pIDwgREMyMTE0eF9CUksgPyBEQzIxMTQyIDogREMyMTE0Myk7CiAJfQpAQCAtMjA3Nyw3ICsyMDc3LDcgQEAKIAlvdXRsKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUFTVEVSLCBQQ0lfQ0ZDUyk7CiAJb3V0bCgweDAwMDA2MDAwLCBQQ0lfQ0ZMVCk7CiAJb3V0bChpb2Jhc2UsIFBDSV9DQklPKTsKLQkgICAgCisKIAlEZXZpY2VQcmVzZW50KGRldiwgRUlTQV9BUFJPTSk7CiAKIAlkZXYtPmlycSA9IGlycTsKQEAgLTIxMDIsNyArMjEwMiw3IEBACiAKIAlkZXYgPSBkZXZpY2UtPmRyaXZlcl9kYXRhOwogCWlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCQorCiAJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldik7CiAJZnJlZV9uZXRkZXYgKGRldik7CiAJcmVsZWFzZV9yZWdpb24gKGlvYmFzZSArIERFNFg1X0VJU0FfSU9fUE9SVFMsIERFNFg1X0VJU0FfVE9UQUxfU0laRSk7CkBAIC0yMTMxLDExICsyMTMxLDExIEBACiAKIC8qCiAqKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBjdXJyZW50IGJ1cyAod2hpY2ggaXMgPjApIGZvciBhIERFQ2NoaXAgd2l0aCBhbgotKiogU1JPTSwgc28gdGhhdCBpbiBtdWx0aXBvcnQgY2FyZHMgdGhhdCBoYXZlIG9uZSBTUk9NIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIAorKiogU1JPTSwgc28gdGhhdCBpbiBtdWx0aXBvcnQgY2FyZHMgdGhhdCBoYXZlIG9uZSBTUk9NIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlCiAqKiBERUNjaGlwcywgd2UgY2FuIGZpbmQgdGhlIGJhc2UgU1JPTSBpcnJlc3BlY3RpdmUgb2YgdGhlIEJJT1Mgc2NhbiBkaXJlY3Rpb24uCiAqKiBGb3Igc2luZ2xlIHBvcnQgY2FyZHMgdGhpcyBpcyBhIHRpbWUgd2FzdGVyLi4uCiAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IAorc3RhdGljIHZvaWQgX19kZXZpbml0CiBzcm9tX3NlYXJjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKICAgICB1X2NoYXIgcGI7CkBAIC0yMTYzLDcgKzIxNjMsNyBAQAogCS8qIFNldCB0aGUgZGV2aWNlIG51bWJlciBpbmZvcm1hdGlvbiAqLwogCWxwLT5kZXZpY2UgPSBQQ0lfU0xPVCh0aGlzX2Rldi0+ZGV2Zm4pOwogCWxwLT5idXNfbnVtID0gcGI7Ci0JICAgIAorCiAJLyogU2V0IHRoZSBjaGlwc2V0IGluZm9ybWF0aW9uICovCiAJaWYgKGlzX0RDMjExNHgpIHsKIAkgICAgZGV2aWNlID0gKChjZnJ2ICYgQ0ZSVl9STikgPCBEQzIxMTR4X0JSSyA/IERDMjExNDIgOiBEQzIxMTQzKTsKQEAgLTIxNzYsNyArMjE3Niw3IEBACiAJLyogRmV0Y2ggdGhlIElSUSB0byBiZSB1c2VkICovCiAJaXJxID0gdGhpc19kZXYtPmlycTsKIAlpZiAoKGlycSA9PSAwKSB8fCAoaXJxID09IDB4ZmYpIHx8ICgoaW50KWlycSA9PSAtMSkpIGNvbnRpbnVlOwotCSAgICAKKwogCS8qIENoZWNrIGlmIEkvTyBhY2Nlc3NlcyBhcmUgZW5hYmxlZCAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRoaXNfZGV2LCBQQ0lfQ09NTUFORCwgJnN0YXR1cyk7CiAJaWYgKCEoc3RhdHVzICYgUENJX0NPTU1BTkRfSU8pKSBjb250aW51ZTsKQEAgLTIyNTQsNyArMjI1NCw3IEBACiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxwLT5idXMgPSBQQ0k7CiAJbHAtPmJ1c19udW0gPSAwOwotCQorCiAJLyogU2VhcmNoIGZvciBhbiBTUk9NIG9uIHRoaXMgYnVzICovCiAJaWYgKGxwLT5idXNfbnVtICE9IHBiKSB7CiAJICAgIGxwLT5idXNfbnVtID0gcGI7CkBAIC0yMjY3LDcgKzIyNjcsNyBAQAogCS8qIFNldCB0aGUgZGV2aWNlIG51bWJlciBpbmZvcm1hdGlvbiAqLwogCWxwLT5kZXZpY2UgPSBkZXZfbnVtOwogCWxwLT5idXNfbnVtID0gcGI7Ci0JCisKIAkvKiBTZXQgdGhlIGNoaXBzZXQgaW5mb3JtYXRpb24gKi8KIAlpZiAoaXNfREMyMTE0eCkgewogCSAgICBkZXZpY2UgPSAoKGxwLT5jZnJ2ICYgQ0ZSVl9STikgPCBEQzIxMTR4X0JSSyA/IERDMjExNDIgOiBEQzIxMTQzKTsKQEAgLTIyODMsNyArMjI4Myw3IEBACiAJCWVycm9yID0gLUVOT0RFVjsKIAkJZ290byBmcmVlX2RldjsKIAl9Ci0JICAgIAorCiAJLyogQ2hlY2sgaWYgSS9PIGFjY2Vzc2VzIGFuZCBCdXMgTWFzdGVyaW5nIGFyZSBlbmFibGVkICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZzdGF0dXMpOwogI2lmZGVmIF9fcG93ZXJwY19fCkBAIC0yMzIyLDcgKzIzMjIsNyBAQAogCX0KIAogCWRldi0+aXJxID0gaXJxOwotCQorCiAJaWYgKChlcnJvciA9IGRlNHg1X2h3X2luaXQoZGV2LCBpb2Jhc2UsICZwZGV2LT5kZXYpKSkgewogCQlnb3RvIHJlbGVhc2U7CiAJfQpAQCAtMjM3Nyw3ICsyMzc3LDcgQEAKICoqIEF1dG8gY29uZmlndXJlIHRoZSBtZWRpYSBoZXJlIHJhdGhlciB0aGFuIHNldHRpbmcgdGhlIHBvcnQgYXQgY29tcGlsZQogKiogdGltZS4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSBkZTR4NV9pbml0KCkgYW5kIHdoZW4gYSBsb3NzIG9mIG1lZGlhIGlzCiAqKiBkZXRlY3RlZCAoZXhjZXNzaXZlIGNvbGxpc2lvbnMsIGxvc3Mgb2YgY2Fycmllciwgbm8gY2FycmllciBvciBsaW5rIGZhaWwKLSoqIFtUUF0gb3Igbm8gcmVjZW50IHJlY2VpdmUgYWN0aXZpdHkpIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGJlZW4gCisqKiBbVFBdIG9yIG5vIHJlY2VudCByZWNlaXZlIGFjdGl2aXR5KSB0byBjaGVjayB3aGV0aGVyIHRoZSB1c2VyIGhhcyBiZWVuCiAqKiBzbmVha3kgYW5kIGNoYW5nZWQgdGhlIHBvcnQgb24gdXMuCiAqLwogc3RhdGljIGludApAQCAtMjQwNSw3ICsyNDA1LDcgQEAKICAgICB9CiAKICAgICBlbmFibGVfYXN0KGRldiwgbmV4dF90aWNrKTsKLSAgICAKKwogICAgIHJldHVybiAobHAtPm1lZGlhKTsKIH0KIApAQCAtMjQyOCw3ICsyNDI4LDcgQEAKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IG5leHRfdGljayA9IERFNFg1X0FVVE9TRU5TRV9NUzsKICAgICBzMzIgaW1yOwotICAgIAorCiAgICAgc3dpdGNoIChscC0+bWVkaWEpIHsKICAgICBjYXNlIElOSVQ6CiAJRElTQUJMRV9JUlFzOwpAQCAtMjQ0NywzNiArMjQ0NywzNiBAQAogCWxwLT5sb2NhbF9zdGF0ZSA9IDA7CiAJbmV4dF90aWNrID0gZGMyMTA0MF9hdXRvY29uZihkZXYpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBUUDoKLQluZXh0X3RpY2sgPSBkYzIxMDQwX3N0YXRlKGRldiwgMHg4ZjAxLCAweGZmZmYsIDB4MDAwMCwgMzAwMCwgQk5DX0FVSSwgCisJbmV4dF90aWNrID0gZGMyMTA0MF9zdGF0ZShkZXYsIDB4OGYwMSwgMHhmZmZmLCAweDAwMDAsIDMwMDAsIEJOQ19BVUksCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBfU1VTUEVDVCwgdGVzdF90cCk7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIFRQX1NVU1BFQ1Q6CiAJbmV4dF90aWNrID0gZGU0eDVfc3VzcGVjdF9zdGF0ZShkZXYsIDEwMDAsIFRQLCB0ZXN0X3RwLCBkYzIxMDQwX2F1dG9jb25mKTsKIAlicmVhazsKLQkKKwogICAgIGNhc2UgQk5DOgogICAgIGNhc2UgQVVJOgogICAgIGNhc2UgQk5DX0FVSToKLQluZXh0X3RpY2sgPSBkYzIxMDQwX3N0YXRlKGRldiwgMHg4ZjA5LCAweDA3MDUsIDB4MDAwNiwgMzAwMCwgRVhUX1NJQSwgCisJbmV4dF90aWNrID0gZGMyMTA0MF9zdGF0ZShkZXYsIDB4OGYwOSwgMHgwNzA1LCAweDAwMDYsIDMwMDAsIEVYVF9TSUEsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTkNfQVVJX1NVU1BFQ1QsIHBpbmdfbWVkaWEpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBCTkNfQVVJX1NVU1BFQ1Q6CiAJbmV4dF90aWNrID0gZGU0eDVfc3VzcGVjdF9zdGF0ZShkZXYsIDEwMDAsIEJOQ19BVUksIHBpbmdfbWVkaWEsIGRjMjEwNDBfYXV0b2NvbmYpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBFWFRfU0lBOgotCW5leHRfdGljayA9IGRjMjEwNDBfc3RhdGUoZGV2LCAweDMwNDEsIDB4MDAwMCwgMHgwMDA2LCAzMDAwLCAKKwluZXh0X3RpY2sgPSBkYzIxMDQwX3N0YXRlKGRldiwgMHgzMDQxLCAweDAwMDAsIDB4MDAwNiwgMzAwMCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkMsIEVYVF9TSUFfU1VTUEVDVCwgcGluZ19tZWRpYSk7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEVYVF9TSUFfU1VTUEVDVDoKIAluZXh0X3RpY2sgPSBkZTR4NV9zdXNwZWN0X3N0YXRlKGRldiwgMTAwMCwgRVhUX1NJQSwgcGluZ19tZWRpYSwgZGMyMTA0MF9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIE5DOgogCS8qIGRlZmF1bHQgdG8gVFAgZm9yIGFsbCAqLwogCXJlc2V0X2luaXRfc2lhKGRldiwgMHg4ZjAxLCAweGZmZmYsIDB4MDAwMCk7CkBAIC0yNDg4LDEzICsyNDg4LDEzIEBACiAJbHAtPnR4X2VuYWJsZSA9IE5POwogCWJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBuZXh0X3RpY2s7CiB9CiAKIHN0YXRpYyBpbnQKIGRjMjEwNDBfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNzcjEzLCBpbnQgY3NyMTQsIGludCBjc3IxNSwgaW50IHRpbWVvdXQsCi0JICAgICAgaW50IG5leHRfc3RhdGUsIGludCBzdXNwZWN0X3N0YXRlLCAKKwkgICAgICBpbnQgbmV4dF9zdGF0ZSwgaW50IHN1c3BlY3Rfc3RhdGUsCiAJICAgICAgaW50ICgqZm4pKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCkpCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI1MDcsNyArMjUwNyw3IEBACiAJbHAtPmxvY2FsX3N0YXRlKys7CiAJbmV4dF90aWNrID0gNTAwOwogCWJyZWFrOwotCSAgICAKKwogICAgIGNhc2UgMToKIAlpZiAoIWxwLT50eF9lbmFibGUpIHsKIAkgICAgbGlua0JhZCA9IGZuKGRldiwgdGltZW91dCk7CkBAIC0yNTI3LDcgKzI1MjcsNyBAQAogCX0KIAlicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gbmV4dF90aWNrOwogfQogCkBAIC0yNTgyLDcgKzI1ODIsNyBAQAogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBzMzIgc3RzLCBpcnFzLCBpcnFfbWFzaywgaW1yLCBvbXI7CiAgICAgaW50IG5leHRfdGljayA9IERFNFg1X0FVVE9TRU5TRV9NUzsKLSAgICAKKwogICAgIHN3aXRjaCAobHAtPm1lZGlhKSB7CiAgICAgY2FzZSBJTklUOgogCURJU0FCTEVfSVJRczsKQEAgLTI2MDMsNyArMjYwMyw3IEBACiAJbHAtPmxvY2FsX3N0YXRlID0gMDsKIAluZXh0X3RpY2sgPSBkYzIxMDQxX2F1dG9jb25mKGRldik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIFRQX05XOgogCWlmIChscC0+dGltZW91dCA8IDApIHsKIAkgICAgb21yID0gaW5sKERFNFg1X09NUik7LyogU2V0IHVwIGZ1bGwgZHVwbGV4IGZvciB0aGUgYXV0b25lZ290aWF0ZSAqLwpAQCAtMjYyMyw3ICsyNjIzLDcgQEAKIAkgICAgbmV4dF90aWNrID0gZGMyMTA0MV9hdXRvY29uZihkZXYpOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgQU5TOgogCWlmICghbHAtPnR4X2VuYWJsZSkgewogCSAgICBpcnFzID0gU1RTX0xOUDsKQEAgLTI2NDUsMTEgKzI2NDUsMTEgQEAKIAkgICAgbmV4dF90aWNrID0gMzAwMDsKIAl9CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEFOU19TVVNQRUNUOgogCW5leHRfdGljayA9IGRlNHg1X3N1c3BlY3Rfc3RhdGUoZGV2LCAxMDAwLCBBTlMsIHRlc3RfdHAsIGRjMjEwNDFfYXV0b2NvbmYpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBUUDoKIAlpZiAoIWxwLT50eF9lbmFibGUpIHsKIAkgICAgaWYgKGxwLT50aW1lb3V0IDwgMCkgewpAQCAtMjY3OSwxMSArMjY3OSwxMSBAQAogCSAgICBuZXh0X3RpY2sgPSAzMDAwOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgVFBfU1VTUEVDVDoKIAluZXh0X3RpY2sgPSBkZTR4NV9zdXNwZWN0X3N0YXRlKGRldiwgMTAwMCwgVFAsIHRlc3RfdHAsIGRjMjEwNDFfYXV0b2NvbmYpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBBVUk6CiAJaWYgKCFscC0+dHhfZW5hYmxlKSB7CiAJICAgIGlmIChscC0+dGltZW91dCA8IDApIHsKQEAgLTI3MDksMTEgKzI3MDksMTEgQEAKIAkgICAgbmV4dF90aWNrID0gMzAwMDsKIAl9CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEFVSV9TVVNQRUNUOgogCW5leHRfdGljayA9IGRlNHg1X3N1c3BlY3Rfc3RhdGUoZGV2LCAxMDAwLCBBVUksIHBpbmdfbWVkaWEsIGRjMjEwNDFfYXV0b2NvbmYpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBCTkM6CiAJc3dpdGNoIChscC0+bG9jYWxfc3RhdGUpIHsKIAljYXNlIDA6CkBAIC0yNzMxLDcgKzI3MzEsNyBAQAogCQluZXh0X3RpY2sgPSBkYzIxMDQxX2F1dG9jb25mKGRldik7CiAJICAgIH0KIAkgICAgYnJlYWs7Ci0JICAgIAorCiAJY2FzZSAxOgogCSAgICBpZiAoIWxwLT50eF9lbmFibGUpIHsKIAkJaWYgKChzdHMgPSBwaW5nX21lZGlhKGRldiwgMzAwMCkpIDwgMCkgewpAQCAtMjc1MSwxMSArMjc1MSwxMSBAQAogCSAgICBicmVhazsKIAl9CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEJOQ19TVVNQRUNUOgogCW5leHRfdGljayA9IGRlNHg1X3N1c3BlY3Rfc3RhdGUoZGV2LCAxMDAwLCBCTkMsIHBpbmdfbWVkaWEsIGRjMjEwNDFfYXV0b2NvbmYpOwogCWJyZWFrOwotCQorCiAgICAgY2FzZSBOQzoKIAlvbXIgPSBpbmwoREU0WDVfT01SKTsgICAgLyogU2V0IHVwIGZ1bGwgZHVwbGV4IGZvciB0aGUgYXV0b25lZ290aWF0ZSAqLwogCW91dGwob21yIHwgT01SX0ZEWCwgREU0WDVfT01SKTsKQEAgLTI3NjgsNyArMjc2OCw3IEBACiAJbHAtPnR4X2VuYWJsZSA9IE5POwogCWJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBuZXh0X3RpY2s7CiB9CiAKQEAgLTI3ODQsOSArMjc4NCw5IEBACiAgICAgaW50IGFuYSwgYW5scGEsIGNhcCwgY3IsIHNsbmssIHNyOwogICAgIGludCBuZXh0X3RpY2sgPSBERTRYNV9BVVRPU0VOU0VfTVM7CiAgICAgdV9sb25nIGltciwgb21yLCBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICAKKwogICAgIHN3aXRjaChscC0+bWVkaWEpIHsKLSAgICBjYXNlIElOSVQ6IAorICAgIGNhc2UgSU5JVDoKICAgICAgICAgaWYgKGxwLT50aW1lb3V0IDwgMCkgewogCSAgICBESVNBQkxFX0lSUXM7CiAJICAgIGxwLT50eF9lbmFibGUgPSBGQUxTRTsKQEAgLTI4MTMsNyArMjgxMyw3IEBACiAJCSAgICBscC0+bWVkaWEgPSBfMTAwTWI7CiAJCX0gZWxzZSBpZiAobHAtPmF1dG9zZW5zZSA9PSBfMTBNYikgewogCQkgICAgbHAtPm1lZGlhID0gXzEwTWI7Ci0JCX0gZWxzZSBpZiAoKGxwLT5hdXRvc2Vuc2UgPT0gQVVUTykgJiYgCisJCX0gZWxzZSBpZiAoKGxwLT5hdXRvc2Vuc2UgPT0gQVVUTykgJiYKIAkJCSAgICAgICAgICAgICgoc3I9aXNfYW5jX2NhcGFibGUoZGV2KSkgJiBNSUlfU1JfQU5DKSkgewogCQkgICAgYW5hID0gKCgoc3IgPj4gNikgJiBNSUlfQU5BX1RBRikgfCBNSUlfQU5BX0NTTUEpOwogCQkgICAgYW5hICY9IChscC0+ZmR4ID8gfjAgOiB+TUlJX0FOQV9GREFNKTsKQEAgLTI4MzEsNyArMjgzMSw3IEBACiAJICAgIG5leHRfdGljayA9IGRjMjExNDBtX2F1dG9jb25mKGRldik7CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBBTlM6CiAJc3dpdGNoIChscC0+bG9jYWxfc3RhdGUpIHsKIAljYXNlIDA6CkBAIC0yODUxLDcgKzI4NTEsNyBAQAogCQluZXh0X3RpY2sgPSBkYzIxMTQwbV9hdXRvY29uZihkZXYpOwogCSAgICB9CiAJICAgIGJyZWFrOwotCSAgICAKKwogCWNhc2UgMToKIAkgICAgaWYgKChzcj10ZXN0X21paV9yZWcoZGV2LCBNSUlfU1IsIE1JSV9TUl9BU1NDLCBUUlVFLCAyMDAwKSkgPCAwKSB7CiAJCW5leHRfdGljayA9IHNyICYgflRJTUVSX0NCOwpAQCAtMjg2Miw3ICsyODYyLDcgQEAKIAkJICAgIGxwLT50bXAgPSBNSUlfU1JfQVNTQzsKIAkJICAgIGFubHBhID0gbWlpX3JkKE1JSV9BTkxQQSwgbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLCBERTRYNV9NSUkpOwogCQkgICAgYW5hID0gbWlpX3JkKE1JSV9BTkEsIGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkciwgREU0WDVfTUlJKTsKLQkJICAgIGlmICghKGFubHBhICYgTUlJX0FOTFBBX1JGKSAmJiAKKwkJICAgIGlmICghKGFubHBhICYgTUlJX0FOTFBBX1JGKSAmJgogCQkJIChjYXAgPSBhbmxwYSAmIE1JSV9BTkxQQV9UQUYgJiBhbmEpKSB7CiAJCQlpZiAoY2FwICYgTUlJX0FOQV8xMDBNKSB7CiAJCQkgICAgbHAtPmZkeCA9ICgoYW5hICYgYW5scGEgJiBNSUlfQU5BX0ZEQU0gJiBNSUlfQU5BXzEwME0pID8gVFJVRSA6IEZBTFNFKTsKQEAgLTI4NzksMTAgKzI4NzksMTAgQEAKIAkgICAgYnJlYWs7CiAJfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBTUERfREVUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENob29zZSAxME1iL3Mgb3IgMTAwTWIvcyAqLwogICAgICAgICBpZiAobHAtPnRpbWVvdXQgPCAwKSB7Ci0JICAgIGxwLT50bXAgPSAobHAtPnBoeVtscC0+YWN0aXZlXS5pZCA/IE1JSV9TUl9MS1MgOiAKKwkgICAgbHAtPnRtcCA9IChscC0+cGh5W2xwLT5hY3RpdmVdLmlkID8gTUlJX1NSX0xLUyA6CiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAofmdlcF9yZChkZXYpICYgR0VQX0xOUCkpOwogCSAgICBTRVRfMTAwTWJfUERFVDsKIAl9CkBAIC0yODk5LDcgKzI4OTksNyBAQAogCSAgICBuZXh0X3RpY2sgPSBkYzIxMTQwbV9hdXRvY29uZihkZXYpOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgXzEwME1iOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgMTAwTWIvcyAqLwogICAgICAgICBuZXh0X3RpY2sgPSAzMDAwOwogCWlmICghbHAtPnR4X2VuYWJsZSkgewpAQCAtMjkzMyw3ICsyOTMzLDcgQEAKIAkgICAgfQogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgTkM6CiAgICAgICAgIGlmIChscC0+bWVkaWEgIT0gbHAtPmNfbWVkaWEpIHsKIAkgICAgZGU0eDVfZGJnX21lZGlhKGRldik7CkBAIC0yOTQzLDcgKzI5NDMsNyBAQAogCWxwLT50eF9lbmFibGUgPSBGQUxTRTsKIAlicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gbmV4dF90aWNrOwogfQogCkBAIC0zMDAyLDcgKzMwMDIsNyBAQAogCQlscC0+bWVkaWEgPSBBVUk7CiAJICAgIH0gZWxzZSB7CiAJCWxwLT5tZWRpYSA9IFNQRF9ERVQ7Ci0JCWlmICgobHAtPmluZm9ibG9ja19tZWRpYSA9PSBBTlMpICYmIAorCQlpZiAoKGxwLT5pbmZvYmxvY2tfbWVkaWEgPT0gQU5TKSAmJgogCQkgICAgICAgICAgICAgICAgICAgICgoc3I9aXNfYW5jX2NhcGFibGUoZGV2KSkgJiBNSUlfU1JfQU5DKSkgewogCQkgICAgYW5hID0gKCgoc3IgPj4gNikgJiBNSUlfQU5BX1RBRikgfCBNSUlfQU5BX0NTTUEpOwogCQkgICAgYW5hICY9IChscC0+ZmR4ID8gfjAgOiB+TUlJX0FOQV9GREFNKTsKQEAgLTMwMTQsNyArMzAxNCw3IEBACiAJICAgIG5leHRfdGljayA9IGRjMjExNHhfYXV0b2NvbmYoZGV2KTsKICAgICAgICAgfQogCWJyZWFrOwotCQorCiAgICAgY2FzZSBBTlM6CiAJc3dpdGNoIChscC0+bG9jYWxfc3RhdGUpIHsKIAljYXNlIDA6CkBAIC0zMDM0LDcgKzMwMzQsNyBAQAogCQluZXh0X3RpY2sgPSBkYzIxMTR4X2F1dG9jb25mKGRldik7CiAJICAgIH0KIAkgICAgYnJlYWs7Ci0JICAgIAorCiAJY2FzZSAxOgogCSAgICBpZiAoKHNyPXRlc3RfbWlpX3JlZyhkZXYsIE1JSV9TUiwgTUlJX1NSX0FTU0MsIFRSVUUsIDIwMDApKSA8IDApIHsKIAkJbmV4dF90aWNrID0gc3IgJiB+VElNRVJfQ0I7CkBAIC0zMDQ1LDcgKzMwNDUsNyBAQAogCQkgICAgbHAtPnRtcCA9IE1JSV9TUl9BU1NDOwogCQkgICAgYW5scGEgPSBtaWlfcmQoTUlJX0FOTFBBLCBscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsIERFNFg1X01JSSk7CiAJCSAgICBhbmEgPSBtaWlfcmQoTUlJX0FOQSwgbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLCBERTRYNV9NSUkpOwotCQkgICAgaWYgKCEoYW5scGEgJiBNSUlfQU5MUEFfUkYpICYmIAorCQkgICAgaWYgKCEoYW5scGEgJiBNSUlfQU5MUEFfUkYpICYmCiAJCQkgKGNhcCA9IGFubHBhICYgTUlJX0FOTFBBX1RBRiAmIGFuYSkpIHsKIAkJCWlmIChjYXAgJiBNSUlfQU5BXzEwME0pIHsKIAkJCSAgICBscC0+ZmR4ID0gKChhbmEgJiBhbmxwYSAmIE1JSV9BTkFfRkRBTSAmIE1JSV9BTkFfMTAwTSkgPyBUUlVFIDogRkFMU0UpOwpAQCAtMzA4NywxMSArMzA4NywxMSBAQAogCSAgICBuZXh0X3RpY2sgPSAzMDAwOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgQVVJX1NVU1BFQ1Q6CiAJbmV4dF90aWNrID0gZGU0eDVfc3VzcGVjdF9zdGF0ZShkZXYsIDEwMDAsIEFVSSwgcGluZ19tZWRpYSwgZGMyMTE0eF9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIEJOQzoKIAlzd2l0Y2ggKGxwLT5sb2NhbF9zdGF0ZSkgewogCWNhc2UgMDoKQEAgLTMxMDksNyArMzEwOSw3IEBACiAJCW5leHRfdGljayA9IGRjMjExNHhfYXV0b2NvbmYoZGV2KTsKIAkgICAgfQogCSAgICBicmVhazsKLQkgICAgCisKIAljYXNlIDE6CiAJICAgIGlmICghbHAtPnR4X2VuYWJsZSkgewogCQlpZiAoKHN0cyA9IHBpbmdfbWVkaWEoZGV2LCAzMDAwKSkgPCAwKSB7CkBAIC0zMTMwLDExICszMTMwLDExIEBACiAJICAgIGJyZWFrOwogCX0KIAlicmVhazsKLQkKKwogICAgIGNhc2UgQk5DX1NVU1BFQ1Q6CiAJbmV4dF90aWNrID0gZGU0eDVfc3VzcGVjdF9zdGF0ZShkZXYsIDEwMDAsIEJOQywgcGluZ19tZWRpYSwgZGMyMTE0eF9hdXRvY29uZik7CiAJYnJlYWs7Ci0JCisKICAgICBjYXNlIFNQRF9ERVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hvb3NlIDEwTWIvcyBvciAxMDBNYi9zICovCiAJICBpZiAoc3JvbV9tYXBfbWVkaWEoZGV2KSA8IDApIHsKIAkgICAgICBscC0+dGNvdW50Kys7CkBAIC0zMTYxLDcgKzMxNjEsNyBAQAogCSAgICAgIG5leHRfdGljayA9IGRjMjExNHhfYXV0b2NvbmYoZGV2KTsKIAkgIH0gZWxzZSBpZiAoKChscC0+bWVkaWEgPT0gXzEwME1iKSAmJiBpc18xMDBfdXAoZGV2KSkgfHwKIAkJICAgICAoKChscC0+bWVkaWEgPT0gXzEwTWIpIHx8IChscC0+bWVkaWEgPT0gVFApIHx8Ci0JCSAgICAgICAobHAtPm1lZGlhID09IEJOQykgICB8fCAobHAtPm1lZGlhID09IEFVSSkpICYmIAorCQkgICAgICAgKGxwLT5tZWRpYSA9PSBCTkMpICAgfHwgKGxwLT5tZWRpYSA9PSBBVUkpKSAmJgogCQkgICAgICBpc18xMF91cChkZXYpKSkgewogCSAgICAgIG5leHRfdGljayA9IGRjMjExNHhfYXV0b2NvbmYoZGV2KTsKIAkgIH0gZWxzZSB7CkBAIC0zMTY5LDcgKzMxNjksNyBAQAogCSAgICAgIGxwLT5tZWRpYSA9IElOSVQ7CiAJICB9CiAJICBicmVhazsKLQkKKwogICAgIGNhc2UgXzEwTWI6CiAgICAgICAgIG5leHRfdGljayA9IDMwMDA7CiAJaWYgKCFscC0+dHhfZW5hYmxlKSB7CkBAIC0zMjA4LDcgKzMyMDgsNyBAQAogCWxwLT5tZWRpYSA9IElOSVQ7CiAJYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIG5leHRfdGljazsKIH0KIApAQCAtMzIzMSw3ICszMjMxLDcgQEAKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAgICAgbHAtPmZkeCA9IDA7Ci0gICAgaWYgKGxwLT5pbmZvYmxvY2tfbWVkaWEgPT0gbHAtPm1lZGlhKSAKKyAgICBpZiAobHAtPmluZm9ibG9ja19tZWRpYSA9PSBscC0+bWVkaWEpCiAgICAgICByZXR1cm4gMDsKIAogICAgIHN3aXRjaChscC0+aW5mb2Jsb2NrX21lZGlhKSB7CkBAIC0zMjcwLDcgKzMyNzAsNyBAQAogICAgICAgY2FzZSBTUk9NXzEwMEJBU0VGRjoKIAlpZiAoIWxwLT5wYXJhbXMuZmR4KSByZXR1cm4gLTE7CiAJbHAtPmZkeCA9IFRSVUU7Ci0gICAgICBjYXNlIFNST01fMTAwQkFTRUY6IAorICAgICAgY2FzZSBTUk9NXzEwMEJBU0VGOgogCWlmIChscC0+cGFyYW1zLmZkeCAmJiAhbHAtPmZkeCkgcmV0dXJuIC0xOwogCWxwLT5tZWRpYSA9IF8xMDBNYjsKIAlicmVhazsKQEAgLTMyODAsOCArMzI4MCw4IEBACiAJbHAtPmZkeCA9IGxwLT5wYXJhbXMuZmR4OwogCWJyZWFrOwogCi0gICAgICBkZWZhdWx0OiAKLQlwcmludGsoIiVzOiBCYWQgbWVkaWEgY29kZSBbJWRdIGRldGVjdGVkIGluIFNST00hXG4iLCBkZXYtPm5hbWUsIAorICAgICAgZGVmYXVsdDoKKwlwcmludGsoIiVzOiBCYWQgbWVkaWEgY29kZSBbJWRdIGRldGVjdGVkIGluIFNST00hXG4iLCBkZXYtPm5hbWUsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscC0+aW5mb2Jsb2NrX21lZGlhKTsKIAlyZXR1cm4gLTE7CiAJYnJlYWs7CkBAIC0zMzU5LDcgKzMzNTksNyBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIHMzMiBzdHMsIGNzcjEyOwotICAgIAorCiAgICAgaWYgKGxwLT50aW1lb3V0IDwgMCkgewogCWxwLT50aW1lb3V0ID0gbXNlYy8xMDA7CiAJaWYgKCFscC0+dXNlU1JPTSkgeyAgICAgIC8qIEFscmVhZHkgZG9uZSBpZiBieSBTUk9NLCBlbHNlIGRjMjEwNFswMV0gKi8KQEAgLTMzNzIsMjIgKzMzNzIsMjIgQEAKIAkvKiBjbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCiAJc3RzID0gaW5sKERFNFg1X1NUUyk7CiAJb3V0bChzdHMsIERFNFg1X1NUUyk7Ci0JCisKIAkvKiBjbGVhciBjc3IxMiBOUkEgYW5kIFNSQSBiaXRzICovCiAJaWYgKChscC0+Y2hpcHNldCA9PSBEQzIxMDQxKSB8fCBscC0+dXNlU1JPTSkgewogCSAgICBjc3IxMiA9IGlubChERTRYNV9TSVNSKTsKIAkgICAgb3V0bChjc3IxMiwgREU0WDVfU0lTUik7CiAJfQogICAgIH0KLSAgICAKKwogICAgIHN0cyA9IGlubChERTRYNV9TVFMpICYgflRJTUVSX0NCOwotICAgIAorCiAgICAgaWYgKCEoc3RzICYgaXJxcykgJiYgLS1scC0+dGltZW91dCkgewogCXN0cyA9IDEwMCB8IFRJTUVSX0NCOwogICAgIH0gZWxzZSB7CiAJbHAtPnRpbWVvdXQgPSAtMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc3RzOwogfQogCkBAIC0zMzk3LDExICszMzk3LDExIEBACiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IHNpc3I7Ci0gICAgCisKICAgICBpZiAobHAtPnRpbWVvdXQgPCAwKSB7CiAJbHAtPnRpbWVvdXQgPSBtc2VjLzEwMDsKICAgICB9Ci0gICAgCisKICAgICBzaXNyID0gKGlubChERTRYNV9TSVNSKSAmIH5USU1FUl9DQikgJiAoU0lTUl9MS0YgfCBTSVNSX05DUik7CiAKICAgICBpZiAoc2lzciAmJiAtLWxwLT50aW1lb3V0KSB7CkBAIC0zNDA5LDcgKzM0MDksNyBAQAogICAgIH0gZWxzZSB7CiAJbHAtPnRpbWVvdXQgPSAtMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc2lzcjsKIH0KIApAQCAtMzQzNiw3ICszNDM2LDcgQEAKIAkgICAgbHAtPnRpbWVvdXQgPSBtc2VjL1NBTVBMRV9JTlRFUlZBTDsKIAl9CiAgICAgfQotICAgIAorCiAgICAgaWYgKGxwLT5waHlbbHAtPmFjdGl2ZV0uaWQgfHwgbHAtPnVzZVNST00pIHsKIAlnZXAgPSBpc18xMDBfdXAoZGV2KSB8IGlzX3NwZF8xMDAoZGV2KTsKICAgICB9IGVsc2UgewpAQCAtMzQ0Nyw3ICszNDQ3LDcgQEAKICAgICB9IGVsc2UgewogCWxwLT50aW1lb3V0ID0gLTE7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGdlcDsKIH0KIApAQCAtMzQ1OSwxMyArMzQ1OSwxMyBAQAogICAgIGlmIChscC0+dGltZW91dCA8IDApIHsKIAlscC0+dGltZW91dCA9IDE7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGxwLT50aW1lb3V0LS0pIHsKIAlyZXR1cm4gVElNRVJfQ0I7CiAgICAgfSBlbHNlIHsKIAlscC0+dGltZW91dCA9IC0xOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0zNDc5LDIxICszNDc5LDIxIEBACiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBpbnQgdGVzdDsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgCisKICAgICBpZiAobHAtPnRpbWVvdXQgPCAwKSB7CiAJbHAtPnRpbWVvdXQgPSBtc2VjLzEwMDsKICAgICB9Ci0gICAgCisKICAgICBpZiAocG9sKSBwb2wgPSB+MDsKICAgICByZWcgPSBtaWlfcmQoKHVfY2hhcilyZWcsIGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkciwgREU0WDVfTUlJKSAmIG1hc2s7CiAgICAgdGVzdCA9IChyZWcgXiBwb2wpICYgbWFzazsKLSAgICAKKwogICAgIGlmICh0ZXN0ICYmIC0tbHAtPnRpbWVvdXQpIHsKIAlyZWcgPSAxMDAgfCBUSU1FUl9DQjsKICAgICB9IGVsc2UgewogCWxwLT50aW1lb3V0ID0gLTE7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHJlZzsKIH0KIApAQCAtMzUwMyw3ICszNTAzLDcgQEAKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgc3BkOwotICAgIAorCiAgICAgaWYgKGxwLT51c2VNSUkpIHsKIAlzcGQgPSBtaWlfcmQobHAtPnBoeVtscC0+YWN0aXZlXS5zcGQucmVnLCBscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsIERFNFg1X01JSSk7CiAJc3BkID0gfihzcGQgXiBscC0+cGh5W2xwLT5hY3RpdmVdLnNwZC52YWx1ZSk7CkBAIC0zNTE3LDcgKzM1MTcsNyBAQAogCXNwZCA9IChscC0+YXNCaXRWYWxpZCAmIChscC0+YXNQb2xhcml0eSBeIChnZXBfcmQoZGV2KSAmIGxwLT5hc0JpdCkpKSB8CiAJICAgICAgICAgIChscC0+bGlua09LICYgfmxwLT5hc0JpdFZhbGlkKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc3BkOwogfQogCkBAIC0zNTI2LDcgKzM1MjYsNyBAQAogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotICAgIAorCiAgICAgaWYgKGxwLT51c2VNSUkpIHsKIAkvKiBEb3VibGUgcmVhZCBmb3Igc3RpY2t5IGJpdHMgJiB0ZW1wb3JhcnkgZHJvcHMgKi8KIAltaWlfcmQoTUlJX1NSLCBscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsIERFNFg1X01JSSk7CkBAIC0zNTQ3LDcgKzM1NDcsNyBAQAogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotICAgIAorCiAgICAgaWYgKGxwLT51c2VNSUkpIHsKIAkvKiBEb3VibGUgcmVhZCBmb3Igc3RpY2t5IGJpdHMgJiB0ZW1wb3JhcnkgZHJvcHMgKi8KIAltaWlfcmQoTUlJX1NSLCBscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsIERFNFg1X01JSSk7CkBAIC0zNTcwLDcgKzM1NzAsNyBAQAogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotICAgIAorCiAgICAgaWYgKGxwLT5waHlbbHAtPmFjdGl2ZV0uaWQgJiYgKCFscC0+dXNlU1JPTSB8fCBscC0+dXNlTUlJKSkgewogCXJldHVybiAobWlpX3JkKE1JSV9TUiwgbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLCBERTRYNV9NSUkpKTsKICAgICB9IGVsc2UgaWYgKChscC0+Y2hpcHNldCAmIH4weDAwZmYpID09IERDMjExNHgpIHsKQEAgLTM1OTAsMjQgKzM1OTAsMjQgQEAKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBpbnQgc2lzcjsKLSAgICAKKwogICAgIGlmIChscC0+dGltZW91dCA8IDApIHsKIAlscC0+dGltZW91dCA9IG1zZWMvMTAwOwotCQorCiAJbHAtPnRtcCA9IGxwLT50eF9uZXc7ICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSByaW5nIHBvc2l0aW9uICovCiAJbG9hZF9wYWNrZXQoZGV2LCBscC0+ZnJhbWUsIFREX0xTIHwgVERfRlMgfCBzaXplb2YobHAtPmZyYW1lKSwgKHN0cnVjdCBza19idWZmICopMSk7CiAJbHAtPnR4X25ldyA9ICgrK2xwLT50eF9uZXcpICUgbHAtPnR4UmluZ1NpemU7CiAJb3V0bChQT0xMX0RFTUFORCwgREU0WDVfVFBEKTsKICAgICB9Ci0gICAgCisKICAgICBzaXNyID0gaW5sKERFNFg1X1NJU1IpOwogCi0gICAgaWYgKCghKHNpc3IgJiBTSVNSX05DUikpICYmIAotCSgoczMyKWxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2xwLT50bXBdLnN0YXR1cykgPCAwKSAmJiAKKyAgICBpZiAoKCEoc2lzciAmIFNJU1JfTkNSKSkgJiYKKwkoKHMzMilsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tscC0+dG1wXS5zdGF0dXMpIDwgMCkgJiYKIAkgKC0tbHAtPnRpbWVvdXQpKSB7CiAJc2lzciA9IDEwMCB8IFRJTUVSX0NCOwogICAgIH0gZWxzZSB7Ci0JaWYgKCghKHNpc3IgJiBTSVNSX05DUikpICYmIAorCWlmICgoIShzaXNyICYgU0lTUl9OQ1IpKSAmJgogCSAgICAhKGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2xwLT50bXBdLnN0YXR1cykgJiAoVF9PV04gfCBURF9FUykpICYmCiAJICAgIGxwLT50aW1lb3V0KSB7CiAJICAgIHNpc3IgPSAwOwpAQCAtMzYxNiw3ICszNjE2LDcgQEAKIAl9CiAJbHAtPnRpbWVvdXQgPSAtMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gc2lzcjsKIH0KIApAQCAtMzY2OCw3ICszNjY4LDcgQEAKICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lYXIgYnVmZmVyICovCiAJbWVtY3B5KHNrYl9wdXQocCxsZW4pLGxwLT5yeF9idWZzICsgbHAtPnJ4X29sZCAqIFJYX0JVRkZfU1osbGVuKTsKICAgICB9Ci0JCSAgICAKKwogICAgIHJldHVybiBwOwogI2VuZGlmCiB9CkBAIC0zNzUxLDIzICszNzUxLDIzIEBACiAJb3V0bChscC0+ZG1hX3JpbmdzLCBERTRYNV9SUkJBKTsKIAlvdXRsKGxwLT5kbWFfcmluZ3MgKyBOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgZGU0eDVfZGVzYyksCiAJICAgICBERTRYNV9UUkJBKTsKLSAgICAKKwogCWxwLT5yeF9uZXcgPSBscC0+cnhfb2xkID0gMDsKIAlscC0+dHhfbmV3ID0gbHAtPnR4X29sZCA9IDA7Ci0gICAgCisKIAlmb3IgKGkgPSAwOyBpIDwgbHAtPnJ4UmluZ1NpemU7IGkrKykgewogCSAgICBscC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBjcHVfdG9fbGUzMihSX09XTik7CiAJfQotICAgIAorCiAJZm9yIChpID0gMDsgaSA8IGxwLT50eFJpbmdTaXplOyBpKyspIHsKIAkgICAgbHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gY3B1X3RvX2xlMzIoMCk7CiAJfQotICAgIAorCiAJYmFycmllcigpOwogCWxwLT5jYWNoZS5zYXZlX2NudC0tOwogCVNUQVJUX0RFNFg1OwogICAgIH0KLSAgICAgICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTM3OTIsNyArMzc5Miw3IEBACiAJICAgIGdlcF93cihscC0+Y2FjaGUuZ2VwYywgZGV2KTsKIAkgICAgZ2VwX3dyKGxwLT5jYWNoZS5nZXAsIGRldik7CiAJfSBlbHNlIHsKLQkgICAgcmVzZXRfaW5pdF9zaWEoZGV2LCBscC0+Y2FjaGUuY3NyMTMsIGxwLT5jYWNoZS5jc3IxNCwgCisJICAgIHJlc2V0X2luaXRfc2lhKGRldiwgbHAtPmNhY2hlLmNzcjEzLCBscC0+Y2FjaGUuY3NyMTQsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwLT5jYWNoZS5jc3IxNSk7CiAJfQogCWJyZWFrOwpAQCAtMzg1NCwyNSArMzg1NCwyNSBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogICAgIHMzMiBzdHMsIGFuczsKLSAgICAKKwogICAgIGlmIChscC0+dGltZW91dCA8IDApIHsKIAlscC0+dGltZW91dCA9IG1zZWMvMTAwOwogCW91dGwoaXJxX21hc2ssIERFNFg1X0lNUik7Ci0JCisKIAkvKiBjbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCiAJc3RzID0gaW5sKERFNFg1X1NUUyk7CiAJb3V0bChzdHMsIERFNFg1X1NUUyk7CiAgICAgfQotICAgIAorCiAgICAgYW5zID0gaW5sKERFNFg1X1NJU1IpICYgU0lTUl9BTlM7CiAgICAgc3RzID0gaW5sKERFNFg1X1NUUykgJiB+VElNRVJfQ0I7Ci0gICAgCisKICAgICBpZiAoIShzdHMgJiBpcnFzKSAmJiAoYW5zIF4gQU5TX05XT0spICYmIC0tbHAtPnRpbWVvdXQpIHsKIAlzdHMgPSAxMDAgfCBUSU1FUl9DQjsKICAgICB9IGVsc2UgewogCWxwLT50aW1lb3V0ID0gLTE7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHN0czsKIH0KIApAQCAtMzg4Miw3ICszODgyLDcgQEAKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBzMzIgaW1yLCBzdHM7Ci0gICAgCisKICAgICBpZiAoaW5sKERFNFg1X09NUikgJiBPTVJfU1IpIHsgICAvKiBPbmx5IHVubWFzayBpZiBUWC9SWCBpcyBlbmFibGVkICovCiAJaW1yID0gMDsKIAlVTk1BU0tfSVJRczsKQEAgLTM4OTAsNyArMzg5MCw3IEBACiAJb3V0bChzdHMsIERFNFg1X1NUUyk7CiAJRU5BQkxFX0lSUXM7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC0zOTM2LDE3ICszOTM2LDE3IEBACiB7CiAgICAgaW50IGk7CiAgICAgY2hhciAqYnVmID0gZnJhbWU7Ci0gICAgCisKICAgICBmb3IgKGk9MDsgaTxFVEhfQUxFTjsgaSsrKSB7ICAgICAgICAgICAgIC8qIFVzZSB0aGlzIHNvdXJjZSBhZGRyZXNzICovCiAJKmJ1ZisrID0gZGV2LT5kZXZfYWRkcltpXTsKICAgICB9CiAgICAgZm9yIChpPTA7IGk8RVRIX0FMRU47IGkrKykgeyAgICAgICAgICAgICAvKiBVc2UgdGhpcyBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJKmJ1ZisrID0gZGV2LT5kZXZfYWRkcltpXTsKICAgICB9Ci0gICAgCisKICAgICAqYnVmKysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCBsZW5ndGggKDIgYnl0ZXMpICovCiAgICAgKmJ1ZisrID0gMTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtMzk3OCw3ICszOTc4LDcgQEAKIFBDSV9zaWduYXR1cmUoY2hhciAqbmFtZSwgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwKQogewogICAgIGludCBpLCBzdGF0dXMgPSAwLCBzaWdsZW4gPSBzaXplb2YoZGU0eDVfc2lnbmF0dXJlcykvc2l6ZW9mKGNfY2hhciAqKTsKLSAgICAKKwogICAgIGlmIChscC0+Y2hpcHNldCA9PSBEQzIxMDQwKSB7CiAJc3RyY3B5KG5hbWUsICJERTQzNC81Iik7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTQwMDcsNyArNDAwNyw3IEBACiAgICAgfSBlbHNlIGlmICgobHAtPmNoaXBzZXQgJiB+MHgwMGZmKSA9PSBEQzIxMTR4KSB7CiAJbHAtPnVzZVNST00gPSBUUlVFOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQwMjQsNyArNDAyNCw3IEBACiB7CiAgICAgaW50IGksIGo9MDsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIAorCiAgICAgaWYgKGxwLT5jaGlwc2V0ID09IERDMjEwNDApIHsKIAlpZiAobHAtPmJ1cyA9PSBFSVNBKSB7CiAJICAgIGVuZXRfYWRkcl9yc3QoYXByb21fYWRkcik7IC8qIFJlc2V0IEV0aGVybmV0IEFkZHJlc3MgUk9NIFBvaW50ZXIgKi8KQEAgLTQwNDksNyArNDA0OSw3IEBACiAJfQogCWRlNHg1X2RiZ19zcm9tKChzdHJ1Y3QgZGU0eDVfc3JvbSAqKSZscC0+c3JvbSk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC00MDcxLDExICs0MDcxLDExIEBACiAgICAgc2hvcnQgc2lnTGVuZ3RoPTA7CiAgICAgczggZGF0YTsKICAgICBpbnQgaSwgajsKLSAgICAKKwogICAgIGRldi5sbHNpZy5hID0gRVRIX1BST01fU0lHOwogICAgIGRldi5sbHNpZy5iID0gRVRIX1BST01fU0lHOwogICAgIHNpZ0xlbmd0aCA9IHNpemVvZih1MzIpIDw8IDE7Ci0gICAgCisKICAgICBmb3IgKGk9MCxqPTA7ajxzaWdMZW5ndGggJiYgaTxQUk9CRV9MRU5HVEgrc2lnTGVuZ3RoLTE7aSsrKSB7CiAJZGF0YSA9IGluYihhcHJvbV9hZGRyKTsKIAlpZiAoZGV2LlNpZ1tqXSA9PSBkYXRhKSB7ICAgIC8qIHRyYWNrIHNpZ25hdHVyZSAqLwpAQCAtNDA4OCw3ICs0MDg4LDcgQEAKIAkgICAgfQogCX0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTQxMTEsNyArNDExMSw3IEBACiAgICAgZm9yIChpPTAsaz0wLGo9MDtqPDM7aisrKSB7CiAJayA8PD0gMTsKIAlpZiAoayA+IDB4ZmZmZikgay09MHhmZmZmOwotCQorCiAJaWYgKGxwLT5idXMgPT0gUENJKSB7CiAJICAgIGlmIChscC0+Y2hpcHNldCA9PSBEQzIxMDQwKSB7CiAJCXdoaWxlICgodG1wID0gaW5sKERFNFg1X0FQUk9NKSkgPCAwKTsKQEAgLTQxMzMsMTEgKzQxMzMsMTEgQEAKIAkgICAgayArPSAodV9zaG9ydCkgKCh0bXAgPSBpbmIoRUlTQV9BUFJPTSkpIDw8IDgpOwogCSAgICBkZXYtPmRldl9hZGRyW2krK10gPSAodV9jaGFyKSB0bXA7CiAJfQotCQorCiAJaWYgKGsgPiAweGZmZmYpIGstPTB4ZmZmZjsKICAgICB9CiAgICAgaWYgKGsgPT0gMHhmZmZmKSBrPTA7Ci0gICAgCisKICAgICBpZiAobHAtPmJ1cyA9PSBQQ0kpIHsKIAlpZiAobHAtPmNoaXBzZXQgPT0gREMyMTA0MCkgewogCSAgICB3aGlsZSAoKHRtcCA9IGlubChERTRYNV9BUFJPTSkpIDwgMCk7CkBAIC00MTU2LDcgKzQxNTYsNyBAQAogICAgIHNyb21fcmVwYWlyKGRldiwgYnJva2VuKTsKIAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQotICAgIC8qIAorICAgIC8qCiAgICAgKiogSWYgdGhlIGFkZHJlc3Mgc3RhcnRzIHdpdGggMDAgYTAsIHdlIGhhdmUgdG8gYml0LXJldmVyc2UKICAgICAqKiBlYWNoIGJ5dGUgb2YgdGhlIGFkZHJlc3MuCiAgICAgKi8KQEAgLTQyNDUsNyArNDI0NSw3IEBACiAKICAgICBmb3IgKHRtcD0wLGk9MDsgaTxFVEhfQUxFTjsgaSsrKSB0bXAgKz0gKHVfY2hhcilkZXYtPmRldl9hZGRyW2ldOwogICAgIGlmICgodG1wID09IDApIHx8ICh0bXAgPT0gMHg1ZmEpKSB7Ci0JaWYgKChscC0+Y2hpcHNldCA9PSBsYXN0LmNoaXBzZXQpICYmIAorCWlmICgobHAtPmNoaXBzZXQgPT0gbGFzdC5jaGlwc2V0KSAmJgogCSAgICAobHAtPmJ1c19udW0gPT0gbGFzdC5idXMpICYmIChscC0+YnVzX251bSA+IDApKSB7CiAJICAgIGZvciAoaT0wOyBpPEVUSF9BTEVOOyBpKyspIGRldi0+ZGV2X2FkZHJbaV0gPSBsYXN0LmFkZHJbaV07CiAJICAgIGZvciAoaT1FVEhfQUxFTi0xOyBpPjI7IC0taSkgewpAQCAtNDI3NSw3ICs0Mjc1LDcgQEAKIHN0YXRpYyBpbnQKIGFuX2V4Y2VwdGlvbihzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHApCiB7Ci0gICAgaWYgKCgqKHVfc2hvcnQgKilscC0+c3JvbS5zdWJfdmVuZG9yX2lkID09IDB4MDBjMCkgJiYgCisgICAgaWYgKCgqKHVfc2hvcnQgKilscC0+c3JvbS5zdWJfdmVuZG9yX2lkID09IDB4MDBjMCkgJiYKIAkoKih1X3Nob3J0ICopbHAtPnNyb20uc3ViX3N5c3RlbV9pZCA9PSAweDk1ZTApKSB7CiAJcmV0dXJuIC0xOwogICAgIH0KQEAgLTQyOTAsMTEgKzQyOTAsMTEgQEAKIHNyb21fcmQodV9sb25nIGFkZHIsIHVfY2hhciBvZmZzZXQpCiB7CiAgICAgc2VuZHRvX3Nyb20oU1JPTV9SRCB8IFNST01fU1IsIGFkZHIpOwotICAgIAorCiAgICAgc3JvbV9sYXRjaChTUk9NX1JEIHwgU1JPTV9TUiB8IERUX0NTLCBhZGRyKTsKICAgICBzcm9tX2NvbW1hbmQoU1JPTV9SRCB8IFNST01fU1IgfCBEVF9JTiB8IERUX0NTLCBhZGRyKTsKICAgICBzcm9tX2FkZHJlc3MoU1JPTV9SRCB8IFNST01fU1IgfCBEVF9DUywgYWRkciwgb2Zmc2V0KTsKLSAgICAKKwogICAgIHJldHVybiBzcm9tX2RhdGEoU1JPTV9SRCB8IFNST01fU1IgfCBEVF9DUywgYWRkcik7CiB9CiAKQEAgLTQzMDQsNyArNDMwNCw3IEBACiAgICAgc2VuZHRvX3Nyb20oY29tbWFuZCwgYWRkcik7CiAgICAgc2VuZHRvX3Nyb20oY29tbWFuZCB8IERUX0NMSywgYWRkcik7CiAgICAgc2VuZHRvX3Nyb20oY29tbWFuZCwgYWRkcik7Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTQzMTQsNyArNDMxNCw3IEBACiAgICAgc3JvbV9sYXRjaChjb21tYW5kLCBhZGRyKTsKICAgICBzcm9tX2xhdGNoKGNvbW1hbmQsIGFkZHIpOwogICAgIHNyb21fbGF0Y2goKGNvbW1hbmQgJiAweDAwMDBmZjAwKSB8IERUX0NTLCBhZGRyKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDMyMiwxNSArNDMyMiwxNSBAQAogc3JvbV9hZGRyZXNzKHVfaW50IGNvbW1hbmQsIHVfbG9uZyBhZGRyLCB1X2NoYXIgb2Zmc2V0KQogewogICAgIGludCBpLCBhOwotICAgIAorCiAgICAgYSA9IG9mZnNldCA8PCAyOwogICAgIGZvciAoaT0wOyBpPDY7IGkrKywgYSA8PD0gMSkgewogCXNyb21fbGF0Y2goY29tbWFuZCB8ICgoYSAmIDB4ODApID8gRFRfSU4gOiAwKSwgYWRkcik7CiAgICAgfQogICAgIHVkZWxheSgxKTsKLSAgICAKKwogICAgIGkgPSAoZ2V0ZnJvbV9zcm9tKGFkZHIpID4+IDMpICYgMHgwMTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDM0MCwxNyArNDM0MCwxNyBAQAogICAgIGludCBpOwogICAgIHNob3J0IHdvcmQgPSAwOwogICAgIHMzMiB0bXA7Ci0gICAgCisKICAgICBmb3IgKGk9MDsgaTwxNjsgaSsrKSB7CiAJc2VuZHRvX3Nyb20oY29tbWFuZCAgfCBEVF9DTEssIGFkZHIpOwogCXRtcCA9IGdldGZyb21fc3JvbShhZGRyKTsKIAlzZW5kdG9fc3JvbShjb21tYW5kLCBhZGRyKTsKLQkKKwogCXdvcmQgPSAod29yZCA8PCAxKSB8ICgodG1wID4+IDMpICYgMHgwMSk7CiAgICAgfQotICAgIAorCiAgICAgc2VuZHRvX3Nyb20oY29tbWFuZCAmIDB4MDAwMGZmMDAsIGFkZHIpOwotICAgIAorCiAgICAgcmV0dXJuIHdvcmQ7CiB9CiAKQEAgLTQzNTksMTMgKzQzNTksMTMgQEAKIHNyb21fYnVzeSh1X2ludCBjb21tYW5kLCB1X2xvbmcgYWRkcikKIHsKICAgIHNlbmR0b19zcm9tKChjb21tYW5kICYgMHgwMDAwZmYwMCkgfCBEVF9DUywgYWRkcik7Ci0gICAKKwogICAgd2hpbGUgKCEoKGdldGZyb21fc3JvbShhZGRyKSA+PiAzKSAmIDB4MDEpKSB7CiAgICAgICAgbWRlbGF5KDEpOwogICAgfQotICAgCisKICAgIHNlbmR0b19zcm9tKGNvbW1hbmQgJiAweDAwMDBmZjAwLCBhZGRyKTsKLSAgIAorCiAgICByZXR1cm47CiB9CiAqLwpAQCAtNDM3NSw3ICs0Mzc1LDcgQEAKIHsKICAgICBvdXRsKGNvbW1hbmQsIGFkZHIpOwogICAgIHVkZWxheSgxKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDM4MywxMCArNDM4MywxMCBAQAogZ2V0ZnJvbV9zcm9tKHVfbG9uZyBhZGRyKQogewogICAgIHMzMiB0bXA7Ci0gICAgCisKICAgICB0bXAgPSBpbmwoYWRkcik7CiAgICAgdWRlbGF5KDEpOwotICAgIAorCiAgICAgcmV0dXJuIHRtcDsKIH0KIApAQCAtNDQwMyw3ICs0NDAzLDcgQEAKICAgICB9CiAgICAgaWYgKGkgPT0gSU5GT0xFQUZfU0laRSkgewogCWxwLT51c2VTUk9NID0gRkFMU0U7Ci0JcHJpbnRrKCIlczogQ2Fubm90IGZpbmQgY29ycmVjdCBjaGlwc2V0IGZvciBTUk9NIGRlY29kaW5nIVxuIiwgCisJcHJpbnRrKCIlczogQ2Fubm90IGZpbmQgY29ycmVjdCBjaGlwc2V0IGZvciBTUk9NIGRlY29kaW5nIVxuIiwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKIAlyZXR1cm4gLUVOWElPOwogICAgIH0KQEAgLTQ0MjAsNyArNDQyMCw3IEBACiAJfQogCWlmIChpID09IDApIHsKIAkgICAgbHAtPnVzZVNST00gPSBGQUxTRTsKLQkgICAgcHJpbnRrKCIlczogQ2Fubm90IGZpbmQgY29ycmVjdCBQQ0kgZGV2aWNlIFslZF0gZm9yIFNST00gZGVjb2RpbmchXG4iLCAKKwkgICAgcHJpbnRrKCIlczogQ2Fubm90IGZpbmQgY29ycmVjdCBQQ0kgZGV2aWNlIFslZF0gZm9yIFNST00gZGVjb2RpbmchXG4iLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBscC0+ZGV2aWNlKTsKIAkgICAgcmV0dXJuIC1FTlhJTzsKIAl9CkBAIC00NDk0LDkgKzQ0OTQsOSBAQAogICAgIGlmICgoKGxwLT5pYm4gIT0gMSkgJiYgKGxwLT5pYm4gIT0gMykgJiYgKGxwLT5pYm4gIT0gNSkpIHx8ICFjb3VudCkgcmV0dXJuOwogCiAgICAgaWYgKGxwLT5jaGlwc2V0ICE9IERDMjExNDApIFJFU0VUX1NJQTsKLSAKKwogICAgIHdoaWxlIChjb3VudC0tKSB7Ci0JZ2VwX3dyKCgobHAtPmNoaXBzZXQ9PURDMjExNDApICYmIChscC0+aWJuIT01KSA/IAorCWdlcF93cigoKGxwLT5jaGlwc2V0PT1EQzIxMTQwKSAmJiAobHAtPmlibiE9NSkgPwogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgOiBUV0lERExFKHcrKykpLCBkZXYpOwogCW1kZWxheSgyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJtcyBwZXIgYWN0aW9uICovCiAgICAgfQpAQCAtNDUxNCwxMyArNDUxNCwxMyBAQAogKiogdW5sZXNzIEkgaW1wbGVtZW50IHRoZSBEQzIxMDQxIFNST00gZnVuY3Rpb25zLiBUaGVyZSdzIG5vIG5lZWQKICoqIHNpbmNlIHRoZSBleGlzdGluZyBjb2RlIHdpbGwgYmUgc2F0aXNmYWN0b3J5IGZvciBhbGwgYm9hcmRzLgogKi8KLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBkYzIxMDQxX2luZm9sZWFmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgcmV0dXJuIERFNFg1X0FVVE9TRU5TRV9NUzsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIGRjMjExNDBfaW5mb2xlYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDU1OCw3ICs0NTU4LDcgQEAKICAgICByZXR1cm4gbmV4dF90aWNrICYgflRJTUVSX0NCOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogZGMyMTE0Ml9pbmZvbGVhZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NTkzLDcgKzQ1OTMsNyBAQAogICAgIHJldHVybiBuZXh0X3RpY2sgJiB+VElNRVJfQ0I7CiB9CiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBkYzIxMTQzX2luZm9sZWFmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ2MzEsNyArNDYzMSw3IEBACiAqKiBUaGUgY29tcGFjdCBpbmZvYmxvY2sgaXMgb25seSBkZXNpZ25lZCBmb3IgREMyMTE0MFtBXSBjaGlwcywgc28KICoqIHdlJ2xsIHJldXNlIHRoZSBkYzIxMTQwbV9hdXRvY29uZiBmdW5jdGlvbi4gTm9uIE1JSSBtZWRpYSBvbmx5LgogKi8KLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBjb21wYWN0X2luZm9ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgY291bnQsIHVfY2hhciAqcCkKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDY3MSw3ICs0NjcxLDcgQEAKIC8qCiAqKiBUaGlzIGJsb2NrIGRlc2NyaWJlcyBub24gTUlJIG1lZGlhIGZvciB0aGUgREMyMTE0MFtBXSBvbmx5LgogKi8KLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB0eXBlMF9pbmZvYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyIGNvdW50LCB1X2NoYXIgKnApCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ3MTEsNyArNDcxMSw3IEBACiAKIC8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdW5kZXIgY29uc3RydWN0aW9uISAqLwogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdHlwZTFfaW5mb2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfY2hhciBjb3VudCwgdV9jaGFyICpwKQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NzUwLDcgKzQ3NTAsNyBAQAogICAgIHJldHVybiBkYzIxMTQwbV9hdXRvY29uZihkZXYpOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdHlwZTJfaW5mb2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfY2hhciBjb3VudCwgdV9jaGFyICpwKQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NzkxLDcgKzQ3OTEsNyBAQAogICAgIHJldHVybiBkYzIxMTR4X2F1dG9jb25mKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB0eXBlM19pbmZvYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyIGNvdW50LCB1X2NoYXIgKnApCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ4MzMsNyArNDgzMyw3IEBACiAgICAgcmV0dXJuIGRjMjExNHhfYXV0b2NvbmYoZGV2KTsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHR5cGU0X2luZm9ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgY291bnQsIHVfY2hhciAqcCkKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDg3OCw3ICs0ODc4LDcgQEAKICoqIFRoaXMgYmxvY2sgdHlwZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgcmVzZXR0aW5nIGV4dGVybmFsIGRldmljZXMKICoqIChjaGlwcykgdGhyb3VnaCB0aGUgR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyLgogKi8KLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB0eXBlNV9pbmZvYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyIGNvdW50LCB1X2NoYXIgKnApCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ5MTYsNyArNDkxNiw3IEBACiAgICAgbWlpX2FkZHJlc3MocGh5YWRkciwgaW9hZGRyKTsgICAgICAgICAgLyogUEhZIGFkZHJlc3MgdG8gYmUgYWNjZXNzZWQgICAgICovCiAgICAgbWlpX2FkZHJlc3MocGh5cmVnLCBpb2FkZHIpOyAgICAgICAgICAgLyogUEhZIFJlZ2lzdGVyIHRvIHJlYWQgICAgICAgICAgICovCiAgICAgbWlpX3RhKE1JSV9TVFJELCBpb2FkZHIpOyAgICAgICAgICAgICAgLyogVHVybiBhcm91bmQgdGltZSAtIDIgTURDICAgICAgICovCi0gICAgCisKICAgICByZXR1cm4gbWlpX3JkYXRhKGlvYWRkcik7ICAgICAgICAgICAgICAvKiBSZWFkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgKi8KIH0KIApAQCAtNDkzMSw3ICs0OTMxLDcgQEAKICAgICBtaWlfdGEoTUlJX1NUV1IsIGlvYWRkcik7ICAgICAgICAgICAgICAvKiBUdXJuIGFyb3VuZCB0aW1lIC0gMiBNREMgICAgICAgKi8KICAgICBkYXRhID0gbWlpX3N3YXAoZGF0YSwgMTYpOyAgICAgICAgICAgICAvKiBTd2FwIGRhdGEgYml0IG9yZGVyaW5nICAgICAgICAgKi8KICAgICBtaWlfd2RhdGEoZGF0YSwgMTYsIGlvYWRkcik7ICAgICAgICAgICAvKiBXcml0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDk0MCwxMiArNDk0MCwxMiBAQAogewogICAgIGludCBpOwogICAgIHMzMiB0bXAgPSAwOwotICAgIAorCiAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykgewogCXRtcCA8PD0gMTsKIAl0bXAgfD0gZ2V0ZnJvbV9taWkoTUlJX01SRCB8IE1JSV9SRCwgaW9hZGRyKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdG1wOwogfQogCkBAIC00OTUzLDEyICs0OTUzLDEyIEBACiBtaWlfd2RhdGEoaW50IGRhdGEsIGludCBsZW4sIHVfbG9uZyBpb2FkZHIpCiB7CiAgICAgaW50IGk7Ci0gICAgCisKICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgewogCXNlbmR0b19taWkoTUlJX01XUiB8IE1JSV9XUiwgZGF0YSwgaW9hZGRyKTsKIAlkYXRhID4+PSAxOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNDk2NiwxMyArNDk2NiwxMyBAQAogbWlpX2FkZHJlc3ModV9jaGFyIGFkZHIsIHVfbG9uZyBpb2FkZHIpCiB7CiAgICAgaW50IGk7Ci0gICAgCisKICAgICBhZGRyID0gbWlpX3N3YXAoYWRkciwgNSk7CiAgICAgZm9yIChpPTA7IGk8NTsgaSsrKSB7CiAJc2VuZHRvX21paShNSUlfTVdSIHwgTUlJX1dSLCBhZGRyLCBpb2FkZHIpOwogCWFkZHIgPj49IDE7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC00OTgwLDEyICs0OTgwLDEyIEBACiBtaWlfdGEodV9sb25nIHJ3LCB1X2xvbmcgaW9hZGRyKQogewogICAgIGlmIChydyA9PSBNSUlfU1RXUikgewotCXNlbmR0b19taWkoTUlJX01XUiB8IE1JSV9XUiwgMSwgaW9hZGRyKTsgIAotCXNlbmR0b19taWkoTUlJX01XUiB8IE1JSV9XUiwgMCwgaW9hZGRyKTsgIAorCXNlbmR0b19taWkoTUlJX01XUiB8IE1JSV9XUiwgMSwgaW9hZGRyKTsKKwlzZW5kdG9fbWlpKE1JSV9NV1IgfCBNSUlfV1IsIDAsIGlvYWRkcik7CiAgICAgfSBlbHNlIHsKIAlnZXRmcm9tX21paShNSUlfTVJEIHwgTUlJX1JELCBpb2FkZHIpOyAgICAgICAgLyogVHJpLXN0YXRlIE1ESU8gKi8KICAgICB9Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTQ5OTMsMTMgKzQ5OTMsMTMgQEAKIG1paV9zd2FwKGludCBkYXRhLCBpbnQgbGVuKQogewogICAgIGludCBpLCB0bXAgPSAwOwotICAgIAorCiAgICAgZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKIAl0bXAgPDw9IDE7CiAJdG1wIHw9IChkYXRhICYgMSk7CiAJZGF0YSA+Pj0gMTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdG1wOwogfQogCkBAIC01MDA3LDEzICs1MDA3LDEzIEBACiBzZW5kdG9fbWlpKHUzMiBjb21tYW5kLCBpbnQgZGF0YSwgdV9sb25nIGlvYWRkcikKIHsKICAgICB1MzIgajsKLSAgICAKKwogICAgIGogPSAoZGF0YSAmIDEpIDw8IDE3OwogICAgIG91dGwoY29tbWFuZCB8IGosIGlvYWRkcik7CiAgICAgdWRlbGF5KDEpOwogICAgIG91dGwoY29tbWFuZCB8IE1JSV9NREMgfCBqLCBpb2FkZHIpOwogICAgIHVkZWxheSgxKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNTAyNCw3ICs1MDI0LDcgQEAKICAgICB1ZGVsYXkoMSk7CiAgICAgb3V0bChjb21tYW5kIHwgTUlJX01EQywgaW9hZGRyKTsKICAgICB1ZGVsYXkoMSk7Ci0gICAgCisKICAgICByZXR1cm4gKChpbmwoaW9hZGRyKSA+PiAxOSkgJiAxKTsKIH0KIApAQCAtNTA4NSw3ICs1MDg1LDcgQEAKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgaW50IGksIGosIGssIG4sIGxpbWl0PXNpemVvZihwaHlfaW5mbykvc2l6ZW9mKHN0cnVjdCBwaHlfdGFibGUpOwogICAgIGludCBpZDsKLSAgICAKKwogICAgIGxwLT5hY3RpdmUgPSAwOwogICAgIGxwLT51c2VNSUkgPSBUUlVFOwogCkBAIC01MDk0LDcgKzUwOTQsNyBAQAogCWxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkciA9IGk7CiAJaWYgKGk9PTApIG4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGN5Y2xlcyAqLwogCXdoaWxlIChkZTR4NV9yZXNldF9waHkoZGV2KTwwKSB1ZGVsYXkoMTAwKTsvKiBXYWl0IGZvciByZXNldCAqLwotCWlkID0gbWlpX2dldF9vdWkoaSwgREU0WDVfTUlJKTsgCisJaWQgPSBtaWlfZ2V0X291aShpLCBERTRYNV9NSUkpOwogCWlmICgoaWQgPT0gMCkgfHwgKGlkID09IDY1NTM1KSkgY29udGludWU7ICAvKiBWYWxpZCBJRD8gKi8KIAlmb3IgKGo9MDsgajxsaW1pdDsgaisrKSB7ICAgICAgICAgICAgICAgICAgLyogU2VhcmNoIFBIWSB0YWJsZSAqLwogCSAgICBpZiAoaWQgIT0gcGh5X2luZm9bal0uaWQpIGNvbnRpbnVlOyAgICAvKiBJRCBtYXRjaD8gKi8KQEAgLTUxMzMsNyArNTEzMyw3IEBACiAJZm9yIChrPTA7IGxwLT5waHlba10uaWQgJiYgKGsgPCBERTRYNV9NQVhfUEhZKTsgaysrKSB7IC8qRm9yIGVhY2ggUEhZKi8KIAkgICAgbWlpX3dyKE1JSV9DUl9SU1QsIE1JSV9DUiwgbHAtPnBoeVtrXS5hZGRyLCBERTRYNV9NSUkpOwogCSAgICB3aGlsZSAobWlpX3JkKE1JSV9DUiwgbHAtPnBoeVtrXS5hZGRyLCBERTRYNV9NSUkpICYgTUlJX0NSX1JTVCk7Ci0JICAgIAorCiAJICAgIGRlNHg1X2RiZ19taWkoZGV2LCBrKTsKIAl9CiAgICAgfQpAQCAtNTE0OCwxMiArNTE0OCwxMiBAQAogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgaW50IGk7CiAgICAgY2hhciAqcGEgPSBscC0+c2V0dXBfZnJhbWU7Ci0gICAgCisKICAgICAvKiBJbml0aWFsaXNlIHRoZSBzZXR1cCBmcmFtZSAqLwogICAgIGlmIChtb2RlID09IEFMTCkgewogCW1lbXNldChscC0+c2V0dXBfZnJhbWUsIDAsIFNFVFVQX0ZSQU1FX0xFTik7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGxwLT5zZXR1cF9mID09IEhBU0hfUEVSRikgewogCWZvciAocGE9bHAtPnNldHVwX2ZyYW1lK0lNUEVSRl9QQV9PRkZTRVQsIGk9MDsgaTxFVEhfQUxFTjsgaSsrKSB7CiAJICAgICoocGEgKyBpKSA9IGRldi0+ZGV2X2FkZHJbaV07ICAgICAgICAgICAgICAgICAvKiBIb3N0IGFkZHJlc3MgKi8KQEAgLTUxNzAsNyArNTE3MCw3IEBACiAJICAgIGlmIChpICYgMHgwMSkgcGEgKz0gNDsKIAl9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHBhOyAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50cyB0byB0aGUgbmV4dCBlbnRyeSAqLwogfQogCkBAIC01MTc4LDcgKzUxNzgsNyBAQAogZW5hYmxlX2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdGltZV9vdXQpCiB7CiAgICAgdGltZW91dChkZXYsICh2b2lkICopJmRlNHg1X2FzdCwgKHVfbG9uZylkZXYsIHRpbWVfb3V0KTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNTE4Niw5ICs1MTg2LDkgQEAKIGRpc2FibGVfYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICAKKwogICAgIGRlbF90aW1lcigmbHAtPnRpbWVyKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNTIwNywxMCArNTIwNywxMCBAQAogICAgIG9tciB8PSBscC0+aW5mb2Jsb2NrX2NzcjY7CiAgICAgaWYgKG9tciAmIE9NUl9QUykgb21yIHw9IE9NUl9IQkQ7CiAgICAgb3V0bChvbXIsIERFNFg1X09NUik7Ci0gICAgCisKICAgICAvKiBTb2Z0IFJlc2V0ICovCiAgICAgUkVTRVRfREU0WDU7Ci0gICAgCisKICAgICAvKiBSZXN0b3JlIHRoZSBHRVAgLSBlc3BlY2lhbGx5IGZvciBDT01QQUNUIGFuZCBUeXBlIDAgSW5mb2Jsb2NrcyAqLwogICAgIGlmIChscC0+Y2hpcHNldCA9PSBEQzIxMTQwKSB7CiAJZ2VwX3dyKGxwLT5jYWNoZS5nZXBjLCBkZXYpOwpAQCAtNTI2MywyMSArNTI2MywyMSBAQAogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgaW50IGR0OwotICAgIAorCiAgICAgLyogRmlyc3QsIGNhbmNlbCBhbnkgcGVuZGluZyB0aW1lciBldmVudHMgKi8KICAgICBkZWxfdGltZXIoJmxwLT50aW1lcik7Ci0gICAgCisKICAgICAvKiBDb252ZXJ0IG1zZWMgdG8gdGlja3MgKi8KICAgICBkdCA9IChtc2VjICogSFopIC8gMTAwMDsKICAgICBpZiAoZHQ9PTApIGR0PTE7Ci0gICAgCisKICAgICAvKiBTZXQgdXAgdGltZXIgKi8KICAgICBpbml0X3RpbWVyKCZscC0+dGltZXIpOwogICAgIGxwLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGR0OwogICAgIGxwLT50aW1lci5mdW5jdGlvbiA9IGZuOwogICAgIGxwLT50aW1lci5kYXRhID0gZGF0YTsKICAgICBhZGRfdGltZXIoJmxwLT50aW1lcik7Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTUzNzUsNyArNTM3NSw3IEBACiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBpbnQgaTsKLSAgICAKKwogICAgIGlmIChkZTR4NV9kZWJ1ZyAmIERFQlVHX09QRU4pIHsKIAlwcmludGsoIiVzOiBkZTR4NSBvcGVuaW5nIHdpdGggaXJxICVkXG4iLGRldi0+bmFtZSxkZXYtPmlycSk7CiAJcHJpbnRrKCJcdHBoeXNpY2FsIGFkZHJlc3M6ICIpOwpAQCAtNTQxMywxMSArNTQxMywxMSBAQAogCSAgICB9CiAJfQogCXByaW50aygiLi4uMHglOC44eFxuIiwgbGUzMl90b19jcHUobHAtPnR4X3JpbmdbaV0uYnVmKSk7Ci0JcHJpbnRrKCJSaW5nIHNpemU6IFxuUlg6ICVkXG5UWDogJWRcbiIsIAotCSAgICAgICAoc2hvcnQpbHAtPnJ4UmluZ1NpemUsIAotCSAgICAgICAoc2hvcnQpbHAtPnR4UmluZ1NpemUpOyAKKwlwcmludGsoIlJpbmcgc2l6ZTogXG5SWDogJWRcblRYOiAlZFxuIiwKKwkgICAgICAgKHNob3J0KWxwLT5yeFJpbmdTaXplLAorCSAgICAgICAoc2hvcnQpbHAtPnR4UmluZ1NpemUpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybjsKIH0KIApAQCAtNTQyNiw3ICs1NDI2LDcgQEAKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICAKKwogICAgIGlmIChkZTR4NV9kZWJ1ZyAmIERFQlVHX01JSSkgewogCXByaW50aygiXG5NSUkgZGV2aWNlIGFkZHJlc3M6ICVkXG4iLCBscC0+cGh5W2tdLmFkZHIpOwogCXByaW50aygiTUlJIENSOiAgJXhcbiIsbWlpX3JkKE1JSV9DUixscC0+cGh5W2tdLmFkZHIsREU0WDVfTUlJKSk7CkBAIC01NDQ1LDcgKzU0NDUsNyBAQAogCSAgICBwcmludGsoIk1JSSAyMDogICV4XG4iLG1paV9yZCgweDE0LGxwLT5waHlba10uYWRkcixERTRYNV9NSUkpKTsKIAl9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuOwogfQogCkBAIC01NDUzLDE3ICs1NDUzLDE3IEBACiBkZTR4NV9kYmdfbWVkaWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIAorCiAgICAgaWYgKGxwLT5tZWRpYSAhPSBscC0+Y19tZWRpYSkgewogCWlmIChkZTR4NV9kZWJ1ZyAmIERFQlVHX01FRElBKSB7CiAJICAgIHByaW50aygiJXM6IG1lZGlhIGlzICVzJXNcbiIsIGRldi0+bmFtZSwKIAkJICAgKGxwLT5tZWRpYSA9PSBOQyAgPyAidW5jb25uZWN0ZWQsIGxpbmsgZG93biBvciBpbmNvbXBhdGlibGUgY29ubmVjdGlvbiIgOgogCQkgICAgKGxwLT5tZWRpYSA9PSBUUCAgPyAiVFAiIDoKIAkJICAgICAobHAtPm1lZGlhID09IEFOUyA/ICJUUC9Od2F5IiA6Ci0JCSAgICAgIChscC0+bWVkaWEgPT0gQk5DID8gIkJOQyIgOiAKLQkJICAgICAgIChscC0+bWVkaWEgPT0gQVVJID8gIkFVSSIgOiAKLQkJCShscC0+bWVkaWEgPT0gQk5DX0FVSSA/ICJCTkMvQVVJIiA6IAotCQkJIChscC0+bWVkaWEgPT0gRVhUX1NJQSA/ICJFWFQgU0lBIiA6IAorCQkgICAgICAobHAtPm1lZGlhID09IEJOQyA/ICJCTkMiIDoKKwkJICAgICAgIChscC0+bWVkaWEgPT0gQVVJID8gIkFVSSIgOgorCQkJKGxwLT5tZWRpYSA9PSBCTkNfQVVJID8gIkJOQy9BVUkiIDoKKwkJCSAobHAtPm1lZGlhID09IEVYVF9TSUEgPyAiRVhUIFNJQSIgOgogCQkJICAobHAtPm1lZGlhID09IF8xMDBNYiAgPyAiMTAwTWIvcyIgOgogCQkJICAgKGxwLT5tZWRpYSA9PSBfMTBNYiAgID8gIjEwTWIvcyIgOgogCQkJICAgICI/Pz8iCkBAIC01NDcxLDcgKzU0NzEsNyBAQAogCX0KIAlscC0+Y19tZWRpYSA9IGxwLT5tZWRpYTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm47CiB9CiAKQEAgLTU1NTQsNyArNTU1NCw3IEBACiAJdTMyIGx2YWxbMzZdOwogICAgIH0gdG1wOwogICAgIHVfbG9uZyBmbGFncyA9IDA7Ci0gICAgCisKICAgICBzd2l0Y2goaW9jLT5jbWQpIHsKICAgICBjYXNlIERFNFg1X0dFVF9IV0FERFI6ICAgICAgICAgICAvKiBHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgKi8KIAlpb2MtPmxlbiA9IEVUSF9BTEVOOwpAQCAtNTU3NSw3ICs1NTc1LDcgQEAKIAl9CiAJYnVpbGRfc2V0dXBfZnJhbWUoZGV2LCBQSFlTX0FERFJfT05MWSk7CiAJLyogU2V0IHVwIHRoZSBkZXNjcmlwdG9yIGFuZCBnaXZlIG93bmVyc2hpcCB0byB0aGUgY2FyZCAqLwotCWxvYWRfcGFja2V0KGRldiwgbHAtPnNldHVwX2ZyYW1lLCBURF9JQyB8IFBFUkZFQ1RfRiB8IFREX1NFVCB8IAorCWxvYWRfcGFja2V0KGRldiwgbHAtPnNldHVwX2ZyYW1lLCBURF9JQyB8IFBFUkZFQ1RfRiB8IFREX1NFVCB8CiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVFVQX0ZSQU1FX0xFTiwgKHN0cnVjdCBza19idWZmICopMSk7CiAJbHAtPnR4X25ldyA9ICgrK2xwLT50eF9uZXcpICUgbHAtPnR4UmluZ1NpemU7CiAJb3V0bChQT0xMX0RFTUFORCwgREU0WDVfVFBEKTsgICAgICAgICAgICAgICAgLyogU3RhcnQgdGhlIFRYICovCkBAIC01NjE3LDggKzU2MTcsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCW1lbWNweSgmc3RhdGJ1ZiwgJmxwLT5wa3RTdGF0cywgaW9jLT5sZW4pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGNvcHlfdG9fdXNlcihpb2MtPmRhdGEsICZzdGF0YnVmLCBpb2MtPmxlbikpIAotCQlyZXR1cm4gLUVGQVVMVDsgCisJaWYgKGNvcHlfdG9fdXNlcihpb2MtPmRhdGEsICZzdGF0YnVmLCBpb2MtPmxlbikpCisJCXJldHVybiAtRUZBVUxUOwogCWJyZWFrOwogICAgIH0KICAgICBjYXNlIERFNFg1X0NMUl9TVEFUUzogICAgICAgICAgICAvKiBaZXJvIG91dCB0aGUgZHJpdmVyIHN0YXRpc3RpY3MgKi8KQEAgLTU2NTIsOSArNTY1Miw5IEBACiAJaW9jLT5sZW4gPSBqOwogCWlmIChjb3B5X3RvX3VzZXIoaW9jLT5kYXRhLCB0bXAuYWRkciwgaW9jLT5sZW4pKSByZXR1cm4gLUVGQVVMVDsKIAlicmVhazsKLQkKKwogI2RlZmluZSBERTRYNV9EVU1QICAgICAgICAgICAgICAweDBmIC8qIER1bXAgdGhlIERFNFg1IFN0YXR1cyAqLwotLyoJCisvKgogICAgICAgY2FzZSBERTRYNV9EVU1QOgogCWogPSAwOwogCXRtcC5hZGRyW2orK10gPSBkZXYtPmlycTsKQEAgLTU2NjQsNyArNTY2NCw3IEBACiAJdG1wLmFkZHJbaisrXSA9IGxwLT5yeFJpbmdTaXplOwogCXRtcC5sdmFsW2o+PjJdID0gKGxvbmcpbHAtPnJ4X3Jpbmc7IGorPTQ7CiAJdG1wLmx2YWxbaj4+Ml0gPSAobG9uZylscC0+dHhfcmluZzsgais9NDsKLQkKKwogCWZvciAoaT0wO2k8bHAtPnJ4UmluZ1NpemUtMTtpKyspewogCSAgICBpZiAoaSA8IDMpIHsKIAkJdG1wLmx2YWxbaj4+Ml0gPSAobG9uZykmbHAtPnJ4X3JpbmdbaV0uc3RhdHVzOyBqKz00OwpAQCAtNTY3Nyw3ICs1Njc3LDcgQEAKIAkgICAgfQogCX0KIAl0bXAubHZhbFtqPj4yXSA9IChsb25nKSZscC0+dHhfcmluZ1tpXS5zdGF0dXM7IGorPTQ7Ci0JCisKIAlmb3IgKGk9MDtpPGxwLT5yeFJpbmdTaXplLTE7aSsrKXsKIAkgICAgaWYgKGkgPCAzKSB7CiAJCXRtcC5sdmFsW2o+PjJdID0gKHMzMilsZTMyX3RvX2NwdShscC0+cnhfcmluZ1tpXS5idWYpOyBqKz00OwpAQCAtNTY5MCwxNCArNTY5MCwxNCBAQAogCSAgICB9CiAJfQogCXRtcC5sdmFsW2o+PjJdID0gKHMzMilsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tpXS5idWYpOyBqKz00OwotCQorCiAJZm9yIChpPTA7aTxscC0+cnhSaW5nU2l6ZTtpKyspewogCSAgICB0bXAubHZhbFtqPj4yXSA9IGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLnN0YXR1cyk7IGorPTQ7CiAJfQogCWZvciAoaT0wO2k8bHAtPnR4UmluZ1NpemU7aSsrKXsKIAkgICAgdG1wLmx2YWxbaj4+Ml0gPSBsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tpXS5zdGF0dXMpOyBqKz00OwogCX0KLQkKKwogCXRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X0JNUik7ICBqKz00OwogCXRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X1RQRCk7ICBqKz00OwogCXRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X1JQRCk7ICBqKz00OwpAQCAtNTcwNiwxOCArNTcwNiwxOCBAQAogCXRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X1NUUyk7ICBqKz00OwogCXRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X09NUik7ICBqKz00OwogCXRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X0lNUik7ICBqKz00OwotCXRtcC5sdmFsW2o+PjJdID0gbHAtPmNoaXBzZXQ7IGorPTQ7IAorCXRtcC5sdmFsW2o+PjJdID0gbHAtPmNoaXBzZXQ7IGorPTQ7CiAJaWYgKGxwLT5jaGlwc2V0ID09IERDMjExNDApIHsKIAkgICAgdG1wLmx2YWxbaj4+Ml0gPSBnZXBfcmQoZGV2KTsgIGorPTQ7CiAJfSBlbHNlIHsKIAkgICAgdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfU0lTUik7IGorPTQ7CiAJICAgIHRtcC5sdmFsW2o+PjJdID0gaW5sKERFNFg1X1NJQ1IpOyBqKz00OwogCSAgICB0bXAubHZhbFtqPj4yXSA9IGlubChERTRYNV9TVFJSKTsgais9NDsKLQkgICAgdG1wLmx2YWxbaj4+Ml0gPSBpbmwoREU0WDVfU0lHUik7IGorPTQ7IAorCSAgICB0bXAubHZhbFtqPj4yXSA9IGlubChERTRYNV9TSUdSKTsgais9NDsKIAl9Ci0JdG1wLmx2YWxbaj4+Ml0gPSBscC0+cGh5W2xwLT5hY3RpdmVdLmlkOyBqKz00OyAKKwl0bXAubHZhbFtqPj4yXSA9IGxwLT5waHlbbHAtPmFjdGl2ZV0uaWQ7IGorPTQ7CiAJaWYgKGxwLT5waHlbbHAtPmFjdGl2ZV0uaWQgJiYgKCFscC0+dXNlU1JPTSB8fCBscC0+dXNlTUlJKSkgewotCSAgICB0bXAubHZhbFtqPj4yXSA9IGxwLT5hY3RpdmU7IGorPTQ7IAorCSAgICB0bXAubHZhbFtqPj4yXSA9IGxwLT5hY3RpdmU7IGorPTQ7CiAJICAgIHRtcC5sdmFsW2o+PjJdPW1paV9yZChNSUlfQ1IsbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLERFNFg1X01JSSk7IGorPTQ7CiAJICAgIHRtcC5sdmFsW2o+PjJdPW1paV9yZChNSUlfU1IsbHAtPnBoeVtscC0+YWN0aXZlXS5hZGRyLERFNFg1X01JSSk7IGorPTQ7CiAJICAgIHRtcC5sdmFsW2o+PjJdPW1paV9yZChNSUlfSUQwLGxwLT5waHlbbHAtPmFjdGl2ZV0uYWRkcixERTRYNV9NSUkpOyBqKz00OwpAQCAtNTczNCwxMCArNTczNCwxMCBAQAogCQl0bXAubHZhbFtqPj4yXT1taWlfcmQoMHgxNCxscC0+cGh5W2xwLT5hY3RpdmVdLmFkZHIsREU0WDVfTUlJKTsgais9NDsKIAkgICAgfQogCX0KLQkKKwogCXRtcC5hZGRyW2orK10gPSBscC0+dHhSaW5nU2l6ZTsKIAl0bXAuYWRkcltqKytdID0gbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpOwotCQorCiAJaW9jLT5sZW4gPSBqOwogCWlmIChjb3B5X3RvX3VzZXIoaW9jLT5kYXRhLCB0bXAuYWRkciwgaW9jLT5sZW4pKSByZXR1cm4gLUVGQVVMVDsKIAlicmVhazsKQEAgLTU3NDYsNyArNTc0Niw3IEBACiAgICAgZGVmYXVsdDoKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmgKaW5kZXggYWQzN2E0MC4uNTcyMjZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5oCkBAIC0zOCwxMSArMzgsMTEgQEAKIC8qCiAqKiBFSVNBIFJlZ2lzdGVyIEFkZHJlc3MgTWFwCiAqLwotI2RlZmluZSBFSVNBX0lEICAgICAgaW9iYXNlKzB4MGM4MCAgIC8qIEVJU0EgSUQgUmVnaXN0ZXJzICovIAotI2RlZmluZSBFSVNBX0lEMCAgICAgaW9iYXNlKzB4MGM4MCAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMCAqLyAKLSNkZWZpbmUgRUlTQV9JRDEgICAgIGlvYmFzZSsweDBjODEgICAvKiBFSVNBIElEIFJlZ2lzdGVyIDEgKi8gCi0jZGVmaW5lIEVJU0FfSUQyICAgICBpb2Jhc2UrMHgwYzgyICAgLyogRUlTQSBJRCBSZWdpc3RlciAyICovIAotI2RlZmluZSBFSVNBX0lEMyAgICAgaW9iYXNlKzB4MGM4MyAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMyAqLyAKKyNkZWZpbmUgRUlTQV9JRCAgICAgIGlvYmFzZSsweDBjODAgICAvKiBFSVNBIElEIFJlZ2lzdGVycyAqLworI2RlZmluZSBFSVNBX0lEMCAgICAgaW9iYXNlKzB4MGM4MCAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBFSVNBX0lEMSAgICAgaW9iYXNlKzB4MGM4MSAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBFSVNBX0lEMiAgICAgaW9iYXNlKzB4MGM4MiAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBFSVNBX0lEMyAgICAgaW9iYXNlKzB4MGM4MyAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMyAqLwogI2RlZmluZSBFSVNBX0NSICAgICAgaW9iYXNlKzB4MGM4NCAgIC8qIEVJU0EgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBFSVNBX1JFRzAgICAgaW9iYXNlKzB4MGM4OCAgIC8qIEVJU0EgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAjZGVmaW5lIEVJU0FfUkVHMSAgICBpb2Jhc2UrMHgwYzg5ICAgLyogRUlTQSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KQEAgLTEwMDgsOCArMTAwOCw4IEBACiAJdW5zaWduZWQgY2hhciAgX191c2VyICpkYXRhOyAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciAqLwogfTsKIAotLyogCi0qKiBSZWNvZ25pc2VkIGNvbW1hbmRzIGZvciB0aGUgZHJpdmVyIAorLyoKKyoqIFJlY29nbmlzZWQgY29tbWFuZHMgZm9yIHRoZSBkcml2ZXIKICovCiAjZGVmaW5lIERFNFg1X0dFVF9IV0FERFIJMHgwMSAvKiBHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgKi8KICNkZWZpbmUgREU0WDVfU0VUX0hXQUREUgkweDAyIC8qIFNldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDc0ZTkwNzUuLmJhNWIxMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBmb3JnZXQgdG8gdW5tYXAgUENJIG1hcHBlZCBza2JzLgogCiAgICAgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KLSAgICBBZGRlZCBuZXcgUENJIGlkZW50aWZpZXJzIHByb3ZpZGVkIGJ5IENsZWFyIFpoYW5nIGF0IEFMaSAKKyAgICBBZGRlZCBuZXcgUENJIGlkZW50aWZpZXJzIHByb3ZpZGVkIGJ5IENsZWFyIFpoYW5nIGF0IEFMaQogICAgIGZvciB0aGVpciAxNTYzIGV0aGVybmV0IGRldmljZS4KIAogICAgIFRPRE8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKaW5kZXggZmJkOWFiNi4uNWZmYmQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKQEAgLTk2LDExICs5NiwxMSBAQAogICogdHVsaXBfYnVpbGRfZmFrZV9tZWRpYXRhYmxlIC0gQnVpbGQgYSBmYWtlIG1lZGlhdGFibGUgZW50cnkuCiAgKiBAdHA6IFB0ciB0byB0aGUgdHVsaXAgcHJpdmF0ZSBkYXRhLgogICoKLSAqIFNvbWUgY2FyZHMgbGlrZSB0aGUgM3g1IEhTQyBjYXJkcyAoSjM1MTRBKSBkbyBub3QgaGF2ZSBhIHN0YW5kYXJkIAorICogU29tZSBjYXJkcyBsaWtlIHRoZSAzeDUgSFNDIGNhcmRzIChKMzUxNEEpIGRvIG5vdCBoYXZlIGEgc3RhbmRhcmQKICAqIHNyb20gYW5kIGNhbiBub3QgYmUgaGFuZGxlZCB1bmRlciB0aGUgZml4dXAgcm91dGluZS4gIFRoZXNlIGNhcmRzCi0gKiBzdGlsbCBuZWVkIGEgdmFsaWQgbWVkaWF0YWJsZSBlbnRyeSBmb3IgY29ycmVjdCBjc3IxMiBzZXR1cCBhbmQgCisgKiBzdGlsbCBuZWVkIGEgdmFsaWQgbWVkaWF0YWJsZSBlbnRyeSBmb3IgY29ycmVjdCBjc3IxMiBzZXR1cCBhbmQKICAqIG1paSBoYW5kbGluZy4KLSAqIAorICoKICAqIFNpbmNlIHRoaXMgaXMgY3VycmVudGx5IGEgcGFyaXNjLWxpbnV4IHNwZWNpZmljIGZ1bmN0aW9uLCB0aGUKICAqICNpZmRlZiBfX2hwcGFfXyBzaG91bGQgY29tcGxldGVseSBvcHRpbWl6ZSB0aGlzIGZ1bmN0aW9uIGF3YXkgZm9yCiAgKiBub24tcGFyaXNjIGhhcmR3YXJlLgpAQCAtMTQwLDcgKzE0MCw3IEBACiAJCXRwLT5mbGFncyB8PSBIQVNfUEhZX0lSUTsKIAkJdHAtPmNzcjEyX3NoYWRvdyA9IC0xOwogCX0KLSNlbmRpZiAKKyNlbmRpZgogfQogCiB2b2lkIF9fZGV2aW5pdCB0dWxpcF9wYXJzZV9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKaW5kZXggYmIzNTU4MS4uZGE0Zjc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKQEAgLTEzOSwyMiArMTM5LDIyIEBACiAJCX0KICAgICAgICAgICAgICAgIC8qIEFja25vd2xlZGdlIGN1cnJlbnQgUlggaW50ZXJydXB0IHNvdXJjZXMuICovCiAgICAgICAgICAgICAgICBpb3dyaXRlMzIoKFJ4SW50ciB8IFJ4Tm9CdWYpLCB0cC0+YmFzZV9hZGRyICsgQ1NSNSk7Ci0gCi0gCisKKwogICAgICAgICAgICAgICAgLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCBpcyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCiAgICAgICAgICAgICAgICB3aGlsZSAoICEgKHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duZWQpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzMzIgc3RhdHVzID0gbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7Ci0gCi0gCisKKwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFID09IHRwLT5jdXJfcngpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gCisKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gNSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICU4Ljh4LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBub3RfZG9uZTsKLSAKKwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4MzgwMDgzMDApICE9IDB4MDMwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZ29yZSBlYXJsaWVyIGJ1ZmZlcnMuICovCkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKLSAgCisKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwa3RfbGVuID4gMTUxOCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEJvZ3VzIHBhY2tldCBzaXplIG9mICVkICglI3gpLlxuIiwKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAvKiBQYXNzIHVwIHRoZSBza2IgYWxyZWFkeSBvbiB0aGUgUnggcmluZy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRlbXAgPSBza2JfcHV0KHNrYiA9IHRwLT5yeF9idWZmZXJzW2VudHJ5XS5za2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfbGVuKTsKLSAgCisKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nICE9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEpKSB7CkBAIC0yMjUsMTcgKzIyNSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5oZWFkLCB0ZW1wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICNlbmRpZgotICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwgdHAtPnJ4X2J1ZmZlcnNbZW50cnldLm1hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBLVF9CVUZfU1osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0gIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+cnhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLSAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwotIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5sYXN0X3J4ID0gamlmZmllczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfcGFja2V0cysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwpAQCAtMjQ1LDEyICsyNDUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgPSAoKyt0cC0+Y3VyX3J4KSAlIFJYX1JJTkdfU0laRTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5jdXJfcnggLSB0cC0+ZGlydHlfcnggPiBSWF9SSU5HX1NJWkUvNCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWxpcF9yZWZpbGxfcngoZGV2KTsKLSAKKwogICAgICAgICAgICAgICAgIH0KLSAKKwogICAgICAgICAgICAgICAgLyogTmV3IGFjayBzdHJhdGVneS4uLiBpcnEgZG9lcyBub3QgYWNrIFJ4IGFueSBsb25nZXIKICAgICAgICAgICAgICAgICAgIGhvcGVmdWxseSB0aGlzIGhlbHBzICovCi0gCisKICAgICAgICAgICAgICAgIC8qIFJlYWxseSBiYWQgdGhpbmdzIGNhbiBoYXBwZW4gaGVyZS4uLiBJZiBuZXcgcGFja2V0IGFycml2ZXMKICAgICAgICAgICAgICAgICAqIGFuZCBhbiBpcnEgYXJyaXZlcyAodHggb3IganVzdCBkdWUgdG8gb2NjYXNpb25hbGx5IHVuc2V0CiAgICAgICAgICAgICAgICAgKiBtYXNrKSwgaXQgd2lsbCBiZSBhY2tlZCBieSBpcnEgaGFuZGxlciwgYnV0IG5ldyB0aHJlYWQKQEAgLTI1OSwyOCArMjU5LDI4IEBACiAgICAgICAgICAgICAgICAgKiB0b21vcnJvdyAobmlnaHQgMDExMDI5KS4gSWYgaXQgd2lsbCBub3QgZmFpbCwgd2Ugd29uCiAgICAgICAgICAgICAgICAgKiBmaW5hbGx5OiBhbW91bnQgb2YgSU8gZGlkIG5vdCBpbmNyZWFzZSBhdCBhbGwuICovCiAgICAgICAgfSB3aGlsZSAoKGlvcmVhZDMyKHRwLT5iYXNlX2FkZHIgKyBDU1I1KSAmIFJ4SW50cikpOwotIAorCiBkb25lOgotIAorCiAgI2lmZGVmIENPTkZJR19UVUxJUF9OQVBJX0hXX01JVElHQVRJT04KLSAgCisKICAgICAgICAgICAvKiBXZSB1c2UgdGhpcyBzaW1wbGlzdGljIHNjaGVtZSBmb3IgSU0uIEl0J3MgcHJvdmVuIGJ5CiAgICAgICAgICAgICAgcmVhbCBsaWZlIGluc3RhbGxhdGlvbnMuIFdlIGNhbiBoYXZlIElNIGVuYWJsZWQKLSAgICAgICAgICAgIGNvbnRpbnVlc2x5IGJ1dCB0aGlzIHdvdWxkIGNhdXNlIHVubmVjZXNzYXJ5IGxhdGVuY3kuIAotICAgICAgICAgICAgVW5mb3J0dW5lbHkgd2UgY2FuJ3QgdXNlIGFsbCB0aGUgTkVUX1JYXyogZmVlZGJhY2sgaGVyZS4gCi0gICAgICAgICAgICBUaGlzIHdvdWxkIHR1cm4gb24gSU0gZm9yIGRldmljZXMgdGhhdCBpcyBub3QgY29udHJpYnV0aW5nIAotICAgICAgICAgICAgdG8gYmFja2xvZyBjb25nZXN0aW9uIHdpdGggdW5uZWNlc3NhcnkgbGF0ZW5jeS4gCi0gIAorICAgICAgICAgICAgY29udGludWVzbHkgYnV0IHRoaXMgd291bGQgY2F1c2UgdW5uZWNlc3NhcnkgbGF0ZW5jeS4KKyAgICAgICAgICAgIFVuZm9ydHVuZWx5IHdlIGNhbid0IHVzZSBhbGwgdGhlIE5FVF9SWF8qIGZlZWRiYWNrIGhlcmUuCisgICAgICAgICAgICBUaGlzIHdvdWxkIHR1cm4gb24gSU0gZm9yIGRldmljZXMgdGhhdCBpcyBub3QgY29udHJpYnV0aW5nCisgICAgICAgICAgICB0byBiYWNrbG9nIGNvbmdlc3Rpb24gd2l0aCB1bm5lY2Vzc2FyeSBsYXRlbmN5LgorCiAgICAgICAgICAgICAgV2UgbW9uaXRvciB0aGUgdGhlIGRldmljZSBSWC1yaW5nIGFuZCBoYXZlOgotICAKKwogICAgICAgICAgICAgIEhXIEludGVycnVwdCBNaXRpZ2F0aW9uIGVpdGhlciBPTiBvciBPRkYuCi0gIAotICAgICAgICAgICAgT046ICBNb3JlIHRoZW4gMSBwa3QgcmVjZWl2ZWQgKHBlciBpbnRyLikgT1Igd2UgYXJlIGRyb3BwaW5nIAorCisgICAgICAgICAgICBPTjogIE1vcmUgdGhlbiAxIHBrdCByZWNlaXZlZCAocGVyIGludHIuKSBPUiB3ZSBhcmUgZHJvcHBpbmcKICAgICAgICAgICAgICBPRkY6IE9ubHkgMSBwa3QgcmVjZWl2ZWQKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgTm90ZS4gV2Ugb25seSB1c2UgbWluIGFuZCBtYXggKDAsIDE1KSBzZXR0aW5ncyBmcm9tIG1pdF90YWJsZSAqLwotICAKLSAgCisKKwogICAgICAgICAgIGlmKCB0cC0+ZmxhZ3MgJiAgSEFTX0lOVFJfTUlUSUdBVElPTikgewogICAgICAgICAgICAgICAgICBpZiggcmVjZWl2ZWQgPiAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhIHRwLT5taXRfb24gKSB7CkBAIC0yOTcsMjAgKzI5NywyMCBAQAogICAgICAgICAgIH0KIAogI2VuZGlmIC8qIENPTkZJR19UVUxJUF9OQVBJX0hXX01JVElHQVRJT04gKi8KLSAKKwogICAgICAgICAgZGV2LT5xdW90YSAtPSByZWNlaXZlZDsKICAgICAgICAgICpidWRnZXQgLT0gcmVjZWl2ZWQ7Ci0gCisKICAgICAgICAgIHR1bGlwX3JlZmlsbF9yeChkZXYpOwotICAgICAgICAgCisKICAgICAgICAgIC8qIElmIFJYIHJpbmcgaXMgbm90IGZ1bGwgd2UgYXJlIG91dCBvZiBtZW1vcnkuICovCiAgICAgICAgICBpZiAodHAtPnJ4X2J1ZmZlcnNbdHAtPmRpcnR5X3J4ICUgUlhfUklOR19TSVpFXS5za2IgPT0gTlVMTCkgZ290byBvb207Ci0gCisKICAgICAgICAgIC8qIFJlbW92ZSB1cyBmcm9tIHBvbGxpbmcgbGlzdCBhbmQgZW5hYmxlIFJYIGludHIuICovCi0gCisKICAgICAgICAgIG5ldGlmX3J4X2NvbXBsZXRlKGRldik7CiAgICAgICAgICBpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycywgdHAtPmJhc2VfYWRkcitDU1I3KTsKLSAKKwogICAgICAgICAgLyogVGhlIGxhc3Qgb3AgaGFwcGVucyBhZnRlciBwb2xsIGNvbXBsZXRpb24uIFdoaWNoIG1lYW5zIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgKiAxLiBpdCBjYW4gcmFjZSB3aXRoIGRpc2FibGluZyBpcnFzIGluIGlycSBoYW5kbGVyCiAgICAgICAgICAgKiAyLiBpdCBjYW4gcmFjZSB3aXRoIGRpc2UvZW5hYmxpbmcgaXJxcyBpbiBvdGhlciBwb2xsIHRocmVhZHMKQEAgLTMyMSw5ICszMjEsOSBAQAogICAgICAgICAgICogZHVlIHRvIHJhY2VzIGluIG1hc2tpbmcgYW5kIGR1ZSB0byB0b28gbGF0ZSBhY2tpbmcgb2YgYWxyZWFkeQogICAgICAgICAgICogcHJvY2Vzc2VkIGlycXMuIEJ1dCBpdCBtdXN0IG5vdCByZXN1bHQgaW4gbG9zaW5nIGV2ZW50cy4KICAgICAgICAgICAqLwotIAorCiAgICAgICAgICByZXR1cm4gMDsKLSAKKwogIG5vdF9kb25lOgogICAgICAgICAgaWYgKCFyZWNlaXZlZCkgewogCkBAIC0zMzEsMjkgKzMzMSwyOSBAQAogICAgICAgICAgfQogICAgICAgICAgZGV2LT5xdW90YSAtPSByZWNlaXZlZDsKICAgICAgICAgICpidWRnZXQgLT0gcmVjZWl2ZWQ7Ci0gCisKICAgICAgICAgIGlmICh0cC0+Y3VyX3J4IC0gdHAtPmRpcnR5X3J4ID4gUlhfUklOR19TSVpFLzIgfHwKICAgICAgICAgICAgICB0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKQogICAgICAgICAgICAgICAgICB0dWxpcF9yZWZpbGxfcngoZGV2KTsKLSAKKwogICAgICAgICAgaWYgKHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpIGdvdG8gb29tOwotIAorCiAgICAgICAgICByZXR1cm4gMTsKLSAKLSAKKworCiAgb29tOiAgICAvKiBFeGVjdXRlZCB3aXRoIFJYIGludHMgZGlzYWJsZWQgKi8KLSAKLSAgICAgICAgIAorCisKICAgICAgICAgIC8qIFN0YXJ0IHRpbWVyLCBzdG9wIHBvbGxpbmcsIGJ1dCBkbyBub3QgZW5hYmxlIHJ4IGludGVycnVwdHMuICovCiAgICAgICAgICBtb2RfdGltZXIoJnRwLT5vb21fdGltZXIsIGppZmZpZXMrMSk7Ci0gICAgICAgCisKICAgICAgICAgIC8qIFRoaW5rOiB0aW1lcl9wZW5kaW5nKCkgd2FzIGFuIGV4cGxpY2l0IHNpZ25hdHVyZSBvZiBidWcuCiAgICAgICAgICAgKiBUaW1lciBjYW4gYmUgcGVuZGluZyBub3cgYnV0IGZpcmVkIGFuZCBjb21wbGV0ZWQKICAgICAgICAgICAqIGJlZm9yZSB3ZSBkaWQgbmV0aWZfcnhfY29tcGxldGUoKS4gU2VlPyBXZSB3b3VsZCBsb3NlIGl0LiAqLwotIAorCiAgICAgICAgICAvKiByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHBvbGxpbmcgbGlzdCAqLwogICAgICAgICAgbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKLSAKKwogICAgICAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTUyMSw5ICs1MjEsOSBAQAogCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgcmVhbGx5IGlzIGZvciB1cyAqLwogCWNzcjUgPSBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KTsKIAotICAgICAgICBpZiAodHAtPmZsYWdzICYgSEFTX1BIWV9JUlEpIAorICAgICAgICBpZiAodHAtPmZsYWdzICYgSEFTX1BIWV9JUlEpCiAJICAgICAgICBoYW5kbGVkID0gcGh5X2ludGVycnVwdCAoZGV2KTsKLSAgICAKKwogCWlmICgoY3NyNSAmIChOb3JtYWxJbnRyfEFibm9ybWFsSW50cikpID09IDApCiAJCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogCkBAIC01MzgsMTcgKzUzOCwxNyBAQAogCQkJLyogTWFzayBSWCBpbnRycyBhbmQgYWRkIHRoZSBkZXZpY2UgdG8gcG9sbCBsaXN0LiAqLwogCQkJaW93cml0ZTMyKHR1bGlwX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMmflJ4UG9sbEludCwgaW9hZGRyICsgQ1NSNyk7CiAJCQluZXRpZl9yeF9zY2hlZHVsZShkZXYpOwotCQkJCisKIAkJCWlmICghKGNzcjUmfihBYm5vcm1hbEludHJ8Tm9ybWFsSW50cnxSeFBvbGxJbnR8VFBMbmtQYXNzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAJCX0KLQkJCisKICAgICAgICAgICAgICAgIC8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgc291cmNlcyB3ZSBoYW5kbGUgaGVyZSBBU0FQCiAgICAgICAgICAgICAgICAgICB0aGUgcG9sbCBmdW5jdGlvbiBkb2VzIFJ4IGFuZCBSeE5vQnVmIGFja2luZyAqLwotCQkKKwogCQlpb3dyaXRlMzIoY3NyNSAmIDB4MDAwMWZmM2YsIGlvYWRkciArIENTUjUpOwogCi0jZWxzZSAKKyNlbHNlCiAJCS8qIEFja25vd2xlZGdlIGFsbCBvZiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc291cmNlcyBBU0FQLiAqLwogCQlpb3dyaXRlMzIoY3NyNSAmIDB4MDAwMWZmZmYsIGlvYWRkciArIENTUjUpOwogCkBAIC01NTksMTEgKzU1OSwxMSBAQAogCQl9CiAKICNlbmRpZiAvKiAgQ09ORklHX1RVTElQX05BUEkgKi8KLQkJCisKIAkJaWYgKHR1bGlwX2RlYnVnID4gNCkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0ICBjc3I1PSUjOC44eCBuZXcgY3NyNT0lIzguOHguXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgY3NyNSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOwotCQkKKwogCiAJCWlmIChjc3I1ICYgKFR4Tm9CdWYgfCBUeERpZWQgfCBUeEludHIgfCBUaW1lckludCkpIHsKIAkJCXVuc2lnbmVkIGludCBkaXJ0eV90eDsKQEAgLTczNywxNyArNzM3LDE3IEBACiAjaWZkZWYgQ09ORklHX1RVTElQX05BUEkKIAkJaWYgKHJ4ZCkKIAkJCWNzcjUgJj0gflJ4UG9sbEludDsKLQl9IHdoaWxlICgoY3NyNSAmIChUeE5vQnVmIHwgCi0JCQkgIFR4RGllZCB8IAotCQkJICBUeEludHIgfCAKKwl9IHdoaWxlICgoY3NyNSAmIChUeE5vQnVmIHwKKwkJCSAgVHhEaWVkIHwKKwkJCSAgVHhJbnRyIHwKIAkJCSAgVGltZXJJbnQgfAogCQkJICAvKiBBYm5vcm1hbCBpbnRyLiAqLwotCQkJICBSeERpZWQgfCAKLQkJCSAgVHhGSUZPVW5kZXJmbG93IHwgCi0JCQkgIFR4SmFiYmVyIHwgCi0JCQkgIFRQTG5rRmFpbCB8ICAKKwkJCSAgUnhEaWVkIHwKKwkJCSAgVHhGSUZPVW5kZXJmbG93IHwKKwkJCSAgVHhKYWJiZXIgfAorCQkJICBUUExua0ZhaWwgfAogCQkJICBTeXRlbUVycm9yICkpICE9IDApOwotI2Vsc2UgCisjZWxzZQogCX0gd2hpbGUgKChjc3I1ICYgKE5vcm1hbEludHJ8QWJub3JtYWxJbnRyKSkgIT0gMCk7CiAKIAl0dWxpcF9yZWZpbGxfcngoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCmluZGV4IGY1MzM5NmYuLmU5YmMyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5taWlfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCQkKKwogCS8qIEVzdGFibGlzaCBzeW5jIGJ5IHNlbmRpbmcgMzIgbG9naWMgb25lcy4gKi8KIAlmb3IgKGkgPSAzMjsgaSA+PSAwOyBpLS0pIHsKIAkJaW93cml0ZTMyKE1ESU9fRU5CIHwgTURJT19EQVRBX1dSSVRFMSwgbWRpb19hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmggYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCmluZGV4IDA1ZDJkOTYuLmQyNTAyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaApAQCAtMjU5LDcgKzI1OSw3IEBACiAgICBUaGVyZSBhcmUgbm8gaWxsIGVmZmVjdHMgZnJvbSB0b28tbGFyZ2UgcmVjZWl2ZSByaW5ncy4gKi8KIAogI2RlZmluZSBUWF9SSU5HX1NJWkUJMzIKLSNkZWZpbmUgUlhfUklOR19TSVpFCTEyOCAKKyNkZWZpbmUgUlhfUklOR19TSVpFCTEyOAogI2RlZmluZSBNRURJQV9NQVNLICAgICAzMQogCiAjZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzYJLyogU2l6ZSBvZiBlYWNoIHRlbXBvcmFyeSBSeCBidWZmZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggYzY3YzkxMi4uY2FiZGY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKICAqCUNoaXBzIHRoYXQgaGF2ZSB0aGUgTVJNL3Jlc2VydmVkIGJpdCBxdWlyayBhbmQgdGhlIGJ1cnN0IHF1aXJrLiBUaGF0CiAgKglpcyB0aGUgRE05MTBYIGFuZCB0aGUgb24gY2hpcCBVTGkgZGV2aWNlcwogICovCi0gCisKIHN0YXRpYyBpbnQgdHVsaXBfdWxpX2RtX3F1aXJrKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCWlmIChwZGV2LT52ZW5kb3IgPT0gMHgxMjgyICYmIHBkZXYtPmRldmljZSA9PSAweDkxMDIpCkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCSAqLwogCiAJLyogMS4gSW50ZWwgU2F0dXJuLiBTd2l0Y2ggdG8gOCBsb25nIHdvcmRzIGJ1cnN0LCA4IGxvbmcgd29yZCBjYWNoZQotCSAgICAgIGFsaWduZWQuICBBcmllcyBtaWdodCBuZWVkIHRoaXMgdG9vLiBUaGUgU2F0dXJuIGVycmF0YSBhcmUgbm90IAorCSAgICAgIGFsaWduZWQuICBBcmllcyBtaWdodCBuZWVkIHRoaXMgdG9vLiBUaGUgU2F0dXJuIGVycmF0YSBhcmUgbm90CiAJICAgICAgcHJldHR5IHJlYWRpbmcgYnV0IHRoYW5rZnVsbHkgaXQncyBhbiBvbGQgNDg2IGNoaXBzZXQuCiAKIAkgICAyLiBUaGUgZHJlYWRlZCBTaVM0OTYgNDg2IGNoaXBzZXQuIFNhbWUgd29ya2Fyb3VuZCBhcyBJbnRlbApAQCAtMTQ4MywxNCArMTQ4Myw2IEBACiAJCQlzYV9vZmZzZXQgPSAyOwkJLyogR3JyciwgZGFtbiBNYXRyb3ggYm9hcmRzLiAqLwogCQkJbXVsdGlwb3J0X2NudCA9IDQ7CiAJCX0KLSNpZmRlZiBDT05GSUdfRERCNTQ3NgotCQlpZiAoKHBkZXYtPmJ1cy0+bnVtYmVyID09IDApICYmIChQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0gNikpIHsKLQkJCS8qIEREQjU0NzYgTUFDIGFkZHJlc3MgaW4gZmlyc3QgRUVQUk9NIGxvY2F0aW9ucy4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgc2Ffb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWVkaWEgdGFibGUgZWl0aGVyICovCi0gICAgICAgICAgICAgICAgICAgICAgIHRwLT5mbGFncyAmPSB+SEFTX01FRElBX1RBQkxFOwotICAgICAgICAgICAgICAgfQotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0REQjU0NzcKICAgICAgICAgICAgICAgIGlmICgocGRldi0+YnVzLT5udW1iZXIgPT0gMCkgJiYgKFBDSV9TTE9UKHBkZXYtPmRldmZuKSA9PSA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAvKiBEREI1NDc3IE1BQyBhZGRyZXNzIGluIGZpcnN0IEVFUFJPTSBsb2NhdGlvbnMuICovCkBAIC0xNTAwLDcgKzE0OTIsNyBAQAogICAgICAgICAgICAgICAgfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01JUFNfQ09CQUxUCi0gICAgICAgICAgICAgICBpZiAoKHBkZXYtPmJ1cy0+bnVtYmVyID09IDApICYmIAorICAgICAgICAgICAgICAgaWYgKChwZGV2LT5idXMtPm51bWJlciA9PSAwKSAmJgogICAgICAgICAgICAgICAgICAgICgoUENJX1NMT1QocGRldi0+ZGV2Zm4pID09IDcpIHx8CiAgICAgICAgICAgICAgICAgICAgIChQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0gMTIpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAvKiBDb2JhbHQgTUFDIGFkZHJlc3MgaW4gZmlyc3QgRUVQUk9NIGxvY2F0aW9ucy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwppbmRleCAyMzhlOWM3Li44YjNhMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCkBAIC05LDcgKzksNyBAQAogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCi0gICAgCisKICovCiAKICNkZWZpbmUgRFJWX05BTUUJInVsaTUyNngiCkBAIC0xODUsNyArMTg1LDcgQEAKIAogCS8qIE5JQyBTUk9NIGRhdGEgKi8KIAl1bnNpZ25lZCBjaGFyIHNyb21bMTI4XTsKLQl1OCBpbml0OwkKKwl1OCBpbml0OwogfTsKIAogZW51bSB1bGk1MjZ4X29mZnNldHMgewpAQCAtMjU4LDcgKzI1OCw3IEBACiAJc3RydWN0IHVsaTUyNnhfYm9hcmRfaW5mbyAqZGI7CS8qIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGksIGVycjsKLQkKKwogCVVMSTUyNlhfREJVRygwLCAidWxpNTI2eF9pbml0X29uZSgpIiwgMCk7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQpAQCAtMzE2LDcgKzMxNiw3IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9ub21lbTsKIAl9Ci0JCisKIAlkYi0+Zmlyc3RfdHhfZGVzYyA9IChzdHJ1Y3QgdHhfZGVzYyAqKSBkYi0+ZGVzY19wb29sX3B0cjsKIAlkYi0+Zmlyc3RfdHhfZGVzY19kbWEgPSBkYi0+ZGVzY19wb29sX2RtYV9wdHI7CiAJZGItPmJ1Zl9wb29sX3N0YXJ0ID0gZGItPmJ1Zl9wb29sX3B0cjsKQEAgLTMyNCwxNCArMzI0LDE0IEBACiAKIAlkYi0+Y2hpcF9pZCA9IGVudC0+ZHJpdmVyX2RhdGE7CiAJZGItPmlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQkKKwogCWRiLT5wZGV2ID0gcGRldjsKIAlkYi0+aW5pdCA9IDE7Ci0JCisKIAlkZXYtPmJhc2VfYWRkciA9IGRiLT5pb2FkZHI7CiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0JCisKIAkvKiBSZWdpc3RlciBzb21lIG5lY2Vzc2FyeSBmdW5jdGlvbnMgKi8KIAlkZXYtPm9wZW4gPSAmdWxpNTI2eF9vcGVuOwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnVsaTUyNnhfc3RhcnRfeG1pdDsKQEAgLTM0MSw3ICszNDEsNyBAQAogCWRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCXNwaW5fbG9ja19pbml0KCZkYi0+bG9jayk7CiAKLQkJCisKIAkvKiByZWFkIDY0IHdvcmQgc3JvbSBkYXRhICovCiAJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCiAJCSgodTE2ICopIGRiLT5zcm9tKVtpXSA9IGNwdV90b19sZTE2KHJlYWRfc3JvbV93b3JkKGRiLT5pb2FkZHIsIGkpKTsKQEAgLTM3NCw3ICszNzQsNyBAQAogCQlnb3RvIGVycl9vdXRfcmVzOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVMaSBNJTA0bHggYXQgcGNpJXMsIixkZXYtPm5hbWUsZW50LT5kcml2ZXJfZGF0YSA+PiAxNixwY2lfbmFtZShwZGV2KSk7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQlwcmludGsoIiVjJTAyeCIsIGkgPyAnOicgOiAnICcsIGRldi0+ZGV2X2FkZHJbaV0pOwogCXByaW50aygiLCBpcnEgJWQuXG4iLCBkZXYtPmlycSk7CkBAIC0zODksNyArMzg5LDcgQEAKIAlpZihkYi0+ZGVzY19wb29sX3B0cikKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpICogREVTQ19BTExfQ05UICsgMHgyMCwKIAkJCWRiLT5kZXNjX3Bvb2xfcHRyLCBkYi0+ZGVzY19wb29sX2RtYV9wdHIpOwotCQkJCisKIAlpZihkYi0+YnVmX3Bvb2xfcHRyICE9IE5VTEwpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVFhfQlVGX0FMTE9DICogVFhfREVTQ19DTlQgKyA0LAogCQkJZGItPmJ1Zl9wb29sX3B0ciwgZGItPmJ1Zl9wb29sX2RtYV9wdHIpOwpAQCAtNDMzLDcgKzQzMyw3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAlVTEk1MjZYX0RCVUcoMCwgInVsaTUyNnhfb3BlbiIsIDApOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ1bGk1MjZ4X2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KTsKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCS8qIENSNiBvcGVyYXRpb24gbW9kZSBkZWNpc2lvbiAqLwogCWRiLT5jcjZfZGF0YSB8PSBVTEk1MjZYX1RYVEhfMjU2OwogCWRiLT5jcjBfZGF0YSA9IENSMF9ERUZBVUxUOwotCQorCiAJLyogSW5pdGlhbGl6ZSBVTEk1MjZYIGJvYXJkICovCiAJdWxpNTI2eF9pbml0KGRldik7CiAKQEAgLTYwNCw3ICs2MDQsNyBAQAogCS8qIFJlc3RvcmUgQ1I3IHRvIGVuYWJsZSBpbnRlcnJ1cHQgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCW91dGwoZGItPmNyN19kYXRhLCBkZXYtPmJhc2VfYWRkciArIERDUjcpOwotCQorCiAJLyogZnJlZSB0aGlzIFNLQiAqLwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIApAQCAtNzgyLDcgKzc4Miw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgcnhsZW47CiAJdTMyIHJkZXMwOwotCQorCiAJcnhwdHIgPSBkYi0+cnhfcmVhZHlfcHRyOwogCiAJd2hpbGUoZGItPnJ4X2F2YWlsX2NudCkgewpAQCAtODIxLDcgKzgyMSw3IEBACiAJCQlpZiAoICEocmRlczAgJiAweDgwMDApIHx8CiAJCQkJKChkYi0+Y3I2X2RhdGEgJiBDUjZfUE0pICYmIChyeGxlbj42KSkgKSB7CiAJCQkJc2tiID0gcnhwdHItPnJ4X3NrYl9wdHI7Ci0JCQorCiAJCQkJLyogR29vZCBwYWNrZXQsIHNlbmQgdG8gdXBwZXIgbGF5ZXIgKi8KIAkJCQkvKiBTaG9yc3QgcGFja2V0IHVzZWQgbmV3IFNLQiAqLwogCQkJCWlmICggKHJ4bGVuIDwgUlhfQ09QWV9TSVpFKSAmJgpAQCAtODQxLDcgKzg0MSw3IEBACiAJCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCQlkYi0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJCWRiLT5zdGF0cy5yeF9ieXRlcyArPSByeGxlbjsKLQkJCQkKKwogCQkJfSBlbHNlIHsKIAkJCQkvKiBSZXVzZSBTS0IgYnVmZmVyIHdoZW4gdGhlIHBhY2tldCBpcyBlcnJvciAqLwogCQkJCVVMSTUyNlhfREJVRygwLCAiUmV1c2UgU0sgYnVmZmVyLCByZGVzMCIsIHJkZXMwKTsKQEAgLTkxMSw3ICs5MTEsNyBAQAogCSAgICAgICAgICAgICAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CiAJICAgICAgICAgICAgICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKIAkgICAgICAgICAgICAgICAgICAgU1VQUE9SVEVEX01JSSk7Ci0JCQorCiAJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAogCSAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CiAJICAgICAgICAgICAgICAgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CkBAIC05MjQsMTMgKzkyNCwxMyBAQAogCWVjbWQtPnBoeV9hZGRyZXNzID0gZGItPnBoeV9hZGRyOwogCiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwotCQkKKwogCWVjbWQtPnNwZWVkID0gMTA7CiAJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCisKIAlpZihkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNSEYgfHwgZGItPm9wX21vZGU9PVVMSTUyNlhfMTAwTUZEKQogCXsKLQkJZWNtZC0+c3BlZWQgPSAxMDA7ICAgICAgICAgICAgICAgCisJCWVjbWQtPnNwZWVkID0gMTAwOwogCX0KIAlpZihkYi0+b3BfbW9kZT09VUxJNTI2WF8xME1GRCB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCiAJewpAQCAtOTM5LDExICs5MzksMTEgQEAKIAlpZihkYi0+bGlua19mYWlsZWQpCiAJewogCQllY21kLT5zcGVlZCA9IC0xOwotCQllY21kLT5kdXBsZXggPSAtMTsJCisJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KLQkKKwogCWlmIChkYi0+bWVkaWFfbW9kZSAmIFVMSTUyNlhfQVVUTykKLQl7CQorCXsKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCX0KIH0KQEAgLTk2NCwxNSArOTY0LDE1IEBACiAKIHN0YXRpYyBpbnQgbmV0ZGV2X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkgewogCXN0cnVjdCB1bGk1MjZ4X2JvYXJkX2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCVVMaV9ldGh0b29sX2dzZXQobnAsIGNtZCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHUzMiBuZXRkZXZfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewogCXN0cnVjdCB1bGk1MjZ4X2JvYXJkX2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCisKIAlpZihucC0+bGlua19mYWlsZWQpCiAJCXJldHVybiAwOwogCWVsc2UKQEAgLTEwMDUsMTEgKzEwMDUsMTEgQEAKIAlzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggVG1wU3BlZWQ9MTA7Ci0JCisKIAkvL1VMSTUyNlhfREJVRygwLCAidWxpNTI2eF90aW1lcigpIiwgMCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CiAKLQkKKwogCS8qIER5bmFtaWMgcmVzZXQgVUxJNTI2WCA6IHN5c3RlbSBlcnJvciBvciB0cmFuc21pdCB0aW1lLW91dCAqLwogCXRtcF9jcjggPSBpbmwoZGItPmlvYWRkciArIERDUjgpOwogCWlmICggKGRiLT5pbnRlcnZhbF9yeF9jbnQ9PTApICYmICh0bXBfY3I4KSApIHsKQEAgLTEwMjEsOSArMTAyMSw5IEBACiAJLyogVFggcG9sbGluZyBraWNrIG1vbml0b3IgKi8KIAlpZiAoIGRiLT50eF9wYWNrZXRfY250ICYmCiAJICAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGRldi0+dHJhbnNfc3RhcnQgKyBVTEk1MjZYX1RYX0tJQ0spICkgewotCQlvdXRsKDB4MSwgZGV2LT5iYXNlX2FkZHIgKyBEQ1IxKTsgICAvLyBUeCBwb2xsaW5nIGFnYWluIAorCQlvdXRsKDB4MSwgZGV2LT5iYXNlX2FkZHIgKyBEQ1IxKTsgICAvLyBUeCBwb2xsaW5nIGFnYWluCiAKLQkJLy8gVFggVGltZW91dCAKKwkJLy8gVFggVGltZW91dAogCQlpZiAoIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2LT50cmFuc19zdGFydCArIFVMSTUyNlhfVFhfVElNRU9VVCkgKSB7CiAJCQlkYi0+cmVzZXRfVFh0aW1lb3V0Kys7CiAJCQlkYi0+d2FpdF9yZXNldCA9IDE7CkBAIC0xMDczLDcgKzEwNzMsNyBAQAogCQkJCXVsaTUyNnhfc2Vuc2Vfc3BlZWQoZGIpICkKIAkJCQlkYi0+bGlua19mYWlsZWQgPSAxOwogCQkJdWxpNTI2eF9wcm9jZXNzX21vZGUoZGIpOwotCQkJCisKIAkJCWlmKGRiLT5saW5rX2ZhaWxlZD09MCkKIAkJCXsKIAkJCQlpZihkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNSEYgfHwgZGItPm9wX21vZGU9PVVMSTUyNlhfMTAwTUZEKQpAQCAtMTQwNCw3ICsxNDA0LDcgQEAKIAlwaHlfbW9kZSA9IHBoeV9yZWFkKGRiLT5pb2FkZHIsIGRiLT5waHlfYWRkciwgMSwgZGItPmNoaXBfaWQpOwogCiAJaWYgKCAocGh5X21vZGUgJiAweDI0KSA9PSAweDI0ICkgewotCQkKKwogCQlwaHlfbW9kZSA9ICgocGh5X3JlYWQoZGItPmlvYWRkciwgZGItPnBoeV9hZGRyLCA1LCBkYi0+Y2hpcF9pZCkgJiAweDAxZTApPDw3KTsKIAkJaWYocGh5X21vZGUmMHg4MDAwKQogCQkJcGh5X21vZGUgPSAweDgwMDA7CkBAIC0xNDE0LDcgKzE0MTQsNyBAQAogCQkJcGh5X21vZGUgPSAweDIwMDA7CiAJCWVsc2UKIAkJCXBoeV9tb2RlID0gMHgxMDAwOwotCQkKKwogCQkvKiBwcmludGsoRFJWX05BTUUgIjogUGh5X21vZGUgJXggIixwaHlfbW9kZSk7ICovCiAJCXN3aXRjaCAocGh5X21vZGUpIHsKIAkJY2FzZSAweDEwMDA6IGRiLT5vcF9tb2RlID0gVUxJNTI2WF8xME1IRjsgYnJlYWs7CkBAIC0xNDQyLDcgKzE0NDIsNyBAQAogc3RhdGljIHZvaWQgdWxpNTI2eF9zZXRfcGh5eGNlcihzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYikKIHsKIAl1MTYgcGh5X3JlZzsKLQkKKwogCS8qIFBoeXhjZXIgY2FwYWJpbGl0eSBzZXR0aW5nICovCiAJcGh5X3JlZyA9IHBoeV9yZWFkKGRiLT5pb2FkZHIsIGRiLT5waHlfYWRkciwgNCwgZGItPmNoaXBfaWQpICYgfjB4MDFlMDsKIApAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAKIAkJY2FzZSBVTEk1MjZYXzEwME1IRjogcGh5X3JlZyB8PSAweDgwOyBicmVhazsKIAkJY2FzZSBVTEk1MjZYXzEwME1GRDogcGh5X3JlZyB8PSAweDEwMDsgYnJlYWs7CiAJCX0KLQkJCisKIAl9CiAKICAgCS8qIFdyaXRlIG5ldyBjYXBhYmlsaXR5IHRvIFBoeXhjZXIgUmVnNCAqLwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAKIAkvKiBXcml0ZSBhIHdvcmQgZGF0YSB0byBQSFkgY29udHJvbGxlciAqLwogCWZvciAoIGkgPSAweDgwMDA7IGkgPiAwOyBpID4+PSAxKQogCQlwaHlfd3JpdGVfMWJpdChpb2FkZHIsIHBoeV9kYXRhICYgaSA/IFBIWV9EQVRBXzEgOiBQSFlfREFUQV8wLCBjaGlwX2lkKTsKLQkKKwogfQogCiAKQEAgLTE1NzQsNyArMTU3NCw3IEBACiAJCXJldHVybiBwaHlfcmVhZGJ5X2NyMTAoaW9iYXNlLCBwaHlfYWRkciwgb2Zmc2V0KTsKIAkvKiBNNTI2MS9NNTI2MyBDaGlwICovCiAJaW9hZGRyID0gaW9iYXNlICsgRENSOTsKLQkKKwogCS8qIFNlbmQgMzMgc3luY2hyb25pemF0aW9uIGNsb2NrIHRvIFBoeSBjb250cm9sbGVyICovCiAJZm9yIChpID0gMDsgaSA8IDM1OyBpKyspCiAJCXBoeV93cml0ZV8xYml0KGlvYWRkciwgUEhZX0RBVEFfMSwgY2hpcF9pZCk7CkBAIC0xNjEwLDcgKzE2MTAsNyBAQAogc3RhdGljIHUxNiBwaHlfcmVhZGJ5X2NyMTAodW5zaWduZWQgbG9uZyBpb2Jhc2UsIHU4IHBoeV9hZGRyLCB1OCBvZmZzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBpb2FkZHIsY3IxMF92YWx1ZTsKLQkKKwogCWlvYWRkciA9IGlvYmFzZSArIERDUjEwOwogCWNyMTBfdmFsdWUgPSBwaHlfYWRkcjsKIAljcjEwX3ZhbHVlID0gKGNyMTBfdmFsdWU8PDUpICsgb2Zmc2V0OwpAQCAtMTYyOSw3ICsxNjI5LDcgQEAKIHN0YXRpYyB2b2lkIHBoeV93cml0ZWJ5X2NyMTAodW5zaWduZWQgbG9uZyBpb2Jhc2UsIHU4IHBoeV9hZGRyLCB1OCBvZmZzZXQsIHUxNiBwaHlfZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGlvYWRkcixjcjEwX3ZhbHVlOwotCQorCiAJaW9hZGRyID0gaW9iYXNlICsgRENSMTA7CiAJY3IxMF92YWx1ZSA9IHBoeV9hZGRyOwogCWNyMTBfdmFsdWUgPSAoY3IxMF92YWx1ZTw8NSkgKyBvZmZzZXQ7CkBAIC0xNjU5LDcgKzE2NTksNyBAQAogc3RhdGljIHUxNiBwaHlfcmVhZF8xYml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1MzIgY2hpcF9pZCkKIHsKIAl1MTYgcGh5X2RhdGE7Ci0JCisKIAlvdXRsKDB4NTAwMDAgLCBpb2FkZHIpOwogCXVkZWxheSgxKTsKIAlwaHlfZGF0YSA9ICggaW5sKGlvYWRkcikgPj4gMTkgKSAmIDB4MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IDEzNmE3MGMuLjhmZWEyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtMzgsMTIgKzM4LDEyIEBACiAJCQlDb3B5cmlnaHQgKEMpIDIwMDEgTWFuZnJlZCBTcHJhdWwKICAgCSogZXRodG9vbCBzdXBwb3J0IChqZ2FyemlrKQogCSogUmVwbGFjZSBzb21lIE1JSS1yZWxhdGVkIG1hZ2ljIG51bWJlcnMgd2l0aCBjb25zdGFudHMgKGpnYXJ6aWspCi0gIAorCiAJVE9ETzoKIAkqIGVuYWJsZSBwY2lfcG93ZXJfb2ZmCiAJKiBXYWtlLU9uLUxBTgogKi8KLSAgCisKICNkZWZpbmUgRFJWX05BTUUJIndpbmJvbmQtODQwIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wMS1kIgogI2RlZmluZSBEUlZfUkVMREFURQkiTm92LTE3LTIwMDEiCkBAIC01Nyw3ICs1Nyw3IEBACiBjLWhlbHAtc3ltYm9sOiBDT05GSUdfV0lOQk9ORF84NDAKIGMtaGVscDogVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBXaW5ib25kIFc4OWM4NDAgY2hpcC4gIEl0IGFsc28gd29ya3Mgd2l0aAogYy1oZWxwOiB0aGUgVFg5ODgyIGNoaXAgb24gdGhlIENvbXBleCBSTDEwMC1BVFggYm9hcmQuCi1jLWhlbHA6IE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gYW5kIHVwZGF0ZXMgYXJlIGF2YWlsYWJsZSBmcm9tIAorYy1oZWxwOiBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCB1cGRhdGVzIGFyZSBhdmFpbGFibGUgZnJvbQogYy1oZWxwOiBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbAogKi8KIApAQCAtMjA3LDcgKzIwNyw3IEBACiAKICovCiAKLQwKKwogCiAvKgogICBQQ0kgcHJvYmUgdGFibGUuCkBAIC0zNzQsNyArMzc0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGludCAgbmV0ZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0MCisKIAogc3RhdGljIGludCBfX2RldmluaXQgdzg0MF9wcm9iZTEgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTQzNCw3ICs0MzQsNyBAQAogCW5wLT5taWlfaWYubWRpb19yZWFkID0gbWRpb19yZWFkOwogCW5wLT5taWlfaWYubWRpb193cml0ZSA9IG1kaW9fd3JpdGU7CiAJbnAtPmJhc2VfYWRkciA9IGlvYWRkcjsKLQkKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJaWYgKGRldi0+bWVtX3N0YXJ0KQpAQCAtNTEwLDcgKzUxMCw3IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLQwKKwogLyogUmVhZCB0aGUgRUVQUk9NIGFuZCBNSUkgTWFuYWdlbWVudCBEYXRhIEkvTyAoTURJTykgaW50ZXJmYWNlcy4gIFRoZXNlIGFyZQogICAgb2Z0ZW4gc2VyaWFsIGJpdCBzdHJlYW1zIGdlbmVyYXRlZCBieSB0aGUgaG9zdCBwcm9jZXNzb3IuCiAgICBUaGUgZXhhbXBsZSBiZWxvdyBpcyBmb3IgdGhlIGNvbW1vbiA5M2M0NiBFRVBST00sIDY0IDE2IGJpdCB3b3Jkcy4gKi8KQEAgLTY2MCw3ICs2NjAsNyBAQAogCXJldHVybjsKIH0KIAotDAorCiBzdGF0aWMgaW50IG5ldGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MzEsNyArNzMxLDcgQEAKIAkJCQlkZXYtPm5hbWUsIG5wLT5waHlzWzBdKTsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCX0KLQkKKwogCWlmICgobnAtPm1paSAmIH4weGYpID09IE1JSV9EQVZJQ09NX0RNOTEwMSkgewogCQkvKiBJZiB0aGUgbGluayBwYXJ0bmVyIGRvZXNuJ3Qgc3VwcG9ydCBhdXRvbmVnb3RpYXRpb24KIAkJICogdGhlIE1JSSBkZXRlY3RzIGl0J3MgYWJpbGl0aWVzIHdpdGggdGhlICJwYXJhbGxlbCBkZXRlY3Rpb24iLgpAQCAtNzYxLDcgKzc2MSw3IEBACiAJCXJlc3VsdCB8PSAweDIwMDAwMDAwOwogCWlmIChyZXN1bHQgIT0gbnAtPmNzcjYgJiYgZGVidWcpCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZXR0aW5nICVkTUJpdC0lcy1kdXBsZXggYmFzZWQgb24gTUlJIyVkXG4iLAotCQkJCSBkZXYtPm5hbWUsIGZhc3RldGggPyAxMDAgOiAxMCwgCisJCQkJIGRldi0+bmFtZSwgZmFzdGV0aCA/IDEwMCA6IDEwLAogCQkJICAgCWR1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwgbnAtPnBoeXNbMF0pOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC05NDcsNyArOTQ3LDcgQEAKIAlpb3dyaXRlMzIoaSwgaW9hZGRyICsgUENJQnVzQ2ZnKTsKIAogCW5wLT5jc3I2ID0gMDsKLQkvKiAxMjggYnl0ZSBUeCB0aHJlc2hvbGQ7IAorCS8qIDEyOCBieXRlIFR4IHRocmVzaG9sZDsKIAkJVHJhbnNtaXQgb247IFJlY2VpdmUgb247ICovCiAJdXBkYXRlX2NzcjYoZGV2LCAweDAwMDIyMDAyIHwgdXBkYXRlX2xpbmsoZGV2KSB8IF9fc2V0X3J4X21vZGUoZGV2KSk7CiAKQEAgLTE1ODQsNyArMTU4NCw3IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdzg0MF9yZW1vdmUxIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCQorCiAJaWYgKGRldikgewogCQlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKQEAgLTE2MDUsMTEgKzE2MDUsMTEgQEAKICAqIC0gZ2V0X3N0YXRzOgogICogCXNwaW5fbG9ja19pcnEobnAtPmxvY2spLCBkb2Vzbid0IHRvdWNoIGh3IGlmIG5vdCBwcmVzZW50CiAgKiAtIGhhcmRfc3RhcnRfeG1pdDoKLSAqIAluZXRpZl9zdG9wX3F1ZXVlICsgc3Bpbl91bmxvY2tfd2FpdCgmZGV2LT54bWl0X2xvY2spOworICogCXN5bmNocm9uaXplX2lycSArIG5ldGlmX3R4X2Rpc2FibGU7CiAgKiAtIHR4X3RpbWVvdXQ6Ci0gKiAJbmV0aWZfZGV2aWNlX2RldGFjaCArIHNwaW5fdW5sb2NrX3dhaXQoJmRldi0+eG1pdF9sb2NrKTsKKyAqIAluZXRpZl9kZXZpY2VfZGV0YWNoICsgbmV0aWZfdHhfZGlzYWJsZTsKICAqIC0gc2V0X211bHRpY2FzdF9saXN0Ci0gKiAJbmV0aWZfZGV2aWNlX2RldGFjaCArIHNwaW5fdW5sb2NrX3dhaXQoJmRldi0+eG1pdF9sb2NrKTsKKyAqIAluZXRpZl9kZXZpY2VfZGV0YWNoICsgbmV0aWZfdHhfZGlzYWJsZTsKICAqIC0gaW50ZXJydXB0IGhhbmRsZXIKICAqIAlkb2Vzbid0IHRvdWNoIGh3IGlmIG5vdCBwcmVzZW50LCBzeW5jaHJvbml6ZV9pcnEgd2FpdHMgZm9yCiAgKiAJcnVubmluZyBpbnN0YW5jZXMgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLgpAQCAtMTYzNSwxMSArMTYzNSwxMCBAQAogCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAJCXVwZGF0ZV9jc3I2KGRldiwgMCk7CiAJCWlvd3JpdGUzMigwLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAotCQlzcGluX3VubG9ja193YWl0KCZkZXYtPnhtaXRfbG9jayk7CiAJCXN5bmNocm9uaXplX2lycShkZXYtPmlycSk7CisJCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAkKIAkJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gaW9yZWFkMzIoaW9hZGRyICsgUnhNaXNzZWQpICYgMHhmZmZmOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCmluZGV4IDU2MzQ0MTAuLjYzYzIxNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCkBAIC0xLDExICsxLDExIEBACiAvKgotICogeGlyY29tX2NiOiBBIGRyaXZlciBmb3IgdGhlICh0dWxpcC1saWtlKSBYaXJjb20gQ2FyZGJ1cyBldGhlcm5ldCBjYXJkcyAKKyAqIHhpcmNvbV9jYjogQSBkcml2ZXIgZm9yIHRoZSAodHVsaXAtbGlrZSkgWGlyY29tIENhcmRidXMgZXRoZXJuZXQgY2FyZHMKICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIChDKSBieSB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzLCBhbmQgbGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICogTGljZW5zZS4KICAqCiAgKiBXcml0dGVuIGJ5IEFyamFuIHZhbiBkZSBWZW4gZm9yIFJlZCBIYXQsIEluYy4KLSAqIEJhc2VkIG9uIHdvcmsgYnkgSmVmZiBHYXJ6aWssIERvdWcgTGVkZm9yZCBhbmQgRG9uYWxkIEJlY2tlciAKKyAqIEJhc2VkIG9uIHdvcmsgYnkgSmVmZiBHYXJ6aWssIERvdWcgTGVkZm9yZCBhbmQgRG9uYWxkIEJlY2tlcgogICoKICAqICAJVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogICogICAgICBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgpAQCAtOTMsNyArOTMsNyBAQAogCiAJdW5zaWduZWQgbG9uZyBpb19wb3J0OwogCWludCBvcGVuOwotCQorCiAJLyogdHJhbnNtaXRfdXNlZCBpcyB0aGUgcm90YXRpbmcgY291bnRlciB0aGF0IGluZGljYXRlcyB3aGljaCB0cmFuc21pdAogCSAgIGRlc2NyaXB0b3IgaGFzIHRvIGJlIHVzZWQgbmV4dCAqLwogCWludCB0cmFuc21pdF91c2VkOwpAQCAtMTUzLDEwICsxNTMsMTAgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB4aXJjb21fcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHhpcmNvbV9vcHMgPSB7Ci0JLm5hbWUJCT0gInhpcmNvbV9jYiIsIAotCS5pZF90YWJsZQk9IHhpcmNvbV9wY2lfdGFibGUsIAotCS5wcm9iZQkJPSB4aXJjb21fcHJvYmUsIAotCS5yZW1vdmUJCT0geGlyY29tX3JlbW92ZSwgCisJLm5hbWUJCT0gInhpcmNvbV9jYiIsCisJLmlkX3RhYmxlCT0geGlyY29tX3BjaV90YWJsZSwKKwkucHJvYmUJCT0geGlyY29tX3Byb2JlLAorCS5yZW1vdmUJCT0geGlyY29tX3JlbW92ZSwKIAkuc3VzcGVuZCA9TlVMTCwKIAkucmVzdW1lID1OVUxMCiB9OwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCQlidWZmZXJbaTIrK109JzEnOwogCQllbHNlCiAJCQlidWZmZXJbaTIrK109JzAnOwotCQlpZiAoKGkmMyk9PTApIAorCQlpZiAoKGkmMyk9PTApCiAJCQlidWZmZXJbaTIrK109JyAnOwogCX0KIAlwcmludGsoIiVzXG4iLGJ1ZmZlcik7CkBAIC0xOTYsMTAgKzE5NiwxMCBAQAogCiAvKiB4aXJjb21fcHJvYmUgaXMgdGhlIGNvZGUgdGhhdCBnZXRzIGNhbGxlZCBvbiBkZXZpY2UgaW5zZXJ0aW9uLgogICAgaXQgc2V0cyB1cCB0aGUgaGFyZHdhcmUgYW5kIHJlZ2lzdGVycyB0aGUgZGV2aWNlIHRvIHRoZSBuZXR3b3JrbGF5ZXIuCi0gICAKKwogICAgVE9ETzogU2VuZCAxIG9yIDIgImR1bW15IiBwYWNrZXRzIGhlcmUgYXMgdGhlIGNhcmQgc2VlbXMgdG8gZGlzY2FyZCB0aGUKICAgICAgICAgIGZpcnN0IHR3byBwYWNrZXRzIHRoYXQgZ2V0IHNlbmQsIGFuZCBwdW1wIGhhdGVzIHRoYXQuCi0gICAgICAgICAKKwogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB4aXJjb21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKQEAgLTIwOSw3ICsyMDksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgdG1wMTY7CiAJZW50ZXIoInhpcmNvbV9wcm9iZSIpOwotCQorCiAJLyogRmlyc3QgZG8gdGhlIFBDSSBpbml0aWFsaXNhdGlvbiAqLwogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQpAQCAtMjE3LDI0ICsyMTcsMjQgQEAKIAogCS8qIGRpc2FibGUgYWxsIHBvd2VybWFuYWdlbWVudCAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX1BPV0VSTUdNVCwgMHgwMDAwKTsKLQkKKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOyAvKiBXaHkgaXNuJ3QgdGhpcyBkb25lIGJ5IHBjaV9lbmFibGVfZGV2aWNlID8qLwogCi0JLyogY2xlYXIgUENJIHN0YXR1cywgaWYgYW55ICovIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkIChwZGV2LFBDSV9TVEFUVVMsICZ0bXAxNik7IAorCS8qIGNsZWFyIFBDSSBzdGF0dXMsIGlmIGFueSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkIChwZGV2LFBDSV9TVEFUVVMsICZ0bXAxNik7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkIChwZGV2LCBQQ0lfU1RBVFVTLHRtcDE2KTsKLQkKKwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJmNoaXBfcmV2KTsKLQkKKwogCWlmICghcmVxdWVzdF9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCAxMjgsICJ4aXJjb21fY2IiKSkgewogCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogZmFpbGVkIHRvIGFsbG9jYXRlIGlvLXJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIAorCS8qCiAJICAgQmVmb3JlIGNoYW5naW5nIHRoZSBoYXJkd2FyZSwgYWxsb2NhdGUgdGhlIG1lbW9yeS4KIAkgICBUaGlzIHdheSwgd2UgY2FuIGZhaWwgZ3JhY2VmdWxseSBpZiBub3QgZW5vdWdoIG1lbW9yeQotCSAgIGlzIGF2YWlsYWJsZS4gCisJICAgaXMgYXZhaWxhYmxlLgogCSAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgeGlyY29tX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewpAQCAtMjQyLDEzICsyNDIsMTMgQEAKIAkJZ290byBkZXZpY2VfZmFpbDsKIAl9CiAJcHJpdmF0ZSA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAkvKiBBbGxvY2F0ZSB0aGUgc2VuZC9yZWNlaXZlIGJ1ZmZlcnMgKi8KIAlwcml2YXRlLT5yeF9idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LDgxOTIsJnByaXZhdGUtPnJ4X2RtYV9oYW5kbGUpOwogCWlmIChwcml2YXRlLT5yeF9idWZmZXIgPT0gTlVMTCkgewogIAkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fcHJvYmU6IG5vIG1lbW9yeSBmb3IgcnggYnVmZmVyIFxuIik7CiAJCWdvdG8gcnhfYnVmX2ZhaWw7Ci0JfQkKKwl9CiAJcHJpdmF0ZS0+dHhfYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiw4MTkyLCZwcml2YXRlLT50eF9kbWFfaGFuZGxlKTsKIAlpZiAocHJpdmF0ZS0+dHhfYnVmZmVyID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fcHJvYmU6IG5vIG1lbW9yeSBmb3IgdHggYnVmZmVyIFxuIik7CkBAIC0yNjUsMTEgKzI2NSwxMSBAQAogCXNwaW5fbG9ja19pbml0KCZwcml2YXRlLT5sb2NrKTsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHByaXZhdGUtPmlvX3BvcnQ7Ci0JCisKIAlpbml0aWFsaXplX2NhcmQocHJpdmF0ZSk7CiAJcmVhZF9tYWNfYWRkcmVzcyhwcml2YXRlKTsKIAlzZXR1cF9kZXNjcmlwdG9ycyhwcml2YXRlKTsKLQkKKwogCWRldi0+b3BlbiA9ICZ4aXJjb21fb3BlbjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZ4aXJjb21fc3RhcnRfeG1pdDsKIAlkZXYtPnN0b3AgPSAmeGlyY29tX2Nsb3NlOwpAQCAtMjg1LDE5ICsyODUsMTkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fcHJvYmU6IG5ldGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkLlxuIik7CiAJCWdvdG8gcmVnX2ZhaWw7CiAJfQotCQkKKwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBYaXJjb20gY2FyZGJ1cyByZXZpc2lvbiAlaSBhdCBpcnEgJWkgXG4iLCBkZXYtPm5hbWUsIGNoaXBfcmV2LCBwZGV2LT5pcnEpOwogCS8qIHN0YXJ0IHRoZSB0cmFuc21pdHRlciB0byBnZXQgYSBoZWFydGJlYXQgKi8KIAkvKiBUT0RPOiBzZW5kIDIgZHVtbXkgcGFja2V0cyBoZXJlICovCiAJdHJhbnNjZWl2ZXJfdm9vZG9vKHByaXZhdGUpOwotCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZhdGUtPmxvY2ssZmxhZ3MpOwogCWFjdGl2YXRlX3RyYW5zbWl0dGVyKHByaXZhdGUpOwogCWFjdGl2YXRlX3JlY2VpdmVyKHByaXZhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXZhdGUtPmxvY2ssZmxhZ3MpOwotCQorCiAJdHJpZ2dlcl9yZWNlaXZlKHByaXZhdGUpOwotCQorCiAJbGVhdmUoInhpcmNvbV9wcm9iZSIpOwogCXJldHVybiAwOwogCkBAIC0zMzIsNyArMzMyLDcgQEAKIAlmcmVlX25ldGRldihkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlsZWF2ZSgieGlyY29tX3JlbW92ZSIpOwotfSAKK30KIAogc3RhdGljIGlycXJldHVybl90IHhpcmNvbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTM0NiwxMSArMzQ2LDExIEBACiAJc3Bpbl9sb2NrKCZjYXJkLT5sb2NrKTsKIAlzdGF0dXMgPSBpbmwoY2FyZC0+aW9fcG9ydCtDU1I1KTsKIAotI2lmZGVmIERFQlVHCQorI2lmZGVmIERFQlVHCiAJcHJpbnRfYmluYXJ5KHN0YXR1cyk7CiAJcHJpbnRrKCJ0eCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsY2FyZC0+dHhfYnVmZmVyWzBdLGNhcmQtPnR4X2J1ZmZlcls0XSk7CiAJcHJpbnRrKCJyeCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsY2FyZC0+cnhfYnVmZmVyWzBdLGNhcmQtPnJ4X2J1ZmZlcls0XSk7Ci0jZW5kaWYJCisjZW5kaWYKIAkvKiBIYW5kbGUgc2hhcmVkIGlycSBhbmQgaG90cGx1ZyAqLwogCWlmIChzdGF0dXMgPT0gMCB8fCBzdGF0dXMgPT0gMHhmZmZmZmZmZikgewogCQlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CkBAIC0zNjYsMjEgKzM2NiwyMSBAQAogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCQllbHNlCiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkKKwogCX0KIAotCS8qIENsZWFyIGFsbCByZW1haW5pbmcgaW50ZXJydXB0cyAqLwkKKwkvKiBDbGVhciBhbGwgcmVtYWluaW5nIGludGVycnVwdHMgKi8KIAlzdGF0dXMgfD0gMHhmZmZmZmZmZjsgLyogRklYTUU6IG1ha2UgdGhpcyBjbGVhciBvbmx5IHRoZQogCQkJCSAgICAgICAgcmVhbCBleGlzdGluZyBiaXRzICovCiAJb3V0bChzdGF0dXMsY2FyZC0+aW9fcG9ydCtDU1I1KTsKLQkKIAotCWZvciAoaT0wO2k8TlVNREVTQ1JJUFRPUlM7aSsrKSAKKworCWZvciAoaT0wO2k8TlVNREVTQ1JJUFRPUlM7aSsrKQogCQlpbnZlc3RpZ2F0ZV93cml0ZV9kZXNjcmlwdG9yKGRldixjYXJkLGksYnVmZmVyb2Zmc2V0c1tpXSk7Ci0JZm9yIChpPTA7aTxOVU1ERVNDUklQVE9SUztpKyspIAorCWZvciAoaT0wO2k8TlVNREVTQ1JJUFRPUlM7aSsrKQogCQlpbnZlc3RpZ2F0ZV9yZWFkX2Rlc2NyaXB0b3IoZGV2LGNhcmQsaSxidWZmZXJvZmZzZXRzW2ldKTsKIAotCQorCiAJc3Bpbl91bmxvY2soJmNhcmQtPmxvY2spOwogCWxlYXZlKCJ4aXJjb21faW50ZXJydXB0Iik7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMzkzLDM4ICszOTMsMzggQEAKIAlpbnQgbmV4dGRlc2NyaXB0b3I7CiAJaW50IGRlc2M7CiAJZW50ZXIoInhpcmNvbV9zdGFydF94bWl0Iik7Ci0JCisKIAljYXJkID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jayxmbGFncyk7Ci0JCisKIAkvKiBGaXJzdCBzZWUgaWYgd2UgY2FuIGZyZWUgc29tZSBkZXNjcmlwdG9ycyAqLwotCWZvciAoZGVzYz0wO2Rlc2M8TlVNREVTQ1JJUFRPUlM7ZGVzYysrKSAKKwlmb3IgKGRlc2M9MDtkZXNjPE5VTURFU0NSSVBUT1JTO2Rlc2MrKykKIAkJaW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvcihkZXYsY2FyZCxkZXNjLGJ1ZmZlcm9mZnNldHNbZGVzY10pOwotCQotCQorCisKIAluZXh0ZGVzY3JpcHRvciA9IChjYXJkLT50cmFuc21pdF91c2VkICsxKSAlIChOVU1ERVNDUklQVE9SUyk7CiAJZGVzYyA9IGNhcmQtPnRyYW5zbWl0X3VzZWQ7Ci0JCisKIAkvKiBvbmx5IHNlbmQgdGhlIHBhY2tldCBpZiB0aGUgZGVzY3JpcHRvciBpcyBmcmVlICovCiAJaWYgKGNhcmQtPnR4X2J1ZmZlcls0KmRlc2NdPT0wKSB7CiAJCQkvKiBDb3B5IHRoZSBwYWNrZXQgZGF0YTsgemVybyB0aGUgbWVtb3J5IGZpcnN0IGFzIHRoZSBjYXJkCiAJCQkgICBzb21ldGltZXMgc2VuZHMgbW9yZSB0aGFuIHlvdSBhc2sgaXQgdG8uICovCi0JCQkKKwogCQkJbWVtc2V0KCZjYXJkLT50eF9idWZmZXJbYnVmZmVyb2Zmc2V0c1tkZXNjXS80XSwwLDE1MzYpOwogCQkJbWVtY3B5KCYoY2FyZC0+dHhfYnVmZmVyW2J1ZmZlcm9mZnNldHNbZGVzY10vNF0pLHNrYi0+ZGF0YSxza2ItPmxlbik7Ci0JCi0JCisKKwogCQkJLyogRklYTUU6IFRoZSBzcGVjaWZpY2F0aW9uIHRlbGxzIHVzIHRoYXQgdGhlIGxlbmd0aCB3ZSBzZW5kIEhBUyB0byBiZSBhIG11bHRpcGxlIG9mCiAJCQkgICA0IGJ5dGVzLiAqLwotCQkJICAgCisKIAkJCWNhcmQtPnR4X2J1ZmZlcls0KmRlc2MrMV0gPSBza2ItPmxlbjsKIAkJCWlmIChkZXNjID09IE5VTURFU0NSSVBUT1JTLTEpCiAJCQkJY2FyZC0+dHhfYnVmZmVyWzQqZGVzYysxXSB8PSAoMTw8MjUpOyAgLyogYml0IDI1OiBsYXN0IGRlc2NyaXB0b3Igb2YgdGhlIHJpbmcgKi8KIAogCQkJY2FyZC0+dHhfYnVmZmVyWzQqZGVzYysxXSB8PSAweEYwMDAwMDAwOwotCQkJCQkJIC8qIDB4RjAuLi4gbWVhbnMgd2FudCBpbnRlcnJ1cHRzKi8gCisJCQkJCQkgLyogMHhGMC4uLiBtZWFucyB3YW50IGludGVycnVwdHMqLwogCQkJY2FyZC0+dHhfc2tiW2Rlc2NdID0gc2tiOwotCQkJCisKIAkJCXdtYigpOwogCQkJLyogVGhpcyBnaXZlcyB0aGUgZGVzY3JpcHRvciB0byB0aGUgY2FyZCAqLwogCQkJY2FyZC0+dHhfYnVmZmVyWzQqZGVzY10gPSAweDgwMDAwMDAwOwpAQCAtNDMzLDE4ICs0MzMsMTggQEAKIAkJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQl9CiAJCQljYXJkLT50cmFuc21pdF91c2VkID0gbmV4dGRlc2NyaXB0b3I7Ci0JCQlsZWF2ZSgieGlyY29tLXN0YXJ0X3htaXQgLSBzZW50Iik7CQorCQkJbGVhdmUoInhpcmNvbS1zdGFydF94bWl0IC0gc2VudCIpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jayxmbGFncyk7CiAJCQlyZXR1cm4gMDsKIAl9Ci0JCisKIAogCiAJLyogVWggb2guLi4gbm8gZnJlZSBkZXNjcmlwdG9yLi4uIGRyb3AgdGhlIHBhY2tldCAqLwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLGZsYWdzKTsKIAl0cmlnZ2VyX3RyYW5zbWl0KGNhcmQpOwotCQorCiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCQlsZWF2ZSgieGlyY29tX29wZW4gLSBObyBJUlEiKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JCisKIAl4aXJjb21fdXAoeHApOwogCXhwLT5vcGVuID0gMTsKIAlsZWF2ZSgieGlyY29tX29wZW4iKTsKQEAgLTQ3MywzMSArNDczLDMxIEBACiB7CiAJc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCisKIAllbnRlcigieGlyY29tX2Nsb3NlIik7CiAJY2FyZCA9IG5ldGRldl9wcml2KGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAvKiB3ZSBkb24ndCB3YW50IG5ldyBwYWNrZXRzICovCiAKLQkKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLGZsYWdzKTsKLQkKKwogCWRpc2FibGVfYWxsX2ludGVycnVwdHMoY2FyZCk7Ci0jaWYgMAkKKyNpZiAwCiAJLyogV2UgY2FuIGVuYWJsZSB0aGlzIGFnYWluIG9uY2Ugd2Ugc2VuZCBkdW1teSBwYWNrZXRzIG9uIGlmY29uZmlnIGV0aFggdXAgKi8KIAlkZWFjdGl2YXRlX3JlY2VpdmVyKGNhcmQpOwogCWRlYWN0aXZhdGVfdHJhbnNtaXR0ZXIoY2FyZCk7Ci0jZW5kaWYJCisjZW5kaWYKIAlyZW1vdmVfZGVzY3JpcHRvcnMoY2FyZCk7Ci0JCisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLGZsYWdzKTsKLQkKKwogCWNhcmQtPm9wZW4gPSAwOwogCWZyZWVfaXJxKGRldi0+aXJxLGRldik7Ci0JCisKIAlsZWF2ZSgieGlyY29tX2Nsb3NlIik7Ci0JCisKIAlyZXR1cm4gMDsKLQkKKwogfQogCiAKQEAgLTUwNiw4ICs1MDYsOCBAQAogewogICAgICAgICBzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgICAgICByZXR1cm4gJmNhcmQtPnN0YXRzOwotfSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK30KKwogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIHN0YXRpYyB2b2lkIHhpcmNvbV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTU0MCw3ICs1NDAsNyBAQAogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSMCk7CiAKIAotCXZhbCA9IDA7CQkvKiBWYWx1ZSAweDAwIGlzIGEgc2FmZSBhbmQgY29uc2VydmF0aXZlIHZhbHVlIAorCXZhbCA9IDA7CQkvKiBWYWx1ZSAweDAwIGlzIGEgc2FmZSBhbmQgY29uc2VydmF0aXZlIHZhbHVlCiAJCQkJICAgZm9yIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSMCk7CiAKQEAgLTYxNywyMyArNjE3LDIzIEBACiAKIAkJLyogUnggRGVzY3IyOiBhZGRyZXNzIG9mIHRoZSBidWZmZXIKIAkJICAgd2Ugc3RvcmUgdGhlIGJ1ZmZlciBhdCB0aGUgMm5kIGhhbGYgb2YgdGhlIHBhZ2UgKi8KLQkKKwogCQlhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpIGNhcmQtPnJ4X2RtYV9oYW5kbGU7CiAJCWNhcmQtPnJ4X2J1ZmZlcltpKjQgKyAyXSA9IGNwdV90b19sZTMyKGFkZHJlc3MgKyBidWZmZXJvZmZzZXRzW2ldKTsKIAkJLyogUnggRGVzYzM6IGFkZHJlc3Mgb2YgMm5kIGJ1ZmZlciAtPiAwICovCiAJCWNhcmQtPnJ4X2J1ZmZlcltpKjQgKyAzXSA9IDA7CiAJfQotCQorCiAJd21iKCk7CiAJLyogV3JpdGUgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nIGFkZHJlc3MgdG8gdGhlIGNhcmQgKi8KIAlhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpIGNhcmQtPnJ4X2RtYV9oYW5kbGU7Ci0JdmFsID0gY3B1X3RvX2xlMzIoYWRkcmVzcyk7IAorCXZhbCA9IGNwdV90b19sZTMyKGFkZHJlc3MpOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSMyk7CS8qIFJlY2VpdmUgZGVzY3IgbGlzdCBhZGRyZXNzICovCiAKIAogCS8qIHRyYW5zbWl0IGRlc2NyaXB0b3JzICovCiAJbWVtc2V0KGNhcmQtPnR4X2J1ZmZlciwgMCwgMTI4KTsJLyogY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovCi0JCisKIAlmb3IgKGk9MDtpPE5VTURFU0NSSVBUT1JTO2krKyApIHsKIAkJLyogVHggRGVzY3IwOiBFbXB0eSwgd2Ugb3duIGl0LCBubyBlcnJvcnMgLT4gMHgwMDAwMDAwMCAqLwogCQljYXJkLT50eF9idWZmZXJbaSo0ICsgMF0gPSAweDAwMDAwMDAwOwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJCWNhcmQtPnR4X2J1ZmZlcltpKjQgKyAxXSA9IDE1MzY7CiAJCWlmIChpPT1OVU1ERVNDUklQVE9SUy0xKQogCQkJY2FyZC0+dHhfYnVmZmVyW2kqNCArIDFdIHw9ICgxIDw8IDI1KTsgLyogYml0IDI1IGlzICJsYXN0IGRlc2NyaXB0b3IiICovCi0JCQorCiAJCS8qIFR4IERlc2NyMjogYWRkcmVzcyBvZiB0aGUgYnVmZmVyCiAJCSAgIHdlIHN0b3JlIHRoZSBidWZmZXIgYXQgdGhlIDJuZCBoYWxmIG9mIHRoZSBwYWdlICovCiAJCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgY2FyZC0+dHhfZG1hX2hhbmRsZTsKQEAgLTc0OCw3ICs3NDgsNyBAQAogYWN0aXZhdGVfcmVjZWl2ZXIgZW5hYmxlcyB0aGUgcmVjZWl2ZXIgb24gdGhlIGNhcmQuCiBCZWZvcmUgYmVpbmcgYWxsb3dlZCB0byBhY3RpdmUgdGhlIHJlY2VpdmVyLCB0aGUgcmVjZWl2ZXIKIG11c3QgYmUgY29tcGxldGVseSBkZS1hY3RpdmF0ZWQuIFRvIGFjaGlldmUgdGhpcywKLXRoaXMgY29kZSBhY3R1YWxseSBkaXNhYmxlcyB0aGUgcmVjZWl2ZXIgZmlyc3Q7IHRoZW4gaXQgd2FpdHMgZm9yIHRoZSAKK3RoaXMgY29kZSBhY3R1YWxseSBkaXNhYmxlcyB0aGUgcmVjZWl2ZXIgZmlyc3Q7IHRoZW4gaXQgd2FpdHMgZm9yIHRoZQogcmVjZWl2ZXIgdG8gYmVjb21lIGluYWN0aXZlLCB0aGVuIGl0IGFjdGl2YXRlcyB0aGUgcmVjZWl2ZXIgYW5kIHRoZW4KIGl0IHdhaXRzIGZvciB0aGUgcmVjZWl2ZXIgdG8gYmUgYWN0aXZlLgogCkBAIC03NjIsMTMgKzc2MiwxMyBAQAogCiAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjYpOwkvKiBPcGVyYXRpb24gbW9kZSAqLwotCQorCiAJLyogSWYgdGhlICJhY3RpdmUiIGJpdCBpcyBzZXQgYW5kIHRoZSByZWNlaXZlciBpcyBhbHJlYWR5CiAJICAgYWN0aXZlLCBubyBuZWVkIHRvIGRvIHRoZSBleHBlbnNpdmUgdGhpbmcgKi8KIAlpZiAoKHZhbCYyKSAmJiAocmVjZWl2ZV9hY3RpdmUoY2FyZCkpKQogCQlyZXR1cm47Ci0JCi0JCisKKwogCXZhbCA9IHZhbCAmIH4yOwkJLyogZGlzYWJsZSB0aGUgcmVjZWl2ZXIgKi8KIAlvdXRsKHZhbCwgY2FyZC0+aW9fcG9ydCArIENTUjYpOwogCkBAIC04MDUsNyArODA1LDcgQEAKIAogLyoKIGRlYWN0aXZhdGVfcmVjZWl2ZXIgZGlzYWJsZXMgdGhlIHJlY2VpdmVyIG9uIHRoZSBjYXJkLgotVG8gYWNoaWV2ZSB0aGlzIHRoaXMgY29kZSBkaXNhYmxlcyB0aGUgcmVjZWl2ZXIgZmlyc3Q7IAorVG8gYWNoaWV2ZSB0aGlzIHRoaXMgY29kZSBkaXNhYmxlcyB0aGUgcmVjZWl2ZXIgZmlyc3Q7CiB0aGVuIGl0IHdhaXRzIGZvciB0aGUgcmVjZWl2ZXIgdG8gYmVjb21lIGluYWN0aXZlLgogCiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCkBAIC04NDAsNyArODQwLDcgQEAKIGFjdGl2YXRlX3RyYW5zbWl0dGVyIGVuYWJsZXMgdGhlIHRyYW5zbWl0dGVyIG9uIHRoZSBjYXJkLgogQmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWN0aXZlIHRoZSB0cmFuc21pdHRlciwgdGhlIHRyYW5zbWl0dGVyCiBtdXN0IGJlIGNvbXBsZXRlbHkgZGUtYWN0aXZhdGVkLiBUbyBhY2hpZXZlIHRoaXMsCi10aGlzIGNvZGUgYWN0dWFsbHkgZGlzYWJsZXMgdGhlIHRyYW5zbWl0dGVyIGZpcnN0OyB0aGVuIGl0IHdhaXRzIGZvciB0aGUgCit0aGlzIGNvZGUgYWN0dWFsbHkgZGlzYWJsZXMgdGhlIHRyYW5zbWl0dGVyIGZpcnN0OyB0aGVuIGl0IHdhaXRzIGZvciB0aGUKIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBpbmFjdGl2ZSwgdGhlbiBpdCBhY3RpdmF0ZXMgdGhlIHRyYW5zbWl0dGVyIGFuZCB0aGVuCiBpdCB3YWl0cyBmb3IgdGhlIHRyYW5zbWl0dGVyIHRvIGJlIGFjdGl2ZSBhZ2Fpbi4KIApAQCAtODU2LDcgKzg1Niw3IEBACiAJdmFsID0gaW5sKGNhcmQtPmlvX3BvcnQgKyBDU1I2KTsJLyogT3BlcmF0aW9uIG1vZGUgKi8KIAogCS8qIElmIHRoZSAiYWN0aXZlIiBiaXQgaXMgc2V0IGFuZCB0aGUgcmVjZWl2ZXIgaXMgYWxyZWFkeQotCSAgIGFjdGl2ZSwgbm8gbmVlZCB0byBkbyB0aGUgZXhwZW5zaXZlIHRoaW5nICovCSAKKwkgICBhY3RpdmUsIG5vIG5lZWQgdG8gZG8gdGhlIGV4cGVuc2l2ZSB0aGluZyAqLwogCWlmICgodmFsJigxPDwxMykpICYmICh0cmFuc21pdF9hY3RpdmUoY2FyZCkpKQogCQlyZXR1cm47CiAKQEAgLTg5Niw3ICs4OTYsNyBAQAogCiAvKgogZGVhY3RpdmF0ZV90cmFuc21pdHRlciBkaXNhYmxlcyB0aGUgdHJhbnNtaXR0ZXIgb24gdGhlIGNhcmQuCi1UbyBhY2hpZXZlIHRoaXMgdGhpcyBjb2RlIGRpc2FibGVzIHRoZSB0cmFuc21pdHRlciBmaXJzdDsgCitUbyBhY2hpZXZlIHRoaXMgdGhpcyBjb2RlIGRpc2FibGVzIHRoZSB0cmFuc21pdHRlciBmaXJzdDsKIHRoZW4gaXQgd2FpdHMgZm9yIHRoZSB0cmFuc21pdHRlciB0byBiZWNvbWUgaW5hY3RpdmUuCiAKIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KQEAgLTk5MCw3ICs5OTAsNyBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJZW50ZXIoImVuYWJsZV9hbGxfaW50ZXJydXB0cyIpOwotCQorCiAJdmFsID0gMDsJCQkJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNyk7CiAKQEAgLTEwMzEsOCArMTAzMSw4IEBACiAJdW5zaWduZWQgaW50IHZhbDsKIAllbnRlcigiZW5hYmxlX3Byb21pc2MiKTsKIAotCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CQotCXZhbCA9IHZhbCB8ICgxIDw8IDYpOwkKKwl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjYpOworCXZhbCA9IHZhbCB8ICgxIDw8IDYpOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNik7CiAKIAlsZWF2ZSgiZW5hYmxlX3Byb21pc2MiKTsKQEAgLTEwNDIsNyArMTA0Miw3IEBACiAKIAogCi0vKiAKKy8qCiBsaW5rX3N0YXR1cygpIGNoZWNrcyB0aGUgdGhlIGxpbmtzIHN0YXR1cyBhbmQgd2lsbCByZXR1cm4gMCBmb3Igbm8gbGluaywgMTAgZm9yIDEwbWJpdCBsaW5rIGFuZCAxMDAgZm9yLi4gZ3Vlc3Mgd2hhdC4KIAogTXVzdCBiZSBjYWxsZWQgaW4gbG9ja2VkIHN0YXRlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZApAQCAtMTA1MSwxNSArMTA1MSwxNSBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJZW50ZXIoImxpbmtfc3RhdHVzIik7Ci0JCisKIAl2YWwgPSBpbmIoY2FyZC0+aW9fcG9ydCArIENTUjEyKTsKLQkKKwogCWlmICghKHZhbCYoMTw8MikpKSAgLyogYml0IDIgaXMgMCBmb3IgMTBtYml0IGxpbmssIDEgZm9yIG5vdCBhbiAxMG1iaXQgbGluayAqLwogCQlyZXR1cm4gMTA7CiAJaWYgKCEodmFsJigxPDwxKSkpICAvKiBiaXQgMSBpcyAwIGZvciAxMDBtYml0IGxpbmssIDEgZm9yIG5vdCBhbiAxMDBtYml0IGxpbmsgKi8KIAkJcmV0dXJuIDEwMDsKLQkJCi0JLyogSWYgd2UgZ2V0IGhlcmUgLT4gbm8gbGluayBhdCBhbGwgKi8JCisKKwkvKiBJZiB3ZSBnZXQgaGVyZSAtPiBubyBsaW5rIGF0IGFsbCAqLwogCiAJbGVhdmUoImxpbmtfc3RhdHVzIik7CiAJcmV0dXJuIDA7CkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogCiAvKgogICByZWFkX21hY19hZGRyZXNzKCkgcmVhZHMgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIE5JQyBhbmQgc3RvcmVzIGl0IGluIHRoZSAiZGV2IiBzdHJ1Y3R1cmUuCi0gCisKICAgVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgdGhlIHNwaW5sb2NrIGl0c2VsZiBhbmQgY2FuLCBhcyBhIHJlc3VsdCwgbm90IGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIGhlbHQuCiAgKi8KIHN0YXRpYyB2b2lkIHJlYWRfbWFjX2FkZHJlc3Moc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKQpAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIAlpbnQgaTsKIAogCWVudGVyKCJyZWFkX21hY19hZGRyZXNzIik7Ci0JCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAogCW91dGwoMSA8PCAxMiwgY2FyZC0+aW9fcG9ydCArIENTUjkpOwkvKiBlbmFibGUgYm9vdCByb20gYWNjZXNzICovCkBAIC0xMDk1LDcgKzEwOTUsNyBAQAogCQlvdXRsKGkgKyAzLCBjYXJkLT5pb19wb3J0ICsgQ1NSMTApOwogCQlkYXRhX2NvdW50ID0gaW5sKGNhcmQtPmlvX3BvcnQgKyBDU1I5KSAmIDB4ZmY7CiAJCWlmICgodHVwbGUgPT0gMHgyMikgJiYgKGRhdGFfaWQgPT0gMHgwNCkgJiYgKGRhdGFfY291bnQgPT0gMHgwNikpIHsKLQkJCS8qIAorCQkJLyoKIAkJCSAqIFRoaXMgaXMgaXQuICBXZSBoYXZlIHRoZSBkYXRhIHdlIHdhbnQuCiAJCQkgKi8KIAkJCWZvciAoaiA9IDA7IGogPCA2OyBqKyspIHsKQEAgLTExMzYsMTIgKzExMzYsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJb3V0bCgweDAwMDgsIGNhcmQtPmlvX3BvcnQgKyBDU1IxNSk7Ci0gICAgICAgIHVkZWxheSgyNSk7ICAKKyAgICAgICAgdWRlbGF5KDI1KTsKICAgICAgICAgb3V0bCgweGE4MDUwMDAwLCBjYXJkLT5pb19wb3J0ICsgQ1NSMTUpOwogICAgICAgICB1ZGVsYXkoMjUpOwogICAgICAgICBvdXRsKDB4YTAwZjAwMDAsIGNhcmQtPmlvX3BvcnQgKyBDU1IxNSk7CiAgICAgICAgIHVkZWxheSgyNSk7Ci0gICAgICAgIAorCiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGNhcmQtPmRldik7CkBAIC0xMTYzLDE1ICsxMTYzLDE1IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCi0JCisKIAllbmFibGVfbGlua19pbnRlcnJ1cHQoY2FyZCk7CiAJZW5hYmxlX3RyYW5zbWl0X2ludGVycnVwdChjYXJkKTsKIAllbmFibGVfcmVjZWl2ZV9pbnRlcnJ1cHQoY2FyZCk7CiAJZW5hYmxlX2NvbW1vbl9pbnRlcnJ1cHRzKGNhcmQpOwogCWVuYWJsZV9wcm9taXNjKGNhcmQpOwotCQorCiAJLyogVGhlIGNhcmQgY2FuIGhhdmUgcmVjZWl2ZWQgcGFja2V0cyBhbHJlYWR5LCByZWFkIHRoZW0gYXdheSBub3cgKi8KLQlmb3IgKGk9MDtpPE5VTURFU0NSSVBUT1JTO2krKykgCisJZm9yIChpPTA7aTxOVU1ERVNDUklQVE9SUztpKyspCiAJCWludmVzdGlnYXRlX3JlYWRfZGVzY3JpcHRvcihjYXJkLT5kZXYsY2FyZCxpLGJ1ZmZlcm9mZnNldHNbaV0pOwogCiAKQEAgLTExODUsMTUgKzExODUsMTUgQEAKIC8qIEJ1ZmZlcm9mZnNldCBpcyBpbiBCWVRFUyAqLwogc3RhdGljIHZvaWQgaW52ZXN0aWdhdGVfcmVhZF9kZXNjcmlwdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkLCBpbnQgZGVzY25yLCB1bnNpZ25lZCBpbnQgYnVmZmVyb2Zmc2V0KQogewotCQlpbnQgc3RhdHVzOwkJCi0JCQorCQlpbnQgc3RhdHVzOworCiAJCWVudGVyKCJpbnZlc3RpZ2F0ZV9yZWFkX2Rlc2NyaXB0b3IiKTsKIAkJc3RhdHVzID0gY2FyZC0+cnhfYnVmZmVyWzQqZGVzY25yXTsKLQkJCisKIAkJaWYgKChzdGF0dXMgPiAwKSkgewkvKiBwYWNrZXQgcmVjZWl2ZWQgKi8KLQkJCisKIAkJCS8qIFRPRE86IGRpc2NhcmQgZXJyb3IgcGFja2V0cyAqLwotCQkJCisKIAkJCXNob3J0IHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OwkvKiBtaW51cyA0LCB3ZSBkb24ndCB3YW50IHRoZSBDUkMgKi8KIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTEyMTYsNyArMTIxNiw3IEBACiAJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJY2FyZC0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJY2FyZC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKLQkJCQorCiAJCSAgICAgIG91dDoKIAkJCS8qIGdpdmUgdGhlIGJ1ZmZlciBiYWNrIHRvIHRoZSBjYXJkICovCiAJCQljYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdID0gIDB4ODAwMDAwMDA7CkBAIC0xMjM0LDkgKzEyMzQsOSBAQAogCQlpbnQgc3RhdHVzOwogCiAJCWVudGVyKCJpbnZlc3RpZ2F0ZV93cml0ZV9kZXNjcmlwdG9yIik7Ci0JCQorCiAJCXN0YXR1cyA9IGNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl07Ci0jaWYgMAkJCisjaWYgMAogCQlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CS8qIE1ham9yIGVycm9yICovCiAJCQlwcmludGsoS0VSTl9FUlIgIk1ham9yIHRyYW5zbWl0IGVycm9yIHN0YXR1cyAleCBcbiIsIHN0YXR1cyk7CiAJCQljYXJkLT50eF9idWZmZXJbNCpkZXNjbnJdID0gMDsKQEAgLTEyNTgsNyArMTI1OCw3IEBACiAJCX0KIAogCQlsZWF2ZSgiaW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvciIpOwotCQkKKwogfQogCiAKQEAgLTEyNzEsOCArMTI3MSw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgeGlyY29tX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnhpcmNvbV9vcHMpOwotfSAKK30KIAotbW9kdWxlX2luaXQoeGlyY29tX2luaXQpIAorbW9kdWxlX2luaXQoeGlyY29tX2luaXQpCiBtb2R1bGVfZXhpdCh4aXJjb21fZXhpdCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCBlZDFmODM3Li4yZWI2YjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtMTg5OSw2ICsxODk5LDEzIEBACiAKIAlpbnQgcGt0bGVuID0gc2tiLT5sZW47CiAKKyNpZmRlZiBWRUxPQ0lUWV9aRVJPX0NPUFlfU1VQUE9SVAorCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID4gNiAmJiBfX3NrYl9saW5lYXJpemUoc2tiKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwogCiAJaW5kZXggPSB2cHRyLT50ZF9jdXJyW3FudW1dOwpAQCAtMTkxNCw4ICsxOTIxLDYgQEAKIAkgKi8KIAlpZiAocGt0bGVuIDwgRVRIX1pMRU4pIHsKIAkJLyogQ2Fubm90IG9jY3VyIHVudGlsIFpDIHN1cHBvcnQgKi8KLQkJaWYoc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpKQotCQkJcmV0dXJuIDA7IAogCQlwa3RsZW4gPSBFVEhfWkxFTjsKIAkJbWVtY3B5KHRkaW5mby0+YnVmLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJbWVtc2V0KHRkaW5mby0+YnVmICsgc2tiLT5sZW4sIDAsIEVUSF9aTEVOIC0gc2tiLT5sZW4pOwpAQCAtMTkzMyw3ICsxOTM4LDYgQEAKIAkJaW50IG5mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJCXRkaW5mby0+c2tiID0gc2tiOwogCQlpZiAobmZyYWdzID4gNikgewotCQkJc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpOwogCQkJbWVtY3B5KHRkaW5mby0+YnVmLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJCXRkaW5mby0+c2tiX2RtYVswXSA9IHRkaW5mby0+YnVmX2RtYTsKIAkJCXRkX3B0ci0+dGRlc2MwLnBrdHNpemUgPSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggZDlhNzc0Yi4uZjFiMjY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTMwNyw3ICszMDcsNyBAQAogI2RlZmluZSBUWF9RVUVVRV9OTyAgICAgICAgIDQKIAogI2RlZmluZSBNQVhfSFdfTUlCX0NPVU5URVIgIDMyCi0jZGVmaW5lIFZFTE9DSVRZX01JTl9NVFUgICAgKDE1MTQtMTQpCisjZGVmaW5lIFZFTE9DSVRZX01JTl9NVFUgICAgKDY0KQogI2RlZmluZSBWRUxPQ0lUWV9NQVhfTVRVICAgICg5MDAwKQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IGViYThlNWMuLmY0ODVhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTUwLDEwICs1MCw2IEBACiBzdGF0aWMgaW50IHBjaV9jbG9ja19mcmVxID0gMzMwMDAwMDA7CiAjZGVmaW5lIENMT0NLX0JBU0UgcGNpX2Nsb2NrX2ZyZXEKIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0dPUkFNTwkweDEwQjUJLyogdXNlcyBQTFg6OTA1MCBJRCAtIHRoaXMgY2FyZAkqLwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSTIwMFNZTgkweDkwNTAJLyogZG9lc24ndCBoYXZlIGl0cyBvd24gSUQJKi8KLQotCiAvKgogICogICAgICBQTFggUENJOTA1MiBsb2NhbCBjb25maWd1cmF0aW9uIGFuZCBzaGFyZWQgcnVudGltZSByZWdpc3RlcnMuCiAgKiAgICAgIFRoaXMgc3RydWN0dXJlIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyA5MDUyIHJlZ2lzdGVycyAobWVtb3J5IG1hcHBlZCkuCkBAIC0yNjIsNyArMjU4LDcgQEAKIAlpbnQgaTsKIAljYXJkX3QgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlmb3IoaSA9IDA7IGkgPCAyOyBpKyspCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJaWYgKGNhcmQtPnBvcnRzW2ldLmNhcmQpIHsKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0X3RvX2RldigmY2FyZC0+cG9ydHNbaV0pOwogCQkJdW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpOwpAQCAtMzg1LDYgKzM4MSwxNSBAQAogCSAgICAgICAiICV1IFJYIHBhY2tldHMgcmluZ3NcbiIsIHJhbXNpemUgLyAxMDI0LCByYW1waHlzLAogCSAgICAgICBwZGV2LT5pcnEsIGNhcmQtPnR4X3JpbmdfYnVmZmVycywgY2FyZC0+cnhfcmluZ19idWZmZXJzKTsKIAorCWlmIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUExYXzkwNTApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEZXRlY3RlZCBQQ0kyMDBTWU4gY2FyZCB3aXRoIG9sZCAiCisJCSAgICAgICAiY29uZmlndXJhdGlvbiBkYXRhLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU2VlIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViLyIKKwkJICAgICAgICJsaW51eC91dGlscy9uZXQvaGRsYy9wY2kyMDBzeW4vPiBmb3IgdXBkYXRlLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiVGhlIGNhcmQgd2lsbCBzdG9wIHdvcmtpbmcgd2l0aCIKKwkJICAgICAgICIgZnV0dXJlIHZlcnNpb25zIG9mIExpbnV4IGlmIG5vdCB1cGRhdGVkLlxuIik7CisJfQorCiAJaWYgKGNhcmQtPnR4X3JpbmdfYnVmZmVycyA8IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwY2kyMDBzeW46IFJBTSB0ZXN0IGZhaWxlZFxuIik7CiAJCXBjaTIwMF9wY2lfcmVtb3ZlX29uZShwZGV2KTsKQEAgLTM5Niw3ICs0MDEsNyBAQAogCXdyaXRldyhyZWFkdyhwKSB8IDB4MDA0MCwgcCk7CiAKIAkvKiBBbGxvY2F0ZSBJUlEgKi8KLQlpZihyZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNjYV9pbnRyLCBTQV9TSElSUSwgZGV2bmFtZSwgY2FyZCkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBzY2FfaW50ciwgU0FfU0hJUlEsIGRldm5hbWUsIGNhcmQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjaTIwMHN5bjogY291bGQgbm90IGFsbG9jYXRlIElSUSVkLlxuIiwKIAkJICAgICAgIHBkZXYtPmlycSk7CiAJCXBjaTIwMF9wY2lfcmVtb3ZlX29uZShwZGV2KTsKQEAgLTQwNiw3ICs0MTEsNyBAQAogCiAJc2NhX2luaXQoY2FyZCwgMCk7CiAKLQlmb3IoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXBvcnRfdCAqcG9ydCA9ICZjYXJkLT5wb3J0c1tpXTsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnRfdG9fZGV2KHBvcnQpOwogCQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CkBAIC00MjUsNyArNDMwLDcgQEAKIAkJaGRsYy0+eG1pdCA9IHNjYV94bWl0OwogCQlwb3J0LT5zZXR0aW5ncy5jbG9ja190eXBlID0gQ0xPQ0tfRVhUOwogCQlwb3J0LT5jYXJkID0gY2FyZDsKLQkJaWYocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkgeworCQlpZiAocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJwY2kyMDBzeW46IHVuYWJsZSB0byByZWdpc3RlciBoZGxjICIKIAkJCSAgICAgICAiZGV2aWNlXG4iKTsKIAkJCXBvcnQtPmNhcmQgPSBOVUxMOwpAQCAtNDQ1LDggKzQ1MCwxMCBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2kyMDBfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0dPUkFNTywgUENJX0RFVklDRV9JRF9QQ0kyMDBTWU4sIFBDSV9BTllfSUQsCi0JICBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCisJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgUENJX1ZFTkRPUl9JRF9QTFgsCisJICBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLCAwLCAwLCAwIH0sCisJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgUENJX1ZFTkRPUl9JRF9QTFgsCisJICBQQ0lfREVWSUNFX0lEX1BMWF9QQ0kyMDBTWU4sIDAsIDAsIDAgfSwKIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGUwODc0Y2IuLjMwZWMyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMjM1LDcgKzIzNSwzNSBAQAogCSAgcHJvbWlzY3VvdXMgbW9kZSB2aWEgdGhlIFdpcmVsZXNzIFRvb2wncyBNb25pdG9yIG1vZGUuICBXaGlsZSBpbiB0aGlzCiAJICBtb2RlLCBubyBwYWNrZXRzIGNhbiBiZSBzZW50LgogCi1jb25maWcgSVBXX1FPUworY29uZmlnIElQVzIyMDBfUkFESU9UQVAKKwlib29sICJFbmFibGUgcmFkaW90YXAgZm9ybWF0IDgwMi4xMSByYXcgcGFja2V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJUFcyMjAwX01PTklUT1IKKworY29uZmlnIElQVzIyMDBfUFJPTUlTQ1VPVVMKKwlib29sICJFbmFibGUgY3JlYXRpb24gb2YgYSBSRiByYWRpb3RhcCBwcm9taXNjdW91cyBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBJUFcyMjAwX01PTklUT1IKKwlzZWxlY3QgSVBXMjIwMF9SQURJT1RBUAorCS0tLWhlbHAtLS0KKyAgICAgICAgICBFbmFibGVzIHRoZSBjcmVhdGlvbiBvZiBhIHNlY29uZCBpbnRlcmZhY2UgcHJlZml4ZWQgJ3J0YXAnLiAKKyAgICAgICAgICBUaGlzIHNlY29uZCBpbnRlcmZhY2Ugd2lsbCBwcm92aWRlIGV2ZXJ5IHJlY2VpdmVkIGluIHJhZGlvdGFwCisJICBmb3JtYXQuCisKKyAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBmb3IgcGVyZm9ybWluZyB3aXJlbGVzcyBuZXR3b3JrIGFuYWx5c2lzIHdoaWxlCisgICAgICAgICAgbWFpbnRhaW5pbmcgYW4gYWN0aXZlIGFzc29jaWF0aW9uLgorCisgICAgICAgICAgRXhhbXBsZSB1c2FnZToKKworICAgICAgICAgICAgJSBtb2Rwcm9iZSBpcHcyMjAwIHJ0YXBfaWZhY2U9MQorICAgICAgICAgICAgJSBpZmNvbmZpZyBydGFwMCB1cAorICAgICAgICAgICAgJSB0ZXRoZXJlYWwgLWkgcnRhcDAKKworICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSAncnRhcF9pZmFjZT0xJyBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIgdGhlbiAKKyAgICAgICAgICB0aGUgcnRhcCBpbnRlcmZhY2Ugd2lsbCBub3QgYmUgY3JlYXRlZCBhbmQgeW91IHdpbGwgbmVlZCB0byB0dXJuIAorICAgICAgICAgIGl0IG9uIHZpYSBzeXNmczoKKwkKKyAgICAgICAgICAgICUgZWNobyAxID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvaXB3MjIwMC8qL3J0YXBfaWZhY2UKKworY29uZmlnIElQVzIyMDBfUU9TCiAgICAgICAgIGJvb2wgIkVuYWJsZSBRb1Mgc3VwcG9ydCIKICAgICAgICAgZGVwZW5kcyBvbiBJUFcyMjAwICYmIEVYUEVSSU1FTlRBTAogCkBAIC01MDMsNiArNTMxLDIzIEBACiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+LiAgVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcHJpc201NC5rby4KIAorY29uZmlnIFVTQl9aRDEyMDEKKwl0cmlzdGF0ZSAiVVNCIFpEMTIwMSBiYXNlZCBXaXJlbGVzcyBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBORVRfUkFESU8KKwlzZWxlY3QgRldfTE9BREVSCisJLS0taGVscC0tLQorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIHdpcmVsZXNzIExBTiBhZGFwdGVycyBiYXNlZCBvbiB0aGUgWnlEQVMKKwkgIFpEMTIwMSBjaGlwLgorCisJICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLAorCSAgdHlwaWNhbGx5IG9uIHdsYW4wLgorCisJICBUaGUgemQxMjAxIGRldmljZSByZXF1aXJlcyBleHRlcm5hbCBmaXJtd2FyZSB0byBiZSBsb2FkZWQuCisJICBUaGlzIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vbGludXgtbGMxMDAwMjAuc291cmNlZm9yZ2UubmV0LworCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6ZDEyMDEuCisKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCBjODY3Nzk4Li41MTI2MDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtNDAsMyArNDAsNSBAQAogIyAxNi1iaXQgd2lyZWxlc3MgUENNQ0lBIGNsaWVudCBkcml2ZXJzCiBvYmotJChDT05GSUdfUENNQ0lBX1JBWUNTKQkrPSByYXlfY3Mubwogb2JqLSQoQ09ORklHX1BDTUNJQV9XTDM1MDEpCSs9IHdsMzUwMV9jcy5vCisKK29iai0kKENPTkZJR19VU0JfWkQxMjAxKQkrPSB6ZDEyMDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDAwNzY0ZGQuLjQwNjliNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgImFpcm8uaCIKIApAQCAtNDY3LDYgKzQ2OCw4IEBACiAjZGVmaW5lIFJJRF9FQ0hPVEVTVF9SRVNVTFRTIDB4RkY3MQogI2RlZmluZSBSSURfQlNTTElTVEZJUlNUIDB4RkY3MgogI2RlZmluZSBSSURfQlNTTElTVE5FWFQgIDB4RkY3MworI2RlZmluZSBSSURfV1BBX0JTU0xJU1RGSVJTVCAweEZGNzQKKyNkZWZpbmUgUklEX1dQQV9CU1NMSVNUTkVYVCAgMHhGRjc1CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1MTYgY21kOwpAQCAtNzM5LDYgKzc0MiwxNCBAQAogCXUxNiBleHRTb2Z0Q2FwOwogfSBDYXBhYmlsaXR5UmlkOwogCisKKy8qIE9ubHkgcHJlc2VudCBvbiBmaXJtd2FyZSA+PSA1LjMwLjE3ICovCit0eXBlZGVmIHN0cnVjdCB7CisgIHUxNiB1bmtub3duWzRdOworICB1OCBmaXhlZFsxMl07IC8qIFdMQU4gbWFuYWdlbWVudCBmcmFtZSAqLworICB1OCBpZXBbNjI0XTsKK30gQlNTTGlzdFJpZEV4dHJhOworCiB0eXBlZGVmIHN0cnVjdCB7CiAgIHUxNiBsZW47CiAgIHUxNiBpbmRleDsgLyogRmlyc3QgaXMgMCBhbmQgMHhmZmZmIG1lYW5zIGVuZCBvZiBsaXN0ICovCkBAIC03NjcsNiArNzc4LDkgQEAKICAgfSBmaDsKICAgdTE2IGRzQ2hhbm5lbDsKICAgdTE2IGF0aW1XaW5kb3c7CisKKyAgLyogT25seSBwcmVzZW50IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KKyAgQlNTTGlzdFJpZEV4dHJhIGV4dHJhOwogfSBCU1NMaXN0UmlkOwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xMTQwLDggKzExNTQsNiBAQAogCWNoYXIgZGVmaW5kZXg7IC8vIFVzZWQgd2l0aCBhdXRvIHdlcAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lbnRyeTsKICAgICAgICAgc3BpbmxvY2tfdCBhdXhfbG9jazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSNkZWZpbmUgRkxBR19QUk9NSVNDCTgJLyogSUZGX1BST01JU0MgMHgxMDAgLSBpbmNsdWRlL2xpbnV4L2lmLmggKi8KICNkZWZpbmUgRkxBR19SQURJT19PRkYJMAkvKiBVc2VyIGRpc2FibGluZyBvZiBNQUMgKi8KICNkZWZpbmUgRkxBR19SQURJT19ET1dOCTEJLyogaWZ1cC9pZmRvd24gZGlzYWJsaW5nIG9mIE1BQyAqLwogI2RlZmluZSBGTEFHX1JBRElPX01BU0sgMHgwMwpAQCAtMTE1MSw2ICsxMTYzLDcgQEAKICNkZWZpbmUgRkxBR19VUERBVEVfTVVMVEkgNQogI2RlZmluZSBGTEFHX1VQREFURV9VTkkgNgogI2RlZmluZSBGTEFHXzgwMl8xMQk3CisjZGVmaW5lIEZMQUdfUFJPTUlTQwk4CS8qIElGRl9QUk9NSVNDIDB4MTAwIC0gaW5jbHVkZS9saW51eC9pZi5oICovCiAjZGVmaW5lIEZMQUdfUEVORElOR19YTUlUIDkKICNkZWZpbmUgRkxBR19QRU5ESU5HX1hNSVQxMSAxMAogI2RlZmluZSBGTEFHX01QSQkxMQpAQCAtMTE1OCwxNyArMTE3MSwxOSBAQAogI2RlZmluZSBGTEFHX0NPTU1JVAkxMwogI2RlZmluZSBGTEFHX1JFU0VUCTE0CiAjZGVmaW5lIEZMQUdfRkxBU0hJTkcJMTUKLSNkZWZpbmUgSk9CX01BU0sJMHgyZmYwMDAwCi0jZGVmaW5lIEpPQl9ESUUJCTE2Ci0jZGVmaW5lIEpPQl9YTUlUCTE3Ci0jZGVmaW5lIEpPQl9YTUlUMTEJMTgKLSNkZWZpbmUgSk9CX1NUQVRTCTE5Ci0jZGVmaW5lIEpPQl9QUk9NSVNDCTIwCi0jZGVmaW5lIEpPQl9NSUMJCTIxCi0jZGVmaW5lIEpPQl9FVkVOVAkyMgotI2RlZmluZSBKT0JfQVVUT1dFUAkyMwotI2RlZmluZSBKT0JfV1NUQVRTCTI0Ci0jZGVmaW5lIEpPQl9TQ0FOX1JFU1VMVFMgIDI1CisjZGVmaW5lIEZMQUdfV1BBX0NBUEFCTEUJMTYKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2RlZmluZSBKT0JfRElFCTAKKyNkZWZpbmUgSk9CX1hNSVQJMQorI2RlZmluZSBKT0JfWE1JVDExCTIKKyNkZWZpbmUgSk9CX1NUQVRTCTMKKyNkZWZpbmUgSk9CX1BST01JU0MJNAorI2RlZmluZSBKT0JfTUlDCTUKKyNkZWZpbmUgSk9CX0VWRU5UCTYKKyNkZWZpbmUgSk9CX0FVVE9XRVAJNworI2RlZmluZSBKT0JfV1NUQVRTCTgKKyNkZWZpbmUgSk9CX1NDQU5fUkVTVUxUUyAgOQorCXVuc2lnbmVkIGxvbmcgam9iczsKIAlpbnQgKCpiYXBfcmVhZCkoc3RydWN0IGFpcm9faW5mbyosIHUxNiAqcHUxNkRzdCwgaW50IGJ5dGVsZW4sCiAJCQlpbnQgd2hpY2hiYXApOwogCXVuc2lnbmVkIHNob3J0ICpmbGFzaDsKQEAgLTEyMDgsNiArMTIyMywxMSBAQAogI2RlZmluZQlQQ0lfU0hBUkVEX0xFTgkJMipNUElfTUFYX0ZJRFMqUEtUU0laRStSSURTSVpFCiAJY2hhcgkJCXByb2NfbmFtZVtJRk5BTVNJWl07CiAKKwkvKiBXUEEtcmVsYXRlZCBzdHVmZiAqLworCXVuc2lnbmVkIGludCBic3NMaXN0Rmlyc3Q7CisJdW5zaWduZWQgaW50IGJzc0xpc3ROZXh0OworCXVuc2lnbmVkIGludCBic3NMaXN0UmlkTGVuOworCiAJc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2ZyZWVfbGlzdDsKIAlCU1NMaXN0RWxlbWVudCAqbmV0d29ya3M7CkBAIC0xMjY0LDcgKzEyODQsNyBAQAogewogCU1JQ1JpZCBtaWNfcmlkOwogCi0JY2xlYXJfYml0KEpPQl9NSUMsICZhaS0+ZmxhZ3MpOworCWNsZWFyX2JpdChKT0JfTUlDLCAmYWktPmpvYnMpOwogCVBDNDUwMF9yZWFkcmlkKGFpLCBSSURfTUlDLCAmbWljX3JpZCwgc2l6ZW9mKG1pY19yaWQpLCAwKTsKIAl1cCgmYWktPnNlbSk7CiAKQEAgLTE3MDUsMjQgKzE3MjUsMjQgQEAKIHN0YXRpYyBpbnQgcmVhZEJTU0xpc3RSaWQoc3RydWN0IGFpcm9faW5mbyAqYWksIGludCBmaXJzdCwKIAkJICAgICAgQlNTTGlzdFJpZCAqbGlzdCkgewogCWludCByYzsKLQkJCUNtZCBjbWQ7Ci0JCQlSZXNwIHJzcDsKKwlDbWQgY21kOworCVJlc3AgcnNwOwogCiAJaWYgKGZpcnN0ID09IDEpIHsKLQkJCWlmIChhaS0+ZmxhZ3MgJiBGTEFHX1JBRElPX01BU0spIHJldHVybiAtRU5FVERPV047Ci0JCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwotCQkJY21kLmNtZD1DTURfTElTVEJTUzsKLQkJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmFpLT5zZW0pKQotCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCQlpc3N1ZWNvbW1hbmQoYWksICZjbWQsICZyc3ApOwotCQkJdXAoJmFpLT5zZW0pOwotCQkJLyogTGV0IHRoZSBjb21tYW5kIHRha2UgZWZmZWN0ICovCi0JCQlhaS0+dGFzayA9IGN1cnJlbnQ7Ci0JCQlzc2xlZXAoMyk7Ci0JCQlhaS0+dGFzayA9IE5VTEw7Ci0JCX0KLQlyYyA9IFBDNDUwMF9yZWFkcmlkKGFpLCBmaXJzdCA/IFJJRF9CU1NMSVNURklSU1QgOiBSSURfQlNTTElTVE5FWFQsCi0JCQkgICAgbGlzdCwgc2l6ZW9mKCpsaXN0KSwgMSk7CisJCWlmIChhaS0+ZmxhZ3MgJiBGTEFHX1JBRElPX01BU0spIHJldHVybiAtRU5FVERPV047CisJCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJCWNtZC5jbWQ9Q01EX0xJU1RCU1M7CisJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmFpLT5zZW0pKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJaXNzdWVjb21tYW5kKGFpLCAmY21kLCAmcnNwKTsKKwkJdXAoJmFpLT5zZW0pOworCQkvKiBMZXQgdGhlIGNvbW1hbmQgdGFrZSBlZmZlY3QgKi8KKwkJYWktPnRhc2sgPSBjdXJyZW50OworCQlzc2xlZXAoMyk7CisJCWFpLT50YXNrID0gTlVMTDsKKwl9CisJcmMgPSBQQzQ1MDBfcmVhZHJpZChhaSwgZmlyc3QgPyBhaS0+YnNzTGlzdEZpcnN0IDogYWktPmJzc0xpc3ROZXh0LAorCQkJICAgIGxpc3QsIGFpLT5ic3NMaXN0UmlkTGVuLCAxKTsKIAogCWxpc3QtPmxlbiA9IGxlMTZfdG9fY3B1KGxpc3QtPmxlbik7CiAJbGlzdC0+aW5kZXggPSBsZTE2X3RvX2NwdShsaXN0LT5pbmRleCk7CkBAIC0yMTEyLDcgKzIxMzIsNyBAQAogCWludCBmaWQgPSBwcml2LT54bWl0LmZpZDsKIAl1MzIgKmZpZHMgPSBwcml2LT5maWRzOwogCi0JY2xlYXJfYml0KEpPQl9YTUlULCAmcHJpdi0+ZmxhZ3MpOworCWNsZWFyX2JpdChKT0JfWE1JVCwgJnByaXYtPmpvYnMpOwogCWNsZWFyX2JpdChGTEFHX1BFTkRJTkdfWE1JVCwgJnByaXYtPmZsYWdzKTsKIAlzdGF0dXMgPSB0cmFuc21pdF84MDJfM19wYWNrZXQgKHByaXYsIGZpZHNbZmlkXSwgc2tiLT5kYXRhKTsKIAl1cCgmcHJpdi0+c2VtKTsKQEAgLTIxNjIsNyArMjE4Miw3IEBACiAJaWYgKGRvd25fdHJ5bG9jaygmcHJpdi0+c2VtKSAhPSAwKSB7CiAJCXNldF9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZwcml2LT5mbGFncyk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJc2V0X2JpdChKT0JfWE1JVCwgJnByaXYtPmZsYWdzKTsKKwkJc2V0X2JpdChKT0JfWE1JVCwgJnByaXYtPmpvYnMpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPnRocl93YWl0KTsKIAl9IGVsc2UKIAkJYWlyb19lbmRfeG1pdChkZXYpOwpAQCAtMjE3Nyw3ICsyMTk3LDcgQEAKIAlpbnQgZmlkID0gcHJpdi0+eG1pdDExLmZpZDsKIAl1MzIgKmZpZHMgPSBwcml2LT5maWRzOwogCi0JY2xlYXJfYml0KEpPQl9YTUlUMTEsICZwcml2LT5mbGFncyk7CisJY2xlYXJfYml0KEpPQl9YTUlUMTEsICZwcml2LT5qb2JzKTsKIAljbGVhcl9iaXQoRkxBR19QRU5ESU5HX1hNSVQxMSwgJnByaXYtPmZsYWdzKTsKIAlzdGF0dXMgPSB0cmFuc21pdF84MDJfMTFfcGFja2V0IChwcml2LCBmaWRzW2ZpZF0sIHNrYi0+ZGF0YSk7CiAJdXAoJnByaXYtPnNlbSk7CkBAIC0yMjMzLDcgKzIyNTMsNyBAQAogCWlmIChkb3duX3RyeWxvY2soJnByaXYtPnNlbSkgIT0gMCkgewogCQlzZXRfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZwcml2LT5mbGFncyk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJc2V0X2JpdChKT0JfWE1JVDExLCAmcHJpdi0+ZmxhZ3MpOworCQlzZXRfYml0KEpPQl9YTUlUMTEsICZwcml2LT5qb2JzKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT50aHJfd2FpdCk7CiAJfSBlbHNlCiAJCWFpcm9fZW5kX3htaXQxMShkZXYpOwpAQCAtMjI0NCw3ICsyMjY0LDcgQEAKIAlTdGF0c1JpZCBzdGF0c19yaWQ7CiAJdTMyICp2YWxzID0gc3RhdHNfcmlkLnZhbHM7CiAKLQljbGVhcl9iaXQoSk9CX1NUQVRTLCAmYWktPmZsYWdzKTsKKwljbGVhcl9iaXQoSk9CX1NUQVRTLCAmYWktPmpvYnMpOwogCWlmIChhaS0+cG93ZXIuZXZlbnQpIHsKIAkJdXAoJmFpLT5zZW0pOwogCQlyZXR1cm47CkBAIC0yMjcyLDEwICsyMjkyLDEwIEBACiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSAgZGV2LT5wcml2OwogCi0JaWYgKCF0ZXN0X2JpdChKT0JfU1RBVFMsICZsb2NhbC0+ZmxhZ3MpKSB7CisJaWYgKCF0ZXN0X2JpdChKT0JfU1RBVFMsICZsb2NhbC0+am9icykpIHsKIAkJLyogR2V0IHN0YXRzIG91dCBvZiB0aGUgY2FyZCBpZiBhdmFpbGFibGUgKi8KIAkJaWYgKGRvd25fdHJ5bG9jaygmbG9jYWwtPnNlbSkgIT0gMCkgewotCQkJc2V0X2JpdChKT0JfU1RBVFMsICZsb2NhbC0+ZmxhZ3MpOworCQkJc2V0X2JpdChKT0JfU1RBVFMsICZsb2NhbC0+am9icyk7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxvY2FsLT50aHJfd2FpdCk7CiAJCX0gZWxzZQogCQkJYWlyb19yZWFkX3N0YXRzKGxvY2FsKTsKQEAgLTIyOTAsNyArMjMxMCw3IEBACiAKIAltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWNtZC5jbWQ9Q01EX1NFVE1PREU7Ci0JY2xlYXJfYml0KEpPQl9QUk9NSVNDLCAmYWktPmZsYWdzKTsKKwljbGVhcl9iaXQoSk9CX1BST01JU0MsICZhaS0+am9icyk7CiAJY21kLnBhcm0wPShhaS0+ZmxhZ3MmSUZGX1BST01JU0MpID8gUFJPTUlTQyA6IE5PUFJPTUlTQzsKIAlpc3N1ZWNvbW1hbmQoYWksICZjbWQsICZyc3ApOwogCXVwKCZhaS0+c2VtKTsKQEAgLTIzMDIsNyArMjMyMiw3IEBACiAJaWYgKChkZXYtPmZsYWdzIF4gYWktPmZsYWdzKSAmIElGRl9QUk9NSVNDKSB7CiAJCWNoYW5nZV9iaXQoRkxBR19QUk9NSVNDLCAmYWktPmZsYWdzKTsKIAkJaWYgKGRvd25fdHJ5bG9jaygmYWktPnNlbSkgIT0gMCkgewotCQkJc2V0X2JpdChKT0JfUFJPTUlTQywgJmFpLT5mbGFncyk7CisJCQlzZXRfYml0KEpPQl9QUk9NSVNDLCAmYWktPmpvYnMpOwogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhaS0+dGhyX3dhaXQpOwogCQl9IGVsc2UKIAkJCWFpcm9fc2V0X3Byb21pc2MoYWkpOwpAQCAtMjM4MCw3ICsyNDAwLDcgQEAKIAkJfQogCQljbGVhcl9iaXQoRkxBR19SRUdJU1RFUkVELCAmYWktPmZsYWdzKTsKIAl9Ci0Jc2V0X2JpdChKT0JfRElFLCAmYWktPmZsYWdzKTsKKwlzZXRfYml0KEpPQl9ESUUsICZhaS0+am9icyk7CiAJa2lsbF9wcm9jKGFpLT50aHJfcGlkLCBTSUdURVJNLCAxKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhaS0+dGhyX2V4aXRlZCk7CiAKQEAgLTI3MDEsMTQgKzI3MjEsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBNQVhfTkVUV09SS19DT1VOVAk2NAorI2RlZmluZSBBSVJPX01BWF9ORVRXT1JLX0NPVU5UCTY0CiBzdGF0aWMgaW50IGFpcm9fbmV0d29ya3NfYWxsb2NhdGUoc3RydWN0IGFpcm9faW5mbyAqYWkpCiB7CiAJaWYgKGFpLT5uZXR3b3JrcykKIAkJcmV0dXJuIDA7CiAKIAlhaS0+bmV0d29ya3MgPQotCSAgICBremFsbG9jKE1BWF9ORVRXT1JLX0NPVU5UICogc2l6ZW9mKEJTU0xpc3RFbGVtZW50KSwKKwkgICAga3phbGxvYyhBSVJPX01BWF9ORVRXT1JLX0NPVU5UICogc2l6ZW9mKEJTU0xpc3RFbGVtZW50KSwKIAkJICAgIEdGUF9LRVJORUwpOwogCWlmICghYWktPm5ldHdvcmtzKSB7CiAJCWFpcm9fcHJpbnRfd2FybihhaS0+ZGV2LT5uYW1lLCAiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGJlYWNvbnMiKTsKQEAgLTI3MzIsMTEgKzI3NTIsMzMgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZhaS0+bmV0d29ya19mcmVlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZhaS0+bmV0d29ya19saXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX05FVFdPUktfQ09VTlQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQUlST19NQVhfTkVUV09SS19DT1VOVDsgaSsrKQogCQlsaXN0X2FkZF90YWlsKCZhaS0+bmV0d29ya3NbaV0ubGlzdCwKIAkJCSAgICAgICZhaS0+bmV0d29ya19mcmVlX2xpc3QpOwogfQogCitzdGF0aWMgaW50IGFpcm9fdGVzdF93cGFfY2FwYWJsZShzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwlpbnQgc3RhdHVzOworCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsKKwljb25zdCBjaGFyICpuYW1lID0gYWktPmRldi0+bmFtZTsKKworCXN0YXR1cyA9IHJlYWRDYXBhYmlsaXR5UmlkKGFpLCAmY2FwX3JpZCwgMSk7CisJaWYgKHN0YXR1cyAhPSBTVUNDRVNTKSByZXR1cm4gMDsKKworCS8qIE9ubHkgZmlybXdhcmUgdmVyc2lvbnMgNS4zMC4xNyBvciBiZXR0ZXIgY2FuIGRvIFdQQSAqLworCWlmICgoY2FwX3JpZC5zb2Z0VmVyID4gMHg1MzApCisJICB8fCAoKGNhcF9yaWQuc29mdFZlciA9PSAweDUzMCkgJiYgKGNhcF9yaWQuc29mdFN1YlZlciA+PSAxNykpKSB7CisJCWFpcm9fcHJpbnRfaW5mbyhuYW1lLCAiV1BBIGlzIHN1cHBvcnRlZC4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogTm8gV1BBIHN1cHBvcnQgKi8KKwlhaXJvX3ByaW50X2luZm8obmFtZSwgIldQQSB1bnN1cHBvcnRlZCAob25seSBmaXJtd2FyZSB2ZXJzaW9ucyA1LjMwLjE3IgorCQkiIGFuZCBncmVhdGVyIHN1cHBvcnQgV1BBLiAgRGV0ZWN0ZWQgJXMpIiwgY2FwX3JpZC5wcm9kVmVyKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpfaW5pdF9haXJvX2NhcmQoIHVuc2lnbmVkIHNob3J0IGlycSwgaW50IHBvcnQsCiAJCQkJCSAgIGludCBpc19wY21jaWEsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJCSAgIHN0cnVjdCBkZXZpY2UgKmRtZGV2ICkKQEAgLTI3NTksNiArMjgwMSw3IEBACiAJYWkgPSBkZXYtPnByaXY7CiAJYWktPndpZmlkZXYgPSBOVUxMOwogCWFpLT5mbGFncyA9IDA7CisJYWktPmpvYnMgPSAwOwogCWFpLT5kZXYgPSBkZXY7CiAJaWYgKHBjaSAmJiAocGNpLT5kZXZpY2UgPT0gMHg1MDAwIHx8IHBjaS0+ZGV2aWNlID09IDB4YTUwNCkpIHsKIAkJYWlyb19wcmludF9kYmcoZGV2LT5uYW1lLCAiRm91bmQgYW4gTVBJMzUwIGNhcmQiKTsKQEAgLTI4MzgsNiArMjg4MSwxOCBAQAogCQlzZXRfYml0KEZMQUdfRkxBU0hJTkcsICZhaS0+ZmxhZ3MpOwogCX0KIAorCS8qIFRlc3QgZm9yIFdQQSBzdXBwb3J0ICovCisJaWYgKGFpcm9fdGVzdF93cGFfY2FwYWJsZShhaSkpIHsKKwkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOworCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOworCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKKwl9IGVsc2UgeworCQlhaS0+YnNzTGlzdEZpcnN0ID0gUklEX0JTU0xJU1RGSVJTVDsKKwkJYWktPmJzc0xpc3ROZXh0ID0gUklEX0JTU0xJU1RORVhUOworCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKSAtIHNpemVvZihCU1NMaXN0UmlkRXh0cmEpOworCX0KKwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKSB7CiAJCWFpcm9fcHJpbnRfZXJyKGRldi0+bmFtZSwgIkNvdWxkbid0IHJlZ2lzdGVyX25ldGRldiIpOwpAQCAtMjg3NSw3ICsyOTMwLDcgQEAKIGVycl9vdXRfdW5saW5rOgogCWRlbF9haXJvX2RldihkZXYpOwogZXJyX291dF90aHI6Ci0Jc2V0X2JpdChKT0JfRElFLCAmYWktPmZsYWdzKTsKKwlzZXRfYml0KEpPQl9ESUUsICZhaS0+am9icyk7CiAJa2lsbF9wcm9jKGFpLT50aHJfcGlkLCBTSUdURVJNLCAxKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhaS0+dGhyX2V4aXRlZCk7CiBlcnJfb3V0X2ZyZWU6CkBAIC0yOTMzLDcgKzI5ODgsNyBAQAogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAlTdGF0dXNSaWQgc3RhdHVzX3JpZDsKIAotCWNsZWFyX2JpdChKT0JfRVZFTlQsICZhaS0+ZmxhZ3MpOworCWNsZWFyX2JpdChKT0JfRVZFTlQsICZhaS0+am9icyk7CiAJUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9TVEFUVVMsICZzdGF0dXNfcmlkLCBzaXplb2Yoc3RhdHVzX3JpZCksIDApOwogCXVwKCZhaS0+c2VtKTsKIAl3cnF1LmRhdGEubGVuZ3RoID0gMDsKQEAgLTI5NDcsNyArMzAwMiw3IEBACiAKIHN0YXRpYyB2b2lkIGFpcm9fcHJvY2Vzc19zY2FuX3Jlc3VsdHMgKHN0cnVjdCBhaXJvX2luZm8gKmFpKSB7CiAJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwotCUJTU0xpc3RSaWQgQlNTTGlzdDsKKwlCU1NMaXN0UmlkIGJzczsKIAlpbnQgcmM7CiAJQlNTTGlzdEVsZW1lbnQgKiBsb29wX25ldDsKIAlCU1NMaXN0RWxlbWVudCAqIHRtcF9uZXQ7CkBAIC0yOTYwLDE1ICszMDE1LDE1IEBACiAJfQogCiAJLyogVHJ5IHRvIHJlYWQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBzY2FuIHJlc3VsdCAqLwotCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9CU1NMSVNURklSU1QsICZCU1NMaXN0LCBzaXplb2YoQlNTTGlzdCksIDApOwotCWlmKChyYykgfHwgKEJTU0xpc3QuaW5kZXggPT0gMHhmZmZmKSkgeworCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIGFpLT5ic3NMaXN0Rmlyc3QsICZic3MsIGFpLT5ic3NMaXN0UmlkTGVuLCAwKTsKKwlpZigocmMpIHx8IChic3MuaW5kZXggPT0gMHhmZmZmKSkgewogCQkvKiBObyBzY2FuIHJlc3VsdHMgKi8KIAkJZ290byBvdXQ7CiAJfQogCiAJLyogUmVhZCBhbmQgcGFyc2UgYWxsIGVudHJpZXMgKi8KIAl0bXBfbmV0ID0gTlVMTDsKLQl3aGlsZSgoIXJjKSAmJiAoQlNTTGlzdC5pbmRleCAhPSAweGZmZmYpKSB7CisJd2hpbGUoKCFyYykgJiYgKGJzcy5pbmRleCAhPSAweGZmZmYpKSB7CiAJCS8qIEdyYWIgYSBuZXR3b3JrIG9mZiB0aGUgZnJlZSBsaXN0ICovCiAJCWlmICghbGlzdF9lbXB0eSgmYWktPm5ldHdvcmtfZnJlZV9saXN0KSkgewogCQkJdG1wX25ldCA9IGxpc3RfZW50cnkoYWktPm5ldHdvcmtfZnJlZV9saXN0Lm5leHQsCkBAIC0yOTc3LDE5ICszMDMyLDE5IEBACiAJCX0KIAogCQlpZiAodG1wX25ldCAhPSBOVUxMKSB7Ci0JCQltZW1jcHkodG1wX25ldCwgJkJTU0xpc3QsIHNpemVvZih0bXBfbmV0LT5ic3MpKTsKKwkJCW1lbWNweSh0bXBfbmV0LCAmYnNzLCBzaXplb2YodG1wX25ldC0+YnNzKSk7CiAJCQlsaXN0X2FkZF90YWlsKCZ0bXBfbmV0LT5saXN0LCAmYWktPm5ldHdvcmtfbGlzdCk7CiAJCQl0bXBfbmV0ID0gTlVMTDsKIAkJfQogCiAJCS8qIFJlYWQgbmV4dCBlbnRyeSAqLwotCQlyYyA9IFBDNDUwMF9yZWFkcmlkKGFpLCBSSURfQlNTTElTVE5FWFQsCi0JCQkJICAgICZCU1NMaXN0LCBzaXplb2YoQlNTTGlzdCksIDApOworCQlyYyA9IFBDNDUwMF9yZWFkcmlkKGFpLCBhaS0+YnNzTGlzdE5leHQsCisJCQkJICAgICZic3MsIGFpLT5ic3NMaXN0UmlkTGVuLCAwKTsKIAl9CiAKIG91dDoKIAlhaS0+c2Nhbl90aW1lb3V0ID0gMDsKLQljbGVhcl9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFpLT5mbGFncyk7CisJY2xlYXJfYml0KEpPQl9TQ0FOX1JFU1VMVFMsICZhaS0+am9icyk7CiAJdXAoJmFpLT5zZW0pOwogCiAJLyogU2VuZCBhbiBlbXB0eSBldmVudCB0byB1c2VyIHNwYWNlLgpAQCAtMzAxOSwxMCArMzA3NCwxMCBAQAogCQkvKiBtYWtlIHN3c3VzcCBoYXBweSB3aXRoIG91ciB0aHJlYWQgKi8KIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCi0JCWlmICh0ZXN0X2JpdChKT0JfRElFLCAmYWktPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KEpPQl9ESUUsICZhaS0+am9icykpCiAJCQlicmVhazsKIAotCQlpZiAoYWktPmZsYWdzICYgSk9CX01BU0spIHsKKwkJaWYgKGFpLT5qb2JzKSB7CiAJCQlsb2NrZWQgPSBkb3duX2ludGVycnVwdGlibGUoJmFpLT5zZW0pOwogCQl9IGVsc2UgewogCQkJd2FpdF9xdWV1ZV90IHdhaXQ7CkBAIC0zMDMxLDE2ICszMDg2LDE2IEBACiAJCQlhZGRfd2FpdF9xdWV1ZSgmYWktPnRocl93YWl0LCAmd2FpdCk7CiAJCQlmb3IgKDs7KSB7CiAJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlpZiAoYWktPmZsYWdzICYgSk9CX01BU0spCisJCQkJaWYgKGFpLT5qb2JzKQogCQkJCQlicmVhazsKIAkJCQlpZiAoYWktPmV4cGlyZXMgfHwgYWktPnNjYW5fdGltZW91dCkgewogCQkJCQlpZiAoYWktPnNjYW5fdGltZW91dCAmJgogCQkJCQkJCXRpbWVfYWZ0ZXJfZXEoamlmZmllcyxhaS0+c2Nhbl90aW1lb3V0KSl7Ci0JCQkJCQlzZXRfYml0KEpPQl9TQ0FOX1JFU1VMVFMsJmFpLT5mbGFncyk7CisJCQkJCQlzZXRfYml0KEpPQl9TQ0FOX1JFU1VMVFMsICZhaS0+am9icyk7CiAJCQkJCQlicmVhazsKIAkJCQkJfSBlbHNlIGlmIChhaS0+ZXhwaXJlcyAmJgogCQkJCQkJCXRpbWVfYWZ0ZXJfZXEoamlmZmllcyxhaS0+ZXhwaXJlcykpewotCQkJCQkJc2V0X2JpdChKT0JfQVVUT1dFUCwmYWktPmZsYWdzKTsKKwkJCQkJCXNldF9iaXQoSk9CX0FVVE9XRVAsICZhaS0+am9icyk7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0zMDY5LDcgKzMxMjQsNyBAQAogCQlpZiAobG9ja2VkKQogCQkJY29udGludWU7CiAKLQkJaWYgKHRlc3RfYml0KEpPQl9ESUUsICZhaS0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChKT0JfRElFLCAmYWktPmpvYnMpKSB7CiAJCQl1cCgmYWktPnNlbSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMzA3OSwyMyArMzEzNCwyMyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAodGVzdF9iaXQoSk9CX1hNSVQsICZhaS0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoSk9CX1hNSVQsICZhaS0+am9icykpCiAJCQlhaXJvX2VuZF94bWl0KGRldik7Ci0JCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9YTUlUMTEsICZhaS0+ZmxhZ3MpKQorCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfWE1JVDExLCAmYWktPmpvYnMpKQogCQkJYWlyb19lbmRfeG1pdDExKGRldik7Ci0JCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9TVEFUUywgJmFpLT5mbGFncykpCisJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9TVEFUUywgJmFpLT5qb2JzKSkKIAkJCWFpcm9fcmVhZF9zdGF0cyhhaSk7Ci0JCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9XU1RBVFMsICZhaS0+ZmxhZ3MpKQorCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfV1NUQVRTLCAmYWktPmpvYnMpKQogCQkJYWlyb19yZWFkX3dpcmVsZXNzX3N0YXRzKGFpKTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1BST01JU0MsICZhaS0+ZmxhZ3MpKQorCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfUFJPTUlTQywgJmFpLT5qb2JzKSkKIAkJCWFpcm9fc2V0X3Byb21pc2MoYWkpOwotCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfTUlDLCAmYWktPmZsYWdzKSkKKwkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX01JQywgJmFpLT5qb2JzKSkKIAkJCW1pY2luaXQoYWkpOwotCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfRVZFTlQsICZhaS0+ZmxhZ3MpKQorCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfRVZFTlQsICZhaS0+am9icykpCiAJCQlhaXJvX3NlbmRfZXZlbnQoZGV2KTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX0FVVE9XRVAsICZhaS0+ZmxhZ3MpKQorCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfQVVUT1dFUCwgJmFpLT5qb2JzKSkKIAkJCXRpbWVyX2Z1bmMoZGV2KTsKLQkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFpLT5mbGFncykpCisJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9TQ0FOX1JFU1VMVFMsICZhaS0+am9icykpCiAJCQlhaXJvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKGFpKTsKIAkJZWxzZSAgLyogU2hvdWxkbid0IGdldCBoZXJlLCBidXQgd2UgbWFrZSBzdXJlIHRvIHVubG9jayAqLwogCQkJdXAoJmFpLT5zZW0pOwpAQCAtMzEzMyw3ICszMTg4LDcgQEAKIAkJaWYgKCBzdGF0dXMgJiBFVl9NSUMgKSB7CiAJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX01JQyApOwogCQkJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJc2V0X2JpdChKT0JfTUlDLCAmYXByaXYtPmZsYWdzKTsKKwkJCQlzZXRfYml0KEpPQl9NSUMsICZhcHJpdi0+am9icyk7CiAJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhcHJpdi0+dGhyX3dhaXQpOwogCQkJfQogCQl9CkBAIC0zMTg3LDcgKzMyNDIsNyBAQAogCQkJCXNldF9iaXQoRkxBR19VUERBVEVfTVVMVEksICZhcHJpdi0+ZmxhZ3MpOwogCiAJCQkJaWYgKGRvd25fdHJ5bG9jaygmYXByaXYtPnNlbSkgIT0gMCkgewotCQkJCQlzZXRfYml0KEpPQl9FVkVOVCwgJmFwcml2LT5mbGFncyk7CisJCQkJCXNldF9iaXQoSk9CX0VWRU5ULCAmYXByaXYtPmpvYnMpOwogCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7CiAJCQkJfSBlbHNlCiAJCQkJCWFpcm9fc2VuZF9ldmVudChkZXYpOwpAQCAtNTQ4NSw3ICs1NTQwLDcgQEAKIAl1cCgmYXByaXYtPnNlbSk7CiAKIC8qIFNjaGVkdWxlIGNoZWNrIHRvIHNlZSBpZiB0aGUgY2hhbmdlIHdvcmtlZCAqLwotCWNsZWFyX2JpdChKT0JfQVVUT1dFUCwgJmFwcml2LT5mbGFncyk7CisJY2xlYXJfYml0KEpPQl9BVVRPV0VQLCAmYXByaXYtPmpvYnMpOwogCWFwcml2LT5leHBpcmVzID0gUlVOX0FUKEhaKjMpOwogfQogCkBAIC02ODc2LDcgKzY5MzEsNyBAQAogCX0KIAlyYW5nZS0+bnVtX3R4cG93ZXIgPSBpOwogCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19NV0FUVDsKLQlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxMjsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxOTsKIAlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKIAlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTElGRVRJTUU7CiAJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CkBAIC03MTUyLDYgKzcyMDcsNyBAQAogCXUxNgkJCWNhcGFiaWxpdGllczsKIAljaGFyICoJCQljdXJyZW50X3ZhbDsJLyogRm9yIHJhdGVzICovCiAJaW50CQkJaTsKKwljaGFyICoJCWJ1ZjsKIAogCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0FQOwpAQCAtNzIzOCw4ICs3Mjk0LDY5IEBACiAJaWYoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBJV19FVl9MQ1BfTEVOKQogCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7CiAKLQkvKiBUaGUgb3RoZXIgZGF0YSBpbiB0aGUgc2NhbiByZXN1bHQgYXJlIG5vdCByZWFsbHkKLQkgKiBpbnRlcmVzdGluZywgc28gZm9yIG5vdyBkcm9wIGl0IC0gSmVhbiBJSSAqLworCS8qIEJlYWNvbiBpbnRlcnZhbCAqLworCWJ1ZiA9IGttYWxsb2MoMzAsIEdGUF9LRVJORUwpOworCWlmIChidWYpIHsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCXNwcmludGYoYnVmLCAiYmNuX2ludD0lZCIsIGJzcy0+YmVhY29uSW50ZXJ2YWwpOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKKwkJa2ZyZWUoYnVmKTsKKwl9CisKKwkvKiBQdXQgV1BBL1JTTiBJbmZvcm1hdGlvbiBFbGVtZW50cyBpbnRvIHRoZSBldmVudCBzdHJlYW0gKi8KKwlpZiAodGVzdF9iaXQoRkxBR19XUEFfQ0FQQUJMRSwgJmFpLT5mbGFncykpIHsKKwkJdW5zaWduZWQgaW50IG51bV9udWxsX2llcyA9IDA7CisJCXUxNiBsZW5ndGggPSBzaXplb2YgKGJzcy0+ZXh0cmEuaWVwKTsKKwkJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmluZm9fZWxlbWVudCA9CisJCQkoc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKikgJmJzcy0+ZXh0cmEuaWVwOworCisJCXdoaWxlICgobGVuZ3RoID49IHNpemVvZigqaW5mb19lbGVtZW50KSkgJiYgKG51bV9udWxsX2llcyA8IDIpKSB7CisJCQlpZiAoc2l6ZW9mKCppbmZvX2VsZW1lbnQpICsgaW5mb19lbGVtZW50LT5sZW4gPiBsZW5ndGgpIHsKKwkJCQkvKiBJbnZhbGlkIGVsZW1lbnQsIGRvbid0IGNvbnRpbnVlIHBhcnNpbmcgSUUgKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQkJc3dpdGNoIChpbmZvX2VsZW1lbnQtPmlkKSB7CisJCQljYXNlIE1GSUVfVFlQRV9TU0lEOgorCQkJCS8qIFR3byB6ZXJvLWxlbmd0aCBTU0lEIGVsZW1lbnRzCisJCQkJICogbWVhbiB3ZSdyZSBkb25lIHBhcnNpbmcgZWxlbWVudHMgKi8KKwkJCQlpZiAoIWluZm9fZWxlbWVudC0+bGVuKQorCQkJCQludW1fbnVsbF9pZXMrKzsKKwkJCQlicmVhazsKKworCQkJY2FzZSBNRklFX1RZUEVfR0VORVJJQzoKKwkJCQlpZiAoaW5mb19lbGVtZW50LT5sZW4gPj0gNCAmJgorCQkJCSAgICBpbmZvX2VsZW1lbnQtPmRhdGFbMF0gPT0gMHgwMCAmJgorCQkJCSAgICBpbmZvX2VsZW1lbnQtPmRhdGFbMV0gPT0gMHg1MCAmJgorCQkJCSAgICBpbmZvX2VsZW1lbnQtPmRhdGFbMl0gPT0gMHhmMiAmJgorCQkJCSAgICBpbmZvX2VsZW1lbnQtPmRhdGFbM10gPT0gMHgwMSkgeworCQkJCQlpd2UuY21kID0gSVdFVkdFTklFOworCQkJCQlpd2UudS5kYXRhLmxlbmd0aCA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiArIDIsCisJCQkJCQkJCSAgTUFYX1dQQV9JRV9MRU4pOworCQkJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCQkmaXdlLCAoY2hhciAqKSBpbmZvX2VsZW1lbnQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBNRklFX1RZUEVfUlNOOgorCQkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBtaW4oaW5mb19lbGVtZW50LT5sZW4gKyAyLAorCQkJCQkJCSAgTUFYX1dQQV9JRV9MRU4pOworCQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJJml3ZSwgKGNoYXIgKikgaW5mb19lbGVtZW50KTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbGVuZ3RoIC09IHNpemVvZigqaW5mb19lbGVtZW50KSArIGluZm9fZWxlbWVudC0+bGVuOworCQkJaW5mb19lbGVtZW50ID0KKwkJCSAgICAoc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKikmaW5mb19lbGVtZW50LT4KKwkJCSAgICBkYXRhW2luZm9fZWxlbWVudC0+bGVuXTsKKwkJfQorCX0KIAlyZXR1cm4gY3VycmVudF9ldjsKIH0KIApAQCAtNzUyMSw3ICs3NjM4LDcgQEAKIAl1MzIgKnZhbHMgPSBzdGF0c19yaWQudmFsczsKIAogCS8qIEdldCBzdGF0cyBvdXQgb2YgdGhlIGNhcmQgKi8KLQljbGVhcl9iaXQoSk9CX1dTVEFUUywgJmxvY2FsLT5mbGFncyk7CisJY2xlYXJfYml0KEpPQl9XU1RBVFMsICZsb2NhbC0+am9icyk7CiAJaWYgKGxvY2FsLT5wb3dlci5ldmVudCkgewogCQl1cCgmbG9jYWwtPnNlbSk7CiAJCXJldHVybjsKQEAgLTc1NjUsMTAgKzc2ODIsMTAgQEAKIHsKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9ICBkZXYtPnByaXY7CiAKLQlpZiAoIXRlc3RfYml0KEpPQl9XU1RBVFMsICZsb2NhbC0+ZmxhZ3MpKSB7CisJaWYgKCF0ZXN0X2JpdChKT0JfV1NUQVRTLCAmbG9jYWwtPmpvYnMpKSB7CiAJCS8qIEdldCBzdGF0cyBvdXQgb2YgdGhlIGNhcmQgaWYgYXZhaWxhYmxlICovCiAJCWlmIChkb3duX3RyeWxvY2soJmxvY2FsLT5zZW0pICE9IDApIHsKLQkJCXNldF9iaXQoSk9CX1dTVEFUUywgJmxvY2FsLT5mbGFncyk7CisJCQlzZXRfYml0KEpPQl9XU1RBVFMsICZsb2NhbC0+am9icyk7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxvY2FsLT50aHJfd2FpdCk7CiAJCX0gZWxzZQogCQkJYWlyb19yZWFkX3dpcmVsZXNzX3N0YXRzKGxvY2FsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwppbmRleCAwZTFhYzMzLi5iZWQ2ODIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCkBAIC0xODM4LDcgKzE4MzgsNyBAQAogfQogCiAjaWZkZWYgIE1PRFVMRQotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGkgPSAwOwogCkBAIC0xODYwLDcgKzE4NjAsNyBAQAogfQogCiAKLXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3ZvaWQgX19leGl0IGNsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCmluZGV4IDJlODMwODMuLmU2NmZkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oCkBAIC02NDUsNyArNjQ1LDYgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCiAJdm9pZCBfX2lvbWVtICptbWlvX2FkZHI7Ci0JdW5zaWduZWQgaW50IG1taW9fbGVuOwogCiAJLyogRG8gbm90IHVzZSB0aGUgbG9jayBkaXJlY3RseS4gVXNlIHRoZSBiY200M3h4X2xvY2sqIGhlbHBlcgogCSAqIGZ1bmN0aW9ucywgdG8gYmUgTU1JTy1zYWZlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMKaW5kZXggMzVhNGZjYi4uNzQ5N2ZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCkBAIC05Miw3ICs5Miw3IEBACiAJZmFwcGVuZCgic3Vic3lzdGVtX3ZlbmRvcjogMHglMDR4ICAgc3Vic3lzdGVtX2RldmljZTogMHglMDR4XG4iLAogCQlwY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAlmYXBwZW5kKCJJUlE6ICVkXG4iLCBiY20tPmlycSk7Ci0JZmFwcGVuZCgibW1pb19hZGRyOiAweCVwICAgbW1pb19sZW46ICV1XG4iLCBiY20tPm1taW9fYWRkciwgYmNtLT5tbWlvX2xlbik7CisJZmFwcGVuZCgibW1pb19hZGRyOiAweCVwXG4iLCBiY20tPm1taW9fYWRkcik7CiAJZmFwcGVuZCgiY2hpcF9pZDogMHglMDR4ICAgY2hpcF9yZXY6IDB4JTAyeFxuIiwgYmNtLT5jaGlwX2lkLCBiY20tPmNoaXBfcmV2KTsKIAlpZiAoKGJjbS0+Y29yZV84MDIxMVswXS5yZXYgPj0gMykgJiYgKGJjbTQzeHhfcmVhZDMyKGJjbSwgMHgwMTU4KSAmICgxIDw8IDE2KSkpCiAJCWZhcHBlbmQoIlJhZGlvIGRpc2FibGVkIGJ5IGhhcmR3YXJlIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKaW5kZXggYmJlY2JhMC4uZDAzMThlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuYwpAQCAtNjI0LDI1ICs2MjQsMjggQEAKIHN0YXRpYyB1MTYgZ2VuZXJhdGVfY29va2llKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCiAJCQkgICBpbnQgc2xvdCkKIHsKLQl1MTYgY29va2llID0gMHgwMDAwOworCXUxNiBjb29raWUgPSAweEYwMDA7CiAKIAkvKiBVc2UgdGhlIHVwcGVyIDQgYml0cyBvZiB0aGUgY29va2llIGFzCiAJICogRE1BIGNvbnRyb2xsZXIgSUQgYW5kIHN0b3JlIHRoZSBzbG90IG51bWJlcgotCSAqIGluIHRoZSBsb3dlciAxMiBiaXRzCisJICogaW4gdGhlIGxvd2VyIDEyIGJpdHMuCisJICogTm90ZSB0aGF0IHRoZSBjb29raWUgbXVzdCBuZXZlciBiZSAwLCBhcyB0aGlzCisJICogaXMgYSBzcGVjaWFsIHZhbHVlIHVzZWQgaW4gUlggcGF0aC4KIAkgKi8KIAlzd2l0Y2ggKHJpbmctPm1taW9fYmFzZSkgewogCWRlZmF1bHQ6CiAJCWFzc2VydCgwKTsKIAljYXNlIEJDTTQzeHhfTU1JT19ETUExX0JBU0U6CisJCWNvb2tpZSA9IDB4QTAwMDsKIAkJYnJlYWs7CiAJY2FzZSBCQ000M3h4X01NSU9fRE1BMl9CQVNFOgotCQljb29raWUgPSAweDEwMDA7CisJCWNvb2tpZSA9IDB4QjAwMDsKIAkJYnJlYWs7CiAJY2FzZSBCQ000M3h4X01NSU9fRE1BM19CQVNFOgotCQljb29raWUgPSAweDIwMDA7CisJCWNvb2tpZSA9IDB4QzAwMDsKIAkJYnJlYWs7CiAJY2FzZSBCQ000M3h4X01NSU9fRE1BNF9CQVNFOgotCQljb29raWUgPSAweDMwMDA7CisJCWNvb2tpZSA9IDB4RDAwMDsKIAkJYnJlYWs7CiAJfQogCWFzc2VydCgoKHUxNilzbG90ICYgMHhGMDAwKSA9PSAweDAwMDApOwpAQCAtNjYwLDE2ICs2NjMsMTYgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nID0gTlVMTDsKIAogCXN3aXRjaCAoY29va2llICYgMHhGMDAwKSB7Ci0JY2FzZSAweDAwMDA6CisJY2FzZSAweEEwMDA6CiAJCXJpbmcgPSBkbWEtPnR4X3JpbmcwOwogCQlicmVhazsKLQljYXNlIDB4MTAwMDoKKwljYXNlIDB4QjAwMDoKIAkJcmluZyA9IGRtYS0+dHhfcmluZzE7CiAJCWJyZWFrOwotCWNhc2UgMHgyMDAwOgorCWNhc2UgMHhDMDAwOgogCQlyaW5nID0gZG1hLT50eF9yaW5nMjsKIAkJYnJlYWs7Ci0JY2FzZSAweDMwMDA6CisJY2FzZSAweEQwMDA6CiAJCXJpbmcgPSBkbWEtPnR4X3JpbmczOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtODM5LDggKzg0MiwxOCBAQAogCQkvKiBXZSByZWNlaXZlZCBhbiB4bWl0IHN0YXR1cy4gKi8KIAkJc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICpodyA9IChzdHJ1Y3QgYmNtNDN4eF9od3htaXRzdGF0dXMgKilza2ItPmRhdGE7CiAJCXN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgc3RhdDsKKwkJaW50IGkgPSAwOwogCiAJCXN0YXQuY29va2llID0gbGUxNl90b19jcHUoaHctPmNvb2tpZSk7CisJCXdoaWxlIChzdGF0LmNvb2tpZSA9PSAwKSB7CisJCQlpZiAodW5saWtlbHkoKytpID49IDEwMDAwKSkgeworCQkJCWFzc2VydCgwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVkZWxheSgyKTsKKwkJCWJhcnJpZXIoKTsKKwkJCXN0YXQuY29va2llID0gbGUxNl90b19jcHUoaHctPmNvb2tpZSk7CisJCX0KIAkJc3RhdC5mbGFncyA9IGh3LT5mbGFnczsKIAkJc3RhdC5jbnQxID0gaHctPmNudDE7CiAJCXN0YXQuY250MiA9IGh3LT5jbnQyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKaW5kZXggN2VkMThjYS4uNzM2ZGRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCkBAIC0xMjgsMTMgKzEyOCwxNSBAQAogCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiY200M3h4X3BjaV90YmxbXSA9IHsKIAkvKiBCcm9hZGNvbSA0MzAzIDgwMi4xMWIgKi8KIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCQkvKiBCcm9hZGNvbSA0MzA3IDgwMi4xMWIgKi8KKwkvKiBCcm9hZGNvbSA0MzA3IDgwMi4xMWIgKi8KIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotCQkvKiBCcm9hZGNvbSA0MzE4IDgwMi4xMWIvZyAqLworCS8qIEJyb2FkY29tIDQzMTggODAyLjExYi9nICovCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwkvKiBCcm9hZGNvbSA0MzE5IDgwMi4xMWEvYi9nICovCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAkvKiBCcm9hZGNvbSA0MzA2IDgwMi4xMWIvZyAqLwogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JCS8qIEJyb2FkY29tIDQzMDYgODAyLjExYSAqLworCS8qIEJyb2FkY29tIDQzMDYgODAyLjExYSAqLwogLy8JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAkvKiBCcm9hZGNvbSA0MzA5IDgwMi4xMWEvYi9nICovCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKQEAgLTMyOTksOCArMzMwMSw3IEBACiAKIAliY200M3h4X2NoaXBzZXRfZGV0YWNoKGJjbSk7CiAJLyogRG8gX25vdF8gYWNjZXNzIHRoZSBjaGlwLCBhZnRlciBpdCBpcyBkZXRhY2hlZC4gKi8KLQlpb3VubWFwKGJjbS0+bW1pb19hZGRyKTsKLQkKKwlwY2lfaW91bm1hcChwY2lfZGV2LCBiY20tPm1taW9fYWRkcik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAKQEAgLTMzOTAsNDAgKzMzOTEsMjYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGJjbS0+bmV0X2RldjsKIAlpbnQgZXJyOwogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19mbGFncywgbW1pb19sZW47CiAJdTMyIGNvcmVtYXNrOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gd2FrZSB1cCBwY2kgZGV2aWNlICglaSlcbiIsIGVycik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBjaV9lbmFibGVfZGV2aWNlKCkgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCk7Ci0JbW1pb19mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwY2lfZGV2LCAwKTsKLQltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMCk7Ci0JaWYgKCEobW1pb19mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCSAgICAgICAiJXMsIHJlZ2lvbiAjMCBub3QgYW4gTU1JTyByZXNvdXJjZSwgYWJvcnRpbmdcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSk7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3BjaV9kaXNhYmxlOwotCX0KIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaV9kZXYsIEtCVUlMRF9NT0ROQU1FKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgICJjb3VsZCBub3QgYWNjZXNzIFBDSSByZXNvdXJjZXMgKCVpKVxuIiwgZXJyKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGNpX3JlcXVlc3RfcmVnaW9ucygpIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlOwogCX0KIAkvKiBlbmFibGUgUENJIGJ1cy1tYXN0ZXJpbmcgKi8KIAlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKLQliY20tPm1taW9fYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCWJjbS0+bW1pb19hZGRyID0gcGNpX2lvbWFwKHBjaV9kZXYsIDAsIH4wVUwpOwogCWlmICghYmNtLT5tbWlvX2FkZHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGNpX2lvbWFwKCkgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfcGNpX3JlbGVhc2U7CiAJfQotCWJjbS0+bW1pb19sZW4gPSBtbWlvX2xlbjsKIAluZXRfZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyliY20tPm1taW9fYWRkcjsKIAogCWJjbTQzeHhfcGNpX3JlYWRfY29uZmlnMTYoYmNtLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKQEAgLTM1MTcsNyArMzUwNCw3IEBACiBlcnJfY2hpcHNldF9kZXRhY2g6CiAJYmNtNDN4eF9jaGlwc2V0X2RldGFjaChiY20pOwogZXJyX2lvdW5tYXA6Ci0JaW91bm1hcChiY20tPm1taW9fYWRkcik7CisJcGNpX2lvdW5tYXAocGNpX2RldiwgYmNtLT5tbWlvX2FkZHIpOwogZXJyX3BjaV9yZWxlYXNlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7CiBlcnJfcGNpX2Rpc2FibGU6CkBAIC0zNTY4LDcgKzM1NTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGtleWlkeDsKIAkKLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggInNldCBzZWN1cml0eSBjYWxsZWRcbiIpOworCWRwcmludGsoS0VSTl9JTkZPIFBGWCAic2V0IHNlY3VyaXR5IGNhbGxlZCIpOwogCiAJYmNtNDN4eF9sb2NrX21taW8oYmNtLCBmbGFncyk7CiAKQEAgLTM1ODEsMjQgKzM1NjgsMjUgQEAKIAkKIAlpZiAoc2VjLT5mbGFncyAmIFNFQ19BQ1RJVkVfS0VZKSB7CiAJCXNlY2luZm8tPmFjdGl2ZV9rZXkgPSBzZWMtPmFjdGl2ZV9rZXk7Ci0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiICAgLmFjdGl2ZV9rZXkgPSAlZFxuIiwgc2VjLT5hY3RpdmVfa2V5KTsKKwkJZHByaW50aygiLCAuYWN0aXZlX2tleSA9ICVkIiwgc2VjLT5hY3RpdmVfa2V5KTsKIAl9CiAJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfVU5JQ0FTVF9HUk9VUCkgewogCQlzZWNpbmZvLT51bmljYXN0X3VzZXNfZ3JvdXAgPSBzZWMtPnVuaWNhc3RfdXNlc19ncm91cDsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICIgICAudW5pY2FzdF91c2VzX2dyb3VwID0gJWRcbiIsIHNlYy0+dW5pY2FzdF91c2VzX2dyb3VwKTsKKwkJZHByaW50aygiLCAudW5pY2FzdF91c2VzX2dyb3VwID0gJWQiLCBzZWMtPnVuaWNhc3RfdXNlc19ncm91cCk7CiAJfQogCWlmIChzZWMtPmZsYWdzICYgU0VDX0xFVkVMKSB7CiAJCXNlY2luZm8tPmxldmVsID0gc2VjLT5sZXZlbDsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICIgICAubGV2ZWwgPSAlZFxuIiwgc2VjLT5sZXZlbCk7CisJCWRwcmludGsoIiwgLmxldmVsID0gJWQiLCBzZWMtPmxldmVsKTsKIAl9CiAJaWYgKHNlYy0+ZmxhZ3MgJiBTRUNfRU5BQkxFRCkgewogCQlzZWNpbmZvLT5lbmFibGVkID0gc2VjLT5lbmFibGVkOwotCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIiAgIC5lbmFibGVkID0gJWRcbiIsIHNlYy0+ZW5hYmxlZCk7CisJCWRwcmludGsoIiwgLmVuYWJsZWQgPSAlZCIsIHNlYy0+ZW5hYmxlZCk7CiAJfQogCWlmIChzZWMtPmZsYWdzICYgU0VDX0VOQ1JZUFQpIHsKIAkJc2VjaW5mby0+ZW5jcnlwdCA9IHNlYy0+ZW5jcnlwdDsKLQkJZHByaW50ayhLRVJOX0lORk8gUEZYICIgICAuZW5jcnlwdCA9ICVkXG4iLCBzZWMtPmVuY3J5cHQpOworCQlkcHJpbnRrKCIsIC5lbmNyeXB0ID0gJWQiLCBzZWMtPmVuY3J5cHQpOwogCX0KKwlkcHJpbnRrKCJcbiIpOwogCWlmIChiY20tPmluaXRpYWxpemVkICYmICFiY20tPmllZWUtPmhvc3RfZW5jcnlwdCkgewogCQlpZiAoc2VjaW5mby0+ZW5hYmxlZCkgewogCQkJLyogdXBsb2FkIFdFUCBrZXlzIHRvIGhhcmR3YXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9oZXJtZXMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5jCmluZGV4IDM0NmM2ZmUuLjJhYTJmMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5jCkBAIC0xMjEsMTIgKzEyMSw2IEBACiAJaHctPmlvYmFzZSA9IGFkZHJlc3M7CiAJaHctPnJlZ19zcGFjaW5nID0gcmVnX3NwYWNpbmc7CiAJaHctPmludGVuID0gMHgwOwotCi0jaWZkZWYgSEVSTUVTX0RFQlVHX0JVRkZFUgotCWh3LT5kYnVmcCA9IDA7Ci0JbWVtc2V0KCZody0+ZGJ1ZiwgMHhmZiwgc2l6ZW9mKGh3LT5kYnVmKSk7Ci0JbWVtc2V0KCZody0+cHJvZmlsZSwgMCwgc2l6ZW9mKGh3LT5wcm9maWxlKSk7Ci0jZW5kaWYKIH0KIAogaW50IGhlcm1lc19pbml0KGhlcm1lc190ICpodykKQEAgLTM0NywxOSArMzQxLDYgQEAKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnKGh3LCBvcmVnKTsKIAl9CiAKLSNpZmRlZiBIRVJNRVNfREVCVUdfQlVGRkVSCi0JaHctPnByb2ZpbGVbSEVSTUVTX0JBUF9CVVNZX1RJTUVPVVQgLSBrXSsrOwotCi0JaWYgKGsgPCBIRVJNRVNfQkFQX0JVU1lfVElNRU9VVCkgewotCQlzdHJ1Y3QgaGVybWVzX2RlYnVnX2VudHJ5ICplID0gCi0JCQkmaHctPmRidWZbKGh3LT5kYnVmcCsrKSAlIEhFUk1FU19ERUJVR19CVUZTSVpFXTsKLQkJZS0+YmFwID0gYmFwOwotCQllLT5pZCA9IGlkOwotCQllLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCWUtPmN5Y2xlcyA9IEhFUk1FU19CQVBfQlVTWV9USU1FT1VUIC0gazsKLQl9Ci0jZW5kaWYKLQogCWlmIChyZWcgJiBIRVJNRVNfT0ZGU0VUX0JVU1kpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCkBAIC00MTksOCArNDAwLDcgQEAKIH0KIAogLyogV3JpdGUgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBjaGlwJ3MgYnVmZmVyLCB2aWEgdGhlCi0gKiBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZSBjYWxsZXIncyBwcm9ibGVtLiBsZW4KLSAqIG11c3QgYmUgZXZlbi4KKyAqIEJBUC4gU3luY2hyb25pemF0aW9uL3NlcmlhbGl6YXRpb24gaXMgdGhlIGNhbGxlcidzIHByb2JsZW0uCiAgKgogICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQogICovCkBAIC00MzAsNyArNDEwLDcgQEAKIAlpbnQgZHJlZyA9IGJhcCA/IEhFUk1FU19EQVRBMSA6IEhFUk1FU19EQVRBMDsKIAlpbnQgZXJyID0gMDsKIAotCWlmICggKGxlbiA8IDApIHx8IChsZW4gJSAyKSApCisJaWYgKGxlbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2JhcF9zZWVrKGh3LCBiYXAsIGlkLCBvZmZzZXQpOwpAQCAtNDM4LDQ5ICs0MTgsMTIgQEAKIAkJZ290byBvdXQ7CiAJCiAJLyogQWN0dWFsbHkgZG8gdGhlIHRyYW5zZmVyICovCi0JaGVybWVzX3dyaXRlX3dvcmRzKGh3LCBkcmVnLCBidWYsIGxlbi8yKTsKKwloZXJtZXNfd3JpdGVfYnl0ZXMoaHcsIGRyZWcsIGJ1ZiwgbGVuKTsKIAogIG91dDoJCiAJcmV0dXJuIGVycjsKIH0KIAotLyogV3JpdGUgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBjaGlwJ3MgYnVmZmVyIHdpdGggcGFkZGluZyBpZgotICogbmVjY2Vzc2FyeSwgdmlhIHRoZSBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZQotICogY2FsbGVyJ3MgcHJvYmxlbS4gbGVuIG11c3QgYmUgZXZlbi4KLSAqCi0gKiBSZXR1cm5zOiA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pLCAwIG9uIHN1Y2Nlc3MsID4gMCBvbiBlcnJvciBmcm9tIGZpcm13YXJlCi0gKi8KLWludCBoZXJtZXNfYmFwX3B3cml0ZV9wYWQoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGRhdGFfbGVuLCBpbnQgbGVuLAotCQkgICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpCi17Ci0JaW50IGRyZWcgPSBiYXAgPyBIRVJNRVNfREFUQTEgOiBIRVJNRVNfREFUQTA7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAobGVuIDwgMCB8fCBsZW4gJSAyIHx8IGRhdGFfbGVuID4gbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVyciA9IGhlcm1lc19iYXBfc2VlayhodywgYmFwLCBpZCwgb2Zmc2V0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCS8qIFRyYW5zZmVyIGFsbCB0aGUgY29tcGxldGUgd29yZHMgb2YgZGF0YSAqLwotCWhlcm1lc193cml0ZV93b3JkcyhodywgZHJlZywgYnVmLCBkYXRhX2xlbi8yKTsKLQkvKiBJZiB0aGVyZSBpcyBhbiBvZGQgYnl0ZSBsZWZ0IG92ZXIgcGFkIGFuZCB0cmFuc2ZlciBpdCAqLwotCWlmIChkYXRhX2xlbiAmIDEpIHsKLQkJdTggZW5kWzJdOwotCQllbmRbMV0gPSAwOwotCQllbmRbMF0gPSAoKHVuc2lnbmVkIGNoYXIgKilidWYpW2RhdGFfbGVuIC0gMV07Ci0JCWhlcm1lc193cml0ZV93b3JkcyhodywgZHJlZywgZW5kLCAxKTsKLQkJZGF0YV9sZW4gKys7Ci0JfQotCS8qIE5vdyBzZW5kIHplcm9zIGZvciB0aGUgcGFkZGluZyAqLwotCWlmIChkYXRhX2xlbiA8IGxlbikKLQkJaGVybWVzX2NsZWFyX3dvcmRzKGh3LCBkcmVnLCAobGVuIC0gZGF0YV9sZW4pIC8gMik7Ci0JLyogQ29tcGxldGUgKi8KLSBvdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogLyogUmVhZCBhIExlbmd0aC1UeXBlLVZhbHVlIHJlY29yZCBmcm9tIHRoZSBjYXJkLgogICoKICAqIElmIGxlbmd0aCBpcyBOVUxMLCB3ZSBpZ25vcmUgdGhlIGxlbmd0aCByZWFkIGZyb20gdGhlIGNhcmQsIGFuZApAQCAtNTUzLDcgKzQ5Niw3IEBACiAKIAljb3VudCA9IGxlbmd0aCAtIDE7CiAKLQloZXJtZXNfd3JpdGVfd29yZHMoaHcsIGRyZWcsIHZhbHVlLCBjb3VudCk7CisJaGVybWVzX3dyaXRlX2J5dGVzKGh3LCBkcmVnLCB2YWx1ZSwgY291bnQgPDwgMSk7CiAKIAllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9BQ0NFU1MgfCBIRVJNRVNfQ01EX1dSSVRFLCAKIAkJCQlyaWQsIE5VTEwpOwpAQCAtNTY4LDcgKzUxMSw2IEBACiAKIEVYUE9SVF9TWU1CT0woaGVybWVzX2JhcF9wcmVhZCk7CiBFWFBPUlRfU1lNQk9MKGhlcm1lc19iYXBfcHdyaXRlKTsKLUVYUE9SVF9TWU1CT0woaGVybWVzX2JhcF9wd3JpdGVfcGFkKTsKIEVYUE9SVF9TWU1CT0woaGVybWVzX3JlYWRfbHR2KTsKIEVYUE9SVF9TWU1CT0woaGVybWVzX3dyaXRlX2x0dik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hlcm1lcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmgKaW5kZXggNzY0NGY3Mi4uOGUzZjBlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaGVybWVzLmgKQEAgLTMyOCwxNiArMzI4LDYgQEAKIAl1OCBhZGRyW0hFUk1FU19NQVhfTVVMVElDQVNUXVtFVEhfQUxFTl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLy8gI2RlZmluZSBIRVJNRVNfREVCVUdfQlVGRkVSIDEKLSNkZWZpbmUgSEVSTUVTX0RFQlVHX0JVRlNJWkUgNDA5Ngotc3RydWN0IGhlcm1lc19kZWJ1Z19lbnRyeSB7Ci0JaW50IGJhcDsKLQl1MTYgaWQsIG9mZnNldDsKLQlpbnQgY3ljbGVzOwotfTsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQogLyogVGltZW91dHMgKi8KICNkZWZpbmUgSEVSTUVTX0JBUF9CVVNZX1RJTUVPVVQgKDEwMDAwKSAvKiBJbiBpdGVyYXRpb25zIG9mIH4xdXMgKi8KIApAQCAtMzQ3LDE0ICszMzcsNyBAQAogCWludCByZWdfc3BhY2luZzsKICNkZWZpbmUgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcJMAogI2RlZmluZSBIRVJNRVNfMzJCSVRfUkVHU1BBQ0lORwkxCi0KIAl1MTYgaW50ZW47IC8qIFdoaWNoIGludGVycnVwdHMgc2hvdWxkIGJlIGVuYWJsZWQ/ICovCi0KLSNpZmRlZiBIRVJNRVNfREVCVUdfQlVGRkVSCi0Jc3RydWN0IGhlcm1lc19kZWJ1Z19lbnRyeSBkYnVmW0hFUk1FU19ERUJVR19CVUZTSVpFXTsKLQl1bnNpZ25lZCBsb25nIGRidWZwOwotCXVuc2lnbmVkIGxvbmcgcHJvZmlsZVtIRVJNRVNfQkFQX0JVU1lfVElNRU9VVCsxXTsKLSNlbmRpZgogfSBoZXJtZXNfdDsKIAogLyogUmVnaXN0ZXIgYWNjZXNzIGNvbnZlbmllbmNlIG1hY3JvcyAqLwpAQCAtMzc2LDggKzM1OSw2IEBACiAJCSAgICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpOwogaW50IGhlcm1lc19iYXBfcHdyaXRlKGhlcm1lc190ICpodywgaW50IGJhcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuLAogCQkJdTE2IGlkLCB1MTYgb2Zmc2V0KTsKLWludCBoZXJtZXNfYmFwX3B3cml0ZV9wYWQoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCBjb25zdCB2b2lkICpidWYsCi0JCQl1bnNpZ25lZCBkYXRhX2xlbiwgaW50IGxlbiwgdTE2IGlkLCB1MTYgb2Zmc2V0KTsKIGludCBoZXJtZXNfcmVhZF9sdHYoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB1MTYgcmlkLCB1bnNpZ25lZCBidWZsZW4sCiAJCSAgICB1MTYgKmxlbmd0aCwgdm9pZCAqYnVmKTsKIGludCBoZXJtZXNfd3JpdGVfbHR2KGhlcm1lc190ICpodywgaW50IGJhcCwgdTE2IHJpZCwKQEAgLTQyNSwxMCArNDA2LDEzIEBACiAJaW9yZWFkMTZfcmVwKGh3LT5pb2Jhc2UgKyBvZmYsIGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX3dyaXRlX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc193cml0ZV9ieXRlcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGNvdW50KQogewogCW9mZiA9IG9mZiA8PCBody0+cmVnX3NwYWNpbmc7Ci0JaW93cml0ZTE2X3JlcChody0+aW9iYXNlICsgb2ZmLCBidWYsIGNvdW50KTsKKwlpb3dyaXRlMTZfcmVwKGh3LT5pb2Jhc2UgKyBvZmYsIGJ1ZiwgY291bnQgPj4gMSk7CisJaWYgKHVubGlrZWx5KGNvdW50ICYgMSkpCisJCWlvd3JpdGU4KGJ1Zltjb3VudCAtIDFdLCBody0+aW9iYXNlICsgb2ZmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc19jbGVhcl93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwgdW5zaWduZWQgY291bnQpCkBAIC00NjIsMjEgKzQ0Niw0IEBACiAJcmV0dXJuIEhFUk1FU19XUklURV9SRUNPUkQoaHcsIGJhcCwgcmlkLCAmcmVjKTsKIH0KIAotI2Vsc2UgLyogISBfX0tFUk5FTF9fICovCi0KLS8qIFRoZXNlIGFyZSBwcm92aWRlZCBmb3IgdGhlIGJlbmVmaXQgb2YgdXNlcnNwYWNlIGRyaXZlcnMgYW5kIHRlc3RpbmcgcHJvZ3JhbXMKLSAgIHdoaWNoIHVzZSBpb3Blcm0oKSBvciBpb3BsKCkgKi8KLQotI2RlZmluZSBoZXJtZXNfcmVhZF9yZWcoYmFzZSwgb2ZmKSAoaW53KChiYXNlKSArIChvZmYpKSkKLSNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZyhiYXNlLCBvZmYsIHZhbCkgKG91dHcoKHZhbCksIChiYXNlKSArIChvZmYpKSkKLQotI2RlZmluZSBoZXJtZXNfcmVhZF9yZWduKGJhc2UsIG5hbWUpIChoZXJtZXNfcmVhZF9yZWcoKGJhc2UpLCBIRVJNRVNfIyNuYW1lKSkKLSNkZWZpbmUgaGVybWVzX3dyaXRlX3JlZ24oYmFzZSwgbmFtZSwgdmFsKSAoaGVybWVzX3dyaXRlX3JlZygoYmFzZSksIEhFUk1FU18jI25hbWUsICh2YWwpKSkKLQotLyogTm90ZSB0aGF0IGZvciB0aGUgbmV4dCB0d28sIHRoZSBjb3VudCBpcyBpbiAxNi1iaXQgd29yZHMsIG5vdCBieXRlcyAqLwotI2RlZmluZSBoZXJtZXNfcmVhZF9kYXRhKGJhc2UsIG9mZiwgYnVmLCBjb3VudCkgKGluc3coKGJhc2UpICsgKG9mZiksIChidWYpLCAoY291bnQpKSkKLSNkZWZpbmUgaGVybWVzX3dyaXRlX2RhdGEoYmFzZSwgb2ZmLCBidWYsIGNvdW50KSAob3V0c3coKGJhc2UpICsgKG9mZiksIChidWYpLCAoY291bnQpKSkKLQotI2VuZGlmIC8qICEgX19LRVJORUxfXyAqLwotCiAjZW5kaWYgIC8qIF9IRVJNRVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCmluZGV4IDA2YTUyMTQuLjRhNWJlNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKQEAgLTUzNCw1ICs1MzQsNCBAQAogfQogCiAKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2R1bXBfdHhfODAyMTEpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCmluZGV4IDA2YzNmYTMuLmJhMTMxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKQEAgLTMyNzYsMTcgKzMyNzYsNiBAQAogRVhQT1JUX1NZTUJPTChob3N0YXBfaW5pdF9hcF9wcm9jKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX2ZyZWVfZGF0YSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9jaGVja19zdGFfZndfdmVyc2lvbik7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF9oYW5kbGVfc3RhX3R4KTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2hhbmRsZV9zdGFfcmVsZWFzZSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9oYW5kbGVfc3RhX3R4X2V4Yyk7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF91cGRhdGVfc3RhX3BzKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2hhbmRsZV9zdGFfcngpOwotRVhQT1JUX1NZTUJPTChob3N0YXBfaXNfc3RhX2Fzc29jKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2lzX3N0YV9hdXRob3JpemVkKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2FkZF9zdGEpOwotRVhQT1JUX1NZTUJPTChob3N0YXBfdXBkYXRlX3JhdGVzKTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2FkZF93ZHNfbGlua3MpOwotRVhQT1JUX1NZTUJPTChob3N0YXBfd2RzX2xpbmtfb3Blcik7CiAjaWZuZGVmIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQKLUVYUE9SVF9TWU1CT0woaG9zdGFwX2RlYXV0aF9hbGxfc3Rhcyk7CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCmluZGV4IDU1YmVkOTIuLmRiMDNkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKQEAgLTg4MSw2ICs4ODEsMTIgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigKIAkJIlpvb21BaXIgMTFNYnBzIEhpZ2giLCAiUmF0ZSB3aXJlbGVzcyBOZXR3b3JraW5nIiwKIAkJMHgyNzNmZTNkYiwgMHgzMmExZWFlZSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAorCQkiUHJldGVjIiwgIkNvbXBhY3RXTEFOIENhcmQgODAyLjExYiIsICIyLjUiLAorCQkweDFjYWRkM2U1LCAweGU2OTc2MzZjLCAweDdhNWJmY2YxKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoCisJCSJVLlMuIFJvYm90aWNzIiwgIklFRUUgODAyLjExYiBQQy1DQVJEIiwgIlZlcnNpb24gMDEuMDIiLAorCQkweGM3YjhkZjlkLCAweDE3MDBkMDg3LCAweDRiNzRiYWEwKSwKIAlQQ01DSUFfREVWSUNFX05VTEwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgaG9zdGFwX2NzX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCmluZGV4IDhkZDRjNDQuLjkzNzg2ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCkBAIC0xMTI1LDExICsxMTI1LDkgQEAKIEVYUE9SVF9TWU1CT0woaG9zdGFwX2R1bXBfcnhfaGVhZGVyKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX2R1bXBfdHhfaGVhZGVyKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwXzgwMjExX2hlYWRlcl9wYXJzZSk7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9wcmlzbV9oZWFkZXJfcGFyc2UpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfODAyMTFfZ2V0X2hkcmxlbik7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9nZXRfc3RhdHMpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0dXBfZGV2KTsKLUVYUE9SVF9TWU1CT0woaG9zdGFwX3Byb2MpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0X211bHRpY2FzdF9saXN0X3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9ob3N0YXBkKTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9ob3N0YXBkX3N0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggYmNhODljZi4uMzlmODJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtMzMsNyArMzMsNDQgQEAKICNpbmNsdWRlICJpcHcyMjAwLmgiCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jZGVmaW5lIElQVzIyMDBfVkVSU0lPTiAiZ2l0LTEuMS4xIgorCisjaWZuZGVmIEtCVUlMRF9FWFRNT0QKKyNkZWZpbmUgVksgImsiCisjZWxzZQorI2RlZmluZSBWSworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRworI2RlZmluZSBWRCAiZCIKKyNlbHNlCisjZGVmaW5lIFZECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKKyNkZWZpbmUgVk0gIm0iCisjZWxzZQorI2RlZmluZSBWTQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworI2RlZmluZSBWUCAicCIKKyNlbHNlCisjZGVmaW5lIFZQCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCisjZGVmaW5lIFZSICJyIgorI2Vsc2UKKyNkZWZpbmUgVlIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCisjZGVmaW5lIFZRICJxIgorI2Vsc2UKKyNkZWZpbmUgVlEKKyNlbmRpZgorCisjZGVmaW5lIElQVzIyMDBfVkVSU0lPTiAiMS4xLjIiIFZLIFZEIFZNIFZQIFZSIFZRCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgUFJPL1dpcmVsZXNzIDIyMDAvMjkxNSBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElQVzIyMDBfVkVSU0lPTgpAQCAtNDYsNyArODMsOSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGNtZGxvZyA9IDA7CisjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIHN0YXRpYyBpbnQgZGVidWcgPSAwOworI2VuZGlmCiBzdGF0aWMgaW50IGNoYW5uZWwgPSAwOwogc3RhdGljIGludCBtb2RlID0gMDsKIApAQCAtNjEsOCArMTAwLDE0IEBACiBzdGF0aWMgY29uc3QgY2hhciBpcHdfbW9kZXNbXSA9IHsKIAknYScsICdiJywgJ2cnLCAnPycKIH07CitzdGF0aWMgaW50IGFudGVubmEgPSBDRkdfU1lTX0FOVEVOTkFfQk9USDsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKK3N0YXRpYyBpbnQgcnRhcF9pZmFjZSA9IDA7ICAgICAvKiBkZWY6IDAgLS0gZG8gbm90IGNyZWF0ZSBydGFwIGludGVyZmFjZSAqLworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogc3RhdGljIGludCBxb3NfZW5hYmxlID0gMDsKIHN0YXRpYyBpbnQgcW9zX2J1cnN0X2VuYWJsZSA9IDA7CiBzdGF0aWMgaW50IHFvc19ub19hY2tfbWFzayA9IDA7CkBAIC0xMjYsNyArMTcxLDcgQEAKIAkJCQkgICAgICAgKnFvc19wYXJhbSk7CiBzdGF0aWMgaW50IGlwd19zZW5kX3Fvc19pbmZvX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CiAJCQkJICAgICAqcW9zX3BhcmFtKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKmlwd19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpOwpAQCAtMTI2OSw2ICsxMzE0LDEwNSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoY21kX2xvZywgU19JUlVHTywgc2hvd19jbWRfbG9nLCBOVUxMKTsKIAorI2lmZGVmIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTCitzdGF0aWMgdm9pZCBpcHdfcHJvbV9mcmVlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdik7CitzdGF0aWMgaW50IGlwd19wcm9tX2FsbG9jKHN0cnVjdCBpcHdfcHJpdiAqcHJpdik7CitzdGF0aWMgc3NpemVfdCBzdG9yZV9ydGFwX2lmYWNlKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCWludCByYyA9IDA7CisKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoYnVmWzBdKSB7CisJY2FzZSAnMCc6CisJCWlmICghcnRhcF9pZmFjZSkKKwkJCXJldHVybiBjb3VudDsKKworCQlpZiAobmV0aWZfcnVubmluZyhwcml2LT5wcm9tX25ldF9kZXYpKSB7CisJCQlJUFdfV0FSTklORygiSW50ZXJmYWNlIGlzIHVwLiAgQ2Fubm90IHVucmVnaXN0ZXIuXG4iKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCisJCWlwd19wcm9tX2ZyZWUocHJpdik7CisJCXJ0YXBfaWZhY2UgPSAwOworCQlicmVhazsKKworCWNhc2UgJzEnOgorCQlpZiAocnRhcF9pZmFjZSkKKwkJCXJldHVybiBjb3VudDsKKworCQlyYyA9IGlwd19wcm9tX2FsbG9jKHByaXYpOworCQlpZiAoIXJjKQorCQkJcnRhcF9pZmFjZSA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJjKSB7CisJCUlQV19FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIHByb21pc2N1b3VzIG5ldHdvcmsgIgorCQkJICAiZGV2aWNlIChlcnJvciAlZCkuXG4iLCByYyk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3J0YXBfaWZhY2Uoc3RydWN0IGRldmljZSAqZCwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlpZiAocnRhcF9pZmFjZSkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCBwcml2LT5wcm9tX25ldF9kZXYtPm5hbWUpOworCWVsc2UgeworCQlidWZbMF0gPSAnLSc7CisJCWJ1ZlsxXSA9ICcxJzsKKwkJYnVmWzJdID0gJ1wwJzsKKwkJcmV0dXJuIDM7CisJfQorfQorCitzdGF0aWMgREVWSUNFX0FUVFIocnRhcF9pZmFjZSwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcnRhcF9pZmFjZSwKKwkJICAgc3RvcmVfcnRhcF9pZmFjZSk7CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3J0YXBfZmlsdGVyKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCisJaWYgKCFwcml2LT5wcm9tX3ByaXYpIHsKKwkJSVBXX0VSUk9SKCJBdHRlbXB0aW5nIHRvIHNldCBmaWx0ZXIgd2l0aG91dCAiCisJCQkgICJydGFwX2lmYWNlIGVuYWJsZWQuXG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlwcml2LT5wcm9tX3ByaXYtPmZpbHRlciA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKworCUlQV19ERUJVR19JTkZPKCJTZXR0aW5nIHJ0YXAgZmlsdGVyIHRvICIgQklUX0ZNVDE2ICJcbiIsCisJCSAgICAgICBCSVRfQVJHMTYocHJpdi0+cHJvbV9wcml2LT5maWx0ZXIpKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19ydGFwX2ZpbHRlcihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0WCIsCisJCSAgICAgICBwcml2LT5wcm9tX3ByaXYgPyBwcml2LT5wcm9tX3ByaXYtPmZpbHRlciA6IDApOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocnRhcF9maWx0ZXIsIFNfSVdVU1IgfCBTX0lSVVNSLCBzaG93X3J0YXBfZmlsdGVyLAorCQkgICBzdG9yZV9ydGFwX2ZpbHRlcik7CisjZW5kaWYKKwogc3RhdGljIHNzaXplX3Qgc2hvd19zY2FuX2FnZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY2hhciAqYnVmKQogewpAQCAtMjAyNSwxNiArMjE2OSwxMSBAQAogCXJldHVybiBpcHdfc2VuZF9jbWRfc2ltcGxlKHByaXYsIElQV19DTURfSE9TVF9DT01QTEVURSk7CiB9CiAKLXN0YXRpYyBpbnQgaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXB3X3N5c19jb25maWcgKmNvbmZpZykKK3N0YXRpYyBpbnQgaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7Ci0JaWYgKCFwcml2IHx8ICFjb25maWcpIHsKLQkJSVBXX0VSUk9SKCJJbnZhbGlkIGFyZ3NcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIGlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9TWVNURU1fQ09ORklHLCBzaXplb2YoKmNvbmZpZyksCi0JCQkJY29uZmlnKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1NZU1RFTV9DT05GSUcsCisJCQkJc2l6ZW9mKHByaXYtPnN5c19jb25maWcpLAorCQkJCSZwcml2LT5zeXNfY29uZmlnKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9zc2lkKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggKiBzc2lkLCBpbnQgbGVuKQpAQCAtMzEwNCwxMCArMzI0MywxMCBAQAogCiAKIHN0cnVjdCBpcHdfZncgewotCXUzMiB2ZXI7Ci0JdTMyIGJvb3Rfc2l6ZTsKLQl1MzIgdWNvZGVfc2l6ZTsKLQl1MzIgZndfc2l6ZTsKKwlfX2xlMzIgdmVyOworCV9fbGUzMiBib290X3NpemU7CisJX19sZTMyIHVjb2RlX3NpemU7CisJX19sZTMyIGZ3X3NpemU7CiAJdTggZGF0YVswXTsKIH07CiAKQEAgLTMxMzEsOCArMzI3MCw4IEBACiAKIAlmdyA9ICh2b2lkICopKCpyYXcpLT5kYXRhOwogCi0JaWYgKCgqcmF3KS0+c2l6ZSA8IHNpemVvZigqZncpICsKLQkgICAgZnctPmJvb3Rfc2l6ZSArIGZ3LT51Y29kZV9zaXplICsgZnctPmZ3X3NpemUpIHsKKwlpZiAoKCpyYXcpLT5zaXplIDwgc2l6ZW9mKCpmdykgKyBsZTMyX3RvX2NwdShmdy0+Ym9vdF9zaXplKSArCisJICAgIGxlMzJfdG9fY3B1KGZ3LT51Y29kZV9zaXplKSArIGxlMzJfdG9fY3B1KGZ3LT5md19zaXplKSkgewogCQlJUFdfRVJST1IoIiVzIGlzIHRvbyBzbWFsbCBvciBjb3JydXB0ICglemQpXG4iLAogCQkJICBuYW1lLCAoKnJhdyktPnNpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyMzcsOCArMzM3Niw5IEBACiAKIAlmdyA9ICh2b2lkICopcmF3LT5kYXRhOwogCWJvb3RfaW1nID0gJmZ3LT5kYXRhWzBdOwotCXVjb2RlX2ltZyA9ICZmdy0+ZGF0YVtmdy0+Ym9vdF9zaXplXTsKLQlmd19pbWcgPSAmZnctPmRhdGFbZnctPmJvb3Rfc2l6ZSArIGZ3LT51Y29kZV9zaXplXTsKKwl1Y29kZV9pbWcgPSAmZnctPmRhdGFbbGUzMl90b19jcHUoZnctPmJvb3Rfc2l6ZSldOworCWZ3X2ltZyA9ICZmdy0+ZGF0YVtsZTMyX3RvX2NwdShmdy0+Ym9vdF9zaXplKSArCisJCQkgICBsZTMyX3RvX2NwdShmdy0+dWNvZGVfc2l6ZSldOwogCiAJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJvcjsKQEAgLTMyNzIsNyArMzQxMiw3IEBACiAJCQlJUFdfTklDX1NSQU1fVVBQRVJfQk9VTkQgLSBJUFdfTklDX1NSQU1fTE9XRVJfQk9VTkQpOwogCiAJLyogRE1BIHRoZSBpbml0aWFsIGJvb3QgZmlybXdhcmUgaW50byB0aGUgZGV2aWNlICovCi0JcmMgPSBpcHdfbG9hZF9maXJtd2FyZShwcml2LCBib290X2ltZywgZnctPmJvb3Rfc2l6ZSk7CisJcmMgPSBpcHdfbG9hZF9maXJtd2FyZShwcml2LCBib290X2ltZywgbGUzMl90b19jcHUoZnctPmJvb3Rfc2l6ZSkpOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBib290IGZpcm13YXJlOiAlZFxuIiwgcmMpOwogCQlnb3RvIGVycm9yOwpAQCAtMzI5NCw3ICszNDM0LDcgQEAKIAlpcHdfd3JpdGUzMihwcml2LCBJUFdfSU5UQV9SVywgSVBXX0lOVEFfQklUX0ZXX0lOSVRJQUxJWkFUSU9OX0RPTkUpOwogCiAJLyogRE1BIHRoZSB1Y29kZSBpbnRvIHRoZSBkZXZpY2UgKi8KLQlyYyA9IGlwd19sb2FkX3Vjb2RlKHByaXYsIHVjb2RlX2ltZywgZnctPnVjb2RlX3NpemUpOworCXJjID0gaXB3X2xvYWRfdWNvZGUocHJpdiwgdWNvZGVfaW1nLCBsZTMyX3RvX2NwdShmdy0+dWNvZGVfc2l6ZSkpOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCB1Y29kZTogJWRcbiIsIHJjKTsKIAkJZ290byBlcnJvcjsKQEAgLTMzMDQsNyArMzQ0NCw3IEBACiAJaXB3X3N0b3BfbmljKHByaXYpOwogCiAJLyogRE1BIGJzcyBmaXJtd2FyZSBpbnRvIHRoZSBkZXZpY2UgKi8KLQlyYyA9IGlwd19sb2FkX2Zpcm13YXJlKHByaXYsIGZ3X2ltZywgZnctPmZ3X3NpemUpOworCXJjID0gaXB3X2xvYWRfZmlybXdhcmUocHJpdiwgZndfaW1nLCBsZTMyX3RvX2NwdShmdy0+Zndfc2l6ZSkpOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBmaXJtd2FyZTogJWRcbiIsIHJjKTsKIAkJZ290byBlcnJvcjsKQEAgLTM3MDAsNyArMzg0MCwxNyBAQAogc3RhdGljIHZvaWQgaXB3X3N5c3RlbV9jb25maWcodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwotCWlwd19zZW5kX3N5c3RlbV9jb25maWcocHJpdiwgJnByaXYtPnN5c19jb25maWcpOworCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwlpZiAocHJpdi0+cHJvbV9uZXRfZGV2ICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAxOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMTsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDE7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDE7CisJfQorI2VuZGlmCisKKwlpcHdfc2VuZF9zeXN0ZW1fY29uZmlnKHByaXYpOwogfQogCiBzdHJ1Y3QgaXB3X3N0YXR1c19jb2RlIHsKQEAgLTM3NzEsNiArMzkyMSwxMyBAQAogCW1lbXNldChhdmcsIDAsIHNpemVvZigqYXZnKSk7CiB9CiAKKyNkZWZpbmUgREVQVEhfUlNTSSA4CisjZGVmaW5lIERFUFRIX05PSVNFIDE2CitzdGF0aWMgczE2IGV4cG9uZW50aWFsX2F2ZXJhZ2UoczE2IHByZXZfYXZnLCBzMTYgdmFsLCB1OCBkZXB0aCkKK3sKKwlyZXR1cm4gKChkZXB0aC0xKSpwcmV2X2F2ZyArICB2YWwpL2RlcHRoOworfQorCiBzdGF0aWMgdm9pZCBhdmVyYWdlX2FkZChzdHJ1Y3QgYXZlcmFnZSAqYXZnLCBzMTYgdmFsKQogewogCWF2Zy0+c3VtIC09IGF2Zy0+ZW50cmllc1thdmctPnBvc107CkBAIC0zODAwLDggKzM5NTcsOCBAQAogCXByaXYtPnF1YWxpdHkgPSAwOwogCiAJYXZlcmFnZV9pbml0KCZwcml2LT5hdmVyYWdlX21pc3NlZF9iZWFjb25zKTsKLQlhdmVyYWdlX2luaXQoJnByaXYtPmF2ZXJhZ2VfcnNzaSk7Ci0JYXZlcmFnZV9pbml0KCZwcml2LT5hdmVyYWdlX25vaXNlKTsKKwlwcml2LT5leHBfYXZnX3Jzc2kgPSAtNjA7CisJcHJpdi0+ZXhwX2F2Z19ub2lzZSA9IC04NSArIDB4MTAwOwogCiAJcHJpdi0+bGFzdF9yYXRlID0gMDsKIAlwcml2LT5sYXN0X21pc3NlZF9iZWFjb25zID0gMDsKQEAgLTQwMDgsNyArNDE2NSw3IEBACiAJSVBXX0RFQlVHX1NUQVRTKCJUeCBxdWFsaXR5ICAgOiAlM2QlJSAoJXUgZXJyb3JzLCAldSBwYWNrZXRzKVxuIiwKIAkJCXR4X3F1YWxpdHksIHR4X2ZhaWx1cmVzX2RlbHRhLCB0eF9wYWNrZXRzX2RlbHRhKTsKIAotCXJzc2kgPSBhdmVyYWdlX3ZhbHVlKCZwcml2LT5hdmVyYWdlX3Jzc2kpOworCXJzc2kgPSBwcml2LT5leHBfYXZnX3Jzc2k7CiAJc2lnbmFsX3F1YWxpdHkgPQogCSAgICAoMTAwICoKIAkgICAgIChwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgLSBwcml2LT5pZWVlLT53b3JzdF9yc3NpKSAqCkBAIC00MTg1LDcgKzQzNDIsNyBAQAogCQkJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwKIAkJCQkJCSAgICZwcml2LT5zeXN0ZW1fY29uZmlnKTsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAjZGVmaW5lIElQV19HRVRfUEFDS0VUX1NUWVBFKHgpIFdMQU5fRkNfR0VUX1NUWVBFKCBcCiAJCQkgbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSh4KSktPmZyYW1lX2N0bCkpCiAJCQkJCWlmICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FVVEgpICYmCkBAIC00NDgyLDYgKzQ2MzksMjQgQEAKIAkJCQkgJiYgcHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpCiAJCQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwKIAkJCQkJCSAgICZwcml2LT5yZXF1ZXN0X3NjYW4sIEhaKTsKKworCQkJLyogU2VuZCBhbiBlbXB0eSBldmVudCB0byB1c2VyIHNwYWNlLgorCQkJICogV2UgZG9uJ3Qgc2VuZCB0aGUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgZXZlbnQgYmVjYXVzZQorCQkJICogaXQgd291bGQgcmVxdWlyZSB1cyB0byBkbyBjb21wbGV4IHRyYW5zY29kaW5nLCBhbmQKKwkJCSAqIHdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIHdvcmsgZG9uZSBpbiB0aGUgaXJxIGhhbmRsZXIKKwkJCSAqIFVzZSBhIHJlcXVlc3QgdG8gZXh0cmFjdCB0aGUgZGF0YS4KKwkJCSAqIEFsc28sIHdlIGdlbmVyYXRlIHRoaXMgZXZlbiBmb3IgYW55IHNjYW4sIHJlZ2FyZGxlc3MKKwkJCSAqIG9uIGhvdyB0aGUgc2NhbiB3YXMgaW5pdGlhdGVkLiBVc2VyIHNwYWNlIGNhbiBqdXN0CisJCQkgKiBzeW5jIG9uIHBlcmlvZGljIHNjYW4gdG8gZ2V0IGZyZXNoIGRhdGEuLi4KKwkJCSAqIEplYW4gSUkgKi8KKwkJCWlmICh4LT5zdGF0dXMgPT0gU0NBTl9DT01QTEVURURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCisJCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHByaXYtPm5ldF9kZXYsIFNJT0NHSVdTQ0FOLAorCQkJCQkJICAgICZ3cnF1LCBOVUxMKTsKKwkJCX0KIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ1NzcsMTEgKzQ3NTIsMTAgQEAKIAogCWNhc2UgSE9TVF9OT1RJRklDQVRJT05fTk9JU0VfU1RBVFM6ewogCQkJaWYgKG5vdGlmLT5zaXplID09IHNpemVvZih1MzIpKSB7Ci0JCQkJcHJpdi0+bGFzdF9ub2lzZSA9Ci0JCQkJICAgICh1OCkgKGxlMzJfdG9fY3B1KG5vdGlmLT51Lm5vaXNlLnZhbHVlKSAmCi0JCQkJCSAgMHhmZik7Ci0JCQkJYXZlcmFnZV9hZGQoJnByaXYtPmF2ZXJhZ2Vfbm9pc2UsCi0JCQkJCSAgICBwcml2LT5sYXN0X25vaXNlKTsKKwkJCQlwcml2LT5leHBfYXZnX25vaXNlID0KKwkJCQkgICAgZXhwb25lbnRpYWxfYXZlcmFnZShwcml2LT5leHBfYXZnX25vaXNlLAorCQkJCSAgICAodTgpIChsZTMyX3RvX2NwdShub3RpZi0+dS5ub2lzZS52YWx1ZSkgJiAweGZmKSwKKwkJCQkgICAgREVQVEhfTk9JU0UpOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC02MTcwLDggKzYzNDQsNiBAQAogewogCS8qIG1ha2Ugc3VyZSBXUEEgaXMgZW5hYmxlZCAqLwogCWlwd193cGFfZW5hYmxlKHByaXYsIDEpOwotCi0JaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKIH0KIAogc3RhdGljIGludCBpcHdfc2V0X3Jzbl9jYXBhKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKQEAgLTYzNjUsNiArNjUzNyw3IEBACiAKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJCXJldCA9IGlwd193cGFfZW5hYmxlKHByaXYsIHBhcmFtLT52YWx1ZSk7CisJCWlwd19kaXNhc3NvY2lhdGUocHJpdik7CiAJCWJyZWFrOwogCiAJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgpAQCAtNjUwNiw3ICs2Njc5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAKIC8qIFFvUyAqLwogLyoKQEAgLTY4NTMsNjEgKzcwMjYsNTUgQEAKIAlyZXR1cm4gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV0gLSAxOwogfQogCi0vKgotKiBhZGQgUW9TIHBhcmFtZXRlciB0byB0aGUgVFggY29tbWFuZAotKi8KLXN0YXRpYyBpbnQgaXB3X3Fvc19zZXRfdHhfcXVldWVfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJCXUxNiBwcmlvcml0eSwKLQkJCQkJc3RydWN0IHRmZF9kYXRhICp0ZmQsIHU4IHVuaWNhc3QpCitzdGF0aWMgaW50IGlwd19pc19xb3NfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJldCA9IDA7Ci0JaW50IHR4X3F1ZXVlX2lkID0gMDsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgKnFvc19kYXRhID0gTlVMTDsKIAlpbnQgYWN0aXZlLCBzdXBwb3J0ZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCAqZGFkZHIgPSBza2ItPmRhdGEgKyBFVEhfQUxFTjsKKwlpbnQgdW5pY2FzdCA9ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkYWRkcik7CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkpCiAJCXJldHVybiAwOwogCiAJcW9zX2RhdGEgPSAmcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwotCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgewogCQlpZiAodW5pY2FzdCA9PSAwKQogCQkJcW9zX2RhdGEtPmFjdGl2ZSA9IDA7CiAJCWVsc2UKIAkJCXFvc19kYXRhLT5hY3RpdmUgPSBxb3NfZGF0YS0+c3VwcG9ydGVkOwogCX0KLQogCWFjdGl2ZSA9IHFvc19kYXRhLT5hY3RpdmU7CiAJc3VwcG9ydGVkID0gcW9zX2RhdGEtPnN1cHBvcnRlZDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmllZWUtPmxvY2ssIGZsYWdzKTsKLQogCUlQV19ERUJVR19RT1MoIlFvUyAgJWQgbmV0d29yayBpcyBRb1MgYWN0aXZlICVkICBzdXBwb3J0ZWQgJWQgICIKIAkJICAgICAgInVuaWNhc3QgJWRcbiIsCiAJCSAgICAgIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUsIGFjdGl2ZSwgc3VwcG9ydGVkLCB1bmljYXN0KTsKLQlpZiAoYWN0aXZlICYmIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpIHsKLQkJcmV0ID0gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV07Ci0JCXR4X3F1ZXVlX2lkID0gcmV0IC0gMTsKLQkJSVBXX0RFQlVHX1FPUygiUW9TIHBhY2tldCBwcmlvcml0eSBpcyAlZCBcbiIsIHByaW9yaXR5KTsKLQkJaWYgKHByaW9yaXR5IDw9IDcpIHsKLQkJCXRmZC0+dHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9RT1NfRU5BQkxFRDsKLQkJCXRmZC0+dGZkLnRmZF8yNi5tY2hkci5xb3NfY3RybCA9IHByaW9yaXR5OwotCQkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLmZyYW1lX2N0bCB8PQotCQkJICAgIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKKwlpZiAoYWN0aXZlICYmIHByaXYtPnFvc19kYXRhLnFvc19lbmFibGUpCisJCXJldHVybiAxOwogCi0JCQlpZiAocHJpdi0+cW9zX2RhdGEucW9zX25vX2Fja19tYXNrICYKLQkJCSAgICAoMVVMIDw8IHR4X3F1ZXVlX2lkKSkgewotCQkJCXRmZC0+dHhfZmxhZ3MgJj0gfkRDVF9GTEFHX0FDS19SRVFEOwotCQkJCXRmZC0+dGZkLnRmZF8yNi5tY2hkci5xb3NfY3RybCB8PQotCQkJCSAgICBDVFJMX1FPU19OT19BQ0s7Ci0JCQl9Ci0JCX0KKwlyZXR1cm4gMDsKKworfQorLyoKKyogYWRkIFFvUyBwYXJhbWV0ZXIgdG8gdGhlIFRYIGNvbW1hbmQKKyovCitzdGF0aWMgaW50IGlwd19xb3Nfc2V0X3R4X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGlwd19wcml2ICpwcml2LAorCQkJCQl1MTYgcHJpb3JpdHksCisJCQkJCXN0cnVjdCB0ZmRfZGF0YSAqdGZkKQoreworCWludCB0eF9xdWV1ZV9pZCA9IDA7CisKKworCXR4X3F1ZXVlX2lkID0gZnJvbV9wcmlvcml0eV90b190eF9xdWV1ZVtwcmlvcml0eV0gLSAxOworCXRmZC0+dHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9RT1NfRU5BQkxFRDsKKworCWlmIChwcml2LT5xb3NfZGF0YS5xb3Nfbm9fYWNrX21hc2sgJiAoMVVMIDw8IHR4X3F1ZXVlX2lkKSkgeworCQl0ZmQtPnR4X2ZsYWdzICY9IH5EQ1RfRkxBR19BQ0tfUkVRRDsKKwkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLnFvc19jdHJsIHw9IENUUkxfUU9TX05PX0FDSzsKIAl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNjk3Nyw3ICs3MTQ0LDcgQEAKIAkJCQlxb3NfcGFyYW0pOwogfQogCi0jZW5kaWYJCQkJLyogQ09ORklHX0lQV19RT1MgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9RT1MgKi8KIAogc3RhdGljIGludCBpcHdfYXNzb2NpYXRlX25ldHdvcmsoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCkBAIC03MTE2LDcgKzcyODMsNyBAQAogCWVsc2UKIAkJcHJpdi0+c3lzX2NvbmZpZy5hbnN3ZXJfYnJvYWRjYXN0X3NzaWRfcHJvYmUgPSAwOwogCi0JZXJyID0gaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2LCAmcHJpdi0+c3lzX2NvbmZpZyk7CisJZXJyID0gaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2KTsKIAlpZiAoZXJyKSB7CiAJCUlQV19ERUJVR19IQygiQXR0ZW1wdCB0byBzZW5kIHN5cyBjb25maWcgY29tbWFuZCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIGVycjsKQEAgLTcxNDEsNyArNzMwOCw3IEBACiAKIAlwcml2LT5hc3NvY19uZXR3b3JrID0gbmV0d29yazsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAJaXB3X3Fvc19hc3NvY2lhdGlvbihwcml2LCBuZXR3b3JrKTsKICNlbmRpZgogCkBAIC03NDE1LDcgKzc1ODIsNyBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9SQURJT1RBUAogc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkJICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCiAJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQpAQCAtNzQzMiwxNSArNzU5OSw3IEBACiAJLyogTWFnaWMgc3RydWN0IHRoYXQgc2xvdHMgaW50byB0aGUgcmFkaW90YXAgaGVhZGVyIC0tIG5vIHJlYXNvbgogCSAqIHRvIGJ1aWxkIHRoaXMgbWFudWFsbHkgZWxlbWVudCBieSBlbGVtZW50LCB3ZSBjYW4gd3JpdGUgaXQgbXVjaAogCSAqIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB3ZSBjYW4gcGFyc2UgaXQuIE9SREVSIE1BVFRFUlMgSEVSRSAqLwotCXN0cnVjdCBpcHdfcnRfaGRyIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgcnRfaGRyOwotCQl1OCBydF9mbGFnczsJLyogcmFkaW90YXAgcGFja2V0IGZsYWdzICovCi0JCXU4IHJ0X3JhdGU7CS8qIHJhdGUgaW4gNTAwa2IvcyAqLwotCQl1MTYgcnRfY2hhbm5lbDsJLyogY2hhbm5lbCBpbiBtaHogKi8KLQkJdTE2IHJ0X2NoYml0bWFzazsJLyogY2hhbm5lbCBiaXRmaWVsZCAqLwotCQlzOCBydF9kYm1zaWduYWw7CS8qIHNpZ25hbCBpbiBkYk0sIGtsdWdlZCB0byBzaWduZWQgKi8KLQkJdTggcnRfYW50ZW5uYTsJLyogYW50ZW5uYSBudW1iZXIgKi8KLQl9ICppcHdfcnQ7CisJc3RydWN0IGlwd19ydF9oZHIgKmlwd19ydDsKIAogCXNob3J0IGxlbiA9IGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpOwogCkBAIC03NDk0LDkgKzc2NTMsMTEgQEAKIAkvKiBCaWcgYml0ZmllbGQgb2YgYWxsIHRoZSBmaWVsZHMgd2UgcHJvdmlkZSBpbiByYWRpb3RhcCAqLwogCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPQogCSAgICAoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkgfAogCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKIAkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CiAJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSkgfAogCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEpKTsKIAogCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLwpAQCAtNzU4Miw2ICs3NzQzLDIxNyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworI2RlZmluZSBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcG9uc2UoZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYgXAorICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCApCisKKyNkZWZpbmUgaWVlZTgwMjExX2lzX21hbmFnZW1lbnQoZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQpCisKKyNkZWZpbmUgaWVlZTgwMjExX2lzX2NvbnRyb2woZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkKKworI2RlZmluZSBpZWVlODAyMTFfaXNfZGF0YShmYykgXAorICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKKworI2RlZmluZSBpZWVlODAyMTFfaXNfYXNzb2NfcmVxdWVzdChmYykgXAorICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKQorCisjZGVmaW5lIGllZWU4MDIxMV9pc19yZWFzc29jX3JlcXVlc3QoZmMpIFwKKyAgICgoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKQorCitzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX3Byb21pc2N1b3VzX3J4KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGlwd19yeF9mcmFtZSAqZnJhbWUgPSAmcGt0LT51LmZyYW1lOworCXN0cnVjdCBpcHdfcnRfaGRyICppcHdfcnQ7CisKKwkvKiBGaXJzdCBjYWNoZSBhbnkgaW5mb3JtYXRpb24gd2UgbmVlZCBiZWZvcmUgd2Ugb3ZlcndyaXRlCisJICogdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoZSBza2IgZnJvbSB0aGUgaGFyZHdhcmUgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXUxNiBjaGFubmVsID0gZnJhbWUtPnJlY2VpdmVkX2NoYW5uZWw7CisJdTggcGh5X2ZsYWdzID0gZnJhbWUtPmFudGVubmFBbmRQaHk7CisJczggc2lnbmFsID0gZnJhbWUtPnJzc2lfZGJtIC0gSVBXX1JTU0lfVE9fREJNOworCXM4IG5vaXNlID0gZnJhbWUtPm5vaXNlOworCXU4IHJhdGUgPSBmcmFtZS0+cmF0ZTsKKwlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKTsKKwl1NjQgdHNmID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBoZHJfb25seSA9IDA7CisJdTE2IGZpbHRlciA9IHByaXYtPnByb21fcHJpdi0+ZmlsdGVyOworCisJLyogSWYgdGhlIGZpbHRlciBpcyBzZXQgdG8gbm90IGluY2x1ZGUgUnggZnJhbWVzIHRoZW4gcmV0dXJuICovCisJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX1JYKQorCQlyZXR1cm47CisKKwkvKiBXZSByZWNlaXZlZCBkYXRhIGZyb20gdGhlIEhXLCBzbyBzdG9wIHRoZSB3YXRjaGRvZyAqLworCXByaXYtPnByb21fbmV0X2Rldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJaWYgKHVubGlrZWx5KChsZW4gKyBJUFdfUlhfRlJBTUVfU0laRSkgPiBza2JfdGFpbHJvb20ocnhiLT5za2IpKSkgeworCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlJUFdfREVCVUdfRFJPUCgiQ29ycnVwdGlvbiBkZXRlY3RlZCEgT2ggbm8hXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHByaXYtPnByb21fbmV0X2RldikpKSB7CisJCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3QgdXAuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIExpYnBjYXAgMC45LjMrIGNhbiBoYW5kbGUgdmFyaWFibGUgbGVuZ3RoIHJhZGlvdGFwLCBzbyB3ZSdsbCB1c2UKKwkgKiB0aGF0IG5vdyAqLworCWlmIChsZW4gPiBJUFdfUlhfQlVGX1NJWkUgLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSB7CisJCS8qIEZJWE1FOiBTaG91bGQgYWxsb2MgYmlnZ2VyIHNrYiBpbnN0ZWFkICovCisJCXByaXYtPnByb21fcHJpdi0+aWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlJUFdfREVCVUdfRFJPUCgiRHJvcHBpbmcgdG9vIGxhcmdlIHBhY2tldCBpbiBtb25pdG9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWhkciA9ICh2b2lkICopcnhiLT5za2ItPmRhdGEgKyBJUFdfUlhfRlJBTUVfU0laRTsKKwlpZiAoaWVlZTgwMjExX2lzX21hbmFnZW1lbnQoaGRyLT5mcmFtZV9jdGwpKSB7CisJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19NR01UKQorCQkJcmV0dXJuOworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTUdNVF9IRUFERVJfT05MWSkKKwkJCWhkcl9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19jb250cm9sKGhkci0+ZnJhbWVfY3RsKSkgeworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fQ1RMKQorCQkJcmV0dXJuOworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fQ1RMX0hFQURFUl9PTkxZKQorCQkJaGRyX29ubHkgPSAxOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jdGwpKSB7CisJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19EQVRBKQorCQkJcmV0dXJuOworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fREFUQV9IRUFERVJfT05MWSkKKwkJCWhkcl9vbmx5ID0gMTsKKwl9CisKKwkvKiBDb3B5IHRoZSBTS0Igc2luY2UgdGhpcyBpcyBmb3IgdGhlIHByb21pc2N1b3VzIHNpZGUgKi8KKwlza2IgPSBza2JfY29weShyeGItPnNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCUlQV19FUlJPUigic2tiX2Nsb25lIGZhaWxlZCBmb3IgcHJvbWlzY3VvdXMgY29weS5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogY29weSB0aGUgZnJhbWUgZGF0YSB0byB3cml0ZSBhZnRlciB3aGVyZSB0aGUgcmFkaW90YXAgaGVhZGVyIGdvZXMgKi8KKwlpcHdfcnQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKworCWlmIChoZHJfb25seSkKKwkJbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jdGwpOworCisJbWVtY3B5KGlwd19ydC0+cGF5bG9hZCwgaGRyLCBsZW4pOworCisJLyogWmVybyB0aGUgcmFkaW90YXAgc3RhdGljIGJ1ZmZlciAgLi4uICBXZSBvbmx5IG5lZWQgdG8gemVybyB0aGUgYnl0ZXMKKwkgKiBOT1QgcGFydCBvZiBvdXIgcmVhbCBoZWFkZXIsIHNhdmVzIGEgbGl0dGxlIHRpbWUuCisJICoKKwkgKiBObyBsb25nZXIgbmVjZXNzYXJ5IHNpbmNlIHdlIGZpbGwgaW4gYWxsIG91ciBkYXRhLiAgUHVyZ2UgYmVmb3JlCisJICogbWVyZ2luZyBwYXRjaCBvZmZpY2lhbGx5LgorCSAqIG1lbXNldChyeGItPnNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgaXB3X3J0X2hkciksIDAsCisJICogICAgICAgIElFRUU4MDIxMV9SQURJT1RBUF9IRFJMRU4gLSBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKTsKKwkgKi8KKworCWlwd19ydC0+cnRfaGRyLml0X3ZlcnNpb24gPSBQS1RIRFJfUkFESU9UQVBfVkVSU0lPTjsKKwlpcHdfcnQtPnJ0X2hkci5pdF9wYWQgPSAwOwkvKiBhbHdheXMgZ29vZCB0byB6ZXJvICovCisJaXB3X3J0LT5ydF9oZHIuaXRfbGVuID0gc2l6ZW9mKCppcHdfcnQpOwkvKiB0b3RhbCBoZWFkZXIrZGF0YSAqLworCisJLyogU2V0IHRoZSBzaXplIG9mIHRoZSBza2IgdG8gdGhlIHNpemUgb2YgdGhlIGZyYW1lICovCisJc2tiX3B1dChza2IsIGlwd19ydC0+cnRfaGRyLml0X2xlbiArIGxlbik7CisKKwkvKiBCaWcgYml0ZmllbGQgb2YgYWxsIHRoZSBmaWVsZHMgd2UgcHJvdmlkZSBpbiByYWRpb3RhcCAqLworCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPQorCSAgICAoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKKwkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CisJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSkgfAorCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEpKTsKKworCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLworCWlwd19ydC0+cnRfZmxhZ3MgPSAwOworCisJaXB3X3J0LT5ydF90c2YgPSB0c2Y7CisKKwkvKiBDb252ZXJ0IHRvIERCTSAqLworCWlwd19ydC0+cnRfZGJtc2lnbmFsID0gc2lnbmFsOworCWlwd19ydC0+cnRfZGJtbm9pc2UgPSBub2lzZTsKKworCS8qIENvbnZlcnQgdGhlIGNoYW5uZWwgZGF0YSBhbmQgc2V0IHRoZSBmbGFncyAqLworCWlwd19ydC0+cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGllZWU4MDIxMWNoYW4ybWh6KGNoYW5uZWwpKTsKKwlpZiAoY2hhbm5lbCA+IDE0KSB7CS8qIDgwMi4xMWEgKi8KKwkJaXB3X3J0LT5ydF9jaGJpdG1hc2sgPQorCQkgICAgY3B1X3RvX2xlMTYoKElFRUU4MDIxMV9DSEFOX09GRE0gfCBJRUVFODAyMTFfQ0hBTl81R0haKSk7CisJfSBlbHNlIGlmIChwaHlfZmxhZ3MgJiAoMSA8PCA1KSkgewkvKiA4MDIuMTFiICovCisJCWlwd19ydC0+cnRfY2hiaXRtYXNrID0KKwkJICAgIGNwdV90b19sZTE2KChJRUVFODAyMTFfQ0hBTl9DQ0sgfCBJRUVFODAyMTFfQ0hBTl8yR0haKSk7CisJfSBlbHNlIHsJCS8qIDgwMi4xMWcgKi8KKwkJaXB3X3J0LT5ydF9jaGJpdG1hc2sgPQorCQkgICAgKElFRUU4MDIxMV9DSEFOX09GRE0gfCBJRUVFODAyMTFfQ0hBTl8yR0haKTsKKwl9CisKKwkvKiBzZXQgdGhlIHJhdGUgaW4gbXVsdGlwbGVzIG9mIDUwMGsvcyAqLworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgSVBXX1RYX1JBVEVfMU1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAyOworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzJNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gNDsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV81TUI6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDEwOworCQlicmVhazsKKwljYXNlIElQV19UWF9SQVRFXzZNQjoKKwkJaXB3X3J0LT5ydF9yYXRlID0gMTI7CisJCWJyZWFrOworCWNhc2UgSVBXX1RYX1JBVEVfOU1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAxODsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8xMU1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAyMjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8xMk1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAyNDsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8xOE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAzNjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8yNE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSA0ODsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV8zNk1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSA3MjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV80OE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSA5NjsKKwkJYnJlYWs7CisJY2FzZSBJUFdfVFhfUkFURV81NE1COgorCQlpcHdfcnQtPnJ0X3JhdGUgPSAxMDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlwd19ydC0+cnRfcmF0ZSA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIGFudGVubmEgbnVtYmVyICovCisJaXB3X3J0LT5ydF9hbnRlbm5hID0gKHBoeV9mbGFncyAmIDMpOworCisJLyogc2V0IHRoZSBwcmVhbWJsZSBmbGFnIGlmIHdlIGhhdmUgaXQgKi8KKwlpZiAocGh5X2ZsYWdzICYgKDEgPDwgNikpCisJCWlwd19ydC0+cnRfZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfU0hPUlRQUkU7CisKKwlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHNrYi0+bGVuKTsKKworCWlmICghaWVlZTgwMjExX3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgc2tiLCBzdGF0cykpIHsKKwkJcHJpdi0+cHJvbV9wcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBpc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIpCiB7CkBAIC03ODA4LDE1ICs4MTgwLDIxIEBACiAKIAkJCQlwcml2LT5yeF9wYWNrZXRzKys7CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCWlmIChwcml2LT5wcm9tX25ldF9kZXYgJiYgbmV0aWZfcnVubmluZyhwcml2LT5wcm9tX25ldF9kZXYpKQorCQlpcHdfaGFuZGxlX3Byb21pc2N1b3VzX3J4KHByaXYsIHJ4YiwgJnN0YXRzKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogCQkJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKLQkJCQkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldF9tb25pdG9yKHByaXYsCi0JCQkJCQkJCSAgICAgICByeGIsCi0JCQkJCQkJCSAgICAgICAmc3RhdHMpOworI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCisKKyAgICAgICAgICAgICAgICBpcHdfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3IocHJpdiwKKwkJCQkJICAgICAgIHJ4YiwKKwkJCQkJICAgICAgICZzdGF0cyk7CiAjZWxzZQotCQkJCQlpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHByaXYsIHJ4YiwKLQkJCQkJCQkgICAgICAgJnN0YXRzKTsKKwkJaXB3X2hhbmRsZV9kYXRhX3BhY2tldChwcml2LCByeGIsCisJCQkJICAgICAgICZzdGF0cyk7CiAjZW5kaWYKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNzgzNyw5ICs4MjE1LDkgQEAKIAkJCQlpZiAobmV0d29ya19wYWNrZXQgJiYgcHJpdi0+YXNzb2NfbmV0d29yaykgewogCQkJCQlwcml2LT5hc3NvY19uZXR3b3JrLT5zdGF0cy5yc3NpID0KIAkJCQkJICAgIHN0YXRzLnJzc2k7Ci0JCQkJCWF2ZXJhZ2VfYWRkKCZwcml2LT5hdmVyYWdlX3Jzc2ksCi0JCQkJCQkgICAgc3RhdHMucnNzaSk7Ci0JCQkJCXByaXYtPmxhc3RfcnhfcnNzaSA9IHN0YXRzLnJzc2k7CisJCQkJCXByaXYtPmV4cF9hdmdfcnNzaSA9CisJCQkJCSAgICBleHBvbmVudGlhbF9hdmVyYWdlKHByaXYtPmV4cF9hdmdfcnNzaSwKKwkJCQkJICAgIHN0YXRzLnJzc2ksIERFUFRIX1JTU0kpOwogCQkJCX0KIAogCQkJCUlQV19ERUJVR19SWCgiRnJhbWU6IGxlbj0ldVxuIiwKQEAgLTc5ODIsMTAgKzgzNjAsMTAgQEAKIAkJSVBXX0RFQlVHX0lORk8oIkJpbmQgdG8gc3RhdGljIGNoYW5uZWwgJWRcbiIsIGNoYW5uZWwpOwogCQkvKiBUT0RPOiBWYWxpZGF0ZSB0aGF0IHByb3ZpZGVkIGNoYW5uZWwgaXMgaW4gcmFuZ2UgKi8KIAl9Ci0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKIAlpcHdfcW9zX2luaXQocHJpdiwgcW9zX2VuYWJsZSwgcW9zX2J1cnN0X2VuYWJsZSwKIAkJICAgICBidXJzdF9kdXJhdGlvbl9DQ0ssIGJ1cnN0X2R1cmF0aW9uX09GRE0pOwotI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIDE6CkBAIC03OTk2LDcgKzgzNzQsNyBAQAogI2lmZGVmIENPTkZJR19JUFcyMjAwX01PTklUT1IKIAljYXNlIDI6CiAJCXByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX01PTklUT1I7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9SQURJT1RBUAorI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCiAJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwogI2Vsc2UKIAkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CkBAIC04MjUxLDcgKzg2MjksNyBAQAogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwogCiAJaWYgKHdycXUtPm1vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9SQURJT1RBUAogCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKICNlbHNlCiAJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwpAQCAtODM3OSw3ICs4NzU3LDggQEAKIAkvKiBFdmVudCBjYXBhYmlsaXR5IChrZXJuZWwgKyBkcml2ZXIpICovCiAJcmFuZ2UtPmV2ZW50X2NhcGFbMF0gPSAoSVdfRVZFTlRfQ0FQQV9LXzAgfAogCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXVEhSU1BZKSB8Ci0JCQkJSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkpOworCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApIHwKKwkJCQlJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKIAlyYW5nZS0+ZXZlbnRfY2FwYVsxXSA9IElXX0VWRU5UX0NBUEFfS18xOwogCiAJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CkBAIC04NzM0LDYgKzkxMTMsNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmJpdHJhdGUudmFsdWUgPSBwcml2LT5sYXN0X3JhdGU7CisJd3JxdS0+Yml0cmF0ZS5maXhlZCA9IChwcml2LT5jb25maWcgJiBDRkdfRklYRURfUkFURSkgPyAxIDogMDsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlJUFdfREVCVUdfV1goIkdFVCBSYXRlIC0+ICVkIFxuIiwgd3JxdS0+Yml0cmF0ZS52YWx1ZSk7CiAJcmV0dXJuIDA7CkBAIC05MzUxLDcgKzk3MzEsNyBAQAogCUlQV19ERUJVR19XWCgiU0VUIE1PTklUT1I6ICVkICVkXG4iLCBlbmFibGUsIHBhcm1zWzFdKTsKIAlpZiAoZW5hYmxlKSB7CiAJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfUkFESU9UQVAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9SQURJT1RBUAogCQkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7CiAjZWxzZQogCQkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CkBAIC05NTc5LDggKzk5NTksOCBAQAogCX0KIAogCXdzdGF0cy0+cXVhbC5xdWFsID0gcHJpdi0+cXVhbGl0eTsKLQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBhdmVyYWdlX3ZhbHVlKCZwcml2LT5hdmVyYWdlX3Jzc2kpOwotCXdzdGF0cy0+cXVhbC5ub2lzZSA9IGF2ZXJhZ2VfdmFsdWUoJnByaXYtPmF2ZXJhZ2Vfbm9pc2UpOworCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHByaXYtPmV4cF9hdmdfcnNzaTsKKwl3c3RhdHMtPnF1YWwubm9pc2UgPSBwcml2LT5leHBfYXZnX25vaXNlOwogCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQgfCBJV19RVUFMX0xFVkVMX1VQREFURUQgfAogCSAgICBJV19RVUFMX05PSVNFX1VQREFURUQgfCBJV19RVUFMX0RCTTsKIApAQCAtOTYwOCw3ICs5OTg4LDkgQEAKIAlzeXNfY29uZmlnLT5kaXNhYmxlX3VuaWNhc3RfZGVjcnlwdGlvbiA9IDE7CiAJc3lzX2NvbmZpZy0+ZXhjbHVkZV9tdWx0aWNhc3RfdW5lbmNyeXB0ZWQgPSAwOwogCXN5c19jb25maWctPmRpc2FibGVfbXVsdGljYXN0X2RlY3J5cHRpb24gPSAxOwotCXN5c19jb25maWctPmFudGVubmFfZGl2ZXJzaXR5ID0gQ0ZHX1NZU19BTlRFTk5BX1NMT1dfRElWOworCWlmIChhbnRlbm5hIDwgQ0ZHX1NZU19BTlRFTk5BX0JPVEggfHwgYW50ZW5uYSA+IENGR19TWVNfQU5URU5OQV9CKQorCQlhbnRlbm5hID0gQ0ZHX1NZU19BTlRFTk5BX0JPVEg7CisJc3lzX2NvbmZpZy0+YW50ZW5uYV9kaXZlcnNpdHkgPSBhbnRlbm5hOwogCXN5c19jb25maWctPnBhc3NfY3JjX3RvX2hvc3QgPSAwOwkvKiBUT0RPOiBTZWUgaWYgMSBnaXZlcyB1cyBGQ1MgKi8KIAlzeXNfY29uZmlnLT5kb3QxMWdfYXV0b19kZXRlY3Rpb24gPSAwOwogCXN5c19jb25maWctPmVuYWJsZV9jdHNfdG9fc2VsZiA9IDA7CkBAIC05NjQ3LDExICsxMDAyOSwxMSBAQAogc3RhdGljIGludCBpcHdfdHhfc2tiKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiwKIAkJCSAgICAgaW50IHByaSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopCisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKQogCSAgICB0eGItPmZyYWdtZW50c1swXS0+ZGF0YTsKIAlpbnQgaSA9IDA7CiAJc3RydWN0IHRmZF9mcmFtZSAqdGZkOwotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAJaW50IHR4X2lkID0gaXB3X2dldF90eF9xdWV1ZV9udW1iZXIocHJpdiwgcHJpKTsKIAlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eF9pZF07CiAjZWxzZQpAQCAtOTY2Miw5ICsxMDA0NCw5IEBACiAJdTE2IHJlbWFpbmluZ19ieXRlczsKIAlpbnQgZmM7CiAKKwloZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKIAlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKIAljYXNlIElXX01PREVfQURIT0M6Ci0JCWhkcl9sZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOwogCQl1bmljYXN0ID0gIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOwogCQlpZCA9IGlwd19maW5kX3N0YXRpb24ocHJpdiwgaGRyLT5hZGRyMSk7CiAJCWlmIChpZCA9PSBJUFdfSU5WQUxJRF9TVEFUSU9OKSB7CkBAIC05NjgxLDcgKzEwMDYzLDYgQEAKIAljYXNlIElXX01PREVfSU5GUkE6CiAJZGVmYXVsdDoKIAkJdW5pY2FzdCA9ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIzKTsKLQkJaGRyX2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CiAJCWlkID0gMDsKIAkJYnJlYWs7CiAJfQpAQCAtOTc1OSw5ICsxMDE0MCwxMCBAQAogCQkvKiBObyBoYXJkd2FyZSBlbmNyeXB0aW9uICovCiAJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzIHw9IERDVF9GTEFHX05PX1dFUDsKIAotI2lmZGVmIENPTkZJR19JUFdfUU9TCi0JaXB3X3Fvc19zZXRfdHhfcXVldWVfY29tbWFuZChwcml2LCBwcmksICYodGZkLT51LmRhdGEpLCB1bmljYXN0KTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUworCWlmIChmYyAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkKKwkJaXB3X3Fvc19zZXRfdHhfcXVldWVfY29tbWFuZChwcml2LCBwcmksICYodGZkLT51LmRhdGEpKTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9RT1MgKi8KIAogCS8qIHBheWxvYWQgKi8KIAl0ZmQtPnUuZGF0YS5udW1fY2h1bmtzID0gY3B1X3RvX2xlMzIobWluKCh1OCkgKE5VTV9URkRfQ0hVTktTIC0gMiksCkBAIC05ODQxLDEyICsxMDIyMywxMiBAQAogc3RhdGljIGludCBpcHdfbmV0X2lzX3F1ZXVlX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotI2lmZGVmIENPTkZJR19JUFdfUU9TCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCiAJaW50IHR4X2lkID0gaXB3X2dldF90eF9xdWV1ZV9udW1iZXIocHJpdiwgcHJpKTsKIAlzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eF9pZF07CiAjZWxzZQogCXN0cnVjdCBjbHgyX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxWzBdOwotI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKIAlpZiAoaXB3X3F1ZXVlX3NwYWNlKCZ0eHEtPnEpIDwgdHhxLT5xLmhpZ2hfbWFyaykKIAkJcmV0dXJuIDE7CkBAIC05ODU0LDYgKzEwMjM2LDg4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9wcm9taXNjdW91c190eChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIGR1bW15c3RhdHM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1OCBuOworCXUxNiBmaWx0ZXIgPSBwcml2LT5wcm9tX3ByaXYtPmZpbHRlcjsKKwlpbnQgaGRyX29ubHkgPSAwOworCisJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX1RYKQorCQlyZXR1cm47CisKKwltZW1zZXQoJmR1bW15c3RhdHMsIDAsIHNpemVvZihkdW1teXN0YXRzKSk7CisKKwkvKiBGaWx0ZXJpbmcgb2YgZnJhZ21lbnQgY2hhaW5zIGlzIGRvbmUgYWdhaW5zIHRoZSBmaXJzdCBmcmFnbWVudCAqLworCWhkciA9ICh2b2lkICopdHhiLT5mcmFnbWVudHNbMF0tPmRhdGE7CisJaWYgKGllZWU4MDIxMV9pc19tYW5hZ2VtZW50KGhkci0+ZnJhbWVfY3RsKSkgeworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fTUdNVCkKKwkJCXJldHVybjsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX01HTVRfSEVBREVSX09OTFkpCisJCQloZHJfb25seSA9IDE7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfY29udHJvbChoZHItPmZyYW1lX2N0bCkpIHsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX0NUTCkKKwkJCXJldHVybjsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX0NUTF9IRUFERVJfT05MWSkKKwkJCWhkcl9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY3RsKSkgeworCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fREFUQSkKKwkJCXJldHVybjsKKwkJaWYgKGZpbHRlciAmIElQV19QUk9NX0RBVEFfSEVBREVSX09OTFkpCisJCQloZHJfb25seSA9IDE7CisJfQorCisJZm9yKG49MDsgbjx0eGItPm5yX2ZyYWdzOyArK24pIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNyYyA9IHR4Yi0+ZnJhZ21lbnRzW25dOworCQlzdHJ1Y3Qgc2tfYnVmZiAqZHN0OworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRfaGRyOworCQlpbnQgbGVuOworCisJCWlmIChoZHJfb25seSkgeworCQkJaGRyID0gKHZvaWQgKilzcmMtPmRhdGE7CisJCQlsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2N0bCk7CisJCX0gZWxzZQorCQkJbGVuID0gc3JjLT5sZW47CisKKwkJZHN0ID0gYWxsb2Nfc2tiKAorCQkJbGVuICsgSUVFRTgwMjExX1JBRElPVEFQX0hEUkxFTiwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KSBjb250aW51ZTsKKworCQlydF9oZHIgPSAodm9pZCAqKXNrYl9wdXQoZHN0LCBzaXplb2YoKnJ0X2hkcikpOworCisJCXJ0X2hkci0+aXRfdmVyc2lvbiA9IFBLVEhEUl9SQURJT1RBUF9WRVJTSU9OOworCQlydF9oZHItPml0X3BhZCA9IDA7CisJCXJ0X2hkci0+aXRfcHJlc2VudCA9IDA7IC8qIGFmdGVyIGFsbCwgaXQncyBqdXN0IGFuIGlkZWEgKi8KKwkJcnRfaGRyLT5pdF9wcmVzZW50IHw9ICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCk7CisKKwkJKih1MTYqKXNrYl9wdXQoZHN0LCBzaXplb2YodTE2KSkgPSBjcHVfdG9fbGUxNigKKwkJCWllZWU4MDIxMWNoYW4ybWh6KHByaXYtPmNoYW5uZWwpKTsKKwkJaWYgKHByaXYtPmNoYW5uZWwgPiAxNCkgCS8qIDgwMi4xMWEgKi8KKwkJCSoodTE2Kilza2JfcHV0KGRzdCwgc2l6ZW9mKHUxNikpID0KKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfQ0hBTl9PRkRNIHwKKwkJCQkJICAgICBJRUVFODAyMTFfQ0hBTl81R0haKTsKKwkJZWxzZSBpZiAocHJpdi0+aWVlZS0+bW9kZSA9PSBJRUVFX0IpIC8qIDgwMi4xMWIgKi8KKwkJCSoodTE2Kilza2JfcHV0KGRzdCwgc2l6ZW9mKHUxNikpID0KKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfQ0hBTl9DQ0sgfAorCQkJCQkgICAgIElFRUU4MDIxMV9DSEFOXzJHSFopOworCQllbHNlIAkJLyogODAyLjExZyAqLworCQkJKih1MTYqKXNrYl9wdXQoZHN0LCBzaXplb2YodTE2KSkgPQorCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9DSEFOX09GRE0gfAorCQkJCSBJRUVFODAyMTFfQ0hBTl8yR0haKTsKKworCQlydF9oZHItPml0X2xlbiA9IGRzdC0+bGVuOworCisJCW1lbWNweShza2JfcHV0KGRzdCwgbGVuKSwgc3JjLT5kYXRhLCBsZW4pOworCisJCWlmICghaWVlZTgwMjExX3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgZHN0LCAmZHVtbXlzdGF0cykpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShkc3QpOworCX0KK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGlwd19uZXRfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKIHsKQEAgLTk4NzEsNiArMTAzMzUsMTEgQEAKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCWlmIChydGFwX2lmYWNlICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkKKwkJaXB3X2hhbmRsZV9wcm9taXNjdW91c190eChwcml2LCB0eGIpOworI2VuZGlmCisKIAlyZXQgPSBpcHdfdHhfc2tiKHByaXYsIHR4YiwgcHJpKTsKIAlpZiAocmV0ID09IE5FVERFVl9UWF9PSykKIAkJX19pcHdfbGVkX2FjdGl2aXR5X29uKHByaXYpOwpAQCAtMTAxNjksMTAgKzEwNjM4LDEwIEBACiAJSU5JVF9XT1JLKCZwcml2LT5tZXJnZV9uZXR3b3JrcywKIAkJICAodm9pZCAoKikodm9pZCAqKSlpcHdfbWVyZ2VfYWRob2NfbmV0d29yaywgcHJpdik7CiAKLSNpZmRlZiBDT05GSUdfSVBXX1FPUworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogCUlOSVRfV09SSygmcHJpdi0+cW9zX2FjdGl2YXRlLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfcW9zX2FjdGl2YXRlLAogCQkgIHByaXYpOwotI2VuZGlmCQkJCS8qIENPTkZJR19JUFdfUU9TICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKIAl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCiAJCSAgICAgaXB3X2lycV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwcml2KTsKQEAgLTEwMzE4LDEyICsxMDc4NywyMSBAQAogCQkJICAgIHw9IENGR19CVF9DT0VYSVNURU5DRV9PT0I7CiAJfQogCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwlpZiAocHJpdi0+cHJvbV9uZXRfZGV2ICYmIG5ldGlmX3J1bm5pbmcocHJpdi0+cHJvbV9uZXRfZGV2KSkgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAxOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMTsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDE7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDE7CisJfQorI2VuZGlmCisKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQogCQlwcml2LT5zeXNfY29uZmlnLmFuc3dlcl9icm9hZGNhc3Rfc3NpZF9wcm9iZSA9IDE7CiAJZWxzZQogCQlwcml2LT5zeXNfY29uZmlnLmFuc3dlcl9icm9hZGNhc3Rfc3NpZF9wcm9iZSA9IDA7CiAKLQlpZiAoaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2LCAmcHJpdi0+c3lzX2NvbmZpZykpCisJaWYgKGlwd19zZW5kX3N5c3RlbV9jb25maWcocHJpdikpCiAJCWdvdG8gZXJyb3I7CiAKIAlpbml0X3N1cHBvcnRlZF9yYXRlcyhwcml2LCAmcHJpdi0+cmF0ZXMpOwpAQCAtMTAzMzUsMTAgKzEwODEzLDEwIEBACiAJCWlmIChpcHdfc2VuZF9ydHNfdGhyZXNob2xkKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpKQogCQkJZ290byBlcnJvcjsKIAl9Ci0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKIAlJUFdfREVCVUdfUU9TKCJRb1M6IGNhbGwgaXB3X3Fvc19hY3RpdmF0ZVxuIik7CiAJaXB3X3Fvc19hY3RpdmF0ZShwcml2LCBOVUxMKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiAJaWYgKGlwd19zZXRfcmFuZG9tX3NlZWQocHJpdikpCiAJCWdvdG8gZXJyb3I7CkBAIC0xMDYzOSw2ICsxMTExNyw3IEBACiAJCWlmIChwcml2LT5jbWRsb2cgPT0gTlVMTCkgewogCQkJSVBXX0VSUk9SKCJFcnJvciBhbGxvY2F0aW5nICVkIGNvbW1hbmQgbG9nIGVudHJpZXMuXG4iLAogCQkJCSAgY21kbG9nKTsKKwkJCXJldHVybiAtRU5PTUVNOwogCQl9IGVsc2UgewogCQkJbWVtc2V0KHByaXYtPmNtZGxvZywgMCwgc2l6ZW9mKCpwcml2LT5jbWRsb2cpICogY21kbG9nKTsKIAkJCXByaXYtPmNtZGxvZ19sZW4gPSBjbWRsb2c7CkBAIC0xMDg2MCw2ICsxMTMzOSwxMCBAQAogCSZkZXZfYXR0cl9sZWQuYXR0ciwKIAkmZGV2X2F0dHJfc3BlZWRfc2Nhbi5hdHRyLAogCSZkZXZfYXR0cl9uZXRfc3RhdHMuYXR0ciwKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCSZkZXZfYXR0cl9ydGFwX2lmYWNlLmF0dHIsCisJJmRldl9hdHRyX3J0YXBfZmlsdGVyLmF0dHIsCisjZW5kaWYKIAlOVUxMCiB9OwogCkBAIC0xMDg2OCw2ICsxMTM1MSwxMDkgQEAKIAkuYXR0cnMgPSBpcHdfc3lzZnNfZW50cmllcywKIH07CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworc3RhdGljIGludCBpcHdfcHJvbV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OworCisJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5vcGVuXG4iKTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAxOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMTsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDE7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDE7CisKKwkJaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfcHJvbV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OworCisJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5zdG9wXG4iKTsKKworCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgeworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAwOworCQlwcml2LT5zeXNfY29uZmlnLmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMDsKKwkJcHJpdi0+c3lzX2NvbmZpZy5hY2NlcHRfYWxsX21nbXRfYmNwciA9IDA7CisJCXByaXYtPnN5c19jb25maWcuYWNjZXB0X2FsbF9tZ210X2ZyYW1lcyA9IDA7CisKKwkJaXB3X3NlbmRfc3lzdGVtX2NvbmZpZyhwcml2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlJUFdfREVCVUdfSU5GTygicHJvbSBkZXYtPnhtaXRcbiIpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXB3X3Byb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcmV0dXJuICZwcm9tX3ByaXYtPmllZWUtPnN0YXRzOworfQorCitzdGF0aWMgaW50IGlwd19wcm9tX2FsbG9jKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKHByaXYtPnByb21fbmV0X2RldikKKwkJcmV0dXJuIC1FUEVSTTsKKworCXByaXYtPnByb21fbmV0X2RldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2Yoc3RydWN0IGlwd19wcm9tX3ByaXYpKTsKKwlpZiAocHJpdi0+cHJvbV9uZXRfZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+cHJvbV9wcml2ID0gaWVlZTgwMjExX3ByaXYocHJpdi0+cHJvbV9uZXRfZGV2KTsKKwlwcml2LT5wcm9tX3ByaXYtPmllZWUgPSBuZXRkZXZfcHJpdihwcml2LT5wcm9tX25ldF9kZXYpOworCXByaXYtPnByb21fcHJpdi0+cHJpdiA9IHByaXY7CisKKwlzdHJjcHkocHJpdi0+cHJvbV9uZXRfZGV2LT5uYW1lLCAicnRhcCVkIik7CisKKwlwcml2LT5wcm9tX25ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOworCXByaXYtPnByb21fbmV0X2Rldi0+b3BlbiA9IGlwd19wcm9tX29wZW47CisJcHJpdi0+cHJvbV9uZXRfZGV2LT5zdG9wID0gaXB3X3Byb21fc3RvcDsKKwlwcml2LT5wcm9tX25ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19wcm9tX2dldF9zdGF0czsKKwlwcml2LT5wcm9tX25ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlwd19wcm9tX2hhcmRfc3RhcnRfeG1pdDsKKworCXByaXYtPnByb21fcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfTU9OSVRPUjsKKworCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7CisJaWYgKHJjKSB7CisJCWZyZWVfaWVlZTgwMjExKHByaXYtPnByb21fbmV0X2Rldik7CisJCXByaXYtPnByb21fbmV0X2RldiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXB3X3Byb21fZnJlZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCit7CisJaWYgKCFwcml2LT5wcm9tX25ldF9kZXYpCisJCXJldHVybjsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7CisJZnJlZV9pZWVlODAyMTEocHJpdi0+cHJvbV9uZXRfZGV2KTsKKworCXByaXYtPnByb21fbmV0X2RldiA9IE5VTEw7Cit9CisKKyNlbmRpZgorCisKIHN0YXRpYyBpbnQgaXB3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTEwOTU5LDExICsxMTU0NSwxMiBAQAogCXByaXYtPmllZWUtPnNldF9zZWN1cml0eSA9IHNoaW1fX3NldF9zZWN1cml0eTsKIAlwcml2LT5pZWVlLT5pc19xdWV1ZV9mdWxsID0gaXB3X25ldF9pc19xdWV1ZV9mdWxsOwogCi0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKKwlwcml2LT5pZWVlLT5pc19xb3NfYWN0aXZlID0gaXB3X2lzX3Fvc19hY3RpdmU7CiAJcHJpdi0+aWVlZS0+aGFuZGxlX3Byb2JlX3Jlc3BvbnNlID0gaXB3X2hhbmRsZV9iZWFjb247CiAJcHJpdi0+aWVlZS0+aGFuZGxlX2JlYWNvbiA9IGlwd19oYW5kbGVfcHJvYmVfcmVzcG9uc2U7CiAJcHJpdi0+aWVlZS0+aGFuZGxlX2Fzc29jX3Jlc3BvbnNlID0gaXB3X2hhbmRsZV9hc3NvY19yZXNwb25zZTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CkBAIC0xMDk5Nyw2ICsxMTU4NCwxOCBAQAogCQlnb3RvIG91dF9yZW1vdmVfc3lzZnM7CiAJfQogCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwlpZiAocnRhcF9pZmFjZSkgeworCSAgICAgICAgZXJyID0gaXB3X3Byb21fYWxsb2MocHJpdik7CisJCWlmIChlcnIpIHsKKwkJCUlQV19FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIHByb21pc2N1b3VzIG5ldHdvcmsgIgorCQkJCSAgImRldmljZSAoZXJyb3IgJWQpLlxuIiwgZXJyKTsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPm5ldF9kZXYpOworCQkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOworCQl9CisJfQorI2VuZGlmCisKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IERldGVjdGVkIGdlb2dyYXBoeSAlcyAoJWQgODAyLjExYmcgIgogCSAgICAgICAiY2hhbm5lbHMsICVkIDgwMi4xMWEgY2hhbm5lbHMpXG4iLAogCSAgICAgICBwcml2LT5pZWVlLT5nZW8ubmFtZSwgcHJpdi0+aWVlZS0+Z2VvLmJnX2NoYW5uZWxzLApAQCAtMTEwNzYsNiArMTE2NzUsMTAgQEAKIAkJcHJpdi0+ZXJyb3IgPSBOVUxMOwogCX0KIAorI2lmZGVmIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTCisJaXB3X3Byb21fZnJlZShwcml2KTsKKyNlbmRpZgorCiAJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlpb3VubWFwKHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CkBAIC0xMTIwMCw3ICsxMTgwMywxMiBAQAogbW9kdWxlX3BhcmFtKGNoYW5uZWwsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNoYW5uZWwsICJjaGFubmVsIHRvIGxpbWl0IGFzc29jaWF0ZSB0byAoZGVmYXVsdCAwIFtBTlldKSIpOwogCi0jaWZkZWYgQ09ORklHX0lQV19RT1MKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworbW9kdWxlX3BhcmFtKHJ0YXBfaWZhY2UsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJ0YXBfaWZhY2UsICJjcmVhdGUgdGhlIHJ0YXAgaW50ZXJmYWNlICgxIC0gY3JlYXRlLCBkZWZhdWx0IDApIik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogbW9kdWxlX3BhcmFtKHFvc19lbmFibGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHFvc19lbmFibGUsICJlbmFibGUgYWxsIFFvUyBmdW5jdGlvbmFsaXRpcyIpOwogCkBAIC0xMTIxNSw3ICsxMTgyMyw3IEBACiAKIG1vZHVsZV9wYXJhbShidXJzdF9kdXJhdGlvbl9PRkRNLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidXJzdF9kdXJhdGlvbl9PRkRNLCAic2V0IE9GRE0gYnVyc3QgdmFsdWUiKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfTU9OSVRPUgogbW9kdWxlX3BhcmFtKG1vZGUsIGludCwgMDQ0NCk7CkBAIC0xMTIzOCw1ICsxMTg0Niw4IEBACiBtb2R1bGVfcGFyYW0ocm9hbWluZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mocm9hbWluZywgImVuYWJsZSByb2FtaW5nIHN1cHBvcnQgKGRlZmF1bHQgb24pIik7CiAKK21vZHVsZV9wYXJhbShhbnRlbm5hLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbnRlbm5hLCAic2VsZWN0IGFudGVubmEgMT1NYWluLCAzPUF1eCwgZGVmYXVsdCAwIFtib3RoXSwgMj1zbG93X2RpdmVyc2l0eSAoY2hvb3NlIHRoZSBvbmUgd2l0aCBsb3dlciBiYWNrZ3JvdW5kIG5vaXNlKSIpOworCiBtb2R1bGVfZXhpdChpcHdfZXhpdCk7CiBtb2R1bGVfaW5pdChpcHdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKaW5kZXggNGI5ODA0OS4uNjA0NGMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaApAQCAtNzg5LDcgKzc4OSw3IEBACiAJdTggYnRfY29leGlzdF9jb2xsaXNpb25fdGhyOwogCXU4IHNpbGVuY2VfdGhyZXNob2xkOwogCXU4IGFjY2VwdF9hbGxfbWdtdF9iY3ByOwotCXU4IGFjY2VwdF9hbGxfbWd0bV9mcmFtZXM7CisJdTggYWNjZXB0X2FsbF9tZ210X2ZyYW1lczsKIAl1OCBwYXNzX25vaXNlX3N0YXRzX3RvX2hvc3Q7CiAJdTggcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0xMTIyLDYgKzExMjIsNTIgQEAKIAl1OCBwYXlsb2FkWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUworCitlbnVtIGlwd19wcm9tX2ZpbHRlciB7CisJSVBXX1BST01fQ1RMX0hFQURFUl9PTkxZID0gKDEgPDwgMCksCisJSVBXX1BST01fTUdNVF9IRUFERVJfT05MWSA9ICgxIDw8IDEpLAorCUlQV19QUk9NX0RBVEFfSEVBREVSX09OTFkgPSAoMSA8PCAyKSwKKwlJUFdfUFJPTV9BTExfSEVBREVSX09OTFkgPSAweGYsIC8qIGJpdHMgMC4uMyAqLworCUlQV19QUk9NX05PX1RYID0gKDEgPDwgNCksCisJSVBXX1BST01fTk9fUlggPSAoMSA8PCA1KSwKKwlJUFdfUFJPTV9OT19DVEwgPSAoMSA8PCA2KSwKKwlJUFdfUFJPTV9OT19NR01UID0gKDEgPDwgNyksCisJSVBXX1BST01fTk9fREFUQSA9ICgxIDw8IDgpLAorfTsKKworc3RydWN0IGlwd19wcml2Oworc3RydWN0IGlwd19wcm9tX3ByaXYgeworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKKwllbnVtIGlwd19wcm9tX2ZpbHRlciBmaWx0ZXI7CisJaW50IHR4X3BhY2tldHM7CisJaW50IHJ4X3BhY2tldHM7Cit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFcyMjAwX1JBRElPVEFQKSB8fCBkZWZpbmVkKENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTKQorLyogTWFnaWMgc3RydWN0IHRoYXQgc2xvdHMgaW50byB0aGUgcmFkaW90YXAgaGVhZGVyIC0tIG5vIHJlYXNvbgorICogdG8gYnVpbGQgdGhpcyBtYW51YWxseSBlbGVtZW50IGJ5IGVsZW1lbnQsIHdlIGNhbiB3cml0ZSBpdCBtdWNoCisgKiBtb3JlIGVmZmljaWVudGx5IHRoYW4gd2UgY2FuIHBhcnNlIGl0LiBPUkRFUiBNQVRURVJTIEhFUkUKKyAqCisgKiBXaGVuIHNlbnQgdG8gdXMgdmlhIHRoZSBzaW11bGF0ZWQgUnggaW50ZXJmYWNlIGluIHN5c2ZzLCB0aGUgZW50aXJlCisgKiBzdHJ1Y3R1cmUgaXMgcHJvdmlkZWQgcmVnYXJkbGVzcyBvZiBhbnkgYml0cyB1bnNldC4KKyAqLworc3RydWN0IGlwd19ydF9oZHIgeworCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHJ0X2hkcjsKKwl1NjQgcnRfdHNmOyAgICAgIC8qIFRTRiAqLworCXU4IHJ0X2ZsYWdzOwkvKiByYWRpb3RhcCBwYWNrZXQgZmxhZ3MgKi8KKwl1OCBydF9yYXRlOwkvKiByYXRlIGluIDUwMGtiL3MgKi8KKwl1MTYgcnRfY2hhbm5lbDsJLyogY2hhbm5lbCBpbiBtaHogKi8KKwl1MTYgcnRfY2hiaXRtYXNrOwkvKiBjaGFubmVsIGJpdGZpZWxkICovCisJczggcnRfZGJtc2lnbmFsOwkvKiBzaWduYWwgaW4gZGJNLCBrbHVnZWQgdG8gc2lnbmVkICovCisJczggcnRfZGJtbm9pc2U7CisJdTggcnRfYW50ZW5uYTsJLyogYW50ZW5uYSBudW1iZXIgKi8KKwl1OCBwYXlsb2FkWzBdOyAgLyogcGF5bG9hZC4uLiAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZW5kaWYKKwogc3RydWN0IGlwd19wcml2IHsKIAkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKQEAgLTExMzMsNiArMTE3OSwxMiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwogCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKKwkvKiBQcm9taXNjdW91cyBtb2RlICovCisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcHJvbV9uZXRfZGV2OworI2VuZGlmCisKIAkvKiBwY2kgaGFyZHdhcmUgYWRkcmVzcyBzdXBwb3J0ICovCiAJdm9pZCBfX2lvbWVtICpod19iYXNlOwogCXVuc2lnbmVkIGxvbmcgaHdfbGVuOwpAQCAtMTE1MywxMSArMTIwNSw5IEBACiAJdTMyIGNvbmZpZzsKIAl1MzIgY2FwYWJpbGl0eTsKIAotCXU4IGxhc3RfcnhfcnNzaTsKLQl1OCBsYXN0X25vaXNlOwogCXN0cnVjdCBhdmVyYWdlIGF2ZXJhZ2VfbWlzc2VkX2JlYWNvbnM7Ci0Jc3RydWN0IGF2ZXJhZ2UgYXZlcmFnZV9yc3NpOwotCXN0cnVjdCBhdmVyYWdlIGF2ZXJhZ2Vfbm9pc2U7CisJczE2IGV4cF9hdmdfcnNzaTsKKwlzMTYgZXhwX2F2Z19ub2lzZTsKIAl1MzIgcG9ydF90eXBlOwogCWludCByeF9idWZzX21pbjsJICAvKio8IG1pbmltdW0gbnVtYmVyIG9mIGJ1ZnMgaW4gUnggcXVldWUgKi8KIAlpbnQgcnhfcGVuZF9tYXg7CSAgLyoqPCBtYXhpbXVtIHBlbmRpbmcgYnVmZmVycyBmb3Igb25lIElSUSAqLwpAQCAtMTMwOCw2ICsxMzU4LDI5IEBACiAKIC8qIGRlYnVnIG1hY3JvcyAqLwogCisvKiBEZWJ1ZyBhbmQgcHJpbnRmIHN0cmluZyBleHBhbnNpb24gaGVscGVycyBmb3IgcHJpbnRpbmcgYml0ZmllbGRzICovCisjZGVmaW5lIEJJVF9GTVQ4ICIlYyVjJWMlYy0lYyVjJWMlYyIKKyNkZWZpbmUgQklUX0ZNVDE2IEJJVF9GTVQ4ICI6IiBCSVRfRk1UOAorI2RlZmluZSBCSVRfRk1UMzIgQklUX0ZNVDE2ICIgIiBCSVRfRk1UMTYKKworI2RlZmluZSBCSVRDKHgseSkgKCgoeD4+eSkmMSk/JzEnOicwJykKKyNkZWZpbmUgQklUX0FSRzgoeCkgXAorQklUQyh4LDcpLEJJVEMoeCw2KSxCSVRDKHgsNSksQklUQyh4LDQpLFwKK0JJVEMoeCwzKSxCSVRDKHgsMiksQklUQyh4LDEpLEJJVEMoeCwwKQorCisjZGVmaW5lIEJJVF9BUkcxNih4KSBcCitCSVRDKHgsMTUpLEJJVEMoeCwxNCksQklUQyh4LDEzKSxCSVRDKHgsMTIpLFwKK0JJVEMoeCwxMSksQklUQyh4LDEwKSxCSVRDKHgsOSksQklUQyh4LDgpLFwKK0JJVF9BUkc4KHgpCisKKyNkZWZpbmUgQklUX0FSRzMyKHgpIFwKK0JJVEMoeCwzMSksQklUQyh4LDMwKSxCSVRDKHgsMjkpLEJJVEMoeCwyOCksXAorQklUQyh4LDI3KSxCSVRDKHgsMjYpLEJJVEMoeCwyNSksQklUQyh4LDI0KSxcCitCSVRDKHgsMjMpLEJJVEMoeCwyMiksQklUQyh4LDIxKSxCSVRDKHgsMjApLFwKK0JJVEMoeCwxOSksQklUQyh4LDE4KSxCSVRDKHgsMTcpLEJJVEMoeCwxNiksXAorQklUX0FSRzE2KHgpCisKKwogI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiAjZGVmaW5lIElQV19ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCiBkbyB7IGlmIChpcHdfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKaW5kZXggYzJkMGIwOS4uOGEzMWI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwpAQCAtMjAxLDQxICsyMDEsMTIgQEAKIC8qIERhdGEgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogVXNlZCBpbiBFdmVudCBoYW5kbGluZy4KLSAqIFdlIGF2b2lkIG5lc3RlZCBzdHJ1Y3R1cmVzIGFzIHRoZXkgYnJlYWsgb24gQVJNIC0tIE1vdXN0YWZhICovCi1zdHJ1Y3QgaGVybWVzX3R4X2Rlc2NyaXB0b3JfODAyXzExIHsKLQkvKiBoZXJtZXNfdHhfZGVzY3JpcHRvciAqLwotCV9fbGUxNiBzdGF0dXM7Ci0JX19sZTE2IHJlc2VydmVkMTsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotCV9fbGUzMiBzd19zdXBwb3J0OwotCXU4IHJldHJ5X2NvdW50OwotCXU4IHR4X3JhdGU7Ci0JX19sZTE2IHR4X2NvbnRyb2w7Ci0KLQkvKiBpZWVlODAyMTFfaGRyICovCisvKiBCZWdpbm5pbmcgb2YgdGhlIFR4IGRlc2NyaXB0b3IsIHVzZWQgaW4gVHhFeGMgaGFuZGxpbmcgKi8KK3N0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSB7CisJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CiAJX19sZTE2IGZyYW1lX2N0bDsKIAlfX2xlMTYgZHVyYXRpb25faWQ7CiAJdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggYWRkcjRbRVRIX0FMRU5dOwotCi0JX19sZTE2IGRhdGFfbGVuOwotCi0JLyogZXRoaGRyICovCi0JdTggaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIgKi8KLQl1OCBoX3NvdXJjZVtFVEhfQUxFTl07CS8qIHNvdXJjZSBldGhlciBhZGRyICAgICovCi0JX19iZTE2IGhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAqLwotCi0JLyogcDgwMjJfaGRyICovCi0JdTggZHNhcDsKLQl1OCBzc2FwOwotCXU4IGN0cmw7Ci0JdTggb3VpWzNdOwotCi0JX19iZTE2IGV0aGVydHlwZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBSeCBmcmFtZSBoZWFkZXIgZXhjZXB0IGNvbXBhdGliaWxpdHkgODAyLjMgaGVhZGVyICovCkBAIC00NTAsNTMgKzQyMSwzOSBAQAogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyID0gMDsKIAl1MTYgdHhmaWQgPSBwcml2LT50eGZpZDsKLQljaGFyICpwOwogCXN0cnVjdCBldGhoZHIgKmVoOwotCWludCBsZW4sIGRhdGFfbGVuLCBkYXRhX29mZjsKKwlpbnQgZGF0YV9vZmY7CiAJc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yIGRlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAlpZiAoISBuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVHggb24gc3RvcHBlZCBkZXZpY2UhXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAkKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggd2hpbGUgdHJhbnNtaXR0ZXIgYnVzeSFcbiIsIAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAkKIAlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3htaXQoKSBjYWxsZWQgd2hpbGUgaHdfdW5hdmFpbGFibGVcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwotCQlUUkFDRV9FWElUKGRldi0+bmFtZSk7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCiAJaWYgKCEgbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8IChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikpIHsKIAkJLyogT29wcywgdGhlIGZpcm13YXJlIGhhc24ndCBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0ICh0aGlzIHNlZW1zIHRvIGJlIHRoZQogICAgICAgICAgICAgICAgICAgIHNhZmVzdCBhcHByb2FjaCkuICovCi0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlUUkFDRV9FWElUKGRldi0+bmFtZSk7Ci0JCXJldHVybiAwOworCQlnb3RvIGRyb3A7CiAJfQogCi0JLyogTGVuZ3RoIG9mIHRoZSBwYWNrZXQgYm9keSAqLwotCS8qIEZJWE1FOiB3aGF0IGlmIHRoZSBza2IgaXMgc21hbGxlciB0aGFuIHRoaXM/ICovCi0JbGVuID0gbWF4X3QoaW50LCBBTElHTihza2ItPmxlbiwgMiksIEVUSF9aTEVOKTsKLQlza2IgPSBza2JfcGFkdG8oc2tiLCBsZW4pOwotCWlmIChza2IgPT0gTlVMTCkKLQkJZ290byBmYWlsOwotCWxlbiAtPSBFVEhfSExFTjsKKwkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCisJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pCisJCWdvdG8gZHJvcDsKIAogCWVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAKQEAgLTUwNyw4ICs0NjQsNyBAQAogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCBkZXNjcmlwdG9yICIKIAkJCSAgICAgICAidG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJZ290byBmYWlsOworCQlnb3RvIGJ1c3k7CiAJfQogCiAJLyogQ2xlYXIgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGRhdGEgbGVuZ3RoIGZpZWxkcyAtIHNvbWUKQEAgLTUxOSw1MCArNDc1LDM4IEBACiAKIAkvKiBFbmNhcHN1bGF0ZSBFdGhlcm5ldC1JSSBmcmFtZXMgKi8KIAlpZiAobnRvaHMoZWgtPmhfcHJvdG8pID4gRVRIX0RBVEFfTEVOKSB7IC8qIEV0aGVybmV0LUlJIGZyYW1lICovCi0JCXN0cnVjdCBoZWFkZXJfc3RydWN0IGhkcjsKLQkJZGF0YV9sZW4gPSBsZW47Ci0JCWRhdGFfb2ZmID0gSEVSTUVTXzgwMl8zX09GRlNFVCArIHNpemVvZihoZHIpOwotCQlwID0gc2tiLT5kYXRhICsgRVRIX0hMRU47CisJCXN0cnVjdCBoZWFkZXJfc3RydWN0IHsKKwkJCXN0cnVjdCBldGhoZHIgZXRoOwkvKiA4MDIuMyBoZWFkZXIgKi8KKwkJCXU4IGVuY2FwWzZdOwkJLyogODAyLjIgaGVhZGVyICovCisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhkcjsKIAotCQkvKiA4MDIuMyBoZWFkZXIgKi8KLQkJbWVtY3B5KGhkci5kZXN0LCBlaC0+aF9kZXN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShoZHIuc3JjLCBlaC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKLQkJaGRyLmxlbiA9IGh0b25zKGRhdGFfbGVuICsgRU5DQVBTX09WRVJIRUFEKTsKLQkJCi0JCS8qIDgwMi4yIGhlYWRlciAqLwotCQltZW1jcHkoJmhkci5kc2FwLCAmZW5jYXBzX2hkciwgc2l6ZW9mKGVuY2Fwc19oZHIpKTsKLQkJCQotCQloZHIuZXRoZXJ0eXBlID0gZWgtPmhfcHJvdG87Ci0JCWVyciAgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZoZHIsIHNpemVvZihoZHIpLAotCQkJCQkgdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQpOworCQkvKiBTdHJpcCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIGZyb20gdGhlIGRhdGEgKi8KKwkJc2tiX3B1bGwoc2tiLCAyICogRVRIX0FMRU4pOworCQlkYXRhX29mZiA9IEhFUk1FU184MDJfMl9PRkZTRVQgKyBzaXplb2YoZW5jYXBzX2hkcik7CisKKwkJLyogQW5kIG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGhlYWRlciAqLworCQltZW1jcHkoJmhkci5ldGgsIGVoLCAyICogRVRIX0FMRU4pOworCQloZHIuZXRoLmhfcHJvdG8gPSBodG9ucyhzaXplb2YoZW5jYXBzX2hkcikgKyBza2ItPmxlbik7CisJCW1lbWNweShoZHIuZW5jYXAsIGVuY2Fwc19oZHIsIHNpemVvZihlbmNhcHNfaGRyKSk7CisKKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmaGRyLCBzaXplb2YoaGRyKSwKKwkJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQpOwogCQlpZiAoZXJyKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgcGFja2V0ICIKIAkJCQkgICAgICAgImhlYWRlciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gYnVzeTsKIAkJfQotCQkvKiBBY3R1YWwgeGZlciBsZW5ndGggLSBhbGxvdyBmb3IgcGFkZGluZyAqLwotCQlsZW4gPSBBTElHTihkYXRhX2xlbiwgMik7Ci0JCWlmIChsZW4gPCBFVEhfWkxFTiAtIEVUSF9ITEVOKQotCQkJbGVuID0gRVRIX1pMRU4gLSBFVEhfSExFTjsKIAl9IGVsc2UgeyAvKiBJRUVFIDgwMi4zIGZyYW1lICovCi0JCWRhdGFfbGVuID0gbGVuICsgRVRIX0hMRU47CiAJCWRhdGFfb2ZmID0gSEVSTUVTXzgwMl8zX09GRlNFVDsKLQkJcCA9IHNrYi0+ZGF0YTsKLQkJLyogQWN0dWFsIHhmZXIgbGVuZ3RoIC0gcm91bmQgdXAgZm9yIG9kZCBsZW5ndGggcGFja2V0cyAqLwotCQlsZW4gPSBBTElHTihkYXRhX2xlbiwgMik7Ci0JCWlmIChsZW4gPCBFVEhfWkxFTikKLQkJCWxlbiA9IEVUSF9aTEVOOwogCX0KIAotCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlX3BhZChodywgVVNFUl9CQVAsIHAsIGRhdGFfbGVuLCBsZW4sCisJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJCXR4ZmlkLCBkYXRhX29mZik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIHBhY2tldCB0byBCQVBcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJZ290byBmYWlsOworCQlnb3RvIGJ1c3k7CiAJfQogCiAJLyogRmluYWxseSwgd2UgYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHNlbmQgKi8KQEAgLTU3NSwyNSArNTE5LDI3IEBACiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB0cmFuc21pdHRpbmcgcGFja2V0XG4iLAogCQkJCWRldi0+bmFtZSwgZXJyKTsKLQkJc3RhdHMtPnR4X2Vycm9ycysrOwotCQlnb3RvIGZhaWw7CisJCWdvdG8gYnVzeTsKIAl9CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gZGF0YV9vZmYgKyBkYXRhX2xlbjsKKwlzdGF0cy0+dHhfYnl0ZXMgKz0gZGF0YV9vZmYgKyBza2ItPmxlbjsKKwlnb3RvIG9rOwogCisgZHJvcDoKKwlzdGF0cy0+dHhfZXJyb3JzKys7CisJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKworIG9rOgogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAotCVRSQUNFX0VYSVQoZGV2LT5uYW1lKTsKLQotCXJldHVybiAwOwotIGZhaWw6Ci0JVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCisgYnVzeToKKwlpZiAoZXJyID09IC1FSU8pCisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKIHN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCkBAIC02MjksNyArNTc1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CiAJdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpOwogCXUxNiBzdGF0dXM7Ci0Jc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yXzgwMl8xMSBoZHI7CisJc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIGhkcjsKIAlpbnQgZXJyID0gMDsKIAogCWlmIChmaWQgPT0gRFVNTVlfRklEKQpAQCAtNjM3LDggKzU4Myw3IEBACiAKIAkvKiBSZWFkIHBhcnQgb2YgdGhlIGZyYW1lIGhlYWRlciAtIHdlIG5lZWQgc3RhdHVzIGFuZCBhZGRyMSAqLwogCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZoZHIsCi0JCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGhlcm1lc190eF9kZXNjcmlwdG9yXzgwMl8xMSwKLQkJCQkJYWRkcjIpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEpLAogCQkJICAgICAgIGZpZCwgMCk7CiAKIAloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKQEAgLTY1OCw3ICs2MDMsNyBAQAogCSAqIGV4Y2VlZGVkLCBiZWNhdXNlIHRoYXQncyB0aGUgb25seSBzdGF0dXMgdGhhdCByZWFsbHkgbWVhbgogCSAqIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIG5vZGUgd2VudCBhd2F5LgogCSAqIE90aGVyIGVycm9ycyBtZWFucyB0aGF0ICp3ZSogc2NyZXdlZCB1cC4gLSBKZWFuIElJICovCi0Jc3RhdHVzID0gbGUxNl90b19jcHUoaGRyLnN0YXR1cyk7CisJc3RhdHVzID0gbGUxNl90b19jcHUoaGRyLmRlc2Muc3RhdHVzKTsKIAlpZiAoc3RhdHVzICYgKEhFUk1FU19UWFNUQVRfUkVUUllFUlIgfCBIRVJNRVNfVFhTVEFUX0FHRURFUlIpKSB7CiAJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKIApAQCAtMTM5OCwxNiArMTM0MywxMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb3Jpbm9jb19hbGxvY2F0ZV9maWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyOwogCi0JZXJyID0gaGVybWVzX2luaXQoaHcpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOwogCWlmIChlcnIgPT0gLUVJTyAmJiBwcml2LT5uaWNidWZfc2l6ZSA+IFRYX05JQ0JVRl9TSVpFX0JVRykgewogCQkvKiBUcnkgd29ya2Fyb3VuZCBmb3Igb2xkIFN5bWJvbCBmaXJtd2FyZSBidWcgKi8KQEAgLTE0MjYsNiArMTM2NywxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKK2ludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfaW5pdChodyk7CisJaWYgKCFlcnIpCisJCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQogewogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKQEAgLTE4MzMsNyArMTc4Nyw5IEBACiAJLyogU2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KIAlwcml2LT5wcm9taXNjdW91cyA9IDA7CiAJcHJpdi0+bWNfY291bnQgPSAwOwotCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsgLyogRklYTUU6IHdoYXQgYWJvdXQgdGhlIHhtaXRfbG9jayAqLworCisJLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLworCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI3MiwxNCArMjIyOCwxMiBAQAogCXUxNiByZWNsZW47CiAJaW50IGxlbjsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAkvKiBObyBuZWVkIHRvIGxvY2ssIHRoZSBod191bmF2YWlsYWJsZSBmbGFnIGlzIGFscmVhZHkgc2V0IGluCiAJICogYWxsb2Nfb3Jpbm9jb2RldigpICovCiAJcHJpdi0+bmljYnVmX3NpemUgPSBJRUVFODAyMTFfRlJBTUVfTEVOICsgRVRIX0hMRU47CiAKIAkvKiBJbml0aWFsaXplIHRoZSBmaXJtd2FyZSAqLwotCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CisJZXJyID0gaGVybWVzX2luaXQoaHcpOwogCWlmIChlcnIgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwpAQCAtMjMzNyw2ICsyMjkxLDEzIEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gbmFtZSBcIiVzXCJcbiIsIGRldi0+bmFtZSwgcHJpdi0+bmljayk7CiAKKwllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIE5JQyBidWZmZXIhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogR2V0IGFsbG93ZWQgY2hhbm5lbHMgKi8KIAllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DSEFOTkVMTElTVCwKIAkJCQkgICZwcml2LT5jaGFubmVsX21hc2spOwpAQCAtMjQyNyw3ICsyMzg4LDYgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlYWR5XG4iLCBkZXYtPm5hbWUpOwogCiAgb3V0OgotCVRSQUNFX0VYSVQoZGV2LT5uYW1lKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNzk1LDggKzI3NTUsNiBAQAogCWludCBudW1yYXRlczsKIAlpbnQgaSwgazsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAlycnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwogCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwogCkBAIC0yODg2LDggKzI4NDQsNiBAQAogCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CiAJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIElXRVZUWERST1ApOwogCi0JVFJBQ0VfRVhJVChkZXYtPm5hbWUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNjksOCArMzAyNSw2IEBACiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVRSQUNFX0VOVEVSKGRldi0+bmFtZSk7Ci0KIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCWVyciA9IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHByaXYsICZhY3RpdmUsIGVzc2lkYnVmKTsKIAkJaWYgKGVycikKQEAgLTMwODUsOCArMzAzOSw2IEBACiAJZXJxLT5mbGFncyA9IDE7CiAJZXJxLT5sZW5ndGggPSBzdHJsZW4oZXNzaWRidWYpICsgMTsKIAotCVRSQUNFX0VYSVQoZGV2LT5uYW1lKTsKLQkKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM0Nyw2OSArNDI5OSw2IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZiAwCi1zdGF0aWMgdm9pZCBzaG93X3J4X2ZyYW1lKHN0cnVjdCBvcmlub2NvX3J4ZnJhbWVfaGRyICpmcmFtZSkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiUlggZGVzY3JpcHRvcjpcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHN0YXR1cyAgICAgID0gMHglMDR4XG4iLCBmcmFtZS0+ZGVzYy5zdGF0dXMpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHRpbWUgICAgICAgID0gMHglMDh4XG4iLCBmcmFtZS0+ZGVzYy50aW1lKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBzaWxlbmNlICAgICA9IDB4JTAyeFxuIiwgZnJhbWUtPmRlc2Muc2lsZW5jZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgc2lnbmFsICAgICAgPSAweCUwMnhcbiIsIGZyYW1lLT5kZXNjLnNpZ25hbCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgcmF0ZSAgICAgICAgPSAweCUwMnhcbiIsIGZyYW1lLT5kZXNjLnJhdGUpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHJ4ZmxvdyAgICAgID0gMHglMDJ4XG4iLCBmcmFtZS0+ZGVzYy5yeGZsb3cpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIHJlc2VydmVkICAgID0gMHglMDh4XG4iLCBmcmFtZS0+ZGVzYy5yZXNlcnZlZCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiSUVFRSA4MDIuMTEgaGVhZGVyOlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgZnJhbWVfY3RsICAgPSAweCUwNHhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMTEuZnJhbWVfY3RsKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBkdXJhdGlvbl9pZCA9IDB4JTA0eFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5kdXJhdGlvbl9pZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjEgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMVswXSwgZnJhbWUtPnA4MDIxMS5hZGRyMVsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMVsyXSwgZnJhbWUtPnA4MDIxMS5hZGRyMVszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMVs0XSwgZnJhbWUtPnA4MDIxMS5hZGRyMVs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjIgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMlswXSwgZnJhbWUtPnA4MDIxMS5hZGRyMlsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMlsyXSwgZnJhbWUtPnA4MDIxMS5hZGRyMlszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyMls0XSwgZnJhbWUtPnA4MDIxMS5hZGRyMls1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjMgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyM1swXSwgZnJhbWUtPnA4MDIxMS5hZGRyM1sxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyM1syXSwgZnJhbWUtPnA4MDIxMS5hZGRyM1szXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyM1s0XSwgZnJhbWUtPnA4MDIxMS5hZGRyM1s1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgc2VxX2N0bCAgICAgPSAweCUwNHhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMTEuc2VxX2N0bCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWRkcjQgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyNFswXSwgZnJhbWUtPnA4MDIxMS5hZGRyNFsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyNFsyXSwgZnJhbWUtPnA4MDIxMS5hZGRyNFszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIxMS5hZGRyNFs0XSwgZnJhbWUtPnA4MDIxMS5hZGRyNFs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgZGF0YV9sZW4gICAgPSAweCUwNHhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMTEuZGF0YV9sZW4pOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIklFRUUgODAyLjMgaGVhZGVyOlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgZGVzdCAgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfZGVzdFswXSwgZnJhbWUtPnA4MDIzLmhfZGVzdFsxXSwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfZGVzdFsyXSwgZnJhbWUtPnA4MDIzLmhfZGVzdFszXSwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfZGVzdFs0XSwgZnJhbWUtPnA4MDIzLmhfZGVzdFs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgc3JjICAgICAgICAgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkgICAgICAgZnJhbWUtPnA4MDIzLmhfc291cmNlWzBdLCBmcmFtZS0+cDgwMjMuaF9zb3VyY2VbMV0sCi0JICAgICAgIGZyYW1lLT5wODAyMy5oX3NvdXJjZVsyXSwgZnJhbWUtPnA4MDIzLmhfc291cmNlWzNdLAotCSAgICAgICBmcmFtZS0+cDgwMjMuaF9zb3VyY2VbNF0sIGZyYW1lLT5wODAyMy5oX3NvdXJjZVs1XSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgbGVuICAgICAgICAgPSAweCUwNHhcbiIsIGZyYW1lLT5wODAyMy5oX3Byb3RvKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJJRUVFIDgwMi4yIExMQy9TTkFQIGhlYWRlcjpcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIERTQVAgICAgICAgID0gMHglMDJ4XG4iLCBmcmFtZS0+cDgwMjIuZHNhcCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgU1NBUCAgICAgICAgPSAweCUwMnhcbiIsIGZyYW1lLT5wODAyMi5zc2FwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiICBjdHJsICAgICAgICA9IDB4JTAyeFxuIiwgZnJhbWUtPnA4MDIyLmN0cmwpOwotCXByaW50ayhLRVJOX0RFQlVHICIgIE9VSSAgICAgICAgID0gJTAyeDolMDJ4OiUwMnhcbiIsCi0JICAgICAgIGZyYW1lLT5wODAyMi5vdWlbMF0sIGZyYW1lLT5wODAyMi5vdWlbMV0sIGZyYW1lLT5wODAyMi5vdWlbMl0pOwotCXByaW50ayhLRVJOX0RFQlVHICIgIGV0aGVydHlwZSAgPSAweCUwNHhcbiIsIGZyYW1lLT5ldGhlcnR5cGUpOwotfQotI2VuZGlmIC8qIDAgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTW9kdWxlIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmgKaW5kZXggZjVkODU2ZC4uMTZkYjNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uaApAQCAtNyw3ICs3LDcgQEAKICNpZm5kZWYgX09SSU5PQ09fSAogI2RlZmluZSBfT1JJTk9DT19ICiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMTVyYzMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjE1IgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KQEAgLTMwLDIwICszMCw2IEBACiAJY2hhciBkYXRhW09SSU5PQ09fTUFYX0tFWV9TSVpFXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgaGVhZGVyX3N0cnVjdCB7Ci0JLyogODAyLjMgKi8KLQl1OCBkZXN0W0VUSF9BTEVOXTsKLQl1OCBzcmNbRVRIX0FMRU5dOwotCV9fYmUxNiBsZW47Ci0JLyogODAyLjIgKi8KLQl1OCBkc2FwOwotCXU4IHNzYXA7Ci0JdTggY3RybDsKLQkvKiBTTkFQICovCi0JdTggb3VpWzNdOwotCXVuc2lnbmVkIHNob3J0IGV0aGVydHlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiB0eXBlZGVmIGVudW0gewogCUZJUk1XQVJFX1RZUEVfQUdFUkUsCiAJRklSTVdBUkVfVFlQRV9JTlRFUlNJTCwKQEAgLTEzMiw5ICsxMTgsNiBAQAogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLwogCi0jZGVmaW5lIFRSQUNFX0VOVEVSKGRldm5hbWUpIERFQlVHKDIsICIlczogLT4gJXMoKVxuIiwgZGV2bmFtZSwgX19GVU5DVElPTl9fKTsKLSNkZWZpbmUgVFJBQ0VfRVhJVChkZXZuYW1lKSAgREVCVUcoMiwgIiVzOiA8LSAlcygpXG4iLCBkZXZuYW1lLCBfX0ZVTkNUSU9OX18pOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBFeHBvcnRlZCBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKaW5kZXggNDM0ZjdkNy4uYjJhZWM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwpAQCAtMTQ3LDE0ICsxNDcsMTEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKIAorCWlmIChsaW5rLT5kZXZfbm9kZSkKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwogCW9yaW5vY29fY3NfcmVsZWFzZShsaW5rKTsKIAotCURFQlVHKDAsIFBGWCAiZGV0YWNoOiBsaW5rPSVwIGxpbmstPmRldl9ub2RlPSVwXG4iLCBsaW5rLCBsaW5rLT5kZXZfbm9kZSk7Ci0JaWYgKGxpbmstPmRldl9ub2RlKSB7Ci0JCURFQlVHKDAsIFBGWCAiQWJvdXQgdG8gdW5yZWdpc3RlciBuZXQgZGV2aWNlICVwXG4iLAotCQkgICAgICBkZXYpOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCX0KIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIH0JCQkJLyogb3Jpbm9jb19jc19kZXRhY2ggKi8KIApAQCAtMTc4LDEzICsxNzUsMTAgQEAKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CiAJdV9jaGFyIGJ1Zls2NF07CiAJY29uZmlnX2luZm9fdCBjb25mOwotCWNpc2luZm9fdCBpbmZvOwogCXR1cGxlX3QgdHVwbGU7CiAJY2lzcGFyc2VfdCBwYXJzZTsKIAl2b2lkIF9faW9tZW0gKm1lbTsKIAotCUNTX0NIRUNLKFZhbGlkYXRlQ0lTLCBwY21jaWFfdmFsaWRhdGVfY2lzKGxpbmssICZpbmZvKSk7Ci0KIAkvKgogCSAqIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMKIAkgKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KQEAgLTIzNCwxMiArMjI4LDYgQEAKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CiAKLQkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwotCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLQkJfQotCiAJCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLwogCQkvKiBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLwogCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgewpAQCAtMzU1LDE5ICszNDMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5kZXggMHglMDJ4OiAiLAotCSAgICAgICBkZXYtPm5hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwotCWlmIChsaW5rLT5jb25mLlZwcCkKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwIC8gMTAsCi0JCSAgICAgICBsaW5rLT5jb25mLlZwcCAlIDEwKTsKLQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOwotCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlcywgaXJxICVkLCBpbyAiCisJICAgICAgICIweCUwNHgtMHglMDR4XG4iLCBkZXYtPm5hbWUsIGRldi0+Y2xhc3NfZGV2LmRldi0+YnVzX2lkLAorCSAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNDM2LDcgKzQxNSw2IEBACiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CiAJCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CkBAIC00NDYsNyArNDI0LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CkBAIC00NTgsMTAgKzQzNiwxMCBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJCX0KIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fbm9ydGVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX25vcnRlbC5jCmluZGV4IGQxYTY3MGIuLjc0YjlkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fbm9ydGVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19ub3J0ZWwuYwpAQCAtMSw5ICsxLDggQEAKIC8qIG9yaW5vY29fbm9ydGVsLmMKLSAqIAorICoKICAqIERyaXZlciBmb3IgUHJpc20gSUkgZGV2aWNlcyB3aGljaCB3b3VsZCB1c3VhbGx5IGJlIGRyaXZlbiBieSBvcmlub2NvX2NzLAogICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBQQ0ktdG8tUENNQ0lBIGFkYXB0ZXIgdXNlZCBpbgogICogTm9ydGVsIGVtb2JpbGl0eSwgU3ltYm9sIExBLTQxMTMgYW5kIFN5bWJvbCBMQS00MTIzLgotICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBOb3J0ZWwgUENJLVBDTUNJQS1BZGFwdGVyLiAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVG9iaWFzIEhvZmZtYW5uCiAgKiAgICAgICAgICAgKEMpIDIwMDMgQ2hyaXN0b3BoIEp1bmdlZ2dlciA8ZGlzZG9zQHRyYXVtNDA0LmRlPgpAQCAtNTAsNjcgKzQ5LDYyIEBACiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgogCiAjaW5jbHVkZSAib3Jpbm9jby5oIgorI2luY2x1ZGUgIm9yaW5vY29fcGNpLmgiCiAKICNkZWZpbmUgQ09SX09GRlNFVCAgICAoMHhlMCkJLyogQ09SIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KICNkZWZpbmUgQ09SX1ZBTFVFICAgICAoQ09SX0xFVkVMX1JFUSB8IENPUl9GVU5DX0VOQSkJLyogRW5hYmxlIFBDIGNhcmQgd2l0aCBpbnRlcnJ1cHQgaW4gbGV2ZWwgdHJpZ2dlciAqLwogCiAKLS8qIE5vcnRlbCBzcGVjaWZpYyBkYXRhICovCi1zdHJ1Y3Qgbm9ydGVsX3BjaV9jYXJkIHsKLQl1bnNpZ25lZCBsb25nIGlvYmFzZTE7Ci0JdW5zaWduZWQgbG9uZyBpb2Jhc2UyOwotfTsKLQogLyoKLSAqIERvIGEgc29mdCByZXNldCBvZiB0aGUgUENJIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCisgKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCiAgKiBXZSBuZWVkIHRoaXMgdG8gZ2V0IGdvaW5nLi4uCiAgKiBUaGlzIGlzIHRoZSBwYXJ0IG9mIHRoZSBjb2RlIHRoYXQgaXMgc3Ryb25nbHkgaW5zcGlyZWQgZnJvbSB3bGFuLW5nCiAgKgogICogTm90ZSBiaXMgOiBEb24ndCB0cnkgdG8gYWNjZXNzIEhFUk1FU19DTUQgZHVyaW5nIHRoZSByZXNldCBwaGFzZS4KICAqIEl0IGp1c3Qgd29uJ3Qgd29yayAhCiAgKi8KLXN0YXRpYyBpbnQgbm9ydGVsX3BjaV9jb3JfcmVzZXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyBpbnQgb3Jpbm9jb19ub3J0ZWxfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IG5vcnRlbF9wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CisJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCi0JLyogQXNzZXJ0IHRoZSByZXNldCB1bnRpbCB0aGUgY2FyZCBub3RpY2UgKi8KLQlvdXR3X3AoOCwgY2FyZC0+aW9iYXNlMSArIDIpOwotCWludyhjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7Ci0Jb3V0d19wKDB4ODAsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKKwkvKiBBc3NlcnQgdGhlIHJlc2V0IHVudGlsIHRoZSBjYXJkIG5vdGljZXMgKi8KKwlpb3dyaXRlMTYoOCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CisJaW9yZWFkMTYoY2FyZC0+YXR0cl9pbyArIENPUl9PRkZTRVQpOworCWlvd3JpdGUxNigweDgwLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCiAJLyogR2l2ZSB0aW1lIGZvciB0aGUgY2FyZCB0byByZWNvdmVyIGZyb20gdGhpcyBoYXJkIGVmZm9ydCAqLwotCW91dHdfcCgwLCBjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7Ci0Jb3V0d19wKDAsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKKwlpb3dyaXRlMTYoMCwgY2FyZC0+YXR0cl9pbyArIENPUl9PRkZTRVQpOworCWlvd3JpdGUxNigwLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCi0JLyogc2V0IENPUiBhcyB1c3VhbCAqLwotCW91dHdfcChDT1JfVkFMVUUsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKLQlvdXR3X3AoQ09SX1ZBTFVFLCBjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7CisJLyogU2V0IENPUiBhcyB1c3VhbCAqLworCWlvd3JpdGUxNihDT1JfVkFMVUUsIGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUKTsKKwlpb3dyaXRlMTYoQ09SX1ZBTFVFLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCi0Jb3V0d19wKDB4MjI4LCBjYXJkLT5pb2Jhc2UxICsgMik7CisJaW93cml0ZTE2KDB4MjI4LCBjYXJkLT5icmlkZ2VfaW8gKyAyKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5vcnRlbF9wY2lfaHdfaW5pdChzdHJ1Y3Qgbm9ydGVsX3BjaV9jYXJkICpjYXJkKQorc3RhdGljIGludCBvcmlub2NvX25vcnRlbF9od19pbml0KHN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkKQogewogCWludCBpOwogCXUzMiByZWc7CiAKLQkvKiBzZXR1cCBicmlkZ2UgKi8KLQlpZiAoaW53KGNhcmQtPmlvYmFzZTEpICYgMSkgeworCS8qIFNldHVwIGJyaWRnZSAqLworCWlmIChpb3JlYWQxNihjYXJkLT5icmlkZ2VfaW8pICYgMSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJicmcxIGFuc3dlcjEgd3JvbmdcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlvdXR3X3AoMHgxMTgsIGNhcmQtPmlvYmFzZTEgKyAyKTsKLQlvdXR3X3AoMHgxMDgsIGNhcmQtPmlvYmFzZTEgKyAyKTsKKwlpb3dyaXRlMTYoMHgxMTgsIGNhcmQtPmJyaWRnZV9pbyArIDIpOworCWlvd3JpdGUxNigweDEwOCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CiAJbWRlbGF5KDMwKTsKLQlvdXR3X3AoMHg4LCBjYXJkLT5pb2Jhc2UxICsgMik7CisJaW93cml0ZTE2KDB4OCwgY2FyZC0+YnJpZGdlX2lvICsgMik7CiAJZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKIAkJbWRlbGF5KDMwKTsKLQkJaWYgKGludyhjYXJkLT5pb2Jhc2UxKSAmIDB4MTApIHsKKwkJaWYgKGlvcmVhZDE2KGNhcmQtPmJyaWRnZV9pbykgJiAweDEwKSB7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTExOCw0MiArMTEyLDQyIEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJyZzEgdGltZWQgb3V0XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKGludyhjYXJkLT5pb2Jhc2UyICsgMHhlMCkgJiAxKSB7CisJaWYgKGlvcmVhZDE2KGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUKSAmIDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYnJnMiBhbnN3ZXIxIHdyb25nXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKGludyhjYXJkLT5pb2Jhc2UyICsgMHhlMikgJiAxKSB7CisJaWYgKGlvcmVhZDE2KGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUICsgMikgJiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImJyZzIgYW5zd2VyMiB3cm9uZ1xuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCWlmIChpbncoY2FyZC0+aW9iYXNlMiArIDB4ZTQpICYgMSkgeworCWlmIChpb3JlYWQxNihjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCArIDQpICYgMSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJicmcyIGFuc3dlcjMgd3JvbmdcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCS8qIHNldCB0aGUgUENNQ0lBIENPUi1SZWdpc3RlciAqLwotCW91dHdfcChDT1JfVkFMVUUsIGNhcmQtPmlvYmFzZTIgKyBDT1JfT0ZGU0VUKTsKKwkvKiBTZXQgdGhlIFBDTUNJQSBDT1IgcmVnaXN0ZXIgKi8KKwlpb3dyaXRlMTYoQ09SX1ZBTFVFLCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwotCXJlZyA9IGludyhjYXJkLT5pb2Jhc2UyICsgQ09SX09GRlNFVCk7CisJcmVnID0gaW9yZWFkMTYoY2FyZC0+YXR0cl9pbyArIENPUl9PRkZTRVQpOwogCWlmIChyZWcgIT0gQ09SX1ZBTFVFKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIHNldHRpbmcgQ09SIHZhbHVlIChyZWc9JXgpXG4iLAogCQkgICAgICAgcmVnKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQkvKiBzZXQgbGVkcyAqLwotCW91dHdfcCgxLCBjYXJkLT5pb2Jhc2UxICsgMTApOworCS8qIFNldCBMRURzICovCisJaW93cml0ZTE2KDEsIGNhcmQtPmJyaWRnZV9pbyArIDEwKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBub3J0ZWxfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IG9yaW5vY29fbm9ydGVsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwotCXN0cnVjdCBub3J0ZWxfcGNpX2NhcmQgKmNhcmQ7CisJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl2b2lkIF9faW9tZW0gKmlvbWVtOworCXZvaWQgX19pb21lbSAqaGVybWVzX2lvLCAqYnJpZGdlX2lvLCAqYXR0cl9pbzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKQEAgLTE2MiwxOSArMTU2LDM0IEBACiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7Ci0JaWYgKGVyciAhPSAwKSB7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGZhaWxfcmVzb3VyY2VzOwogCX0KIAotCWlvbWVtID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOwotCWlmICghaW9tZW0pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsX21hcF9pbzsKKwlicmlkZ2VfaW8gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisJaWYgKCFicmlkZ2VfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBicmlkZ2UgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBmYWlsX21hcF9icmlkZ2U7CisJfQorCisJYXR0cl9pbyA9IHBjaV9pb21hcChwZGV2LCAxLCAwKTsKKwlpZiAoIWF0dHJfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBQQ01DSUEgYXR0cmlidXRlc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfYXR0cjsKKwl9CisKKwloZXJtZXNfaW8gPSBwY2lfaW9tYXAocGRldiwgMiwgMCk7CisJaWYgKCFoZXJtZXNfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBjaGlwc2V0IHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfaGVybWVzOwogCX0KIAogCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlICovCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCBub3J0ZWxfcGNpX2Nvcl9yZXNldCk7CisJZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCBvcmlub2NvX25vcnRlbF9jb3JfcmVzZXQpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xODMsMTYgKzE5MiwxMiBAQAogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7Ci0JY2FyZC0+aW9iYXNlMSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQljYXJkLT5pb2Jhc2UyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCWRldi0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCWNhcmQtPmJyaWRnZV9pbyA9IGJyaWRnZV9pbzsKKwljYXJkLT5hdHRyX2lvID0gYXR0cl9pbzsKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGlvbWVtLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkRldGVjdGVkIE5vcnRlbCBQQ0kgZGV2aWNlIGF0ICVzIGlycTolZCwgIgotCSAgICAgICAiaW8gYWRkcjoweCVseFxuIiwgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSwgZGV2LT5iYXNlX2FkZHIpOworCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgU0FfU0hJUlEsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKQEAgLTIwMSwyMSArMjA2LDE5IEBACiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBmYWlsX2lycTsKIAl9Ci0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKLQllcnIgPSBub3J0ZWxfcGNpX2h3X2luaXQoY2FyZCk7CisJZXJyID0gb3Jpbm9jb19ub3J0ZWxfaHdfaW5pdChjYXJkKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQllcnIgPSBub3J0ZWxfcGNpX2Nvcl9yZXNldChwcml2KTsKKwllcnIgPSBvcmlub2NvX25vcnRlbF9jb3JfcmVzZXQocHJpdik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbml0aWFsIHJlc2V0IGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKQEAgLTIyMyw2ICsyMjYsOCBAQAogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAogCXJldHVybiAwOwogCkBAIC0yMzQsOSArMjM5LDE1IEBACiAJZnJlZV9vcmlub2NvZGV2KGRldik7CiAKICBmYWlsX2FsbG9jOgotCXBjaV9pb3VubWFwKHBkZXYsIGlvbWVtKTsKKwlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwogCi0gZmFpbF9tYXBfaW86CisgZmFpbF9tYXBfaGVybWVzOgorCXBjaV9pb3VubWFwKHBkZXYsIGF0dHJfaW8pOworCisgZmFpbF9tYXBfYXR0cjoKKwlwY2lfaW91bm1hcChwZGV2LCBicmlkZ2VfaW8pOworCisgZmFpbF9tYXBfYnJpZGdlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKICBmYWlsX3Jlc291cmNlczoKQEAgLTI0NSwyNiArMjU2LDI3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IG5vcnRlbF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBvcmlub2NvX25vcnRlbF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5vcnRlbF9wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CisJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCi0JLyogY2xlYXIgbGVkcyAqLwotCW91dHdfcCgwLCBjYXJkLT5pb2Jhc2UxICsgMTApOworCS8qIENsZWFyIExFRHMgKi8KKwlpb3dyaXRlMTYoMCwgY2FyZC0+YnJpZGdlX2lvICsgMTApOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfb3Jpbm9jb2RldihkZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3LmlvYmFzZSk7CisJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YXR0cl9pbyk7CisJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YnJpZGdlX2lvKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbm9ydGVsX3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fbm9ydGVsX2lkX3RhYmxlW10gPSB7CiAJLyogTm9ydGVsIGVtb2JpbGl0eSBQQ0kgKi8KIAl7MHgxMjZjLCAweDgwMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBTeW1ib2wgTEEtNDEyMyBQQ0kgKi8KQEAgLTI3MiwxMyArMjg0LDE1IEBACiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBub3J0ZWxfcGNpX2lkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX25vcnRlbF9pZF90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBub3J0ZWxfcGNpX2RyaXZlciA9IHsKLQkubmFtZSA9IERSSVZFUl9OQU1FLAotCS5pZF90YWJsZSA9IG5vcnRlbF9wY2lfaWRfdGFibGUsCi0JLnByb2JlID0gbm9ydGVsX3BjaV9pbml0X29uZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3Aobm9ydGVsX3BjaV9yZW1vdmVfb25lKSwKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvcmlub2NvX25vcnRlbF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb19ub3J0ZWxfaWRfdGFibGUsCisJLnByb2JlCQk9IG9yaW5vY29fbm9ydGVsX2luaXRfb25lLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb19ub3J0ZWxfcmVtb3ZlX29uZSksCisJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb3Jpbm9jb19wY2lfcmVzdW1lLAogfTsKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KQEAgLTI4OCwyMCArMzAyLDE5IEBACiAgICAgKCJEcml2ZXIgZm9yIHdpcmVsZXNzIExBTiBjYXJkcyB1c2luZyB0aGUgTm9ydGVsIFBDSSBicmlkZ2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAotc3RhdGljIGludCBfX2luaXQgbm9ydGVsX3BjaV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvcmlub2NvX25vcnRlbF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCB2ZXJzaW9uKTsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZub3J0ZWxfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmb3Jpbm9jb19ub3J0ZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG5vcnRlbF9wY2lfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fbm9ydGVsX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5vcnRlbF9wY2lfZHJpdmVyKTsKLQlzc2xlZXAoMSk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZvcmlub2NvX25vcnRlbF9kcml2ZXIpOwogfQogCi1tb2R1bGVfaW5pdChub3J0ZWxfcGNpX2luaXQpOwotbW9kdWxlX2V4aXQobm9ydGVsX3BjaV9leGl0KTsKK21vZHVsZV9pbml0KG9yaW5vY29fbm9ydGVsX2luaXQpOworbW9kdWxlX2V4aXQob3Jpbm9jb19ub3J0ZWxfZXhpdCk7CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuYwppbmRleCA1MzYyYzIxLi4xYzEwNWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qIG9yaW5vY29fcGNpLmMKICAqIAotICogRHJpdmVyIGZvciBQcmlzbSBJSSBkZXZpY2VzIHRoYXQgaGF2ZSBhIGRpcmVjdCBQQ0kgaW50ZXJmYWNlCi0gKiAoaS5lLiwgbm90IGluIGEgUGNtY2lhIG9yIFBMWCBicmlkZ2UpCisgKiBEcml2ZXIgZm9yIFByaXNtIDIuNS8zIGRldmljZXMgdGhhdCBoYXZlIGEgZGlyZWN0IFBDSSBpbnRlcmZhY2UKKyAqIChpLmUuIHRoZXNlIGFyZSBub3QgUENNQ0lBIGNhcmRzIGluIGEgUENNQ0lBLXRvLVBDSSBicmlkZ2UpLgorICogVGhlIGNhcmQgY29udGFpbnMgb25seSBvbmUgUENJIHJlZ2lvbiwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSB1c3VhbAorICogaGVybWVzIHJlZ2lzdGVycywgYXMgd2VsbCBhcyB0aGUgQ09SIHJlZ2lzdGVyLgogICoKLSAqIFNwZWNpZmljYWxseSBoZXJlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIExpbmtzeXMgV01QMTEKLSAqCi0gKiBDdXJyZW50IG1haW50YWluZXJzIChhcyBvZiAyOSBTZXB0ZW1iZXIgMjAwMykgYXJlOgorICogQ3VycmVudCBtYWludGFpbmVycyBhcmU6CiAgKiAJUGF2ZWwgUm9za2luIDxwcm9za2kgQVQgZ251Lm9yZz4KICAqIGFuZAlEYXZpZCBHaWJzb24gPGhlcm1lcyBBVCBnaWJzb24uZHJvcGJlYXIuaWQuYXU+CiAgKgpAQCAtNDEsNTQgKzQxLDYgQEAKICAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCiAgKi8KIAotLyoKLSAqIFRoZW9yeSBvZiBvcGVyYXRpb24uLi4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIE1heWJlIHlvdSBoYWQgYSBsb29rIGluIG9yaW5vY29fcGx4LiBXZWxsLCB0aGlzIGlzIHRvdGFsbHkgZGlmZmVyZW50Li4uCi0gKgotICogVGhlIGNhcmQgY29udGFpbnMgb25seSBvbmUgUENJIHJlZ2lvbiwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSB1c3VhbAotICogaGVybWVzIHJlZ2lzdGVycy4KLSAqCi0gKiBUaGUgZHJpdmVyIHdpbGwgbWVtb3J5IG1hcCB0aGlzIHJlZ2lvbiBpbiBub3JtYWwgbWVtb3J5LiBCZWNhdXNlCi0gKiB0aGUgaGVybWVzIHJlZ2lzdGVycyBhcmUgbWFwcGVkIGluIG5vcm1hbCBtZW1vcnkgYW5kIG5vdCBpbiBJU0EgSS9PCi0gKiBwb3N0IHNwYWNlLCB3ZSBjYW4ndCB1c2UgdGhlIHVzdWFsIGludy9vdXR3IG1hY3JvcyBhbmQgd2UgbmVlZCB0bwotICogdXNlIHJlYWR3L3dyaXRldy4KLSAqIFRoaXMgc2xpZ2h0IGRpZmZlcmVuY2UgZm9yY2UgdXMgdG8gY29tcGlsZSBvdXIgb3duIHZlcnNpb24gb2YKLSAqIGhlcm1lcy5jIHdpdGggdGhlIHJlZ2lzdGVyIGFjY2VzcyBtYWNybyBjaGFuZ2VkLiBUaGF0J3MgYSBiaXQKLSAqIGhhY2tpc2ggYnV0IHdvcmtzIGZpbmUuCi0gKgotICogTm90ZSB0aGF0IHRoZSBQQ0kgcmVnaW9uIGlzIHByZXR0eSBiaWcgKDRLKS4gVGhhdCdzIG11Y2ggbW9yZSB0aGFuCi0gKiB0aGUgdXN1YWwgc2V0IG9mIGhlcm1lcyByZWdpc3RlciAoMHgwIC0+IDB4M0UpLiBJJ3ZlIGdvdCBhIHN0cm9uZwotICogc3VzcGljaW9uIHRoYXQgdGhlIHdob2xlIG1lbW9yeSBzcGFjZSBvZiB0aGUgYWRhcHRlciBpcyBpbiBmYWN0IGluCi0gKiB0aGlzIHJlZ2lvbi4gQWNjZXNzaW5nIGRpcmVjdGx5IHRoZSBhZGFwdGVyIG1lbW9yeSBpbnN0ZWFkIG9mIGdvaW5nCi0gKiB0aHJvdWdoIHRoZSB1c3VhbCByZWdpc3RlciB3b3VsZCBzcGVlZCB1cCBzaWduaWZpY2FudGVseSB0aGUKLSAqIG9wZXJhdGlvbnMuLi4KLSAqCi0gKiBGaW5hbGx5LCB0aGUgY2FyZCBsb29rcyBsaWtlIHRoaXMgOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgQnVzICAwLCBkZXZpY2UgIDE0LCBmdW5jdGlvbiAgMDoKLSAgICBOZXR3b3JrIGNvbnRyb2xsZXI6IFBDSSBkZXZpY2UgMTI2MDozODczIChIYXJyaXMgU2VtaWNvbmR1Y3RvcikgKHJldiAxKS4KLSAgICAgIElSUSAxMS4KLSAgICAgIE1hc3RlciBDYXBhYmxlLiAgTGF0ZW5jeT0yNDguICAKLSAgICAgIFByZWZldGNoYWJsZSAzMiBiaXQgbWVtb3J5IGF0IDB4ZmZiY2MwMDAgWzB4ZmZiY2NmZmZdLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLTAwOjBlLjAgTmV0d29yayBjb250cm9sbGVyOiBIYXJyaXMgU2VtaWNvbmR1Y3RvcjogVW5rbm93biBkZXZpY2UgMzg3MyAocmV2IDAxKQotICAgICAgICBTdWJzeXN0ZW06IFVua25vd24gZGV2aWNlIDE3Mzc6Mzg3NAotICAgICAgICBDb250cm9sOiBJL08rIE1lbSsgQnVzTWFzdGVyKyBTcGVjQ3ljbGUtIE1lbVdJTlYtIFZHQVNub29wLSBQYXJFcnItIFN0ZXBwaW5nLSBTRVJSLSBGYXN0QjJCLQotICAgICAgICBTdGF0dXM6IENhcCsgNjZNaHotIFVERi0gRmFzdEIyQisgUGFyRXJyLSBERVZTRUw9bWVkaXVtID5UQWJvcnQtIDxUQWJvcnQtIDxNQWJvcnQtID5TRVJSLSA8UEVSUi0KLSAgICAgICAgTGF0ZW5jeTogMjQ4IHNldCwgY2FjaGUgbGluZSBzaXplIDA4Ci0gICAgICAgIEludGVycnVwdDogcGluIEEgcm91dGVkIHRvIElSUSAxMQotICAgICAgICBSZWdpb24gMDogTWVtb3J5IGF0IGZmYmNjMDAwICgzMi1iaXQsIHByZWZldGNoYWJsZSkgW3NpemU9NEtdCi0gICAgICAgIENhcGFiaWxpdGllczogW2RjXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMgotICAgICAgICAgICAgICAgIEZsYWdzOiBQTUVDbGstIEF1eFB3ci0gRFNJLSBEMSsgRDIrIFBNRSsKLSAgICAgICAgICAgICAgICBTdGF0dXM6IEQwIFBNRS1FbmFibGUtIERTZWw9MCBEU2NhbGU9MCBQTUUtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFRoYXQncyBhbGwuLgotICoKLSAqIEplYW4gSUkKLSAqLwotCiAjZGVmaW5lIERSSVZFUl9OQU1FICJvcmlub2NvX3BjaSIKICNkZWZpbmUgUEZYIERSSVZFUl9OQU1FICI6ICIKIApAQCAtMTAwLDEyICs1MiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSAib3Jpbm9jby5oIgorI2luY2x1ZGUgIm9yaW5vY29fcGNpLmgiCiAKLS8qIEFsbCB0aGUgbWFnaWMgdGhlcmUgaXMgZnJvbSB3bGFuLW5nICovCi0vKiBNYWdpYyBvZmZzZXQgb2YgdGhlIHJlc2V0IHJlZ2lzdGVyIG9mIHRoZSBQQ0kgY2FyZCAqLworLyogT2Zmc2V0IG9mIHRoZSBDT1IgcmVnaXN0ZXIgb2YgdGhlIFBDSSBjYXJkICovCiAjZGVmaW5lIEhFUk1FU19QQ0lfQ09SCQkoMHgyNikKLS8qIE1hZ2ljIGJpdG1hc2sgdG8gcmVzZXQgdGhlIGNhcmQgKi8KKworLyogQml0bWFzayB0byByZXNldCB0aGUgY2FyZCAqLwogI2RlZmluZSBIRVJNRVNfUENJX0NPUl9NQVNLCSgweDAwODApCisKIC8qIE1hZ2ljIHRpbWVvdXRzIGZvciBkb2luZyB0aGUgcmVzZXQuCiAgKiBUaG9zZSB0aW1lcyBhcmUgc3RyYWlnaHQgZnJvbSB3bGFuLW5nLCBhbmQgaXQgaXMgY2xhaW1lZCB0aGF0IHRoZXkKICAqIGFyZSBuZWNlc3NhcnkuIEFsYW4gd2lsbCBraWxsIG1lLiBUYWtlIHlvdXIgdGltZSBhbmQgZ3JhYiBhIGNvZmZlZS4gKi8KQEAgLTExMywxMyArNjcsOCBAQAogI2RlZmluZSBIRVJNRVNfUENJX0NPUl9PRkZUCSg1MDApCQkvKiBtcyAqLwogI2RlZmluZSBIRVJNRVNfUENJX0NPUl9CVVNZVAkoNTAwKQkJLyogbXMgKi8KIAotLyogT3Jpbm9jbyBQQ0kgc3BlY2lmaWMgZGF0YSAqLwotc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgewotCXZvaWQgX19pb21lbSAqcGNpX2lvYWRkcjsKLX07Ci0KIC8qCi0gKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIFBDSSBjYXJkIHVzaW5nIHRoZSBDb25maWd1cmF0aW9uIE9wdGlvbiBSZWdpc3RlcgorICogRG8gYSBzb2Z0IHJlc2V0IG9mIHRoZSBjYXJkIHVzaW5nIHRoZSBDb25maWd1cmF0aW9uIE9wdGlvbiBSZWdpc3RlcgogICogV2UgbmVlZCB0aGlzIHRvIGdldCBnb2luZy4uLgogICogVGhpcyBpcyB0aGUgcGFydCBvZiB0aGUgY29kZSB0aGF0IGlzIHN0cm9uZ2x5IGluc3BpcmVkIGZyb20gd2xhbi1uZwogICoKQEAgLTEzMSwxNCArODAsMTMgQEAKICAqIE5vdGUgYmlzIDogRG9uJ3QgdHJ5IHRvIGFjY2VzcyBIRVJNRVNfQ01EIGR1cmluZyB0aGUgcmVzZXQgcGhhc2UuCiAgKiBJdCBqdXN0IHdvbid0IHdvcmsgIQogICovCi1zdGF0aWMgaW50Ci1vcmlub2NvX3BjaV9jb3JfcmVzZXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyBpbnQgb3Jpbm9jb19wY2lfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXVuc2lnbmVkIGxvbmcJdGltZW91dDsKLQl1MTYJcmVnOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MTYgcmVnOwogCi0JLyogQXNzZXJ0IHRoZSByZXNldCB1bnRpbCB0aGUgY2FyZCBub3RpY2UgKi8KKwkvKiBBc3NlcnQgdGhlIHJlc2V0IHVudGlsIHRoZSBjYXJkIG5vdGljZXMgKi8KIAloZXJtZXNfd3JpdGVfcmVnbihodywgUENJX0NPUiwgSEVSTUVTX1BDSV9DT1JfTUFTSyk7CiAJbWRlbGF5KEhFUk1FU19QQ0lfQ09SX09OVCk7CiAKQEAgLTE2MywxOSArMTExLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBJbml0aWFsaXNlIGEgY2FyZC4gTW9zdGx5IHNpbWlsYXIgdG8gUExYIGNvZGUuCi0gKi8KIHN0YXRpYyBpbnQgb3Jpbm9jb19wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjaV9pb3JhbmdlOwotCXUxNiBfX2lvbWVtICpwY2lfaW9hZGRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHBjaV9pb2xlbjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gTlVMTDsKKwlpbnQgZXJyOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKmhlcm1lc19pbzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKQEAgLTE4NCwzOSArMTI3LDMyIEBACiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7Ci0JaWYgKGVyciAhPSAwKSB7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGZhaWxfcmVzb3VyY2VzOwogCX0KIAotCS8qIFJlc291cmNlIDAgaXMgbWFwcGVkIHRvIHRoZSBoZXJtZXMgcmVnaXN0ZXJzICovCi0JcGNpX2lvcmFuZ2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JcGNpX2lvbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKLQlwY2lfaW9hZGRyID0gaW9yZW1hcChwY2lfaW9yYW5nZSwgcGNpX2lvbGVuKTsKLQlpZiAoIXBjaV9pb3JhbmdlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZW1hcCBoYXJkd2FyZSByZWdpc3RlcnNcbiIpOwotCQlnb3RvIGZhaWxfbWFwOworCWhlcm1lc19pbyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIWhlcm1lc19pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVtYXAgY2hpcHNldCByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWxfbWFwX2hlcm1lczsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBuZXR3b3JrIGRldmljZSAqLwogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgb3Jpbm9jb19wY2lfY29yX3Jlc2V0KTsKLQlpZiAoISBkZXYpIHsKKwlpZiAoIWRldikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfYWxsb2M7CiAJfQogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7Ci0JY2FyZC0+cGNpX2lvYWRkciA9IHBjaV9pb2FkZHI7Ci0JZGV2LT5tZW1fc3RhcnQgPSBwY2lfaW9yYW5nZTsKLQlkZXYtPm1lbV9lbmQgPSBwY2lfaW9yYW5nZSArIHBjaV9pb2xlbiAtIDE7CiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKLQloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBwY2lfaW9hZGRyLCBIRVJNRVNfMzJCSVRfUkVHU1BBQ0lORyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkRldGVjdGVkIGRldmljZSAlcywgbWVtOjB4JWx4LTB4JWx4LCBpcnEgJWRcbiIsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpLCBkZXYtPm1lbV9zdGFydCwgZGV2LT5tZW1fZW5kLCBwZGV2LT5pcnEpOworCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzMyQklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgU0FfU0hJUlEsCiAJCQkgIGRldi0+bmFtZSwgZGV2KTsKQEAgLTIyNSw5ICsxNjEsNyBAQAogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbF9pcnE7CiAJfQotCWRldi0+aXJxID0gcGRldi0+aXJxOwogCi0JLyogUGVyZm9ybSBhIENPUiByZXNldCB0byBzdGFydCB0aGUgY2FyZCAqLwogCWVyciA9IG9yaW5vY29fcGNpX2Nvcl9yZXNldChwcml2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkluaXRpYWwgcmVzZXQgZmFpbGVkXG4iKTsKQEAgLTIzNiwxMSArMTcwLDEzIEBACiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAogCXJldHVybiAwOwogCkBAIC0yNTIsOSArMTg4LDkgQEAKIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIAogIGZhaWxfYWxsb2M6Ci0JaW91bm1hcChwY2lfaW9hZGRyKTsKKwlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwogCi0gZmFpbF9tYXA6CisgZmFpbF9tYXBfaGVybWVzOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKICBmYWlsX3Jlc291cmNlczoKQEAgLTI2Nyw4NyArMjAzLDE3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9vcmlub2NvZGV2KGRldik7Ci0JaW91bm1hcChjYXJkLT5wY2lfaW9hZGRyKTsKKwlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi1zdGF0aWMgaW50IG9yaW5vY29fcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQkKLQotCWVyciA9IG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaHdfdW5hdmFpbGFibGUgb24gb3Jpbm9jb19wY2lfc3VzcGVuZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogb3Jpbm9jb19wY2lfc3VzcGVuZCgpOiBFcnJvciAlZCBkb3duaW5nIGludGVyZmFjZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE9yaW5vY28tUENJIHdha2luZyB1cFxuIiwgZGV2LT5uYW1lKTsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0KLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlIG9uIG9yaW5vY29fcGNpX3Jlc3VtZSgpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JaWYgKHByaXYtPm9wZW4gJiYgKCEgcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkIG9uIG9yaW5vY29fcGNpX3Jlc3VtZSgpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQl9Ci0JCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3BjaV9wY2lfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3BjaV9pZF90YWJsZVtdID0gewogCS8qIEludGVyc2lsIFByaXNtIDMgKi8KIAl7MHgxMjYwLCAweDM4NzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBJbnRlcnNpbCBQcmlzbSAyLjUgKi8KQEAgLTM1NywxMSArMjIzLDExIEBACiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX3BjaV9wY2lfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG9yaW5vY29fcGNpX2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9yaW5vY29fcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuaWRfdGFibGUJPSBvcmlub2NvX3BjaV9wY2lfaWRfdGFibGUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb19wY2lfaWRfdGFibGUsCiAJLnByb2JlCQk9IG9yaW5vY29fcGNpX2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb19wY2lfcmVtb3ZlX29uZSksCiAJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViMWUwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qIG9yaW5vY29fcGNpLmgKKyAqIAorICogQ29tbW9uIGNvZGUgZm9yIGFsbCBPcmlub2NvIGRyaXZlcnMgZm9yIFBDSSBkZXZpY2VzLCBpbmNsdWRpbmcKKyAqIGJvdGggbmF0aXZlIFBDSSBhbmQgUENNQ0lBLXRvLVBDSSBicmlkZ2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgUGF2ZWwgUm9za2luLgorICogU2VlIG9yaW5vY28uYyBmb3IgbGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9PUklOT0NPX1BDSV9ICisjZGVmaW5lIF9PUklOT0NPX1BDSV9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworLyogRHJpdmVyIHNwZWNpZmljIGRhdGEgKi8KK3N0cnVjdCBvcmlub2NvX3BjaV9jYXJkIHsKKwl2b2lkIF9faW9tZW0gKmJyaWRnZV9pbzsKKwl2b2lkIF9faW9tZW0gKmF0dHJfaW87Cit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG9yaW5vY29fcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWVyciA9IG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGxvY2sgaGFyZHdhcmUgZm9yIHN1c3BlbmRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGVycm9yICVkIGJyaW5naW5nIGludGVyZmFjZSBkb3duICIKKwkJICAgICAgICJmb3Igc3VzcGVuZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQorCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKworCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7CisJCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKKwlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAorCQkJICBkZXYtPm5hbWUsIGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmUtYWxsb2NhdGUgSVJRIG9uIHJlc3VtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlICIKKwkJICAgICAgICJvbiByZXN1bWVcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCisJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKKworCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZCBvbiByZXN1bWVcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCX0KKwkKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG9yaW5vY29fcGNpX3N1c3BlbmQgTlVMTAorI2RlZmluZSBvcmlub2NvX3BjaV9yZXN1bWUgTlVMTAorI2VuZGlmCisKKyNlbmRpZiAvKiBfT1JJTk9DT19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGx4LmMKaW5kZXggMjEwZTczNy4uODRmNjk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wbHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BseC5jCkBAIC0zLDcgKzMsNyBAQAogICogRHJpdmVyIGZvciBQcmlzbSBJSSBkZXZpY2VzIHdoaWNoIHdvdWxkIHVzdWFsbHkgYmUgZHJpdmVuIGJ5IG9yaW5vY29fY3MsCiAgKiBidXQgYXJlIGNvbm5lY3RlZCB0byB0aGUgUENJIGJ1cyBieSBhIFBMWDkwNTIuCiAgKgotICogQ3VycmVudCBtYWludGFpbmVycyAoYXMgb2YgMjkgU2VwdGVtYmVyIDIwMDMpIGFyZToKKyAqIEN1cnJlbnQgbWFpbnRhaW5lcnMgYXJlOgogICogCVBhdmVsIFJvc2tpbiA8cHJvc2tpIEFUIGdudS5vcmc+CiAgKiBhbmQJRGF2aWQgR2lic29uIDxoZXJtZXMgQVQgZ2lic29uLmRyb3BiZWFyLmlkLmF1PgogICoKQEAgLTMwLDM4ICszMCwxOCBAQAogICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlCiAgKiBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICAqIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCi0KLSAqIENhdXRpb246IHRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBwcm9iYWJseSBidWdneS4gIEZvciBzdWNjZXNzIGFuZAotICogZmFpbHVyZSByZXBvcnRzIGZvciBkaWZmZXJlbnQgY2FyZHMgYW5kIGFkYXB0b3JzLCBzZWUKLSAqIG9yaW5vY29fcGx4X3BjaV9pZF90YWJsZSBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUuICBJZiB5b3UgaGF2ZSBhCi0gKiBjYXJkIHdlIGRvbid0IGhhdmUgdGhlIFBDSSBpZCBmb3IsIGFuZCBsb29rcyBsaWtlIGl0IHNob3VsZCB3b3JrLAotICogZHJvcCBtZSBtYWlsIHdpdGggdGhlIGlkIGFuZCAiaXQgd29ya3MiLyJpdCBkb2Vzbid0IHdvcmsiLgogICoKLSAqIE5vdGU6IGlmIGV2ZXJ5dGhpbmcgZ2V0cyBkZXRlY3RlZCBmaW5lIGJ1dCBpdCBkb2Vzbid0IGFjdHVhbGx5IHNlbmQKLSAqIG9yIHJlY2VpdmUgcGFja2V0cywgeW91ciBmaXJzdCBwb3J0IG9mIGNhbGwgc2hvdWxkIHByb2JhYmx5IGJlIHRvCi0gKiB0cnkgbmV3ZXIgZmlybXdhcmUgaW4gdGhlIGNhcmQuICBFc3BlY2lhbGx5IGlmIHlvdSdyZSBkb2luZyBBZC1Ib2MKLSAqIG1vZGVzLgotICoKLSAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG9yaW5vY28uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCi0gKiBhbGxvY2F0aW9uIHN0dWZmLiAgVGhlIGV4cGxhbmF0aW9uIGJlbG93IGlzIGNvdXJ0ZXN5IG9mIFJ5YW4gTmllbWkKLSAqIG9uIHRoZSBsaW51eC13bGFuLW5nIGxpc3QgYXQKLSAqIGh0dHA6Ly9hcmNoaXZlcy5uZW9oYXBzaXMuY29tL2FyY2hpdmVzL2Rldi9saW51eC13bGFuLzIwMDEtcTEvMDAyNi5odG1sCi0gKgotICogVGhlIFBMWDkwNTItYmFzZWQgY2FyZHMgKFdMMTEwMDAgYW5kIHNldmVyYWwgb3RoZXJzKSBhcmUgYQotICogZGlmZmVyZW50IGJlYXN0IHRoYW4gdGhlIHVzdWFsIFBDTUNJQS1iYXNlZCBQUklTTTIgY29uZmlndXJhdGlvbgotICogZXhwZWN0ZWQgYnkgd2xhbi1uZy4gIEhlcmUncyB0aGUgZ2VuZXJhbCBkZXRhaWxzIG9uIGhvdyB0aGUgV0wxMTAwMAotICogUENJIGFkYXB0ZXIgd29ya3M6CisgKiBIZXJlJ3MgdGhlIGdlbmVyYWwgZGV0YWlscyBvbiBob3cgdGhlIFBMWDkwNTIgYWRhcHRlciB3b3JrczoKICAqCiAgKiAtIFR3byBQQ0kgSS9PIGFkZHJlc3Mgc3BhY2VzLCBvbmUgMHg4MCBsb25nIHdoaWNoIGNvbnRhaW5zIHRoZQogICogUExYOTA1MiByZWdpc3RlcnMsIGFuZCBvbmUgdGhhdCdzIDB4NDAgbG9uZyBtYXBwZWQgdG8gdGhlIFBDTUNJQQogICogc2xvdCBJL08gYWRkcmVzcyBzcGFjZS4KICAqCi0gKiAtIE9uZSBQQ0kgbWVtb3J5IGFkZHJlc3Mgc3BhY2UsIG1hcHBlZCB0byB0aGUgUENNQ0lBIG1lbW9yeSBzcGFjZQorICogLSBPbmUgUENJIG1lbW9yeSBhZGRyZXNzIHNwYWNlLCBtYXBwZWQgdG8gdGhlIFBDTUNJQSBhdHRyaWJ1dGUgc3BhY2UKICAqIChjb250YWluaW5nIHRoZSBDSVMpLgogICoKLSAqIEFmdGVyIGlkZW50aWZ5aW5nIHRoZSBJL08gYW5kIG1lbW9yeSBzcGFjZSwgeW91IGNhbiByZWFkIHRocm91Z2gKLSAqIHRoZSBtZW1vcnkgc3BhY2UgdG8gY29uZmlybSB0aGUgQ0lTJ3MgZGV2aWNlIElEIG9yIG1hbnVmYWN0dXJlciBJRAotICogdG8gbWFrZSBzdXJlIGl0J3MgdGhlIGV4cGVjdGVkIGNhcmQuICBxS2VlcCBpbiBtaW5kIHRoYXQgdGhlIFBDTUNJQQorICogVXNpbmcgdGhlIGxhdGVyLCB5b3UgY2FuIHJlYWQgdGhyb3VnaCB0aGUgQ0lTIGRhdGEgdG8gbWFrZSBzdXJlIHRoZQorICogY2FyZCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGRyaXZlci4gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIFBDTUNJQQogICogc3BlYyBzcGVjaWZpZXMgdGhlIENJUyBhcyB0aGUgbG93ZXIgOCBiaXRzIG9mIGVhY2ggd29yZCByZWFkIGZyb20KICAqIHRoZSBDSVMsIHNvIHRvIHJlYWQgdGhlIGJ5dGVzIG9mIHRoZSBDSVMsIHJlYWQgZXZlcnkgb3RoZXIgYnl0ZQogICogKDAsMiw0LC4uLikuIFBhc3NpbmcgdGhhdCB0ZXN0LCB5b3UgbmVlZCB0byBlbmFibGUgdGhlIEkvTyBhZGRyZXNzCkBAIC03MSw3ICs1MSw3IEBACiAgKiB3aXRoaW4gdGhlIFBDSSBtZW1vcnkgc3BhY2UuIFdyaXRlIDB4NDEgdG8gdGhlIENPUiByZWdpc3RlciB0bwogICogZW5hYmxlIEkvTyBtb2RlIGFuZCB0byBzZWxlY3QgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuIFRvCiAgKiBjb25maXJtIHlvdSBhY3R1YWxseSBzdWNjZWVkZWQsIHJlYWQgdGhlIENPUiByZWdpc3RlciBiYWNrIGFuZCBtYWtlCi0gKiBzdXJlIGl0IGFjdHVhbGx5IGdvdCBzZXQgdG8gMHg0MSwgaW5jYXNlIHlvdSBoYXZlIGFuIHVuZXhwZWN0ZWQKKyAqIHN1cmUgaXQgYWN0dWFsbHkgZ290IHNldCB0byAweDQxLCBpbiBjYXNlIHlvdSBoYXZlIGFuIHVuZXhwZWN0ZWQKICAqIGNhcmQgaW5zZXJ0ZWQuCiAgKgogICogRm9sbG93aW5nIHRoYXQsIHlvdSBjYW4gdHJlYXQgdGhlIHNlY29uZCBQQ0kgSS9PIGFkZHJlc3Mgc3BhY2UgKHRoZQpAQCAtMTAxLDE2ICs4MSw2IEBACiAgKiB0aGF0LCBJJ3ZlIGhvdC1zd2FwcGVkIGEgbnVtYmVyIG9mIHRpbWVzIGR1cmluZyBkZWJ1Z2dpbmcgYW5kCiAgKiBkcml2ZXIgZGV2ZWxvcG1lbnQgZm9yIHZhcmlvdXMgcmVhc29ucyAoc3R1Y2sgV0FJVCMgbGluZSBhZnRlciB0aGUKICAqIHJhZGlvIGNhcmQncyBmaXJtd2FyZSBsb2NrcyB1cCkuCi0gKgotICogSG9wZSB0aGlzIGlzIGVub3VnaCBpbmZvIGZvciBzb21lb25lIHRvIGFkZCBQTFg5MDUyIHN1cHBvcnQgdG8gdGhlCi0gKiB3bGFuLW5nIGNhcmQuIEluIHRoZSBjYXNlIG9mIHRoZSBXTDExMDAwLCB0aGUgUENJIElEJ3MgYXJlCi0gKiAweDE2MzkvMHgwMjAwLCB3aXRoIG1hdGNoaW5nIHN1YnN5c3RlbSBJRCdzLiBPdGhlciBQTFg5MDUyLWJhc2VkCi0gKiBtYW51ZmFjdHVyZXJzIG90aGVyIHRoYW4gRXVtaXRjb20gKG9yIG9uIGNhcmRzIG90aGVyIHRoYW4gdGhlCi0gKiBXTDExMDAwKSBtYXkgaGF2ZSBkaWZmZXJlbnQgUENJIElEJ3MuCi0gKgotICogSWYgYW55b25lIG5lZWRzIGFueSBtb3JlIHNwZWNpZmljIGluZm8sIGxldCBtZSBrbm93LiBJIGhhdmVuJ3QgaGFkCi0gKiB0aW1lIHRvIGltcGxlbWVudCBzdXBwb3J0IG15c2VsZiB5ZXQsIGFuZCB3aXRoIHRoZSB3YXkgdGhpbmdzIGFyZQotICogZ29pbmcsIG1pZ2h0IG5vdCBoYXZlIHRpbWUgZm9yIGEgd2hpbGUuLgogICovCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm9yaW5vY29fcGx4IgpAQCAtMTI1LDYgKzk1LDcgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CiAKICNpbmNsdWRlICJvcmlub2NvLmgiCisjaW5jbHVkZSAib3Jpbm9jb19wY2kuaCIKIAogI2RlZmluZSBDT1JfT0ZGU0VUCSgweDNlMCkJLyogQ09SIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KICNkZWZpbmUgQ09SX1ZBTFVFCShDT1JfTEVWRUxfUkVRIHwgQ09SX0ZVTkNfRU5BKSAvKiBFbmFibGUgUEMgY2FyZCB3aXRoIGludGVycnVwdCBpbiBsZXZlbCB0cmlnZ2VyICovCkBAIC0xMzQsMzAgKzEwNSwyMCBAQAogI2RlZmluZSBQTFhfSU5UQ1NSCQkweDRjIC8qIEludGVycnVwdCBDb250cm9sICYgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFBMWF9JTlRDU1JfSU5URU4JKDE8PDYpIC8qIEludGVycnVwdCBFbmFibGUgYml0ICovCiAKLXN0YXRpYyBjb25zdCB1OCBjaXNfbWFnaWNbXSA9IHsKLQkweDAxLCAweDAzLCAweDAwLCAweDAwLCAweGZmLCAweDE3LCAweDA0LCAweDY3Ci19OwotCi0vKiBPcmlub2NvIFBMWCBzcGVjaWZpYyBkYXRhICovCi1zdHJ1Y3Qgb3Jpbm9jb19wbHhfY2FyZCB7Ci0Jdm9pZCBfX2lvbWVtICphdHRyX21lbTsKLX07Ci0KIC8qCiAgKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCiAgKi8KIHN0YXRpYyBpbnQgb3Jpbm9jb19wbHhfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBvcmlub2NvX3BseF9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKLQl1OCBfX2lvbWVtICphdHRyX21lbSA9IGNhcmQtPmF0dHJfbWVtOworCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTE2IHJlZzsKIAotCXdyaXRlYihDT1JfVkFMVUUgfCBDT1JfUkVTRVQsIGF0dHJfbWVtICsgQ09SX09GRlNFVCk7CisJaW93cml0ZTgoQ09SX1ZBTFVFIHwgQ09SX1JFU0VULCBjYXJkLT5hdHRyX2lvICsgQ09SX09GRlNFVCk7CiAJbWRlbGF5KDEpOwogCi0Jd3JpdGViKENPUl9WQUxVRSwgYXR0cl9tZW0gKyBDT1JfT0ZGU0VUKTsKKwlpb3dyaXRlOChDT1JfVkFMVUUsIGNhcmQtPmF0dHJfaW8gKyBDT1JfT0ZGU0VUKTsKIAltZGVsYXkoMSk7CiAKIAkvKiBKdXN0IGluIGNhc2UsIHdhaXQgbW9yZSB1bnRpbCB0aGUgY2FyZCBpcyBubyBsb25nZXIgYnVzeSAqLwpAQCAtMTY4LDcgKzEyOSw3IEBACiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJfQogCi0JLyogRGlkIHdlIHRpbWVvdXQgPyAqLworCS8qIFN0aWxsIGJ1c3k/ICovCiAJaWYgKHJlZyAmIEhFUk1FU19DTURfQlVTWSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJCdXN5IHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKQEAgLTE3NywyMCArMTM4LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb3Jpbm9jb19wbHhfaHdfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCkKK3sKKwlpbnQgaTsKKwl1MzIgY3NyX3JlZzsKKwlzdGF0aWMgY29uc3QgdTggY2lzX21hZ2ljW10gPSB7CisJCTB4MDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MTcsIDB4MDQsIDB4NjcKKwl9OworCisJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVM6ICIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXByaW50aygiJTAyWDoiLCBpb3JlYWQ4KGNhcmQtPmF0dHJfaW8gKyAoaSA8PCAxKSkpOworCX0KKwlwcmludGsoIlxuIik7CisKKwkvKiBWZXJpZnkgd2hldGhlciBhIHN1cHBvcnRlZCBQQyBjYXJkIGlzIHByZXNlbnQgKi8KKwkvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBiZSBzbWFydGVkIGFib3V0IHRoaXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNpc19tYWdpYyk7IGkrKykgeworCQlpZiAoY2lzX21hZ2ljW2ldICE9IGlvcmVhZDgoY2FyZC0+YXR0cl9pbyArIChpIDw8IDEpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGhlIENJUyB2YWx1ZSBvZiBQcmlzbTIgUEMgIgorCQkJICAgICAgICJjYXJkIGlzIHVuZXhwZWN0ZWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwkvKiBiam9lcm46IFdlIG5lZWQgdG8gdGVsbCB0aGUgY2FyZCB0byBlbmFibGUgaW50ZXJydXB0cywgaW4KKwkgICBjYXNlIHRoZSBzZXJpYWwgZXByb20gZGlkbid0IGRvIHRoaXMgYWxyZWFkeS4gIFNlZSB0aGUKKwkgICBQTFg5MDUyIGRhdGEgYm9vaywgcDgtMSBhbmQgOC0yNCBmb3IgcmVmZXJlbmNlLiAqLworCWNzcl9yZWcgPSBpb3JlYWQzMihjYXJkLT5icmlkZ2VfaW8gKyBQTFhfSU5UQ1NSKTsKKwlpZiAoIShjc3JfcmVnICYgUExYX0lOVENTUl9JTlRFTikpIHsKKwkJY3NyX3JlZyB8PSBQTFhfSU5UQ1NSX0lOVEVOOworCQlpb3dyaXRlMzIoY3NyX3JlZywgY2FyZC0+YnJpZGdlX2lvICsgUExYX0lOVENTUik7CisJCWNzcl9yZWcgPSBpb3JlYWQzMihjYXJkLT5icmlkZ2VfaW8gKyBQTFhfSU5UQ1NSKTsKKwkJaWYgKCEoY3NyX3JlZyAmIFBMWF9JTlRDU1JfSU5URU4pKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgZW5hYmxlIGludGVycnVwdHNcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBvcmlub2NvX3BseF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWludCBlcnIgPSAwOwotCXU4IF9faW9tZW0gKmF0dHJfbWVtID0gTlVMTDsKLQl1MzIgY3NyX3JlZywgcGx4X2FkZHI7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0Jc3RydWN0IG9yaW5vY29fcGx4X2NhcmQgKmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBwY2NhcmRfaW9hZGRyID0gMDsKLQl1bnNpZ25lZCBsb25nIHBjY2FyZF9pb2xlbiA9IDA7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0JaW50IGk7CisJaW50IGVycjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OworCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpoZXJtZXNfaW8sICphdHRyX2lvLCAqYnJpZGdlX2lvOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewpAQCAtMTk5LDMwICsxOTUsMzAgQEAKIAl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKLQlpZiAoZXJyICE9IDApIHsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZmFpbF9yZXNvdXJjZXM7CiAJfQogCi0JLyogUmVzb3VyY2UgMSBpcyBtYXBwZWQgdG8gUExYLXNwZWNpZmljIHJlZ2lzdGVycyAqLwotCXBseF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCWJyaWRnZV9pbyA9IHBjaV9pb21hcChwZGV2LCAxLCAwKTsKKwlpZiAoIWJyaWRnZV9pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIGJyaWRnZSByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWxfbWFwX2JyaWRnZTsKKwl9CiAKLQkvKiBSZXNvdXJjZSAyIGlzIG1hcHBlZCB0byB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBtZW1vcnkgKi8KLQlhdHRyX21lbSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLAotCQkJICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSk7Ci0JaWYgKCFhdHRyX21lbSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVtYXAgUENNQ0lBIHNwYWNlXG4iKTsKKwlhdHRyX2lvID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOworCWlmICghYXR0cl9pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIFBDTUNJQSBhdHRyaWJ1dGVzXG4iKTsKKwkJZXJyID0gLUVJTzsKIAkJZ290byBmYWlsX21hcF9hdHRyOwogCX0KIAotCS8qIFJlc291cmNlIDMgaXMgbWFwcGVkIHRvIHRoZSBQQ01DSUEgSS9PIGFkZHJlc3Mgc3BhY2UgKi8KLQlwY2NhcmRfaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDMpOwotCXBjY2FyZF9pb2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMyk7Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMywgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsX21hcF9pbzsKKwloZXJtZXNfaW8gPSBwY2lfaW9tYXAocGRldiwgMywgMCk7CisJaWYgKCFoZXJtZXNfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG1hcCBjaGlwc2V0IHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfaGVybWVzOwogCX0KIAogCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlICovCkBAIC0yMzUsMTYgKzIzMSwxMiBAQAogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7Ci0JY2FyZC0+YXR0cl9tZW0gPSBhdHRyX21lbTsKLQlkZXYtPmJhc2VfYWRkciA9IHBjY2FyZF9pb2FkZHI7CisJY2FyZC0+YnJpZGdlX2lvID0gYnJpZGdlX2lvOworCWNhcmQtPmF0dHJfaW8gPSBhdHRyX2lvOwogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0JaGVybWVzX3N0cnVjdF9pbml0KCZwcml2LT5odywgbWVtLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkRldGVjdGVkIE9yaW5vY28vUHJpc20yIFBMWCBkZXZpY2UgIgotCSAgICAgICAiYXQgJXMgaXJxOiVkLCBpbyBhZGRyOjB4JWx4XG4iLCBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxLAotCSAgICAgICBwY2NhcmRfaW9hZGRyKTsKKwloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBoZXJtZXNfaW8sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAogCQkJICBkZXYtPm5hbWUsIGRldik7CkBAIC0yNTMsMjAgKzI0NSwxMSBAQAogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbF9pcnE7CiAJfQotCWRldi0+aXJxID0gcGRldi0+aXJxOwogCi0JLyogYmpvZXJuOiBXZSBuZWVkIHRvIHRlbGwgdGhlIGNhcmQgdG8gZW5hYmxlIGludGVycnVwdHMsIGluCi0JICAgY2FzZSB0aGUgc2VyaWFsIGVwcm9tIGRpZG4ndCBkbyB0aGlzIGFscmVhZHkuICBTZWUgdGhlCi0JICAgUExYOTA1MiBkYXRhIGJvb2ssIHA4LTEgYW5kIDgtMjQgZm9yIHJlZmVyZW5jZS4gKi8KLQljc3JfcmVnID0gaW5sKHBseF9hZGRyICsgUExYX0lOVENTUik7Ci0JaWYgKCEoY3NyX3JlZyAmIFBMWF9JTlRDU1JfSU5URU4pKSB7Ci0JCWNzcl9yZWcgfD0gUExYX0lOVENTUl9JTlRFTjsKLQkJb3V0bChjc3JfcmVnLCBwbHhfYWRkciArIFBMWF9JTlRDU1IpOwotCQljc3JfcmVnID0gaW5sKHBseF9hZGRyICsgUExYX0lOVENTUik7Ci0JCWlmICghKGNzcl9yZWcgJiBQTFhfSU5UQ1NSX0lOVEVOKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGVuYWJsZSBpbnRlcnJ1cHRzXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQorCWVyciA9IG9yaW5vY29fcGx4X2h3X2luaXQoY2FyZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJIYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWw7CiAJfQogCiAJZXJyID0gb3Jpbm9jb19wbHhfY29yX3Jlc2V0KHByaXYpOwpAQCAtMjc1LDIzICsyNTgsNiBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJDSVM6ICIpOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXByaW50aygiJTAyWDoiLCByZWFkYihhdHRyX21lbSArIDIqaSkpOwotCX0KLQlwcmludGsoIlxuIik7Ci0KLQkvKiBWZXJpZnkgd2hldGhlciBhIHN1cHBvcnRlZCBQQyBjYXJkIGlzIHByZXNlbnQgKi8KLQkvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBiZSBzbWFydGVkIGFib3V0IHRoaXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNpc19tYWdpYyk7IGkrKykgewotCQlpZiAoY2lzX21hZ2ljW2ldICE9IHJlYWRiKGF0dHJfbWVtICsyKmkpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGUgQ0lTIHZhbHVlIG9mIFByaXNtMiBQQyAiCi0JCQkgICAgICAgImNhcmQgaXMgdW5leHBlY3RlZFxuIik7Ci0JCQllcnIgPSAtRUlPOwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOwpAQCAtMjk5LDYgKzI2NSw4IEBACiAJfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXNcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgcGNpX25hbWUocGRldikpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTMxMCwxMiArMjc4LDE1IEBACiAJZnJlZV9vcmlub2NvZGV2KGRldik7CiAKICBmYWlsX2FsbG9jOgotCXBjaV9pb3VubWFwKHBkZXYsIG1lbSk7CisJcGNpX2lvdW5tYXAocGRldiwgaGVybWVzX2lvKTsKIAotIGZhaWxfbWFwX2lvOgotCWlvdW5tYXAoYXR0cl9tZW0pOworIGZhaWxfbWFwX2hlcm1lczoKKwlwY2lfaW91bm1hcChwZGV2LCBhdHRyX2lvKTsKIAogIGZhaWxfbWFwX2F0dHI6CisJcGNpX2lvdW5tYXAocGRldiwgYnJpZGdlX2lvKTsKKworIGZhaWxfbWFwX2JyaWRnZToKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCiAgZmFpbF9yZXNvdXJjZXM6CkBAIC0zMjgsMjMgKzI5OSwyMCBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcGx4X2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwotCXU4IF9faW9tZW0gKmF0dHJfbWVtID0gY2FyZC0+YXR0cl9tZW07Ci0KLQlCVUdfT04oISBkZXYpOworCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwotCWlvdW5tYXAoYXR0cl9tZW0pOworCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmF0dHJfaW8pOworCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmJyaWRnZV9pbyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fcGx4X3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9yaW5vY29fcGx4X2lkX3RhYmxlW10gPSB7CiAJezB4MTExYSwgMHgxMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCS8qIFNpZW1lbnMgU3BlZWRTdHJlYW0gU1MxMDIzICovCiAJezB4MTM4NSwgMHg0MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCS8qIE5ldGdlYXIgTUEzMDEgKi8KIAl7MHgxNWU4LCAweDAxMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwJLyogQ29ycmVnYSAgLSBkb2VzIHRoaXMgd29yaz8gKi8KQEAgLTM2MiwxMyArMzMwLDE1IEBACiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX3BseF9wY2lfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG9yaW5vY29fcGx4X2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9yaW5vY29fcGx4X2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuaWRfdGFibGUJPSBvcmlub2NvX3BseF9wY2lfaWRfdGFibGUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb19wbHhfaWRfdGFibGUsCiAJLnByb2JlCQk9IG9yaW5vY29fcGx4X2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb19wbHhfcmVtb3ZlX29uZSksCisJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb3Jpbm9jb19wY2lfcmVzdW1lLAogfTsKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KQEAgLTM4OCw3ICszNTgsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fcGx4X2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm9yaW5vY29fcGx4X2RyaXZlcik7Ci0Jc3NsZWVwKDEpOwogfQogCiBtb2R1bGVfaW5pdChvcmlub2NvX3BseF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fdG1kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3RtZC5jCmluZGV4IDVlNjhiNzAuLmQyYjRkZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fdG1kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb190bWQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIG9yaW5vY29fdG1kLmMKLSAqIAorICoKICAqIERyaXZlciBmb3IgUHJpc20gSUkgZGV2aWNlcyB3aGljaCB3b3VsZCB1c3VhbGx5IGJlIGRyaXZlbiBieSBvcmlub2NvX2NzLAogICogYnV0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIFBDSSBidXMgYnkgYSBUTUQ3MTYwLiAKICAqCkBAIC0yNiwyNSArMjYsMTMgQEAKICAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQogICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCiAgKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotCi0gKiBDYXV0aW9uOiB0aGlzIGlzIGV4cGVyaW1lbnRhbCBhbmQgcHJvYmFibHkgYnVnZ3kuICBGb3Igc3VjY2VzcyBhbmQKLSAqIGZhaWx1cmUgcmVwb3J0cyBmb3IgZGlmZmVyZW50IGNhcmRzIGFuZCBhZGFwdG9ycywgc2VlCi0gKiBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGUgbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgSWYgeW91IGhhdmUgYQotICogY2FyZCB3ZSBkb24ndCBoYXZlIHRoZSBQQ0kgaWQgZm9yLCBhbmQgbG9va3MgbGlrZSBpdCBzaG91bGQgd29yaywKLSAqIGRyb3AgbWUgbWFpbCB3aXRoIHRoZSBpZCBhbmQgIml0IHdvcmtzIi8iaXQgZG9lc24ndCB3b3JrIi4KLSAqCi0gKiBOb3RlOiBpZiBldmVyeXRoaW5nIGdldHMgZGV0ZWN0ZWQgZmluZSBidXQgaXQgZG9lc24ndCBhY3R1YWxseSBzZW5kCi0gKiBvciByZWNlaXZlIHBhY2tldHMsIHlvdXIgZmlyc3QgcG9ydCBvZiBjYWxsIHNob3VsZCBwcm9iYWJseSBiZSB0byAgIAotICogdHJ5IG5ld2VyIGZpcm13YXJlIGluIHRoZSBjYXJkLiAgRXNwZWNpYWxseSBpZiB5b3UncmUgZG9pbmcgQWQtSG9jCi0gKiBtb2RlcwogICoKICAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG9yaW5vY28uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCiAgKiBhbGxvY2F0aW9uIHN0dWZmLgogICoKICAqIFRoaXMgZHJpdmVyIGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIG9yaW5vY29fcGx4IGRyaXZlci4gVGhlIG1haW4KLSAqIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgVE1EIGNoaXAgaGFzIG9ubHkgSU8gcG9ydCByYW5nZXMgYW5kIG5vCi0gKiBtZW1vcnkgc3BhY2UsIGkuZS4gIG5vIGFjY2VzcyB0byB0aGUgQ0lTLiBDb21wYXJlZCB0byB0aGUgUExYIGNoaXAsCi0gKiB0aGUgaW8gcmFuZ2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBleGNoYW5nZWQuCisgKiBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIFRNRCBjaGlwIGhhcyBvbmx5IElPIHBvcnQgcmFuZ2VzIGFuZCBkb2Vzbid0CisgKiBwcm92aWRlIGFjY2VzcyB0byB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBzcGFjZS4KICAqCiAgKiBQaGVlY29tIHNlbGxzIGNhcmRzIHdpdGggdGhlIFRNRCBjaGlwIGFzICJBU0lDIHZlcnNpb24iCiAgKi8KQEAgLTYxLDMyICs0OSwyNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KIAogI2luY2x1ZGUgIm9yaW5vY28uaCIKKyNpbmNsdWRlICJvcmlub2NvX3BjaS5oIgogCiAjZGVmaW5lIENPUl9WQUxVRQkoQ09SX0xFVkVMX1JFUSB8IENPUl9GVU5DX0VOQSkgLyogRW5hYmxlIFBDIGNhcmQgd2l0aCBpbnRlcnJ1cHQgaW4gbGV2ZWwgdHJpZ2dlciAqLwogI2RlZmluZSBDT1JfUkVTRVQgICAgICgweDgwKQkvKiByZXNldCBiaXQgaW4gdGhlIENPUiByZWdpc3RlciAqLwogI2RlZmluZSBUTURfUkVTRVRfVElNRQkoNTAwKQkvKiBtaWxsaXNlY29uZHMgKi8KIAotLyogT3Jpbm9jbyBUTUQgc3BlY2lmaWMgZGF0YSAqLwotc3RydWN0IG9yaW5vY29fdG1kX2NhcmQgewotCXUzMiB0bWRfaW87Ci19OwotCi0KIC8qCiAgKiBEbyBhIHNvZnQgcmVzZXQgb2YgdGhlIGNhcmQgdXNpbmcgdGhlIENvbmZpZ3VyYXRpb24gT3B0aW9uIFJlZ2lzdGVyCiAgKi8KIHN0YXRpYyBpbnQgb3Jpbm9jb190bWRfY29yX3Jlc2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBvcmlub2NvX3RtZF9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKLQl1MzIgYWRkciA9IGNhcmQtPnRtZF9pbzsKKwlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXUxNiByZWc7CiAKLQlvdXRiKENPUl9WQUxVRSB8IENPUl9SRVNFVCwgYWRkcik7CisJaW93cml0ZTgoQ09SX1ZBTFVFIHwgQ09SX1JFU0VULCBjYXJkLT5icmlkZ2VfaW8pOwogCW1kZWxheSgxKTsKIAotCW91dGIoQ09SX1ZBTFVFLCBhZGRyKTsKKwlpb3dyaXRlOChDT1JfVkFMVUUsIGNhcmQtPmJyaWRnZV9pbyk7CiAJbWRlbGF5KDEpOwogCiAJLyogSnVzdCBpbiBjYXNlLCB3YWl0IG1vcmUgdW50aWwgdGhlIGNhcmQgaXMgbm8gbG9uZ2VyIGJ1c3kgKi8KQEAgLTk3LDcgKzc5LDcgQEAKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKIAl9CiAKLQkvKiBEaWQgd2UgdGltZW91dCA/ICovCisJLyogU3RpbGwgYnVzeT8gKi8KIAlpZiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkJ1c3kgdGltZW91dFxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwpAQCAtMTEwLDExICs5MiwxMSBAQAogc3RhdGljIGludCBvcmlub2NvX3RtZF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWludCBlcnIgPSAwOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBOVUxMOwotCXN0cnVjdCBvcmlub2NvX3RtZF9jYXJkICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCXZvaWQgX19pb21lbSAqbWVtOworCWludCBlcnI7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqaGVybWVzX2lvLCAqYnJpZGdlX2lvOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewpAQCAtMTIzLDIwICsxMDUsMjggQEAKIAl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKLQlpZiAoZXJyICE9IDApIHsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZmFpbF9yZXNvdXJjZXM7CiAJfQogCi0JbWVtID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOwotCWlmICghIG1lbSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfaW9tYXA7CisJYnJpZGdlX2lvID0gcGNpX2lvbWFwKHBkZXYsIDEsIDApOworCWlmICghYnJpZGdlX2lvKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgYnJpZGdlIHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZmFpbF9tYXBfYnJpZGdlOworCX0KKworCWhlcm1lc19pbyA9IHBjaV9pb21hcChwZGV2LCAyLCAwKTsKKwlpZiAoIWhlcm1lc19pbykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIGNoaXBzZXQgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBmYWlsX21hcF9oZXJtZXM7CiAJfQogCiAJLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgKi8KIAlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksIG9yaW5vY29fdG1kX2Nvcl9yZXNldCk7Ci0JaWYgKCEgZGV2KSB7CisJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2FsbG9jOwpAQCAtMTQ0LDE2ICsxMzQsMTEgQEAKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwotCWNhcmQtPnRtZF9pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQlkZXYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwljYXJkLT5icmlkZ2VfaW8gPSBicmlkZ2VfaW87CiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKLQloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBtZW0sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKLQotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiRGV0ZWN0ZWQgT3Jpbm9jby9QcmlzbTIgVE1EIGRldmljZSAiCi0JICAgICAgICJhdCAlcyBpcnE6JWQsIGlvIGFkZHI6MHglbHhcbiIsIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEsCi0JICAgICAgIGRldi0+YmFzZV9hZGRyKTsKKwloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBoZXJtZXNfaW8sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIFNBX1NISVJRLAogCQkJICBkZXYtPm5hbWUsIGRldik7CkBAIC0xNjIsNyArMTQ3LDYgQEAKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGZhaWxfaXJxOwogCX0KLQlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCWVyciA9IG9yaW5vY29fdG1kX2Nvcl9yZXNldChwcml2KTsKIAlpZiAoZXJyKSB7CkBAIC0xNzcsNiArMTYxLDggQEAKIAl9CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlc1xuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTg4LDkgKzE3NCwxMiBAQAogCWZyZWVfb3Jpbm9jb2RldihkZXYpOwogCiAgZmFpbF9hbGxvYzoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOworCXBjaV9pb3VubWFwKHBkZXYsIGhlcm1lc19pbyk7CiAKLSBmYWlsX2lvbWFwOgorIGZhaWxfbWFwX2hlcm1lczoKKwlwY2lfaW91bm1hcChwZGV2LCBicmlkZ2VfaW8pOworCisgZmFpbF9tYXBfYnJpZGdlOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKICBmYWlsX3Jlc291cmNlczoKQEAgLTIwMywzMSArMTkyLDMyIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gZGV2LT5wcml2OwotCi0JQlVHX09OKCEgZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9vcmlub2NvZGV2KGRldik7CiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+aHcuaW9iYXNlKTsKKwlwY2lfaW91bm1hcChwZGV2LCBjYXJkLT5icmlkZ2VfaW8pOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3RtZF9pZF90YWJsZVtdID0gewogCXsweDE1ZTgsIDB4MDEzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LCAgICAgIC8qIE5EQyBhbmQgT0VNcywgZS5nLiBwaGVlY29tICovCiAJezAsfSwKIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG9yaW5vY29fdG1kX2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9yaW5vY29fdG1kX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuaWRfdGFibGUJPSBvcmlub2NvX3RtZF9wY2lfaWRfdGFibGUsCisJLmlkX3RhYmxlCT0gb3Jpbm9jb190bWRfaWRfdGFibGUsCiAJLnByb2JlCQk9IG9yaW5vY29fdG1kX2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aob3Jpbm9jb190bWRfcmVtb3ZlX29uZSksCisJLnN1c3BlbmQJPSBvcmlub2NvX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb3Jpbm9jb19wY2lfcmVzdW1lLAogfTsKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KQEAgLTI0NSw3ICsyMzUsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fdG1kX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm9yaW5vY29fdG1kX2RyaXZlcik7Ci0Jc3NsZWVwKDEpOwogfQogCiBtb2R1bGVfaW5pdChvcmlub2NvX3RtZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IGY3Yjc3Y2UuLjdmOWFhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbCBmaXJtd2FyZSwgc3VjaCBhcwotICogU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaCBjYXJkcyBieSBTb2NrZXQKKyAqIFN5bWJvbCBXaXJlbGVzcyBOZXR3b3JrZXIgTEE0MTM3LCBDb21wYWN0Rmxhc2ggY2FyZHMgYnkgU29ja2V0CiAgKiBDb21tdW5pY2F0aW9ucyBhbmQgSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCLgogICoKICAqIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBTeW1ib2wgZmlybXdhcmUgZG93bmxvYWQuICBUaGUgcmVzdCBpcyBoYW5kbGVkCkBAIC0xMjAsOCArMTIwLDggQEAKICAqIEVhY2ggYmxvY2sgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLgogICovCiBzdHJ1Y3QgZGJsb2NrIHsKLQlfX2xlMzIgX2FkZHI7CQkvKiBhZGFwdGVyIGFkZHJlc3Mgd2hlcmUgdG8gd3JpdGUgdGhlIGJsb2NrICovCi0JX19sZTE2IF9sZW47CQkvKiBsZW5ndGggb2YgdGhlIGRhdGEgb25seSwgaW4gYnl0ZXMgKi8KKwlfX2xlMzIgYWRkcjsJCS8qIGFkYXB0ZXIgYWRkcmVzcyB3aGVyZSB0byB3cml0ZSB0aGUgYmxvY2sgKi8KKwlfX2xlMTYgbGVuOwkJLyogbGVuZ3RoIG9mIHRoZSBkYXRhIG9ubHksIGluIGJ5dGVzICovCiAJY2hhciBkYXRhWzBdOwkJLyogZGF0YSB0byBiZSB3cml0dGVuICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTMxLDkgKzEzMSw5IEBACiAgKiBpdGVtcyB3aXRoIG1hdGNoaW5nIElEIHNob3VsZCBiZSB3cml0dGVuLgogICovCiBzdHJ1Y3QgcGRyIHsKLQlfX2xlMzIgX2lkOwkJLyogcmVjb3JkIElEICovCi0JX19sZTMyIF9hZGRyOwkJLyogYWRhcHRlciBhZGRyZXNzIHdoZXJlIHRvIHdyaXRlIHRoZSBkYXRhICovCi0JX19sZTMyIF9sZW47CQkvKiBleHBlY3RlZCBsZW5ndGggb2YgdGhlIGRhdGEsIGluIGJ5dGVzICovCisJX19sZTMyIGlkOwkJLyogcmVjb3JkIElEICovCisJX19sZTMyIGFkZHI7CQkvKiBhZGFwdGVyIGFkZHJlc3Mgd2hlcmUgdG8gd3JpdGUgdGhlIGRhdGEgKi8KKwlfX2xlMzIgbGVuOwkJLyogZXhwZWN0ZWQgbGVuZ3RoIG9mIHRoZSBkYXRhLCBpbiBieXRlcyAqLwogCWNoYXIgbmV4dFswXTsJCS8qIG5leHQgUERSIHN0YXJ0cyBoZXJlICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTQ0LDggKzE0NCw4IEBACiAgKiBiZSBwbHVnZ2VkIGludG8gdGhlIHNlY29uZGFyeSBmaXJtd2FyZS4KICAqLwogc3RydWN0IHBkaSB7Ci0JX19sZTE2IF9sZW47CQkvKiBsZW5ndGggb2YgSUQgYW5kIGRhdGEsIGluIHdvcmRzICovCi0JX19sZTE2IF9pZDsJCS8qIHJlY29yZCBJRCAqLworCV9fbGUxNiBsZW47CQkvKiBsZW5ndGggb2YgSUQgYW5kIGRhdGEsIGluIHdvcmRzICovCisJX19sZTE2IGlkOwkJLyogcmVjb3JkIElEICovCiAJY2hhciBkYXRhWzBdOwkJLyogcGx1ZyBkYXRhICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTU0LDQ0ICsxNTQsNDQgQEAKIHN0YXRpYyBpbmxpbmUgdTMyCiBkYmxvY2tfYWRkcihjb25zdCBzdHJ1Y3QgZGJsb2NrICpibGspCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KGJsay0+X2FkZHIpOworCXJldHVybiBsZTMyX3RvX2NwdShibGstPmFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMgogZGJsb2NrX2xlbihjb25zdCBzdHJ1Y3QgZGJsb2NrICpibGspCiB7Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KGJsay0+X2xlbik7CisJcmV0dXJuIGxlMTZfdG9fY3B1KGJsay0+bGVuKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIKIHBkcl9pZChjb25zdCBzdHJ1Y3QgcGRyICpwZHIpCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+X2lkKTsKKwlyZXR1cm4gbGUzMl90b19jcHUocGRyLT5pZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyCiBwZHJfYWRkcihjb25zdCBzdHJ1Y3QgcGRyICpwZHIpCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+X2FkZHIpOworCXJldHVybiBsZTMyX3RvX2NwdShwZHItPmFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMgogcGRyX2xlbihjb25zdCBzdHJ1Y3QgcGRyICpwZHIpCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+X2xlbik7CisJcmV0dXJuIGxlMzJfdG9fY3B1KHBkci0+bGVuKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIKIHBkaV9pZChjb25zdCBzdHJ1Y3QgcGRpICpwZGkpCiB7Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KHBkaS0+X2lkKTsKKwlyZXR1cm4gbGUxNl90b19jcHUocGRpLT5pZCk7CiB9CiAKIC8qIFJldHVybiBsZW5ndGggb2YgdGhlIGRhdGEgb25seSwgaW4gYnl0ZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyCiBwZGlfbGVuKGNvbnN0IHN0cnVjdCBwZGkgKnBkaSkKIHsKLQlyZXR1cm4gMiAqIChsZTE2X3RvX2NwdShwZGktPl9sZW4pIC0gMSk7CisJcmV0dXJuIDIgKiAobGUxNl90b19jcHUocGRpLT5sZW4pIC0gMSk7CiB9CiAKIApAQCAtMzQzLDggKzM0Myw3IEBACiAKIAkvKiBkbyB0aGUgYWN0dWFsIHBsdWdnaW5nICovCiAJc3BlY3RydW1fYXV4X3NldGFkZHIoaHcsIHBkcl9hZGRyKHBkcikpOwotCWhlcm1lc193cml0ZV93b3JkcyhodywgSEVSTUVTX0FVWERBVEEsIHBkaS0+ZGF0YSwKLQkJCSAgIHBkaV9sZW4ocGRpKSAvIDIpOworCWhlcm1lc193cml0ZV9ieXRlcyhodywgSEVSTUVTX0FVWERBVEEsIHBkaS0+ZGF0YSwgcGRpX2xlbihwZGkpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDI0LDggKzQyMyw4IEBACiAKIAl3aGlsZSAoZGJsb2NrX2FkZHIoYmxrKSAhPSBCTE9DS19FTkQpIHsKIAkJc3BlY3RydW1fYXV4X3NldGFkZHIoaHcsIGJsa2FkZHIpOwotCQloZXJtZXNfd3JpdGVfd29yZHMoaHcsIEhFUk1FU19BVVhEQVRBLCBibGstPmRhdGEsCi0JCQkJICAgYmxrbGVuIC8gMik7CisJCWhlcm1lc193cml0ZV9ieXRlcyhodywgSEVSTUVTX0FVWERBVEEsIGJsay0+ZGF0YSwKKwkJCQkgICBibGtsZW4pOwogCiAJCWJsayA9IChzdHJ1Y3QgZGJsb2NrICopICZibGstPmRhdGFbYmxrbGVuXTsKIAkJYmxrYWRkciA9IGRibG9ja19hZGRyKGJsayk7CkBAIC02MjYsMTQgKzYyNSwxMSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCisJaWYgKGxpbmstPmRldl9ub2RlKQorCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCiAJc3BlY3RydW1fY3NfcmVsZWFzZShsaW5rKTsKIAotCURFQlVHKDAsIFBGWCAiZGV0YWNoOiBsaW5rPSVwIGxpbmstPmRldl9ub2RlPSVwXG4iLCBsaW5rLCBsaW5rLT5kZXZfbm9kZSk7Ci0JaWYgKGxpbmstPmRldl9ub2RlKSB7Ci0JCURFQlVHKDAsIFBGWCAiQWJvdXQgdG8gdW5yZWdpc3RlciBuZXQgZGV2aWNlICVwXG4iLAotCQkgICAgICBkZXYpOwotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCX0KIAlmcmVlX29yaW5vY29kZXYoZGV2KTsKIH0JCQkJLyogc3BlY3RydW1fY3NfZGV0YWNoICovCiAKQEAgLTY1MywxMyArNjQ5LDEwIEBACiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwogCXVfY2hhciBidWZbNjRdOwogCWNvbmZpZ19pbmZvX3QgY29uZjsKLQljaXNpbmZvX3QgaW5mbzsKIAl0dXBsZV90IHR1cGxlOwogCWNpc3BhcnNlX3QgcGFyc2U7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKLQlDU19DSEVDSyhWYWxpZGF0ZUNJUywgcGNtY2lhX3ZhbGlkYXRlX2NpcyhsaW5rLCAmaW5mbykpOwotCiAJLyoKIAkgKiBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzCiAJICogY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCkBAIC03MDksMTIgKzcwMiw2IEBACiAJCQlnb3RvIG5leHRfZW50cnk7CiAJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwogCi0JCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7Ci0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKLQkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0JCX0KLQogCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KIAkJLyogTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KIAkJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKQEAgLTgzNSwxOSArODIyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KIAogCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluZGV4IDB4JTAyeDogIiwKLQkgICAgICAgZGV2LT5uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKLQlpZiAobGluay0+Y29uZi5WcHApCi0JCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcCAvIDEwLAotCQkgICAgICAgbGluay0+Y29uZi5WcHAgJSAxMCk7Ci0JcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXMsIGlycSAlZCwgaW8gIgorCSAgICAgICAiMHglMDR4LTB4JTA0eFxuIiwgZGV2LT5uYW1lLCBkZXYtPmNsYXNzX2Rldi5kZXYtPmJ1c19pZCwKKwkgICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTg4OCwxMSArODY2LDEwIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAogCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CiAJaWYgKGVycikKQEAgLTkwMiw5ICs4NzksOSBAQAogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAlwcml2LT5od191bmF2YWlsYWJsZSsrOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTkzMiw3ICs5MDksNyBAQAogCSIgRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiwgZXQgYWwpIjsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHNwZWN0cnVtX2NzX2lkc1tdID0gewotCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI2YywgMHgwMDAxKSwgLyogU3ltYm9sIFNwZWN0cnVtMjQgTEE0MTAwICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjZjLCAweDAwMDEpLCAvKiBTeW1ib2wgU3BlY3RydW0yNCBMQTQxMzcgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMDQsIDB4MDAwMSksIC8qIFNvY2tldCBDb21tdW5pY2F0aW9ucyBDRiAqLwogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJbnRlbCIsICJQUk8vV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDgxNmNjODE1LCAweDZmYmY0NTlhKSwgLyogMjAxMUIsIG5vdCAyMDExICovCiAJUENNQ0lBX0RFVklDRV9OVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCmluZGV4IGZmMTkyZTkuLmRhZGU0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKQEAgLTQzMDYsNyArNDMwNiw3IEBACiAgKiBJbnNlcnRpb24gb2YgdGhlIG1vZHVsZQogICogSSdtIG5vdyBxdWl0ZSBwcm91ZCBvZiB0aGUgbXVsdGktZGV2aWNlIHN1cHBvcnQuCiAgKi8KLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWludCByZXQgPSAtRUlPOwkJLyogUmV0dXJuIGVycm9yIGlmIG5vIGNhcmRzIGZvdW5kICovCiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCmluZGV4IDliMWU0ZWQuLjY2MmVjYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtMzMsNyArMzMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgaW50IGFwID0gMDsJLyogQXJlIHdlIGFuIEFQIG9yIGEgbm9ybWFsIHN0YXRpb24/ICovCitzdGF0aWMgaW50IGFwOwkvKiBBcmUgd2UgYW4gQVAgb3IgYSBub3JtYWwgc3RhdGlvbj8gKi8KIAogI2RlZmluZSBaRDEyMDFfVkVSU0lPTgkiMC4xNSIKIApAQCAtNDksNyArNDksNyBAQAogc3RhdGljIGludCB6ZDEyMDFfZndfdXBsb2FkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhcGZ3KQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7Ci0JY2hhciogZGF0YTsKKwljaGFyICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgbGVuOwogCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciByZXQ7CkBAIC02NSw3ICs2NSw3IEBACiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBsb2FkICVzIGZpcm13YXJlIGZpbGUhXG4iLCBmd2ZpbGUpOwogCQlkZXZfZXJyKCZkZXYtPmRldiwgIk1ha2Ugc3VyZSB0aGUgaG90cGx1ZyBmaXJtd2FyZSBsb2FkZXIgaXMgaW5zdGFsbGVkLlxuIik7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiR290byBodHRwOi8vbGludXgtbGMxMDAwMjAuc291cmNlZm9yZ2UubmV0IGZvciBtb3JlIGluZm9cbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkdvdG8gaHR0cDovL2xpbnV4LWxjMTAwMDIwLnNvdXJjZWZvcmdlLm5ldCBmb3IgbW9yZSBpbmZvLlxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC05NCwxMiArOTQsMTIgQEAKIAkgICAgVVNCX0RJUl9PVVQgfCAweDQwLCAwLCAwLCBOVUxMLCAwLCBaRDEyMDFfRldfVElNRU9VVCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXhpdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogCWVyciA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCAweDQsCiAJICAgIFVTQl9ESVJfSU4gfCAweDQwLCAwLDAsICZyZXQsIHNpemVvZihyZXQpLCBaRDEyMDFfRldfVElNRU9VVCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXhpdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogCWlmIChyZXQgJiAweDgwKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXhpdDsKQEAgLTE2NiwxMyArMTY2LDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHpkLT51c2IsIHVzYl9zbmRidWxrcGlwZSh6ZC0+dXNiLCB6ZC0+ZW5kcF9vdXQyKSwKLQkgICAgIGNvbW1hbmQsIDE2LCB6ZDEyMDFfdXNiZnJlZSwgemQpOworCQkJICBjb21tYW5kLCAxNiwgemQxMjAxX3VzYmZyZWUsIHpkKTsKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXQpIHsKIAkJa2ZyZWUoY29tbWFuZCk7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCX0KLQkKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxNiw3ICszMTYsNyBAQAogCQlmYyA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopJmRhdGFbZGF0YWxlbi0xNl0pOwogCQlzZXEgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSZkYXRhW2RhdGFsZW4tMjRdKTsKIAotCQlpZih6ZC0+bW9uaXRvcikgeworCQlpZiAoemQtPm1vbml0b3IpIHsKIAkJCWlmIChkYXRhbGVuIDwgMjQpCiAJCQkJZ290byByZXN1Ym1pdDsKIAkJCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IoZGF0YWxlbisyNCkpKQpAQCAtMzY0LDcgKzM2NCw3IEBACiAJCQkJZ290byByZXN1Ym1pdDsKIAkJCX0KIAkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZyYWcsIG5vZGUsICZ6ZC0+ZnJhZ2xpc3QsIGZub2RlKQotCQkJCWlmKGZyYWctPnNlcSA9PSAoc2VxJklFRUU4MDIxMV9TQ1RMX1NFUSkpCisJCQkJaWYgKGZyYWctPnNlcSA9PSAoc2VxJklFRUU4MDIxMV9TQ1RMX1NFUSkpCiAJCQkJCWJyZWFrOwogCQkJaWYgKCFmcmFnKQogCQkJCWdvdG8gcmVzdWJtaXQ7CkBAIC0zNzYsNyArMzc2LDYgQEAKIAkJCQlnb3RvIHJlc3VibWl0OwogCQkJaGxpc3RfZGVsX2luaXQoJmZyYWctPmZub2RlKTsKIAkJCWtmcmVlKGZyYWcpOwotCQkJLyogRmFsbHRocm91Z2ggKi8KIAkJfSBlbHNlIHsKIAkJCWlmIChkYXRhbGVuPDE0KQogCQkJCWdvdG8gcmVzdWJtaXQ7CkBAIC00MjIsNyArNDIxLDcgQEAKIAlpbnQgcmlkX2ZpZDsKIAlpbnQgbGVuZ3RoOwogCXVuc2lnbmVkIGNoYXIgKnBkYXRhOwotCQorCiAJemQtPnJ4ZGF0YXMgPSAwOwogCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfQUNDRVNTLCByaWQsIDAsIDApOwogCWlmIChlcnIpCkBAIC00NzEsMTEgKzQ3MCwxMSBAQAogCWxlbmd0aCA9IHpkLT5yeGxlbjsKIAogCWRvIHsKLQkJaW50ICBhY3R1YWxfbGVuZ3RoOworCQlpbnQgYWN0dWFsX2xlbmd0aDsKIAogCQlhY3R1YWxfbGVuZ3RoID0gKGxlbmd0aCA+IDY0KSA/IDY0IDogbGVuZ3RoOwogCi0JCWlmKHBkYXRhWzBdICE9IDB4MykgeworCQlpZiAocGRhdGFbMF0gIT0gMHgzKSB7CiAJCQlkZXZfZGJnKCZ6ZC0+dXNiLT5kZXYsICJSeCBSZXNvdXJjZSBwYWNrZXQgdHlwZSBlcnJvcjogJTAyWFxuIiwKIAkJCSAgICBwZGF0YVswXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ4NywxMSArNDg2LDEwIEBACiAJCX0KIAogCQkvKiBTa2lwIHRoZSA0IGJ5dGVzIGhlYWRlciAoUklEIGxlbmd0aCBhbmQgUklEKSAqLwotCQlpZihpID09IDApIHsKKwkJaWYgKGkgPT0gMCkgewogCQkJcGRhdGEgKz0gODsKIAkJCWFjdHVhbF9sZW5ndGggLT0gODsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXBkYXRhICs9IDQ7CiAJCQlhY3R1YWxfbGVuZ3RoIC09IDQ7CiAJCX0KQEAgLTYyMCw3ICs2MTgsNyBAQAogCXNob3J0IG1heDsKIAlfX2xlMTYgemRtYXg7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCQorCiAJYnVmZmVyID0ga3phbGxvYyhaRDEyMDFfUlhTSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02MzIsNyArNjMwLDcgQEAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih6ZC0+cnhfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9idWZmZXI7Ci0JCisKIAllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0lOSVQsIDAsIDAsIDApOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3VyYjsKQEAgLTY4NCw3ICs2ODIsNyBAQAogc3RhdGljIGludCB6ZDEyMDFfZGlzYWJsZShzdHJ1Y3QgemQxMjAxICp6ZCkKIHsKIAlpbnQgZXJyOwotCQorCiAJaWYgKCF6ZC0+bWFjX2VuYWJsZWQpCiAJCXJldHVybiAwOwogCWlmICh6ZC0+bW9uaXRvcikgewpAQCAtNzY0LDcgKzc2Miw2IEBACiBzdGF0aWMgaW50IHpkMTIwMV9uZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE1LDcgKzkxMiw2IEBACiAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqbmFtZSwgY2hhciAqZXh0cmEpCiB7CiAJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMDEzLDExICsxMDA5LDEwIEBACiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJfQotCXpkLT5tb25pdG9yPW1vbml0b3I7CisJemQtPm1vbml0b3IgPSBtb25pdG9yOwogCS8qIElmIG1vbml0b3IgbW9kZSBpcyBzZXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHVybiBpdCBvbiBoZXJlIHNpbmNlIGl0CiAJICogaXMgZG9uZSBkdXJpbmcgbWFjIHJlc2V0IGFueXdheSAoc2VlIHpkMTIwMV9tYWNfZW5hYmxlKS4KIAkgKi8KLQogCXpkMTIwMV9tYWNfcmVzZXQoemQpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTE3LDcgKzExMTIsNyBAQAogCQl6ZC0+aXdzdGF0cy5xdWFsLnVwZGF0ZWQgPSAyOwogCX0KIAotCXJldHVybiB6ZDEyMDFfZ2V0Y29uZmlnKHpkLFpEMTIwMV9SSURfQ1VSUkVOVEJTU0lELGFwX2FkZHItPnNhX2RhdGEsNik7CisJcmV0dXJuIHpkMTIwMV9nZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ1VSUkVOVEJTU0lELCBhcF9hZGRyLT5zYV9kYXRhLCA2KTsKIH0KIAogc3RhdGljIGludCB6ZDEyMDFfc2V0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTEyNzUsNyArMTI3MCw3IEBACiAJaWYgKCFycnEtPmZpeGVkKSB7IC8qIEFsc28gZW5hYmxlIGFsbCBsb3dlciBiaXRyYXRlcyAqLwogCQlyYXRlIHw9IHJhdGUtMTsKIAl9Ci0JCisKIAllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfVFhSQVRFQ05UTCwgcmF0ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTE0ODYsNyArMTQ4MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJxLT5mbGFncyB8PSBpKzE7Ci0JCisKIAllcnEtPmxlbmd0aCA9IHpkLT5lbmNvZGVfa2V5bGVuW2ldOwogCW1lbWNweShrZXksIHpkLT5lbmNvZGVfa2V5c1tpXSwgZXJxLT5sZW5ndGgpOwogCkBAIC0xNTI5LDExICsxNTI0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogb3V0OgotCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQTUVOQUJMRUQsIGVuYWJsZWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBNRU5BQkxFRCwgZW5hYmxlZCk7CiB9CiAKIHN0YXRpYyBpbnQgemQxMjAxX2dldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTYyNywxNSArMTYxOCwxMSBAQAogICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OwotCWludCBlcnI7CiAKIAlpZiAoIXpkLT5hcCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkhPU1RBVVRILCBycnEtPnZhbHVlKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GSE9TVEFVVEgsIHJycS0+dmFsdWUpOwogfQogCiBzdGF0aWMgaW50IHpkMTIwMV9nZXRfaG9zdGF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTE3NDQsNyArMTczMSw3IEBACiB7CiAJc3RydWN0IHpkMTIwMSAqemQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYjsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAJc2hvcnQgcG9ydHR5cGU7CiAJY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMl07CiAKQEAgLTE3NzMsOSArMTc2MCw3IEBACiAJaWYgKCF6ZC0+cnhfdXJiIHx8ICF6ZC0+dHhfdXJiKQogCQlnb3RvIGVycl96ZDsKIAotCWZvcihpID0gMDsgaTwxMDA7IGkrKykKLQkJdWRlbGF5KDEwMDApOwotCisJbWRlbGF5KDEwMCk7CiAJZXJyID0gemQxMjAxX2RydnJfc3RhcnQoemQpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3pkOwpAQCAtMTgzMyw3ICsxODE4LDcgQEAKIAkJZ290byBlcnJfbmV0OwogCWRldl9pbmZvKCZ1c2ItPmRldiwgIiVzOiBaRDEyMDEgVVNCIFdpcmVsZXNzIGludGVyZmFjZVxuIiwKIAkgICAgemQtPmRldi0+bmFtZSk7Ci0JCisKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgemQpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbmV0L3pkMTIwMS5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L0tjb25maWcgYi9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZwppbmRleCBmNjNjMzg3Li42Yzg0NTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZworKysgYi9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZwpAQCAtNDgsNyArNDgsNyBAQAogCiBjb25maWcgUEFSUE9SVF9TRVJJQUwKIAl0cmlzdGF0ZSAiTXVsdGktSU8gY2FyZHMgKHBhcmFsbGVsIGFuZCBzZXJpYWwpIgotCWRlcGVuZHMgb24gU0VSSUFMXzgyNTAgJiYgUEFSUE9SVF9QQyAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNFUklBTF84MjUwX1BDSSAmJiBQQVJQT1JUX1BDICYmIFBDSQogCWhlbHAKIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBtdWx0aS1JTyBQQ0kgY2FyZHMgdGhhdCBoYXZlIHBhcmFsbGVsIGFuZAogCSAgc2VyaWFsIHBvcnRzLiAgWW91IHNob3VsZCBzYXkgWSBvciBNIGhlcmUuICBJZiB5b3Ugc2F5IE0sIHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCAxNDU2NzU5Li4xMGUxYTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0yODUsOSArMjg1LDkgQEAKICAqIERlZmF1bHQgcmVzdW1lIG1ldGhvZCBmb3IgZGV2aWNlcyB0aGF0IGhhdmUgbm8gZHJpdmVyIHByb3ZpZGVkIHJlc3VtZSwKICAqIG9yIG5vdCBldmVuIGEgZHJpdmVyIGF0IGFsbC4KICAqLwotc3RhdGljIHZvaWQgcGNpX2RlZmF1bHRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIGludCBwY2lfZGVmYXVsdF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHJlc3RvcmUgdGhlIFBDSSBjb25maWcgc3BhY2UgKi8KIAlwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKQEAgLTI5NywxOCArMjk3LDIxIEBACiAJLyogaWYgdGhlIGRldmljZSB3YXMgYnVzbWFzdGVyIGJlZm9yZSB0aGUgc3VzcGVuZCwgbWFrZSBpdCBidXNtYXN0ZXIgYWdhaW4gKi8KIAlpZiAocGNpX2Rldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgcGNpX2RldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKIHsKKwlpbnQgZXJyb3I7CiAJc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBwY2lfZHJpdmVyICogZHJ2ID0gcGNpX2Rldi0+ZHJpdmVyOwogCiAJaWYgKGRydiAmJiBkcnYtPnJlc3VtZSkKLQkJZHJ2LT5yZXN1bWUocGNpX2Rldik7CisJCWVycm9yID0gZHJ2LT5yZXN1bWUocGNpX2Rldik7CiAJZWxzZQotCQlwY2lfZGVmYXVsdF9yZXN1bWUocGNpX2Rldik7Ci0JcmV0dXJuIDA7CisJCWVycm9yID0gcGNpX2RlZmF1bHRfcmVzdW1lKHBjaV9kZXYpOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDIzMjlmOTQuLmZkZTQxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0xNjQsNyArMTY0LDYgQEAKIAlyZXR1cm4gX19wY2lfYnVzX2ZpbmRfY2FwKGJ1cywgZGV2Zm4sIGhkcl90eXBlICYgMHg3ZiwgY2FwKTsKIH0KIAotI2lmIDAKIC8qKgogICogcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgLSBGaW5kIGFuIGV4dGVuZGVkIGNhcGFiaWxpdHkKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKQEAgLTIxMiw3ICsyMTEsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgIC8qICAwICAqLworRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkpOwogCiAvKioKICAqIHBjaV9maW5kX3BhcmVudF9yZXNvdXJjZSAtIHJldHVybiByZXNvdXJjZSByZWdpb24gb2YgcGFyZW50IGJ1cyBvZiBnaXZlbiByZWdpb24KQEAgLTQ2MSw5ICs0NjAsMjMgQEAKIHBjaV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaW50IGk7CisJaW50IHZhbDsKIAotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldixpICogNCwgZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCS8qCisJICogVGhlIEJhc2UgQWRkcmVzcyByZWdpc3RlciBzaG91bGQgYmUgcHJvZ3JhbW1lZCBiZWZvcmUgdGhlIGNvbW1hbmQKKwkgKiByZWdpc3RlcihzKQorCSAqLworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBpICogNCwgJnZhbCk7CisJCWlmICh2YWwgIT0gZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQTTogV3JpdGluZyBiYWNrIGNvbmZpZyBzcGFjZSBvbiAiCisJCQkJImRldmljZSAlcyBhdCBvZmZzZXQgJXggKHdhcyAleCwgd3JpdGluZyAleClcbiIsCisJCQkJcGNpX25hbWUoZGV2KSwgaSwKKwkJCQl2YWwsIChpbnQpZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsaSAqIDQsCisJCQkJZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOworCQl9CisJfQogCXBjaV9yZXN0b3JlX21zaV9zdGF0ZShkZXYpOwogCXBjaV9yZXN0b3JlX21zaXhfc3RhdGUoZGV2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RzLmMgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCmluZGV4IDQ4ZDNiM2QuLjc0YjMxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2RzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvZHMuYwpAQCAtMTE0Myw2ICsxMTQzLDEyIEBACiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwY21jaWFfZ2V0X3NvY2tldChza3QpOwogCisJaWYgKCFzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENNQ0lBIG9idGFpbmluZyByZWZlcmVuY2UgdG8gc29ja2V0ICVwICIgXAorCQkJImZhaWxlZCwgZXZlbnQgMHgleCBsb3N0IVxuIiwgc2t0LCBldmVudCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWRzX2RiZygxLCAiZHNfZXZlbnQoMHglMDZ4LCAlZCwgMHglcClcbiIsCiAJICAgICAgIGV2ZW50LCBwcmlvcml0eSwgc2t0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCmluZGV4IGY2ZTdlZTAuLjhjMGQxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKQEAgLTQ4LDMzICs0OCwzMyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbTQ4dDg2X29wcyAqb3BzID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlyZWcgPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfQik7CisJcmVnID0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0IpOwogCiAJaWYgKHJlZyAmIE00OFQ4Nl9SRUdfQl9ETSkgewogCQkvKiBkYXRhIChiaW5hcnkpIG1vZGUgKi8KLQkJdG0tPnRtX3NlYwk9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19TRUMpOwotCQl0bS0+dG1fbWluCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX01JTik7Ci0JCXRtLT50bV9ob3VyCT0gb3BzLT5yZWFkYihNNDhUODZfUkVHX0hPVVIpICYgMHgzRjsKLQkJdG0tPnRtX21kYXkJPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfRE9NKTsKKwkJdG0tPnRtX3NlYwk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19TRUMpOworCQl0bS0+dG1fbWluCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01JTik7CisJCXRtLT50bV9ob3VyCT0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHgzRjsKKwkJdG0tPnRtX21kYXkJPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9NKTsKIAkJLyogdG1fbW9uIGlzIDAtMTEgKi8KLQkJdG0tPnRtX21vbgk9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19NT05USCkgLSAxOwotCQl0bS0+dG1feWVhcgk9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19ZRUFSKSArIDEwMDsKLQkJdG0tPnRtX3dkYXkJPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfRE9XKTsKKwkJdG0tPnRtX21vbgk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NT05USCkgLSAxOworCQl0bS0+dG1feWVhcgk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ZRUFSKSArIDEwMDsKKwkJdG0tPnRtX3dkYXkJPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKTsKIAl9IGVsc2UgewogCQkvKiBiY2QgbW9kZSAqLwotCQl0bS0+dG1fc2VjCT0gQkNEMkJJTihvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfU0VDKSk7Ci0JCXRtLT50bV9taW4JPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19NSU4pKTsKLQkJdG0tPnRtX2hvdXIJPSBCQ0QyQklOKG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19IT1VSKSAmIDB4M0YpOwotCQl0bS0+dG1fbWRheQk9IEJDRDJCSU4ob3BzLT5yZWFkYihNNDhUODZfUkVHX0RPTSkpOworCQl0bS0+dG1fc2VjCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfU0VDKSk7CisJCXRtLT50bV9taW4JPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NSU4pKTsKKwkJdG0tPnRtX2hvdXIJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19IT1VSKSAmIDB4M0YpOworCQl0bS0+dG1fbWRheQk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0RPTSkpOwogCQkvKiB0bV9tb24gaXMgMC0xMSAqLwotCQl0bS0+dG1fbW9uCT0gQkNEMkJJTihvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfTU9OVEgpKSAtIDE7Ci0JCXRtLT50bV95ZWFyCT0gQkNEMkJJTihvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfWUVBUikpICsgMTAwOwotCQl0bS0+dG1fd2RheQk9IEJDRDJCSU4ob3BzLT5yZWFkYihNNDhUODZfUkVHX0RPVykpOworCQl0bS0+dG1fbW9uCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfTU9OVEgpKSAtIDE7CisJCXRtLT50bV95ZWFyCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfWUVBUikpICsgMTAwOworCQl0bS0+dG1fd2RheQk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0RPVykpOwogCX0KIAogCS8qIGNvcnJlY3QgdGhlIGhvdXIgaWYgdGhlIGNsb2NrIGlzIGluIDEyaCBtb2RlICovCiAJaWYgKCEocmVnICYgTTQ4VDg2X1JFR19CX0gyNCkpCi0JCWlmIChvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfSE9VUikgJiAweDgwKQorCQlpZiAob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHg4MCkKIAkJCXRtLT50bV9ob3VyICs9IDEyOwogCiAJcmV0dXJuIDA7CkBAIC04NiwzNSArODYsMzUgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG00OHQ4Nl9vcHMgKm9wcyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JcmVnID0gb3BzLT5yZWFkYihNNDhUODZfUkVHX0IpOworCXJlZyA9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19CKTsKIAogCS8qIHVwZGF0ZSBmbGFnIGFuZCAyNGggbW9kZSAqLwogCXJlZyB8PSBNNDhUODZfUkVHX0JfU0VUIHwgTTQ4VDg2X1JFR19CX0gyNDsKLQlvcHMtPndyaXRlYihyZWcsIE00OFQ4Nl9SRUdfQik7CisJb3BzLT53cml0ZWJ5dGUocmVnLCBNNDhUODZfUkVHX0IpOwogCiAJaWYgKHJlZyAmIE00OFQ4Nl9SRUdfQl9ETSkgewogCQkvKiBkYXRhIChiaW5hcnkpIG1vZGUgKi8KLQkJb3BzLT53cml0ZWIodG0tPnRtX3NlYywgTTQ4VDg2X1JFR19TRUMpOwotCQlvcHMtPndyaXRlYih0bS0+dG1fbWluLCBNNDhUODZfUkVHX01JTik7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV9ob3VyLCBNNDhUODZfUkVHX0hPVVIpOwotCQlvcHMtPndyaXRlYih0bS0+dG1fbWRheSwgTTQ4VDg2X1JFR19ET00pOwotCQlvcHMtPndyaXRlYih0bS0+dG1fbW9uICsgMSwgTTQ4VDg2X1JFR19NT05USCk7Ci0JCW9wcy0+d3JpdGViKHRtLT50bV95ZWFyICUgMTAwLCBNNDhUODZfUkVHX1lFQVIpOwotCQlvcHMtPndyaXRlYih0bS0+dG1fd2RheSwgTTQ4VDg2X1JFR19ET1cpOworCQlvcHMtPndyaXRlYnl0ZSh0bS0+dG1fc2VjLCBNNDhUODZfUkVHX1NFQyk7CisJCW9wcy0+d3JpdGVieXRlKHRtLT50bV9taW4sIE00OFQ4Nl9SRUdfTUlOKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX2hvdXIsIE00OFQ4Nl9SRUdfSE9VUik7CisJCW9wcy0+d3JpdGVieXRlKHRtLT50bV9tZGF5LCBNNDhUODZfUkVHX0RPTSk7CisJCW9wcy0+d3JpdGVieXRlKHRtLT50bV9tb24gKyAxLCBNNDhUODZfUkVHX01PTlRIKTsKKwkJb3BzLT53cml0ZWJ5dGUodG0tPnRtX3llYXIgJSAxMDAsIE00OFQ4Nl9SRUdfWUVBUik7CisJCW9wcy0+d3JpdGVieXRlKHRtLT50bV93ZGF5LCBNNDhUODZfUkVHX0RPVyk7CiAJfSBlbHNlIHsKIAkJLyogYmNkIG1vZGUgKi8KLQkJb3BzLT53cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSwgTTQ4VDg2X1JFR19TRUMpOwotCQlvcHMtPndyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBNNDhUODZfUkVHX01JTik7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBNNDhUODZfUkVHX0hPVVIpOwotCQlvcHMtPndyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgTTQ4VDg2X1JFR19ET00pOwotCQlvcHMtPndyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgTTQ4VDg2X1JFR19NT05USCk7Ci0JCW9wcy0+d3JpdGViKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBNNDhUODZfUkVHX1lFQVIpOwotCQlvcHMtPndyaXRlYihCSU4yQkNEKHRtLT50bV93ZGF5KSwgTTQ4VDg2X1JFR19ET1cpOworCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9zZWMpLCBNNDhUODZfUkVHX1NFQyk7CisJCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX21pbiksIE00OFQ4Nl9SRUdfTUlOKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1faG91ciksIE00OFQ4Nl9SRUdfSE9VUik7CisJCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBNNDhUODZfUkVHX0RPTSk7CisJCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBNNDhUODZfUkVHX01PTlRIKTsKKwkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ4Nl9SRUdfWUVBUik7CisJCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX3dkYXkpLCBNNDhUODZfUkVHX0RPVyk7CiAJfQogCiAJLyogdXBkYXRlIGVuZGVkICovCiAJcmVnICY9IH5NNDhUODZfUkVHX0JfU0VUOwotCW9wcy0+d3JpdGViKHJlZywgTTQ4VDg2X1JFR19CKTsKKwlvcHMtPndyaXRlYnl0ZShyZWcsIE00OFQ4Nl9SRUdfQik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNSwxMiArMTI1LDEyIEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtNDh0ODZfb3BzICpvcHMgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXJlZyA9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19CKTsKKwlyZWcgPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfQik7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIm1vZGVcdFx0OiAlc1xuIiwKIAkJIChyZWcgJiBNNDhUODZfUkVHX0JfRE0pID8gImJpbmFyeSIgOiAiYmNkIik7CiAKLQlyZWcgPSBvcHMtPnJlYWRiKE00OFQ4Nl9SRUdfRCk7CisJcmVnID0gb3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0QpOwogCiAJc2VxX3ByaW50ZihzZXEsICJiYXR0ZXJ5XHRcdDogJXNcbiIsCiAJCSAocmVnICYgTTQ4VDg2X1JFR19EX1ZSVCkgPyAib2siIDogImV4aGF1c3RlZCIpOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBydGMpOwogCiAJLyogcmVhZCBiYXR0ZXJ5IHN0YXR1cyAqLwotCXJlZyA9IG9wcy0+cmVhZGIoTTQ4VDg2X1JFR19EKTsKKwlyZWcgPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRCk7CiAJZGV2X2luZm8oJmRldi0+ZGV2LCAiYmF0dGVyeSAlc1xuIiwKIAkJKHJlZyAmIE00OFQ4Nl9SRUdfRF9WUlQpID8gIm9rIiA6ICJleGhhdXN0ZWQiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaCBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKaW5kZXggNzRhMjU3Yi4uZTIxMGY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCkBAIC00NSwxMSArNDUsMTEgQEAKIAl1bmlvbiB7CiAJCV9fdTggZmM7ICAgCS8qIFNQSUQgZnVuY3Rpb24gY29kZSAqLwogCQlzdHJ1Y3QgcGF0aF9zdGF0ZSBwczsJLyogU05JRCBwYXRoIHN0YXRlICovCi0JfSBpbmY7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaW5mOwogCXVuaW9uIHsKIAkJX191MzIgY3B1X2FkZHIJOiAxNjsJLyogQ1BVIGFkZHJlc3MgKi8KIAkJc3RydWN0IGV4dGVuZGVkX2Nzc2lkIGV4dF9jc3NpZDsKLQl9IHBnaWRfaGlnaDsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwZ2lkX2hpZ2g7CiAJX191MzIgY3B1X2lkCTogMjQ7CS8qIENQVSBpZGVudGlmaWNhdGlvbiAqLwogCV9fdTMyIGNwdV9tb2RlbCA6IDE2OwkvKiBDUFUgbW9kZWwgKi8KIAlfX3UzMiB0b2RfaGlnaDsJCS8qIGhpZ2ggd29yZCBUT0QgY2xvY2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggMTgwYjNiZi4uNDllYzU2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTc0OSw3ICs3NDksNyBAQAogCQkJLyogVW5pdCBjaGVjayBidXQgbm8gc2Vuc2UgZGF0YS4gTmVlZCBiYXNpYyBzZW5zZS4gKi8KIAkJCWlmIChjY3dfZGV2aWNlX2RvX3NlbnNlKGNkZXYsIGlyYikgIT0gMCkKIAkJCQlnb3RvIGNhbGxfaGFuZGxlcl91bnNvbDsKLQkJCW1lbWNweShpcmIsICZjZGV2LT5wcml2YXRlLT5pcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CisJCQltZW1jcHkoJmNkZXYtPnByaXZhdGUtPmlyYiwgaXJiLCBzaXplb2Yoc3RydWN0IGlyYikpOwogCQkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfVzRTRU5TRTsKIAkJCWNkZXYtPnByaXZhdGUtPmludHBhcm0gPSAwOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oCmluZGV4IDVlNmIxZjUuLjBjYTFkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwY3J5cHQuaAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGNyeXB0LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vejkwY3J5cHQuaAogICoKLSAqICB6OTBjcnlwdCAxLjMuMworICogIHo5MGNyeXB0IDEuMy4zIChrZXJuZWwtcHJpdmF0ZSBoZWFkZXIpCiAgKgogICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uCiAgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzIChidXJyb3VnaEB1cy5pYm0uY29tKQpAQCAtMjcsMTg4ICsyNyw3IEBACiAjaWZuZGVmIF9aOTBDUllQVF9IXwogI2RlZmluZSBfWjkwQ1JZUFRfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLSNkZWZpbmUgejkwY3J5cHRfVkVSU0lPTiAxCi0jZGVmaW5lIHo5MGNyeXB0X1JFTEVBU0UgMwkvLyAyID0gUENJWENDLCAzID0gcmV3cml0ZSBmb3IgY29kaW5nIHN0YW5kYXJkcwotI2RlZmluZSB6OTBjcnlwdF9WQVJJQU5UIDMJLy8gMyA9IENFWDJBIHN1cHBvcnQKLQotLyoqCi0gKiBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvCi0gKgotICogUmVxdWlyZW1lbnRzOgotICogLSBvdXRwdXRkYXRhbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGlucHV0ZGF0YWxlbmd0aC4KLSAqIC0gQWxsIGtleSBwYXJ0cyBhcmUgcmlnaHQganVzdGlmaWVkIGluIHRoZWlyIGZpZWxkcywgcGFkZGVkIG9uCi0gKiAgIHRoZSBsZWZ0IHdpdGggemVyb2VzLgotICogLSBsZW5ndGgoYl9rZXkpID0gaW5wdXRkYXRhbGVuZ3RoCi0gKiAtIGxlbmd0aChuX21vZHVsdXMpID0gaW5wdXRkYXRhbGVuZ3RoCi0gKi8KLXN0cnVjdCBpY2FfcnNhX21vZGV4cG8gewotCWNoYXIgX191c2VyICoJaW5wdXRkYXRhOwotCXVuc2lnbmVkIGludAlpbnB1dGRhdGFsZW5ndGg7Ci0JY2hhciBfX3VzZXIgKglvdXRwdXRkYXRhOwotCXVuc2lnbmVkIGludAlvdXRwdXRkYXRhbGVuZ3RoOwotCWNoYXIgX191c2VyICoJYl9rZXk7Ci0JY2hhciBfX3VzZXIgKgluX21vZHVsdXM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0Ci0gKgotICogUmVxdWlyZW1lbnRzOgotICogLSBpbnB1dGRhdGFsZW5ndGggaXMgZXZlbi4KLSAqIC0gb3V0cHV0ZGF0YWxlbmd0aCBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyBpbnB1dGRhdGFsZW5ndGguCi0gKiAtIEFsbCBrZXkgcGFydHMgYXJlIHJpZ2h0IGp1c3RpZmllZCBpbiB0aGVpciBmaWVsZHMsIHBhZGRlZCBvbgotICogICB0aGUgbGVmdCB3aXRoIHplcm9lcy4KLSAqIC0gbGVuZ3RoKGJwX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMiArIDgKLSAqIC0gbGVuZ3RoKGJxX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMgotICogLSBsZW5ndGgobnBfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAotICogLSBsZW5ndGgobnFfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yCi0gKiAtIGxlbmd0aCh1X211bHRfaW52KSA9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAotICovCi1zdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCB7Ci0JY2hhciBfX3VzZXIgKglpbnB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CWlucHV0ZGF0YWxlbmd0aDsKLQljaGFyIF9fdXNlciAqCW91dHB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CW91dHB1dGRhdGFsZW5ndGg7Ci0JY2hhciBfX3VzZXIgKglicF9rZXk7Ci0JY2hhciBfX3VzZXIgKglicV9rZXk7Ci0JY2hhciBfX3VzZXIgKglucF9wcmltZTsKLQljaGFyIF9fdXNlciAqCW5xX3ByaW1lOwotCWNoYXIgX191c2VyICoJdV9tdWx0X2ludjsKLX07Ci0KLSNkZWZpbmUgWjkwX0lPQ1RMX01BR0lDICd6JyAgLy8gTk9URTogIE5lZWQgdG8gYWxsb2NhdGUgZnJvbSBsaW51eCBmb2xrcwotCi0vKioKLSAqIEludGVyZmFjZSBub3RlczoKLSAqCi0gKiBUaGUgaW9jdGwoKXMgd2hpY2ggYXJlIGltcGxlbWVudGVkIChhbG9uZyB3aXRoIHJlbGV2YW50IGRldGFpbHMpCi0gKiBhcmU6Ci0gKgotICogICBJQ0FSU0FNT0RFWFBPCi0gKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgTW9kdWx1cy1FeHBvbmVudCBwYWlyCi0gKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfcnNhX21vZGV4cG8gc3RydWN0IGFzIGl0cyBhcmcuCi0gKgotICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCi0gKiAgICAgICAgICAgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY29udGVudHMgb2YgdGhlCi0gKiAgICAgICAgICAgYmxvY2sKLSAqCi0gKiAgIElDQVJTQUNSVAotICogICAgIFBlcmZvcm0gYW4gUlNBIG9wZXJhdGlvbiB1c2luZyBhIENoaW5lc2UtUmVtYWluZGVyIFRoZW9yZW0ga2V5Ci0gKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfcnNhX21vZGV4cG9fY3J0IHN0cnVjdCBhcyBpdHMgYXJnLgotICoKLSAqICAgICBOT1RFOiBwbGVhc2UgcmVmZXIgdG8gdGhlIGNvbW1lbnRzIHByZWNlZGluZyB0aGlzIHN0cnVjdHVyZQotICogICAgICAgICAgIGZvciB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZQotICogICAgICAgICAgIGJsb2NrCi0gKgotICogICBaOTBTVEFUX1RPVEFMQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgZGV2aWNlIHR5cGVzIHRvZ2V0aGVyLgotICoKLSAqICAgWjkwU1RBVF9QQ0lDQUNPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNBcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJQ0NDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lDQ3MuCi0gKgotICogICBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBNQ0wyIFBDSVhDQ3MuCi0gKgotICogICBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBNQ0wzIFBDSVhDQ3MuCi0gKgotICogICBaOTBTVEFUX0NFWDJDQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkNzLgotICoKLSAqICAgWjkwU1RBVF9DRVgyQUNPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIENFWDJBcy4KLSAqCi0gKiAgIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2FpdGluZyB0byBiZQotICogICAgIHNlbnQgdG8gYSBkZXZpY2UuCi0gKgotICogICBaOTBTVEFUX1BFTkRJTkdRX0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNlbnQgdG8gYQotICogICAgIGRldmljZSBhd2FpdGluZyB0aGUgcmVwbHkuCi0gKgotICogICBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb3BlbiBmaWxlIGhhbmRsZXMuCi0gKgotICogICBaOTBTVEFUX0RPTUFJTl9JTkRFWAotICogICAgIFJldHVybiB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgQ3J5cHRvZ3JhcGhpYyBEb21haW4uCi0gKgotICogICBaOTBTVEFUX1NUQVRVU19NQVNLCi0gKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgY2hhcnMgZm9yIHRoZSBzdGF0dXMgb2YKLSAqICAgICBhbGwgZGV2aWNlcy4KLSAqICAgICAgIDB4MDE6IFBDSUNBCi0gKiAgICAgICAweDAyOiBQQ0lDQwotICogICAgICAgMHgwMzogUENJWENDX01DTDIKLSAqICAgICAgIDB4MDQ6IFBDSVhDQ19NQ0wzCi0gKiAgICAgICAweDA1OiBDRVgyQwotICogICAgICAgMHgwNjogQ0VYMkEKLSAqICAgICAgIDB4MGQ6IGRldmljZSBpcyBkaXNhYmxlZCB2aWEgdGhlIHByb2MgZmlsZXN5c3RlbQotICoKLSAqICAgWjkwU1RBVF9RREVQVEhfTUFTSwotICogICAgIFJldHVybiBhbiA2NCBlbGVtZW50IGFycmF5IG9mIHVuc2lnbmVkIGNoYXJzIGZvciB0aGUgcXVldWUKLSAqICAgICBkZXB0aCBvZiBhbGwgZGV2aWNlcy4KLSAqCi0gKiAgIFo5MFNUQVRfUEVSREVWX1JFUUNOVAotICogICAgIFJldHVybiBhbiA2NCBlbGVtZW50IGFycmF5IG9mIHVuc2lnbmVkIGludGVnZXJzIGZvciB0aGUgbnVtYmVyCi0gKiAgICAgb2Ygc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCByZXF1ZXN0cyBwZXIgZGV2aWNlIHNpbmNlIHRoZSBkZXZpY2UKLSAqICAgICB3YXMgZGV0ZWN0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlLgotICoKLSAqICAgSUNBWjkwU1RBVFVTIChkZXByZWNhdGVkKQotICogICAgIFJldHVybiBzb21lIGRldmljZSBkcml2ZXIgc3RhdHVzIGluIGEgaWNhX3o5MF9zdGF0dXMgc3RydWN0Ci0gKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QgYXMgaXRzIGFyZy4KLSAqCi0gKiAgICAgTk9URTogdGhpcyBpb2N0bCgpIGlzIGRlcHJlY2F0ZWQsIGFuZCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoCi0gKiAgICAgICAgICAgc2luZ2xlIGlvY3RsKClzIGZvciBlYWNoIHR5cGUgb2Ygc3RhdHVzIGJlaW5nIHJlcXVlc3RlZAotICoKLSAqICAgWjkwU1RBVF9QQ0lYQ0NDT1VOVCAoZGVwcmVjYXRlZCkKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJWENDcyAoTUNMMiArIE1DTDMpLgotICogICAgIFRoaXMgaXMgREVQUkVDQVRFRCBub3cgdGhhdCBNQ0wzIFBDSVhDQ3MgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgZnJvbQotICogICAgIE1DTDIgUENJWENDcy4KLSAqCi0gKiAgIFo5MFFVSUVTQ0UgKG5vdCByZWNvbW1lbmRlZCkKLSAqICAgICBRdWllc2NlIHRoZSBkcml2ZXIuICBUaGlzIGlzIGludGVuZGVkIHRvIHN0b3AgYWxsIG5ldwotICogICAgIHJlcXVlc3RzIGZyb20gYmVpbmcgcHJvY2Vzc2VkLiAgSXRzIHVzZSBpcyBOT1QgcmVjb21tZW5kZWQsCi0gKiAgICAgZXhjZXB0IGluIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIHN0b3AKLSAqICAgICBjYWxsZXJzIGZyb20gYWNjZXNzaW5nIHRoZSBkcml2ZXIuICBJdHMgb3JpZ2luYWwgdXNlIHdhcyB0bwotICogICAgIGFsbG93IHRoZSBkcml2ZXIgdG8gYmUgImRyYWluZWQiIG9mIHdvcmsgaW4gcHJlcGFyYXRpb24gZm9yCi0gKiAgICAgYSBzeXN0ZW0gc2h1dGRvd24uCi0gKgotICogICAgIE5PVEU6IG9uY2UgaXNzdWVkLCB0aGlzIGJhbiBvbiBuZXcgd29yayBjYW5ub3QgYmUgdW5kb25lCi0gKiAgICAgICAgICAgZXhjZXB0IGJ5IHVubG9hZGluZyBhbmQgcmVsb2FkaW5nIHRoZSBkcml2ZXIuCi0gKi8KLQotLyoqCi0gKiBTdXBwb3J0ZWQgaW9jdGwgY2FsbHMKLSAqLwotI2RlZmluZSBJQ0FSU0FNT0RFWFBPCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsIFo5MF9JT0NUTF9NQUdJQywgMHgwNSwgMCkKLSNkZWZpbmUgSUNBUlNBQ1JUCV9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsIFo5MF9JT0NUTF9NQUdJQywgMHgwNiwgMCkKLQotLyogREVQUkVDQVRFRCBzdGF0dXMgY2FsbHMgKGJvdW5kIGZvciByZW1vdmFsIGF0IHNvbWUgcG9pbnQpICovCi0jZGVmaW5lIElDQVo5MFNUQVRVUwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHgxMCwgc3RydWN0IGljYV96OTBfc3RhdHVzKQotI2RlZmluZSBaOTBTVEFUX1BDSVhDQ0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQzLCBpbnQpCi0KLS8qIHVucmVsYXRlZCB0byBJQ0EgY2FsbGVycyAqLwotI2RlZmluZSBaOTBRVUlFU0NFCV9JTyhaOTBfSU9DVExfTUFHSUMsIDB4MTEpCi0KLS8qIE5ldyBzdGF0dXMgY2FsbHMgKi8KLSNkZWZpbmUgWjkwU1RBVF9UT1RBTENPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQwLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUENJQ0FDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MSwgaW50KQotI2RlZmluZSBaOTBTVEFUX1BDSUNDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDIsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QQ0lYQ0NNQ0wyQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGIsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGMsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9DRVgyQ0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRkLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfQ0VYMkFDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0ZSwgaW50KQotI2RlZmluZSBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ0LCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUEVORElOR1FfQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDUsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9UT1RBTE9QRU5fQ09VTlQgX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDYsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9ET01BSU5fSU5ERVgJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDcsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9TVEFUVVNfTUFTSwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0OCwgY2hhcls2NF0pCi0jZGVmaW5lIFo5MFNUQVRfUURFUFRIX01BU0sJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDksIGNoYXJbNjRdKQotI2RlZmluZSBaOTBTVEFUX1BFUkRFVl9SRVFDTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGEsIGludFs2NF0pCisjaW5jbHVkZSA8YXNtL3o5MGNyeXB0Lmg+CiAKIC8qKgogICogbG9jYWwgZXJybm8gZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDkwZDRkMGUuLjY3NzVhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgUy8zOTAgbmV0d29yayBkZXZpY2VzCiAjCiAKLWN0Yy1vYmpzIDo9IGN0Y21haW4ubyBjdGN0dHkubyBjdGNkYnVnLm8KK2N0Yy1vYmpzIDo9IGN0Y21haW4ubyBjdGNkYnVnLm8KIAogb2JqLSQoQ09ORklHX0lVQ1YpICs9IGl1Y3Yubwogb2JqLSQoQ09ORklHX05FVElVQ1YpICs9IG5ldGl1Y3YubyBmc20ubwpAQCAtMTAsNiArMTAsNyBAQAogb2JqLSQoQ09ORklHX0NUQykgKz0gY3RjLm8gZnNtLm8gY3UzMDg4Lm8KIG9iai0kKENPTkZJR19MQ1MpICs9IGxjcy5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfQ0xBVykgKz0gY2xhdy5vIGN1MzA4OC5vCitvYmotJChDT05GSUdfTVBDKSArPSBjdGNtcGMubyBmc20ubyBjdTMwODgubwogcWV0aC15IDo9IHFldGhfbWFpbi5vIHFldGhfbXBjLm8gcWV0aF9zeXMubyBxZXRoX2VkZHAubyAKIHFldGgtJChDT05GSUdfUFJPQ19GUykgKz0gcWV0aF9wcm9jLm8KIG9iai0kKENPTkZJR19RRVRIKSArPSBxZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKaW5kZXggYWY5ZjIxMi4uMjBjOGViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKQEAgLTYsNyArNiw3IEBACiAgKiBGaXhlcyBieSA6IEpvY2hlbiBS9mhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKICAqICAgICAgICAgICAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CiAJICAgICAgUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCi0gKiBEcml2ZXIgTW9kZWwgc3R1ZmYgYnkgOiBDb3JuZWxpYSBIdWNrIDxodWNrY0BkZS5pYm0uY29tPgorICogRHJpdmVyIE1vZGVsIHN0dWZmIGJ5IDogQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPgogICoKICAqIERvY3VtZW50YXRpb24gdXNlZDoKICAqICAtIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIChJQk0gZG9jIzogU0EyMi03MjAxLTA2KQpAQCAtNjUsNyArNjUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAKLSNpbmNsdWRlICJjdGN0dHkuaCIKICNpbmNsdWRlICJmc20uaCIKICNpbmNsdWRlICJjdTMwODguaCIKIApAQCAtNDc5LDEwICs0NzgsNyBAQAogCQlza2ItPmRldiA9IHBza2ItPmRldjsKIAkJc2tiLT5wcm90b2NvbCA9IHBza2ItPnByb3RvY29sOwogCQlwc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJaWYgKGNoLT5wcm90b2NvbCA9PSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJY3RjX3R0eV9uZXRpZl9yeChza2IpOwotCQllbHNlCi0JCQluZXRpZl9yeF9uaShza2IpOworCQluZXRpZl9yeF9uaShza2IpOwogCQkvKioKIAkJICogU3VjY2Vzc2Z1bCByeDsgcmVzZXQgbG9nZmxhZ3MKIAkJICovCkBAIC01NTcsOCArNTUzLDcgQEAKIAlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKIAlpZiAoc2Vuc2UgJiBTTlMwX0lOVEVSVkVOVElPTl9SRVEpIHsKIAkJaWYgKHNlbnNlICYgMHgwMSkgewotCQkJaWYgKGNoLT5wcm90b2NvbCAhPSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJCWN0Y19wcl9kZWJ1ZygiJXM6IEludGVyZmFjZSBkaXNjLiBvciBTZWwuIHJlc2V0ICIKKwkJCWN0Y19wcl9kZWJ1ZygiJXM6IEludGVyZmFjZSBkaXNjLiBvciBTZWwuIHJlc2V0ICIKIAkJCQkJIihyZW1vdGUpXG4iLCBjaC0+aWQpOwogCQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX1VDX1JDUkVTRVQsIGNoKTsKIAkJfSBlbHNlIHsKQEAgLTE0ODYsMTMgKzE0ODEsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIGNoX2FjdGlvbl9yZWluaXQoZnNtX2luc3RhbmNlICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAgCXN0cnVjdCBjaGFubmVsICpjaCA9IChzdHJ1Y3QgY2hhbm5lbCAqKWFyZzsKICAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGNoLT5uZXRkZXY7CiAgCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKLSAKKwogCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwogIAljaF9hY3Rpb25faW9mYXRhbChmaSwgZXZlbnQsIGFyZyk7CiAgCWZzbV9hZGR0aW1lcigmcHJpdnB0ci0+cmVzdGFydF90aW1lciwgMTAwMCwgREVWX0VWRU5UX1JFU1RBUlQsIGRldik7CkBAIC0xNjI0LDcgKzE2MTksNyBAQAogCX0KIAlkZXYxID0gc2ltcGxlX3N0cnRvdWwoaWQxLCAmaWQxLCAxNik7CiAJZGV2MiA9IHNpbXBsZV9zdHJ0b3VsKGlkMiwgJmlkMiwgMTYpOwotCQorCiAJcmV0dXJuIChkZXYxIDwgZGV2Mik7CiB9CiAKQEAgLTE4OTUsNyArMTg5MCw3IEBACiAJCQkgICAgaXJiLT5zY3N3LmRzdGF0KTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCXByaXYgPSAoKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKiljZGV2LT5kZXYuZHJpdmVyX2RhdGEpCiAJCS0+ZGV2LmRyaXZlcl9kYXRhOwogCkBAIC0xOTA5LDcgKzE5MDQsNyBAQAogCQkJICAgImRldmljZSAlc1xuIiwgY2Rldi0+ZGV2LmJ1c19pZCk7CiAJCXJldHVybjsKIAl9Ci0JCisKIAlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgKGNoLT5uZXRkZXYpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQljdGNfcHJfY3JpdCgiY3RjOiBjdGNfaXJxX2hhbmRsZXIgZGV2PU5VTEwgYnVzX2lkPSVzLCBjaD0weCVwXG4iLApAQCAtMjAwOCwxMiArMjAwMywxMiBAQAogCQlmc21fZXZlbnQoY2gtPmZzbSwgQ0hfRVZFTlRfU1RPUCwgY2gpOwogCX0KIH0KLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIGRldl9hY3Rpb25fcmVzdGFydChmc21faW5zdGFuY2UgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopYXJnOwogCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKLQkKKwogCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwogCWN0Y19wcl9kZWJ1ZygiJXM6IFJlc3RhcnRpbmdcbiIsIGRldi0+bmFtZSk7CiAJZGV2X2FjdGlvbl9zdG9wKGZpLCBldmVudCwgYXJnKTsKQEAgLTIwMzQsNyArMjAyOSw2IEBACiBkZXZfYWN0aW9uX2NodXAoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgYXJnOwotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKIAogCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwogCXN3aXRjaCAoZnNtX2dldHN0YXRlKGZpKSkgewpAQCAtMjA0OSw4ICsyMDQzLDYgQEAKIAkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKIAkJCQljdGNfcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAogCQkJCQkgICAgZGV2LT5uYW1lKTsKLQkJCQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJCQkJY3RjX3R0eV9zZXRjYXJyaWVyKGRldiwgMSk7CiAJCQkJY3RjX2NsZWFyX2J1c3koZGV2KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjA1OSw4ICsyMDUxLDYgQEAKIAkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKIAkJCQljdGNfcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAogCQkJCQkgICAgZGV2LT5uYW1lKTsKLQkJCQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJCQkJY3RjX3R0eV9zZXRjYXJyaWVyKGRldiwgMSk7CiAJCQkJY3RjX2NsZWFyX2J1c3koZGV2KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjA4NiwxNCArMjA3NiwxMCBAQAogc3RhdGljIHZvaWQKIGRldl9hY3Rpb25fY2hkb3duKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGFyZzsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXZwdHIgPSBkZXYtPnByaXY7CiAKIAlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKIAlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShmaSkpIHsKIAkJY2FzZSBERVZfU1RBVEVfUlVOTklORzoKLQkJCWlmIChwcml2cHRyLT5wcm90b2NvbCA9PSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJCWN0Y190dHlfc2V0Y2FycmllcihkZXYsIDApOwogCQkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWERPV04pCiAJCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1RYKTsKIAkJCWVsc2UKQEAgLTIxOTMsNyArMjE3OSw3IEBACiAKIAlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKIAkvKiB3ZSBuZWVkIHRvIGFjcXVpcmUgdGhlIGxvY2sgZm9yIHRlc3RpbmcgdGhlIHN0YXRlCi0JICogb3RoZXJ3aXNlIHdlIGNhbiBoYXZlIGFuIElSUSBjaGFuZ2luZyB0aGUgc3RhdGUgdG8gCisJICogb3RoZXJ3aXNlIHdlIGNhbiBoYXZlIGFuIElSUSBjaGFuZ2luZyB0aGUgc3RhdGUgdG8KIAkgKiBUWElETEUgYWZ0ZXIgdGhlIHRlc3QgYnV0IGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2suCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5jb2xsZWN0X2xvY2ssIHNhdmVmbGFncyk7CkBAIC0yMzkzLDEyICsyMzc5LDEwIEBACiAKIAkvKioKIAkgKiBJZiBjaGFubmVscyBhcmUgbm90IHJ1bm5pbmcsIHRyeSB0byByZXN0YXJ0IHRoZW0KLQkgKiBhbmQgdGhyb3cgYXdheSBwYWNrZXQuIAorCSAqIGFuZCB0aHJvdyBhd2F5IHBhY2tldC4KIAkgKi8KIAlpZiAoZnNtX2dldHN0YXRlKHByaXZwdHItPmZzbSkgIT0gREVWX1NUQVRFX1JVTk5JTkcpIHsKIAkJZnNtX2V2ZW50KHByaXZwdHItPmZzbSwgREVWX0VWRU5UX1NUQVJULCBkZXYpOwotCQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJCXJldHVybiAtRUJVU1k7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcHJpdnB0ci0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlwcml2cHRyLT5zdGF0cy50eF9lcnJvcnMrKzsKQEAgLTI2MDgsMjAgKzI1OTIsMTMgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCXByaXZwdHIgPSAoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdjsKLQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQllbHNlCi0JCWN0Y190dHlfdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogfQogCiBzdGF0aWMgaW50CiBjdGNfbmV0ZGV2X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2OwotCWlmIChwcml2cHRyLT5wcm90b2NvbCAhPSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZWxzZQotCQlyZXR1cm4gY3RjX3R0eV9yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNjY3LDcgKzI2NDQsOSBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJc3NjYW5mKGJ1ZiwgIiV1IiwgJnZhbHVlKTsKLQlpZiAoKHZhbHVlIDwgMCkgfHwgKHZhbHVlID4gQ1RDX1BST1RPX01BWCkpCisJaWYgKCEoKHZhbHVlID09IENUQ19QUk9UT19TMzkwKSAgfHwKKwkgICAgICAodmFsdWUgPT0gQ1RDX1BST1RPX0xJTlVYKSB8fAorCSAgICAgICh2YWx1ZSA9PSBDVENfUFJPVE9fT1MzOTApKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcHJpdi0+cHJvdG9jb2wgPSB2YWx1ZTsKIApAQCAtMjczOCw3ICsyNzE3LDcgQEAKIC8qKgogICogQWRkIGN0YyBzcGVjaWZpYyBhdHRyaWJ1dGVzLgogICogQWRkIGN0YyBwcml2YXRlIGRhdGEuCi0gKiAKKyAqCiAgKiBAcGFyYW0gY2dkZXYgcG9pbnRlciB0byBjY3dncm91cF9kZXZpY2UganVzdCBhZGRlZAogICoKICAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgITAgb24gZmFpbHVyZS4KQEAgLTI4NjksNyArMjg0OCw3IEBACiAJREJGX1RFWFQoc2V0dXAsIDMsIGJ1ZmZlcik7CiAKIAl0eXBlID0gZ2V0X2NoYW5uZWxfdHlwZSgmY2dkZXYtPmNkZXZbMF0tPmlkKTsKLQkKKwogCXNucHJpbnRmKHJlYWRfaWQsIENUQ19JRF9TSVpFLCAiY2gtJXMiLCBjZ2Rldi0+Y2RldlswXS0+ZGV2LmJ1c19pZCk7CiAJc25wcmludGYod3JpdGVfaWQsIENUQ19JRF9TSVpFLCAiY2gtJXMiLCBjZ2Rldi0+Y2RldlsxXS0+ZGV2LmJ1c19pZCk7CiAKQEAgLTI4OTcsMTcgKzI4NzYsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHByaXZwdHItPnByb3RvY29sID09IENUQ19QUk9UT19MSU5VWF9UVFkpCi0JCXN0cmxjcHkoZGV2LT5uYW1lLCAiY3RjdHR5JWQiLCBJRk5BTVNJWik7Ci0JZWxzZQotCQlzdHJsY3B5KGRldi0+bmFtZSwgImN0YyVkIiwgSUZOQU1TSVopOworCXN0cmxjcHkoZGV2LT5uYW1lLCAiY3RjJWQiLCBJRk5BTVNJWik7CiAKIAlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspIHsKIAkJcHJpdnB0ci0+Y2hhbm5lbFtkaXJlY3Rpb25dID0KIAkJICAgIGNoYW5uZWxfZ2V0KHR5cGUsIGRpcmVjdGlvbiA9PSBSRUFEID8gcmVhZF9pZCA6IHdyaXRlX2lkLAogCQkJCWRpcmVjdGlvbik7CiAJCWlmIChwcml2cHRyLT5jaGFubmVsW2RpcmVjdGlvbl0gPT0gTlVMTCkgewotCQkJaWYgKGRpcmVjdGlvbiA9PSBXUklURSkgCisJCQlpZiAoZGlyZWN0aW9uID09IFdSSVRFKQogCQkJCWNoYW5uZWxfZnJlZShwcml2cHRyLT5jaGFubmVsW1JFQURdKTsKIAogCQkJY3RjX2ZyZWVfbmV0ZGV2aWNlKGRldiwgMSk7CkBAIC0yOTU1LDcgKzI5MzEsNyBAQAogewogCXN0cnVjdCBjdGNfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKLQkJCisKIAlEQkZfVEVYVChzZXR1cCwgMywgX19GVU5DVElPTl9fKTsKIAlwcl9kZWJ1ZygiJXMoKSBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAKQEAgLTMwNDYsNyArMzAyMiw2IEBACiB7CiAJREJGX1RFWFQoc2V0dXAsIDMsIF9fRlVOQ1RJT05fXyk7CiAJdW5yZWdpc3Rlcl9jdTMwODhfZGlzY2lwbGluZSgmY3RjX2dyb3VwX2RyaXZlcik7Ci0JY3RjX3R0eV9jbGVhbnVwKCk7CiAJY3RjX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CiAJY3RjX3ByX2luZm8oIkNUQyBkcml2ZXIgdW5sb2FkZWRcbiIpOwogfQpAQCAtMzA3MywxMCArMzA0OCw4IEBACiAJCWN0Y19wcl9jcml0KCJjdGNfaW5pdCBmYWlsZWQgd2l0aCBjdGNfcmVnaXN0ZXJfZGJmX3ZpZXdzIHJjID0gJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWN0Y190dHlfaW5pdCgpOwogCXJldCA9IHJlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKCZjdGNfZ3JvdXBfZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCWN0Y190dHlfY2xlYW51cCgpOwogCQljdGNfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKIAl9CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5oIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmgKaW5kZXggZDJlODM1Yy4uN2YzMDVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmgKQEAgLTM1LDcgKzM1LDkgQEAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Njd2dyb3VwLmg+CiAKLSNpbmNsdWRlICJjdGN0dHkuaCIKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKwogI2luY2x1ZGUgImZzbS5oIgogI2luY2x1ZGUgImN1MzA4OC5oIgogCkBAIC01MCw5ICs1Miw3IEBACiAKICNkZWZpbmUgQ1RDX1BST1RPX1MzOTAgICAgICAgICAgMAogI2RlZmluZSBDVENfUFJPVE9fTElOVVggICAgICAgICAxCi0jZGVmaW5lIENUQ19QUk9UT19MSU5VWF9UVFkgICAgIDIKICNkZWZpbmUgQ1RDX1BST1RPX09TMzkwICAgICAgICAgMwotI2RlZmluZSBDVENfUFJPVE9fTUFYICAgICAgICAgICAzCiAKICNkZWZpbmUgQ1RDX0JVRlNJWkVfTElNSVQgICAgICAgNjU1MzUKICNkZWZpbmUgQ1RDX0JVRlNJWkVfREVGQVVMVCAgICAgMzI3NjgKQEAgLTI1NywxNSArMjU3LDEzIEBACiBjdGNfY2xlYXJfYnVzeShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAljbGVhcl9iaXQoMCwgJigoKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXYpLT50YnVzeSkpOwotCWlmICgoKHN0cnVjdCBjdGNfcHJpdiAqKWRldi0+cHJpdiktPnByb3RvY29sICE9IENUQ19QUk9UT19MSU5VWF9UVFkpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludAogY3RjX3Rlc3RfYW5kX3NldF9idXN5KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewotCWlmICgoKHN0cnVjdCBjdGNfcHJpdiAqKWRldi0+cHJpdiktPnByb3RvY29sICE9IENUQ19QUk9UT19MSU5VWF9UVFkpCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJigoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdiktPnRidXN5KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZGNkYmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNTkgKzAsMCBAQAotLyoKLSAqIENUQyAvIEVTQ09OIG5ldHdvcmsgZHJpdmVyLCB0dHkgaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiBBdXRob3Iocyk6IEZyaXR6IEVsZmVydCAoZWxmZXJ0QGRlLmlibS5jb20sIGZlbGZlcnRAbWlsbGVudXguY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgotI2luY2x1ZGUgImN0Y3R0eS5oIgotI2luY2x1ZGUgImN0Y2RidWcuaCIKLQotI2RlZmluZSBDVENfVFRZX01BSk9SICAgICAgIDQzCi0jZGVmaW5lIENUQ19UVFlfTUFYX0RFVklDRVMgNjQKLQotI2RlZmluZSBDVENfQVNZTkNfTUFHSUMgICAgICAgICAgMHg0OTM0NEMwMSAvKiBmb3IgcGFyYW5vaWEtY2hlY2tpbmcgICAgICAgICovCi0jZGVmaW5lIENUQ19BU1lOQ19JTklUSUFMSVpFRCAgICAweDgwMDAwMDAwIC8qIHBvcnQgd2FzIGluaXRpYWxpemVkICAgICAgICAgKi8KLSNkZWZpbmUgQ1RDX0FTWU5DX05PUk1BTF9BQ1RJVkUgIDB4MjAwMDAwMDAgLyogTm9ybWFsIGRldmljZSBhY3RpdmUgICAgICAgICAqLwotI2RlZmluZSBDVENfQVNZTkNfQ0xPU0lORyAgICAgICAgMHgwODAwMDAwMCAvKiBTZXJpYWwgcG9ydCBpcyBjbG9zaW5nICAgICAgICovCi0jZGVmaW5lIENUQ19BU1lOQ19DVFNfRkxPVyAgICAgICAweDA0MDAwMDAwIC8qIERvIENUUyBmbG93IGNvbnRyb2wgICAgICAgICAgKi8KLSNkZWZpbmUgQ1RDX0FTWU5DX0NIRUNLX0NEICAgICAgIDB4MDIwMDAwMDAgLyogaS5lLiwgQ0xPQ0FMICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDVENfQVNZTkNfSFVQX05PVElGWSAgICAgICAgIDB4MDAwMSAvKiBOb3RpZnkgdHR5IG9uIGhhbmd1cHMvY2xvc2VzICovCi0jZGVmaW5lIENUQ19BU1lOQ19ORVRERVZfT1BFTiAgICAgICAgMHgwMDAyIC8qIFVuZGVybHlpbmcgbmV0ZGV2IGlzIG9wZW4gICAgKi8KLSNkZWZpbmUgQ1RDX0FTWU5DX1RYX0xJTkVTVEFUICAgICAgICAweDAwMDQgLyogTXVzdCBzZW5kIGxpbmUgc3RhdHVzICAgICAgICAqLwotI2RlZmluZSBDVENfQVNZTkNfU1BMSVRfVEVSTUlPUyAgICAgIDB4MDAwOCAvKiBTZXAuIHRlcm1pb3MgZm9yIGRpYWxpbi9vdXQgICovCi0jZGVmaW5lIENUQ19UVFlfWE1JVF9TSVpFICAgICAgICAgICAgICAxMDI0IC8qIERlZmF1bHQgYnVmc2l6ZSBmb3Igd3JpdGUgICAgKi8KLSNkZWZpbmUgQ1RDX1NFUklBTF9YTUlUX01BWCAgICAgICAgICAgIDQwMDAgLyogTWF4aW11bSBidWZzaXplIGZvciB3cml0ZSAgICAqLwotCi0vKiBQcml2YXRlIGRhdGEgKHNpbWlsYXIgdG8gYXN5bmNfc3RydWN0IGluIDxsaW51eC9zZXJpYWwuaD4pICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGludAkJCW1hZ2ljOwotICBpbnQJCQlmbGFnczsJCSAvKiBkZWZpbmVkIGluIHR0eS5oICAgICAgICAgICAgICAgKi8KLSAgaW50CQkJbWNyOwkJIC8qIE1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgICAqLwotICBpbnQgICAgICAgICAgICAgICAgICAgbXNyOyAgICAgICAgICAgICAvKiBNb2RlbSBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgKi8KLSAgaW50ICAgICAgICAgICAgICAgICAgIGxzcjsgICAgICAgICAgICAgLyogTGluZSBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICovCi0gIGludAkJCWxpbmU7Ci0gIGludAkJCWNvdW50OwkJIC8qICMgb2YgZmQgb24gZGV2aWNlICAgICAgICAgICAgICAqLwotICBpbnQJCQlibG9ja2VkX29wZW47CSAvKiAjIG9mIGJsb2NrZWQgb3BlbnMgICAgICAgICAgICAgKi8KLSAgc3RydWN0IG5ldF9kZXZpY2UgICAgICpuZXRkZXY7Ci0gIHN0cnVjdCBza19idWZmX2hlYWQgICB0eF9xdWV1ZTsgICAgICAgIC8qIHRyYW5zbWl0IHF1ZXVlICAgICAgICAgICAgICAgICAqLwotICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgcnhfcXVldWU7ICAgICAgICAvKiByZWNlaXZlIHF1ZXVlICAgICAgICAgICAgICAgICAgKi8KLSAgc3RydWN0IHR0eV9zdHJ1Y3QgCSp0dHk7ICAgICAgICAgICAgLyogUG9pbnRlciB0byBjb3JyZXNwb25kaW5nIHR0eSAgICovCi0gIHdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKLSAgd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKLSAgc3RydWN0IHNlbWFwaG9yZSAgICAgIHdyaXRlX3NlbTsKLSAgc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7Ci0gIHN0cnVjdCB0aW1lcl9saXN0ICAgICBzdG9wdGltZXI7Ci19IGN0Y190dHlfaW5mbzsKLQotLyogRGVzY3JpcHRpb24gb2Ygb25lIENUQy10dHkgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgc3RydWN0IHR0eV9kcml2ZXIgICpjdGNfdHR5X2RldmljZTsJCSAgIC8qIHR0eS1kZXZpY2UgICAgICAgICAgICAgKi8KLSAgY3RjX3R0eV9pbmZvICAgICAgIGluZm9bQ1RDX1RUWV9NQVhfREVWSUNFU107CSAgIC8qIFByaXZhdGUgZGF0YSAgICAgICAgICAgKi8KLX0gY3RjX3R0eV9kcml2ZXI7Ci0KLXN0YXRpYyBjdGNfdHR5X2RyaXZlciAqZHJpdmVyOwotCi0vKiBMZWF2ZSB0aGlzIHVuY2hhbmdlZCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgZG8hICovCi0jZGVmaW5lIE1PREVNX1BBUkFOT0lBX0NIRUNLCi0jZGVmaW5lIE1PREVNX0RPX1JFU1RBUlQKLQotI2RlZmluZSBDVENfVFRZX05BTUUgImN0Y3R0eSIKLQotc3RhdGljIF9fdTMyIGN0Y190dHlfbWFnaWMgPSBDVENfQVNZTkNfTUFHSUM7Ci1zdGF0aWMgaW50IGN0Y190dHlfc2h1dHRpbmdkb3duID0gMDsKLQotc3RhdGljIHNwaW5sb2NrX3QgY3RjX3R0eV9sb2NrOwotCi0vKiBjdGNfdHR5X3RyeV9yZWFkKCkgaXMgY2FsbGVkIGZyb20gd2l0aGluIGN0Y190dHlfcmN2X3NrYigpCi0gKiB0byBzdHVmZiBpbmNvbWluZyBkYXRhIGRpcmVjdGx5IGludG8gYSB0dHkncyBmbGlwLWJ1ZmZlci4gSWYgdGhlCi0gKiBmbGlwIGJ1ZmZlciBpcyBmdWxsLCB0aGUgcGFja2V0IGdldHMgcXVldWVkIHVwLgotICoKLSAqIFJldHVybjoKLSAqICAxID0gU3VjY2VzcwotICogIDAgPSBGYWlsdXJlLCBkYXRhIGhhcyB0byBiZSBidWZmZXJlZCBhbmQgbGF0ZXIgcHJvY2Vzc2VkIGJ5Ci0gKiAgICAgIGN0Y190dHlfcmVhZG1vZGVtKCkuCi0gKi8KLXN0YXRpYyBpbnQKLWN0Y190dHlfdHJ5X3JlYWQoY3RjX3R0eV9pbmZvICogaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgbGVuOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQlpZiAoKHR0eSA9IGluZm8tPnR0eSkpIHsKLQkJaWYgKGluZm8tPm1jciAmIFVBUlRfTUNSX1JUUykgewotCQkJbGVuID0gc2tiLT5sZW47Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgc2tiLT5kYXRhLCBsZW4pOwotCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGN0Y190dHlfcmVhZG1vZGVtKCkgaXMgY2FsbGVkIHBlcmlvZGljYWxseSBmcm9tIHdpdGhpbiB0aW1lci1pbnRlcnJ1cHQuCi0gKiBJdCB0cmllcyBnZXR0aW5nIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgcmVjZWl2ZSBxdWV1ZSBhbiBzdHVmZiBpdCBpbnRvCi0gKiB0aGUgdHR5J3MgZmxpcC1idWZmZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWN0Y190dHlfcmVhZG1vZGVtKGN0Y190dHlfaW5mbyAqaW5mbykKLXsKLQlpbnQgcmV0ID0gMTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCi0JREJGX1RFWFQodHJhY2UsIDUsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKCh0dHkgPSBpbmZvLT50dHkpKSB7Ci0JCWlmIChpbmZvLT5tY3IgJiBVQVJUX01DUl9SVFMpIHsKLQkJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCQkKLQkJCWlmICgoc2tiID0gc2tiX2RlcXVldWUoJmluZm8tPnJ4X3F1ZXVlKSkpIHsKLQkJCQlpbnQgbGVuID0gc2tiLT5sZW47Ci0JCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIHNrYi0+ZGF0YSwgbGVuKTsKLQkJCQlza2JfcHVsbChza2IsIGxlbik7Ci0JCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCQlpZiAoc2tiLT5sZW4gPiAwKQotCQkJCQlza2JfcXVldWVfaGVhZCgmaW5mby0+cnhfcXVldWUsIHNrYik7Ci0JCQkJZWxzZSB7Ci0JCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCQlyZXQgPSAhc2tiX3F1ZXVlX2VtcHR5KCZpbmZvLT5yeF9xdWV1ZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQKLWN0Y190dHlfc2V0Y2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgb24pCi17Ci0JaW50IGk7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlpZiAoKCFkcml2ZXIpIHx8IGN0Y190dHlfc2h1dHRpbmdkb3duKQotCQlyZXR1cm47Ci0JZm9yIChpID0gMDsgaSA8IENUQ19UVFlfTUFYX0RFVklDRVM7IGkrKykKLQkJaWYgKGRyaXZlci0+aW5mb1tpXS5uZXRkZXYgPT0gbmV0ZGV2KSB7Ci0JCQljdGNfdHR5X2luZm8gKmluZm8gPSAmZHJpdmVyLT5pbmZvW2ldOwotCQkJaWYgKG9uKQotCQkJCWluZm8tPm1zciB8PSBVQVJUX01TUl9EQ0Q7Ci0JCQllbHNlCi0JCQkJaW5mby0+bXNyICY9IH5VQVJUX01TUl9EQ0Q7Ci0JCQlpZiAoKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0NIRUNLX0NEKSAmJiAoIW9uKSkKLQkJCQl0dHlfaGFuZ3VwKGluZm8tPnR0eSk7Ci0JCX0KLX0KLQotdm9pZAotY3RjX3R0eV9uZXRpZl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBpOwotCWN0Y190dHlfaW5mbyAqaW5mbyA9IE5VTEw7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCWlmICgoIXNrYi0+ZGV2KSB8fCAoIWRyaXZlcikgfHwgY3RjX3R0eV9zaHV0dGluZ2Rvd24pIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBDVENfVFRZX01BWF9ERVZJQ0VTOyBpKyspCi0JCWlmIChkcml2ZXItPmluZm9baV0ubmV0ZGV2ID09IHNrYi0+ZGV2KSB7Ci0JCQlpbmZvID0gJmRyaXZlci0+aW5mb1tpXTsKLQkJCWJyZWFrOwotCQl9Ci0JaWYgKCFpbmZvKSB7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoc2tiLT5sZW4gPCA2KSB7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAobWVtY21wKHNrYi0+ZGF0YSwgJmN0Y190dHlfbWFnaWMsIHNpemVvZihfX3UzMikpKSB7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcHVsbChza2IsIHNpemVvZihfX3UzMikpOwotCi0JaSA9ICooKGludCAqKXNrYi0+ZGF0YSk7Ci0Jc2tiX3B1bGwoc2tiLCBzaXplb2YoaW5mby0+bWNyKSk7Ci0JaWYgKGkgJiBVQVJUX01DUl9SVFMpIHsKLQkJaW5mby0+bXNyIHw9IFVBUlRfTVNSX0NUUzsKLQkJaWYgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0NUU19GTE9XKQotCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMDsKLQl9IGVsc2UgewotCQlpbmZvLT5tc3IgJj0gflVBUlRfTVNSX0NUUzsKLQkJaWYgKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX0NUU19GTE9XKQotCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMTsKLQl9Ci0JaWYgKGkgJiBVQVJUX01DUl9EVFIpCi0JCWluZm8tPm1zciB8PSBVQVJUX01TUl9EU1I7Ci0JZWxzZQotCQlpbmZvLT5tc3IgJj0gflVBUlRfTVNSX0RTUjsKLQlpZiAoc2tiLT5sZW4gPD0gMCkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBUcnkgdG8gZGVsaXZlciBkaXJlY3RseSB2aWEgdHR5LWZsaXAtYnVmIGlmIHF1ZXVlIGlzIGVtcHR5ICovCi0JaWYgKHNrYl9xdWV1ZV9lbXB0eSgmaW5mby0+cnhfcXVldWUpKQotCQlpZiAoY3RjX3R0eV90cnlfcmVhZChpbmZvLCBza2IpKQotCQkJcmV0dXJuOwotCS8qIERpcmVjdCBkZWxpdmVyIGZhaWxlZCBvciBxdWV1ZSB3YXNuJ3QgZW1wdHkuCi0JICogUXVldWUgdXAgZm9yIGxhdGVyIGRlcXVldWVpbmcgdmlhIHRpbWVyLWlycS4KLQkgKi8KLQlza2JfcXVldWVfdGFpbCgmaW5mby0+cnhfcXVldWUsIHNrYik7Ci0JLyogU2NoZWR1bGUgZGVxdWV1aW5nICovCi0JdGFza2xldF9zY2hlZHVsZSgmaW5mby0+dGFza2xldCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWN0Y190dHlfdGludChjdGNfdHR5X2luZm8gKiBpbmZvKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfZGVxdWV1ZSgmaW5mby0+dHhfcXVldWUpOwotCWludCBzdG9wcGVkID0gKGluZm8tPnR0eS0+aHdfc3RvcHBlZCB8fCBpbmZvLT50dHktPnN0b3BwZWQpOwotCWludCB3YWtlID0gMTsKLQlpbnQgcmM7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlpZiAoIWluZm8tPm5ldGRldikgewotCQlpZiAoc2tiKQotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfVFhfTElORVNUQVQpIHsKLQkJaW50IHNrYl9yZXMgPSBpbmZvLT5uZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiArCi0JCQlzaXplb2YoaW5mby0+bWNyKSArIHNpemVvZihfX3UzMik7Ci0JCS8qIElmIHdlIG11c3QgdXBkYXRlIGxpbmUgc3RhdHVzLAotCQkgKiBjcmVhdGUgYW4gZW1wdHkgZHVtbXkgc2tiIGFuZCBpbnNlcnQgaXQuCi0JCSAqLwotCQlpZiAoc2tiKQotCQkJc2tiX3F1ZXVlX2hlYWQoJmluZm8tPnR4X3F1ZXVlLCBza2IpOwotCi0JCXNrYiA9IGRldl9hbGxvY19za2Ioc2tiX3Jlcyk7Ci0JCWlmICghc2tiKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImN0Y190dHk6IE91dCBvZiBtZW1vcnkgaW4gJXMlZCB0aW50XG4iLAotCQkJICAgICAgIENUQ19UVFlfTkFNRSwgaW5mby0+bGluZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlza2JfcmVzZXJ2ZShza2IsIHNrYl9yZXMpOwotCQlzdG9wcGVkID0gMDsKLQkJd2FrZSA9IDA7Ci0JfQotCWlmICghc2tiKQotCQlyZXR1cm4gMDsKLQlpZiAoc3RvcHBlZCkgewotCQlza2JfcXVldWVfaGVhZCgmaW5mby0+dHhfcXVldWUsIHNrYik7Ci0JCXJldHVybiAxOwotCX0KLSNpZiAwCi0JaWYgKHNrYi0+bGVuID4gMCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgInRpbnQ6ICVkICUwMnhcbiIsIHNrYi0+bGVuLCAqKHNrYi0+ZGF0YSkpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fREVCVUcgInRpbnQ6ICVkIFNUQVRcbiIsIHNrYi0+bGVuKTsKLSNlbmRpZgotCW1lbWNweShza2JfcHVzaChza2IsIHNpemVvZihpbmZvLT5tY3IpKSwgJmluZm8tPm1jciwgc2l6ZW9mKGluZm8tPm1jcikpOwotCW1lbWNweShza2JfcHVzaChza2IsIHNpemVvZihfX3UzMikpLCAmY3RjX3R0eV9tYWdpYywgc2l6ZW9mKF9fdTMyKSk7Ci0JcmMgPSBpbmZvLT5uZXRkZXYtPmhhcmRfc3RhcnRfeG1pdChza2IsIGluZm8tPm5ldGRldik7Ci0JaWYgKHJjKSB7Ci0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKGluZm8tPm1jcikgKyBzaXplb2YoX191MzIpKTsKLQkJaWYgKHNrYi0+bGVuID4gMCkKLQkJCXNrYl9xdWV1ZV9oZWFkKCZpbmZvLT50eF9xdWV1ZSwgc2tiKTsKLQkJZWxzZQotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKLQotCQlpbmZvLT5mbGFncyAmPSB+Q1RDX0FTWU5DX1RYX0xJTkVTVEFUOwotCQlpZiAodHR5KSB7Ci0JCQl0dHlfd2FrZXVwKHR0eSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIChza2JfcXVldWVfZW1wdHkoJmluZm8tPnR4X3F1ZXVlKSA/IDAgOiAxKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE1vZGVtLWZ1bmN0aW9ucwotICoKLSAqIG1vc3RseSAic3RvbGVuIiBmcm9tIG9yaWdpbmFsIExpbnV4LXNlcmlhbC5jIGFuZCBmcmllbmRzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1jdGNfdHR5X3BhcmFub2lhX2NoZWNrKGN0Y190dHlfaW5mbyAqIGluZm8sIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCi17Ci0jaWZkZWYgTU9ERU1fUEFSQU5PSUFfQ0hFQ0sKLQlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjX3R0eTogbnVsbCBpbmZvX3N0cnVjdCBmb3IgJXMgaW4gJXNcbiIsCi0JCSAgICAgICBuYW1lLCByb3V0aW5lKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmIChpbmZvLT5tYWdpYyAhPSBDVENfQVNZTkNfTUFHSUMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjX3R0eTogYmFkIG1hZ2ljIGZvciBpbmZvIHN0cnVjdCAlcyBpbiAlc1xuIiwKLQkJICAgICAgIG5hbWUsIHJvdXRpbmUpOwotCQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y190dHlfaW5qZWN0KGN0Y190dHlfaW5mbyAqaW5mbywgY2hhciBjKQotewotCWludCBza2JfcmVzOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGN0Y190dHlfc2h1dHRpbmdkb3duKQotCQlyZXR1cm47Ci0Jc2tiX3JlcyA9IGluZm8tPm5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICsgc2l6ZW9mKGluZm8tPm1jcikgKwotCQlzaXplb2YoX191MzIpICsgMTsKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYl9yZXMpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjdGNfdHR5OiBPdXQgb2YgbWVtb3J5IGluICVzJWQgdHhfaW5qZWN0XG4iLAotCQkgICAgICAgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIHNrYl9yZXMpOwotCSooc2tiX3B1dChza2IsIDEpKSA9IGM7Ci0Jc2tiX3F1ZXVlX2hlYWQoJmluZm8tPnR4X3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmluZm8tPnRhc2tsZXQpOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3R0eV90cmFuc21pdF9zdGF0dXMoY3RjX3R0eV9pbmZvICppbmZvKQotewotCURCRl9URVhUKHRyYWNlLCA1LCBfX0ZVTkNUSU9OX18pOwotCWlmIChjdGNfdHR5X3NodXR0aW5nZG93bikKLQkJcmV0dXJuOwotCWluZm8tPmZsYWdzIHw9IENUQ19BU1lOQ19UWF9MSU5FU1RBVDsKLQl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50YXNrbGV0KTsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y190dHlfY2hhbmdlX3NwZWVkKGN0Y190dHlfaW5mbyAqIGluZm8pCi17Ci0JdW5zaWduZWQgaW50IGNmbGFnOwotCXVuc2lnbmVkIGludCBxdW90OwotCWludCBpOwotCi0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKCFpbmZvLT50dHkgfHwgIWluZm8tPnR0eS0+dGVybWlvcykKLQkJcmV0dXJuOwotCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCi0JcXVvdCA9IGkgPSBjZmxhZyAmIENCQVVEOwotCWlmIChpICYgQ0JBVURFWCkgewotCQlpICY9IH5DQkFVREVYOwotCQlpZiAoaSA8IDEgfHwgaSA+IDIpCi0JCQlpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNCQVVERVg7Ci0JCWVsc2UKLQkJCWkgKz0gMTU7Ci0JfQotCWlmIChxdW90KSB7Ci0JCWluZm8tPm1jciB8PSBVQVJUX01DUl9EVFI7Ci0JCWluZm8tPm1jciB8PSBVQVJUX01DUl9SVFM7Ci0JCWN0Y190dHlfdHJhbnNtaXRfc3RhdHVzKGluZm8pOwotCX0gZWxzZSB7Ci0JCWluZm8tPm1jciAmPSB+VUFSVF9NQ1JfRFRSOwotCQlpbmZvLT5tY3IgJj0gflVBUlRfTUNSX1JUUzsKLQkJY3RjX3R0eV90cmFuc21pdF9zdGF0dXMoaW5mbyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBDVFMgZmxvdyBjb250cm9sIGZsYWcgYW5kIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHRzICovCi0JaWYgKGNmbGFnICYgQ1JUU0NUUykgewotCQlpbmZvLT5mbGFncyB8PSBDVENfQVNZTkNfQ1RTX0ZMT1c7Ci0JfSBlbHNlCi0JCWluZm8tPmZsYWdzICY9IH5DVENfQVNZTkNfQ1RTX0ZMT1c7Ci0JaWYgKGNmbGFnICYgQ0xPQ0FMKQotCQlpbmZvLT5mbGFncyAmPSB+Q1RDX0FTWU5DX0NIRUNLX0NEOwotCWVsc2UgewotCQlpbmZvLT5mbGFncyB8PSBDVENfQVNZTkNfQ0hFQ0tfQ0Q7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1jdGNfdHR5X3N0YXJ0dXAoY3RjX3R0eV9pbmZvICogaW5mbykKLXsKLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSU5JVElBTElaRUQpCi0JCXJldHVybiAwOwotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcgInN0YXJ0aW5nIHVwICVzJWQgLi4uXG4iLCBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUpOwotI2VuZGlmCi0JLyoKLQkgKiBOb3csIGluaXRpYWxpemUgdGhlIFVBUlQKLQkgKi8KLQlpbmZvLT5tY3IgPSBVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9SVFMgfCBVQVJUX01DUl9PVVQyOwotCWlmIChpbmZvLT50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKLQkvKgotCSAqIGFuZCBzZXQgdGhlIHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydAotCSAqLwotCWN0Y190dHlfY2hhbmdlX3NwZWVkKGluZm8pOwotCi0JaW5mby0+ZmxhZ3MgfD0gQ1RDX0FTWU5DX0lOSVRJQUxJWkVEOwotCWlmICghKGluZm8tPmZsYWdzICYgQ1RDX0FTWU5DX05FVERFVl9PUEVOKSkKLQkJaW5mby0+bmV0ZGV2LT5vcGVuKGluZm8tPm5ldGRldik7Ci0JaW5mby0+ZmxhZ3MgfD0gQ1RDX0FTWU5DX05FVERFVl9PUEVOOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3R0eV9zdG9wZGV2KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopZGF0YTsKLQotCWlmICgoIWluZm8pIHx8ICghaW5mby0+bmV0ZGV2KSB8fAotCSAgICAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSU5JVElBTElaRUQpKQotCQlyZXR1cm47Ci0JaW5mby0+bmV0ZGV2LT5zdG9wKGluZm8tPm5ldGRldik7Ci0JaW5mby0+ZmxhZ3MgJj0gfkNUQ19BU1lOQ19ORVRERVZfT1BFTjsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSB3aWxsIHNodXRkb3duIGEgc2VyaWFsIHBvcnQ7IGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBhbmQKLSAqIERUUiBpcyBkcm9wcGVkIGlmIHRoZSBoYW5ndXAgb24gY2xvc2UgdGVybWlvIGZsYWcgaXMgb24uCi0gKi8KLXN0YXRpYyB2b2lkCi1jdGNfdHR5X3NodXRkb3duKGN0Y190dHlfaW5mbyAqIGluZm8pCi17Ci0JREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSU5JVElBTElaRUQpKQotCQlyZXR1cm47Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQlwcmludGsoS0VSTl9ERUJVRyAiU2h1dHRpbmcgZG93biAlcyVkIC4uLi5cbiIsIENUQ19UVFlfTkFNRSwgaW5mby0+bGluZSk7Ci0jZW5kaWYKLQlpbmZvLT5tc3IgJj0gflVBUlRfTVNSX1JJOwotCWlmICghaW5mby0+dHR5IHx8IChpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpCi0JCWluZm8tPm1jciAmPSB+KFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUyk7Ci0JaWYgKGluZm8tPnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKLQltb2RfdGltZXIoJmluZm8tPnN0b3B0aW1lciwgamlmZmllcyArICgxMCAqIEhaKSk7Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZpbmZvLT50eF9xdWV1ZSk7Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZpbmZvLT5yeF9xdWV1ZSk7Ci0JaW5mby0+ZmxhZ3MgJj0gfkNUQ19BU1lOQ19JTklUSUFMSVpFRDsKLX0KLQotLyogY3RjX3R0eV93cml0ZSgpIGlzIHRoZSBtYWluIHNlbmQtcm91dGluZS4gSXQgaXMgY2FsbGVkIGZyb20gdGhlIHVwcGVyCi0gKiBsZXZlbHMgd2l0aGluIHRoZSBrZXJuZWwgdG8gcGVyZm9ybSBzZW5kaW5nIGRhdGEuIERlcGVuZGluZyBvbiB0aGUKLSAqIG9ubGluZS1mbGFnIGl0IGVpdGhlciBkaXJlY3RzIG91dHB1dCB0byB0aGUgYXQtY29tbWFuZC1pbnRlcnByZXRlciBvcgotICogdG8gdGhlIGxvd2VyIGxldmVsLiBBZGRpdGlvbmFsIHRhc2tzIGRvbmUgaGVyZToKLSAqICAtIElmIG9ubGluZSwgY2hlY2sgZm9yIGVzY2FwZS1zZXF1ZW5jZSAoKysrKQotICogIC0gSWYgc2VuZGluZyBhdWRpby1kYXRhLCBjYWxsIGN0Y190dHlfRExFZG93bigpIHRvIHBhcnNlIERMRS1jb2Rlcy4KLSAqICAtIElmIHJlY2VpdmluZyBhdWRpby1kYXRhLCBjYWxsIGN0Y190dHlfZW5kX3ZyeCgpIHRvIGFib3J0IGlmIG5lZWRlZC4KLSAqICAtIElmIGRpYWxpbmcsIGFib3J0IGRpYWwuCi0gKi8KLXN0YXRpYyBpbnQKLWN0Y190dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdV9jaGFyICogYnVmLCBpbnQgY291bnQpCi17Ci0JaW50IGM7Ci0JaW50IHRvdGFsID0gMDsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKLQlpZiAoY3RjX3R0eV9zaHV0dGluZ2Rvd24pCi0JCWdvdG8gZXg7Ci0JaWYgKGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV93cml0ZSIpKQotCQlnb3RvIGV4OwotCWlmICghdHR5KQotCQlnb3RvIGV4OwotCWlmICghaW5mby0+bmV0ZGV2KSB7Ci0JCXRvdGFsID0gLUVOT0RFVjsKLQkJZ290byBleDsKLQl9Ci0Jd2hpbGUgKDEpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJaW50IHNrYl9yZXM7Ci0KLQkJYyA9IChjb3VudCA8IENUQ19UVFlfWE1JVF9TSVpFKSA/IGNvdW50IDogQ1RDX1RUWV9YTUlUX1NJWkU7Ci0JCWlmIChjIDw9IDApCi0JCQlicmVhazsKLQkJCi0JCXNrYl9yZXMgPSBpbmZvLT5uZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiArIHNpemVvZihpbmZvLT5tY3IpICsKLQkJCSsgc2l6ZW9mKF9fdTMyKTsKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihza2JfcmVzICsgYyk7Ci0JCWlmICghc2tiKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImN0Y190dHk6IE91dCBvZiBtZW1vcnkgaW4gJXMlZCB3cml0ZVxuIiwKLQkJCSAgICAgICBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2tiX3Jlc2VydmUoc2tiLCBza2JfcmVzKTsKLQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBjKSwgYnVmLCBjKTsKLQkJc2tiX3F1ZXVlX3RhaWwoJmluZm8tPnR4X3F1ZXVlLCBza2IpOwotCQlidWYgKz0gYzsKLQkJdG90YWwgKz0gYzsKLQkJY291bnQgLT0gYzsKLQl9Ci0JaWYgKCFza2JfcXVldWVfZW1wdHkoJmluZm8tPnR4X3F1ZXVlKSkgewotCQlpbmZvLT5sc3IgJj0gflVBUlRfTFNSX1RFTVQ7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJmluZm8tPnRhc2tsZXQpOwotCX0KLWV4OgotCURCRl9URVhUKHRyYWNlLCA2LCBfX0ZVTkNUSU9OX18pOwotCXJldHVybiB0b3RhbDsKLX0KLQotc3RhdGljIGludAotY3RjX3R0eV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCi0JaWYgKGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV93cml0ZV9yb29tIikpCi0JCXJldHVybiAwOwotCXJldHVybiBDVENfVFRZX1hNSVRfU0laRTsKLX0KLQotc3RhdGljIGludAotY3RjX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X2NoYXJzX2luX2J1ZmZlciIpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWN0Y190dHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlpZiAoIXR0eSkKLQkJZ290byBleDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JaW5mbyA9IChjdGNfdHR5X2luZm8gKikgdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X2ZsdXNoX2J1ZmZlciIpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotCQlnb3RvIGV4OwotCX0KLQlza2JfcXVldWVfcHVyZ2UoJmluZm8tPnR4X3F1ZXVlKTsKLQlpbmZvLT5sc3IgfD0gVUFSVF9MU1JfVEVNVDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0JdHR5X3dha2V1cCh0dHkpOwotZXg6Ci0JREJGX1RFWFRfKHRyYWNlLCAyLCAiZXg6ICVzICIsIF9fRlVOQ1RJT05fXyk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3R0eV9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWN0Y190dHlfaW5mbyAqaW5mbyA9IChjdGNfdHR5X2luZm8gKikgdHR5LT5kcml2ZXJfZGF0YTsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmIChjdGNfdHR5X3NodXR0aW5nZG93bikKLQkJcmV0dXJuOwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfZmx1c2hfY2hhcnMiKSkKLQkJcmV0dXJuOwotCWlmICh0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkIHx8IHNrYl9xdWV1ZV9lbXB0eSgmaW5mby0+dHhfcXVldWUpKQotCQlyZXR1cm47Ci0JdGFza2xldF9zY2hlZHVsZSgmaW5mby0+dGFza2xldCk7Ci19Ci0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGN0Y190dHlfdGhyb3R0bGUoKQotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHVwcGVyLWxheWVyIHR0eSBsYXllciB0byBzaWduYWwgdGhhdAotICogaW5jb21pbmcgY2hhcmFjdGVycyBzaG91bGQgYmUgdGhyb3R0bGVkLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkCi1jdGNfdHR5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV90aHJvdHRsZSIpKQotCQlyZXR1cm47Ci0JaW5mby0+bWNyICY9IH5VQVJUX01DUl9SVFM7Ci0JaWYgKElfSVhPRkYodHR5KSkKLQkJY3RjX3R0eV9pbmplY3QoaW5mbywgU1RPUF9DSEFSKHR0eSkpOwotCWN0Y190dHlfdHJhbnNtaXRfc3RhdHVzKGluZm8pOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3R0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV91bnRocm90dGxlIikpCi0JCXJldHVybjsKLQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfUlRTOwotCWlmIChJX0lYT0ZGKHR0eSkpCi0JCWN0Y190dHlfaW5qZWN0KGluZm8sIFNUQVJUX0NIQVIodHR5KSk7Ci0JY3RjX3R0eV90cmFuc21pdF9zdGF0dXMoaW5mbyk7Ci19Ci0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGN0Y190dHlfaW9jdGwoKSBhbmQgZnJpZW5kcwotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIGN0Y190dHlfZ2V0X2xzcl9pbmZvIC0gZ2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyIGluZm8KLSAqCi0gKiBQdXJwb3NlOiBMZXQgdXNlciBjYWxsIGlvY3RsKCkgdG8gZ2V0IGluZm8gd2hlbiB0aGUgVUFSVCBwaHlzaWNhbGx5Ci0gKiAgICAgICAgICBpcyBlbXB0aWVkLiAgT24gYnVzIHR5cGVzIGxpa2UgUlM0ODUsIHRoZSB0cmFuc21pdHRlciBtdXN0Ci0gKiAgICAgICAgICByZWxlYXNlIHRoZSBidXMgYWZ0ZXIgdHJhbnNtaXR0aW5nLiBUaGlzIG11c3QgYmUgZG9uZSB3aGVuCi0gKiAgICAgICAgICB0aGUgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgaXMgZW1wdHksIG5vdCBiZSBkb25lIHdoZW4gdGhlCi0gKiAgICAgICAgICB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGlzIGVtcHR5LiAgVGhpcyBmdW5jdGlvbmFsaXR5Ci0gKiAgICAgICAgICBhbGxvd3MgUlM0ODUgZHJpdmVyIHRvIGJlIHdyaXR0ZW4gaW4gdXNlciBzcGFjZS4KLSAqLwotc3RhdGljIGludAotY3RjX3R0eV9nZXRfbHNyX2luZm8oY3RjX3R0eV9pbmZvICogaW5mbywgdWludCBfX3VzZXIgKnZhbHVlKQotewotCXVfY2hhciBzdGF0dXM7Ci0JdWludCByZXN1bHQ7Ci0JdWxvbmcgZmxhZ3M7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0Jc3RhdHVzID0gaW5mby0+bHNyOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotCXJlc3VsdCA9ICgoc3RhdHVzICYgVUFSVF9MU1JfVEVNVCkgPyBUSU9DU0VSX1RFTVQgOiAwKTsKLQlwdXRfdXNlcihyZXN1bHQsIHZhbHVlKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGN0Y190dHlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY3RjX3R0eV9pbmZvICppbmZvID0gKGN0Y190dHlfaW5mbyAqKSB0dHktPmRyaXZlcl9kYXRhOwotCXVfY2hhciBjb250cm9sLAotCSBzdGF0dXM7Ci0JdWludCByZXN1bHQ7Ci0JdWxvbmcgZmxhZ3M7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X2lvY3RsIikpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQljb250cm9sID0gaW5mby0+bWNyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQlzdGF0dXMgPSBpbmZvLT5tc3I7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JcmVzdWx0ID0gKChjb250cm9sICYgVUFSVF9NQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCi0JICAgIHwgKChjb250cm9sICYgVUFSVF9NQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCi0JICAgIHwgKChzdGF0dXMgJiBVQVJUX01TUl9EQ0QpID8gVElPQ01fQ0FSIDogMCkKLQkgICAgfCAoKHN0YXR1cyAmIFVBUlRfTVNSX1JJKSA/IFRJT0NNX1JORyA6IDApCi0JICAgIHwgKChzdGF0dXMgJiBVQVJUX01TUl9EU1IpID8gVElPQ01fRFNSIDogMCkKLQkgICAgfCAoKHN0YXR1cyAmIFVBUlRfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50Ci1jdGNfdHR5X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQotewotCWN0Y190dHlfaW5mbyAqaW5mbyA9IChjdGNfdHR5X2luZm8gKikgdHR5LT5kcml2ZXJfZGF0YTsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfaW9jdGwiKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChzZXQgJiBUSU9DTV9SVFMpCi0JCWluZm8tPm1jciB8PSBVQVJUX01DUl9SVFM7Ci0JaWYgKHNldCAmIFRJT0NNX0RUUikKLQkJaW5mby0+bWNyIHw9IFVBUlRfTUNSX0RUUjsKLQotCWlmIChjbGVhciAmIFRJT0NNX1JUUykKLQkJaW5mby0+bWNyICY9IH5VQVJUX01DUl9SVFM7Ci0JaWYgKGNsZWFyICYgVElPQ01fRFRSKQotCQlpbmZvLT5tY3IgJj0gflVBUlRfTUNSX0RUUjsKLQotCWlmICgoc2V0IHwgY2xlYXIpICYgKFRJT0NNX1JUU3xUSU9DTV9EVFIpKQotCQljdGNfdHR5X3RyYW5zbWl0X3N0YXR1cyhpbmZvKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotY3RjX3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkgICAgICAgdWludCBjbWQsIHVsb25nIGFyZykKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaW50IGVycm9yOwotCWludCByZXR2YWw7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKLQlpZiAoY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X2lvY3RsIikpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkKLQkJcmV0dXJuIC1FSU87Ci0Jc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBUQ1NCUks6ICAgLyogU1ZJRCB2ZXJzaW9uOiBub24temVybyBhcmcgLS0+IG5vIGJyZWFrICovCi0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX0lPQ1RMCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXMlZCBpb2N0bCBUQ1NCUktcbiIsIENUQ19UVFlfTkFNRSwgaW5mby0+bGluZSk7Ci0jZW5kaWYKLQkJCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKLQkJCWlmIChyZXR2YWwpCi0JCQkJcmV0dXJuIHJldHZhbDsKLQkJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKLQkJCXJldHVybiAwOwotCQljYXNlIFRDU0JSS1A6ICAvKiBzdXBwb3J0IGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCi0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX0lPQ1RMCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXMlZCBpb2N0bCBUQ1NCUktQXG4iLCBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUpOwotI2VuZGlmCi0JCQlyZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7Ci0JCQlpZiAocmV0dmFsKQotCQkJCXJldHVybiByZXR2YWw7Ci0JCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBUSU9DR1NPRlRDQVI6Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX0lPQ1RMCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXMlZCBpb2N0bCBUSU9DR1NPRlRDQVJcbiIsIENUQ19UVFlfTkFNRSwKLQkJCSAgICAgICBpbmZvLT5saW5lKTsKLSNlbmRpZgotCQkJZXJyb3IgPSBwdXRfdXNlcihDX0NMT0NBTCh0dHkpID8gMSA6IDAsICh1bG9uZyBfX3VzZXIgKikgYXJnKTsKLQkJCXJldHVybiBlcnJvcjsKLQkJY2FzZSBUSU9DU1NPRlRDQVI6Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX0lPQ1RMCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXMlZCBpb2N0bCBUSU9DU1NPRlRDQVJcbiIsIENUQ19UVFlfTkFNRSwKLQkJCSAgICAgICBpbmZvLT5saW5lKTsKLSNlbmRpZgotCQkJZXJyb3IgPSBnZXRfdXNlcihhcmcsICh1bG9uZyBfX3VzZXIgKikgYXJnKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPQotCQkJICAgICgodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgfkNMT0NBTCkgfAotCQkJICAgICAoYXJnID8gQ0xPQ0FMIDogMCkpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgVElPQ1NFUkdFVExTUjoJLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCi0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX0lPQ1RMCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXMlZCBpb2N0bCBUSU9DU0VSR0VUTFNSXG4iLCBDVENfVFRZX05BTUUsCi0JCQkgICAgICAgaW5mby0+bGluZSk7Ci0jZW5kaWYKLQkJCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YodWludCkpKQotCQkJCXJldHVybiBjdGNfdHR5X2dldF9sc3JfaW5mbyhpbmZvLCAodWludCBfX3VzZXIgKikgYXJnKTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJZGVmYXVsdDoKLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fSU9DVEwKLQkJCXByaW50ayhLRVJOX0RFQlVHICJVTktOT1dOIGlvY3RsIDB4JTA4eCBvbiAlcyVkXG4iLCBjbWQsCi0JCQkgICAgICAgQ1RDX1RUWV9OQU1FLCBpbmZvLT5saW5lKTsKLSNlbmRpZgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGNfdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgaW50IGNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCi0JREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7Ci0JY3RjX3R0eV9jaGFuZ2Vfc3BlZWQoaW5mbyk7Ci0KLQkvKiBIYW5kbGUgdHJhbnNpdGlvbiB0byBCMCAqLwotCWlmICgob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgJiYgIShjZmxhZyAmIENCQVVEKSkgewotCQlpbmZvLT5tY3IgJj0gfihVQVJUX01DUl9EVFJ8VUFSVF9NQ1JfUlRTKTsKLQkJY3RjX3R0eV90cmFuc21pdF9zdGF0dXMoaW5mbyk7Ci0JfQotCi0JLyogSGFuZGxlIHRyYW5zaXRpb24gZnJvbSBCMCB0byBvdGhlciAqLwotCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpICYmIChjZmxhZyAmIENCQVVEKSkgewotCQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfRFRSOwotCQlpZiAoISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB8fAotICAgICAgICAgICAgICAgICAgICAhdGVzdF9iaXQoVFRZX1RIUk9UVExFRCwgJnR0eS0+ZmxhZ3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfUlRTOwotICAgICAgICAgICAgICAgIH0KLQkJY3RjX3R0eV90cmFuc21pdF9zdGF0dXMoaW5mbyk7Ci0JfQotCi0JLyogSGFuZGxlIHR1cm5pbmcgb2ZmIENSVFNDVFMgKi8KLQlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKLSAgICAgICAgICAgICEodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykpCi0gICAgICAgICAgICAgICAgdHR5LT5od19zdG9wcGVkID0gMDsKLX0KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogY3RjX3R0eV9vcGVuKCkgYW5kIGZyaWVuZHMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgaW50Ci1jdGNfdHR5X2Jsb2NrX3RpbF9yZWFkeShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCwgY3RjX3R0eV9pbmZvICppbmZvKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIE5VTEwpOwotCWludCBkb19jbG9jYWwgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldHZhbDsKLQotCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwotCS8qCi0JICogSWYgdGhlIGRldmljZSBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGNsb3NlZCwgdGhlbiBibG9jawotCSAqIHVudGlsIGl0J3MgZG9uZSwgYW5kIHRoZW4gdHJ5IGFnYWluLgotCSAqLwotCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8Ci0JICAgIChpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19DTE9TSU5HKSkgewotCQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfQ0xPU0lORykKLQkJCXdhaXRfZXZlbnQoaW5mby0+Y2xvc2Vfd2FpdCwgCi0JCQkJICAgIShpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19DTE9TSU5HKSk7Ci0jaWZkZWYgTU9ERU1fRE9fUkVTVEFSVAotCQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSFVQX05PVElGWSkKLQkJCXJldHVybiAtRUFHQUlOOwotCQllbHNlCi0JCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotI2Vsc2UKLQkJcmV0dXJuIC1FQUdBSU47Ci0jZW5kaWYKLQl9Ci0JLyoKLQkgKiBJZiBub24tYmxvY2tpbmcgbW9kZSBpcyBzZXQsIHRoZW4gbWFrZSB0aGUgY2hlY2sgdXAgZnJvbnQKLQkgKiBhbmQgdGhlbiBleGl0LgotCSAqLwotCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8Ci0JICAgICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKLQkJaW5mby0+ZmxhZ3MgfD0gQ1RDX0FTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKQotCQlkb19jbG9jYWwgPSAxOwotCS8qCi0JICogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKLQkgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgotCSAqIHRoaXMgbG9vcCwgaW5mby0+Y291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKLQkgKiBjdGNfdHR5X2Nsb3NlKCkga25vd3Mgd2hlbiB0byBmcmVlIHRoaW5ncy4gIFdlIHJlc3RvcmUgaXQgdXBvbgotCSAqIGV4aXQsIGVpdGhlciBub3JtYWwgb3IgYWJub3JtYWwuCi0JICovCi0JcmV0dmFsID0gMDsKLQlhZGRfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQlwcmludGsoS0VSTl9ERUJVRyAiY3RjX3R0eV9ibG9ja190aWxfcmVhZHkgYmVmb3JlIGJsb2NrOiAlcyVkLCBjb3VudCA9ICVkXG4iLAotCSAgICAgICBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQlpZiAoISh0dHlfaHVuZ191cF9wKGZpbHApKSkKLQkJaW5mby0+Y291bnQtLTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQlpbmZvLT5ibG9ja2VkX29wZW4rKzsKLQl3aGlsZSAoMSkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAotCQkgICAgIShpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19JTklUSUFMSVpFRCkpIHsKLSNpZmRlZiBNT0RFTV9ET19SRVNUQVJUCi0JCQlpZiAoaW5mby0+ZmxhZ3MgJiBDVENfQVNZTkNfSFVQX05PVElGWSkKLQkJCQlyZXR2YWwgPSAtRUFHQUlOOwotCQkJZWxzZQotCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLSNlbHNlCi0JCQlyZXR2YWwgPSAtRUFHQUlOOwotI2VuZGlmCi0JCQlicmVhazsKLQkJfQotCQlpZiAoIShpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19DTE9TSU5HKSAmJgotCQkgICAgKGRvX2Nsb2NhbCB8fCAoaW5mby0+bXNyICYgVUFSVF9NU1JfRENEKSkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwotCQkJYnJlYWs7Ci0JCX0KLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fT1BFTgotCQlwcmludGsoS0VSTl9ERUJVRyAiY3RjX3R0eV9ibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6ICVzJWQsIGNvdW50ID0gJWRcbiIsCi0JCSAgICAgICBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCQlzY2hlZHVsZSgpOwotCX0KLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQotCQlpbmZvLT5jb3VudCsrOwotCWluZm8tPmJsb2NrZWRfb3Blbi0tOwotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfYmxvY2tfdGlsX3JlYWR5IGFmdGVyIGJsb2NraW5nOiAlcyVkLCBjb3VudCA9ICVkXG4iLAotCSAgICAgICBDVENfVFRZX05BTUUsIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0JaW5mby0+ZmxhZ3MgfD0gQ1RDX0FTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGEgc2VyaWFsIHBvcnQgaXMgb3BlbmVkLiAgSXQKLSAqIGVuYWJsZXMgaW50ZXJydXB0cyBmb3IgYSBzZXJpYWwgcG9ydCwgbGlua2luZyBpbiBpdHMgYXN5bmMgc3RydWN0dXJlIGludG8KLSAqIHRoZSBJUlEgY2hhaW4uICAgSXQgYWxzbyBwZXJmb3JtcyB0aGUgc2VyaWFsLXNwZWNpZmljCi0gKiBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHR0eSBzdHJ1Y3R1cmUuCi0gKi8KLXN0YXRpYyBpbnQKLWN0Y190dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQljdGNfdHR5X2luZm8gKmluZm87Ci0JdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3M7Ci0JaW50IHJldHZhbCwKLQkgbGluZTsKLQotCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotCWxpbmUgPSB0dHktPmluZGV4OwotCWlmIChsaW5lIDwgMCB8fCBsaW5lID4gQ1RDX1RUWV9NQVhfREVWSUNFUykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaW5mbyA9ICZkcml2ZXItPmluZm9bbGluZV07Ci0JaWYgKGN0Y190dHlfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3RjX3R0eV9vcGVuIikpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICghaW5mby0+bmV0ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fT1BFTgotCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X29wZW4gJXMsIGNvdW50ID0gJWRcbiIsIHR0eS0+bmFtZSwKLQkgICAgICAgaW5mby0+Y291bnQpOwotI2VuZGlmCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLQlpbmZvLT5jb3VudCsrOwotCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotCWluZm8tPnR0eSA9IHR0eTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGNfdHR5X2xvY2ssIHNhdmVmbGFncyk7Ci0JLyoKLQkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydAotCSAqLwotCXJldHZhbCA9IGN0Y190dHlfc3RhcnR1cChpbmZvKTsKLQlpZiAocmV0dmFsKSB7Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQkJcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfb3BlbiByZXR1cm4gYWZ0ZXIgc3RhcnR1cFxuIik7Ci0jZW5kaWYKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0JcmV0dmFsID0gY3RjX3R0eV9ibG9ja190aWxfcmVhZHkodHR5LCBmaWxwLCBpbmZvKTsKLQlpZiAocmV0dmFsKSB7Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQkJcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfb3BlbiByZXR1cm4gYWZ0ZXIgY3RjX3R0eV9ibG9ja190aWxfcmVhZHkgXG4iKTsKLSNlbmRpZgotCQlyZXR1cm4gcmV0dmFsOwotCX0KLSNpZmRlZiBDVENfREVCVUdfTU9ERU1fT1BFTgotCXByaW50ayhLRVJOX0RFQlVHICJjdGNfdHR5X29wZW4gJXMgc3VjY2Vzc2Z1bC4uLlxuIiwgdHR5LT5uYW1lKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotY3RjX3R0eV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQljdGNfdHR5X2luZm8gKmluZm8gPSAoY3RjX3R0eV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0JdWxvbmcgZmxhZ3M7Ci0JdWxvbmcgdGltZW91dDsKLQlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQlpZiAoIWluZm8gfHwgY3RjX3R0eV9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjdGNfdHR5X2Nsb3NlIikpCi0JCXJldHVybjsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQkJcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfY2xvc2UgcmV0dXJuIGFmdGVyIHR0eV9odW5nX3VwX3BcbiIpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5jb3VudCAhPSAxKSkgewotCQkvKgotCQkgKiBVaCwgb2guICB0dHktPmNvdW50IGlzIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHR0eQotCQkgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIEluZm8tPmNvdW50IHNob3VsZCBhbHdheXMKLQkJICogYmUgb25lIGluIHRoZXNlIGNvbmRpdGlvbnMuICBJZiBpdCdzIGdyZWF0ZXIgdGhhbgotCQkgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2JsZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKLQkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCi0JCSAqLwotCQlwcmludGsoS0VSTl9FUlIgImN0Y190dHlfY2xvc2U6IGJhZCBwb3J0IGNvdW50OyB0dHktPmNvdW50IGlzIDEsICIKLQkJICAgICAgICJpbmZvLT5jb3VudCBpcyAlZFxuIiwgaW5mby0+Y291bnQpOwotCQlpbmZvLT5jb3VudCA9IDE7Ci0JfQotCWlmICgtLWluZm8tPmNvdW50IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImN0Y190dHlfY2xvc2U6IGJhZCBwb3J0IGNvdW50IGZvciAlcyVkOiAlZFxuIiwKLQkJICAgICAgIENUQ19UVFlfTkFNRSwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwotCQlpbmZvLT5jb3VudCA9IDA7Ci0JfQotCWlmIChpbmZvLT5jb3VudCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jaWZkZWYgQ1RDX0RFQlVHX01PREVNX09QRU4KLQkJcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfY2xvc2UgYWZ0ZXIgaW5mby0+Y291bnQgIT0gMFxuIik7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlpbmZvLT5mbGFncyB8PSBDVENfQVNZTkNfQ0xPU0lORzsKLQl0dHktPmNsb3NpbmcgPSAxOwotCS8qCi0JICogQXQgdGhpcyBwb2ludCB3ZSBzdG9wIGFjY2VwdGluZyBpbnB1dC4gIFRvIGRvIHRoaXMsIHdlCi0JICogZGlzYWJsZSB0aGUgcmVjZWl2ZSBsaW5lIHN0YXR1cyBpbnRlcnJ1cHRzLCBhbmQgdGVsbCB0aGUKLQkgKiBpbnRlcnJ1cHQgZHJpdmVyIHRvIHN0b3AgY2hlY2tpbmcgdGhlIGRhdGEgcmVhZHkgYml0IGluIHRoZQotCSAqIGxpbmUgc3RhdHVzIHJlZ2lzdGVyLgotCSAqLwotCWlmIChpbmZvLT5mbGFncyAmIENUQ19BU1lOQ19JTklUSUFMSVpFRCkgewotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMzAqSFopOyAvKiAzMCBzZWNvbmRzIHRpbWVvdXQgKi8KLQkJLyoKLQkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKLQkJICogaGFzIGNvbXBsZXRlbHkgZHJhaW5lZDsgdGhpcyBpcyBlc3BlY2lhbGx5Ci0JCSAqIGltcG9ydGFudCBpZiB0aGVyZSBpcyBhIHRyYW5zbWl0IEZJRk8hCi0JCSAqLwotCQl0aW1lb3V0ID0gamlmZmllcyArIEhaOwotCQl3aGlsZSAoIShpbmZvLT5sc3IgJiBVQVJUX0xTUl9URU1UKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBmbGFncyk7Ci0JCQltc2xlZXAoNTAwKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIGZsYWdzKTsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsdGltZW91dCkpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JY3RjX3R0eV9zaHV0ZG93bihpbmZvKTsKLQlpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikgewotCQlza2JfcXVldWVfcHVyZ2UoJmluZm8tPnR4X3F1ZXVlKTsKLQkJaW5mby0+bHNyIHw9IFVBUlRfTFNSX1RFTVQ7Ci0JfQotCXR0eV9sZGlzY19mbHVzaCh0dHkpOwotCWluZm8tPnR0eSA9IDA7Ci0JdHR5LT5jbG9zaW5nID0gMDsKLQlpZiAoaW5mby0+YmxvY2tlZF9vcGVuKSB7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKLQl9Ci0JaW5mby0+ZmxhZ3MgJj0gfihDVENfQVNZTkNfTk9STUFMX0FDVElWRSB8IENUQ19BU1lOQ19DTE9TSU5HKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmNsb3NlX3dhaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgZmxhZ3MpOwotI2lmZGVmIENUQ19ERUJVR19NT0RFTV9PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcgImN0Y190dHlfY2xvc2Ugbm9ybWFsIGV4aXRcbiIpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBjdGNfdHR5X2hhbmd1cCgpIC0tLSBjYWxsZWQgYnkgdHR5X2hhbmd1cCgpIHdoZW4gYSBoYW5ndXAgaXMgc2lnbmFsZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1jdGNfdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWN0Y190dHlfaW5mbyAqaW5mbyA9IChjdGNfdHR5X2luZm8gKil0dHktPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotCWlmIChjdGNfdHR5X3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN0Y190dHlfaGFuZ3VwIikpCi0JCXJldHVybjsKLQljdGNfdHR5X3NodXRkb3duKGluZm8pOwotCWluZm8tPmNvdW50ID0gMDsKLQlpbmZvLT5mbGFncyAmPSB+Q1RDX0FTWU5DX05PUk1BTF9BQ1RJVkU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLQlpbmZvLT50dHkgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7Ci19Ci0KLQotLyoKLSAqIEZvciBhbGwgb25saW5lIHR0eSdzLCB0cnkgc2VuZGluZyBkYXRhIHRvCi0gKiB0aGUgbG93ZXIgbGV2ZWxzLgotICovCi1zdGF0aWMgdm9pZAotY3RjX3R0eV90YXNrKHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWN0Y190dHlfaW5mbyAqaW5mbyA9ICh2b2lkICopYXJnOwotCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCWludCBhZ2FpbjsKLQotCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIHNhdmVmbGFncyk7Ci0JaWYgKCghY3RjX3R0eV9zaHV0dGluZ2Rvd24pICYmIGluZm8pIHsKLQkJYWdhaW4gPSBjdGNfdHR5X3RpbnQoaW5mbyk7Ci0JCWlmICghYWdhaW4pCi0JCQlpbmZvLT5sc3IgfD0gVUFSVF9MU1JfVEVNVDsKLQkJYWdhaW4gfD0gY3RjX3R0eV9yZWFkbW9kZW0oaW5mbyk7Ci0JCWlmIChhZ2FpbikgewotCQkJdGFza2xldF9zY2hlZHVsZSgmaW5mby0+dGFza2xldCk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBzYXZlZmxhZ3MpOwotfQotCi1zdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIGN0Y19vcHMgPSB7Ci0JLm9wZW4gPSBjdGNfdHR5X29wZW4sCi0JLmNsb3NlID0gY3RjX3R0eV9jbG9zZSwKLQkud3JpdGUgPSBjdGNfdHR5X3dyaXRlLAotCS5mbHVzaF9jaGFycyA9IGN0Y190dHlfZmx1c2hfY2hhcnMsCi0JLndyaXRlX3Jvb20gPSBjdGNfdHR5X3dyaXRlX3Jvb20sCi0JLmNoYXJzX2luX2J1ZmZlciA9IGN0Y190dHlfY2hhcnNfaW5fYnVmZmVyLAotCS5mbHVzaF9idWZmZXIgPSBjdGNfdHR5X2ZsdXNoX2J1ZmZlciwKLQkuaW9jdGwgPSBjdGNfdHR5X2lvY3RsLAotCS50aHJvdHRsZSA9IGN0Y190dHlfdGhyb3R0bGUsCi0JLnVudGhyb3R0bGUgPSBjdGNfdHR5X3VudGhyb3R0bGUsCi0JLnNldF90ZXJtaW9zID0gY3RjX3R0eV9zZXRfdGVybWlvcywKLQkuaGFuZ3VwID0gY3RjX3R0eV9oYW5ndXAsCi0JLnRpb2NtZ2V0ID0gY3RjX3R0eV90aW9jbWdldCwKLQkudGlvY21zZXQgPSBjdGNfdHR5X3Rpb2Ntc2V0LAotfTsKLQotaW50Ci1jdGNfdHR5X2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQljdGNfdHR5X2luZm8gKmluZm87Ci0Jc3RydWN0IHR0eV9kcml2ZXIgKmRldmljZTsKLQotCURCRl9URVhUKHRyYWNlLCAyLCBfX0ZVTkNUSU9OX18pOwotCWRyaXZlciA9IGttYWxsb2Moc2l6ZW9mKGN0Y190dHlfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRyaXZlciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgaW4gY3RjX3R0eV9tb2RlbV9pbml0XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCW1lbXNldChkcml2ZXIsIDAsIHNpemVvZihjdGNfdHR5X2RyaXZlcikpOwotCWRldmljZSA9IGFsbG9jX3R0eV9kcml2ZXIoQ1RDX1RUWV9NQVhfREVWSUNFUyk7Ci0JaWYgKCFkZXZpY2UpIHsKLQkJa2ZyZWUoZHJpdmVyKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSBpbiBjdGNfdHR5X21vZGVtX2luaXRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkZXZpY2UtPmRldmZzX25hbWUgPSAiY3RjLyIgQ1RDX1RUWV9OQU1FOwotCWRldmljZS0+bmFtZSA9IENUQ19UVFlfTkFNRTsKLQlkZXZpY2UtPm1ham9yID0gQ1RDX1RUWV9NQUpPUjsKLQlkZXZpY2UtPm1pbm9yX3N0YXJ0ID0gMDsKLQlkZXZpY2UtPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwotCWRldmljZS0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKLQlkZXZpY2UtPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKLQlkZXZpY2UtPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCWRldmljZS0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwotCWRldmljZS0+ZHJpdmVyX25hbWUgPSAiY3RjX3R0eSIsCi0JdHR5X3NldF9vcGVyYXRpb25zKGRldmljZSwgJmN0Y19vcHMpOwotCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKGRldmljZSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3RjX3R0eTogQ291bGRuJ3QgcmVnaXN0ZXIgc2VyaWFsLWRldmljZVxuIik7Ci0JCXB1dF90dHlfZHJpdmVyKGRldmljZSk7Ci0JCWtmcmVlKGRyaXZlcik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZHJpdmVyLT5jdGNfdHR5X2RldmljZSA9IGRldmljZTsKLQlmb3IgKGkgPSAwOyBpIDwgQ1RDX1RUWV9NQVhfREVWSUNFUzsgaSsrKSB7Ci0JCWluZm8gPSAmZHJpdmVyLT5pbmZvW2ldOwotCQlpbml0X01VVEVYKCZpbmZvLT53cml0ZV9zZW0pOwotCQl0YXNrbGV0X2luaXQoJmluZm8tPnRhc2tsZXQsIGN0Y190dHlfdGFzaywKLQkJCQkodW5zaWduZWQgbG9uZykgaW5mbyk7Ci0JCWluZm8tPm1hZ2ljID0gQ1RDX0FTWU5DX01BR0lDOwotCQlpbmZvLT5saW5lID0gaTsKLQkJaW5mby0+dHR5ID0gMDsKLQkJaW5mby0+Y291bnQgPSAwOwotCQlpbmZvLT5ibG9ja2VkX29wZW4gPSAwOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaW5mby0+dHhfcXVldWUpOwotCQlza2JfcXVldWVfaGVhZF9pbml0KCZpbmZvLT5yeF9xdWV1ZSk7Ci0JCWluaXRfdGltZXIoJmluZm8tPnN0b3B0aW1lcik7Ci0JCWluZm8tPnN0b3B0aW1lci5mdW5jdGlvbiA9IGN0Y190dHlfc3RvcGRldjsKLQkJaW5mby0+c3RvcHRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbmZvOwotCQlpbmZvLT5tY3IgPSBVQVJUX01DUl9SVFM7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQKLWN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLQlpbnQgdHR5bnVtOwotCWNoYXIgKmVycjsKLQljaGFyICpwOwotCi0JREJGX1RFWFQodHJhY2UsIDIsIF9fRlVOQ1RJT05fXyk7Ci0JaWYgKCghZGV2KSB8fCAoIWRldi0+bmFtZSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2IGNhbGxlZCAiCi0JCSAgICAgICAid2l0aCBOVUxMIGRldiBvciBOVUxMIGRldi1uYW1lXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICoJSWYgdGhlIG5hbWUgaXMgYSBmb3JtYXQgc3RyaW5nIHRoZSBjYWxsZXIgd2FudHMgdXMgdG8KLQkgKglkbyBhIG5hbWUgYWxsb2NhdGlvbiA6IGZvcm1hdCBzdHJpbmcgbXVzdCBlbmQgd2l0aCAlZAotCSAqLwotCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKQotCXsKLQkJaW50IGVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsJLy8gZGV2LT5uYW1lIGlzIGNoYW5nZWQgYnkgdGhpcwotCQlpZiAoZXJyIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgImRldl9hbGxvYyByZXR1cm5lZCBlcnJvciAlZFxuIiwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCX0KLQotCWZvciAocCA9IGRldi0+bmFtZTsgcCAmJiAoKCpwIDwgJzAnKSB8fCAoKnAgPiAnOScpKTsgcCsrKTsKLQl0dHludW0gPSBzaW1wbGVfc3RydG91bChwLCAmZXJyLCAwKTsKLQlpZiAoKHR0eW51bSA8IDApIHx8ICh0dHludW0gPj0gQ1RDX1RUWV9NQVhfREVWSUNFUykgfHwKLQkgICAgKGVyciAmJiAqZXJyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY3RjX3R0eV9yZWdpc3Rlcl9uZXRkZXYgY2FsbGVkICIKLQkJICAgICAgICJ3aXRoIG51bWJlciBpbiBuYW1lICclcydcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKGRyaXZlci0+aW5mb1t0dHludW1dLm5ldGRldikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY3RjX3R0eV9yZWdpc3Rlcl9uZXRkZXYgY2FsbGVkICIKLQkJICAgICAgICJmb3IgYWxyZWFkeSByZWdpc3RlcmVkIGRldmljZSAnJXMnXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlkcml2ZXItPmluZm9bdHR5bnVtXS5uZXRkZXYgPSBkZXY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQKLWN0Y190dHlfdW5yZWdpc3Rlcl9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCWN0Y190dHlfaW5mbyAqaW5mbyA9IE5VTEw7Ci0KLQlEQkZfVEVYVCh0cmFjZSwgMiwgX19GVU5DVElPTl9fKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3RjX3R0eV9sb2NrLCBzYXZlZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBDVENfVFRZX01BWF9ERVZJQ0VTOyBpKyspCi0JCWlmIChkcml2ZXItPmluZm9baV0ubmV0ZGV2ID09IGRldikgewotCQkJaW5mbyA9ICZkcml2ZXItPmluZm9baV07Ci0JCQlicmVhazsKLQkJfQotCWlmIChpbmZvKSB7Ci0JCWluZm8tPm5ldGRldiA9IE5VTEw7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmaW5mby0+dHhfcXVldWUpOwotCQlza2JfcXVldWVfcHVyZ2UoJmluZm8tPnJ4X3F1ZXVlKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RjX3R0eV9sb2NrLCBzYXZlZmxhZ3MpOwotfQotCi12b2lkCi1jdGNfdHR5X2NsZWFudXAodm9pZCkgewotCXVuc2lnbmVkIGxvbmcgc2F2ZWZsYWdzOwotCQotCURCRl9URVhUKHRyYWNlLCAyLCBfX0ZVTkNUSU9OX18pOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjdGNfdHR5X2xvY2ssIHNhdmVmbGFncyk7Ci0JY3RjX3R0eV9zaHV0dGluZ2Rvd24gPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0Y190dHlfbG9jaywgc2F2ZWZsYWdzKTsKLQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLT5jdGNfdHR5X2RldmljZSk7Ci0JcHV0X3R0eV9kcml2ZXIoZHJpdmVyLT5jdGNfdHR5X2RldmljZSk7Ci0Ja2ZyZWUoZHJpdmVyKTsKLQlkcml2ZXIgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuaCBiL2RyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNTRkYzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGN0dHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDVEMgLyBFU0NPTiBuZXR3b3JrIGRyaXZlciwgdHR5IGludGVyZmFjZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogQXV0aG9yKHMpOiBGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9DVENUVFlfSF8KLSNkZWZpbmUgX0NUQ1RUWV9IXwotCi0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0KLWV4dGVybiBpbnQgIGN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICopOwotZXh0ZXJuIHZvaWQgY3RjX3R0eV91bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLWV4dGVybiB2b2lkIGN0Y190dHlfbmV0aWZfcngoc3RydWN0IHNrX2J1ZmYgKik7Ci1leHRlcm4gaW50ICBjdGNfdHR5X2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBjdGNfdHR5X2NsZWFudXAodm9pZCk7Ci1leHRlcm4gdm9pZCBjdGNfdHR5X3NldGNhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N1MzA4OC5jIGIvZHJpdmVycy9zMzkwL25ldC9jdTMwODguYwppbmRleCBiMTI1MzMxLi5lOTY1ZjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N1MzA4OC5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3UzMDg4LmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLwotDAorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtNzcsNyArNzcsNyBAQAogCQlpbnQgbGVuOwogCiAJCWlmICghKGVuZCA9IHN0cmNocihzdGFydCwgZGVsaW1baV0pKSkKLQkJCXJldHVybiBjb3VudDsKKwkJCXJldHVybiAtRUlOVkFMOwogCQlsZW4gPSBtaW5fdChwdHJkaWZmX3QsIEJVU19JRF9TSVpFLCBlbmQgLSBzdGFydCArIDEpOwogCQlzdHJsY3B5IChidXNfaWRzW2ldLCBzdGFydCwgbGVuKTsKIAkJYXJndltpXSA9IGJ1c19pZHNbaV07CkBAIC05NCw3ICs5NCw3IEBACiAKIC8qIFJlZ2lzdGVyLXVucmVnaXN0ZXIgZm9yIGN0YyZsY3MgKi8KIGludAotcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqZGNwKSAKK3JlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKHN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmRjcCkKIHsKIAlpbnQgcmM7CiAKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJjID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZkY3AtPmRyaXZlciwgJmRyaXZlcl9hdHRyX2dyb3VwKTsKIAlpZiAocmMpCiAJCWNjd2dyb3VwX2RyaXZlcl91bnJlZ2lzdGVyKGRjcCk7Ci0JCQorCiAJcmV0dXJuIHJjOwogCiB9CkBAIC0xMzcsNyArMTM3LDcgQEAKIGN1MzA4OF9pbml0ICh2b2lkKQogewogCWludCByYzsKLQkKKwogCWN1MzA4OF9yb290X2RldiA9IHMzOTBfcm9vdF9kZXZfcmVnaXN0ZXIoImN1MzA4OCIpOwogCWlmIChJU19FUlIoY3UzMDg4X3Jvb3RfZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIoY3UzMDg4X3Jvb3RfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMKaW5kZXggNjE5MGJlOS4uZTBjN2RlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBJVUNWIG5ldHdvcmsgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KQEAgLTI4LDcgKzI4LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLwotDAorCiAvKiAjZGVmaW5lIERFQlVHICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTgxLDcgKzgxLDcgQEAKIHN0cnVjdCBidXNfdHlwZSBpdWN2X2J1cyA9IHsKIAkubmFtZSA9ICJpdWN2IiwKIAkubWF0Y2ggPSBpdWN2X2J1c19tYXRjaCwKLX07CQorfTsKIAogc3RydWN0IGRldmljZSAqaXVjdl9yb290OwogCkBAIC0yOTcsNyArMjk3LDcgQEAKIC8qCiAgKiBEZWJ1Z2dpbmcgc3R1ZmYKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotDAorCiAKICNpZmRlZiBERUJVRwogc3RhdGljIGludCBkZWJ1Z2xldmVsID0gMDsKQEAgLTM0NCw3ICszNDQsNyBAQAogLyoKICAqIEludGVybmFsIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0MCisKIC8qKgogICogcHJpbnQgc3RhcnQgYmFubmVyCiAgKi8KQEAgLTgxMCw3ICs4MTAsNyBAQAogCQkJc2l6ZW9mIChuZXdfaGFuZGxlci0+aWQudXNlcmlkKSk7CiAJCUVCQ19UT1VQUEVSIChuZXdfaGFuZGxlci0+aWQudXNlcmlkLAogCQkJICAgICBzaXplb2YgKG5ld19oYW5kbGVyLT5pZC51c2VyaWQpKTsKLQkJCisKIAkJaWYgKHBnbW1hc2spIHsKIAkJCW1lbWNweSAobmV3X2hhbmRsZXItPmlkLm1hc2ssIHBnbW1hc2ssCiAJCQkJc2l6ZW9mIChuZXdfaGFuZGxlci0+aWQubWFzaykpOwpAQCAtMTIyOSw3ICsxMjI5LDcgQEAKIAkJLyogcGFybS0+aXBhdWRpdCBoYXMgb25seSAzIGJ5dGVzICovCiAJCSphdWRpdCA+Pj0gODsKIAl9Ci0JCisKIAlyZWxlYXNlX3BhcmFtKHBhcm0pOwogCiAJaXVjdl9kZWJ1ZygxLCAiYjJmMF9yZXN1bHQgPSAlbGQiLCBiMmYwX3Jlc3VsdCk7CkBAIC0yMzMwLDE0ICsyMzMwLDE0IEBACiAJCQkJCXRlbXBfYnVmZjFbal0gJj0gKGgtPmlkLm1hc2spW2pdOwogCQkJCQl0ZW1wX2J1ZmYyW2pdICY9IChoLT5pZC5tYXNrKVtqXTsKIAkJCQl9Ci0JCQkJCisKIAkJCQlpdWN2X2R1bXBpdCgidGVtcF9idWZmMToiLAogCQkJCQkgICAgdGVtcF9idWZmMSwgc2l6ZW9mKHRlbXBfYnVmZjEpKTsKIAkJCQlpdWN2X2R1bXBpdCgidGVtcF9idWZmMiIsCiAJCQkJCSAgICB0ZW1wX2J1ZmYyLCBzaXplb2YodGVtcF9idWZmMikpOwotCQkJCQorCiAJCQkJaWYgKCFtZW1jbXAgKHRlbXBfYnVmZjEsIHRlbXBfYnVmZjIsIDI0KSkgewotCQkJCQkKKwogCQkJCQlpdWN2X2RlYnVnKDIsCiAJCQkJCQkgICAiZm91bmQgYSBtYXRjaGluZyBoYW5kbGVyIik7CiAJCQkJCWJyZWFrOwpAQCAtMjM2OCw3ICsyMzY4LDcgQEAKIAkJCX0gZWxzZQogCQkJCWl1Y3Zfc2V2ZXIoaW50X2J1Zi0+aXBwYXRoaWQsIG5vX2xpc3RlbmVyKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDAyOgkJLypjb25uZWN0aW9uIGNvbXBsZXRlICovCiAJCQlpZiAobWVzc2FnZXNEaXNhYmxlZCkgewogCQkJICAgIGl1Y3Zfc2V0bWFzayh+MCk7CkBAIC0yMzg3LDcgKzIzODcsNyBAQAogCQkJfSBlbHNlCiAJCQkJaXVjdl9zZXZlcihpbnRfYnVmLT5pcHBhdGhpZCwgbm9fbGlzdGVuZXIpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDM6CQkvKiBjb25uZWN0aW9uIHNldmVyZWQgKi8KIAkJCWlmIChtZXNzYWdlc0Rpc2FibGVkKSB7CiAJCQkgICAgaXVjdl9zZXRtYXNrKH4wKTsKQEAgLTIzOTgsMTMgKzIzOTgsMTMgQEAKIAkJCQkJaW50ZXJydXB0LT5Db25uZWN0aW9uU2V2ZXJlZCgKIAkJCQkJCShpdWN2X0Nvbm5lY3Rpb25TZXZlcmVkICopaW50X2J1ZiwKIAkJCQkJCWgtPnBnbV9kYXRhKTsKLQkJCQkKKwogCQkJCWVsc2UKIAkJCQkJaXVjdl9zZXZlciAoaW50X2J1Zi0+aXBwYXRoaWQsIG5vX2xpc3RlbmVyKTsKIAkJCX0gZWxzZQogCQkJCWl1Y3Zfc2V2ZXIoaW50X2J1Zi0+aXBwYXRoaWQsIG5vX2xpc3RlbmVyKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDA0OgkJLyogY29ubmVjdGlvbiBxdWllc2NlZCAqLwogCQkJaWYgKG1lc3NhZ2VzRGlzYWJsZWQpIHsKIAkJCSAgICBpdWN2X3NldG1hc2sofjApOwpAQCAtMjQyMCw3ICsyNDIwLDcgQEAKIAkJCQkJCSAgICJDb25uZWN0aW9uUXVpZXNjZWQgbm90IGNhbGxlZCIpOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDU6CQkvKiBjb25uZWN0aW9uIHJlc3VtZWQgKi8KIAkJCWlmIChtZXNzYWdlc0Rpc2FibGVkKSB7CiAJCQkgICAgaXVjdl9zZXRtYXNrKH4wKTsKQEAgLTI0MzYsNyArMjQzNiw3IEBACiAJCQkJCQkgICAiQ29ubmVjdGlvblJlc3VtZWQgbm90IGNhbGxlZCIpOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDY6CQkvKiBwcmlvcml0eSBtZXNzYWdlIGNvbXBsZXRlICovCiAJCWNhc2UgMHgwNzoJCS8qIG5vbnByaW9yaXR5IG1lc3NhZ2UgY29tcGxldGUgKi8KIAkJCWlmIChoKSB7CkBAIC0yNDQ5LDcgKzI0NDksNyBAQAogCQkJCQkJICAgIk1lc3NhZ2VDb21wbGV0ZSBub3QgY2FsbGVkIik7CiAJCQl9CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMHgwODoJCS8qIHByaW9yaXR5IG1lc3NhZ2UgcGVuZGluZyAgKi8KIAkJY2FzZSAweDA5OgkJLyogbm9ucHJpb3JpdHkgbWVzc2FnZSBwZW5kaW5nICAqLwogCQkJaWYgKGgpIHsKQEAgLTI0NjcsNyArMjQ2Nyw3IEBACiAJCQkgICAgICAgX19GVU5DVElPTl9fKTsKIAkJCWJyZWFrOwogCX0JCQkvKiBlbmQgc3dpdGNoICovCi0JCisKIAlpdWN2X2RlYnVnKDIsICJleGl0aW5nIHBhdGhpZCAlZCwgdHlwZSAlMDJYIiwKIAkJIGludF9idWYtPmlwcGF0aGlkLCBpbnRfYnVmLT5pcHR5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuaCBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5oCmluZGV4IDBjNDY0NGQuLjViNmIxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqICBTMzkwIHZlcnNpb24KICAqICAgIENvcHlyaWdodCAoQykgMjAwMCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTpBbGFuIEFsdG1hcmsgKEFsYW5fQWx0bWFya0B1cy5pYm0uY29tKSAKKyAqICAgIEF1dGhvcihzKTpBbGFuIEFsdG1hcmsgKEFsYW5fQWx0bWFya0B1cy5pYm0uY29tKQogICoJCVhlbmlhIFRrYXRzY2hvdyAoeGVuaWFAdXMuaWJtLmNvbSkKICAqCiAgKgpAQCAtMTYsMTcgKzE2LDE3IEBACiAgKiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcyBib29rLCBhbHNvIGF2YWlsYWJsZSBvbiB0aGUgd2ViCiAgKiB0aHJ1IHd3dy5pYm0uY29tL3MzOTAvdm0vcHVicywgbWFudWFsICMgU0MyNC01NzYwCiAgKgotICogICAgICBEZWZpbml0aW9uIG9mIFJldHVybiBDb2RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAtQWxsIHBvc2l0aXZlIHJldHVybiBjb2RlcyBpbmNsdWRpbmcgemVybyBhcmUgcmVmbGVjdGVkIGJhY2sgIAotICogICAgICAgZnJvbSBDUCBleGNlcHQgZm9yIGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbS4gVGhlIGRlZmluaXRpb24gb2YgZWFjaCAKLSAqICAgICAgIHJldHVybiBjb2RlIGNhbiBiZSBmb3VuZCBpbiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcyBib29rLiAgICAKLSAqICAgICAgIEFsc28gYXZhaWxhYmxlIG9uIHRoZSB3ZWIgdGhydSB3d3cuaWJtLmNvbS9zMzkwL3ZtL3B1YnMsIG1hbnVhbCAjIFNDMjQtNTc2MCAgICAgICAgICAKLSAqICAgICAgLSBSZXR1cm4gQ29kZSBvZjogICAgICAgICAKLSAqICAgICAgICAgICAgICgtRUlOVkFMKSBJbnZhbGlkIHZhbHVlICAgICAgIAotICogICAgICAgICAgICAgKC1FTk9NRU0pIHN0b3JhZ2UgYWxsb2NhdGlvbiBmYWlsZWQgICAgICAgICAgICAgIAorICogICAgICBEZWZpbml0aW9uIG9mIFJldHVybiBDb2RlcworICogICAgICAtQWxsIHBvc2l0aXZlIHJldHVybiBjb2RlcyBpbmNsdWRpbmcgemVybyBhcmUgcmVmbGVjdGVkIGJhY2sKKyAqICAgICAgIGZyb20gQ1AgZXhjZXB0IGZvciBpdWN2X3JlZ2lzdGVyX3Byb2dyYW0uIFRoZSBkZWZpbml0aW9uIG9mIGVhY2gKKyAqICAgICAgIHJldHVybiBjb2RlIGNhbiBiZSBmb3VuZCBpbiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcyBib29rLgorICogICAgICAgQWxzbyBhdmFpbGFibGUgb24gdGhlIHdlYiB0aHJ1IHd3dy5pYm0uY29tL3MzOTAvdm0vcHVicywgbWFudWFsICMgU0MyNC01NzYwCisgKiAgICAgIC0gUmV0dXJuIENvZGUgb2Y6CisgKiAgICAgICAgICAgICAoLUVJTlZBTCkgSW52YWxpZCB2YWx1ZQorICogICAgICAgICAgICAgKC1FTk9NRU0pIHN0b3JhZ2UgYWxsb2NhdGlvbiBmYWlsZWQKICAqCXBnbWFzayBkZWZpbmVkIGluIGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbSB3aWxsIGJlIHNldCBkZXBlbmRpbmcgb24gaW5wdXQKLSAqCXBhcmFtdGVycy4gCi0gKgkKKyAqCXBhcmFtdGVycy4KKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xMjQsMTMgKzEyNCwxMyBAQAogI2RlZmluZSBpdWN2X2hhbmRsZV90IHZvaWQgKgogCiAvKiBmbGFnczE6Ci0gKiBBbGwgZmxhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGZpZWxkIElQRkxBR1MxIG9mIGVhY2ggZnVuY3Rpb24gICAKLSAqIGFuZCBjYW4gYmUgZm91bmQgaW4gQ1AgUHJvZ3JhbW1pbmcgU2VydmljZXMuICAgICAgICAgICAgICAgICAgCi0gKiBJUExPQ0FMICAtIEluZGljYXRlcyB0aGUgY29ubmVjdCBjYW4gb25seSBiZSBzYXRpc2ZpZWQgb24gdGhlIAotICogICAgICAgICAgICBsb2NhbCBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElQUFJUWSAgIC0gSW5kaWNhdGVzIGEgcHJpb3JpdHkgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJUFFVU0NFICAtIEluZGljYXRlcyB5b3UgZG8gbm90IHdhbnQgdG8gcmVjZWl2ZSBtZXNzYWdlcyBvbiBhIAotICogICAgICAgICAgICBwYXRoIHVudGlsIGFuIGl1Y3ZfcmVzdW1lIGlzIGlzc3VlZCAgICAgICAgICAgICAgICAKKyAqIEFsbCBmbGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZmllbGQgSVBGTEFHUzEgb2YgZWFjaCBmdW5jdGlvbgorICogYW5kIGNhbiBiZSBmb3VuZCBpbiBDUCBQcm9ncmFtbWluZyBTZXJ2aWNlcy4KKyAqIElQTE9DQUwgIC0gSW5kaWNhdGVzIHRoZSBjb25uZWN0IGNhbiBvbmx5IGJlIHNhdGlzZmllZCBvbiB0aGUKKyAqICAgICAgICAgICAgbG9jYWwgc3lzdGVtCisgKiBJUFBSVFkgICAtIEluZGljYXRlcyBhIHByaW9yaXR5IG1lc3NhZ2UKKyAqIElQUVVTQ0UgIC0gSW5kaWNhdGVzIHlvdSBkbyBub3Qgd2FudCB0byByZWNlaXZlIG1lc3NhZ2VzIG9uIGEKKyAqICAgICAgICAgICAgcGF0aCB1bnRpbCBhbiBpdWN2X3Jlc3VtZSBpcyBpc3N1ZWQKICAqIElQUk1EQVRBIC0gSW5kaWNhdGVzIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4gdGhlIHBhcmFtZXRlciBsaXN0CiAgKi8KICNkZWZpbmUgSVBMT0NBTCAgIAkweDAxCkBAIC0xNTQsMTQgKzE1NCwxNCBAQAogI2RlZmluZSBBbGxJbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmOAogLyoKICAqIE1hcHBpbmcgb2YgZXh0ZXJuYWwgaW50ZXJydXB0IGJ1ZmZlcnMgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZwotICogaW50ZXJydXB0IHR5cGVzLiAgICAgICAgICAgICAgICAgIAotICogTmFtZXM6IGl1Y3ZfQ29ubmVjdGlvblBlbmRpbmcgICAgLT4gIGNvbm5lY3Rpb24gcGVuZGluZyAKKyAqIGludGVycnVwdCB0eXBlcy4KKyAqIE5hbWVzOiBpdWN2X0Nvbm5lY3Rpb25QZW5kaW5nICAgIC0+ICBjb25uZWN0aW9uIHBlbmRpbmcKICAqICAgICAgICBpdWN2X0Nvbm5lY3Rpb25Db21wbGV0ZSAgIC0+ICBjb25uZWN0aW9uIGNvbXBsZXRlCi0gKiAgICAgICAgaXVjdl9Db25uZWN0aW9uU2V2ZXJlZCAgICAtPiAgY29ubmVjdGlvbiBzZXZlcmVkIAotICogICAgICAgIGl1Y3ZfQ29ubmVjdGlvblF1aWVzY2VkICAgLT4gIGNvbm5lY3Rpb24gcXVpZXNjZWQgCi0gKiAgICAgICAgaXVjdl9Db25uZWN0aW9uUmVzdW1lZCAgICAtPiAgY29ubmVjdGlvbiByZXN1bWVkIAotICogICAgICAgIGl1Y3ZfTWVzc2FnZVBlbmRpbmcgICAgICAgLT4gIG1lc3NhZ2UgcGVuZGluZyAgICAKLSAqICAgICAgICBpdWN2X01lc3NhZ2VDb21wbGV0ZSAgICAgIC0+ICBtZXNzYWdlIGNvbXBsZXRlICAgCisgKiAgICAgICAgaXVjdl9Db25uZWN0aW9uU2V2ZXJlZCAgICAtPiAgY29ubmVjdGlvbiBzZXZlcmVkCisgKiAgICAgICAgaXVjdl9Db25uZWN0aW9uUXVpZXNjZWQgICAtPiAgY29ubmVjdGlvbiBxdWllc2NlZAorICogICAgICAgIGl1Y3ZfQ29ubmVjdGlvblJlc3VtZWQgICAgLT4gIGNvbm5lY3Rpb24gcmVzdW1lZAorICogICAgICAgIGl1Y3ZfTWVzc2FnZVBlbmRpbmcgICAgICAgLT4gIG1lc3NhZ2UgcGVuZGluZworICogICAgICAgIGl1Y3ZfTWVzc2FnZUNvbXBsZXRlICAgICAgLT4gIG1lc3NhZ2UgY29tcGxldGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXUxNiBpcHBhdGhpZDsKQEAgLTI2MCwxNiArMjYwLDE2IEBACiAJdWNoYXIgcmVzMlszXTsKIH0gaXVjdl9NZXNzYWdlQ29tcGxldGU7CiAKLS8qIAotICogaXVjdl9pbnRlcnJ1cHRfb3BzX3Q6IElzIGEgdmVjdG9yIG9mIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSAKLSAqIElVQ1YgaW50ZXJydXB0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFBhcmFtZXRlciBsaXN0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgZWliIC0gaXMgYSBwb2ludGVyIHRvIGEgNDAtYnl0ZSBhcmVhIGRlc2NyaWJlZCAgICAKLSAqICAgICAgICAgICAgICAgd2l0aCBvbmUgb2YgdGhlIHN0cnVjdHVyZXMgYWJvdmUuICAgICAgICAgICAKLSAqICAgICAgICAgcGdtX2RhdGEgLSB0aGlzIGRhdGEgaXMgc3RyaWN0bHkgZm9yIHRoZSAgICAgICAgICAKLSAqICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciB0aGF0IGlzIHBhc3NlZCBieSAgICAKLSAqICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24uIFRoaXMgbWF5IGJlIGFuIGFkZHJlc3MgCi0gKiAgICAgICAgICAgICAgICAgICAgb3IgdG9rZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogaXVjdl9pbnRlcnJ1cHRfb3BzX3Q6IElzIGEgdmVjdG9yIG9mIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZQorICogSVVDViBpbnRlcnJ1cHRzLgorICogUGFyYW1ldGVyIGxpc3Q6CisgKiAgICAgICAgIGVpYiAtIGlzIGEgcG9pbnRlciB0byBhIDQwLWJ5dGUgYXJlYSBkZXNjcmliZWQKKyAqICAgICAgICAgICAgICAgd2l0aCBvbmUgb2YgdGhlIHN0cnVjdHVyZXMgYWJvdmUuCisgKiAgICAgICAgIHBnbV9kYXRhIC0gdGhpcyBkYXRhIGlzIHN0cmljdGx5IGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciB0aGF0IGlzIHBhc3NlZCBieQorICogICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBtYXkgYmUgYW4gYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgIG9yIHRva2VuLgogKi8KIHR5cGVkZWYgc3RydWN0IHsKIAl2b2lkICgqQ29ubmVjdGlvblBlbmRpbmcpIChpdWN2X0Nvbm5lY3Rpb25QZW5kaW5nICogZWliLApAQCAtMjg3LDggKzI4Nyw4IEBACiB9IGl1Y3ZfaW50ZXJydXB0X29wc190OwogCiAvKgotICppdWN2X2FycmF5X3QgOiBEZWZpbmVzIGJ1ZmZlciBhcnJheS4gICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnNpZGUgdGhlIGFycmF5IG1heSBiZSAzMS0gYml0IGFkZHJlc3NlcyBhbmQgMzEtYml0IGxlbmd0aHMuIAorICppdWN2X2FycmF5X3QgOiBEZWZpbmVzIGJ1ZmZlciBhcnJheS4KKyAqIEluc2lkZSB0aGUgYXJyYXkgbWF5IGJlIDMxLSBiaXQgYWRkcmVzc2VzIGFuZCAzMS1iaXQgbGVuZ3Rocy4KICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTMyIGFkZHJlc3M7CkBAIC0yOTksMTkgKzI5OSwxOSBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKml1Y3Zfcm9vdDsKIAogLyogICAtcHJvdG90eXBlcy0gICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZWdpc3Rlcl9wcm9ncmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBSZWdpc3RlcnMgYW4gYXBwbGljYXRpb24gd2l0aCBJVUNWICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwcm1uYW1lIC0gdXNlciBpZGVudGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbQorICogUHVycG9zZTogUmVnaXN0ZXJzIGFuIGFwcGxpY2F0aW9uIHdpdGggSVVDVgorICogSW5wdXQ6IHBybW5hbWUgLSB1c2VyIGlkZW50aWZpY2F0aW9uCiAgKiAgICAgICAgdXNlcmlkICAtIG1hY2hpbmUgaWRlbnRpZmljYXRpb24KICAqICAgICAgICBwZ21tYXNrIC0gaW5kaWNhdGVzIHdoaWNoIGJpdHMgaW4gdGhlIHBybW5hbWUgYW5kIHVzZXJpZCBjb21iaW5lZCB3aWxsIGJlCiAgKiAgCQkgICAgdXNlZCB0byBkZXRlcm1pbmUgd2hvIGlzIGdpdmVuIGNvbnRyb2wKLSAqICAgICAgICBvcHMgICAgIC0gYWRkcmVzcyBvZiB2ZWN0b3Igb2YgaW50ZXJydXB0IGhhbmRsZXJzICAgICAgIAotICogICAgICAgIHBnbV9kYXRhLSBhcHBsaWNhdGlvbiBkYXRhIHBhc3NlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMgCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogYWRkcmVzcyBvZiBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIG9wcyAgICAgLSBhZGRyZXNzIG9mIHZlY3RvciBvZiBpbnRlcnJ1cHQgaGFuZGxlcnMKKyAqICAgICAgICBwZ21fZGF0YS0gYXBwbGljYXRpb24gZGF0YSBwYXNzZWQgdG8gaW50ZXJydXB0IGhhbmRsZXJzCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46IGFkZHJlc3Mgb2YgaGFuZGxlcgogICogICAgICAgICAoMCkgLSBFcnJvciBvY2N1cnJlZCwgcmVnaXN0cmF0aW9uIG5vdCBjb21wbGV0ZWQuCi0gKiBOT1RFOiBFeGFjdCBjYXVzZSBvZiBmYWlsdXJlIHdpbGwgYmUgcmVjb3JkZWQgaW4gc3lzbG9nLiAgICAgICAgICAgICAgICAgICAgICAgIAorICogTk9URTogRXhhY3QgY2F1c2Ugb2YgZmFpbHVyZSB3aWxsIGJlIHJlY29yZGVkIGluIHN5c2xvZy4KICovCiBpdWN2X2hhbmRsZV90IGl1Y3ZfcmVnaXN0ZXJfcHJvZ3JhbSAodWNoYXIgcGdtbmFtZVsxNl0sCiAJCQkJICAgICB1Y2hhciB1c2VyaWRbOF0sCkBAIC0zMTksMTMgKzMxOSwxMyBAQAogCQkJCSAgICAgaXVjdl9pbnRlcnJ1cHRfb3BzX3QgKiBvcHMsCiAJCQkJICAgICB2b2lkICpwZ21fZGF0YSk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3VucmVnaXN0ZXJfcHJvZ3JhbSAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVW5yZWdpc3RlciBhcHBsaWNhdGlvbiB3aXRoIElVQ1YgICAgICAKLSAqIElucHV0OiBhZGRyZXNzIG9mIGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IE5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiAoMCkgLSBOb3JtYWwgcmV0dXJuICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gSW50ZXJuYWwgZXJyb3IsIHdpbGQgcG9pbnRlciAgICAgCisvKgorICogTmFtZTogaXVjdl91bnJlZ2lzdGVyX3Byb2dyYW0KKyAqIFB1cnBvc2U6IFVucmVnaXN0ZXIgYXBwbGljYXRpb24gd2l0aCBJVUNWCisgKiBJbnB1dDogYWRkcmVzcyBvZiBoYW5kbGVyCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46ICgwKSAtIE5vcm1hbCByZXR1cm4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gSW50ZXJuYWwgZXJyb3IsIHdpbGQgcG9pbnRlcgogKi8KIGludCBpdWN2X3VucmVnaXN0ZXJfcHJvZ3JhbSAoaXVjdl9oYW5kbGVfdCBoYW5kbGUpOwogCkBAIC0zMzMsNyArMzMzLDcgQEAKICAqIE5hbWU6IGl1Y3ZfYWNjZXB0CiAgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGlzIGlzc3VlZCBhZnRlciB0aGUgdXNlciByZWNlaXZlcyBhIENvbm5lY3Rpb24gUGVuZGluZyBleHRlcm5hbAogICogICAgICAgICAgaW50ZXJydXB0IGFuZCBub3cgd2lzaGVzIHRvIGNvbXBsZXRlIHRoZSBJVUNWIGNvbW11bmljYXRpb24gcGF0aC4KLSAqIElucHV0OiAgcGF0aGlkIC0gdTE2ICwgUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIgICAKKyAqIElucHV0OiAgcGF0aGlkIC0gdTE2ICwgUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIKICAqICAgICAgICAgbXNnbGltX3JlcXN0ZCAtIHUxNiwgVGhlIG51bWJlciBvZiBvdXRzdGFuZGluZyBtZXNzYWdlcyByZXF1ZXN0ZWQuCiAgKiAgICAgICAgIHVzZXJfZGF0YSAtIHVjaGFyWzE2XSwgRGF0YSBzcGVjaWZpZWQgYnkgdGhlIGl1Y3ZfY29ubmVjdCBmdW5jdGlvbi4KICAqCSAgIGZsYWdzMSAtIGludCwgQ29udGFpbnMgb3B0aW9ucyBmb3IgdGhpcyBwYXRoLgpAQCAtMzU4LDM0ICszNTgsMzQgQEAKIAkJIHZvaWQgKnBnbV9kYXRhLCBpbnQgKmZsYWdzMV9vdXQsIHUxNiAqIG1zZ2xpbSk7CiAKIC8qCi0gKiBOYW1lOiBpdWN2X2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogTmFtZTogaXVjdl9jb25uZWN0CiAgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGVzdGFibGlzaGVzIGFuIElVQ1YgcGF0aC4gQWx0aG91Z2ggdGhlIGNvbm5lY3QgbWF5IGNvbXBsZXRlCi0gKgkgICAgc3VjY2Vzc2Z1bGx5LCB5b3UgYXJlIG5vdCBhYmxlIHRvIHVzZSB0aGUgcGF0aCB1bnRpbCB5b3UgcmVjZWl2ZSBhbiBJVUNWIAotICogICAgICAgICAgQ29ubmVjdGlvbiBDb21wbGV0ZSBleHRlcm5hbCBpbnRlcnJ1cHQuICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gdTE2ICosIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyICAgICAgICAgIAotICogICAgICAgIG1zZ2xpbV9yZXFzdGQgLSB1MTYsIE51bWJlciBvZiBvdXRzdGFuZGluZyBtZXNzYWdlcyByZXF1ZXN0ZWQgICAgICAgCi0gKiAgICAgICAgdXNlcl9kYXRhIC0gdWNoYXJbMTZdLCAxNi1ieXRlIHVzZXIgZGF0YSAgICAgICAgICAgICAgICAgICAgCisgKgkgICAgc3VjY2Vzc2Z1bGx5LCB5b3UgYXJlIG5vdCBhYmxlIHRvIHVzZSB0aGUgcGF0aCB1bnRpbCB5b3UgcmVjZWl2ZSBhbiBJVUNWCisgKiAgICAgICAgICBDb25uZWN0aW9uIENvbXBsZXRlIGV4dGVybmFsIGludGVycnVwdC4KKyAqIElucHV0OiBwYXRoaWQgLSB1MTYgKiwgUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIKKyAqICAgICAgICBtc2dsaW1fcmVxc3RkIC0gdTE2LCBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgbWVzc2FnZXMgcmVxdWVzdGVkCisgKiAgICAgICAgdXNlcl9kYXRhIC0gdWNoYXJbMTZdLCAxNi1ieXRlIHVzZXIgZGF0YQogICoJICB1c2VyaWQgLSB1Y2hhcls4XSwgVXNlciBpZGVudGlmaWNhdGlvbgotICogICAgICAgIHN5c3RlbV9uYW1lIC0gdWNoYXJbOF0sIDgtYnl0ZSBpZGVudGlmeWluZyB0aGUgc3lzdGVtIG5hbWUgCisgKiAgICAgICAgc3lzdGVtX25hbWUgLSB1Y2hhcls4XSwgOC1ieXRlIGlkZW50aWZ5aW5nIHRoZSBzeXN0ZW0gbmFtZQogICoJICBmbGFnczEgLSBpbnQsIENvbnRhaW5zIG9wdGlvbnMgZm9yIHRoaXMgcGF0aC4KICAqICAgICAgICAgIC1JUFBSVFkgLSAgIDB4MjAsIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCiAgKiAgICAgICAgICAtSVBSTURBVEEgLSAweDgwLCBTcGVjaWZpZXMgd2hldGhlciB5b3VyIHByb2dyYW0gY2FuIGhhbmRsZSBhIG1lc3NhZ2UKICAqICAgICAgICAgICAgCSBpbiAgdGhlIHBhcmFtZXRlciBsaXN0LgotICogICAgICAgICAgLUlQUVVTQ0UgLSAgMHg0MCwgU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG8gcXVpZXNjZSB0aGUgcGF0aCBiZWluZwkgCisgKiAgICAgICAgICAtSVBRVVNDRSAtICAweDQwLCBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0byBxdWllc2NlIHRoZSBwYXRoIGJlaW5nCiAgKgkJZXN0YWJsaXNoZWQuCi0gKiAgICAgICAgICAtSVBMT0NBTCAtICAwWDAxLCBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gZm9yY2UgdGhlIHBhcnRuZXIgdG8gYmUgb24gCisgKiAgICAgICAgICAtSVBMT0NBTCAtICAwWDAxLCBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gZm9yY2UgdGhlIHBhcnRuZXIgdG8gYmUgb24KICAqCQl0aGUgbG9jYWwgc3lzdGVtLiBJZiBsb2NhbCBpcyBzcGVjaWZpZWQgdGhlbiB0YXJnZXQgY2xhc3MgY2Fubm90IGJlCi0gKgkJc3BlY2lmaWVkLiAgICAgICAgICAgICAgICAgICAgICAgCisgKgkJc3BlY2lmaWVkLgogICogICAgICAgIGZsYWdzMV9vdXQgLSBpbnQgKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGF0aAogICogICAgICAgICAgIC0gSVBQUlRZIC0gMHgyMCwgSW5kaWNhdGVzIHlvdSBtYXkgc2VuZCBwcmlvcml0eSBtZXNzYWdlcy4KICAqICAgICAgICBtc2dsaW0gLSAqIHUxNiwgTnVtYmVyIG9mIG91dHN0YW5kaW5nIG1lc3NhZ2VzCi0gKiAgICAgICAgaGFuZGxlIC0gaXVjdl9oYW5kbGVfdCwgQWRkcmVzcyBvZiBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHBnbV9kYXRhIC0gdm9pZCAqLCBBcHBsaWNhdGlvbiBkYXRhIHBhc3NlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMgICAgICAgICAgICAgIAorICogICAgICAgIGhhbmRsZSAtIGl1Y3ZfaGFuZGxlX3QsIEFkZHJlc3Mgb2YgaGFuZGxlcgorICogICAgICAgIHBnbV9kYXRhIC0gdm9pZCAqLCBBcHBsaWNhdGlvbiBkYXRhIHBhc3NlZCB0byBpbnRlcnJ1cHQgaGFuZGxlcnMKICAqIE91dHB1dDogcmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwKICAqICAgICAgICAgcmMgLSByZXR1cm4gY29kZSBmcm9tIGl1Y3ZfZGVjbGFyZV9idWZmZXIKLSAqICAgICAgICAgLUVJTlZBTCAtIEludmFsaWQgaGFuZGxlIHBhc3NlZCBieSBhcHBsaWNhdGlvbiAKLSAqICAgICAgICAgLUVJTlZBTCAtIFBhdGhpZCBhZGRyZXNzIGlzIE5VTEwgCi0gKiAgICAgICAgIGFkZF9wYXRoaWRfcmVzdWx0IC0gUmV0dXJuIGNvZGUgZnJvbSBpbnRlcm5hbCBmdW5jdGlvbiBhZGRfcGF0aGlkICAgICAgICAgCisgKiAgICAgICAgIC1FSU5WQUwgLSBJbnZhbGlkIGhhbmRsZSBwYXNzZWQgYnkgYXBwbGljYXRpb24KKyAqICAgICAgICAgLUVJTlZBTCAtIFBhdGhpZCBhZGRyZXNzIGlzIE5VTEwKKyAqICAgICAgICAgYWRkX3BhdGhpZF9yZXN1bHQgLSBSZXR1cm4gY29kZSBmcm9tIGludGVybmFsIGZ1bmN0aW9uIGFkZF9wYXRoaWQKICovCiBpbnQKICAgICBpdWN2X2Nvbm5lY3QgKHUxNiAqIHBhdGhpZCwKQEAgLTM5NywxNiArMzk3LDE2IEBACiAJCSAgaW50ICpmbGFnczFfb3V0LAogCQkgIHUxNiAqIG1zZ2xpbSwgaXVjdl9oYW5kbGVfdCBoYW5kbGUsIHZvaWQgKnBnbV9kYXRhKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfcHVyZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIGNhbmNlbHMgYSBtZXNzYWdlIHRoYXQgeW91IGhhdmUgc2VudC4gICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9wdXJnZQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiBjYW5jZWxzIGEgbWVzc2FnZSB0aGF0IHlvdSBoYXZlIHNlbnQuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCiAgKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgcHVyZ2VkLgotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IGF1ZGl0IC0gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYXN5bmNocm9ub3VzIGVycm9yICAgICAgIAotICogICAgICAgICAgICAgICAgIHRoYXQgbWF5IGhhdmUgYWZmZWN0ZWQgdGhlIG5vcm1hbCBjb21wbGV0aW9uICAgICAgICAKLSAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiBPdXRwdXQ6IGF1ZGl0IC0gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYXN5bmNocm9ub3VzIGVycm9yCisgKiAgICAgICAgICAgICAgICAgdGhhdCBtYXkgaGF2ZSBhZmZlY3RlZCB0aGUgbm9ybWFsIGNvbXBsZXRpb24KKyAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgogKi8KIGludCBpdWN2X3B1cmdlICh1MTYgcGF0aGlkLCB1MzIgbXNnaWQsIHUzMiBzcmNjbHMsIF9fdTMyICphdWRpdCk7CiAvKgpAQCAtNDI2LDM4ICs0MjYsMzggQEAKICAqLwogdWxvbmcgaXVjdl9xdWVyeV9idWZzaXplICh2b2lkKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfcXVpZXNjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRlbXBvcmFyaWx5IHN1c3BlbmRzIGluY29taW5nIG1lc3NhZ2VzIG9uIGFuIAotICogICAgICAgICAgSVVDViBwYXRoLiBZb3UgY2FuIGxhdGVyIHJlYWN0aXZhdGUgdGhlIHBhdGggYnkgaW52b2tpbmcgICAKLSAqICAgICAgICAgIHRoZSBpdWN2X3Jlc3VtZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHVzZXJfZGF0YSAgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE91dHB1dDogTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcXVpZXNjZQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0ZW1wb3JhcmlseSBzdXNwZW5kcyBpbmNvbWluZyBtZXNzYWdlcyBvbiBhbgorICogICAgICAgICAgSVVDViBwYXRoLiBZb3UgY2FuIGxhdGVyIHJlYWN0aXZhdGUgdGhlIHBhdGggYnkgaW52b2tpbmcKKyAqICAgICAgICAgIHRoZSBpdWN2X3Jlc3VtZSBmdW5jdGlvbi4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlcgorICogICAgICAgIHVzZXJfZGF0YSAgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEKKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3ZfcXVpZXNjZSAodTE2IHBhdGhpZCwgdWNoYXIgdXNlcl9kYXRhWzE2XSk7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3JlY2VpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBtZXNzYWdlcyB0aGF0IGFyZSBiZWluZyBzZW50IHRvIHlvdSAKKy8qCisgKiBOYW1lOiBpdWN2X3JlY2VpdmUKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgbWVzc2FnZXMgdGhhdCBhcmUgYmVpbmcgc2VudCB0byB5b3UKICAqICAgICAgICAgIG92ZXIgZXN0YWJsaXNoZWQgcGF0aHMuIERhdGEgd2lsbCBiZSByZXR1cm5lZCBpbiBidWZmZXIgZm9yIGxlbmd0aCBvZgogICogICAgICAgICAgYnVmbGVuLgotICogSW5wdXQ6IAotICogICAgICAgcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYnVmZmVyIHRvIHJlY2VpdmUuICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICBidWZsZW4gLSBMZW5ndGggb2YgYnVmZmVyIHRvIHJlY2VpdmUuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgIAotICogICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiAKKyAqIElucHV0OgorICogICAgICAgcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGJ1ZmZlciB0byByZWNlaXZlLgorICogICAgICAgYnVmbGVuIC0gTGVuZ3RoIG9mIGJ1ZmZlciB0byByZWNlaXZlLgorICogICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogT3V0cHV0OgogICoJIGZsYWdzMV9vdXQ6IGludCAqLCBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhdGguCiAgKiAgICAgICAgIElQTk9SUFkgLSAweDEwIFNwZWNpZmllcyB0aGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCBubyByZXBseSBpcwotICoJICAgZXhwZWN0ZWQuICAgICAgCi0gKiAgICAgICAgIElQUFJUWSAgLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuICAgICAgIAorICoJICAgZXhwZWN0ZWQuCisgKiAgICAgICAgIElQUFJUWSAgLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCiAgKiAgICAgICAgIElQUk1EQVRBIC0gMHg4MCBzcGVjaWZpZXMgdGhlIGRhdGEgaXMgY29udGFpbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdAogICogICAgICAgcmVzaWR1YWxfYnVmZmVyIC0gYWRkcmVzcyBvZiBidWZmZXIgdXBkYXRlZCBieSB0aGUgbnVtYmVyCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBvZiBieXRlcyB5b3UgaGF2ZSByZWNlaXZlZC4KLSAqICAgICAgIHJlc2lkdWFsX2xlbmd0aCAtICAgICAgCisgKiAgICAgICByZXNpZHVhbF9sZW5ndGggLQogICogICAgICAgICAgICAgIENvbnRhaW5zIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcywgaWYgdGhlIHJlY2VpdmUgYnVmZmVyIGlzOgogICogICAgICAgICAgICAgICBUaGUgc2FtZSBsZW5ndGggYXMgdGhlIG1lc3NhZ2UsIHRoaXMgZmllbGQgaXMgemVyby4KICAqICAgICAgICAgICAgICAgTG9uZ2VyIHRoYW4gdGhlIG1lc3NhZ2UsIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZgpAQCAtNDY2LDggKzQ2Niw4IEBACiAgKiAgICAgICAgICAgICAgICBjb3VudCAodGhhdCBpcywgdGhlIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgaW4gdGhlCiAgKiAgICAgICAgICAgICAgICBtZXNzYWdlIHRoYXQgZG9lcyBub3QgZml0IGludG8gdGhlIGJ1ZmZlci4gSW4gdGhpcwogICogICAgICAgICAgICAgICAgY2FzZSBiMmYwX3Jlc3VsdCA9IDUuCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBidWZmZXIgYWRkcmVzcyBpcyBwb2ludGluZyB0byBOVUxMICAgICAgICAgICAgICAgICAgIAorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gYnVmZmVyIGFkZHJlc3MgaXMgcG9pbnRpbmcgdG8gTlVMTAogKi8KIGludCBpdWN2X3JlY2VpdmUgKHUxNiBwYXRoaWQsCiAJCSAgdTMyIG1zZ2lkLApAQCAtNDc3LDE2ICs0NzcsMTYgQEAKIAkJICBpbnQgKmZsYWdzMV9vdXQsCiAJCSAgdWxvbmcgKiByZXNpZHVhbF9idWZmZXIsIHVsb25nICogcmVzaWR1YWxfbGVuZ3RoKTsKIAotIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICogTmFtZTogaXVjdl9yZWNlaXZlX2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIG1lc3NhZ2VzIHRoYXQgYXJlIGJlaW5nIHNlbnQgdG8geW91IAorIC8qCisgICogTmFtZTogaXVjdl9yZWNlaXZlX2FycmF5CisgICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBtZXNzYWdlcyB0aGF0IGFyZSBiZWluZyBzZW50IHRvIHlvdQogICAqICAgICAgICAgIG92ZXIgZXN0YWJsaXNoZWQgcGF0aHMuIERhdGEgd2lsbCBiZSByZXR1cm5lZCBpbiBmaXJzdCBidWZmZXIgZm9yCiAgICogICAgICAgICAgbGVuZ3RoIG9mIGZpcnN0IGJ1ZmZlci4KLSAgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCiAgICogICAgICAgIG1zZ2lkIC0gc3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgogICAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgotICAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGFycmF5IG9mIGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgICAgIAotICAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2YgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGFycmF5IG9mIGJ1ZmZlcnMuCisgICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBidWZmZXJzLgogICAqIE91dHB1dDoKICAgKiAgICAgICAgZmxhZ3MxX291dDogaW50ICosIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGF0aC4KICAgKiAgICAgICAgICBJUE5PUlBZIC0gMHgxMCBTcGVjaWZpZXMgdGhpcyBpcyBhIG9uZS13YXkgbWVzc2FnZSBhbmQgbm8gcmVwbHkgaXMKQEAgLTUwNCw4ICs1MDQsOCBAQAogICAqICAgICAgICAgICAgICAgIGNvdW50ICh0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUKICAgKiAgICAgICAgICAgICAgICBtZXNzYWdlIHRoYXQgZG9lcyBub3QgZml0IGludG8gdGhlIGJ1ZmZlci4gSW4gdGhpcwogICAqICAgICAgICAgICAgICAgIGNhc2UgYjJmMF9yZXN1bHQgPSA1LgotICAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAKKyAgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4KICAgKi8KIGludCBpdWN2X3JlY2VpdmVfYXJyYXkgKHUxNiBwYXRoaWQsCiAJCQl1MzIgbXNnaWQsCkBAIC01MTUsNDQgKzUxNSw0NCBAQAogCQkJaW50ICpmbGFnczFfb3V0LAogCQkJdWxvbmcgKiByZXNpZHVhbF9idWZmZXIsIHVsb25nICogcmVzaWR1YWxfbGVuZ3RoKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZWplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhlIHJlamVjdCBmdW5jdGlvbiByZWZ1c2VzIGEgc3BlY2lmaWVkIG1lc3NhZ2UuIEJldHdlZW4gdGhlIAotICogICAgICAgICAgdGltZSB5b3UgYXJlIG5vdGlmaWVkIG9mIGEgbWVzc2FnZSBhbmQgdGhlIHRpbWUgdGhhdCB5b3UgICAgIAotICogICAgICAgICAgY29tcGxldGUgdGhlIG1lc3NhZ2UsIHRoZSBtZXNzYWdlIG1heSBiZSByZWplY3RlZC4gICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVqZWN0CisgKiBQdXJwb3NlOiBUaGUgcmVqZWN0IGZ1bmN0aW9uIHJlZnVzZXMgYSBzcGVjaWZpZWQgbWVzc2FnZS4gQmV0d2VlbiB0aGUKKyAqICAgICAgICAgIHRpbWUgeW91IGFyZSBub3RpZmllZCBvZiBhIG1lc3NhZ2UgYW5kIHRoZSB0aW1lIHRoYXQgeW91CisgKiAgICAgICAgICBjb21wbGV0ZSB0aGUgbWVzc2FnZSwgdGhlIG1lc3NhZ2UgbWF5IGJlIHJlamVjdGVkLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiBPdXRwdXQ6IE5BCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgogKi8KIGludCBpdWN2X3JlamVjdCAodTE2IHBhdGhpZCwgdTMyIG1zZ2lkLCB1MzIgdHJnY2xzKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3ZfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91ICAgIAotICogICAgICAgICAgcmVjZWl2ZS4gWW91IG11c3QgaWRlbnRpZnkgY29tcGxldGVseSB0aGUgbWVzc2FnZSB0byAgICAgICAKLSAqICAgICAgICAgIHdoaWNoIHlvdSB3aXNoIHRvIHJlcGx5LiBpZSwgcGF0aGlkLCBtc2dpZCwgYW5kIHRyZ2Nscy4gICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3JlcGx5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91CisgKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvCisgKiAgICAgICAgICB3aGljaCB5b3Ugd2lzaCB0byByZXBseS4gaWUsIHBhdGhpZCwgbXNnaWQsIGFuZCB0cmdjbHMuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCi0gKiAgICAgICAgICBJUFBSVFktIDB4MjAsIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuICAgICAgICAKLSAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHJlcGx5IGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiByZXBseSBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IHJlc2lkdWFsX2J1ZmZlciAtIEFkZHJlc3Mgb2YgYnVmZmVyIHVwZGF0ZWQgYnkgdGhlIG51bWJlciAKLSAqICAgICAgICAgICAgICAgICAgICBvZiBieXRlcyB5b3UgaGF2ZSBtb3ZlZC4gICAgICAgICAgICAgIAorICogICAgICAgICAgSVBQUlRZLSAweDIwLCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgcmVwbHkgYnVmZmVyLgorICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiByZXBseSBidWZmZXIuCisgKiBPdXRwdXQ6IHJlc2lkdWFsX2J1ZmZlciAtIEFkZHJlc3Mgb2YgYnVmZmVyIHVwZGF0ZWQgYnkgdGhlIG51bWJlcgorICogICAgICAgICAgICAgICAgICAgIG9mIGJ5dGVzIHlvdSBoYXZlIG1vdmVkLgogICogICAgICAgICByZXNpZHVhbF9sZW5ndGggLSBDb250YWlucyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgKgkJSWYgdGhlIGFuc3dlciBidWZmZXIgaXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSByZXBseSwgdGhpcyBmaWVsZAogICoJCSBjb250YWlucyB6ZXJvLgogICoJCUlmIHRoZSBhbnN3ZXIgYnVmZmVyIGlzIGxvbmdlciB0aGFuIHRoZSByZXBseSwgdGhpcyBmaWVsZCBjb250YWlucwotICoJCSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLiAgCisgKgkJIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHRoZSBidWZmZXIuCiAgKgkJSWYgdGhlIGFuc3dlciBidWZmZXIgaXMgc2hvcnRlciB0aGFuIHRoZSByZXBseSwgdGhpcyBmaWVsZCBjb250YWlucwogICoJCSBhIHJlc2lkdWFsIGNvdW50ICh0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWlhbmluZyBpbiB0aGUKICAqCQkgcmVwbHkgdGhhdCBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVmZmVyLiBJbiB0aGlzCiAgKiAgICAgICAgICAgICAgIGNhc2UgYjJmMF9yZXN1bHQgPSA1LgotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3JlcGx5ICh1MTYgcGF0aGlkLAogCQl1MzIgbXNnaWQsCkBAIC01NjEsMjAgKzU2MSwyMCBAQAogCQl2b2lkICpidWZmZXIsIHVsb25nIGJ1ZmxlbiwgdWxvbmcgKiByZXNpZHVhbF9idWZmZXIsCiAJCXVsb25nICogcmVzaWR1YWxfbGVuZ3RoKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZXBseV9hcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZXNwb25kcyB0byB0aGUgdHdvLXdheSBtZXNzYWdlcyB0aGF0IHlvdSAgICAgIAotICogICAgICAgICAgcmVjZWl2ZS4gWW91IG11c3QgaWRlbnRpZnkgY29tcGxldGVseSB0aGUgbWVzc2FnZSB0byAgICAgICAgIAotICogICAgICAgICAgd2hpY2ggeW91IHdpc2ggdG8gcmVwbHkuIGllLCBwYXRoaWQsIG1zZ2lkLCBhbmQgdHJnY2xzLiAgICAgIAotICogICAgICAgICAgVGhlIGFycmF5IGlkZW50aWZpZXMgYSBsaXN0IG9mIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiAgICAgIAotICogICAgICAgICAgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgY29udGFpbnMgdGhlIHJlcGx5IGRhdGEuICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9yZXBseV9hcnJheQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiByZXNwb25kcyB0byB0aGUgdHdvLXdheSBtZXNzYWdlcyB0aGF0IHlvdQorICogICAgICAgICAgcmVjZWl2ZS4gWW91IG11c3QgaWRlbnRpZnkgY29tcGxldGVseSB0aGUgbWVzc2FnZSB0bworICogICAgICAgICAgd2hpY2ggeW91IHdpc2ggdG8gcmVwbHkuIGllLCBwYXRoaWQsIG1zZ2lkLCBhbmQgdHJnY2xzLgorICogICAgICAgICAgVGhlIGFycmF5IGlkZW50aWZpZXMgYSBsaXN0IG9mIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZgorICogICAgICAgICAgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgY29udGFpbnMgdGhlIHJlcGx5IGRhdGEuCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIKKyAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCwgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIGFycmF5IG9mIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYnVmbGVuIC0gVG90YWwgbGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgcmVwbHkgYnVmZmVycy4KKyAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2YgcmVwbHkgYnVmZmVycy4KICAqIE91dHB1dDogcmVzaWR1YWxfYnVmZmVyIC0gQWRkcmVzcyBvZiBidWZmZXIgd2hpY2ggSVVDViBpcyBjdXJyZW50bHkgd29ya2luZyBvbi4KICAqICAgICAgICAgcmVzaWR1YWxfbGVuZ3RoIC0gQ29udGFpbnMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICogICAgICAgICAgICAgIElmIHRoZSBhbnN3ZXIgYnVmZmVyIGlzIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgcmVwbHksIHRoaXMgZmllbGQKQEAgLTU4NSw4ICs1ODUsOCBAQAogICogICAgICAgICAgICAgICBhIHJlc2lkdWFsIGNvdW50ICh0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWlhbmluZyBpbiB0aGUKICAqICAgICAgICAgICAgICAgcmVwbHkgdGhhdCBkb2VzIG5vdCBmaXQgaW50byB0aGUgYnVmZmVyLiBJbiB0aGlzCiAgKiAgICAgICAgICAgICAgIGNhc2UgYjJmMF9yZXN1bHQgPSA1LgotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLiAgICAgICAgICAgICAgCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3JlcGx5X2FycmF5ICh1MTYgcGF0aGlkLAogCQkgICAgICB1MzIgbXNnaWQsCkBAIC01OTYsNzcgKzU5Niw3NyBAQAogCQkgICAgICB1bG9uZyBidWZsZW4sIHVsb25nICogcmVzaWR1YWxfYWRkcmVzcywKIAkJICAgICAgdWxvbmcgKiByZXNpZHVhbF9sZW5ndGgpOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZXBseV9wcm1tc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzcG9uZHMgdG8gdGhlIHR3by13YXkgbWVzc2FnZXMgdGhhdCB5b3UgCi0gKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvICAgIAotICogICAgICAgICAgd2hpY2ggeW91IHdpc2ggdG8gcmVwbHkuIGllLCBwYXRoaWQsIG1zZ2lkLCBhbmQgdHJnY2xzLiAKLSAqICAgICAgICAgIFBybW1zZyBzaWduaWZpZXMgdGhlIGRhdGEgaXMgbW92ZWQgaW50byB0aGUgICAgICAgICAgICAgCi0gKiAgICAgICAgICBwYXJhbWV0ZXIgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3ZfcmVwbHlfcHJtbXNnCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHJlc3BvbmRzIHRvIHRoZSB0d28td2F5IG1lc3NhZ2VzIHRoYXQgeW91CisgKiAgICAgICAgICByZWNlaXZlLiBZb3UgbXVzdCBpZGVudGlmeSBjb21wbGV0ZWx5IHRoZSBtZXNzYWdlIHRvCisgKiAgICAgICAgICB3aGljaCB5b3Ugd2lzaCB0byByZXBseS4gaWUsIHBhdGhpZCwgbXNnaWQsIGFuZCB0cmdjbHMuCisgKiAgICAgICAgICBQcm1tc2cgc2lnbmlmaWVzIHRoZSBkYXRhIGlzIG1vdmVkIGludG8gdGhlCisgKiAgICAgICAgICBwYXJhbWV0ZXIgbGlzdC4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFyYW1ldGVyLiAgCi0gKiAgICAgICAgICAgICAgICAgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAgICAgbGlzdC4KKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3ZfcmVwbHlfcHJtbXNnICh1MTYgcGF0aGlkLAogCQkgICAgICAgdTMyIG1zZ2lkLCB1MzIgdHJnY2xzLCBpbnQgZmxhZ3MxLCB1Y2hhciBwcm1tc2dbOF0pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9yZXN1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgY29tbXVuaWNhdGlvbnMgb3ZlciBhIHF1aWVzY2VkIHBhdGggCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB1c2VyX2RhdGEgIC0gMTYtYnl0ZXMgb2YgdXNlciBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogTmFtZTogaXVjdl9yZXN1bWUKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgY29tbXVuaWNhdGlvbnMgb3ZlciBhIHF1aWVzY2VkIHBhdGgKKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB1c2VyX2RhdGEgIC0gMTYtYnl0ZXMgb2YgdXNlciBkYXRhLgorICogT3V0cHV0OiBOQQorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KICovCiBpbnQgaXVjdl9yZXN1bWUgKHUxNiBwYXRoaWQsIHVjaGFyIHVzZXJfZGF0YVsxNl0pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLiAgICAgCi0gKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyIGFuZCB0aGlzIGlzIGEgICAgICAKLSAqICAgICAgICAgIG9uZS13YXkgbWVzc2FnZSBhbmQgdGhlIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSAgIAotICogICAgICAgICAgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4gICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gCisvKgorICogTmFtZTogaXVjdl9zZW5kCisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyIGFuZCB0aGlzIGlzIGEKKyAqICAgICAgICAgIG9uZS13YXkgbWVzc2FnZSBhbmQgdGhlIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZQorICogICAgICAgICAgbWVzc2FnZS4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCiAgKiAgICAgICAgICBJUFBSVFktIDB4MjAgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHNlbmQgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBidWZsZW4gLSBMZW5ndGggb2Ygc2VuZCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBhZGRyZXNzIGlzIE5VTEwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHNlbmQgYnVmZmVyLgorICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBzZW5kIGJ1ZmZlci4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3NlbmQgKHUxNiBwYXRoaWQsCiAJICAgICAgIHUzMiAqIG1zZ2lkLAogCSAgICAgICB1MzIgdHJnY2xzLAogCSAgICAgICB1MzIgc3JjY2xzLCB1MzIgbXNndGFnLCBpbnQgZmxhZ3MxLCB2b2lkICpidWZmZXIsIHVsb25nIGJ1Zmxlbik7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZW5kX2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAKLSAqICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBidWZmZXIgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IG9mICAgIAotICogICAgICAgICAgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIGRpc2NvbnRpZ3VvdXMgYnVmZmVycyB0aGF0IGhvbGQgCi0gKiAgICAgICAgICB0aGUgbWVzc2FnZSB0ZXh0LiBUaGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUgICAgICAKLSAqICAgICAgICAgIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSBtZXNzYWdlLiAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuICAgICAgICAgICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2VuZF9hcnJheQorICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLgorICogICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgYXJyYXkgb2YKKyAqICAgICAgICAgIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgdGhhdCBob2xkCisgKiAgICAgICAgICB0aGUgbWVzc2FnZSB0ZXh0LiBUaGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUKKyAqICAgICAgICAgIHJlY2VpdmVyIHdpbGwgbm90IHJlcGx5IHRvIHRoZSBtZXNzYWdlLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KICAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRodCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCi0gKiAgICAgICAgICBJUFBSVFktIHNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuIAotICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2Ygc2VuZCBidWZmZXJzLiAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBzZW5kIGJ1ZmZlcnMuICAgICAgICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogICAgICAgICAgSVBQUlRZLSBzcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgorICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2YgYXJyYXkgb2Ygc2VuZCBidWZmZXJzLgorICogICAgICAgIGJ1ZmxlbiAtIFRvdGFsIGxlbmd0aCBvZiBzZW5kIGJ1ZmZlcnMuCisgKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4KICovCiBpbnQgaXVjdl9zZW5kX2FycmF5ICh1MTYgcGF0aGlkLAogCQkgICAgIHUzMiAqIG1zZ2lkLApAQCAtNjc1LDQ4ICs2NzUsNDggQEAKIAkJICAgICB1MzIgbXNndGFnLAogCQkgICAgIGludCBmbGFnczEsIGl1Y3ZfYXJyYXlfdCAqIGJ1ZmZlciwgdWxvbmcgYnVmbGVuKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZF9wcm1tc2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAgIAotICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkICAKLSAqICAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBsaXN0LiBUaGlzIGlzIGEgb25lLXdheSBtZXNzYWdlIGFuZCB0aGUgCi0gKiAgICAgICAgICByZWNlaXZlciB3aWxsIG5vdCByZXBseSB0byB0aGUgbWVzc2FnZS4gICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuICAgCisvKgorICogTmFtZTogaXVjdl9zZW5kX3BybW1zZworICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLgorICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkCisgKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIG9uZS13YXkgbWVzc2FnZSBhbmQgdGhlCisgKiAgICAgICAgICByZWNlaXZlciB3aWxsIG5vdCByZXBseSB0byB0aGUgbWVzc2FnZS4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCiAgKiAgICAgICAgICBJUFBSVFktIDB4MjAgc3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBwcm1tc2cgLSA4LWJ5dGVzIG9mIGRhdGEgdG8gYmUgcGxhY2VkIGludG8gcGFyYW1ldGVyIGxpc3QuICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbnRvIHBhcmFtZXRlciBsaXN0LgorICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3Zfc2VuZF9wcm1tc2cgKHUxNiBwYXRoaWQsCiAJCSAgICAgIHUzMiAqIG1zZ2lkLAogCQkgICAgICB1MzIgdHJnY2xzLAogCQkgICAgICB1MzIgc3JjY2xzLCB1MzIgbXNndGFnLCBpbnQgZmxhZ3MxLCB1Y2hhciBwcm1tc2dbOF0pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2VuZDJ3YXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLiAgCi0gKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyLiBUaGUgcmVjZWl2ZXIgICAKLSAqICAgICAgICAgIG9mIHRoZSBzZW5kIGlzIGV4cGVjdGVkIHRvIHJlcGx5IHRvIHRoZSBtZXNzYWdlIGFuZCAgIAotICogICAgICAgICAgYSBidWZmZXIgaXMgcHJvdmlkZWQgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSAgCi0gKiAgICAgICAgICB0byB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAKLSAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLiAgICAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmQyd2F5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBEYXRhIHRvIGJlIHRyYW5zbWl0dGVkIGlzIGluIGEgYnVmZmVyLiBUaGUgcmVjZWl2ZXIKKyAqICAgICAgICAgIG9mIHRoZSBzZW5kIGlzIGV4cGVjdGVkIHRvIHJlcGx5IHRvIHRoZSBtZXNzYWdlIGFuZAorICogICAgICAgICAgYSBidWZmZXIgaXMgcHJvdmlkZWQgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseQorICogICAgICAgICAgdG8gdGhpcyBtZXNzYWdlLgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBTcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIGJ1ZmZlciAtIEFkZHJlc3Mgb2Ygc2VuZCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBzZW5kIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgb2YgCi0gKiAgICAgICAgICAgICAgICAgdGhpcyBtZXNzYWdlLiAgICAgICAgCi0gKiAgICAgICAgYW5zbGVuIC0gQWRkcmVzcyBvZiBsZW5ndGggb2YgYnVmZmVyLiAgICAgICAgICAKLSAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEJ1ZmZlciBvciBhbnNidWYgYWRkcmVzcyBpcyBOVUxMLiAgICAKKyAqICAgICAgICBidWZmZXIgLSBBZGRyZXNzIG9mIHNlbmQgYnVmZmVyLgorICogICAgICAgIGJ1ZmxlbiAtIExlbmd0aCBvZiBzZW5kIGJ1ZmZlci4KKyAqICAgICAgICBhbnNidWYgLSBBZGRyZXNzIG9mIGJ1ZmZlciBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IG9mCisgKiAgICAgICAgICAgICAgICAgdGhpcyBtZXNzYWdlLgorICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIG9mIGJ1ZmZlci4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgb3IgYW5zYnVmIGFkZHJlc3MgaXMgTlVMTC4KICovCiBpbnQgaXVjdl9zZW5kMndheSAodTE2IHBhdGhpZCwKIAkJICAgdTMyICogbXNnaWQsCkBAIC03MjYsMjggKzcyNiwyOCBAQAogCQkgICBpbnQgZmxhZ3MxLAogCQkgICB2b2lkICpidWZmZXIsIHVsb25nIGJ1Zmxlbiwgdm9pZCAqYW5zYnVmLCB1bG9uZyBhbnNsZW4pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NlbmQyd2F5X2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uICAgICAgCi0gKiAgICAgICAgICBUaGUgY29udGVudHMgb2YgYnVmZmVyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBvZiAgICAgCi0gKiAgICAgICAgICBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgZGlzY29udGlndW91cyBidWZmZXJzIHRoYXQgaG9sZCAgCi0gKiAgICAgICAgICB0aGUgbWVzc2FnZSB0ZXh0LiBUaGUgcmVjZWl2ZXIgb2YgdGhlIHNlbmQgaXMgZXhwZWN0ZWQgdG8gCi0gKiAgICAgICAgICByZXBseSB0byB0aGUgbWVzc2FnZSBhbmQgYSBidWZmZXIgaXMgcHJvdmlkZWQgaW50byB3aGljaCAgCi0gKiAgICAgICAgICBJVUNWIG1vdmVzIHRoZSByZXBseSB0byB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gICAKKy8qCisgKiBOYW1lOiBpdWN2X3NlbmQyd2F5X2FycmF5CisgKiBQdXJwb3NlOiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBkYXRhIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgKiAgICAgICAgICBUaGUgY29udGVudHMgb2YgYnVmZmVyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBvZgorICogICAgICAgICAgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIGRpc2NvbnRpZ3VvdXMgYnVmZmVycyB0aGF0IGhvbGQKKyAqICAgICAgICAgIHRoZSBtZXNzYWdlIHRleHQuIFRoZSByZWNlaXZlciBvZiB0aGUgc2VuZCBpcyBleHBlY3RlZCB0bworICogICAgICAgICAgcmVwbHkgdG8gdGhlIG1lc3NhZ2UgYW5kIGEgYnVmZmVyIGlzIHByb3ZpZGVkIGludG8gd2hpY2gKKyAqICAgICAgICAgIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMgbWVzc2FnZS4KKyAqIElucHV0OiBwYXRoaWQgLSBQYXRoIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqICAgICAgICB0cmdjbHMgLSBTcGVjaWZpZXMgdGFyZ2V0IGNsYXNzLgorICogICAgICAgIHNyY2NscyAtIFNwZWNpZmllcyB0aGUgc291cmNlIG1lc3NhZ2UgY2xhc3MuCisgKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4KICAqICAgICAgICBmbGFnczEgLSBPcHRpb24gZm9yIHBhdGguCiAgKiAgICAgICAgICBJUFBSVFktIDB4MjAgU3BlY2lmaWVzIGlmIHlvdSB3YW50IHRvIHNlbmQgcHJpb3JpdHkgbWVzc2FnZS4KLSAqICAgICAgICBidWZmZXIgLSBTZGRyZXNzIG9mIGFycmF5IG9mIHNlbmQgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgYnVmbGVuIC0gVG90YWwgbGVuZ3RoIG9mIHNlbmQgYnVmZmVycy4gICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgICAgICAgICAgICAKLSAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAKLSAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqICAgICAgICBidWZmZXIgLSBTZGRyZXNzIG9mIGFycmF5IG9mIHNlbmQgYnVmZmVycy4KKyAqICAgICAgICBidWZsZW4gLSBUb3RhbCBsZW5ndGggb2Ygc2VuZCBidWZmZXJzLgorICogICAgICAgIGFuc2J1ZiAtIEFkZHJlc3Mgb2YgYXJyYXkgb2YgYnVmZmVyIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkKKyAqICAgICAgICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2UuCisgKiAgICAgICAgYW5zbGVuIC0gQWRkcmVzcyBvZiBsZW5ndGggcmVwbHkgYnVmZmVycy4KKyAqIE91dHB1dDogbXNnaWQgLSBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgSUQuCisgKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLgorICogICAgICAgICAoLUVJTlZBTCkgLSBCdWZmZXIgYWRkcmVzcyBpcyBOVUxMLgogKi8KIGludCBpdWN2X3NlbmQyd2F5X2FycmF5ICh1MTYgcGF0aGlkLAogCQkJIHUzMiAqIG1zZ2lkLApAQCAtNzU4LDI3ICs3NTgsMjcgQEAKIAkJCSBpdWN2X2FycmF5X3QgKiBidWZmZXIsCiAJCQkgdWxvbmcgYnVmbGVuLCBpdWN2X2FycmF5X3QgKiBhbnNidWYsIHVsb25nIGFuc2xlbik7CiAKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NlbmQyd2F5X3BybW1zZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgZGF0YSB0byBhbm90aGVyIGFwcGxpY2F0aW9uLiAgICAgICAKLSAqICAgICAgICAgIFBybW1zZyBzcGVjaWZpZXMgdGhhdCB0aGUgOC1ieXRlcyBvZiBkYXRhIGFyZSB0byBiZSBtb3ZlZCAgCi0gKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIHR3by13YXkgbWVzc2FnZSBhbmQgdGhlIAotICogICAgICAgICAgcmVjZWl2ZXIgb2YgdGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gcmVwbHkuIEEgYnVmZmVyICAgICAKLSAqICAgICAgICAgIGlzIHByb3ZpZGVkIGludG8gd2hpY2ggSVVDViBtb3ZlcyB0aGUgcmVwbHkgdG8gdGhpcyAgICAgICAgCi0gKiAgICAgICAgICBtZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogSW5wdXQ6IHBhdGhpZCAtIFJhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLiAgICAgICAgICAgICAgICAgIAotICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuICAgCisvKgorICogTmFtZTogaXVjdl9zZW5kMndheV9wcm1tc2cKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAqICAgICAgICAgIFBybW1zZyBzcGVjaWZpZXMgdGhhdCB0aGUgOC1ieXRlcyBvZiBkYXRhIGFyZSB0byBiZSBtb3ZlZAorICogICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuIFRoaXMgaXMgYSB0d28td2F5IG1lc3NhZ2UgYW5kIHRoZQorICogICAgICAgICAgcmVjZWl2ZXIgb2YgdGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gcmVwbHkuIEEgYnVmZmVyCisgKiAgICAgICAgICBpcyBwcm92aWRlZCBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBJbnB1dDogcGF0aGlkIC0gUmF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4KKyAqICAgICAgICBzcmNjbHMgLSBTcGVjaWZpZXMgdGhlIHNvdXJjZSBtZXNzYWdlIGNsYXNzLgorICogICAgICAgIG1zZ3RhZyAtIFNwZWNpZmllcyBhIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UuCiAgKiAgICAgICAgZmxhZ3MxIC0gT3B0aW9uIGZvciBwYXRoLgogICogICAgICAgICAgSVBQUlRZLSAweDIwIFNwZWNpZmllcyBpZiB5b3Ugd2FudCB0byBzZW5kIHByaW9yaXR5IG1lc3NhZ2UuCi0gKiAgICAgICAgcHJtbXNnIC0gOC1ieXRlcyBvZiBkYXRhIHRvIGJlIHBsYWNlZCBpbiBwYXJhbWV0ZXIgbGlzdC4gICAgICAKLSAqICAgICAgICBhbnNidWYgLSBBZGRyZXNzIG9mIGJ1ZmZlciBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IG9mICAgIAorICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW4gcGFyYW1ldGVyIGxpc3QuCisgKiAgICAgICAgYW5zYnVmIC0gQWRkcmVzcyBvZiBidWZmZXIgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSBvZgogICogICAgICAgICAgICAgICAgIHRoaXMgbWVzc2FnZS4KLSAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCBvZiBidWZmZXIuICAgICAgICAgICAgICAgCi0gKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4gICAgICAgICAKKyAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCBvZiBidWZmZXIuCisgKiBPdXRwdXQ6IG1zZ2lkIC0gU3BlY2lmaWVzIHRoZSBtZXNzYWdlIElELgorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gQnVmZmVyIGFkZHJlc3MgaXMgTlVMTC4KICovCiBpbnQgaXVjdl9zZW5kMndheV9wcm1tc2cgKHUxNiBwYXRoaWQsCiAJCQkgIHUzMiAqIG1zZ2lkLApAQCAtNzg4LDI5ICs3ODgsMjkgQEAKIAkJCSAgdWxvbmcgZmxhZ3MxLAogCQkJICB1Y2hhciBwcm1tc2dbOF0sIHZvaWQgKmFuc2J1ZiwgdWxvbmcgYW5zbGVuKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBOYW1lOiBpdWN2X3NlbmQyd2F5X3BybW1zZ19hcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4gICAgICAgIAotICogICAgICAgICAgUHJtbXNnIHNwZWNpZmllcyB0aGF0IHRoZSA4LWJ5dGVzIG9mIGRhdGEgYXJlIHRvIGJlIG1vdmVkICAgCi0gKiAgICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgbGlzdC4gVGhpcyBpcyBhIHR3by13YXkgbWVzc2FnZSBhbmQgdGhlICAKLSAqICAgICAgICAgIHJlY2VpdmVyIG9mIHRoZSBtZXNzYWdlIGlzIGV4cGVjdGVkIHRvIHJlcGx5LiBBIGJ1ZmZlciAgICAgIAotICogICAgICAgICAgaXMgcHJvdmlkZWQgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseSB0byB0aGlzICAgICAgICAgCi0gKiAgICAgICAgICBtZXNzYWdlLiBUaGUgY29udGVudHMgb2YgYW5zYnVmIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSAgICAgICAKLSAqICAgICAgICAgIGFycmF5IG9mIGFkZHJlc3NlcyBhbmQgbGVuZ3RocyBvZiBkaXNjb250aWd1b3VzIGJ1ZmZlcnMgICAgIAotICogICAgICAgICAgdGhhdCBjb250YWluIHRoZSByZXBseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgdHJnY2xzIC0gU3BlY2lmaWVzIHRhcmdldCBjbGFzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4gICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgbXNndGFnIC0gU3BlY2lmaWVzIGEgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZS4gICAgCisvKgorICogTmFtZTogaXVjdl9zZW5kMndheV9wcm1tc2dfYXJyYXkKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGRhdGEgdG8gYW5vdGhlciBhcHBsaWNhdGlvbi4KKyAqICAgICAgICAgIFBybW1zZyBzcGVjaWZpZXMgdGhhdCB0aGUgOC1ieXRlcyBvZiBkYXRhIGFyZSB0byBiZSBtb3ZlZAorICogICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuIFRoaXMgaXMgYSB0d28td2F5IG1lc3NhZ2UgYW5kIHRoZQorICogICAgICAgICAgcmVjZWl2ZXIgb2YgdGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQgdG8gcmVwbHkuIEEgYnVmZmVyCisgKiAgICAgICAgICBpcyBwcm92aWRlZCBpbnRvIHdoaWNoIElVQ1YgbW92ZXMgdGhlIHJlcGx5IHRvIHRoaXMKKyAqICAgICAgICAgIG1lc3NhZ2UuIFRoZSBjb250ZW50cyBvZiBhbnNidWYgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCisgKiAgICAgICAgICBhcnJheSBvZiBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgZGlzY29udGlndW91cyBidWZmZXJzCisgKiAgICAgICAgICB0aGF0IGNvbnRhaW4gdGhlIHJlcGx5LgorICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogICAgICAgIHRyZ2NscyAtIFNwZWNpZmllcyB0YXJnZXQgY2xhc3MuCisgKiAgICAgICAgc3JjY2xzIC0gU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVzc2FnZSBjbGFzcy4KKyAqICAgICAgICBtc2d0YWcgLSBTcGVjaWZpZXMgYSB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICogICAgICAgIGZsYWdzMSAtIE9wdGlvbiBmb3IgcGF0aC4KICAqICAgICAgICAgIElQUFJUWS0gMHgyMCBzcGVjaWZpZXMgaWYgeW91IHdhbnQgdG8gc2VuZCBwcmlvcml0eSBtZXNzYWdlLgotICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuIAorICogICAgICAgIHBybW1zZyAtIDgtYnl0ZXMgb2YgZGF0YSB0byBiZSBwbGFjZWQgaW50byB0aGUgcGFyYW1ldGVyIGxpc3QuCiAgKiAgICAgICAgYW5zYnVmIC0gQWRkcmVzcyBvZiBhcnJheSBvZiBidWZmZXIgaW50byB3aGljaCBJVUNWIG1vdmVzIHRoZSByZXBseQotICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4gIAotICogICAgICAgIGFuc2xlbiAtIEFkZHJlc3Mgb2YgbGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlcnMuICAgICAgICAgICAgICAgIAotICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4gICAgICAKLSAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuICAgICAgCi0gKiAgICAgICAgICgtRUlOVkFMKSAtIEFuc2J1ZiBhZGRyZXNzIGlzIE5VTEwuICAgICAgICAgIAorICogICAgICAgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZS4KKyAqICAgICAgICBhbnNsZW4gLSBBZGRyZXNzIG9mIGxlbmd0aCBvZiByZXBseSBidWZmZXJzLgorICogT3V0cHV0OiBtc2dpZCAtIFNwZWNpZmllcyB0aGUgbWVzc2FnZSBJRC4KKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCisgKiAgICAgICAgICgtRUlOVkFMKSAtIEFuc2J1ZiBhZGRyZXNzIGlzIE5VTEwuCiAqLwogaW50IGl1Y3Zfc2VuZDJ3YXlfcHJtbXNnX2FycmF5ICh1MTYgcGF0aGlkLAogCQkJCXUzMiAqIG1zZ2lkLApAQCAtODIxLDI5ICs4MjEsMjkgQEAKIAkJCQl1Y2hhciBwcm1tc2dbOF0sCiAJCQkJaXVjdl9hcnJheV90ICogYW5zYnVmLCB1bG9uZyBhbnNsZW4pOwogCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqIE5hbWU6IGl1Y3Zfc2V0bWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb2xsb3dpbmcgSVVDViAgICAgCi0gKiAgICAgICAgICBleHRlcm5hbCBpbnRlcnJ1cHRpb25zOiBOb25wcmlvcml0eSBhbmQgcHJpb3JpdHkgbWVzc2FnZSAKLSAqICAgICAgICAgIGludGVycnVwdHMsIG5vbnByaW9yaXR5IGFuZCBwcmlvcml0eSByZXBseSBpbnRlcnJ1cHRzLiAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2V0bWFzaworICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb2xsb3dpbmcgSVVDVgorICogICAgICAgICAgZXh0ZXJuYWwgaW50ZXJydXB0aW9uczogTm9ucHJpb3JpdHkgYW5kIHByaW9yaXR5IG1lc3NhZ2UKKyAqICAgICAgICAgIGludGVycnVwdHMsIG5vbnByaW9yaXR5IGFuZCBwcmlvcml0eSByZXBseSBpbnRlcnJ1cHRzLgogICogSW5wdXQ6IFNldE1hc2tGbGFnIC0gb3B0aW9ucyBmb3IgaW50ZXJydXB0cwotICogICAgICAgICAgIDB4ODAgLSBOb25wcmlvcml0eV9NZXNzYWdlUGVuZGluZ0ludGVycnVwdHNGbGFnICAgICAgICAgCi0gKiAgICAgICAgICAgMHg0MCAtIFByaW9yaXR5X01lc3NhZ2VQZW5kaW5nSW50ZXJydXB0c0ZsYWcgICAgICAgICAgICAKLSAqICAgICAgICAgICAweDIwIC0gTm9ucHJpb3JpdHlfTWVzc2FnZUNvbXBsZXRpb25JbnRlcnJ1cHRzRmxhZyAgICAgIAotICogICAgICAgICAgIDB4MTAgLSBQcmlvcml0eV9NZXNzYWdlQ29tcGxldGlvbkludGVycnVwdHNGbGFnICAgICAgICAgCisgKiAgICAgICAgICAgMHg4MCAtIE5vbnByaW9yaXR5X01lc3NhZ2VQZW5kaW5nSW50ZXJydXB0c0ZsYWcKKyAqICAgICAgICAgICAweDQwIC0gUHJpb3JpdHlfTWVzc2FnZVBlbmRpbmdJbnRlcnJ1cHRzRmxhZworICogICAgICAgICAgIDB4MjAgLSBOb25wcmlvcml0eV9NZXNzYWdlQ29tcGxldGlvbkludGVycnVwdHNGbGFnCisgKiAgICAgICAgICAgMHgxMCAtIFByaW9yaXR5X01lc3NhZ2VDb21wbGV0aW9uSW50ZXJydXB0c0ZsYWcKICAqICAgICAgICAgICAweDA4IC0gSVVDVkNvbnRyb2xJbnRlcnJ1cHRzRmxhZwotICogT3V0cHV0OiBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiBSZXR1cm46IFJldHVybiBjb2RlIGZyb20gQ1AgSVVDViBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqIE91dHB1dDogTkEKKyAqIFJldHVybjogUmV0dXJuIGNvZGUgZnJvbSBDUCBJVUNWIGNhbGwuCiAqLwogaW50IGl1Y3Zfc2V0bWFzayAoaW50IFNldE1hc2tGbGFnKTsKIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogTmFtZTogaXVjdl9zZXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogUHVycG9zZTogVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIGFuIElVQ1YgcGF0aC4gIAotICogSW5wdXQ6IHBhdGhpZCAtIFBhdGggaWRlbnRpZmljYXRpb24gbnVtYmVyLiAgICAgICAKLSAqICAgICAgICB1c2VyX2RhdGEgLSAxNi1ieXRlcyBvZiB1c2VyIGRhdGEuICAgICAgICAgCi0gKiBPdXRwdXQ6IE5BICAgICAgIAotICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAoLUVJTlZBTCkgLSBJbnRlcmFsIGVycm9yLCB3aWxkIHBvaW50ZXIuICAgICAgIAorLyoKKyAqIE5hbWU6IGl1Y3Zfc2V2ZXIKKyAqIFB1cnBvc2U6IFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyBhbiBJVUNWIHBhdGguCisgKiBJbnB1dDogcGF0aGlkIC0gUGF0aCBpZGVudGlmaWNhdGlvbiBudW1iZXIuCisgKiAgICAgICAgdXNlcl9kYXRhIC0gMTYtYnl0ZXMgb2YgdXNlciBkYXRhLgorICogT3V0cHV0OiBOQQorICogUmV0dXJuOiBSZXR1cm4gY29kZSBmcm9tIENQIElVQ1YgY2FsbC4KKyAqICAgICAgICAgKC1FSU5WQUwpIC0gSW50ZXJhbCBlcnJvciwgd2lsZCBwb2ludGVyLgogKi8KIGludCBpdWN2X3NldmVyICh1MTYgcGF0aGlkLCB1Y2hhciB1c2VyX2RhdGFbMTZdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IGU2NWRhOTIuLmY5NDQxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtNjgsNiArNjgsNyBAQAogc3RhdGljIHZvaWQgbGNzX3N0YXJ0X2tlcm5lbF90aHJlYWQoc3RydWN0IGxjc19jYXJkICpjYXJkKTsKIHN0YXRpYyB2b2lkIGxjc19nZXRfZnJhbWVzX2NiKHN0cnVjdCBsY3NfY2hhbm5lbCAqLCBzdHJ1Y3QgbGNzX2J1ZmZlciAqKTsKIHN0YXRpYyBpbnQgbGNzX3NlbmRfZGVsaXBtKHN0cnVjdCBsY3NfY2FyZCAqLCBzdHJ1Y3QgbGNzX2lwbV9saXN0ICopOworc3RhdGljIGludCBsY3NfcmVjb3Zlcnkodm9pZCAqcHRyKTsKIAogLyoqCiAgKiBEZWJ1ZyBGYWNpbGl0eSBTdHVmZgpAQCAtNDI5LDEyICs0MzAsNiBAQAogCWNhcmQtPnR4X2J1ZmZlciA9IE5VTEw7CiAJY2FyZC0+dHhfZW1pdHRlZCA9IDA7CiAKLQkvKiBJbml0aWFsaXplIGtlcm5lbCB0aHJlYWQgdGFzayB1c2VkIGZvciBMR1cgY29tbWFuZHMuICovCi0JSU5JVF9XT1JLKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIsCi0JCSAgKHZvaWQgKilsY3Nfc3RhcnRfa2VybmVsX3RocmVhZCxjYXJkKTsKLQljYXJkLT50aHJlYWRfc3RhcnRfbWFzayA9IDA7Ci0JY2FyZC0+dGhyZWFkX2FsbG93ZWRfbWFzayA9IDA7Ci0JY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+d2FpdF9xKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmlwbV9sb2NrKTsKQEAgLTY3NSw4ICs2NzAsOSBAQAogCWludCBpbmRleCwgcmM7CiAKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJyZHlidWZmIik7Ci0JQlVHX09OKGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX0xPQ0tFRCAmJgotCQlidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9QUk9DRVNTRUQpOworCWlmIChidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9MT0NLRUQgJiYKKwkgICAgYnVmZmVyLT5zdGF0ZSAhPSBCVUZfU1RBVEVfUFJPQ0VTU0VEKQorCQlCVUcoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwogCWJ1ZmZlci0+c3RhdGUgPSBCVUZfU1RBVEVfUkVBRFk7CiAJaW5kZXggPSBidWZmZXIgLSBjaGFubmVsLT5pb2I7CkBAIC03MDAsNyArNjk2LDggQEAKIAlpbnQgaW5kZXgsIHByZXYsIG5leHQ7CiAKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJwcmNzYnVmZiIpOwotCUJVR19PTihidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9SRUFEWSk7CisJaWYgKGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX1JFQURZKQorCQlCVUcoKTsKIAlidWZmZXItPnN0YXRlID0gQlVGX1NUQVRFX1BST0NFU1NFRDsKIAlpbmRleCA9IGJ1ZmZlciAtIGNoYW5uZWwtPmlvYjsKIAlwcmV2ID0gKGluZGV4IC0gMSkgJiAoTENTX05VTV9CVUZGUyAtIDEpOwpAQCAtNzMyLDggKzcyOSw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUxDU19EQkZfVEVYVCg1LCB0cmFjZSwgInJlbGJ1ZmYiKTsKLQlCVUdfT04oYnVmZmVyLT5zdGF0ZSAhPSBCVUZfU1RBVEVfTE9DS0VEICYmCi0JCWJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX1BST0NFU1NFRCk7CisJaWYgKGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX0xPQ0tFRCAmJgorCSAgICBidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9QUk9DRVNTRUQpCisJCUJVRygpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CiAJYnVmZmVyLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CkBAIC0xMTQ3LDggKzExNDUsNiBAQAogCQlsaXN0X2FkZF90YWlsKCZpcG0tPmxpc3QsICZjYXJkLT5pcG1fbGlzdCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwbV9sb2NrLCBmbGFncyk7Ci0JaWYgKGNhcmQtPnN0YXRlID09IERFVl9TVEFURV9VUCkKLQkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOwogfQogCiAvKioKQEAgLTEyMzEsMTcgKzEyMjcsMTcgQEAKIAkJaWYgKGlwbSAhPSBOVUxMKQogCQkJY29udGludWU7CS8qIEFkZHJlc3MgYWxyZWFkeSBpbiBsaXN0LiAqLwogCQlpcG0gPSAoc3RydWN0IGxjc19pcG1fbGlzdCAqKQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGxjc19pcG1fbGlzdCksIEdGUF9BVE9NSUMpOworCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGxjc19pcG1fbGlzdCksIEdGUF9BVE9NSUMpOwogCQlpZiAoaXBtID09IE5VTEwpIHsKIAkJCVBSSU5UX0lORk8oIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCAiCiAJCQkJICAgIm5ldyBtdWx0aWNhc3QgZW50cnkhXG4iKTsKIAkJCWJyZWFrOwogCQl9Ci0JCW1lbXNldChpcG0sIDAsIHNpemVvZihzdHJ1Y3QgbGNzX2lwbV9saXN0KSk7CiAJCW1lbWNweSgmaXBtLT5pcG0ubWFjX2FkZHIsIGJ1ZiwgTENTX01BQ19MRU5HVEgpOwogCQlpcG0tPmlwbS5pcF9hZGRyID0gaW00LT5tdWx0aWFkZHI7CiAJCWlwbS0+aXBtX3N0YXRlID0gTENTX0lQTV9TVEFURV9TRVRfUkVRVUlSRUQ7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcG1fbG9jaywgZmxhZ3MpOworCQlMQ1NfREJGX0hFWCgyLHRyYWNlLCZpcG0tPmlwbS5pcF9hZGRyLDQpOwogCQlsaXN0X2FkZCgmaXBtLT5saXN0LCAmY2FyZC0+aXBtX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcG1fbG9jaywgZmxhZ3MpOwogCX0KQEAgLTEyNjksNyArMTI2NSwxNSBAQAogCXJlYWRfdW5sb2NrKCZpbjRfZGV2LT5tY19saXN0X2xvY2spOwogCWluX2Rldl9wdXQoaW40X2Rldik7CiAKKwluZXRpZl9jYXJyaWVyX29mZihjYXJkLT5kZXYpOworCW5ldGlmX3R4X2Rpc2FibGUoY2FyZC0+ZGV2KTsKKwl3YWl0X2V2ZW50KGNhcmQtPndyaXRlLndhaXRfcSwKKwkJCShjYXJkLT53cml0ZS5zdGF0ZSAhPSBDSF9TVEFURV9SVU5OSU5HKSk7CiAJbGNzX2ZpeF9tdWx0aWNhc3RfbGlzdChjYXJkKTsKKwlpZiAoY2FyZC0+c3RhdGUgPT0gREVWX1NUQVRFX1VQKSB7CisJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShjYXJkLT5kZXYpOworCX0KIG91dDoKIAlsY3NfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKTsKIAlyZXR1cm4gMDsKQEAgLTEyODYsNyArMTI5MCw3IEBACiAgICAgICAgIExDU19EQkZfVEVYVCg0LCB0cmFjZSwgInNldG11bHRpIik7CiAgICAgICAgIGNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIGRldi0+cHJpdjsKIAotICAgICAgICBpZiAoIWxjc19zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpIAorICAgICAgICBpZiAoIWxjc19zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCiAJCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7CiB9CiAKQEAgLTEzMTgsNiArMTMyMiw1MyBAQAogCXJldHVybiBQVFJfRVJSKGlyYik7CiB9CiAKK3N0YXRpYyBpbnQKK2xjc19nZXRfcHJvYmxlbShzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IGlyYiAqaXJiKQoreworCWludCBkc3RhdCwgY3N0YXQ7CisJY2hhciAqc2Vuc2U7CisKKwlzZW5zZSA9IChjaGFyICopIGlyYi0+ZWN3OworCWNzdGF0ID0gaXJiLT5zY3N3LmNzdGF0OworCWRzdGF0ID0gaXJiLT5zY3N3LmRzdGF0OworCisJaWYgKGNzdGF0ICYgKFNDSE5fU1RBVF9DSE5fQ1RSTF9DSEsgfCBTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyB8CisJCSAgICAgU0NITl9TVEFUX0NITl9EQVRBX0NISyB8IFNDSE5fU1RBVF9DSEFJTl9DSEVDSyB8CisJCSAgICAgU0NITl9TVEFUX1BST1RfQ0hFQ0sgICB8IFNDSE5fU1RBVF9QUk9HX0NIRUNLKSkgeworCQlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJDR0VOQ0hLIik7CisJCXJldHVybiAxOworCX0KKwlpZiAoZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKSB7CisJCWlmIChzZW5zZVtMQ1NfU0VOU0VfQllURV8xXSAmCisJCSAgICBMQ1NfU0VOU0VfUkVTRVRUSU5HX0VWRU5UKSB7CisJCQlMQ1NfREJGX1RFWFQoMiwgdHJhY2UsICJSRVZJTkQiKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChzZW5zZVtMQ1NfU0VOU0VfQllURV8wXSAmCisJCSAgICBMQ1NfU0VOU0VfQ01EX1JFSkVDVCkgeworCQkJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAiQ01EUkVKIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoKCFzZW5zZVtMQ1NfU0VOU0VfQllURV8wXSkgJiYKKwkJICAgICghc2Vuc2VbTENTX1NFTlNFX0JZVEVfMV0pICYmCisJCSAgICAoIXNlbnNlW0xDU19TRU5TRV9CWVRFXzJdKSAmJgorCQkgICAgKCFzZW5zZVtMQ1NfU0VOU0VfQllURV8zXSkpIHsKKwkJCUxDU19EQkZfVEVYVCgyLCB0cmFjZSwgIlpFUk9TRU4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCUxDU19EQkZfVEVYVCgyLCB0cmFjZSwgIkRHRU5DSEsiKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCit2b2lkCitsY3Nfc2NoZWR1bGVfcmVjb3Zlcnkoc3RydWN0IGxjc19jYXJkICpjYXJkKQoreworCUxDU19EQkZfVEVYVCgyLCB0cmFjZSwgInN0YXJ0cmVjIik7CisJaWYgKCFsY3Nfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgTENTX1JFQ09WRVJZX1RIUkVBRCkpCisJCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7Cit9CiAKIC8qKgogICogSVJRIEhhbmRsZXIgZm9yIExDUyBjaGFubmVscwpAQCAtMTMyNyw3ICsxMzc4LDggQEAKIHsKIAlzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQ7CiAJc3RydWN0IGxjc19jaGFubmVsICpjaGFubmVsOwotCWludCBpbmRleDsKKwlpbnQgcmMsIGluZGV4OworCWludCBjc3RhdCwgZHN0YXQ7CiAKIAlpZiAobGNzX2NoZWNrX2lyYl9lcnJvcihjZGV2LCBpcmIpKQogCQlyZXR1cm47CkBAIC0xMzM4LDE0ICsxMzkwLDI3IEBACiAJZWxzZQogCQljaGFubmVsID0gJmNhcmQtPndyaXRlOwogCisJY3N0YXQgPSBpcmItPnNjc3cuY3N0YXQ7CisJZHN0YXQgPSBpcmItPnNjc3cuZHN0YXQ7CiAJTENTX0RCRl9URVhUXyg1LCB0cmFjZSwgIlJpbnQlcyIsY2Rldi0+ZGV2LmJ1c19pZCk7CiAJTENTX0RCRl9URVhUXyg1LCB0cmFjZSwgIiU0eCU0eCIsaXJiLT5zY3N3LmNzdGF0LCBpcmItPnNjc3cuZHN0YXQpOwogCUxDU19EQkZfVEVYVF8oNSwgdHJhY2UsICIlNHglNHgiLGlyYi0+c2Nzdy5mY3RsLCBpcmItPnNjc3cuYWN0bCk7CiAKKwkvKiBDaGVjayBmb3IgY2hhbm5lbCBhbmQgZGV2aWNlIGVycm9ycyBwcmVzZW50ZWQgKi8KKwlyYyA9IGxjc19nZXRfcHJvYmxlbShjZGV2LCBpcmIpOworCWlmIChyYyB8fCAoZHN0YXQgJiBERVZfU1RBVF9VTklUX0VYQ0VQKSkgeworCQlQUklOVF9XQVJOKCJjaGVjayBvbiBkZXZpY2UgJXMsIGRzdGF0PTB4JVgsIGNzdGF0PTB4JVggXG4iLAorCQkJICAgIGNkZXYtPmRldi5idXNfaWQsIGRzdGF0LCBjc3RhdCk7CisJCWlmIChyYykgeworCQkJbGNzX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOworCQkJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKKwkJCXJldHVybjsKKwkJfQorCX0KIAkvKiBIb3cgZmFyIGluIHRoZSBjY3cgY2hhaW4gaGF2ZSB3ZSBwcm9jZXNzZWQ/ICovCiAJaWYgKChjaGFubmVsLT5zdGF0ZSAhPSBDSF9TVEFURV9JTklUKSAmJgogCSAgICAoaXJiLT5zY3N3LmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykpIHsKLQkJaW5kZXggPSAoc3RydWN0IGNjdzEgKikgX192YSgoYWRkcl90KSBpcmItPnNjc3cuY3BhKSAKKwkJaW5kZXggPSAoc3RydWN0IGNjdzEgKikgX192YSgoYWRkcl90KSBpcmItPnNjc3cuY3BhKQogCQkJLSBjaGFubmVsLT5jY3dzOwogCQlpZiAoKGlyYi0+c2Nzdy5hY3RsICYgU0NTV19BQ1RMX1NVU1BFTkRFRCkgfHwKIAkJICAgIChpcmItPnNjc3cuY3N0YXQgJiBTQ0hOX1NUQVRfUENJKSkKQEAgLTEzNjcsNyArMTQzMiw2IEBACiAJZWxzZSBpZiAoaXJiLT5zY3N3LmFjdGwgJiBTQ1NXX0FDVExfU1VTUEVOREVEKQogCQkvKiBDQ1cgZXhlY3V0aW9uIHN0b3BwZWQgb24gYSBzdXNwZW5kIGJpdC4gKi8KIAkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9TVVNQRU5ERUQ7Ci0KIAlpZiAoaXJiLT5zY3N3LmZjdGwgJiBTQ1NXX0ZDVExfSEFMVF9GVU5DKSB7CiAJCWlmIChpcmItPnNjc3cuY2MgIT0gMCkgewogCQkJY2N3X2RldmljZV9oYWx0KGNoYW5uZWwtPmNjd2RldiwgKGFkZHJfdCkgY2hhbm5lbCk7CkBAIC0xMzc2LDcgKzE0NDAsNiBAQAogCQkvKiBUaGUgY2hhbm5lbCBoYXMgYmVlbiBzdG9wcGVkIGJ5IGhhbHRfSU8uICovCiAJCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfSEFMVEVEOwogCX0KLQogCWlmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CiAJCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfQ0xFQVJFRDsKIAl9CkBAIC0xNDUyLDcgKzE1MTUsNyBAQAogCWxjc19yZWxlYXNlX2J1ZmZlcihjaGFubmVsLCBidWZmZXIpOwogCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopCiAJCSgoY2hhciAqKSBjaGFubmVsIC0gb2Zmc2V0b2Yoc3RydWN0IGxjc19jYXJkLCB3cml0ZSkpOwotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGNhcmQtPmRldikpCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoY2FyZC0+ZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKGNhcmQtPmRldikpCiAJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIAlzcGluX2xvY2soJmNhcmQtPmxvY2spOwogCWNhcmQtPnR4X2VtaXR0ZWQtLTsKQEAgLTE0ODgsNiArMTU1MSwxMCBAQAogCQljYXJkLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CiAJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwogCXNwaW5fbG9jaygmY2FyZC0+bG9jayk7CiAJaWYgKGNhcmQtPnR4X2J1ZmZlciAhPSBOVUxMICYmCkBAIC0xNjMzLDMwICsxNzAwLDYgQEAKIH0KIAogLyoqCi0gKiByZXNldCBjYXJkCi0gKi8KLXN0YXRpYyBpbnQKLWxjc19yZXNldGNhcmQoc3RydWN0IGxjc19jYXJkICpjYXJkKQotewotCWludCByZXRyaWVzOwotCi0JTENTX0RCRl9URVhUKDIsIHRyYWNlLCAicmVzY2FyZCIpOwotCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCAxMDsgcmV0cmllcysrKSB7Ci0JCWlmIChsY3NfZGV0ZWN0KGNhcmQpID09IDApIHsKLQkJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKLQkJCWNhcmQtPnN0YXRlID0gREVWX1NUQVRFX1VQOwotCQkJUFJJTlRfSU5GTygiTENTIGRldmljZSAlcyBzdWNjZXNzZnVsbHkgcmVzdGFydGVkIVxuIiwKLQkJCQkgICBjYXJkLT5kZXYtPm5hbWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJbXNsZWVwKDMwMDApOwotCX0KLQlQUklOVF9FUlIoIkVycm9yIGluIFJlc2V0aW5nIExDUyBjYXJkIVxuIik7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KLQotLyoqCiAgKiBMQ1MgU3RvcCBjYXJkCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTE2ODAsMTI2ICsxNzIzLDE4IEBACiB9CiAKIC8qKgotICogTEdXIGluaXRpYXRlZCBjb21tYW5kcwotICovCi1zdGF0aWMgaW50Ci1sY3NfbGd3X3N0YXJ0bGFuX3RocmVhZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBsY3NfY2FyZCAqY2FyZDsKLQotCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIGRhdGE7Ci0JZGFlbW9uaXplKCJsZ3dzdHBsbiIpOwotCi0JaWYgKCFsY3NfZG9fcnVuX3RocmVhZChjYXJkLCBMQ1NfU1RBUlRMQU5fVEhSRUFEKSkKLQkJcmV0dXJuIDA7Ci0JTENTX0RCRl9URVhUKDQsIHRyYWNlLCAibGd3c3RwbG4iKTsKLQlpZiAoY2FyZC0+ZGV2KQotCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7Ci0JaWYgKGxjc19zdGFydGxhbihjYXJkKSA9PSAwKSB7Ci0JCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKLQkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7Ci0JCVBSSU5UX0lORk8oIkxDUyBTdGFydGxhbiBmb3IgZGV2aWNlICVzIHN1Y2NlZWRlZCFcbiIsCi0JCQkgICBjYXJkLT5kZXYtPm5hbWUpOwotCi0JfSBlbHNlCi0JCVBSSU5UX0VSUigiTENTIFN0YXJ0bGFuIGZvciBkZXZpY2UgJXMgZmFpbGVkIVxuIiwKLQkJCSAgY2FyZC0+ZGV2LT5uYW1lKTsKLQlsY3NfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIExDU19TVEFSVExBTl9USFJFQUQpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIFNlbmQgc3RhcnR1cCBjb21tYW5kIGluaXRpYXRlZCBieSBMYW4gR2F0ZXdheQotICovCi1zdGF0aWMgaW50Ci1sY3NfbGd3X3N0YXJ0dXBfdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0JaW50IHJjOwotCi0Jc3RydWN0IGxjc19jYXJkICpjYXJkOwotCi0JY2FyZCA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGF0YTsKLQlkYWVtb25pemUoImxnd3N0YWxuIik7Ci0KLQlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TVEFSVFVQX1RIUkVBRCkpCi0JCXJldHVybiAwOwotCUxDU19EQkZfVEVYVCg0LCB0cmFjZSwgImxnd3N0YWxuIik7Ci0JaWYgKGNhcmQtPmRldikKLQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5kZXYpOwotCXJjID0gbGNzX3NlbmRfc3RhcnR1cChjYXJkLCBMQ1NfSU5JVElBVE9SX0xHVyk7Ci0JaWYgKHJjICE9IDApIHsKLQkJUFJJTlRfRVJSKCJTdGFydHVwIGZvciBMQ1MgZGV2aWNlICVzIGluaXRpYXRlZCAiIFwKLQkJCSAgImJ5IExHVyBmYWlsZWQhXG5SZXNldGluZyBjYXJkIC4uLlxuIiwKLQkJCSAgY2FyZC0+ZGV2LT5uYW1lKTsKLQkJLyogZG8gYSBjYXJkIHJlc2V0ICovCi0JCXJjID0gbGNzX3Jlc2V0Y2FyZChjYXJkKTsKLQkJaWYgKHJjID09IDApCi0JCQlnb3RvIERvbmU7Ci0JfQotCXJjID0gbGNzX3N0YXJ0bGFuKGNhcmQpOwotCWlmIChyYyA9PSAwKSB7Ci0JCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKLQkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7Ci0JfQotRG9uZToKLQlpZiAocmMgPT0gMCkKLQkJUFJJTlRfSU5GTygiTENTIFN0YXJ0dXAgZm9yIGRldmljZSAlcyBzdWNjZWVkZWQhXG4iLAotCQkJICAgY2FyZC0+ZGV2LT5uYW1lKTsKLQllbHNlCi0JCVBSSU5UX0VSUigiTENTIFN0YXJ0dXAgZm9yIGRldmljZSAlcyBmYWlsZWQhXG4iLAotCQkJICBjYXJkLT5kZXYtPm5hbWUpOwotCWxjc19jbGVhcl90aHJlYWRfcnVubmluZ19iaXQoY2FyZCwgTENTX1NUQVJUVVBfVEhSRUFEKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIHNlbmQgc3RvcGxhbiBjb21tYW5kIGluaXRpYXRlZCBieSBMYW4gR2F0ZXdheQotICovCi1zdGF0aWMgaW50Ci1sY3NfbGd3X3N0b3BsYW5fdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGxjc19jYXJkICpjYXJkOwotCWludCByYzsKLQotCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIGRhdGE7Ci0JZGFlbW9uaXplKCJsZ3dzdG9wIik7Ci0KLQlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TVE9QTEFOX1RIUkVBRCkpCi0JCXJldHVybiAwOwotCUxDU19EQkZfVEVYVCg0LCB0cmFjZSwgImxnd3N0b3AiKTsKLQlpZiAoY2FyZC0+ZGV2KQotCQluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7Ci0JaWYgKGxjc19zZW5kX3N0b3BsYW4oY2FyZCwgTENTX0lOSVRJQVRPUl9MR1cpID09IDApCi0JCVBSSU5UX0lORk8oIlN0b3BsYW4gZm9yICVzIGluaXRpYXRlZCBieSBMR1cgc3VjY2VlZGVkIVxuIiwKLQkJCSAgIGNhcmQtPmRldi0+bmFtZSk7Ci0JZWxzZQotCQlQUklOVF9FUlIoIlN0b3BsYW4gJXMgaW5pdGlhdGVkIGJ5IExHVyBmYWlsZWQhXG4iLAotCQkJICBjYXJkLT5kZXYtPm5hbWUpOwotCS8qVHJ5IHRvIHJlc2V0IHRoZSBjYXJkLCBzdG9wIGl0IG9uIGZhaWx1cmUgKi8KLSAgICAgICAgcmMgPSBsY3NfcmVzZXRjYXJkKGNhcmQpOwotICAgICAgICBpZiAocmMgIT0gMCkKLSAgICAgICAgICAgICAgICByYyA9IGxjc19zdG9wY2FyZChjYXJkKTsKLQlsY3NfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIExDU19TVE9QTEFOX1RIUkVBRCk7Ci0gICAgICAgIHJldHVybiByYzsKLX0KLQotLyoqCiAgKiBLZXJuZWwgVGhyZWFkIGhlbHBlciBmdW5jdGlvbnMgZm9yIExHVyBpbml0aWF0ZWQgY29tbWFuZHMKICAqLwogc3RhdGljIHZvaWQKIGxjc19zdGFydF9rZXJuZWxfdGhyZWFkKHN0cnVjdCBsY3NfY2FyZCAqY2FyZCkKIHsKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJrcm50aHJkIik7Ci0JaWYgKGxjc19kb19zdGFydF90aHJlYWQoY2FyZCwgTENTX1NUQVJUVVBfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfbGd3X3N0YXJ0dXBfdGhyZWFkLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKLQlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU1RBUlRMQU5fVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfbGd3X3N0YXJ0bGFuX3RocmVhZCwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7Ci0JaWYgKGxjc19kb19zdGFydF90aHJlYWQoY2FyZCwgTENTX1NUT1BMQU5fVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfbGd3X3N0b3BsYW5fdGhyZWFkLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKKwlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKSkKKwkJa2VybmVsX3RocmVhZChsY3NfcmVjb3ZlcnksICh2b2lkICopIGNhcmQsIFNJR0NITEQpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZiAobGNzX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQobGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CisJCWtlcm5lbF90aHJlYWQobGNzX3JlZ2lzdGVyX21jX2FkZHJlc3NlcywKKwkJCQkodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKICNlbmRpZgogfQogCkBAIC0xODEzLDE5ICsxNzQ4LDE0IEBACiAJaWYgKGNtZC0+aW5pdGlhdG9yID09IExDU19JTklUSUFUT1JfTEdXKSB7CiAJCXN3aXRjaChjbWQtPmNtZF9jb2RlKSB7CiAJCWNhc2UgTENTX0NNRF9TVEFSVFVQOgotCQkJaWYgKCFsY3Nfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwKLQkJCQkJCSAgICAgIExDU19TVEFSVFVQX1RIUkVBRCkpCi0JCQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKLQkJCWJyZWFrOwogCQljYXNlIExDU19DTURfU1RBUlRMQU46Ci0JCQlpZiAoIWxjc19zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLAotCQkJCQkJICAgICAgTENTX1NUQVJUTEFOX1RIUkVBRCkpCi0JCQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwkJCWxjc19zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKIAkJCWJyZWFrOwogCQljYXNlIExDU19DTURfU1RPUExBTjoKLQkJCWlmICghbGNzX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsCi0JCQkJCQkgICAgICBMQ1NfU1RPUExBTl9USFJFQUQpKQotCQkJCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7CisJCQlQUklOVF9XQVJOKCJTdG9wbGFuIGZvciAlcyBpbml0aWF0ZWQgYnkgTEdXLlxuIiwKKwkJCQkJY2FyZC0+ZGV2LT5uYW1lKTsKKwkJCWlmIChjYXJkLT5kZXYpCisJCQkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJUFJJTlRfSU5GTygiVU5SRUNPR05JWkVEIExHVyBDT01NQU5EXG4iKTsKQEAgLTE5NDEsOCArMTg3MSwxMSBAQAogCiAJTENTX0RCRl9URVhUKDIsIHRyYWNlLCAic3RvcGRldiIpOwogCWNhcmQgICA9IChzdHJ1Y3QgbGNzX2NhcmQgKikgZGV2LT5wcml2OwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAlkZXYtPmZsYWdzICY9IH5JRkZfVVA7CisJd2FpdF9ldmVudChjYXJkLT53cml0ZS53YWl0X3EsCisJCShjYXJkLT53cml0ZS5zdGF0ZSAhPSBDSF9TVEFURV9SVU5OSU5HKSk7CiAJcmMgPSBsY3Nfc3RvcGNhcmQoY2FyZCk7CiAJaWYgKHJjKQogCQlQUklOVF9FUlIoIlRyeSBpdCBhZ2FpbiFcbiAiKTsKQEAgLTE5NjgsNiArMTkwMSw3IEBACiAKIAl9IGVsc2UgewogCQlkZXYtPmZsYWdzIHw9IElGRl9VUDsKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCWNhcmQtPnN0YXRlID0gREVWX1NUQVRFX1VQOwogCX0KQEAgLTIwNTksMTAgKzE5OTMsMzEgQEAKIAogREVWSUNFX0FUVFIobGFuY21kX3RpbWVvdXQsIDA2NDQsIGxjc190aW1lb3V0X3Nob3csIGxjc190aW1lb3V0X3N0b3JlKTsKIAorc3RhdGljIHNzaXplX3QKK2xjc19kZXZfcmVjb3Zlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbGNzX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOworCWNoYXIgKnRtcDsKKwlpbnQgaTsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNhcmQtPnN0YXRlICE9IERFVl9TVEFURV9VUCkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7CisJaWYgKGkgPT0gMSkKKwkJbGNzX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHJlY292ZXIsIDAyMDAsIE5VTEwsIGxjc19kZXZfcmVjb3Zlcl9zdG9yZSk7CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogbGNzX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3BvcnRuby5hdHRyLAogCSZkZXZfYXR0cl90eXBlLmF0dHIsCiAJJmRldl9hdHRyX2xhbmNtZF90aW1lb3V0LmF0dHIsCisJJmRldl9hdHRyX3JlY292ZXIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMjA5OSw2ICsyMDU0LDEyIEBACiAJY2N3Z2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gY2FyZDsKIAljY3dnZGV2LT5jZGV2WzBdLT5oYW5kbGVyID0gbGNzX2lycTsKIAljY3dnZGV2LT5jZGV2WzFdLT5oYW5kbGVyID0gbGNzX2lycTsKKwljYXJkLT5nZGV2ID0gY2N3Z2RldjsKKwlJTklUX1dPUksoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlciwKKwkJICAodm9pZCAqKSBsY3Nfc3RhcnRfa2VybmVsX3RocmVhZCwgY2FyZCk7CisJY2FyZC0+dGhyZWFkX3N0YXJ0X21hc2sgPSAwOworCWNhcmQtPnRocmVhZF9hbGxvd2VkX21hc2sgPSAwOworCWNhcmQtPnRocmVhZF9ydW5uaW5nX21hc2sgPSAwOwogICAgICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjIwMCw2ICsyMTYxLDcgQEAKIAlpZiAocmVjb3Zlcl9zdGF0ZSA9PSBERVZfU1RBVEVfUkVDT1ZFUikgewogCQlsY3Nfc2V0X211bHRpY2FzdF9saXN0KGNhcmQtPmRldik7CiAJCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX1VQOworCQluZXRpZl9jYXJyaWVyX29uKGNhcmQtPmRldik7CiAJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIAkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7CiAJfSBlbHNlIHsKQEAgLTIyMjksNyArMjE5MSw3IEBACiAgKiBsY3Nfc2h1dGRvd25fZGV2aWNlLCBjYWxsZWQgd2hlbiBzZXR0aW5nIHRoZSBncm91cCBkZXZpY2Ugb2ZmbGluZS4KICAqLwogc3RhdGljIGludAotbGNzX3NodXRkb3duX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjY3dnZGV2KQorX19sY3Nfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNjd2dkZXYsIGludCByZWNvdmVyeV9tb2RlKQogewogCXN0cnVjdCBsY3NfY2FyZCAqY2FyZDsKIAllbnVtIGxjc19kZXZfc3RhdGVzIHJlY292ZXJfc3RhdGU7CkBAIC0yMjM5LDkgKzIyMDEsMTEgQEAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKWNjd2dkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PREVWOwotCWxjc19zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDApOwotCWlmIChsY3Nfd2FpdF9mb3JfdGhyZWFkcyhjYXJkLCBMQ1NfU0VUX01DX1RIUkVBRCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKHJlY292ZXJ5X21vZGUgPT0gMCkgeworCQlsY3Nfc2V0X2FsbG93ZWRfdGhyZWFkcyhjYXJkLCAwKTsKKwkJaWYgKGxjc193YWl0X2Zvcl90aHJlYWRzKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQogCUxDU19EQkZfSEVYKDMsIHNldHVwLCAmY2FyZCwgc2l6ZW9mKHZvaWQqKSk7CiAJcmVjb3Zlcl9zdGF0ZSA9IGNhcmQtPnN0YXRlOwogCkBAIC0yMjU2LDYgKzIyMjAsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbGNzX3NodXRkb3duX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpjY3dnZGV2KQoreworCXJldHVybiBfX2xjc19zaHV0ZG93bl9kZXZpY2UoY2N3Z2RldiwgMCk7Cit9CisKKy8qKgorICogZHJpdmUgbGNzIHJlY292ZXJ5IGFmdGVyIHN0YXJ0dXAgYW5kIHN0YXJ0bGFuIGluaXRpYXRlZCBieSBMYW4gR2F0ZXdheQorICovCitzdGF0aWMgaW50CitsY3NfcmVjb3Zlcnkodm9pZCAqcHRyKQoreworCXN0cnVjdCBsY3NfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OworICAgICAgICBpbnQgcmM7CisKKwljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBwdHI7CisJZGFlbW9uaXplKCJsY3NfcmVjb3ZlciIpOworCisJTENTX0RCRl9URVhUKDQsIHRyYWNlLCAicmVjb3ZlcjEiKTsKKwlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQorCQlyZXR1cm4gMDsKKwlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJyZWNvdmVyMiIpOworCWdkZXYgPSBjYXJkLT5nZGV2OworCVBSSU5UX1dBUk4oIlJlY292ZXJ5IG9mIGRldmljZSAlcyBzdGFydGVkLi4uXG4iLCBnZGV2LT5kZXYuYnVzX2lkKTsKKwlyYyA9IF9fbGNzX3NodXRkb3duX2RldmljZShnZGV2LCAxKTsKKwlyYyA9IGxjc19uZXdfZGV2aWNlKGdkZXYpOworCWlmICghcmMpCisJCVBSSU5UX0lORk8oIkRldmljZSAlcyBzdWNjZXNzZnVsbHkgcmVjb3ZlcmVkIVxuIiwKKwkJCQljYXJkLT5kZXYtPm5hbWUpOworCWVsc2UKKwkJUFJJTlRfSU5GTygiRGV2aWNlICVzIGNvdWxkIG5vdCBiZSByZWNvdmVyZWQhXG4iLAorCQkJCWNhcmQtPmRldi0+bmFtZSk7CisJbGNzX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBMQ1NfUkVDT1ZFUllfVEhSRUFEKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBsY3NfcmVtb3ZlX2RldmljZSwgZnJlZSBidWZmZXJzIGFuZCBjYXJkCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmggYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5oCmluZGV4IDJmYWQ1ZTQuLjkzMTQzOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuaApAQCAtNzMsMTMgKzczLDE3IEBACiAvKioKICAqIExDUyBzZW5zZSBieXRlIGRlZmluaXRpb25zCiAgKi8KKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMCAJCTAKKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMSAJCTEKKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMiAJCTIKKyNkZWZpbmUgTENTX1NFTlNFX0JZVEVfMyAJCTMKICNkZWZpbmUgTENTX1NFTlNFX0lOVEVSRkFDRV9ESVNDT05ORUNUCTB4MDEKICNkZWZpbmUgTENTX1NFTlNFX0VRVUlQTUVOVF9DSEVDSwkweDEwCiAjZGVmaW5lIExDU19TRU5TRV9CVVNfT1VUX0NIRUNLCQkweDIwCiAjZGVmaW5lIExDU19TRU5TRV9JTlRFUlZFTlRJT05fUkVRVUlSRUQgMHg0MAogI2RlZmluZSBMQ1NfU0VOU0VfQ01EX1JFSkVDVAkJMHg4MAotI2RlZmluZSBMQ1NfU0VOU0VfUkVTRVRUSU5HX0VWRU5UCTB4MDA4MAotI2RlZmluZSBMQ1NfU0VOU0VfREVWSUNFX09OTElORQkJMHgwMDIwCisjZGVmaW5lIExDU19TRU5TRV9SRVNFVFRJTkdfRVZFTlQJMHg4MAorI2RlZmluZSBMQ1NfU0VOU0VfREVWSUNFX09OTElORQkJMHgyMAogCiAvKioKICAqIExDUyBwYWNrZXQgdHlwZSBkZWZpbml0aW9ucwpAQCAtMTUyLDEwICsxNTYsOSBAQAogCiBlbnVtIGxjc190aHJlYWRzIHsKIAlMQ1NfU0VUX01DX1RIUkVBRCAJPSAxLAotCUxDU19TVEFSVExBTl9USFJFQUQJPSAyLAotCUxDU19TVE9QTEFOX1RIUkVBRAk9IDQsCi0JTENTX1NUQVJUVVBfVEhSRUFECT0gOCwKKwlMQ1NfUkVDT1ZFUllfVEhSRUFEIAk9IDIsCiB9OworCiAvKioKICAqIExDUyBzdHJ1Y3QgZGVjbGFyYXRpb25zCiAgKi8KQEAgLTI4Niw2ICsyODksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIHNob3J0ICgqbGFuX3R5cGVfdHJhbnMpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2OwogCXN0cnVjdCBsY3NfY2hhbm5lbCByZWFkOwogCXN0cnVjdCBsY3NfY2hhbm5lbCB3cml0ZTsKIAlzdHJ1Y3QgbGNzX2J1ZmZlciAqdHhfYnVmZmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCAyNjBhOTNjLi5iNDUyY2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMzAsNyArMzAsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKgogICovCi0MCisKICN1bmRlZiBERUJVRwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgKCIoQykgMjAwMSBJQk0gQ29ycG9yYXRpb24gYnkgRnJpdHogRWxmZXJ0IChmZWxmZXJ0QG1pbGxlbnV4LmNvbSkiKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIkxpbnV4IGZvciBTLzM5MCBJVUNWIG5ldHdvcmsgZHJpdmVyIik7CiAKLQwKKwogI2RlZmluZSBQUklOVEtfSEVBREVSICIgaXVjdjogIiAgICAgICAvKiBmb3IgZGVidWdnaW5nICovCiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBuZXRpdWN2X2RyaXZlciA9IHsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCSpwID0gJ1wwJzsKIAlyZXR1cm4gdG1wOwogfQotDAorCiAvKioKICAqIFN0YXRlcyBvZiB0aGUgaW50ZXJmYWNlIHN0YXRlbWFjaGluZS4KICAqLwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJIkNvbm5lY3Rpb24gdXAiLAogCSJDb25uZWN0aW9uIGRvd24iLAogfTsKLQwKKwogLyoqCiAgKiBFdmVudHMgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGVtYWNoaW5lCiAgKi8KQEAgLTM2NCw3ICszNjQsNyBAQAogCSJDb25uZWN0IGVycm9yIiwKIH07CiAKLQwKKwogLyoqCiAgKiBEZWJ1ZyBGYWNpbGl0eSBTdHVmZgogICovCkBAIC01MTYsNyArNTE2LDcgQEAKIGZzbV9hY3Rpb25fbm9wKGZzbV9pbnN0YW5jZSAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogfQotDAorCiAvKioKICAqIEFjdGlvbnMgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGVtYWNoaW5lCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05OTMsNyArOTkzLDcgQEAKIAogc3RhdGljIGNvbnN0IGludCBDT05OX0ZTTV9MRU4gPSBzaXplb2YoY29ubl9mc20pIC8gc2l6ZW9mKGZzbV9ub2RlKTsKIAotDAorCiAvKioKICAqIEFjdGlvbnMgZm9yIGludGVyZmFjZSAtIHN0YXRlbWFjaGluZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExODIsNyArMTE4Miw3IEBACiAKIAkJZnNtX25ld3N0YXRlKGNvbm4tPmZzbSwgQ09OTl9TVEFURV9UWCk7CiAJCWNvbm4tPnByb2Yuc2VuZF9zdGFtcCA9IHh0aW1lOwotCQkKKwogCQlyYyA9IGl1Y3Zfc2VuZChjb25uLT5wYXRoaWQsIE5VTEwsIDAsIDAsIDEgLyogc2luZ2xlX2ZsYWcgKi8sCiAJCQkwLCBuc2tiLT5kYXRhLCBuc2tiLT5sZW4pOwogCQkJICAgICAgIC8qIFNodXQgdXAsIGdjYyEgbnNrYiBpcyBhbHdheXMgYmVsb3cgMkcuICovCkBAIC0xMjIwLDcgKzEyMjAsNyBAQAogCiAJcmV0dXJuIHJjOwogfQotDAorCiAvKioKICAqIEludGVyZmFjZSBBUEkgZm9yIHVwcGVyIG5ldHdvcmsgbGF5ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogCiAJLyoqCiAJICogSWYgY29ubmVjdGlvbiBpcyBub3QgcnVubmluZywgdHJ5IHRvIHJlc3RhcnQgaXQKLQkgKiBhbmQgdGhyb3cgYXdheSBwYWNrZXQuIAorCSAqIGFuZCB0aHJvdyBhd2F5IHBhY2tldC4KIAkgKi8KIAlpZiAoZnNtX2dldHN0YXRlKHByaXZwdHItPmZzbSkgIT0gREVWX1NUQVRFX1JVTk5JTkcpIHsKIAkJZnNtX2V2ZW50KHByaXZwdHItPmZzbSwgREVWX0VWRU5UX1NUQVJULCBkZXYpOwpAQCAtMTUzOCw3ICsxNTM4LDcgQEAKIG1heGNxX3dyaXRlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKLQkKKwogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi5tYXhjcXVldWUgPSAwOwogCXJldHVybiBjb3VudDsKQEAgLTE1NTksNyArMTU1OSw3IEBACiBzZG9pb193cml0ZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdiA9IGRldi0+ZHJpdmVyX2RhdGE7Ci0JCisKIAlJVUNWX0RCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwogCXByaXYtPmNvbm4tPnByb2YuZG9pb3Nfc2luZ2xlID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNTgwLDcgKzE1ODAsNyBAQAogbWRvaW9fd3JpdGUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCQorCiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKIAlwcml2LT5jb25uLT5wcm9mLmRvaW9zX211bHRpID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQAogdHhsZW5fd3JpdGUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSBkZXYtPmRyaXZlcl9kYXRhOwotCQorCiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgNCwgX19GVU5DVElPTl9fKTsKIAlwcml2LT5jb25uLT5wcm9mLnR4bGVuID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNjIyLDcgKzE2MjIsNyBAQAogdHh0aW1lX3dyaXRlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gZGV2LT5kcml2ZXJfZGF0YTsKLQkKKwogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDQsIF9fRlVOQ1RJT05fXyk7CiAJcHJpdi0+Y29ubi0+cHJvZi50eF90aW1lID0gMDsKIAlyZXR1cm4gY291bnQ7CkBAIC0yMDAwLDcgKzIwMDAsNyBAQAogCX0KIAogCVBSSU5UX0lORk8oIiVzOiAnJXMnXG4iLCBkZXYtPm5hbWUsIG5ldGl1Y3ZfcHJpbnRuYW1lKHVzZXJuYW1lKSk7Ci0JCisKIAlyZXR1cm4gY291bnQ7CiAKIG91dF9mcmVlX25kZXY6CkBAIC0yMDk5LDcgKzIwOTksNyBAQAogbmV0aXVjdl9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQkKKwogCXJldCA9IGl1Y3ZfcmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CiAJaWYgKHJldCkgewogCQlQUklOVF9XQVJOKCJuZXRpdWN2X2luaXQgZmFpbGVkLCAiCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQotCQorCiBtb2R1bGVfaW5pdChuZXRpdWN2X2luaXQpOwogbW9kdWxlX2V4aXQobmV0aXVjdl9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKaW5kZXggNGRmMGZjZC4uNjE5ZjRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKQEAgLTM3Niw3ICszNzYsNyBAQAogCV9fdTggcmVzZXJ2ZWQzWzE4XTsKIAlfX3UzMiBjY2lkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0JCQkJCSAgICAKKwogc3RydWN0IHFldGhfaGRyIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCBxZXRoX2hkcl9sYXllcjIgbDI7CkBAIC04MjUsNyArODI1LDcgQEAKIAlpbnQgdXNlX2hhcmRfc3RvcDsKIAlpbnQgKCpvcmlnX2hhcmRfaGVhZGVyKShzdHJ1Y3Qgc2tfYnVmZiAqLHN0cnVjdCBuZXRfZGV2aWNlICosCiAJCQkJdW5zaWduZWQgc2hvcnQsdm9pZCAqLHZvaWQgKix1bnNpZ25lZCk7Ci0Jc3RydWN0IHFldGhfb3NuX2luZm8gb3NuX2luZm87IAorCXN0cnVjdCBxZXRoX29zbl9pbmZvIG9zbl9pbmZvOwogfTsKIAogc3RydWN0IHFldGhfY2FyZF9saXN0X3N0cnVjdCB7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAkJcmV0dXJuIDA7CiAJc3dpdGNoIChjYXJkLT5pbmZvLnR5cGUpIHsKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoJCisJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CiAJCXJldHVybiBJRkZfTk9BUlA7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogCWRlZmF1bHQ6CkBAIC05ODEsNyArOTgxLDcgQEAKIHFldGhfZ2V0X21heF9tdHVfZm9yX2NhcmQoaW50IGNhcmR0eXBlKQogewogCXN3aXRjaCAoY2FyZHR5cGUpIHsKLQkJCisKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX1VOS05PV046CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0FFOgogCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgpAQCAtMTA5Nyw5ICsxMDk3LDkgQEAKIAlpbnQgY291bnQgPSAwLCByYyA9IDA7CiAJaW50IGluWzRdOwogCi0JcmMgPSBzc2NhbmYoYnVmLCAiJWQuJWQuJWQuJWQlbiIsIAorCXJjID0gc3NjYW5mKGJ1ZiwgIiVkLiVkLiVkLiVkJW4iLAogCQkgICAgJmluWzBdLCAmaW5bMV0sICZpblsyXSwgJmluWzNdLCAmY291bnQpOwotCWlmIChyYyAhPSA0ICB8fCBjb3VudCkgCisJaWYgKHJjICE9IDQgIHx8IGNvdW50PD0wKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCA0OyBjb3VudCsrKSB7CiAJCWlmIChpbltjb3VudF0gPiAyNTUpCkBAIC0xMTMxLDcgKzExMzEsNyBAQAogCiAJY250ID0gb3V0ID0gZm91bmQgPSBzYXZlX2NudCA9IG51bTIgPSAwOwogICAgICAgICBlbmQgPSBzdGFydCA9IChjaGFyICopIGJ1ZjsKLQlpbiA9IChfX3UxNiAqKSBhZGRyOwkKKwlpbiA9IChfX3UxNiAqKSBhZGRyOwogCW1lbXNldChpbiwgMCwgMTYpOwogICAgICAgICB3aGlsZSAoZW5kKSB7CiAgICAgICAgICAgICAgICAgZW5kID0gc3RyY2hyKGVuZCwnOicpOwpAQCAtMTEzOSw3ICsxMTM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IChjaGFyICopYnVmICsgKHN0cmxlbihidWYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IDE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoZW5kIC0gc3RhcnQpKSB7IAorICAgICAgICAgICAgICAgIGlmICgoZW5kIC0gc3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQobnVtLCAwLCA1KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShudW0sIHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAJCQlpZiAoIXFldGhfaXN4ZGlnaXQobnVtKSkKQEAgLTEyNDEsNSArMTI0MSw1IEBACiAKIGV4dGVybiB2b2lkCiBxZXRoX29zbl9kZXJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICopOwotCQkKKwogI2VuZGlmIC8qIF9fUUVUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCmluZGV4IDQ0ZTIyNmYuLjBiYWI2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYwpAQCAtODEsNyArODEsNyBAQAogcWV0aF9lZGRwX2J1Zl9yZWxlYXNlX2NvbnRleHRzKHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dF9yZWZlcmVuY2UgKnJlZjsKLQkKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJlZGRwcmN0eCIpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5jdHhfbGlzdCkpewogCQlyZWYgPSBsaXN0X2VudHJ5KGJ1Zi0+Y3R4X2xpc3QubmV4dCwKQEAgLTEzNSw3ICsxMzUsNyBAQAogCQkJCQkgICAiYnVmZmVyIVxuIik7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCX0JCQorCQl9CiAJCS8qIGNoZWNrIGlmIHRoZSB3aG9sZSBuZXh0IHNrYiBmaXRzIGludG8gY3VycmVudCBidWZmZXIgKi8KIAkJaWYgKChRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpIC0KIAkJCQkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCkKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQkJICogYW5kIGluY3JlbWVudCBjdHgncyByZWZjbnQgKi8KIAkJCW11c3RfcmVmY250ID0gMTsKIAkJCWNvbnRpbnVlOwotCQl9CQorCQl9CiAJCWlmIChtdXN0X3JlZmNudCl7CiAJCQltdXN0X3JlZmNudCA9IDA7CiAJCQlpZiAocWV0aF9lZGRwX2J1Zl9yZWZfY29udGV4dChidWYsIGN0eCkpewpAQCAtMjY2LDcgKzI2Niw3IEBACiAJaW50IGxlZnRfaW5fZnJhZzsKIAlpbnQgY29weV9sZW47CiAJdTggKnNyYzsKLQkKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwY2R0YyIpOwogCWlmIChza2Jfc2hpbmZvKGVkZHAtPnNrYiktPm5yX2ZyYWdzID09IDApIHsKIAkJbWVtY3B5KGRzdCwgZWRkcC0+c2tiLT5kYXRhICsgZWRkcC0+c2tiX29mZnNldCwgbGVuKTsKQEAgLTQwOCw3ICs0MDgsNyBAQAogCXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiAJaW50IGRhdGFfbGVuOwogCXUzMiBoY3N1bTsKLQkKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwZnRjcCIpOwogCWVkZHAtPnNrYl9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArIGVkZHAtPm5obCArIGVkZHAtPnRobDsKICAgICAgICBpZiAoZWRkcC0+cWguaGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKSB7CkBAIC00NjUsMTMgKzQ2NSwxMyBAQAogCQllZGRwLT50aC50Y3AuaC5zZXEgKz0gZGF0YV9sZW47CiAJfQogfQotCQkJICAgCisKIHN0YXRpYyBpbmxpbmUgaW50CiBxZXRoX2VkZHBfZmlsbF9jb250ZXh0X3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKIAkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxZXRoX2hkciAqcWhkcikKIHsKIAlzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAgPSBOVUxMOwotCQorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBmaWN4Iik7CiAJLyogY3JlYXRlIG91ciBzZWdtZW50YXRpb24gaGVhZGVycyBhbmQgY29weSBvcmlnaW5hbCBoZWFkZXJzICovCiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApCkBAIC01MTIsNyArNTEyLDcgQEAKIAkJCSBpbnQgaGRyX2xlbikKIHsKIAlpbnQgc2tic19wZXJfcGFnZTsKLQkKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwY2FucCIpOwogCS8qIGNhbiB3ZSBwdXQgbXVsdGlwbGUgc2ticyBpbiBvbmUgcGFnZT8gKi8KIAlza2JzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gKHNrYl9zaGluZm8oc2tiKS0+dHNvX3NpemUgKyBoZHJfbGVuKTsKQEAgLTU4OCw3ICs1ODgsNyBAQAogCQkJICAgICBzdHJ1Y3QgcWV0aF9oZHIgKnFoZHIpCiB7CiAJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwotCQorCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImNyZWRkcGN0Iik7CiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApCiAJCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9mcy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2ZzLmgKaW5kZXggZTQyMmI0MS4uNjFmYWYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2ZzLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2ZzLmgKQEAgLTQyLDcgKzQyLDcgQEAKIAogZXh0ZXJuIHZvaWQKIHFldGhfcmVtb3ZlX2RldmljZV9hdHRyaWJ1dGVzX29zbihzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCQkgICAgCisKIGV4dGVybiBpbnQKIHFldGhfY3JlYXRlX2RyaXZlcl9hdHRyaWJ1dGVzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwppbmRleCBjYjE0NjQyLi45ZTY3MWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogCiAJUUVUSF9EQkZfVEVYVChzZXR1cCwgMywgInNldG9mZmwiKTsKIAlRRVRIX0RCRl9IRVgoc2V0dXAsIDMsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7Ci0JCisKIAlpZiAoY2FyZC0+ZGV2ICYmIG5ldGlmX2NhcnJpZXJfb2soY2FyZC0+ZGV2KSkKIAkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKQEAgLTYwNCwxMyArNjA0LDEzIEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGRyLCAmY2FyZC0+aXBfbGlzdCwgZW50cnkpIHsKIAkJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CiAJCQlpZiAoKGFkZHItPnR5cGUgPT0gdG9kby0+dHlwZSkgJiYKLQkJCSAgICAobWVtY21wKCZhZGRyLT5tYWMsICZ0b2RvLT5tYWMsIAorCQkJICAgIChtZW1jbXAoJmFkZHItPm1hYywgJnRvZG8tPm1hYywKIAkJCQkgICAgT1NBX0FERFJfTEVOKSA9PSAwKSkgewogCQkJCWZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWNvbnRpbnVlOwotCQl9IAorCQl9CiAJCWlmICgoYWRkci0+cHJvdG8gICAgID09IFFFVEhfUFJPVF9JUFY0KSAgJiYKIAkJICAgICh0b2RvLT5wcm90byAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAmJgogCQkgICAgKGFkZHItPnR5cGUgICAgICA9PSB0b2RvLT50eXBlKSAgICAgICYmCkBAIC02OTQsMTMgKzY5NCwxMyBAQAogCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKIAkJCWlmICgodG1wLT50eXBlCT09IGFkZHItPnR5cGUpCSYmCiAJCQkgICAgKHRtcC0+aXNfbXVsdGljYXN0ID09IGFkZHItPmlzX211bHRpY2FzdCkgJiYKLQkJCSAgICAobWVtY21wKCZ0bXAtPm1hYywgJmFkZHItPm1hYywgCisJCQkgICAgKG1lbWNtcCgmdG1wLT5tYWMsICZhZGRyLT5tYWMsCiAJCQkJICAgIE9TQV9BRERSX0xFTikgPT0gMCkpIHsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljb250aW51ZTsKLQkJfSAJIAorCQl9CiAJCWlmICgodG1wLT5wcm90byAgICAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAgICAmJgogCQkgICAgKGFkZHItPnByb3RvICAgICAgID09IFFFVEhfUFJPVF9JUFY0KSAgICAgJiYKIAkJICAgICh0bXAtPnR5cGUgICAgICAgICA9PSBhZGRyLT50eXBlKSAgICAgICAgICYmCkBAIC0xMTczLDcgKzExNzMsNyBAQAogCQkJCQkgICAiZHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb25zIVxuIik7CiAJCQkJY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID0gMTsKIAkJCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gMDsKLQkJCX0gCisJCQl9CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpKys7CkBAIC0xMTk4LDcgKzExOTgsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiJXMiLCBnZGV2LT5kZXYuYnVzX2lkKTsKLQkKKwogCWNhcmQgPSBxZXRoX2FsbG9jX2NhcmQoKTsKIAlpZiAoIWNhcmQpIHsKIAkJcHV0X2RldmljZShkZXYpOwpAQCAtMTIyMCw3ICsxMjIwLDcgQEAKIAkJcHV0X2RldmljZShkZXYpOwogCQlxZXRoX2ZyZWVfY2FyZChjYXJkKTsKIAkJcmV0dXJuIHJjOwotCX0JCQkgICAgCisJfQogCWlmICgocmMgPSBxZXRoX3NldHVwX2NhcmQoY2FyZCkpKXsKIAkJUUVUSF9EQkZfVEVYVF8oc2V0dXAsIDIsICIyZXJyJWQiLCByYyk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKQEAgLTE4NDMsNyArMTg0Myw3IEBACiAJICAgICAgICZjYXJkLT5zZXFuby5wZHVfaGRyX2FjaywgUUVUSF9TRVFfTk9fTEVOR1RIKTsKIAlRRVRIX0RCRl9IRVgoY29udHJvbCwgMiwgaW9iLT5kYXRhLCBRRVRIX0RCRl9DT05UUk9MX0xFTik7CiB9Ci0JCQkJCQkgICAgCisKIHN0YXRpYyBpbnQKIHFldGhfc2VuZF9jb250cm9sX2RhdGEoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IGxlbiwKIAkJICAgICAgIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKQEAgLTE5MzcsNyArMTkzNyw3IEBACiAJCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7CiAJfQogCXJldHVybiByYzsKLX0JCQkJCQorfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIHFldGhfcHJlcGFyZV9pcGFfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKQEAgLTE5NjYsNyArMTk2Niw3IEBACiAJbWVtY3B5KFFFVEhfSVBBX1BEVV9MRU5fUERVMyhpb2ItPmRhdGEpLCAmczIsIDIpOwogCXJldHVybiBxZXRoX29zbl9zZW5kX2NvbnRyb2xfZGF0YShjYXJkLCBzMSwgaW9iKTsKIH0KLQkJCQkJCQkgICAgCisKIHN0YXRpYyBpbnQKIHFldGhfc2VuZF9pcGFfY21kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYiwKIAkJICBpbnQgKCpyZXBseV9jYikKQEAgLTI1NzksNyArMjU3OSw3IEBACiAJCXNrYi0+ZGV2ID0gY2FyZC0+ZGV2OwogCQlpZiAoaGRyLT5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpCiAJCQl2bGFuX3RhZyA9IHFldGhfbGF5ZXIyX3JlYnVpbGRfc2tiKGNhcmQsIHNrYiwgaGRyKTsKLQkJZWxzZSBpZiAoaGRyLT5oZHIubDMuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjMpICAgICAKKwkJZWxzZSBpZiAoaGRyLT5oZHIubDMuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjMpCiAJCQlxZXRoX3JlYnVpbGRfc2tiKGNhcmQsIHNrYiwgaGRyKTsKIAkJZWxzZSB7IC8qaW4gY2FzZSBvZiBPU04qLwogCQkJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7CkBAIC0yNzYzLDcgKzI3NjMsNyBAQAogCQlpbmRleCA9IGkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogCQlidWZmZXIgPSAmY2FyZC0+cWRpby5pbl9xLT5idWZzW2luZGV4XTsKIAkJaWYgKCEoKHN0YXR1cyAmIFFESU9fU1RBVFVTX0xPT0tfRk9SX0VSUk9SKSAmJgotCQkgICAgICBxZXRoX2NoZWNrX3FkaW9fZXJyb3JzKGJ1ZmZlci0+YnVmZmVyLCAKKwkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwKIAkJCQkJICAgICBxZGlvX2Vyciwgc2lnYV9lcnIsInFpbmVyciIpKSkKIAkJCXFldGhfcHJvY2Vzc19pbmJvdW5kX2J1ZmZlcihjYXJkLCBidWZmZXIsIGluZGV4KTsKIAkJLyogY2xlYXIgYnVmZmVyIGFuZCBnaXZlIGJhY2sgdG8gaGFyZHdhcmUgKi8KQEAgLTMxODcsNyArMzE4Nyw3IEBACiAJaWYgKGNhcmQtPnFkaW8uc3RhdGUgPT0gUUVUSF9RRElPX0FMTE9DQVRFRCkKIAkJcmV0dXJuIDA7CiAKLQljYXJkLT5xZGlvLmluX3EgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX3EpLCAKKwljYXJkLT5xZGlvLmluX3EgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX3EpLAogCQkJCSAgR0ZQX0tFUk5FTHxHRlBfRE1BKTsKIAlpZiAoIWNhcmQtPnFkaW8uaW5fcSkKIAkJcmV0dXJuIC0gRU5PTUVNOwpAQCAtMzQ3Niw3ICszNDc2LDcgQEAKIAlyYzMgPSBxZXRoX2hhbHRfY2hhbm5lbCgmY2FyZC0+ZGF0YSk7CiAJaWYgKHJjMSkKIAkJcmV0dXJuIHJjMTsKLQlpZiAocmMyKSAKKwlpZiAocmMyKQogCQlyZXR1cm4gcmMyOwogCXJldHVybiByYzM7CiB9CkBAIC0zNDkxLDcgKzM0OTEsNyBAQAogCXJjMyA9IHFldGhfY2xlYXJfY2hhbm5lbCgmY2FyZC0+ZGF0YSk7CiAJaWYgKHJjMSkKIAkJcmV0dXJuIHJjMTsKLQlpZiAocmMyKSAKKwlpZiAocmMyKQogCQlyZXR1cm4gcmMyOwogCXJldHVybiByYzM7CiB9CkBAIC0zNzk4LDEwICszNzk4LDEwIEBACiAJCVFFVEhfREJGX1RFWFQodHJhY2UsNCwibm9tYWNhZHIiKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9Ci0JY2FyZC0+ZGV2LT5mbGFncyB8PSBJRkZfVVA7Ci0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAljYXJkLT5kYXRhLnN0YXRlID0gQ0hfU1RBVEVfVVA7CiAJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1VQOworCWNhcmQtPmRldi0+ZmxhZ3MgfD0gSUZGX1VQOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKIAlpZiAoIWNhcmQtPmxhbl9vbmxpbmUgJiYgbmV0aWZfY2Fycmllcl9vayhkZXYpKQogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwpAQCAtMzgxNyw3ICszODE3LDcgQEAKIAogCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBkZXYtPnByaXY7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwogCWNhcmQtPmRldi0+ZmxhZ3MgJj0gfklGRl9VUDsKIAlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkKIAkJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1NPRlRTRVRVUDsKQEAgLTM5NTgsNyArMzk1OCw3IEBACiAjZW5kaWYKIAkqaGRyID0gKHN0cnVjdCBxZXRoX2hkciAqKQogCQlxZXRoX3B1c2hfc2tiKGNhcmQsIHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotCWlmIChoZHIgPT0gTlVMTCkKKwlpZiAoKmhkciA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTQwOTgsNyArNDA5OCw3IEBACiAJCX0KIAl9IGVsc2UgeyAvKiBwYXNzdGhyb3VnaCAqLwogICAgICAgICAgICAgICAgIGlmKChza2ItPmRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMl9UUikgJiYKLQkJICAgICFtZW1jbXAoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyAKKwkJICAgICFtZW1jbXAoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKwogCQkgICAgc2l6ZW9mKF9fdTE2KSwgc2tiLT5kZXYtPmJyb2FkY2FzdCwgNikpIHsKIAkJCWhkci0+aGRyLmwzLmZsYWdzID0gUUVUSF9DQVNUX0JST0FEQ0FTVCB8CiAJCQkJCQlRRVRIX0hEUl9QQVNTVEhSVTsKQEAgLTQzODUsNyArNDM4NSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB2b2lkICpoZHIsIAorcWV0aF9nZXRfZWxlbWVudHNfbm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgdm9pZCAqaGRyLAogCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBlbGVtcykKIHsKIAlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKQEAgLTQ0MTYsNiArNDQxNiw4IEBACiAJZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgbGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKIAlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CiAJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47CisJdW5zaWduZWQgc2hvcnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXVuc2lnbmVkIHNob3J0IHRzb19zaXplID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKIAlpbnQgcmM7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAic2VuZHBrdCIpOwpAQCAtNDQ0MSw3ICs0NDQzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCWNhc3RfdHlwZSA9IHFldGhfZ2V0X2Nhc3RfdHlwZShjYXJkLCBza2IpOwotCWlmICgoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpICYmIAorCWlmICgoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpICYmCiAJICAgIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID09IDApKXsKIAkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKQEAgLTQ0NjMsNyArNDQ2NSw3IEBACiAJCQljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQl9IAorCQl9CiAJCWVsZW1lbnRzX25lZWRlZCsrOwogCX0gZWxzZSB7CiAJCWlmICgocmMgPSBxZXRoX3ByZXBhcmVfc2tiKGNhcmQsICZza2IsICZoZHIsIGlwdikpKSB7CkBAIC00NDk4LDE2ICs0NTAwLDE2IEBACiAJCWNhcmQtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJY2FyZC0+c3RhdHMudHhfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAjaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwotCQlpZiAoc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSAmJgorCQlpZiAodHNvX3NpemUgJiYKIAkJICAgIShsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykpIHsKLQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9ieXRlcyArPSB0eF9ieXRlczsKIAkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKIAkJfQotIAkJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPiAwKXsKKyAJCWlmIChucl9mcmFncyA+IDApewogCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19za2JzX3NlbnQrKzsKIAkJCS8qIG5yX2ZyYWdzICsgc2tiLT5kYXRhICovCiAJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3NlbnQgKz0KLQkJCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKwkJCQlucl9mcmFncyArIDE7CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTICovCiAJfQpAQCAtNTM3Myw3ICs1Mzc1LDcgQEAKICAgICAgICAgY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKICAgICAgICAgaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7CiAJCVBSSU5UX0VSUigiRXJyb3IgaW4gcHJvY2Vzc2luZyBWTEFOICVpIG9uICVzOiAweCV4LiAiCi0JCQkgICJDb250aW51aW5nXG4iLGNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQsIAorCQkJICAiQ29udGludWluZ1xuIixjbWQtPmRhdGEuc2V0ZGVsdmxhbi52bGFuX2lkLAogCQkJICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CiAJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiTDJWTCU0eCIsIGNtZC0+aGRyLmNvbW1hbmQpOwogCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CkBAIC01MzkzLDcgKzUzOTUsNyBAQAogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgaXBhY21kLCBRRVRIX1BST1RfSVBWNCk7CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogICAgICAgICBjbWQtPmRhdGEuc2V0ZGVsdmxhbi52bGFuX2lkID0gaTsKLQlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCAKKwlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLAogCQkJCSBxZXRoX2xheWVyMl9zZW5kX3NldGRlbHZsYW5fY2IsIE5VTEwpOwogfQogCkBAIC01NDU3LDcgKzU0NTksNyBAQAogICogRXhhbWluZSBoYXJkd2FyZSByZXNwb25zZSB0byBTRVRfUFJPTUlTQ19NT0RFCiAgKi8KIHN0YXRpYyBpbnQKLXFldGhfc2V0YWRwX3Byb21pc2NfbW9kZV9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCAKK3FldGhfc2V0YWRwX3Byb21pc2NfbW9kZV9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAogCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC01NDY4LDEwICs1NDcwLDEwIEBACiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwogCXNldHBhcm1zID0gJihjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zKTsKLQkKKwogICAgICAgICBxZXRoX2RlZmF1bHRfc2V0YWRhcHRlcnBhcm1zX2NiKGNhcmQsIHJlcGx5LCAodW5zaWduZWQgbG9uZyljbWQpOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgeyAKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsNCwicHJtcmMlMi4yeCIsY21kLT5oZHIucmV0dXJuX2NvZGUpOwkKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsKKwkJUUVUSF9EQkZfVEVYVF8odHJhY2UsNCwicHJtcmMlMi4yeCIsY21kLT5oZHIucmV0dXJuX2NvZGUpOwogCQlzZXRwYXJtcy0+ZGF0YS5tb2RlID0gU0VUX1BST01JU0NfTU9ERV9PRkY7CiAJfQogCWNhcmQtPmluZm8ucHJvbWlzY19tb2RlID0gc2V0cGFybXMtPmRhdGEubW9kZTsKQEAgLTU1MTcsNyArNTUxOSw3IEBACiAKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJcmV0dXJuIDsKLQkgCisKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCAzLCAic2V0bXVsdGkiKTsKIAlxZXRoX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CiAJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CkBAIC01NTc1LDcgKzU1NzcsNyBAQAogCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwogCWludCByYzsKLQkKKwogCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJvc25zZG1jIik7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTY1NCw3ICs1NjU2LDcgQEAKIAljYXJkLT5vc25faW5mby5kYXRhX2NiID0gTlVMTDsKIAlyZXR1cm47CiB9Ci0JCQkJCSAgIAorCiBzdGF0aWMgdm9pZAogcWV0aF9kZWxldGVfbWNfYWRkcmVzc2VzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCiB7CkBAIC01ODE4LDcgKzU4MjAsNyBAQAogCXN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXY7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImNoa21jdjYiKTsKLQlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9JUFY2KSkgCisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSVBWNikpCiAJCXJldHVybiA7CiAJaW42X2RldiA9IGluNl9kZXZfZ2V0KGNhcmQtPmRldik7CiAJaWYgKGluNl9kZXYgPT0gTlVMTCkKQEAgLTYzNTksMTIgKzYzNjEsOSBAQAogCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IHFldGhfdmxhbl9yeF9raWxsX3ZpZDsKIAlkZXYtPnZsYW5fcnhfYWRkX3ZpZCA9IHFldGhfdmxhbl9yeF9hZGRfdmlkOwogI2VuZGlmCi0JZGV2LT5oYXJkX2hlYWRlciA9IGNhcmQtPm9yaWdfaGFyZF9oZWFkZXI7CiAJaWYgKHFldGhfZ2V0X25ldGRldl9mbGFncyhjYXJkKSAmIElGRl9OT0FSUCkgewogCQlkZXYtPnJlYnVpbGRfaGVhZGVyID0gTlVMTDsKIAkJZGV2LT5oYXJkX2hlYWRlciA9IE5VTEw7Ci0JCWlmIChjYXJkLT5vcHRpb25zLmZha2VfbGwpCi0JCQlkZXYtPmhhcmRfaGVhZGVyID0gcWV0aF9mYWtlX2hlYWRlcjsKIAkJZGV2LT5oZWFkZXJfY2FjaGVfdXBkYXRlID0gTlVMTDsKIAkJZGV2LT5oYXJkX2hlYWRlcl9jYWNoZSA9IE5VTEw7CiAJfQpAQCAtNjM3Myw2ICs2MzcyLDkgQEAKIAlpZiAoIShjYXJkLT5pbmZvLnVuaXF1ZV9pZCAmIFVOSVFVRV9JRF9OT1RfQllfQ0FSRCkpCiAJCWNhcmQtPmRldi0+ZGV2X2lkID0gY2FyZC0+aW5mby51bmlxdWVfaWQgJiAweGZmZmY7CiAjZW5kaWYKKwlpZiAoY2FyZC0+b3B0aW9ucy5mYWtlX2xsICYmCisJCShxZXRoX2dldF9uZXRkZXZfZmxhZ3MoY2FyZCkgJiBJRkZfTk9BUlApKQorCQkJZGV2LT5oYXJkX2hlYWRlciA9IHFldGhfZmFrZV9oZWFkZXI7CiAJZGV2LT5oYXJkX2hlYWRlcl9wYXJzZSA9IE5VTEw7CiAJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBxZXRoX2xheWVyMl9zZXRfbWFjX2FkZHJlc3M7CiAJZGV2LT5mbGFncyB8PSBxZXRoX2dldF9uZXRkZXZfZmxhZ3MoY2FyZCk7CkBAIC02NDc3LDYgKzY0NzksOSBAQAogCS8qbmV0d29yayBkZXZpY2Ugd2lsbCBiZSByZWNvdmVyZWQqLwogCWlmIChjYXJkLT5kZXYpIHsKIAkJY2FyZC0+ZGV2LT5oYXJkX2hlYWRlciA9IGNhcmQtPm9yaWdfaGFyZF9oZWFkZXI7CisJCWlmIChjYXJkLT5vcHRpb25zLmZha2VfbGwgJiYKKwkJICAgIChxZXRoX2dldF9uZXRkZXZfZmxhZ3MoY2FyZCkgJiBJRkZfTk9BUlApKQorCQkJY2FyZC0+ZGV2LT5oYXJkX2hlYWRlciA9IHFldGhfZmFrZV9oZWFkZXI7CiAJCXJldHVybiAwOwogCX0KIAkvKiBhdCBmaXJzdCBzZXRfb25saW5lIGFsbG9jYXRlIG5ldGRldiAqLwpAQCAtNjU4NCw3ICs2NTg5LDcgQEAKIAogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CiAJaWYgKCFjYXJkLT5vcHRpb25zLmxheWVyMiB8fCBjYXJkLT5pbmZvLmd1ZXN0bGFuIHx8Ci0JICAgICEoY2FyZC0+aW5mby5tYWNfYml0cyAmIFFFVEhfTEFZRVIyX01BQ19SRUFEKSkgewkKKwkgICAgIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFQUQpKSB7CiAJCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLAogCQkgICAgICAgJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5jaGFuZ2VfYWRkci5hZGRyLAogCQkgICAgICAgT1NBX0FERFJfTEVOKTsKQEAgLTcwMzEsMTQgKzcwMzYsMTIgQEAKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsMywic29mdGlwdjYiKTsKIAotCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKIAlyYyA9IHFldGhfc2VuZF9zdGFydGxhbihjYXJkLCBRRVRIX1BST1RfSVBWNik7CiAJaWYgKHJjKSB7CiAJCVBSSU5UX0VSUigiSVB2NiBzdGFydGxhbiBmYWlsZWQgb24gJXNcbiIsCiAJCQkgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwogCQlyZXR1cm4gcmM7CiAJfQotCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIAlyYyA9IHFldGhfcXVlcnlfaXBhc3Npc3RzKGNhcmQsUUVUSF9QUk9UX0lQVjYpOwogCWlmIChyYykgewogCQlQUklOVF9FUlIoIklQdjYgcXVlcnkgaXBhc3Npc3QgZmFpbGVkIG9uICVzXG4iLApAQCAtNzM1Miw3ICs3MzU1LDggQEAKIAkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gdHlwZTsKIAkJcmV0dXJuIDA7CiAJfQotCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKKwlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkKKwkJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOwogCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IHR5cGU7CiAJc3dpdGNoIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpIHsKIAljYXNlIFFFVEhfTEFSR0VfU0VORF9FRERQOgpAQCAtNzM3NCw3ICs3Mzc4LDggQEAKIAkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyk7CiAJCWJyZWFrOwogCX0KLQluZXRpZl93YWtlX3F1ZXVlKGNhcmQtPmRldik7CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCisJCW5ldGlmX3dha2VfcXVldWUoY2FyZC0+ZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTc0MjcsNyArNzQzMiw3IEBACiAJaWYgKChyYyA9IHFldGhfc2V0cm91dGluZ192NihjYXJkKSkpCiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNWVyciVkIiwgcmMpOwogb3V0OgotCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NjcsNyArNzU3Miw3IEBACiAJaWYgKGNhcmQtPnJlYWQuc3RhdGUgPT0gQ0hfU1RBVEVfVVAgJiYKIAkgICAgY2FyZC0+d3JpdGUuc3RhdGUgPT0gQ0hfU1RBVEVfVVAgJiYKIAkgICAgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApKSB7Ci0JCWlmIChyZWNvdmVyeV9tb2RlICYmIAorCQlpZiAocmVjb3ZlcnlfbW9kZSAmJgogCQkgICAgY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgewogCQkJcWV0aF9zdG9wKGNhcmQtPmRldik7CiAJCX0gZWxzZSB7CkBAIC03NzM2LDEwICs3NzQxLDggQEAKIHFldGhfcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCiB7CiAJUUVUSF9EQkZfVEVYVChzZXR1cCwgMywgInJlZ25ldGQiKTsKLQlpZiAoY2FyZC0+ZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1VOSU5JVElBTElaRUQpIHsKLQkJcWV0aF9uZXRkZXZfaW5pdChjYXJkLT5kZXYpOworCWlmIChjYXJkLT5kZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5JTklUSUFMSVpFRCkKIAkJcmV0dXJuIDA7Ci0JfQogCS8qIHN5c2ZzIG1hZ2ljICovCiAJU0VUX05FVERFVl9ERVYoY2FyZC0+ZGV2LCAmY2FyZC0+Z2Rldi0+ZGV2KTsKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGNhcmQtPmRldik7CkBAIC03NzUwLDcgKzc3NTMsNyBAQAogewogCVFFVEhfREJGX1RFWFQoc2V0dXAgLDIsICJzdGFydGFnIik7CiAKLQlpZiAocmVjb3ZlcnlfbW9kZSAmJiAKKwlpZiAocmVjb3ZlcnlfbW9kZSAmJgogCSAgICBjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfT1NOKSB7CiAJCXFldGhfb3BlbihjYXJkLT5kZXYpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKaW5kZXggMDExYzQxMC4uMDQ3N2M0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaApAQCAtNDQ1LDcgKzQ0NSw3IEBACiAvKiBIZWxwZXIgZnVuY3Rpb25zICovCiAjZGVmaW5lIElTX0lQQV9SRVBMWShjbWQpICgoY21kLT5oZHIuaW5pdGlhdG9yID09IElQQV9DTURfSU5JVElBVE9SX0hPU1QpIHx8IFwKIAkJCSAgIChjbWQtPmhkci5pbml0aWF0b3IgPT0gSVBBX0NNRF9JTklUSUFUT1JfT1NBX1JFUExZKSkKLQkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRU5EIE9GICAgSVAgQXNzaXN0IHJlbGF0ZWQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAvKiBMYXllciAyIGRlZmludGlvbnMgKi8KICNkZWZpbmUgUUVUSF9QUk9UX0xBWUVSMiAweDA4CiAjZGVmaW5lIFFFVEhfUFJPVF9UQ1BJUCAgMHgwMwotI2RlZmluZSBRRVRIX1BST1RfT1NOMiAgIDB4MGEgICAgIAorI2RlZmluZSBRRVRIX1BST1RfT1NOMiAgIDB4MGEKICNkZWZpbmUgUUVUSF9VTFBfRU5BQkxFX1BST1RfVFlQRShidWZmZXIpIChidWZmZXIrMHg1MCkKICNkZWZpbmUgUUVUSF9JUEFfQ01EX1BST1RfVFlQRShidWZmZXIpIChidWZmZXIrMHgxOSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9wcm9jLmMKaW5kZXggMzYwZDc4Mi4uNjZmMmRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jCkBAIC0zNiw3ICszNiw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKIAlsb2ZmX3QgbnIgPSAwOwotCQorCiAJZG93bl9yZWFkKCZxZXRoX2Njd2dyb3VwX2RyaXZlci5kcml2ZXIuYnVzLT5zdWJzeXMucndzZW0pOwogCWlmICgqb2Zmc2V0ID09IDApCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CkBAIC02MCw4ICs2MCw4IEBACiBxZXRoX3Byb2NmaWxlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQsIGxvZmZfdCAqb2Zmc2V0KQogewogCXN0cnVjdCBkZXZpY2UgKnByZXYsICpuZXh0OwotCQotCWlmIChpdCA9PSBTRVFfU1RBUlRfVE9LRU4pIAorCisJaWYgKGl0ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJcHJldiA9IE5VTEw7CiAJZWxzZQogCQlwcmV2ID0gKHN0cnVjdCBkZXZpY2UgKikgaXQ7CkBAIC0xODAsNyArMTgwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAotCQorCiAJaWYgKGl0ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwppbmRleCA4ODJkNDE5Li4xODVhOWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCkBAIC03ODUsNyArNzg1LDcgQEAKIAl9CiAJaWYgKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9PSB0eXBlKQogCQlyZXR1cm4gY291bnQ7Ci0JaWYgKChyYyA9IHFldGhfc2V0X2xhcmdlX3NlbmQoY2FyZCwgdHlwZSkpKQkKKwlpZiAoKHJjID0gcWV0aF9zZXRfbGFyZ2Vfc2VuZChjYXJkLCB0eXBlKSkpCiAJCXJldHVybiByYzsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xNjgyLDcgKzE2ODIsNyBAQAogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQogCQlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJCSAgJnFldGhfb3NuX2RldmljZV9hdHRyX2dyb3VwKTsKLSAgIAkKKwogCWlmICgocmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKSkpCiAJCXJldHVybiByZXQ7CiAJaWYgKChyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2lwYXRvX2dyb3VwKSkpewpAQCAtMTcxMyw3ICsxNzEzLDcgQEAKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJcmV0dXJuIHN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkgICZxZXRoX29zbl9kZXZpY2VfYXR0cl9ncm91cCk7Ci0JCSAgICAgIAorCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZxZXRoX2RldmljZV9hdHRyX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2lwYXRvX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3ZpcGFfZ3JvdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCmluZGV4IDEyODZkZGUuLjI0ZWY0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKQEAgLTExNywxMSArMTE3LDExIEBACiAJaW50IGZyYWdubzsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJaW50IGVsZW1lbnQsIGNudCwgZGxlbjsKLQkKKwogCWZyYWdubyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJZWxlbWVudCA9ICpuZXh0X2VsZW1lbnRfdG9fZmlsbDsKIAlkbGVuID0gMDsKLQkKKwogCWlmIChpc190c28pCiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9CiAJCQlTQkFMX0ZMQUdTX01JRERMRV9GUkFHOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwppbmRleCBmYTQ3NmU3Li5kZTliYTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwpAQCAtNDI5Nyw2ICs0Mjk3LDggQEAKIGludCBhdGFfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQogewogCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19TVVNQRU5ERUQpIHsKKwkJYXRhX2J1c3lfc2xlZXAoYXAsIEFUQV9UTU9VVF9CT09UX1FVSUNLLCBBVEFfVE1PVVRfQk9PVCk7CisJCWF0YV9idXN5X3dhaXQoYXAsIEFUQV9CVVNZIHwgQVRBX0RSUSwgMjAwMDAwKTsKIAkJYXAtPmZsYWdzICY9IH5BVEFfRkxBR19TVVNQRU5ERUQ7CiAJCWF0YV9zZXRfbW9kZShhcCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BwYS5jIGIvZHJpdmVycy9zY3NpL3BwYS5jCmluZGV4IGZlZTg0M2YuLjEwODkxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wcGEuYworKysgYi9kcml2ZXJzL3Njc2kvcHBhLmMKQEAgLTk4Miw2ICs5ODIsMTIgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAorc3RhdGljIGludCBwcGFfYWRqdXN0X3F1ZXVlKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlKQoreworCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBCTEtfQk9VTkNFX0hJR0gpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwcGFfdGVtcGxhdGUgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCiAJLnByb2NfbmFtZQkJPSAicHBhIiwKQEAgLTk5Nyw2ICsxMDAzLDcgQEAKIAkuY21kX3Blcl9sdW4JCT0gMSwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLmNhbl9xdWV1ZQkJPSAxLAorCS5zbGF2ZV9hbGxvYwkJPSBwcGFfYWRqdXN0X3F1ZXVlLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKaW5kZXggOWI4YmNhMS4uZjE2ZjkyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCkBAIC0yMDM1LDYgKzIwMzUsNyBAQAogc3RhdGljIHZvaWQgbXZfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBFbnRlcmluZyBtdl9lbmdfdGltZW91dFxuIixhcC0+aWQpOwogCURQUklOVEsoIkFsbCByZWdzIEAgc3RhcnQgb2YgZW5nX3RpbWVvdXRcbiIpOwpAQCAtMjA0Niw4ICsyMDQ3LDEwIEBACiAJICAgICAgIGFwLT5ob3N0X3NldC0+bW1pb19iYXNlLCBhcCwgcWMsIHFjLT5zY3NpY21kLAogCSAgICAgICAmcWMtPnNjc2ljbWQtPmNtbmQpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCW12X2Vycl9pbnRyKGFwLCAwKTsKIAltdl9zdG9wX2FuZF9yZXNldChhcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAKIAlXQVJOX09OKCEocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpKTsKIAlpZiAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCmluZGV4IGY3MjY0ZmQuLmNiOTA4MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJICovCiAJbXNsZWVwKDEwKTsKIAotCXByYi0+Y3RybCA9IFBSQl9DVFJMX1NSU1Q7CisJcHJiLT5jdHJsID0gY3B1X3RvX2xlMTYoUFJCX0NUUkxfU1JTVCk7CiAJcHJiLT5maXNbMV0gPSAwOyAvKiBubyBQTSB5ZXQgKi8KIAogCXdyaXRlbCgodTMyKXBhZGRyLCBwb3J0ICsgUE9SVF9DTURfQUNUSVZBVEUpOwpAQCAtNTUxLDkgKzU1MSw5IEBACiAKIAkJaWYgKHFjLT50Zi5wcm90b2NvbCAhPSBBVEFfUFJPVF9BVEFQSV9OT0RBVEEpIHsKIAkJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCi0JCQkJcHJiLT5jdHJsID0gUFJCX0NUUkxfUEFDS0VUX1dSSVRFOworCQkJCXByYi0+Y3RybCA9IGNwdV90b19sZTE2KFBSQl9DVFJMX1BBQ0tFVF9XUklURSk7CiAJCQllbHNlCi0JCQkJcHJiLT5jdHJsID0gUFJCX0NUUkxfUEFDS0VUX1JFQUQ7CisJCQkJcHJiLT5jdHJsID0gY3B1X3RvX2xlMTYoUFJCX0NUUkxfUEFDS0VUX1JFQUQpOwogCQl9IGVsc2UKIAkJCXByYi0+Y3RybCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwppbmRleCA5NDFjMWUxLi42MmY4Y2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCkBAIC0xNjUsNiArMTY1LDcgQEAKIAl7IkhQIiwgIkhTVjEwMCIsIE5VTEwsIEJMSVNUX1JFUE9SVExVTjIgfCBCTElTVF9OT1NUQVJUT05BRER9LAogCXsiSFAiLCAiQzE1NTdBIiwgTlVMTCwgQkxJU1RfRk9SQ0VMVU59LAogCXsiSFAiLCAiQzMzMjMtMzAwIiwgIjQyNjkiLCBCTElTVF9OT1RRfSwKKwl7IkhQIiwgIkM1NzEzQSIsIE5VTEwsIEJMSVNUX05PUkVQT1JUTFVOfSwKIAl7IklCTSIsICJBdVNhVjFTMiIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOfSwKIAl7IklCTSIsICJQcm9GaWJyZSA0MDAwUiIsICIqIiwgQkxJU1RfU1BBUlNFTFVOIHwgQkxJU1RfTEFSR0VMVU59LAogCXsiSUJNIiwgIjIxMDUiLCBOVUxMLCBCTElTVF9SRVRSWV9IV0VSUk9SfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggNzY0YThiMy4uZmFlZTQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQkJICAgaW50IG5zZWdzLCB1bnNpZ25lZCBidWZmbGVuLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKLQlpbnQgbnJfcGFnZXMgPSAoYnVmZmxlbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJaW50IG5yX3BhZ2VzID0gKGJ1ZmZsZW4gKyBzZ2xbMF0ub2Zmc2V0ICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSAwLCBsZW4sIGJ5dGVzLCBvZmY7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCA4YjZkNjVlLi5mM2IxNjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC05NTUsNyArOTU1LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJwaHksICZzYXNfaG9zdC0+cnBoeV9saXN0LCBsaXN0KSB7CiAJCXN0cnVjdCBzYXNfcGh5ICpwYXJlbnQgPSBkZXZfdG9fcGh5KHJwaHktPmRldi5wYXJlbnQpOwogCi0JCWlmIChycGh5LT5zY3NpX3RhcmdldF9pZCA9PSAtMSkKKwkJaWYgKHJwaHktPmlkZW50aWZ5LmRldmljZV90eXBlICE9IFNBU19FTkRfREVWSUNFIHx8CisJCSAgICBycGh5LT5zY3NpX3RhcmdldF9pZCA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgoY2hhbm5lbCA9PSBTQ0FOX1dJTERfQ0FSRCB8fCBjaGFubmVsID09IHBhcmVudC0+cG9ydF9pZGVudGlmaWVyKSAmJgpAQCAtOTc3LDcgKzk3OCw2IEBACiAjZGVmaW5lIFNFVFVQX1RFTVBMQVRFKGF0dHJiLCBmaWVsZCwgcGVybSwgdGVzdCkJCQkJXAogCWktPnByaXZhdGVfIyNhdHRyYltjb3VudF0gPSBjbGFzc19kZXZpY2VfYXR0cl8jI2ZpZWxkOwkJXAogCWktPnByaXZhdGVfIyNhdHRyYltjb3VudF0uYXR0ci5tb2RlID0gcGVybTsJCQlcCi0JaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XS5zdG9yZSA9IE5VTEw7CQkJCVwKIAlpLT5hdHRyYltjb3VudF0gPSAmaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XTsJCQlcCiAJaWYgKHRlc3QpCQkJCQkJCVwKIAkJY291bnQrKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IDk2OWY5NDkuLjVjYmE1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTExNjQsMTQgKzExNjQsMTYgQEAKIAlzdHJ1Y3QgZnNfdWFydF9wbGF0Zm9ybV9pbmZvICpwZGF0YTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBwZGV2ID0gZWFybHlfdWFydF9nZXRfcGRldihjby0+aW5kZXgpOwogCi0JcG9ydCA9Ci0JICAgIChzdHJ1Y3QgdWFydF9wb3J0ICopJmNwbV91YXJ0X3BvcnRzW2NwbV91YXJ0X3BvcnRfbWFwW2NvLT5pbmRleF1dOwotCXBpbmZvID0gKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICopcG9ydDsKIAlpZiAoIXBkZXYpIHsKIAkJcHJfaW5mbygiY3BtX3VhcnQ6IGNvbnNvbGU6IGNvbXBhdCBtb2RlXG4iKTsKIAkJLyogY29tcGF0aWJpbGl0eSAtIHdpbGwgYmUgY2xlYW5lZCB1cCAqLwogCQljcG1fdWFydF9pbml0X3BvcnRkZXNjKCk7CisJfQogCisJcG9ydCA9CisJICAgIChzdHJ1Y3QgdWFydF9wb3J0ICopJmNwbV91YXJ0X3BvcnRzW2NwbV91YXJ0X3BvcnRfbWFwW2NvLT5pbmRleF1dOworCXBpbmZvID0gKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICopcG9ydDsKKwlpZiAoIXBkZXYpIHsKIAkJaWYgKHBpbmZvLT5zZXRfbGluZWlmKQogCQkJcGluZm8tPnNldF9saW5laWYocGluZm8pOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKaW5kZXggNGIyZGUwOC4uY2RiYTEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJICAgIEwxX0NBQ0hFX0FMSUdOKHBpbmZvLT50eF9ucmZpZm9zICogcGluZm8tPnR4X2ZpZm9zaXplKTsKIAlpZiAoaXNfY29uKSB7CiAJCW1lbV9hZGRyID0gYWxsb2NfYm9vdG1lbShtZW1zeik7Ci0JCWRtYV9hZGRyID0gbWVtX2FkZHI7CisJCWRtYV9hZGRyID0gdmlydF90b19idXMobWVtX2FkZHIpOwogCX0KIAllbHNlCiAJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggZjVhYWM5Mi4uNTNjMjQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtMTM2NSw3ICsxMzY1LDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19DUFVfUzNDMjQxMCAqLwogCi0jaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQyKQogCiBzdGF0aWMgaW50IHMzYzI0NDBfc2VyaWFsX3NldHNvdXJjZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAogCQkJCSAgICAgc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgKmNsaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCmluZGV4IGFhNTIxYjguLjc3NmQ0ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpAQCAtMTQ1LDE0ICsxNDUsMTUgQEAKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCogdHR5ID0gcG9ydC0+aW5mby0+dHR5OwogCWludCBjYlJ4TWF4ID0gMjU2OwkvKiAoR3Jvc3MpIGxpbWl0IG9uIHJlY2VpdmUgKi8KLQl1bnNpZ25lZCBpbnQgZGF0YSwgZmxhZzsvKiBSZWNlaXZlZCBkYXRhIGFuZCBzdGF0dXMgKi8KKwl1bnNpZ25lZCBpbnQgZGF0YTsJLyogUmVjZWl2ZWQgZGF0YSBhbmQgc3RhdHVzICovCisJdW5zaWduZWQgaW50IGZsYWc7CiAKIAl3aGlsZSAoIShVUiAocG9ydCwgVUFSVF9SX1NUQVRVUykgJiBuUnhSZHkpICYmIC0tY2JSeE1heCkgewogCQlkYXRhID0gVVIgKHBvcnQsIFVBUlRfUl9EQVRBKTsKIAkJZmxhZyA9IFRUWV9OT1JNQUw7CiAJCSsrcG9ydC0+aWNvdW50LnJ4OwogCi0JCWlmICh1bmxpa2VseShkYXRhICYgUnhFcnJvcikpIHsJLyogUXVpY2sgY2hlY2ssIHNob3J0LWNpcmN1aXQgKi8KKwkJaWYgKHVubGlrZWx5KGRhdGEgJiBSeEVycm9yKSkgewogCQkJaWYgKGRhdGEgJiBSeEJyZWFrKSB7CiAJCQkJZGF0YSAmPSB+KFJ4RnJhbWluZ0Vycm9yIHwgUnhQYXJpdHlFcnJvcik7CiAJCQkJKytwb3J0LT5pY291bnQuYnJrOwpAQCAtMzAzLDcgKzMwNCw3IEBACiAJLyogTm90ZSwga2VybmVsIGFwcGVhcnMgdG8gYmUgc2V0dGluZyBEVFIgYW5kIFJUUyBvbiBjb25zb2xlLiAqLwogCiAJLyogKioqIEZJWE1FOiB0aGlzIGRlc2VydmVzIG1vcmUgd29yay4gIFRoZXJlJ3Mgc29tZSB3b3JrIGluCi0gICAgICAgICAgICAgICB0cmFjaW5nIGFsbCBvZiB0aGUgSU8gcGlucy4gKi8KKwkgICAgICAgdHJhY2luZyBhbGwgb2YgdGhlIElPIHBpbnMuICovCiAjaWYgMAogCWlmKCBwb3J0LT5tYXBiYXNlID09IFVBUlQxX1BIWVMpIHsKIAkJZ3Bpb1JlZ3NfdCAqZ3BpbyA9IChncGlvUmVnc190ICopSU9fQUREUkVTUyhHUElPX1BIWVMpOwpAQCAtNjYyLDkgKzY2MywxMyBAQAogCWlmIChyZXQgPT0gMCkgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgREVWX05SOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBERVZfTlI7IGkrKykgeworCQkJLyogVUFSVDMsIHdoZW4gdXNlZCwgcmVxdWlyZXMgR1BJTyBwaW4gcmVhbGxvY2F0aW9uICovCisJCQlpZiAobGg3YTQweF9wb3J0c1tpXS5wb3J0Lm1hcGJhc2UgPT0gVUFSVDNfUEhZUykKKwkJCQlHUElPX1BJTk1VWCB8PSAxPDwzOwogCQkJdWFydF9hZGRfb25lX3BvcnQgKCZsaDdhNDB4X3JlZywKIAkJCQkJICAgJmxoN2E0MHhfcG9ydHNbaV0ucG9ydCk7CisJCX0KIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCmluZGV4IDlkZTRiNWEuLjVmYzE0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwpAQCAtNDA1LDcgKzQwNSw3IEBACiAKIHN0YXRpYyBpbnQgczNjMjR4eF9zcGlfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQogewotCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWNsa19kaXNhYmxlKGh3LT5jbGspOwogCXJldHVybiAwOwpAQCAtNDEzLDcgKzQxMyw3IEBACiAKIHN0YXRpYyBpbnQgczNjMjR4eF9zcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJY2xrX2VuYWJsZShody0+Y2xrKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBhY2RlODg2Li5mYWZlN2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0xODUsNiArMTg1LDkgQEAKIAkvKiBTZWxlY3QgUG93ZXIgTWFuYWdlbWVudCBNb2RlICovCiAJcHhhMjd4X29oY2lfc2VsZWN0X3BtbShpbmYtPnBvcnRfbW9kZSk7CiAKKwlpZiAoaW5mLT5wb3dlcl9idWRnZXQpCisJCWhjZC0+cG93ZXJfYnVkZ2V0ID0gaW5mLT5wb3dlcl9idWRnZXQ7CisKIAlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOwogCiAJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnIGIvZHJpdmVycy91c2IvbmV0L0tjb25maWcKaW5kZXggZWZkNmNhNy4uMDU0MDU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbmV0L0tjb25maWcKQEAgLTMwMSwyMSArMzAxLDQgQEAKIAkgIHNvbWUgY2FzZXMgQ0RDIE1ETE0pIHByb3RvY29sLCBub3QgImdfZXRoZXIiLgogCiAKLWNvbmZpZyBVU0JfWkQxMjAxCi0JdHJpc3RhdGUgIlVTQiBaRDEyMDEgYmFzZWQgV2lyZWxlc3MgZGV2aWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfUkFESU8KLQlzZWxlY3QgRldfTE9BREVSCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIHdpcmVsZXNzIExBTiBhZGFwdGVycyBiYXNlZCBvbiB0aGUgWnlEQVMKLQkgIFpEMTIwMSBjaGlwLgotCi0JICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLAotCSAgdHlwaWNhbGx5IG9uIHdsYW4wLgotCSAgCi0JICBUaGUgemQxMjAxIGRldmljZSByZXF1aXJlcyBleHRlcm5hbCBmaXJtd2FyZSB0byBiZSBsb2FkZWQuCi0JICBUaGlzIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vbGludXgtbGMxMDAwMjAuc291cmNlZm9yZ2UubmV0LwotCSAgCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6ZDEyMDEuCi0KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL25ldC9NYWtlZmlsZQppbmRleCBhMjFlNmVhLi4xNjBmMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvbmV0L01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBACiBvYmotJChDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUKQkrPSBjZGNfc3Vic2V0Lm8KIG9iai0kKENPTkZJR19VU0JfTkVUX1pBVVJVUykJKz0gemF1cnVzLm8KIG9iai0kKENPTkZJR19VU0JfVVNCTkVUKQkrPSB1c2JuZXQubwotb2JqLSQoQ09ORklHX1VTQl9aRDEyMDEpCSs9IHpkMTIwMS5vCiAKIGlmZXEgKCQoQ09ORklHX1VTQl9ERUJVRykseSkKIEVYVFJBX0NGTEFHUyArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNDU4NzA4Ny4uNWEyODQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTY3LDYgKzE2Nyw2OSBAQAogCSAgaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFtYmEtY2xjZC4KIAorY2hvaWNlCisKKwlkZXBlbmRzIG9uIEZCX0FSTUNMQ0QgJiYgKEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0xINzk1MlgpCisJcHJvbXB0ICJMQ0QgUGFuZWwiCisJZGVmYXVsdCBGQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyCisKK2NvbmZpZyBGQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUCisJYm9vbCAiTG9naWNQRCBMQ0QgMy41XCIgUVZHQSB3L0hSVEZUIElDIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMDM1UTdEQjAyLCBhIDMuNSIKKwkgIGNvbG9yIFFWR0EsIEhSVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBhbiBpbnRlZ3JhdGVkIEhSVEZUIGNvbnRyb2xsZXIgSUMuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgMjQweDMyMC4KKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIKKwlib29sICJMb2dpY1BEIExDRCA1LjdcIiBRVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMDU3UTNEQzAyLCBhIDUuNyIKKwkgIGNvbG9yIFFWR0EsIFRGVCBwYW5lbC4gIFRoZSBMb2dpY1BEIGRldmljZSBpbmNsdWRlcyBhbgorCSAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDMyMHgyNDAuCisKK2NvbmZpZyBGQl9BUk1DTENEX1NIQVJQX0xRNjREMzQzCisJYm9vbCAiTG9naWNQRCBMQ0QgNi40XCIgVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRNjREMzQzLCBhIDYuNCIKKwkgIGNvbG9yIFZHQSwgVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgNjQweDQ4MC4KKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFExMEQzNjgKKwlib29sICJMb2dpY1BEIExDRCAxMC40XCIgVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMTBEMzY4LCBhIDEwLjQiCisJICBjb2xvciBWR0EsIFRGVCBwYW5lbC4gIFRoZSBMb2dpY1BEIGRldmljZSBpbmNsdWRlcyBhbgorCSAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDY0MHg0ODAuCisKKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEKKwlib29sICJMb2dpY1BEIExDRCAxMi4xXCIgU1ZHQSIKKwloZWxwCisJICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGFycCBMUTEyMVMxREc0MSwgYSAxMi4xIgorCSAgY29sb3IgU1ZHQSwgVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgODAweDYwMC4KKworCSAgVGhpcyBwYW5lbCByZXF1aXJlcyBhIGNsb2NrIHJhdGUgbWF5IGJlIGFuIGludGVnZXIgZnJhY3Rpb24KKwkgIG9mIHRoZSBiYXNlIExDRENMSyBmcmVxdWVuY3kuICBUaGUgZHJpdmVyIHdpbGwgc2VsZWN0IHRoZQorCSAgaGlnaGVzdCBmcmVxdWVuY3kgYXZhaWxhYmxlIHRoYXQgaXMgbG93ZXIgdGhhbiB0aGUgbWF4aW11bQorCSAgYWxsb3dlZC4gIFRoZSBwYW5lbCBtYXkgZmxpY2tlciBpZiB0aGUgY2xvY2sgcmF0ZSBpcworCSAgc2xvd2VyIHRoYW4gdGhlIHJlY29tbWVuZGVkIG1pbmltdW0uCisKK2NvbmZpZyBGQl9BUk1DTENEX0FVT19BMDcwVlcwMV9XSURFCisJYm9vbCAiQVUgT3B0cm9uaWNzIEEwNzBWVzAxIExDRCA3LjBcIiBXSURFIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFVIE9wdHJvbmljcywgYSA3LjAiCisJICBXSURFIENvbG9yLiAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDIzNHg0ODAuCisKK2NvbmZpZyBGQl9BUk1DTENEX0hJVEFDSEkKKwlib29sICJIaXRhY2hpIFdpZGUgU2NyZWVuIDgwMHg0ODAiCisJaGVscAorCSAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSGl0YWNoaSA4MDB4NDgwLgorCitlbmRjaG9pY2UKKworCiBjb25maWcgRkJfQUNPUk4KIAlib29sICJBY29ybiBWSURDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBBUk0gJiYgKEFSQ0hfQUNPUk4gfHwgQVJDSF9DTFBTNzUwMCkKQEAgLTc0Myw3ICs4MDYsNyBAQAogCiBjb25maWcgRkJfSU5URUwKIAl0cmlzdGF0ZSAiSW50ZWwgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEZCICYmIEVYUEVSSU1FTlRBTCAmJiBQQ0kgJiYgWDg2XzMyCisJZGVwZW5kcyBvbiBGQiAmJiBFWFBFUklNRU5UQUwgJiYgUENJICYmIFg4NgogCXNlbGVjdCBBR1AKIAlzZWxlY3QgQUdQX0lOVEVMCiAJc2VsZWN0IEZCX01PREVfSEVMUEVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCmluZGV4IDNkMDRiMmQuLjc4OTQ1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKQEAgLTIxNCwxMCArMjE0LDEzIEBACiAgKi8KIGludCBhdTExMDBmYl9mYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLQlzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOwotCXUzMiAqcGFsZXR0ZSA9IGZiZGV2LT5yZWdzLT5sY2RfcGFsbGV0dGViYXNlOworCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2OworCXUzMiAqcGFsZXR0ZTsKIAl1MzIgdmFsdWU7CiAKKwlmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOworCXBhbGV0dGUgPSBmYmRldi0+cmVncy0+bGNkX3BhbGxldHRlYmFzZTsKKwogCWlmIChyZWdubyA+IChBVTExMDBfTENEX05CUl9QQUxFVFRFX0VOVFJJRVMgLSAxKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTMxNiw5ICszMTksMTEgQEAKICAqLwogaW50IGF1MTEwMGZiX2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZiaSk7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXY7CiAJaW50IGR5OwogCisJZmJkZXYgPSB0b19hdTExMDBmYl9kZXZpY2UoZmJpKTsKKwogCXByaW50X2RiZygiZmJfcGFuX2Rpc3BsYXkgJXAgJXAiLCB2YXIsIGZiaSk7CiAKIAlpZiAoIXZhciB8fCAhZmJkZXYpIHsKQEAgLTM4MiwxMCArMzg3LDEyIEBACiAgKi8KIGludCBhdTExMDBmYl9mYl9tbWFwKHN0cnVjdCBmYl9pbmZvICpmYmksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZiaSk7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXY7CiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0PTAsIG9mZjsKIAorCWZiZGV2ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZiaSk7CisKIAlpZiAodm1hLT52bV9wZ29mZiA+ICh+MFVMID4+IFBBR0VfU0hJRlQpKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQ2Nyw3ICs0NzQsNyBAQAogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYXUxMTAwZmJfZml4Lm1taW9fc3RhcnQsIGF1MTEwMGZiX2ZpeC5tbWlvX2xlbiwKIAkJCQlEUklWRVJfTkFNRSkpIHsKLQkJcHJpbnRfZXJyKCJmYWlsIHRvIGxvY2sgbWVtb3J5IHJlZ2lvbiBhdCAweCUwOHgiLAorCQlwcmludF9lcnIoImZhaWwgdG8gbG9jayBtZW1vcnkgcmVnaW9uIGF0IDB4JTA4bHgiLAogCQkJCWF1MTEwMGZiX2ZpeC5tbWlvX3N0YXJ0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC01OTUsMTMgKzYwMiwxMyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYXUxMTAwZmJfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK2ludCBhdTExMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAKLWludCBhdTExMDBmYl9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQoraW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qIFRPRE8gKi8KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggY2EwMjA3MTkuLjQ3YmExYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0xNzQ1LDcgKzE3NDUsNyBAQAogCQkJCQlmYmNvbl9yZWRyYXdfbW92ZSh2YywgcCwgMCwgdCwgY291bnQpOwogCQkJCXlwYW5fdXBfcmVkcmF3KHZjLCB0LCBjb3VudCk7CiAJCQkJaWYgKHZjLT52Y19yb3dzIC0gYiA+IDApCi0JCQkJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCBiIC0gY291bnQsCisJCQkJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCBiLAogCQkJCQkJCSAgdmMtPnZjX3Jvd3MgLSBiLCBiKTsKIAkJCX0gZWxzZQogCQkJCWZiY29uX3JlZHJhd19tb3ZlKHZjLCBwLCB0ICsgY291bnQsIGIgLSB0IC0gY291bnQsIHQpOwpAQCAtMjYzMSw3ICsyNjMxLDcgQEAKIAkJCQkJc2NyX21lbWNweXcoKHUxNiAqKSBxLCAodTE2ICopIHAsCiAJCQkJCQkgICAgdmMtPnZjX3NpemVfcm93KTsKIAkJCQl9Ci0JCQkJc29mdGJhY2tfaW4gPSBwOworCQkJCXNvZnRiYWNrX2luID0gc29mdGJhY2tfY3VyciA9IHA7CiAJCQkJdXBkYXRlX3JlZ2lvbih2YywgdmMtPnZjX29yaWdpbiwKIAkJCQkJICAgICAgbG9nb19saW5lcyAqIHZjLT52Y19jb2xzKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmggYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYi5oCmluZGV4IGRhMjlkMDAuLjQ2OWIwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaApAQCAtOCw5ICs4LDkgQEAKIAogCiAvKioqIFZlcnNpb24vbmFtZSAqKiovCi0jZGVmaW5lIElOVEVMRkJfVkVSU0lPTgkJCSIwLjkuMiIKKyNkZWZpbmUgSU5URUxGQl9WRVJTSU9OCQkJIjAuOS40IgogI2RlZmluZSBJTlRFTEZCX01PRFVMRV9OQU1FCQkiaW50ZWxmYiIKLSNkZWZpbmUgU1VQUE9SVEVEX0NISVBTRVRTCQkiODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTSIKKyNkZWZpbmUgU1VQUE9SVEVEX0NISVBTRVRTCQkiODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTS85NDVHLzk0NUdNIgogCiAKIC8qKiogRGVidWcvZmVhdHVyZSBkZWZpbmVzICoqKi8KQEAgLTUyLDExICs1MiwxNCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg2NUcJMHgyNTcyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfOTE1RwkweDI1ODIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTQkweDI1OTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHCTB4Mjc3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNCTB4MjdBMgogCiAvKiBTaXplIG9mIE1NSU8gcmVnaW9uICovCiAjZGVmaW5lIElOVEVMX1JFR19TSVpFCQkJMHg4MDAwMAogCiAjZGVmaW5lIFNUUklERV9BTElHTk1FTlQJCTE2CisjZGVmaW5lIFNUUklERV9BTElHTk1FTlRfSTlYWAkJNjQKIAogI2RlZmluZSBQQUxFVFRFXzhfRU5UUklFUwkJMjU2CiAKQEAgLTEyNSw3ICsxMjgsOSBAQAogCUlOVEVMXzg1NUdNRSwKIAlJTlRFTF84NjVHLAogCUlOVEVMXzkxNUcsCi0JSU5URUxfOTE1R00KKwlJTlRFTF85MTVHTSwKKwlJTlRFTF85NDVHLAorCUlOVEVMXzk0NUdNLAogfTsKIAogc3RydWN0IGludGVsZmJfaHdzdGF0ZSB7CkBAIC0yNzcsOCArMjgyLDEzIEBACiAKIAkvKiBkcml2ZXIgcmVnaXN0ZXJlZCAqLwogCWludCByZWdpc3RlcmVkOworCQorCS8qIGluZGV4IGludG8gcGxscyAqLworCWludCBwbGxfaW5kZXg7CiB9OwogCisjZGVmaW5lIElTX0k5WFgoZGluZm8pICgoKGRpbmZvKS0+Y2hpcHNldCA9PSBJTlRFTF85MTVHKXx8KGRpbmZvLT5jaGlwc2V0ID09IElOVEVMXzkxNUdNKXx8KChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTQ1Ryl8fChkaW5mby0+Y2hpcHNldD09SU5URUxfOTQ1R00pKQorCiAvKioqIGZ1bmN0aW9uIHByb3RvdHlwZXMgKioqLwogCiBleHRlcm4gaW50IGludGVsZmJfdmFyX3RvX2RlcHRoKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCmluZGV4IDk5NWI0N2MuLjA3NmZhNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwpAQCAtMSwxMSArMSwxMiBAQAogLyoKICAqIGludGVsZmIKICAqCi0gKiBMaW51eCBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIEludGVsKFIpIDgzME0vODQ1Ry84NTJHTS84NTVHTS84NjVHLzkxNUcvOTE1R00KLSAqIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHMuCisgKiBMaW51eCBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIEludGVsKFIpIDgzME0vODQ1Ry84NTJHTS84NTVHTS84NjVHLzkxNUcvOTE1R00vCisgKiA5NDVHLzk0NUdNIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHMuCiAgKgogICogQ29weXJpZ2h0IKkgMjAwMiwgMjAwMyBEYXZpZCBEYXdlcyA8ZGF3ZXNAeGZyZWU4Ni5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAyMDA0IFN5bHZhaW4gTWV5ZXIKKyAqICAgICAgICAgICAgICAgICAgIDIwMDYgRGF2aWQgQWlybGllCiAgKgogICogVGhpcyBkcml2ZXIgY29uc2lzdHMgb2YgdHdvIHBhcnRzLiAgVGhlIGZpcnN0IHBhcnQgKGludGVsZmJkcnYuYykgcHJvdmlkZXMKICAqIHRoZSBiYXNpYyBmYmRldiBpbnRlcmZhY2VzLCBpcyBkZXJpdmVkIGluIHBhcnQgZnJvbSB0aGUgcmFkZW9uZmIgYW5kCkBAIC0xMzEsNiArMTMyLDcgQEAKIAogI2luY2x1ZGUgImludGVsZmIuaCIKICNpbmNsdWRlICJpbnRlbGZiaHcuaCIKKyNpbmNsdWRlICIuLi9lZGlkLmgiCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBnZXRfaW5pdGlhbF9tb2RlKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9kaW5mbyhzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbywKQEAgLTE4Miw2ICsxODQsOCBAQAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84NjVHLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF84NjVHIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBJTlRFTEZCX0NMQVNTX01BU0ssIElOVEVMXzkxNUcgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTE1R00sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBJTlRFTEZCX0NMQVNTX01BU0ssIElOVEVMXzkxNUdNIH0sCisJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBJTlRFTEZCX0NMQVNTX01BU0ssIElOVEVMXzk0NUcgfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R00sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBJTlRFTEZCX0NMQVNTX01BU0ssIElOVEVMXzk0NUdNIH0sCiAJeyAwLCB9CiB9OwogCkBAIC0yNjEsNyArMjY1LDcgQEAKIAogI2lmbmRlZiBNT0RVTEUKICNkZWZpbmUgT1BUX0VRVUFMKG9wdCwgbmFtZSkgKCFzdHJuY21wKG9wdCwgbmFtZSwgc3RybGVuKG5hbWUpKSkKLSNkZWZpbmUgT1BUX0lOVFZBTChvcHQsIG5hbWUpIHNpbXBsZV9zdHJ0b3VsKG9wdCArIHN0cmxlbihuYW1lKSwgTlVMTCwgMCkKKyNkZWZpbmUgT1BUX0lOVFZBTChvcHQsIG5hbWUpIHNpbXBsZV9zdHJ0b3VsKG9wdCArIHN0cmxlbihuYW1lKSArIDEsIE5VTEwsIDApCiAjZGVmaW5lIE9QVF9TVFJWQUwob3B0LCBuYW1lKSAob3B0ICsgc3RybGVuKG5hbWUpKQogCiBzdGF0aWMgX19pbmxpbmVfXyBjaGFyICoKQEAgLTU0NiwxMSArNTUwLDExIEBACiAKIAkvKiBTZXQgYmFzZSBhZGRyZXNzZXMuICovCiAJaWYgKChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUcpIHx8Ci0JCQkoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTSkpIHsKKwkgICAgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTE1R00pIHx8CisJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUcpICB8fAorCSAgICAoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTSkpIHsKIAkJYXBlcnR1cmVfYmFyID0gMjsKIAkJbW1pb19iYXIgPSAwOwotCQkvKiBEaXNhYmxlIEhXIGN1cnNvciBvbiA5MTVHL00gKG5vdCBpbXBsZW1lbnRlZCB5ZXQpICovCi0JCWh3Y3Vyc29yID0gMDsKIAl9CiAJZGluZm8tPmFwZXJ0dXJlLnBoeXNpY2FsID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGFwZXJ0dXJlX2Jhcik7CiAJZGluZm8tPmFwZXJ0dXJlLnNpemUgICAgID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBhcGVydHVyZV9iYXIpOwpAQCAtNTg0LDggKzU4OCw3IEBACiAJLyogR2V0IHRoZSBjaGlwc2V0IGluZm8uICovCiAJZGluZm8tPnBjaV9jaGlwc2V0ID0gcGRldi0+ZGV2aWNlOwogCi0JaWYgKGludGVsZmJod19nZXRfY2hpcHNldChwZGV2LCAmZGluZm8tPm5hbWUsICZkaW5mby0+Y2hpcHNldCwKLQkJCQkgICZkaW5mby0+bW9iaWxlKSkgeworCWlmIChpbnRlbGZiaHdfZ2V0X2NoaXBzZXQocGRldiwgZGluZm8pKSB7CiAJCWNsZWFudXAoZGluZm8pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xMDI5LDE3ICsxMDMyLDQ0IEBACiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvKSk7CiAJCW1zcmMgPSA1OwogCX0gZWxzZSB7Ci0JCWlmIChtb2RlKSB7Ci0JCQltc3JjID0gZmJfZmluZF9tb2RlKHZhciwgZGluZm8tPmluZm8sIG1vZGUsCi0JCQkJCSAgICB2ZXNhX21vZGVzLCBWRVNBX01PREVEQl9TSVpFLAotCQkJCQkgICAgTlVMTCwgMCk7Ci0JCQlpZiAobXNyYykKLQkJCQltc3JjIHw9IDg7CisJCWNvbnN0IHU4ICplZGlkX3MgPSBmYl9maXJtd2FyZV9lZGlkKCZkaW5mby0+cGRldi0+ZGV2KTsKKwkJdTggKmVkaWRfZCA9IE5VTEw7CisKKwkJaWYgKGVkaWRfcykgeworCQkJZWRpZF9kID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CisKKwkJCWlmIChlZGlkX2QpIHsKKwkJCQltZW1jcHkoZWRpZF9kLCBlZGlkX3MsIEVESURfTEVOR1RIKTsKKwkJCQlmYl9lZGlkX3RvX21vbnNwZWNzKGVkaWRfZCwKKwkJCQkJCSAgICAmZGluZm8tPmluZm8tPm1vbnNwZWNzKTsKKwkJCQlrZnJlZShlZGlkX2QpOworCQkJfQogCQl9CisKKwkJaWYgKG1vZGUpIHsKKwkJCXByaW50aygiaW50ZWxmYjogTG9va2luZyBmb3IgbW9kZSBpbiBwcml2YXRlICIKKwkJCSAgICAgICAiZGF0YWJhc2VcbiIpOworCQkJbXNyYyA9IGZiX2ZpbmRfbW9kZSh2YXIsIGRpbmZvLT5pbmZvLCBtb2RlLAorCQkJCQkgICAgZGluZm8tPmluZm8tPm1vbnNwZWNzLm1vZGVkYiwKKwkJCQkJICAgIGRpbmZvLT5pbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuLAorCQkJCQkgICAgTlVMTCwgMCk7CisKKwkJCWlmIChtc3JjICYmIG1zcmMgPiAxKSB7CisJCQkJcHJpbnRrKCJpbnRlbGZiOiBObyBtb2RlIGluIHByaXZhdGUgZGF0YWJhc2UsICIKKwkJCQkgICAgICAgImludGVsZmI6IGxvb2tpbmcgZm9yIG1vZGUgaW4gZ2xvYmFsICIKKwkJCQkgICAgICAgImRhdGFiYXNlICIpOworCQkJCW1zcmMgPSBmYl9maW5kX21vZGUodmFyLCBkaW5mby0+aW5mbywgbW9kZSwKKwkJCQkJCSAgICBOVUxMLCAwLCBOVUxMLCAwKTsKKworCQkJCWlmIChtc3JjKQorCQkJCQltc3JjIHw9IDg7CisJCQl9CisKKwkJfQorCiAJCWlmICghbXNyYykgewogCQkJbXNyYyA9IGZiX2ZpbmRfbW9kZSh2YXIsIGRpbmZvLT5pbmZvLCBQUkVGRVJSRURfTU9ERSwKLQkJCQkJICAgIHZlc2FfbW9kZXMsIFZFU0FfTU9ERURCX1NJWkUsCi0JCQkJCSAgICBOVUxMLCAwKTsKKwkJCQkJICAgIE5VTEwsIDAsIE5VTEwsIDApOwogCQl9CiAJfQogCkBAIC0xMTM5LDcgKzExNjksMTAgQEAKIAl9CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGxpbmUgbGVuZ3RoIGlzIGEgYWxpZ25lZCBjb3JyZWN0bHkuICovCi0JZGluZm8tPnBpdGNoID0gUk9VTkRfVVBfVE8oZGluZm8tPnBpdGNoLCBTVFJJREVfQUxJR05NRU5UKTsKKwlpZiAoSVNfSTlYWChkaW5mbykpCisJCWRpbmZvLT5waXRjaCA9IFJPVU5EX1VQX1RPKGRpbmZvLT5waXRjaCwgU1RSSURFX0FMSUdOTUVOVF9JOVhYKTsKKwllbHNlCisJCWRpbmZvLT5waXRjaCA9IFJPVU5EX1VQX1RPKGRpbmZvLT5waXRjaCwgU1RSSURFX0FMSUdOTUVOVCk7CiAKIAlpZiAoRklYRURfTU9ERShkaW5mbykpCiAJCWRpbmZvLT5waXRjaCA9IGRpbmZvLT5pbml0aWFsX3BpdGNoOwpAQCAtMTE2MiwxNiArMTE5NSwzMyBAQAogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2OwogCXN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvOwogCXN0YXRpYyBpbnQgZmlyc3QgPSAxOworCWludCBpOworCS8qIEdvb2QgcGl0Y2hlcyB0byBhbGxvdyB0aWxpbmcuICBEb24ndCBjYXJlIGFib3V0IHBpdGNoZXMgPCAxMDI0LiAqLworCXN0YXRpYyBjb25zdCBpbnQgcGl0Y2hlc1tdID0geworCQkxMjggKiA4LAorCQkxMjggKiAxNiwKKwkJMTI4ICogMzIsCisJCTEyOCAqIDY0LAorCQkwCisJfTsKIAogCURCR19NU0coImludGVsZmJfY2hlY2tfdmFyOiBhY2NlbF9mbGFncyBpcyAlZFxuIiwgdmFyLT5hY2NlbF9mbGFncyk7CiAKIAlkaW5mbyA9IEdFVF9ESU5GTyhpbmZvKTsKIAorCS8qIHVwZGF0ZSB0aGUgcGl0Y2ggKi8KIAlpZiAoaW50ZWxmYmh3X3ZhbGlkYXRlX21vZGUoZGluZm8sIHZhcikgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2ID0gKnZhcjsKIAorCWZvciAoaSA9IDA7IHBpdGNoZXNbaV0gIT0gMDsgaSsrKSB7CisJCWlmIChwaXRjaGVzW2ldID49IHYueHJlc192aXJ0dWFsKSB7CisJCQl2LnhyZXNfdmlydHVhbCA9IHBpdGNoZXNbaV07CisJCQlicmVhazsKKwkJfQorCX0KKwogCS8qIENoZWNrIGZvciBhIHN1cHBvcnRlZCBicHAuICovCiAJaWYgKHYuYml0c19wZXJfcGl4ZWwgPD0gOCkgewogCQl2LmJpdHNfcGVyX3BpeGVsID0gODsKQEAgLTE0NjcsNyArMTUxNyw3IEBACiBpbnRlbGZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQogewogICAgICAgICBzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyA9IEdFVF9ESU5GTyhpbmZvKTsKLQorCXUzMiBwaHlzaWNhbDsKICNpZiBWRVJCT1NFID4gMAogCURCR19NU0coImludGVsZmJfY3Vyc29yXG4iKTsKICNlbmRpZgpAQCAtMTQ3OCw3ICsxNTI4LDEwIEBACiAJaW50ZWxmYmh3X2N1cnNvcl9oaWRlKGRpbmZvKTsKIAogCS8qIElmIFhGcmVlIGtpbGxlZCB0aGUgY3Vyc29yIC0gcmVzdG9yZSBpdCAqLwotCWlmIChJTlJFRyhDVVJTT1JfQV9CQVNFQUREUikgIT0gZGluZm8tPmN1cnNvci5vZmZzZXQgPDwgMTIpIHsKKwlwaHlzaWNhbCA9IChkaW5mby0+bW9iaWxlIHx8IElTX0k5WFgoZGluZm8pKSA/IGRpbmZvLT5jdXJzb3IucGh5c2ljYWwgOgorCQkgICAoZGluZm8tPmN1cnNvci5vZmZzZXQgPDwgMTIpOworCisJaWYgKElOUkVHKENVUlNPUl9BX0JBU0VBRERSKSAhPSBwaHlzaWNhbCkgewogCQl1MzIgZmcsIGJnOwogCiAJCURCR19NU0coInRoZSBjdXJzb3Igd2FzIGtpbGxlZCAtIHJlc3RvcmUgaXQgISFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCmluZGV4IDYyNGM0YmMuLjQyNmI3NDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCkBAIC00MCw2OCArNDAsMTEwIEBACiAjaW5jbHVkZSAiaW50ZWxmYi5oIgogI2luY2x1ZGUgImludGVsZmJody5oIgogCitzdHJ1Y3QgcGxsX21pbl9tYXggeworCWludCBtaW5fbSwgbWF4X20sIG1pbl9tMSwgbWF4X20xOworCWludCBtaW5fbTIsIG1heF9tMiwgbWluX24sIG1heF9uOworCWludCBtaW5fcCwgbWF4X3AsIG1pbl9wMSwgbWF4X3AxOworCWludCBtaW5fdmNvLCBtYXhfdmNvLCBwX3RyYW5zaXRpb25fY2xrLCByZWZfY2xrOworCWludCBwX2luY19sbywgcF9pbmNfaGk7Cit9OworCisjZGVmaW5lIFBMTFNfSTh4eCAwCisjZGVmaW5lIFBMTFNfSTl4eCAxCisjZGVmaW5lIFBMTFNfTUFYIDIKKworc3RhdGljIHN0cnVjdCBwbGxfbWluX21heCBwbGxzW1BMTFNfTUFYXSA9IHsKKwl7IDEwOCwgMTQwLCAxOCwgMjYsCisJICA2LCAxNiwgMywgMTYsCisJICA0LCAxMjgsIDAsIDMxLAorCSAgOTMwMDAwLCAxNDAwMDAwLCAxNjUwMDAsIDQ4MDAwLAorCSAgNCwgMiB9LCAvL0k4eHgKKworCXsgNzUsIDEyMCwgMTAsIDIwLAorCSAgNSwgOSwgNCwgNywKKwkgIDUsIDgwLCAxLCA4LAorCSAgMTQwMDAwMCwgMjgwMDAwMCwgMjAwMDAwLCA5NjAwMCwKKwkgIDEwLCA1IH0gIC8vSTl4eAorfTsKKwogaW50Ci1pbnRlbGZiaHdfZ2V0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IGNoYXIgKipuYW1lLCBpbnQgKmNoaXBzZXQsCi0JCSAgICAgIGludCAqbW9iaWxlKQoraW50ZWxmYmh3X2dldF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbykKIHsKIAl1MzIgdG1wOwotCi0JaWYgKCFwZGV2IHx8ICFuYW1lIHx8ICFjaGlwc2V0IHx8ICFtb2JpbGUpCisJaWYgKCFwZGV2IHx8ICFkaW5mbykKIAkJcmV0dXJuIDE7CiAKIAlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MzBNOgotCQkqbmFtZSA9ICJJbnRlbChSKSA4MzBNIjsKLQkJKmNoaXBzZXQgPSBJTlRFTF84MzBNOwotCQkqbW9iaWxlID0gMTsKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgODMwTSI7CisJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfODMwTTsKKwkJZGluZm8tPm1vYmlsZSA9IDE7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k4eHg7CiAJCXJldHVybiAwOwogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84NDVHOgotCQkqbmFtZSA9ICJJbnRlbChSKSA4NDVHIjsKLQkJKmNoaXBzZXQgPSBJTlRFTF84NDVHOwotCQkqbW9iaWxlID0gMDsKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgODQ1RyI7CisJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfODQ1RzsKKwkJZGluZm8tPm1vYmlsZSA9IDA7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k4eHg7CiAJCXJldHVybiAwOwogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84NVhHTToKIAkJdG1wID0gMDsKLQkJKm1vYmlsZSA9IDE7CisJCWRpbmZvLT5tb2JpbGUgPSAxOworCQlkaW5mby0+cGxsX2luZGV4ID0gUExMU19JOHh4OwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgSU5URUxfODVYX0NBUElELCAmdG1wKTsKIAkJc3dpdGNoICgodG1wID4+IElOVEVMXzg1WF9WQVJJQU5UX1NISUZUKSAmCiAJCQlJTlRFTF84NVhfVkFSSUFOVF9NQVNLKSB7CiAJCWNhc2UgSU5URUxfVkFSXzg1NUdNRToKLQkJCSpuYW1lID0gIkludGVsKFIpIDg1NUdNRSI7Ci0JCQkqY2hpcHNldCA9IElOVEVMXzg1NUdNRTsKKwkJCWRpbmZvLT5uYW1lID0gIkludGVsKFIpIDg1NUdNRSI7CisJCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzg1NUdNRTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMX1ZBUl84NTVHTToKLQkJCSpuYW1lID0gIkludGVsKFIpIDg1NUdNIjsKLQkJCSpjaGlwc2V0ID0gSU5URUxfODU1R007CisJCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA4NTVHTSI7CisJCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzg1NUdNOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSU5URUxfVkFSXzg1MkdNRToKLQkJCSpuYW1lID0gIkludGVsKFIpIDg1MkdNRSI7Ci0JCQkqY2hpcHNldCA9IElOVEVMXzg1MkdNRTsKKwkJCWRpbmZvLT5uYW1lID0gIkludGVsKFIpIDg1MkdNRSI7CisJCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzg1MkdNRTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMX1ZBUl84NTJHTToKLQkJCSpuYW1lID0gIkludGVsKFIpIDg1MkdNIjsKLQkJCSpjaGlwc2V0ID0gSU5URUxfODUyR007CisJCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA4NTJHTSI7CisJCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzg1MkdNOwogCQkJcmV0dXJuIDA7CiAJCWRlZmF1bHQ6Ci0JCQkqbmFtZSA9ICJJbnRlbChSKSA4NTJHTS84NTVHTSI7Ci0JCQkqY2hpcHNldCA9IElOVEVMXzg1WEdNOworCQkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgODUyR00vODU1R00iOworCQkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF84NVhHTTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84NjVHOgotCQkqbmFtZSA9ICJJbnRlbChSKSA4NjVHIjsKLQkJKmNoaXBzZXQgPSBJTlRFTF84NjVHOwotCQkqbW9iaWxlID0gMDsKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgODY1RyI7CisJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfODY1RzsKKwkJZGluZm8tPm1vYmlsZSA9IDA7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k4eHg7CiAJCXJldHVybiAwOwogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHOgotCQkqbmFtZSA9ICJJbnRlbChSKSA5MTVHIjsKLQkJKmNoaXBzZXQgPSBJTlRFTF85MTVHOwotCQkqbW9iaWxlID0gMDsKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTE1RyI7CisJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfOTE1RzsKKwkJZGluZm8tPm1vYmlsZSA9IDA7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k5eHg7CiAJCXJldHVybiAwOwogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTToKLQkJKm5hbWUgPSAiSW50ZWwoUikgOTE1R00iOwotCQkqY2hpcHNldCA9IElOVEVMXzkxNUdNOwotCQkqbW9iaWxlID0gMTsKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTE1R00iOworCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzkxNUdNOworCQlkaW5mby0+bW9iaWxlID0gMTsKKwkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTl4eDsKKwkJcmV0dXJuIDA7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUc6CisJCWRpbmZvLT5uYW1lID0gIkludGVsKFIpIDk0NUciOworCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzk0NUc7CisJCWRpbmZvLT5tb2JpbGUgPSAwOworCQlkaW5mby0+cGxsX2luZGV4ID0gUExMU19JOXh4OworCQlyZXR1cm4gMDsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R006CisJCWRpbmZvLT5uYW1lID0gIkludGVsKFIpIDk0NUdNIjsKKwkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF85NDVHTTsKKwkJZGluZm8tPm1vYmlsZSA9IDE7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k5eHg7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAxOwpAQCAtMTE0LDYgKzE1Niw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXY7CiAJdTE2IHRtcDsKKwlpbnQgc3RvbGVuX292ZXJoZWFkOwogCiAJaWYgKCFwZGV2IHx8ICFhcGVydHVyZV9zaXplIHx8ICFzdG9sZW5fc2l6ZSkKIAkJcmV0dXJuIDE7CkBAIC0xMjgsMjEgKzE3MSw0MSBAQAogCXRtcCA9IDA7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlX2RldiwgSU5URUxfR01DSF9DVFJMLCAmdG1wKTsKIAlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewotCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MzBNOgotCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84NDVHOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTToKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R006CisJCS8qIDkxNSBhbmQgOTQ1IGNoaXBzZXRzIHN1cHBvcnQgYSAyNTZNQiBhcGVydHVyZS4KKwkJICAgQXBlcnR1cmUgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IGluc3BlY3RlZCB0aGUKKwkJICAgYmFzZSBhZGRyZXNzIG9mIHRoZSBhcGVydHVyZS4gKi8KKwkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSAmIDB4MDgwMDAwMDApCisJCQkqYXBlcnR1cmVfc2l6ZSA9IE1CKDEyOCk7CisJCWVsc2UKKwkJCSphcGVydHVyZV9zaXplID0gTUIoMjU2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJaWYgKCh0bXAgJiBJTlRFTF9HTUNIX01FTV9NQVNLKSA9PSBJTlRFTF9HTUNIX01FTV82NE0pCiAJCQkqYXBlcnR1cmVfc2l6ZSA9IE1CKDY0KTsKIAkJZWxzZQogCQkJKmFwZXJ0dXJlX3NpemUgPSBNQigxMjgpOworCQlicmVhazsKKwl9CisKKwkvKiBTdG9sZW4gbWVtb3J5IHNpemUgaXMgcmVkdWNlZCBieSB0aGUgR1RUIGFuZCB0aGUgcG9wdXAuCisJICAgR1RUIGlzIDFLIHBlciBNQiBvZiBhcGVydHVyZSBzaXplLCBhbmQgcG9wdXAgaXMgNEsuICovCisJc3RvbGVuX292ZXJoZWFkID0gKCphcGVydHVyZV9zaXplIC8gTUIoMSkpICsgNDsKKwlzd2l0Y2gocGRldi0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgzME06CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg0NUc6CiAJCXN3aXRjaCAodG1wICYgSU5URUxfODMwX0dNQ0hfR01TX01BU0spIHsKIAkJY2FzZSBJTlRFTF84MzBfR01DSF9HTVNfU1RPTEVOXzUxMjoKLQkJCSpzdG9sZW5fc2l6ZSA9IEtCKDUxMikgLSBLQigxMzIpOworCQkJKnN0b2xlbl9zaXplID0gS0IoNTEyKSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF84MzBfR01DSF9HTVNfU1RPTEVOXzEwMjQ6Ci0JCQkqc3RvbGVuX3NpemUgPSBNQigxKSAtIEtCKDEzMik7CisJCQkqc3RvbGVuX3NpemUgPSBNQigxKSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF84MzBfR01DSF9HTVNfU1RPTEVOXzgxOTI6Ci0JCQkqc3RvbGVuX3NpemUgPSBNQig4KSAtIEtCKDEzMik7CisJCQkqc3RvbGVuX3NpemUgPSBNQig4KSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF84MzBfR01DSF9HTVNfTE9DQUw6CiAJCQlFUlJfTVNHKCJvbmx5IGxvY2FsIG1lbW9yeSBmb3VuZFxuIik7CkBAIC0xNTcsMjggKzIyMCwyNyBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCSphcGVydHVyZV9zaXplID0gTUIoMTI4KTsKIAkJc3dpdGNoICh0bXAgJiBJTlRFTF84NTVfR01DSF9HTVNfTUFTSykgewogCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMU06Ci0JCQkqc3RvbGVuX3NpemUgPSBNQigxKSAtIEtCKDEzMik7CisJCQkqc3RvbGVuX3NpemUgPSBNQigxKSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzRNOgotCQkJKnN0b2xlbl9zaXplID0gTUIoNCkgLSBLQigxMzIpOworCQkJKnN0b2xlbl9zaXplID0gTUIoNCkgLSBLQihzdG9sZW5fb3ZlcmhlYWQpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl84TToKLQkJCSpzdG9sZW5fc2l6ZSA9IE1CKDgpIC0gS0IoMTMyKTsKKwkJCSpzdG9sZW5fc2l6ZSA9IE1CKDgpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMTZNOgotCQkJKnN0b2xlbl9zaXplID0gTUIoMTYpIC0gS0IoMTMyKTsKKwkJCSpzdG9sZW5fc2l6ZSA9IE1CKDE2KSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzMyTToKLQkJCSpzdG9sZW5fc2l6ZSA9IE1CKDMyKSAtIEtCKDEzMik7CisJCQkqc3RvbGVuX3NpemUgPSBNQigzMikgLSBLQihzdG9sZW5fb3ZlcmhlYWQpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNDhNOgotCQkJKnN0b2xlbl9zaXplID0gTUIoNDgpIC0gS0IoMTMyKTsKKwkJCSpzdG9sZW5fc2l6ZSA9IE1CKDQ4KSAtIEtCKHN0b2xlbl9vdmVyaGVhZCk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBJTlRFTF85MTVHX0dNQ0hfR01TX1NUT0xFTl82NE06Ci0JCQkqc3RvbGVuX3NpemUgPSBNQig2NCkgLSBLQigxMzIpOworCQkJKnN0b2xlbl9zaXplID0gTUIoNjQpIC0gS0Ioc3RvbGVuX292ZXJoZWFkKTsKIAkJCXJldHVybiAwOwogCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19ESVNBQkxFRDoKIAkJCUVSUl9NU0coInZpZGVvIG1lbW9yeSBpcyBkaXNhYmxlZFxuIik7CkBAIC01MjksMTIgKzU5MSw2MyBAQAogfQogCiAKK3N0YXRpYyBpbnQgY2FsY192Y2xvY2szKGludCBpbmRleCwgaW50IG0sIGludCBuLCBpbnQgcCkKK3sKKwlpZiAocCA9PSAwIHx8IG4gPT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBsbHNbaW5kZXhdLnJlZl9jbGsgKiBtIC8gbiAvIHA7Cit9CisKK3N0YXRpYyBpbnQgY2FsY192Y2xvY2soaW50IGluZGV4LCBpbnQgbTEsIGludCBtMiwgaW50IG4sIGludCBwMSwgaW50IHAyLCBpbnQgbHZkcykKK3sKKwlzdHJ1Y3QgcGxsX21pbl9tYXggKnBsbCA9ICZwbGxzW2luZGV4XTsKKwl1MzIgbSwgdmNvLCBwOworCisJbSA9ICg1ICogKG0xICsgMikpICsgKG0yICsgMik7CisJbiArPSAyOworCXZjbyA9IHBsbC0+cmVmX2NsayAqIG0gLyBuOworCisJaWYgKGluZGV4ID09IFBMTFNfSTh4eCkgeworCQlwID0gKChwMSArIDIpICogKDEgPDwgKHAyICsgMSkpKTsKKwl9IGVsc2UgeworCQlwID0gKChwMSkgKiAocDIgPyA1IDogMTApKTsKKwl9CisJcmV0dXJuIHZjbyAvIHA7Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlbGZiaHdfZ2V0X3AxcDIoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8sIGludCBkcGxsLCBpbnQgKm9fcDEsIGludCAqb19wMikKK3sKKwlpbnQgcDEsIHAyOworCisJaWYgKElTX0k5WFgoZGluZm8pKSB7CisJCWlmIChkcGxsICYgRFBMTF9QMV9GT1JDRV9ESVYyKQorCQkJcDEgPSAxOworCQllbHNlCisJCQlwMSA9IChkcGxsID4+IERQTExfUDFfU0hJRlQpICYgMHhmZjsKKwkJCisJCXAxID0gZmZzKHAxKTsKKworCQlwMiA9IChkcGxsID4+IERQTExfSTlYWF9QMl9TSElGVCkgJiBEUExMX1AyX01BU0s7CisJfSBlbHNlIHsKKwkJaWYgKGRwbGwgJiBEUExMX1AxX0ZPUkNFX0RJVjIpCisJCQlwMSA9IDA7CisJCWVsc2UKKwkJCXAxID0gKGRwbGwgPj4gRFBMTF9QMV9TSElGVCkgJiBEUExMX1AxX01BU0s7CisJCXAyID0gKGRwbGwgPj4gRFBMTF9QMl9TSElGVCkgJiBEUExMX1AyX01BU0s7CisJfQorCisJKm9fcDEgPSBwMTsKKwkqb19wMiA9IHAyOworfQorCisKIHZvaWQKIGludGVsZmJod19wcmludF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbywgc3RydWN0IGludGVsZmJfaHdzdGF0ZSAqaHcpCiB7CiAjaWYgUkVHRFVNUAogCWludCBpLCBtMSwgbTIsIG4sIHAxLCBwMjsKLQorCWludCBpbmRleCA9IGRpbmZvLT5wbGxfaW5kZXg7CiAJREJHX01TRygiaW50ZWxmYmh3X3ByaW50X2h3X3N0YXRlXG4iKTsKIAogCWlmICghaHcgfHwgIWRpbmZvKQpAQCAtNTQ3LDI2ICs2NjAsMjIgQEAKIAluID0gKGh3LT52Z2EwX2Rpdmlzb3IgPj4gRlBfTl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKIAltMSA9IChody0+dmdhMF9kaXZpc29yID4+IEZQX00xX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0yID0gKGh3LT52Z2EwX2Rpdmlzb3IgPj4gRlBfTTJfRElWSVNPUl9TSElGVCkgJiBGUF9ESVZJU09SX01BU0s7Ci0JaWYgKGh3LT52Z2FfcGQgJiBWR0FQRF8wX1AxX0ZPUkNFX0RJVjIpCi0JCXAxID0gMDsKLQllbHNlCi0JCXAxID0gKGh3LT52Z2FfcGQgPj4gVkdBUERfMF9QMV9TSElGVCkgJiBEUExMX1AxX01BU0s7Ci0JcDIgPSAoaHctPnZnYV9wZCA+PiBWR0FQRF8wX1AyX1NISUZUKSAmIERQTExfUDJfTUFTSzsKKworCWludGVsZmJod19nZXRfcDFwMihkaW5mbywgaHctPnZnYV9wZCwgJnAxLCAmcDIpOworCiAJcHJpbnRrKCIJVkdBMDogKG0xLCBtMiwgbiwgcDEsIHAyKSA9ICglZCwgJWQsICVkLCAlZCwgJWQpXG4iLAotCQltMSwgbTIsIG4sIHAxLCBwMik7Ci0JcHJpbnRrKCIJVkdBMDogY2xvY2sgaXMgJWRcbiIsIENBTENfVkNMT0NLKG0xLCBtMiwgbiwgcDEsIHAyKSk7CisJICAgICAgIG0xLCBtMiwgbiwgcDEsIHAyKTsKKwlwcmludGsoIglWR0EwOiBjbG9jayBpcyAlZFxuIiwKKwkgICAgICAgY2FsY192Y2xvY2soaW5kZXgsIG0xLCBtMiwgbiwgcDEsIHAyLCAwKSk7CiAKIAluID0gKGh3LT52Z2ExX2Rpdmlzb3IgPj4gRlBfTl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKIAltMSA9IChody0+dmdhMV9kaXZpc29yID4+IEZQX00xX0RJVklTT1JfU0hJRlQpICYgRlBfRElWSVNPUl9NQVNLOwogCW0yID0gKGh3LT52Z2ExX2Rpdmlzb3IgPj4gRlBfTTJfRElWSVNPUl9TSElGVCkgJiBGUF9ESVZJU09SX01BU0s7Ci0JaWYgKGh3LT52Z2FfcGQgJiBWR0FQRF8xX1AxX0ZPUkNFX0RJVjIpCi0JCXAxID0gMDsKLQllbHNlCi0JCXAxID0gKGh3LT52Z2FfcGQgPj4gVkdBUERfMV9QMV9TSElGVCkgJiBEUExMX1AxX01BU0s7Ci0JcDIgPSAoaHctPnZnYV9wZCA+PiBWR0FQRF8xX1AyX1NISUZUKSAmIERQTExfUDJfTUFTSzsKKworCWludGVsZmJod19nZXRfcDFwMihkaW5mbywgaHctPnZnYV9wZCwgJnAxLCAmcDIpOwogCXByaW50aygiCVZHQTE6IChtMSwgbTIsIG4sIHAxLCBwMikgPSAoJWQsICVkLCAlZCwgJWQsICVkKVxuIiwKLQkJbTEsIG0yLCBuLCBwMSwgcDIpOwotCXByaW50aygiCVZHQTE6IGNsb2NrIGlzICVkXG4iLCBDQUxDX1ZDTE9DSyhtMSwgbTIsIG4sIHAxLCBwMikpOworCSAgICAgICBtMSwgbTIsIG4sIHAxLCBwMik7CisJcHJpbnRrKCIJVkdBMTogY2xvY2sgaXMgJWRcbiIsIGNhbGNfdmNsb2NrKGluZGV4LCBtMSwgbTIsIG4sIHAxLCBwMiwgMCkpOwogCiAJcHJpbnRrKCIJRFBMTF9BOgkJCTB4JTA4eFxuIiwgaHctPmRwbGxfYSk7CiAJcHJpbnRrKCIJRFBMTF9COgkJCTB4JTA4eFxuIiwgaHctPmRwbGxfYik7CkBAIC01NzgsMzQgKzY4NywzMCBAQAogCW4gPSAoaHctPmZwYTAgPj4gRlBfTl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKIAltMSA9IChody0+ZnBhMCA+PiBGUF9NMV9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKIAltMiA9IChody0+ZnBhMCA+PiBGUF9NMl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKLQlpZiAoaHctPmRwbGxfYSAmIERQTExfUDFfRk9SQ0VfRElWMikKLQkJcDEgPSAwOwotCWVsc2UKLQkJcDEgPSAoaHctPmRwbGxfYSA+PiBEUExMX1AxX1NISUZUKSAmIERQTExfUDFfTUFTSzsKLQlwMiA9IChody0+ZHBsbF9hID4+IERQTExfUDJfU0hJRlQpICYgRFBMTF9QMl9NQVNLOworCisJaW50ZWxmYmh3X2dldF9wMXAyKGRpbmZvLCBody0+ZHBsbF9hLCAmcDEsICZwMik7CisKIAlwcmludGsoIglQTExBMDogKG0xLCBtMiwgbiwgcDEsIHAyKSA9ICglZCwgJWQsICVkLCAlZCwgJWQpXG4iLAotCQltMSwgbTIsIG4sIHAxLCBwMik7Ci0JcHJpbnRrKCIJUExMQTA6IGNsb2NrIGlzICVkXG4iLCBDQUxDX1ZDTE9DSyhtMSwgbTIsIG4sIHAxLCBwMikpOworCSAgICAgICBtMSwgbTIsIG4sIHAxLCBwMik7CisJcHJpbnRrKCIJUExMQTA6IGNsb2NrIGlzICVkXG4iLCBjYWxjX3ZjbG9jayhpbmRleCwgbTEsIG0yLCBuLCBwMSwgcDIsIDApKTsKIAogCW4gPSAoaHctPmZwYTEgPj4gRlBfTl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKIAltMSA9IChody0+ZnBhMSA+PiBGUF9NMV9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKIAltMiA9IChody0+ZnBhMSA+PiBGUF9NMl9ESVZJU09SX1NISUZUKSAmIEZQX0RJVklTT1JfTUFTSzsKLQlpZiAoaHctPmRwbGxfYSAmIERQTExfUDFfRk9SQ0VfRElWMikKLQkJcDEgPSAwOwotCWVsc2UKLQkJcDEgPSAoaHctPmRwbGxfYSA+PiBEUExMX1AxX1NISUZUKSAmIERQTExfUDFfTUFTSzsKLQlwMiA9IChody0+ZHBsbF9hID4+IERQTExfUDJfU0hJRlQpICYgRFBMTF9QMl9NQVNLOworCisJaW50ZWxmYmh3X2dldF9wMXAyKGRpbmZvLCBody0+ZHBsbF9hLCAmcDEsICZwMik7CisKIAlwcmludGsoIglQTExBMTogKG0xLCBtMiwgbiwgcDEsIHAyKSA9ICglZCwgJWQsICVkLCAlZCwgJWQpXG4iLAotCQltMSwgbTIsIG4sIHAxLCBwMik7Ci0JcHJpbnRrKCIJUExMQTE6IGNsb2NrIGlzICVkXG4iLCBDQUxDX1ZDTE9DSyhtMSwgbTIsIG4sIHAxLCBwMikpOworCSAgICAgICBtMSwgbTIsIG4sIHAxLCBwMik7CisJcHJpbnRrKCIJUExMQTE6IGNsb2NrIGlzICVkXG4iLCBjYWxjX3ZjbG9jayhpbmRleCwgbTEsIG0yLCBuLCBwMSwgcDIsIDApKTsKIAogI2lmIDAKIAlwcmludGsoIglQQUxFVFRFX0E6XG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgUEFMRVRURV84X0VOVFJJRVMpCi0JCXByaW50aygiCSUzZDoJMHglMDh4XG4iLCBpLCBody0+cGFsZXR0ZV9hW2ldOworCQlwcmludGsoIgklM2Q6CTB4JTA4eFxuIiwgaSwgaHctPnBhbGV0dGVfYVtpXSk7CiAJcHJpbnRrKCIJUEFMRVRURV9COlxuIik7CiAJZm9yIChpID0gMDsgaSA8IFBBTEVUVEVfOF9FTlRSSUVTKQotCQlwcmludGsoIgklM2Q6CTB4JTA4eFxuIiwgaSwgaHctPnBhbGV0dGVfYltpXTsKKwkJcHJpbnRrKCIJJTNkOgkweCUwOHhcbiIsIGksIGh3LT5wYWxldHRlX2JbaV0pOwogI2VuZGlmCiAKIAlwcmludGsoIglIVE9UQUxfQToJCTB4JTA4eFxuIiwgaHctPmh0b3RhbF9hKTsKQEAgLTY4MCwxMSArNzg1LDExIEBACiAJfQogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJcHJpbnRrKCIJU1dGMyVkCQkJMHglMDh4XG4iLCBpLAotCQkJaHctPnN3ZjN4W2ldKTsKKwkJICAgICAgIGh3LT5zd2YzeFtpXSk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCXByaW50aygiCUZFTkNFJWQJCQkweCUwOHhcbiIsIGksCi0JCQlody0+ZmVuY2VbaV0pOworCQkgICAgICAgaHctPmZlbmNlW2ldKTsKIAogCXByaW50aygiCUlOU1RQTQkJCTB4JTA4eFxuIiwgaHctPmluc3RwbSk7CiAJcHJpbnRrKCIJTUVNX01PREUJCTB4JTA4eFxuIiwgaHctPm1lbV9tb2RlKTsKQEAgLTY5NSw0MyArODAwLDU4IEBACiAjZW5kaWYKIH0KIAorCisKIC8qIFNwbGl0IHRoZSBNIHBhcmFtZXRlciBpbnRvIE0xIGFuZCBNMi4gKi8KIHN0YXRpYyBpbnQKLXNwbGl0bSh1bnNpZ25lZCBpbnQgbSwgdW5zaWduZWQgaW50ICpyZXRtMSwgdW5zaWduZWQgaW50ICpyZXRtMikKK3NwbGl0bShpbnQgaW5kZXgsIHVuc2lnbmVkIGludCBtLCB1bnNpZ25lZCBpbnQgKnJldG0xLCB1bnNpZ25lZCBpbnQgKnJldG0yKQogewogCWludCBtMSwgbTI7CisJaW50IHRlc3RtOworCXN0cnVjdCBwbGxfbWluX21heCAqcGxsID0gJnBsbHNbaW5kZXhdOwogCi0JbTEgPSAobSAtIDIgLSAoTUlOX00yICsgTUFYX00yKSAvIDIpIC8gNSAtIDI7Ci0JaWYgKG0xIDwgTUlOX00xKQotCQltMSA9IE1JTl9NMTsKLQlpZiAobTEgPiBNQVhfTTEpCi0JCW0xID0gTUFYX00xOwotCW0yID0gbSAtIDUgKiAobTEgKyAyKSAtIDI7Ci0JaWYgKG0yIDwgTUlOX00yIHx8IG0yID4gTUFYX00yIHx8IG0yID49IG0xKSB7Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCSpyZXRtMSA9ICh1bnNpZ25lZCBpbnQpbTE7Ci0JCSpyZXRtMiA9ICh1bnNpZ25lZCBpbnQpbTI7Ci0JCXJldHVybiAwOworCS8qIG5vIHBvaW50IG9wdGltaXNpbmcgdG9vIG11Y2ggLSBicnV0ZSBmb3JjZSBtICovCisJZm9yIChtMSA9IHBsbC0+bWluX20xOyBtMSA8IHBsbC0+bWF4X20xICsgMTsgbTErKykgeworCQlmb3IgKG0yID0gcGxsLT5taW5fbTI7IG0yIDwgcGxsLT5tYXhfbTIgKyAxOyBtMisrKSB7CisJCQl0ZXN0bSA9ICg1ICogKG0xICsgMikpICsgKG0yICsgMik7CisJCQlpZiAodGVzdG0gPT0gbSkgeworCQkJCSpyZXRtMSA9ICh1bnNpZ25lZCBpbnQpbTE7CisJCQkJKnJldG0yID0gKHVuc2lnbmVkIGludCltMjsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQogCX0KKwlyZXR1cm4gMTsKIH0KIAogLyogU3BsaXQgdGhlIFAgcGFyYW1ldGVyIGludG8gUDEgYW5kIFAyLiAqLwogc3RhdGljIGludAotc3BsaXRwKHVuc2lnbmVkIGludCBwLCB1bnNpZ25lZCBpbnQgKnJldHAxLCB1bnNpZ25lZCBpbnQgKnJldHAyKQorc3BsaXRwKGludCBpbmRleCwgdW5zaWduZWQgaW50IHAsIHVuc2lnbmVkIGludCAqcmV0cDEsIHVuc2lnbmVkIGludCAqcmV0cDIpCiB7CiAJaW50IHAxLCBwMjsKKwlzdHJ1Y3QgcGxsX21pbl9tYXggKnBsbCA9ICZwbGxzW2luZGV4XTsKKworCWlmIChpbmRleCA9PSBQTExTX0k5eHgpIHsKKwkJcDIgPSAocCAlIDEwKSA/IDEgOiAwOworCisJCXAxID0gcCAvIChwMiA/IDUgOiAxMCk7CisKKwkJKnJldHAxID0gKHVuc2lnbmVkIGludClwMTsKKwkJKnJldHAyID0gKHVuc2lnbmVkIGludClwMjsKKwkJcmV0dXJuIDA7CisJfQogCiAJaWYgKHAgJSA0ID09IDApCiAJCXAyID0gMTsKIAllbHNlCiAJCXAyID0gMDsKIAlwMSA9IChwIC8gKDEgPDwgKHAyICsgMSkpKSAtIDI7Ci0JaWYgKHAgJSA0ID09IDAgJiYgcDEgPCBNSU5fUDEpIHsKKwlpZiAocCAlIDQgPT0gMCAmJiBwMSA8IHBsbC0+bWluX3AxKSB7CiAJCXAyID0gMDsKIAkJcDEgPSAocCAvICgxIDw8IChwMiArIDEpKSkgLSAyOwogCX0KLQlpZiAocDEgIDwgTUlOX1AxIHx8IHAxID4gTUFYX1AxIHx8IChwMSArIDIpICogKDEgPDwgKHAyICsgMSkpICE9IHApIHsKKwlpZiAocDEgPCBwbGwtPm1pbl9wMSB8fCBwMSA+IHBsbC0+bWF4X3AxIHx8CisJICAgIChwMSArIDIpICogKDEgPDwgKHAyICsgMSkpICE9IHApIHsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKIAkJKnJldHAxID0gKHVuc2lnbmVkIGludClwMTsKQEAgLTc0MSwxNCArODYxLDE1IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNhbGNfcGxsX3BhcmFtcyhpbnQgY2xvY2ssIHUzMiAqcmV0bTEsIHUzMiAqcmV0bTIsIHUzMiAqcmV0biwgdTMyICpyZXRwMSwKK2NhbGNfcGxsX3BhcmFtcyhpbnQgaW5kZXgsIGludCBjbG9jaywgdTMyICpyZXRtMSwgdTMyICpyZXRtMiwgdTMyICpyZXRuLCB1MzIgKnJldHAxLAogCQl1MzIgKnJldHAyLCB1MzIgKnJldGNsb2NrKQogewotCXUzMiBtMSwgbTIsIG4sIHAxLCBwMiwgbjE7Ci0JdTMyIGZfdmNvLCBwLCBwX2Jlc3QgPSAwLCBtLCBmX291dDsKKwl1MzIgbTEsIG0yLCBuLCBwMSwgcDIsIG4xLCB0ZXN0bTsKKwl1MzIgZl92Y28sIHAsIHBfYmVzdCA9IDAsIG0sIGZfb3V0ID0gMDsKIAl1MzIgZXJyX21heCwgZXJyX3RhcmdldCwgZXJyX2Jlc3QgPSAxMDAwMDAwMDsKIAl1MzIgbl9iZXN0ID0gMCwgbV9iZXN0ID0gMCwgZl9iZXN0LCBmX2VycjsKLQl1MzIgcF9taW4sIHBfbWF4LCBwX2luYywgZGl2X21pbiwgZGl2X21heDsKKwl1MzIgcF9taW4sIHBfbWF4LCBwX2luYywgZGl2X21heDsKKwlzdHJ1Y3QgcGxsX21pbl9tYXggKnBsbCA9ICZwbGxzW2luZGV4XTsKIAogCS8qIEFjY2VwdCAwLjUlIGRpZmZlcmVuY2UsIGJ1dCBhaW0gZm9yIDAuMSUgKi8KIAllcnJfbWF4ID0gNSAqIGNsb2NrIC8gMTAwMDsKQEAgLTc1Niw1OCArODc3LDU2IEBACiAKIAlEQkdfTVNHKCJDbG9jayBpcyAlZFxuIiwgY2xvY2spOwogCi0JZGl2X21heCA9IE1BWF9WQ09fRlJFUSAvIGNsb2NrOwotCWRpdl9taW4gPSBST1VORF9VUF9UTyhNSU5fVkNPX0ZSRVEsIGNsb2NrKSAvIGNsb2NrOworCWRpdl9tYXggPSBwbGwtPm1heF92Y28gLyBjbG9jazsKIAotCWlmIChjbG9jayA8PSBQX1RSQU5TSVRJT05fQ0xPQ0spCi0JCXBfaW5jID0gNDsKLQllbHNlCi0JCXBfaW5jID0gMjsKLQlwX21pbiA9IFJPVU5EX1VQX1RPKGRpdl9taW4sIHBfaW5jKTsKKwlwX2luYyA9IChjbG9jayA8PSBwbGwtPnBfdHJhbnNpdGlvbl9jbGspID8gcGxsLT5wX2luY19sbyA6IHBsbC0+cF9pbmNfaGk7CisJcF9taW4gPSBwX2luYzsKIAlwX21heCA9IFJPVU5EX0RPV05fVE8oZGl2X21heCwgcF9pbmMpOwotCWlmIChwX21pbiA8IE1JTl9QKQotCQlwX21pbiA9IDQ7Ci0JaWYgKHBfbWF4ID4gTUFYX1ApCi0JCXBfbWF4ID0gMTI4OworCWlmIChwX21pbiA8IHBsbC0+bWluX3ApCisJCXBfbWluID0gcGxsLT5taW5fcDsKKwlpZiAocF9tYXggPiBwbGwtPm1heF9wKQorCQlwX21heCA9IHBsbC0+bWF4X3A7CiAKIAlEQkdfTVNHKCJwIHJhbmdlIGlzICVkLSVkICglZClcbiIsIHBfbWluLCBwX21heCwgcF9pbmMpOwogCiAJcCA9IHBfbWluOwogCWRvIHsKLQkJaWYgKHNwbGl0cChwLCAmcDEsICZwMikpIHsKKwkJaWYgKHNwbGl0cChpbmRleCwgcCwgJnAxLCAmcDIpKSB7CiAJCQlXUk5fTVNHKCJjYW5ub3Qgc3BsaXQgcCA9ICVkXG4iLCBwKTsKIAkJCXAgKz0gcF9pbmM7CiAJCQljb250aW51ZTsKIAkJfQotCQluID0gTUlOX047CisJCW4gPSBwbGwtPm1pbl9uOwogCQlmX3ZjbyA9IGNsb2NrICogcDsKIAogCQlkbyB7Ci0JCQltID0gUk9VTkRfVVBfVE8oZl92Y28gKiBuLCBQTExfUkVGQ0xLKSAvIFBMTF9SRUZDTEs7Ci0JCQlpZiAobSA8IE1JTl9NKQotCQkJCW0gPSBNSU5fTTsKLQkJCWlmIChtID4gTUFYX00pCi0JCQkJbSA9IE1BWF9NOwotCQkJZl9vdXQgPSBDQUxDX1ZDTE9DSzMobSwgbiwgcCk7Ci0JCQlpZiAoc3BsaXRtKG0sICZtMSwgJm0yKSkgewotCQkJCVdSTl9NU0coImNhbm5vdCBzcGxpdCBtID0gJWRcbiIsIG0pOwotCQkJCW4rKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChjbG9jayA+IGZfb3V0KQotCQkJCWZfZXJyID0gY2xvY2sgLSBmX291dDsKLQkJCWVsc2UKLQkJCQlmX2VyciA9IGZfb3V0IC0gY2xvY2s7CisJCQltID0gUk9VTkRfVVBfVE8oZl92Y28gKiBuLCBwbGwtPnJlZl9jbGspIC8gcGxsLT5yZWZfY2xrOworCQkJaWYgKG0gPCBwbGwtPm1pbl9tKQorCQkJCW0gPSBwbGwtPm1pbl9tICsgMTsKKwkJCWlmIChtID4gcGxsLT5tYXhfbSkKKwkJCQltID0gcGxsLT5tYXhfbSAtIDE7CisJCQlmb3IgKHRlc3RtID0gbSAtIDE7IHRlc3RtIDw9IG07IHRlc3RtKyspIHsKKwkJCQlmX291dCA9IGNhbGNfdmNsb2NrMyhpbmRleCwgbSwgbiwgcCk7CisJCQkJaWYgKHNwbGl0bShpbmRleCwgdGVzdG0sICZtMSwgJm0yKSkgeworCQkJCQlXUk5fTVNHKCJjYW5ub3Qgc3BsaXQgbSA9ICVkXG4iLCBtKTsKKwkJCQkJbisrOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKGNsb2NrID4gZl9vdXQpCisJCQkJCWZfZXJyID0gY2xvY2sgLSBmX291dDsKKwkJCQllbHNlLyogc2xpZ2h0bHkgYmlhcyB0aGUgZXJyb3IgZm9yIGJpZ2dlciBjbG9ja3MgKi8KKwkJCQkJZl9lcnIgPSBmX291dCAtIGNsb2NrICsgMTsKIAotCQkJaWYgKGZfZXJyIDwgZXJyX2Jlc3QpIHsKLQkJCQltX2Jlc3QgPSBtOwotCQkJCW5fYmVzdCA9IG47Ci0JCQkJcF9iZXN0ID0gcDsKLQkJCQlmX2Jlc3QgPSBmX291dDsKLQkJCQllcnJfYmVzdCA9IGZfZXJyOworCQkJCWlmIChmX2VyciA8IGVycl9iZXN0KSB7CisJCQkJCW1fYmVzdCA9IHRlc3RtOworCQkJCQluX2Jlc3QgPSBuOworCQkJCQlwX2Jlc3QgPSBwOworCQkJCQlmX2Jlc3QgPSBmX291dDsKKwkJCQkJZXJyX2Jlc3QgPSBmX2VycjsKKwkJCQl9CiAJCQl9CiAJCQluKys7Ci0JCX0gd2hpbGUgKChuIDw9IE1BWF9OKSAmJiAoZl9vdXQgPj0gY2xvY2spKTsKKwkJfSB3aGlsZSAoKG4gPD0gcGxsLT5tYXhfbikgJiYgKGZfb3V0ID49IGNsb2NrKSk7CiAJCXAgKz0gcF9pbmM7CiAJfSB3aGlsZSAoKHAgPD0gcF9tYXgpKTsKIApAQCAtODE4LDIxICs5MzcsMjIgQEAKIAltID0gbV9iZXN0OwogCW4gPSBuX2Jlc3Q7CiAJcCA9IHBfYmVzdDsKLQlzcGxpdG0obSwgJm0xLCAmbTIpOwotCXNwbGl0cChwLCAmcDEsICZwMik7CisJc3BsaXRtKGluZGV4LCBtLCAmbTEsICZtMik7CisJc3BsaXRwKGluZGV4LCBwLCAmcDEsICZwMik7CiAJbjEgPSBuIC0gMjsKIAogCURCR19NU0coIm0sIG4sIHA6ICVkICglZCwlZCksICVkICglZCksICVkICglZCwlZCksICIKIAkJImY6ICVkICglZCksIFZDTzogJWRcbiIsCiAJCW0sIG0xLCBtMiwgbiwgbjEsIHAsIHAxLCBwMiwKLQkJQ0FMQ19WQ0xPQ0szKG0sIG4sIHApLCBDQUxDX1ZDTE9DSyhtMSwgbTIsIG4xLCBwMSwgcDIpLAotCQlDQUxDX1ZDTE9DSzMobSwgbiwgcCkgKiBwKTsKKwkJY2FsY192Y2xvY2szKGluZGV4LCBtLCBuLCBwKSwKKwkJY2FsY192Y2xvY2soaW5kZXgsIG0xLCBtMiwgbjEsIHAxLCBwMiwgMCksCisJCWNhbGNfdmNsb2NrMyhpbmRleCwgbSwgbiwgcCkgKiBwKTsKIAkqcmV0bTEgPSBtMTsKIAkqcmV0bTIgPSBtMjsKIAkqcmV0biA9IG4xOwogCSpyZXRwMSA9IHAxOwogCSpyZXRwMiA9IHAyOwotCSpyZXRjbG9jayA9IENBTENfVkNMT0NLKG0xLCBtMiwgbjEsIHAxLCBwMik7CisJKnJldGNsb2NrID0gY2FsY192Y2xvY2soaW5kZXgsIG0xLCBtMiwgbjEsIHAxLCBwMiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg2MCw2ICs5ODAsNyBAQAogCXUzMiB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2Ymxhbmtfc3RhcnQsIHZibGFua19lbmQsIHZ0b3RhbCwgdmFjdGl2ZTsKIAl1MzIgdnN5bmNfcG9sLCBoc3luY19wb2w7CiAJdTMyICp2cywgKnZiLCAqdnQsICpocywgKmhiLCAqaHQsICpzcywgKnBpcGVfY29uZjsKKwl1MzIgc3RyaWRlX2FsaWdubWVudDsKIAogCURCR19NU0coImludGVsZmJod19tb2RlX3RvX2h3XG4iKTsKIApAQCAtOTI5LDcgKzEwNTAsOCBAQAogCS8qIERlc2lyZWQgY2xvY2sgaW4ga0h6ICovCiAJY2xvY2tfdGFyZ2V0ID0gMTAwMDAwMDAwMCAvIHZhci0+cGl4Y2xvY2s7CiAKLQlpZiAoY2FsY19wbGxfcGFyYW1zKGNsb2NrX3RhcmdldCwgJm0xLCAmbTIsICZuLCAmcDEsICZwMiwgJmNsb2NrKSkgeworCWlmIChjYWxjX3BsbF9wYXJhbXMoZGluZm8tPnBsbF9pbmRleCwgY2xvY2tfdGFyZ2V0LCAmbTEsICZtMiwKKwkJCSAgICAmbiwgJnAxLCAmcDIsICZjbG9jaykpIHsKIAkJV1JOX01TRygiY2FsY19wbGxfcGFyYW1zIGZhaWxlZFxuIik7CiAJCXJldHVybiAxOwogCX0KQEAgLTk0OSw3ICsxMDcxLDE0IEBACiAJKmRwbGwgJj0gfkRQTExfUDFfRk9SQ0VfRElWMjsKIAkqZHBsbCAmPSB+KChEUExMX1AyX01BU0sgPDwgRFBMTF9QMl9TSElGVCkgfAogCQkgICAoRFBMTF9QMV9NQVNLIDw8IERQTExfUDFfU0hJRlQpKTsKLQkqZHBsbCB8PSAocDIgPDwgRFBMTF9QMl9TSElGVCkgfCAocDEgPDwgRFBMTF9QMV9TSElGVCk7CisKKwlpZiAoSVNfSTlYWChkaW5mbykpIHsKKwkJKmRwbGwgfD0gKHAyIDw8IERQTExfSTlYWF9QMl9TSElGVCk7CisJCSpkcGxsIHw9ICgxIDw8IChwMSAtIDEpKSA8PCBEUExMX1AxX1NISUZUOworCX0gZWxzZSB7CisJCSpkcGxsIHw9IChwMiA8PCBEUExMX1AyX1NISUZUKSB8IChwMSA8PCBEUExMX1AxX1NISUZUKTsKKwl9CisKIAkqZnAwID0gKG4gPDwgRlBfTl9ESVZJU09SX1NISUZUKSB8CiAJICAgICAgIChtMSA8PCBGUF9NMV9ESVZJU09SX1NISUZUKSB8CiAJICAgICAgIChtMiA8PCBGUF9NMl9ESVZJU09SX1NISUZUKTsKQEAgLTEwNTQsNyArMTE4Myw3IEBACiAJKnNzID0gKGhhY3RpdmUgPDwgU1JDX1NJWkVfSE9SSVpfU0hJRlQpIHwKIAkgICAgICAodmFjdGl2ZSA8PCBTUkNfU0laRV9WRVJUX1NISUZUKTsKIAotCWh3LT5kaXNwX2Ffc3RyaWRlID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlody0+ZGlzcF9hX3N0cmlkZSA9IGRpbmZvLT5waXRjaDsKIAlEQkdfTVNHKCJwaXRjaCBpcyAlZFxuIiwgaHctPmRpc3BfYV9zdHJpZGUpOwogCiAJaHctPmRpc3BfYV9iYXNlID0gaHctPmRpc3BfYV9zdHJpZGUgKiB2YXItPnlvZmZzZXQgKwpAQCAtMTA2Myw5ICsxMTkyLDExIEBACiAJaHctPmRpc3BfYV9iYXNlICs9IGRpbmZvLT5mYi5vZmZzZXQgPDwgMTI7CiAKIAkvKiBDaGVjayBzdHJpZGUgYWxpZ25tZW50LiAqLwotCWlmIChody0+ZGlzcF9hX3N0cmlkZSAlIFNUUklERV9BTElHTk1FTlQgIT0gMCkgeworCXN0cmlkZV9hbGlnbm1lbnQgPSBJU19JOVhYKGRpbmZvKSA/IFNUUklERV9BTElHTk1FTlRfSTlYWCA6CisJCQkJCSAgICBTVFJJREVfQUxJR05NRU5UOworCWlmIChody0+ZGlzcF9hX3N0cmlkZSAlIHN0cmlkZV9hbGlnbm1lbnQgIT0gMCkgewogCQlXUk5fTVNHKCJkaXNwbGF5IHN0cmlkZSAlZCBoYXMgYmFkIGFsaWdubWVudCAlZFxuIiwKLQkJCWh3LT5kaXNwX2Ffc3RyaWRlLCBTVFJJREVfQUxJR05NRU5UKTsKKwkJCWh3LT5kaXNwX2Ffc3RyaWRlLCBzdHJpZGVfYWxpZ25tZW50KTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xMDg3LDYgKzEyMTgsNyBAQAogCXUzMiBoc3luY19yZWcsIGh0b3RhbF9yZWcsIGhibGFua19yZWc7CiAJdTMyIHZzeW5jX3JlZywgdnRvdGFsX3JlZywgdmJsYW5rX3JlZzsKIAl1MzIgc3JjX3NpemVfcmVnOworCXUzMiBjb3VudCwgdG1wX3ZhbFszXTsKIAogCS8qIEFzc3VtZSBzaW5nbGUgcGlwZSwgZGlzcGxheSBwbGFuZSBBLCBhbmFsb2cgQ1JULiAqLwogCkBAIC0xMTU1LDYgKzEyODcsMjcgQEAKIAkJc3JjX3NpemVfcmVnID0gU1JDX1NJWkVfQTsKIAl9CiAKKwkvKiB0dXJuIG9mZiBwaXBlICovCisJdG1wID0gSU5SRUcocGlwZV9jb25mX3JlZyk7CisJdG1wICY9IH5QSVBFQ09ORl9FTkFCTEU7CisJT1VUUkVHKHBpcGVfY29uZl9yZWcsIHRtcCk7CisKKwljb3VudCA9IDA7CisJZG8geworCQl0bXBfdmFsW2NvdW50JTNdID0gSU5SRUcoMHg3MDAwMCk7CisJCWlmICgodG1wX3ZhbFswXSA9PSB0bXBfdmFsWzFdKSAmJiAodG1wX3ZhbFsxXT09dG1wX3ZhbFsyXSkpCisJCQlicmVhazsKKwkJY291bnQrKzsKKwkJdWRlbGF5KDEpOworCQlpZiAoY291bnQgJSAyMDAgPT0gMCkgeworCQkJdG1wID0gSU5SRUcocGlwZV9jb25mX3JlZyk7CisJCQl0bXAgJj0gflBJUEVDT05GX0VOQUJMRTsKKwkJCU9VVFJFRyhwaXBlX2NvbmZfcmVnLCB0bXApOworCQl9CisJfSB3aGlsZShjb3VudCA8IDIwMDApOworCisJT1VUUkVHKEFEUEEsIElOUkVHKEFEUEEpICYgfkFEUEFfREFDX0VOQUJMRSk7CisKIAkvKiBEaXNhYmxlIHBsYW5lcyBBIGFuZCBCLiAqLwogCXRtcCA9IElOUkVHKERTUEFDTlRSKTsKIAl0bXAgJj0gfkRJU1BQTEFORV9QTEFORV9FTkFCTEU7CkBAIC0xMTYzLDE5ICsxMzE2LDIxIEBACiAJdG1wICY9IH5ESVNQUExBTkVfUExBTkVfRU5BQkxFOwogCU9VVFJFRyhEU1BCQ05UUiwgdG1wKTsKIAotCS8qIFdhaXQgZm9yIHZibGFuay4gIEZvciBub3csIGp1c3Qgd2FpdCBmb3IgYSA1MEh6IGN5Y2xlICgyMG1zKSkgKi8KKwkvKiBXYWl0IGZvciB2YmxhbmsuIEZvciBub3csIGp1c3Qgd2FpdCBmb3IgYSA1MEh6IGN5Y2xlICgyMG1zKSkgKi8KIAltZGVsYXkoMjApOwogCisJT1VUUkVHKERWT0IsIElOUkVHKERWT0IpICYgflBPUlRfRU5BQkxFKTsKKwlPVVRSRUcoRFZPQywgSU5SRUcoRFZPQykgJiB+UE9SVF9FTkFCTEUpOworCU9VVFJFRyhBRFBBLCBJTlJFRyhBRFBBKSAmIH5BRFBBX0RBQ19FTkFCTEUpOworCiAJLyogRGlzYWJsZSBTeW5jICovCiAJdG1wID0gSU5SRUcoQURQQSk7CiAJdG1wICY9IH5BRFBBX0RQTVNfQ09OVFJPTF9NQVNLOwogCXRtcCB8PSBBRFBBX0RQTVNfRDM7CiAJT1VUUkVHKEFEUEEsIHRtcCk7CiAKLQkvKiB0dXJuIG9mZiBwaXBlICovCi0JdG1wID0gSU5SRUcocGlwZV9jb25mX3JlZyk7Ci0JdG1wICY9IH5QSVBFQ09ORl9FTkFCTEU7Ci0JT1VUUkVHKHBpcGVfY29uZl9yZWcsIHRtcCk7CisJLyogZG8gc29tZSBmdW5reSBtYWdpYyAtIHh5enp5ICovCisJT1VUUkVHKDB4NjEyMDQsIDB4YWJjZDAwMDApOwogCiAJLyogdHVybiBvZmYgUExMICovCiAJdG1wID0gSU5SRUcoZHBsbF9yZWcpOwpAQCAtMTE4MywxMCArMTMzOCwyMyBAQAogCU9VVFJFRyhkcGxsX3JlZywgdG1wKTsKIAogCS8qIFNldCBQTEwgcGFyYW1ldGVycyAqLwotCU9VVFJFRyhkcGxsX3JlZywgKmRwbGwgJiB+RFBMTF9WQ09fRU5BQkxFKTsKIAlPVVRSRUcoZnAwX3JlZywgKmZwMCk7CiAJT1VUUkVHKGZwMV9yZWcsICpmcDEpOwogCisJLyogRW5hYmxlIFBMTCAqLworCU9VVFJFRyhkcGxsX3JlZywgKmRwbGwpOworCisJLyogU2V0IERWT3MgQi9DICovCisJT1VUUkVHKERWT0IsIGh3LT5kdm9iKTsKKwlPVVRSRUcoRFZPQywgaHctPmR2b2MpOworCisJLyogdW5kbyBmdW5reSBtYWdpYyAqLworCU9VVFJFRygweDYxMjA0LCAweDAwMDAwMDAwKTsKKworCS8qIFNldCBBRFBBICovCisJT1VUUkVHKEFEUEEsIElOUkVHKEFEUEEpIHwgQURQQV9EQUNfRU5BQkxFKTsKKwlPVVRSRUcoQURQQSwgKGh3LT5hZHBhICYgfihBRFBBX0RQTVNfQ09OVFJPTF9NQVNLKSkgfCBBRFBBX0RQTVNfRDMpOworCiAJLyogU2V0IHBpcGUgcGFyYW1ldGVycyAqLwogCU9VVFJFRyhoc3luY19yZWcsICpocyk7CiAJT1VUUkVHKGhibGFua19yZWcsICpoYik7CkBAIC0xMTk2LDE4ICsxMzY0LDYgQEAKIAlPVVRSRUcodnRvdGFsX3JlZywgKnZ0KTsKIAlPVVRSRUcoc3JjX3NpemVfcmVnLCAqc3MpOwogCi0JLyogU2V0IERWT3MgQi9DICovCi0JT1VUUkVHKERWT0IsIGh3LT5kdm9iKTsKLQlPVVRSRUcoRFZPQywgaHctPmR2b2MpOwotCi0JLyogU2V0IEFEUEEgKi8KLQlPVVRSRUcoQURQQSwgKGh3LT5hZHBhICYgfihBRFBBX0RQTVNfQ09OVFJPTF9NQVNLKSkgfCBBRFBBX0RQTVNfRDMpOwotCi0JLyogRW5hYmxlIFBMTCAqLwotCXRtcCA9IElOUkVHKGRwbGxfcmVnKTsKLQl0bXAgfD0gRFBMTF9WQ09fRU5BQkxFOwotCU9VVFJFRyhkcGxsX3JlZywgdG1wKTsKLQogCS8qIEVuYWJsZSBwaXBlICovCiAJT1VUUkVHKHBpcGVfY29uZl9yZWcsICpwaXBlX2NvbmYgfCBQSVBFQ09ORl9FTkFCTEUpOwogCkBAIC0xMjMxLDcgKzEzODcsNyBAQAogCQkJT1VUUkVHKERTUEFDTlRSLAogCQkJICAgICAgIGh3LT5kaXNwX2FfY3RybHxESVNQUExBTkVfUExBTkVfRU5BQkxFKTsKIAkJCW1kZWxheSgxKTsKLSAgICAgICAgICAgICAgfQorCQl9CiAJfQogCiAJT1VUUkVHKERTUEFDTlRSLCBody0+ZGlzcF9hX2N0cmwgJiB+RElTUFBMQU5FX1BMQU5FX0VOQUJMRSk7CkBAIC0xNjE2LDcgKzE3NzIsNyBAQAogCURCR19NU0coImludGVsZmJod19jdXJzb3JfaW5pdFxuIik7CiAjZW5kaWYKIAotCWlmIChkaW5mby0+bW9iaWxlKSB7CisJaWYgKGRpbmZvLT5tb2JpbGUgfHwgSVNfSTlYWChkaW5mbykpIHsKIAkJaWYgKCFkaW5mby0+Y3Vyc29yLnBoeXNpY2FsKQogCQkJcmV0dXJuOwogCQl0bXAgPSBJTlJFRyhDVVJTT1JfQV9DT05UUk9MKTsKQEAgLTE2NDksNyArMTgwNSw3IEBACiAjZW5kaWYKIAogCWRpbmZvLT5jdXJzb3Jfb24gPSAwOwotCWlmIChkaW5mby0+bW9iaWxlKSB7CisJaWYgKGRpbmZvLT5tb2JpbGUgfHwgSVNfSTlYWChkaW5mbykpIHsKIAkJaWYgKCFkaW5mby0+Y3Vyc29yLnBoeXNpY2FsKQogCQkJcmV0dXJuOwogCQl0bXAgPSBJTlJFRyhDVVJTT1JfQV9DT05UUk9MKTsKQEAgLTE2NzksNyArMTgzNSw3IEBACiAJaWYgKGRpbmZvLT5jdXJzb3JfYmxhbmtlZCkKIAkJcmV0dXJuOwogCi0JaWYgKGRpbmZvLT5tb2JpbGUpIHsKKwlpZiAoZGluZm8tPm1vYmlsZSB8fCBJU19JOVhYKGRpbmZvKSkgewogCQlpZiAoIWRpbmZvLT5jdXJzb3IucGh5c2ljYWwpCiAJCQlyZXR1cm47CiAJCXRtcCA9IElOUkVHKENVUlNPUl9BX0NPTlRST0wpOwpAQCAtMTcwNSwxNCArMTg2MSwxOCBAQAogI2VuZGlmCiAKIAkvKgotCSAqIFNldHMgdGhlIHBvc2l0aW9uLiAgVGhlIGNvb3JkaW5hdGVzIGFyZSBhc3N1bWVkIHRvIGFscmVhZHkKLQkgKiBoYXZlIGFueSBvZmZzZXQgYWRqdXN0ZWQuICBBc3N1bWUgdGhhdCB0aGUgY3Vyc29yIGlzIG5ldmVyCisJICogU2V0cyB0aGUgcG9zaXRpb24uIFRoZSBjb29yZGluYXRlcyBhcmUgYXNzdW1lZCB0byBhbHJlYWR5CisJICogaGF2ZSBhbnkgb2Zmc2V0IGFkanVzdGVkLiBBc3N1bWUgdGhhdCB0aGUgY3Vyc29yIGlzIG5ldmVyCiAJICogY29tcGxldGVseSBvZmYtc2NyZWVuLCBhbmQgdGhhdCB4LCB5IGFyZSBhbHdheXMgPj0gMC4KIAkgKi8KIAogCXRtcCA9ICgoeCAmIENVUlNPUl9QT1NfTUFTSykgPDwgQ1VSU09SX1hfU0hJRlQpIHwKIAkgICAgICAoKHkgJiBDVVJTT1JfUE9TX01BU0spIDw8IENVUlNPUl9ZX1NISUZUKTsKIAlPVVRSRUcoQ1VSU09SX0FfUE9TSVRJT04sIHRtcCk7CisKKwlpZiAoSVNfSTlYWChkaW5mbykpIHsKKwkJT1VUUkVHKENVUlNPUl9BX0JBU0VBRERSLCBkaW5mby0+Y3Vyc29yLnBoeXNpY2FsKTsKKwl9CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuaCBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuaAppbmRleCBiYTE5MjAxLi4xMGFjZGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmgKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5oCkBAIC0xMzMsNiArMTMzLDcgQEAKICNkZWZpbmUgRFBMTF9WR0FfTU9ERV9ESVNBQkxFCQkoMSA8PCAyOCkKICNkZWZpbmUgRFBMTF9QMl9NQVNLCQkJMQogI2RlZmluZSBEUExMX1AyX1NISUZUCQkJMjMKKyNkZWZpbmUgRFBMTF9JOVhYX1AyX1NISUZUICAgICAgICAgICAgICAyNAogI2RlZmluZSBEUExMX1AxX0ZPUkNFX0RJVjIJCSgxIDw8IDIxKQogI2RlZmluZSBEUExMX1AxX01BU0sJCQkweDFmCiAjZGVmaW5lIERQTExfUDFfU0hJRlQJCQkxNgpAQCAtMTU1LDI5ICsxNTYsOCBAQAogLyogUExMIHBhcmFtZXRlcnMgKHRoZXNlIGFyZSBmb3IgODUyR00vODU1R00vODY1RywgY2hlY2sgZWFybGllciBjaGlwcykuICovCiAvKiBDbG9jayB2YWx1ZXMgYXJlIGluIHVuaXRzIG9mIGtIeiAqLwogI2RlZmluZSBQTExfUkVGQ0xLCQk0ODAwMAotI2RlZmluZSBNSU5fVkNPX0ZSRVEJCTkzMDAwMAotI2RlZmluZSBNQVhfVkNPX0ZSRVEJCTE0MDAwMDAKICNkZWZpbmUgTUlOX0NMT0NLCQkyNTAwMAogI2RlZmluZSBNQVhfQ0xPQ0sJCTM1MDAwMAotI2RlZmluZSBQX1RSQU5TSVRJT05fQ0xPQ0sJMTY1MDAwCi0jZGVmaW5lIE1JTl9NCQkJMTA4Ci0jZGVmaW5lIE1BWF9NCQkJMTQwCi0jZGVmaW5lIE1JTl9NMQkJCTE4Ci0jZGVmaW5lIE1BWF9NMQkJCTI2Ci0jZGVmaW5lIE1JTl9NMgkJCTYKLSNkZWZpbmUgTUFYX00yCQkJMTYKLSNkZWZpbmUgTUlOX1AJCQk0Ci0jZGVmaW5lIE1BWF9QCQkJMTI4Ci0jZGVmaW5lIE1JTl9QMQkJCTAKLSNkZWZpbmUgTUFYX1AxCQkJMzEKLSNkZWZpbmUgTUlOX04JCQkzCi0jZGVmaW5lIE1BWF9OCQkJMTYKLQotI2RlZmluZSBDQUxDX1ZDTE9DSyhtMSwgbTIsIG4sIHAxLCBwMikgXAotICAgICAgICAoKFBMTF9SRUZDTEsgKiAoNSAqICgobTEpICsgMikgKyAoKG0yKSArIDIpKSAvICgobikgKyAyKSkgLyBcCi0gICAgICAgICgoKHAxKSArIDIpICogKDEgPDwgKHAyICsgMSkpKSkKLQotI2RlZmluZSBDQUxDX1ZDTE9DSzMobSwgbiwgcCkJKChQTExfUkVGQ0xLICogKG0pIC8gKG4pKSAvIChwKSkKIAogLyogVHdvIHBpcGVzICovCiAjZGVmaW5lIFBJUEVfQQkJCTAKQEAgLTUyMiw4ICs1MDIsNyBAQAogCiAKIC8qIGZ1bmN0aW9uIHByb3RveXBlcyAqLwotZXh0ZXJuIGludCBpbnRlbGZiaHdfZ2V0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IGNoYXIgKipuYW1lLAotCQkJCSBpbnQgKmNoaXBzZXQsIGludCAqbW9iaWxlKTsKK2V4dGVybiBpbnQgaW50ZWxmYmh3X2dldF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CiBleHRlcm4gaW50IGludGVsZmJod19nZXRfbWVtb3J5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgKmFwZXJ0dXJlX3NpemUsCiAJCQkJaW50ICpzdG9sZW5fc2l6ZSk7CiBleHRlcm4gaW50IGludGVsZmJod19jaGVja19ub25fY3J0KHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF4aW5lZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWF4aW5lZmIuYwppbmRleCA3NDNlN2FkLi5mODU0MjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21heGluZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXhpbmVmYi5jCkBAIC01NSw3ICs1NSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIG1heGluZWZiX2ZpeCA9IHsKLQkuaWQgPQkJIk1heGluZSBvbmJvYXJkIGdyYXBoaWNzIDEwMjR4NzY4eDgiLAorCS5pZCA9CQkiTWF4aW5lIiwKIAkuc21lbV9sZW4gPQkoMTAyNCo3NjgpLAogCS50eXBlID0JCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywKIAkudmlzdWFsID0JRkJfVklTVUFMX1BTRVVET0NPTE9SLApAQCAtMTA3LDggKzEwNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIG1heGluZWZiX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmZiX2dldF9maXgJPSBnZW5fZ2V0X2ZpeCwKLQkuZmJfZ2V0X3Zhcgk9IGdlbl9nZXRfdmFyLAogCS5mYl9zZXRjb2xyZWcJPSBtYXhpbmVmYl9zZXRjb2xyZWcsCiAJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGY5YjU4NDIuLjIwZjliNTUgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMzkzLDE4ICszOTMsMzAgQEAKIAlib29sICJJbm90aWZ5IGZpbGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBzdXBwb3J0IgogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGlub3RpZnkgc3VwcG9ydCBhbmQgdGhlIGFzc29jaWF0ZWQgc3lzdGVtCi0JICBjYWxscy4gIElub3RpZnkgaXMgYSBmaWxlIGNoYW5nZSBub3RpZmljYXRpb24gc3lzdGVtIGFuZCBhCi0JICByZXBsYWNlbWVudCBmb3IgZG5vdGlmeS4gIElub3RpZnkgZml4ZXMgbnVtZXJvdXMgc2hvcnRjb21pbmdzIGluCi0JICBkbm90aWZ5IGFuZCBpbnRyb2R1Y2VzIHNldmVyYWwgbmV3IGZlYXR1cmVzLiAgSXQgYWxsb3dzIG1vbml0b3JpbmcKLQkgIG9mIGJvdGggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHZpYSBhIHNpbmdsZSBvcGVuIGZkLiAgT3RoZXIgZmVhdHVyZXMKLQkgIGluY2x1ZGUgbXVsdGlwbGUgZmlsZSBldmVudHMsIG9uZS1zaG90IHN1cHBvcnQsIGFuZCB1bm1vdW50CisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBpbm90aWZ5IHN1cHBvcnQuICBJbm90aWZ5IGlzIGEgZmlsZSBjaGFuZ2UKKwkgIG5vdGlmaWNhdGlvbiBzeXN0ZW0gYW5kIGEgcmVwbGFjZW1lbnQgZm9yIGRub3RpZnkuICBJbm90aWZ5IGZpeGVzCisJICBudW1lcm91cyBzaG9ydGNvbWluZ3MgaW4gZG5vdGlmeSBhbmQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmZWF0dXJlcworCSAgaW5jbHVkaW5nIG11bHRpcGxlIGZpbGUgZXZlbnRzLCBvbmUtc2hvdCBzdXBwb3J0LCBhbmQgdW5tb3VudAogCSAgbm90aWZpY2F0aW9uLgogCiAJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIElOT1RJRllfVVNFUgorCWJvb2wgIklub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlIgorCWRlcGVuZHMgb24gSU5PVElGWQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGlub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlLCBpbmNsdWRpbmcgdGhlCisJICBhc3NvY2lhdGVkIHN5c3RlbSBjYWxscy4gIElub3RpZnkgYWxsb3dzIG1vbml0b3Jpbmcgb2YgYm90aCBmaWxlcyBhbmQKKwkgIGRpcmVjdG9yaWVzIHZpYSBhIHNpbmdsZSBvcGVuIGZkLiAgRXZlbnRzIGFyZSByZWFkIGZyb20gdGhlIGZpbGUKKwkgIGRlc2NyaXB0b3IsIHdoaWNoIGlzIGFsc28gc2VsZWN0KCktIGFuZCBwb2xsKCktYWJsZS4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0CisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBRVU9UQQogCWJvb2wgIlF1b3RhIHN1cHBvcnQiCiAJaGVscApAQCAtMTEwMSw2ICsxMTEzLDQ0IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KIAorY29uZmlnIEpGRlMyX0ZTX1hBVFRSCisJYm9vbCAiSkZGUzIgWEFUVFIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTCAmJiAhSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCSAgCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSkZGUzJfRlNfUE9TSVhfQUNMCisJYm9vbCAiSkZGUzIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBKRkZTMl9GU19YQVRUUgorCWRlZmF1bHQgeQorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisJICAKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCSAgCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEpGRlMyX0ZTX1NFQ1VSSVRZCisJYm9vbCAiSkZGUzIgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgamZmczIgZmlsZXN5c3RlbS4KKwkgIAorCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgorCiBjb25maWcgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwogCWJvb2wgIkFkdmFuY2VkIGNvbXByZXNzaW9uIG9wdGlvbnMgZm9yIEpGRlMyIgogCWRlcGVuZHMgb24gSkZGUzJfRlMKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggMDc4ZDNkMS4uZDBlYTZiZiAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAKIAkJaW9wcmlvLm8gcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubwogCiBvYmotJChDT05GSUdfSU5PVElGWSkJCSs9IGlub3RpZnkubworb2JqLSQoQ09ORklHX0lOT1RJRllfVVNFUikJKz0gaW5vdGlmeV91c2VyLm8KIG9iai0kKENPTkZJR19FUE9MTCkJCSs9IGV2ZW50cG9sbC5vCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0Lm8gY29tcGF0X2lvY3RsLm8KIApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jCmluZGV4IGQ0YzJkNjMuLmE0MjE0M2MgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYworKysgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTQxNiwxMCArNDE2LDkgQEAKIAkJCXJldHVybiByZXR2YWw7CiAJfQogCi0JcmV0dmFsID0gLUVJTzsKIAliaCA9IGFmZnNfYnJlYWQoc2IsIG9sZF9kZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKIAlpZiAoIWJoKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiAtRUlPOwogCiAJLyogUmVtb3ZlIGhlYWRlciBmcm9tIGl0cyBwYXJlbnQgZGlyZWN0b3J5LiAqLwogCWFmZnNfbG9ja19kaXIob2xkX2Rpcik7CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDA5OGMxMmIuLjZhMGI5YWQgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC02NTQsOSArNjU0LDEwIEBACiAJCQkJICAgICB3cml0ZV90b192bSwgMCwgJnBhZ2VzW2N1cl9wYWdlXSwgTlVMTCk7CiAJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLQkJaWYgKHJldCA8IGxvY2FsX25yX3BhZ2VzKQorCQlpZiAocmV0IDwgbG9jYWxfbnJfcGFnZXMpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dF91bm1hcDsKLQorCQl9CiAKIAkJb2Zmc2V0ID0gdWFkZHIgJiB+UEFHRV9NQVNLOwogCQlmb3IgKGogPSBjdXJfcGFnZTsgaiA8IHBhZ2VfbGltaXQ7IGorKykgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IDFhMjdlY2IuLjcyNzFiYjAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTEsMyArMSwxMCBAQAorVmVyc2lvbiAxLjQzCistLS0tLS0tLS0tLS0KK1BPU0lYIGxvY2tpbmcgdG8gc2VydmVycyB3aGljaCBzdXBwb3J0IENJRlMgUE9TSVggRXh0ZW5zaW9ucworKGRpc2FibGVkIGJ5IGRlZmF1bHQgY29udHJvbGxlZCBieSBwcm9jL2ZzL2NpZnMvRXhwZXJpbWVudGFsKS4KK0hhbmRsZSBjb252ZXJzaW9uIG9mIGxvbmcgc2hhcmUgbmFtZXMgKGVzcGVjaWFsbHkgQXNpYW4gbGFuZ3VhZ2VzKQordG8gVW5pY29kZSBkdXJpbmcgbW91bnQuIAorCiBWZXJzaW9uIDEuNDIKIC0tLS0tLS0tLS0tLQogRml4IHNsb3cgb3Bsb2NrIGJyZWFrIHdoZW4gbW91bnRlZCB0byBkaWZmZXJlbnQgc2VydmVycyBhdCB0aGUgc2FtZSB0aW1lIGFuZApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggNGU4MjlkYy4uYzk4NzU1ZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC05OSw1ICs5OSw1IEBACiBleHRlcm4gc3NpemVfdAljaWZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgc2l6ZV90KTsKIGV4dGVybiBpbnQgY2lmc19pb2N0bCAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZXAsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS40MiIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNDMiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCAyODc5YmEzLi4zMTBlYTJmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQkJY29uc3QgaW50IHdhaXRGbGFnKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlBvc2l4TG9jayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgX191MTYgc21iX2ZpbGVfaWQsIGNvbnN0IGludCBnZXRfZmxhZywKLQkJCWNvbnN0IF9fdTY0IGxlbiwgY29uc3QgX191NjQgb2Zmc2V0LCAKKwkJCWNvbnN0IF9fdTY0IGxlbiwgc3RydWN0IGZpbGVfbG9jayAqLCAKIAkJCWNvbnN0IF9fdTE2IGxvY2tfdHlwZSwgY29uc3QgaW50IHdhaXRGbGFnKTsKIGV4dGVybiBpbnQgQ0lGU1NNQlREaXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbik7CiBleHRlcm4gaW50IENJRlNTTUJMb2dvZmYoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCBmZDM2ODkyLi45MjU4ODFlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMTM1NSw3ICsxMzU1LDggQEAKIGludAogQ0lGU1NNQlBvc2l4TG9jayhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQljb25zdCBfX3UxNiBzbWJfZmlsZV9pZCwgY29uc3QgaW50IGdldF9mbGFnLCBjb25zdCBfX3U2NCBsZW4sCi0JCWNvbnN0IF9fdTY0IGxrb2Zmc2V0LCBjb25zdCBfX3UxNiBsb2NrX3R5cGUsIGNvbnN0IGludCB3YWl0RmxhZykKKwkJc3RydWN0IGZpbGVfbG9jayAqcExvY2tEYXRhLCBjb25zdCBfX3UxNiBsb2NrX3R5cGUsIAorCQljb25zdCBpbnQgd2FpdEZsYWcpCiB7CiAJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NmaV9yZXEgKnBTTUIgID0gTlVMTDsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JzcCAqcFNNQnIgPSBOVUxMOwpAQCAtMTM2Niw2ICsxMzY3LDEwIEBACiAJX191MTYgcGFyYW1zLCBwYXJhbV9vZmZzZXQsIG9mZnNldCwgYnl0ZV9jb3VudCwgY291bnQ7CiAKIAljRllJKDEsICgiUG9zaXggTG9jayIpKTsKKworCWlmKHBMb2NrRGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gRUlOVkFMOworCiAJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQik7CiAKIAlpZiAocmMpCkBAIC0xNDA0LDEwICsxNDA5LDEwIEBACiAKIAlwYXJtX2RhdGEtPmxvY2tfdHlwZSA9IGNwdV90b19sZTE2KGxvY2tfdHlwZSk7CiAJaWYod2FpdEZsYWcpCi0JCXBhcm1fZGF0YS0+bG9ja19mbGFncyA9IDE7CisJCXBhcm1fZGF0YS0+bG9ja19mbGFncyA9IGNwdV90b19sZTE2KDEpOwogCXBhcm1fZGF0YS0+cGlkID0gY3B1X3RvX2xlMzIoY3VycmVudC0+dGdpZCk7Ci0JcGFybV9kYXRhLT5zdGFydCA9IGxrb2Zmc2V0OwotCXBhcm1fZGF0YS0+bGVuZ3RoID0gbGVuOyAgLyogbm9ybWFsaXplIG5lZ2F0aXZlIG51bWJlcnMgKi8KKwlwYXJtX2RhdGEtPnN0YXJ0ID0gY3B1X3RvX2xlNjQocExvY2tEYXRhLT5mbF9zdGFydCk7CisJcGFybV9kYXRhLT5sZW5ndGggPSBjcHVfdG9fbGU2NChsZW4pOyAgLyogbm9ybWFsaXplIG5lZ2F0aXZlIG51bWJlcnMgKi8KIAogCXBTTUItPkRhdGFPZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOwogCXBTTUItPkZpZCA9IHNtYl9maWxlX2lkOwpAQCAtMTQxOSw4ICsxNDI0LDMzIEBACiAJCQkoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIFBvc2l4IExvY2sgPSAlZCIsIHJjKSk7Ci0JfQorCX0gZWxzZSBpZiAoZ2V0X2ZsYWcpIHsKKwkJLyogbG9jayBzdHJ1Y3R1cmUgY2FuIGJlIHJldHVybmVkIG9uIGdldCAqLworCQlfX3UxNiBkYXRhX29mZnNldDsKKwkJX191MTYgZGF0YV9jb3VudDsKKwkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKKwkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgc2l6ZW9mKHN0cnVjdCBjaWZzX3Bvc2l4X2xvY2spKSkgeworCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KKwkJCWdvdG8gcGxrX2Vycl9leGl0OworCQl9CisJCWlmKHBMb2NrRGF0YSA9PSBOVUxMKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIHBsa19lcnJfZXhpdDsKKwkJfQorCQlkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKKwkJZGF0YV9jb3VudCAgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YUNvdW50KTsKKwkJaWYoZGF0YV9jb3VudCA8IHNpemVvZihzdHJ1Y3QgY2lmc19wb3NpeF9sb2NrKSkgeworCQkJcmMgPSAtRUlPOworCQkJZ290byBwbGtfZXJyX2V4aXQ7CisJCX0KKwkJcGFybV9kYXRhID0gKHN0cnVjdCBjaWZzX3Bvc2l4X2xvY2sgKikKKwkJCSgoY2hhciAqKSZwU01Cci0+aGRyLlByb3RvY29sICsgZGF0YV9vZmZzZXQpOworCQlpZihwYXJtX2RhdGEtPmxvY2tfdHlwZSA9PSBjcHVfdG9fbGUxNihDSUZTX1VOTENLKSkKKwkJCXBMb2NrRGF0YS0+ZmxfdHlwZSA9IEZfVU5MQ0s7CisJfQorIAorcGxrX2Vycl9leGl0OgogCWlmIChwU01CKQogCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHBTTUIpOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGQyZWM4MDYuLmJhZTE0NzkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0yMTQ4LDYgKzIxNDgsOCBAQAogLyogV2UgbG9vayBmb3Igb2J2aW91cyBtZXNzZWQgdXAgYmNjIG9yIHN0cmluZ3MgaW4gcmVzcG9uc2Ugc28gd2UgZG8gbm90IGdvIG9mZgogICAgdGhlIGVuZCBzaW5jZSAoYXQgbGVhc3QpIFdJTjJLIGFuZCBXaW5kb3dzIFhQIGhhdmUgYSBtYWpvciBidWcgaW4gbm90IG51bGwKICAgIHRlcm1pbmF0aW5nIGxhc3QgVW5pY29kZSBzdHJpbmcgaW4gcmVzcG9uc2UgICovCisJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJc2VzLT5zZXJ2ZXJPUyA9IGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYoc2VzLT5zZXJ2ZXJPUyA9PSBOVUxMKQogCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTIxNjAsNiArMjE2Miw4IEBACiAJCQkJaWYgKHJlbWFpbmluZ193b3JkcyA+IDApIHsKIAkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKWJjY19wdHIsCiAJCQkJCQkJIHJlbWFpbmluZ193b3Jkcy0xKTsKKwkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCXNlcy0+c2VydmVyTk9TID0ga3phbGxvYygyICogKGxlbiArIDEpLEdGUF9LRVJORUwpOwogCQkJCQlpZihzZXMtPnNlcnZlck5PUyA9PSBOVUxMKQogCQkJCQkJZ290byBzZXNzc2V0dXBfbm9tZW07CkBAIC0yMTc3LDYgKzIxODEsOCBAQAogCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLCByZW1haW5pbmdfd29yZHMpOwogICAgICAgICAgIC8qIGxhc3Qgc3RyaW5nIGlzIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkIChmb3IgZS5nLiBmb3IgV2luZG93cyBYUCAmIDIwMDApICovCisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkgICAga3phbGxvYygyKihsZW4rMSksR0ZQX0tFUk5FTCk7CiAJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbiA9PSBOVUxMKQpAQCAtMjE4NywxNSArMjE5MywyMiBAQAogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW5bMipsZW5dID0gMDsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluWzErKDIqbGVuKV0gPSAwOwogCQkJCQl9IC8qIGVsc2Ugbm8gbW9yZSByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gc3RyaW5nICovCi0JCQkJCWVsc2UKKwkJCQkJZWxzZSB7CisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IAogCQkJCQkJCWt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJCQkJCX0KIAkJCQl9IGVsc2UgewkvKiBubyByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gYW5kIE5PUyBzdHJpbmcgKi8KIAkJCQkJLyogaWYgdGhlc2Uga2NhbGxvY3MgZmFpbCBub3QgbXVjaCB3ZQogCQkJCQkgICBjYW4gZG8sIGJ1dCBiZXR0ZXIgdG8gbm90IGZhaWwgdGhlCiAJCQkJCSAgIHNlc3NzZXR1cCBpdHNlbGYgKi8KKwkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJICAgIGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQlzZXMtPnNlcnZlck5PUyA9CiAJCQkJCSAgICBremFsbG9jKDIsIEdGUF9LRVJORUwpOwogCQkJCX0KQEAgLTIyMDQsNiArMjIxNyw4IEBACiAJCQkJaWYgKCgobG9uZykgYmNjX3B0ciArIGxlbikgLSAobG9uZykKIAkJCQkgICAgcEJ5dGVBcmVhKHNtYl9idWZmZXJfcmVzcG9uc2UpCiAJCQkJCSAgICA8PSBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQlzZXMtPnNlcnZlck9TID0ga3phbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOwogCQkJCQlpZihzZXMtPnNlcnZlck9TID09IE5VTEwpCiAJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTIyMTQsNiArMjIyOSw4IEBACiAJCQkJCWJjY19wdHIrKzsKIAogCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHNlcy0+c2VydmVyTk9TID09IE5VTEwpCiAJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTIyMjMsNiArMjI0MCw4IEBACiAJCQkJCWJjY19wdHIrKzsKIAogCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CiAJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluID09IE5VTEwpCiAJCQkJCQlnb3RvIHNlc3NzZXR1cF9ub21lbTsKQEAgLTI0MjcsNiArMjQ0Niw4IEBACiAvKiBXZSBsb29rIGZvciBvYnZpb3VzIG1lc3NlZCB1cCBiY2Mgb3Igc3RyaW5ncyBpbiByZXNwb25zZSBzbyB3ZSBkbyBub3QgZ28gb2ZmCiAgICB0aGUgZW5kIHNpbmNlIChhdCBsZWFzdCkgV0lOMksgYW5kIFdpbmRvd3MgWFAgaGF2ZSBhIG1ham9yIGJ1ZyBpbiBub3QgbnVsbAogICAgdGVybWluYXRpbmcgbGFzdCBVbmljb2RlIHN0cmluZyBpbiByZXNwb25zZSAgKi8KKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQlzZXMtPnNlcnZlck9TID0KIAkJCQkJICAgIGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLApAQCAtMjQ0MSw2ICsyNDYyLDggQEAKIAkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKiliY2NfcHRyLAogCQkJCQkJCQkgcmVtYWluaW5nX3dvcmRzCiAJCQkJCQkJCSAtIDEpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPQogCQkJCQkJICAgIGt6YWxsb2MoMiAqIChsZW4gKyAxKSwKIAkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CkBAIC0yNDU0LDcgKzI0NzcsOSBAQAogCQkJCQkJcmVtYWluaW5nX3dvcmRzIC09IGxlbiArIDE7CiAJCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKikgYmNjX3B0ciwgcmVtYWluaW5nX3dvcmRzKTsJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGFzdCBzdHJpbmcgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGZvciBlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KKyAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3Qgc3RyaW5nIG5vdCBudWxsIHRlcm1pbmF0ZWQgKGUuZy5XaW5kb3dzIFhQLzIwMDApICovCisJCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MoMioobGVuKzEpLEdGUF9LRVJORUwpOwogCQkJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlckRvbWFpbiwKIAkJCQkJCQkgICAgIChfX2xlMTYgKiliY2NfcHRyLCAKQEAgLTI0NjMsMTEgKzI0ODgsMTggQEAKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpblsyKmxlbl0gPSAwOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluWzErKDIqbGVuKV0gPSAwOwogCQkJCQkJfSAvKiBlbHNlIG5vIG1vcmUgcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIHN0cmluZyAqLwotCQkJCQkJZWxzZQorCQkJCQkJZWxzZSB7CisJCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkJICAgIGt6YWxsb2MoMixHRlBfS0VSTkVMKTsKLQkJCQkJfSBlbHNlIHsJLyogbm8gcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIGFuZCBOT1Mgc3RyaW5nICovCisJCQkJCQl9CisJCQkJCX0gZWxzZSB7Lyogbm8gcm9vbSB1c2UgZHVtbXkgZG9tYWluJk5PUyAqLworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKDIsIEdGUF9LRVJORUwpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKDIsIEdGUF9LRVJORUwpOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsJLyogQVNDSUkgKi8KQEAgLTI0NzYsNiArMjUwOCw4IEBACiAJCQkJCWlmICgoKGxvbmcpIGJjY19wdHIgKyBsZW4pIC0gKGxvbmcpCiAJCQkJCSAgICBwQnl0ZUFyZWEoc21iX2J1ZmZlcl9yZXNwb25zZSkKIAkJCQkJICAgIDw9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSkgeworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAkJCQkJCXNlcy0+c2VydmVyT1MgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck9TLCBiY2NfcHRyLCBsZW4pOwogCkBAIC0yNDg0LDYgKzI1MTgsOCBAQAogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKGxlbiArIDEsR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyTk9TLCBiY2NfcHRyLCBsZW4pOwogCQkJCQkJYmNjX3B0ciArPSBsZW47CkBAIC0yNDkxLDYgKzI1MjcsOCBAQAogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJc2VzLT5zZXJ2ZXJEb21haW4gPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlckRvbWFpbiwgYmNjX3B0ciwgbGVuKTsKIAkJCQkJCWJjY19wdHIgKz0gbGVuOwpAQCAtMjcyOCw2ICsyNzY2LDggQEAKIC8qIFdlIGxvb2sgZm9yIG9idmlvdXMgbWVzc2VkIHVwIGJjYyBvciBzdHJpbmdzIGluIHJlc3BvbnNlIHNvIHdlIGRvIG5vdCBnbyBvZmYKICAgIHRoZSBlbmQgc2luY2UgKGF0IGxlYXN0KSBXSU4ySyBhbmQgV2luZG93cyBYUCBoYXZlIGEgbWFqb3IgYnVnIGluIG5vdCBudWxsCiAgICB0ZXJtaW5hdGluZyBsYXN0IFVuaWNvZGUgc3RyaW5nIGluIHJlc3BvbnNlICAqLworCQkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCXNlcy0+c2VydmVyT1MgPQogCQkJCQkgICAga3phbGxvYygyICogKGxlbiArIDEpLCBHRlBfS0VSTkVMKTsKIAkJCQkJY2lmc19zdHJmcm9tVUNTX2xlKHNlcy0+c2VydmVyT1MsCkBAIC0yNzQzLDYgKzI3ODMsOCBAQAogCQkJCQkJCQkgYmNjX3B0ciwKIAkJCQkJCQkJIHJlbWFpbmluZ193b3JkcwogCQkJCQkJCQkgLSAxKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKDIgKiAobGVuICsgMSksCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjc2MCw2ICsyODAyLDggQEAKIAkJCQkJCWlmIChyZW1haW5pbmdfd29yZHMgPiAwKSB7CiAJCQkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLCByZW1haW5pbmdfd29yZHMpOwkKICAgICAgICAgICAgLyogbGFzdCBzdHJpbmcgaXMgbm90IGFsd2F5cyBudWxsIHRlcm1pbmF0ZWQgKGZvciBlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KKwkJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJCQkgICAga3phbGxvYygyICoKIAkJCQkJCQkJICAgIChsZW4gKwpAQCAtMjc3NywxMyArMjgyMSwyMCBAQAogCQkJCQkJCQlbMSArICgyICogbGVuKV0KIAkJCQkJCQkgICAgPSAwOwogCQkJCQkJfSAvKiBlbHNlIG5vIG1vcmUgcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIHN0cmluZyAqLwotCQkJCQkJZWxzZQorCQkJCQkJZWxzZSB7CisJCQkJCQkJaWYoc2VzLT5zZXJ2ZXJEb21haW4pCisJCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkJICAgIGt6YWxsb2MoMiwKIAkJCQkJCQkJICAgIEdGUF9LRVJORUwpOworCQkJCQkJfQogCQkJCQl9IGVsc2UgewkvKiBubyByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gYW5kIE5PUyBzdHJpbmcgKi8KKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKTsKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9CiAJCQkJCQkgICAga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKDIsIEdGUF9LRVJORUwpOwogCQkJCQl9CkBAIC0yNzkyLDYgKzI4NDMsOCBAQAogCQkJCQlpZiAoKChsb25nKSBiY2NfcHRyICsgbGVuKSAtIChsb25nKQogCQkJCQkgICAgcEJ5dGVBcmVhKHNtYl9idWZmZXJfcmVzcG9uc2UpCiAJCQkJCSAgICA8PSBCQ0Moc21iX2J1ZmZlcl9yZXNwb25zZSkpIHsKKwkJCQkJCWlmKHNlcy0+c2VydmVyT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJCQkJCQlzZXMtPnNlcnZlck9TID0KIAkJCQkJCSAgICBremFsbG9jKGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjgwMyw2ICsyODU2LDggQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyTk9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAkJCQkJCXNlcy0+c2VydmVyTk9TID0KIAkJCQkJCSAgICBremFsbG9jKGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMjgxMiw2ICsyODY3LDggQEAKIAkJCQkJCWJjY19wdHIrKzsKIAogCQkJCQkJbGVuID0gc3RybmxlbihiY2NfcHRyLCAxMDI0KTsKKwkJCQkJCWlmKHNlcy0+c2VydmVyRG9tYWluKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJCSAgICBremFsbG9jKGxlbiArIDEsCiAJCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtMzExNiw2ICszMTczLDggQEAKIC8qIFdlIGxvb2sgZm9yIG9idmlvdXMgbWVzc2VkIHVwIGJjYyBvciBzdHJpbmdzIGluIHJlc3BvbnNlIHNvIHdlIGRvIG5vdCBnbyBvZmYKICAgdGhlIGVuZCBzaW5jZSAoYXQgbGVhc3QpIFdJTjJLIGFuZCBXaW5kb3dzIFhQIGhhdmUgYSBtYWpvciBidWcgaW4gbm90IG51bGwKICAgdGVybWluYXRpbmcgbGFzdCBVbmljb2RlIHN0cmluZyBpbiByZXNwb25zZSAgKi8KKwkJCQkJaWYoc2VzLT5zZXJ2ZXJPUykKKwkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQlzZXMtPnNlcnZlck9TID0KIAkJCQkJICAgIGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlck9TLApAQCAtMzEzMSw2ICszMTkwLDggQEAKIAkJCQkJCQkJIGJjY19wdHIsCiAJCQkJCQkJCSByZW1haW5pbmdfd29yZHMKIAkJCQkJCQkJIC0gMSk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9CiAJCQkJCQkgICAga3phbGxvYygyICogKGxlbiArIDEpLAogCQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKQEAgLTMxNDcsNiArMzIwOCw4IEBACiAJCQkJCQlpZiAocmVtYWluaW5nX3dvcmRzID4gMCkgewogCQkJCQkJCWxlbiA9IFVuaVN0cm5sZW4oKHdjaGFyX3QgKikgYmNjX3B0ciwgcmVtYWluaW5nX3dvcmRzKTsJCiAgICAgIC8qIGxhc3Qgc3RyaW5nIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkIChlLmcuIGZvciBXaW5kb3dzIFhQICYgMjAwMCkgKi8KKwkJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0KIAkJCQkJCQkgICAga3phbGxvYygyICoKIAkJCQkJCQkJICAgIChsZW4gKwpAQCAtMzE3MiwxMCArMzIzNSwxNyBAQAogCQkJCQkJCQkJICBsZW4pXQogCQkJCQkJCSAgICA9IDA7CiAJCQkJCQl9IC8qIGVsc2Ugbm8gbW9yZSByb29tIHNvIGNyZWF0ZSBkdW1teSBkb21haW4gc3RyaW5nICovCi0JCQkJCQllbHNlCisJCQkJCQllbHNlIHsKKwkJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOwogCQkJCQkJCXNlcy0+c2VydmVyRG9tYWluID0ga3phbGxvYygyLEdGUF9LRVJORUwpOworCQkJCQkJfQogCQkJCQl9IGVsc2UgeyAgLyogbm8gcm9vbSBzbyBjcmVhdGUgZHVtbXkgZG9tYWluIGFuZCBOT1Mgc3RyaW5nICovCisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJCQkJCQlpZihzZXMtPnNlcnZlck5PUykKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CiAJCQkJCQlzZXMtPnNlcnZlck5PUyA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewkvKiBBU0NJSSAqLwpAQCAtMzE4Myw2ICszMjUzLDggQEAKIAkJCQkJaWYgKCgobG9uZykgYmNjX3B0ciArIGxlbikgLSAKICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBwQnl0ZUFyZWEoc21iX2J1ZmZlcl9yZXNwb25zZSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7CisJCQkJCQlpZihzZXMtPnNlcnZlck9TKQorCQkJCQkJCWtmcmVlKHNlcy0+c2VydmVyT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9IGt6YWxsb2MobGVuICsgMSxHRlBfS0VSTkVMKTsKIAkJCQkJCXN0cm5jcHkoc2VzLT5zZXJ2ZXJPUyxiY2NfcHRyLCBsZW4pOwogCkBAIC0zMTkxLDYgKzMyNjMsOCBAQAogCQkJCQkJYmNjX3B0cisrOwogCiAJCQkJCQlsZW4gPSBzdHJubGVuKGJjY19wdHIsIDEwMjQpOworCQkJCQkJaWYoc2VzLT5zZXJ2ZXJOT1MpCisJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCQkJCQkJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKGxlbisxLEdGUF9LRVJORUwpOwogCQkJCQkJc3RybmNweShzZXMtPnNlcnZlck5PUywgYmNjX3B0ciwgbGVuKTsJCiAJCQkJCQliY2NfcHRyICs9IGxlbjsKQEAgLTMxOTgsNiArMzI3Miw4IEBACiAJCQkJCQliY2NfcHRyKys7CiAKIAkJCQkJCWxlbiA9IHN0cm5sZW4oYmNjX3B0ciwgMTAyNCk7CisJCQkJCQlpZihzZXMtPnNlcnZlckRvbWFpbikKKwkJCQkJCQlrZnJlZShzZXMtPnNlcnZlckRvbWFpbik7CiAJCQkJCQlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MobGVuKzEsR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyRG9tYWluLCBiY2NfcHRyLCBsZW4pOwogCQkJCQkJYmNjX3B0ciArPSBsZW47CkBAIC0zMjgyLDcgKzMzNTgsOCBAQAogCQliY2NfcHRyKys7IC8qIGFsaWduICovCiAJfQogCi0JaWYoc2VzLT5zZXJ2ZXItPnNlY01vZGUgJiAoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKQorCWlmKHNlcy0+c2VydmVyLT5zZWNNb2RlICYgCisJCQkoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKQogCQlzbWJfYnVmZmVyLT5GbGFnczIgfD0gU01CRkxHMl9TRUNVUklUWV9TSUdOQVRVUkU7CiAKIAlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfU1RBVFVTMzIpIHsKQEAgLTMyOTQsOCArMzM3MSwxMCBAQAogCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklDT0RFKSB7CiAJCXNtYl9idWZmZXItPkZsYWdzMiB8PSBTTUJGTEcyX1VOSUNPREU7CiAJCWxlbmd0aCA9Ci0JCSAgICBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgdHJlZSwgMTAwLCBubHNfY29kZXBhZ2UpOwotCQliY2NfcHRyICs9IDIgKiBsZW5ndGg7CS8qIGNvbnZlcnQgbnVtIG9mIDE2IGJpdCB3b3JkcyB0byBieXRlcyAqLworCQkgICAgY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIHRyZWUsIAorCQkJNiAvKiBtYXggdXRmOCBjaGFyIGxlbmd0aCBpbiBieXRlcyAqLyAqIAorCQkJKC8qIHNlcnZlciBsZW4qLyArIDI1NiAvKiBzaGFyZSBsZW4gKi8pLCBubHNfY29kZXBhZ2UpOworCQliY2NfcHRyICs9IDIgKiBsZW5ndGg7CS8qIGNvbnZlcnQgbnVtIDE2IGJpdCB3b3JkcyB0byBieXRlcyAqLwogCQliY2NfcHRyICs9IDI7CS8qIHNraXAgdHJhaWxpbmcgbnVsbCAqLwogCX0gZWxzZSB7CQkvKiBBU0NJSSAqLwogCQlzdHJjcHkoYmNjX3B0ciwgdHJlZSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGUxNTJiZjYuLmUyYjRjZTEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC04NCw2ICs4NCw4IEBACiAJCXJldHVybiBGSUxFX09WRVJXUklURV9JRjsKIAllbHNlIGlmICgoZmxhZ3MgJiBPX0NSRUFUKSA9PSBPX0NSRUFUKQogCQlyZXR1cm4gRklMRV9PUEVOX0lGOworCWVsc2UgaWYgKChmbGFncyAmIE9fVFJVTkMpID09IE9fVFJVTkMpCisJCXJldHVybiBGSUxFX09WRVJXUklURTsKIAllbHNlCiAJCXJldHVybiBGSUxFX09QRU47CiB9CkBAIC02NTYsNyArNjU4LDcgQEAKIAkJCWVsc2UKIAkJCQlwb3NpeF9sb2NrX3R5cGUgPSBDSUZTX1dSTENLOwogCQkJcmMgPSBDSUZTU01CUG9zaXhMb2NrKHhpZCwgcFRjb24sIG5ldGZpZCwgMSAvKiBnZXQgKi8sCi0JCQkJCWxlbmd0aCwJcGZMb2NrLT5mbF9zdGFydCwKKwkJCQkJbGVuZ3RoLAlwZkxvY2ssCiAJCQkJCXBvc2l4X2xvY2tfdHlwZSwgd2FpdF9mbGFnKTsKIAkJCUZyZWVYaWQoeGlkKTsKIAkJCXJldHVybiByYzsKQEAgLTcwNCw3ICs3MDYsNyBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl9CiAJCXJjID0gQ0lGU1NNQlBvc2l4TG9jayh4aWQsIHBUY29uLCBuZXRmaWQsIDAgLyogc2V0ICovLAotCQkJCSAgICAgIGxlbmd0aCwgcGZMb2NrLT5mbF9zdGFydCwKKwkJCQkgICAgICBsZW5ndGgsIHBmTG9jaywKIAkJCQkgICAgICBwb3NpeF9sb2NrX3R5cGUsIHdhaXRfZmxhZyk7CiAJfSBlbHNlCiAJCXJjID0gQ0lGU1NNQkxvY2soeGlkLCBwVGNvbiwgbmV0ZmlkLCBsZW5ndGgsIHBmTG9jay0+Zmxfc3RhcnQsCkBAIC05MDQsOCArOTA2LDEwIEBACiAJCQkJaWYgKHJjICE9IDApCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJaWYoZXhwZXJpbUVuYWJsZWQgfHwgKHBUY29uLT5zZXMtPnNlcnZlci0+c2VjTW9kZSAmIAotCQkJIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpID09IDApIHsKKwkJCWlmKGV4cGVyaW1FbmFibGVkIHx8IChwVGNvbi0+c2VzLT5zZXJ2ZXIgJiYKKwkJCQkoKHBUY29uLT5zZXMtPnNlcnZlci0+c2VjTW9kZSAmIAorCQkJCShTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCisJCQkJPT0gMCkpKSB7CiAJCQkJc3RydWN0IGt2ZWMgaW92WzJdOwogCQkJCXVuc2lnbmVkIGludCBsZW47CiAKZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvaW5vZGUuYyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwppbmRleCA4NWQxNjZjLi5iNTViNGVhIDEwMDY0NAotLS0gYS9mcy9kZWJ1Z2ZzL2lub2RlLmMKKysrIGIvZnMvZGVidWdmcy9pbm9kZS5jCkBAIC02NywxMiArNjcsMTMgQEAKIHN0YXRpYyBpbnQgZGVidWdmc19ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJIGludCBtb2RlLCBkZXZfdCBkZXYpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlYnVnZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSwgZGV2KTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWludCBlcnJvciA9IC1FUEVSTTsKIAogCWlmIChkZW50cnktPmRfaW5vZGUpCiAJCXJldHVybiAtRUVYSVNUOwogCisJaW5vZGUgPSBkZWJ1Z2ZzX2dldF9pbm9kZShkaXItPmlfc2IsIG1vZGUsIGRldik7CiAJaWYgKGlub2RlKSB7CiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCWRnZXQoZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggMWI0NDkxYy4uMjY5NTMzNyAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTMzNywyMCArMzM3LDIwIEBACiAvKiBTcGVjaWFsIGluaXRpYWxpemF0aW9uIGZvciB0aGUgcmItdHJlZSBub2RlIHRvIGRldGVjdCBsaW5rYWdlICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZXBfcmJfaW5pdG5vZGUoc3RydWN0IHJiX25vZGUgKm4pCiB7Ci0Jbi0+cmJfcGFyZW50ID0gbjsKKwlyYl9zZXRfcGFyZW50KG4sIG4pOwogfQogCiAvKiBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSByYi10cmVlIGFuZCBtYXJrcyBpdCBmb3IgYSBmYXN0IGlzLWxpbmtlZCBjaGVjayAqLwogc3RhdGljIGlubGluZSB2b2lkIGVwX3JiX2VyYXNlKHN0cnVjdCByYl9ub2RlICpuLCBzdHJ1Y3QgcmJfcm9vdCAqcikKIHsKIAlyYl9lcmFzZShuLCByKTsKLQluLT5yYl9wYXJlbnQgPSBuOworCXJiX3NldF9wYXJlbnQobiwgbik7CiB9CiAKIC8qIEZhc3QgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIGl0ZW0gaXMgbGlua2VkIHRvIHRoZSBtYWluIHJiLXRyZWUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGVwX3JiX2xpbmtlZChzdHJ1Y3QgcmJfbm9kZSAqbikKIHsKLQlyZXR1cm4gbi0+cmJfcGFyZW50ICE9IG47CisJcmV0dXJuIHJiX3BhcmVudChuKSAhPSBuOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDNhNzlkOTcuLmQwNzg1OGMgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NuX3Byb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTEwODUsNiArMTA4NiwxMSBAQAogCS8qIGtlcm5lbCBtb2R1bGUgbG9hZGVyIGZpeHVwICovCiAJLyogc28gd2UgZG9uJ3QgdHJ5IHRvIGxvYWQgcnVuIG1vZHByb2JlIGluIGtlcm5lbCBzcGFjZS4gKi8KIAlzZXRfZnMoVVNFUl9EUyk7CisKKwlyZXR2YWwgPSBhdWRpdF9icHJtKGJwcm0pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKIAlyZXR2YWwgPSAtRU5PRU5UOwogCWZvciAodHJ5PTA7IHRyeTwyOyB0cnkrKykgewogCQlyZWFkX2xvY2soJmJpbmZtdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZGlyLmMgYi9mcy9leHQzL2Rpci5jCmluZGV4IGYzNzUyOGUuLmZiYjBkNGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZGlyLmMKKysrIGIvZnMvZXh0My9kaXIuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJCSAqIGJlZ2lubmluZyBvZiB0aGUgbG9vcCBhbmQgdHJ5IHRvIGZyZWUgdGhlIHBhcmVudAogCQkgKiBub2RlLgogCQkgKi8KLQkJcGFyZW50ID0gbi0+cmJfcGFyZW50OworCQlwYXJlbnQgPSByYl9wYXJlbnQobik7CiAJCWZuYW1lID0gcmJfZW50cnkobiwgc3RydWN0IGZuYW1lLCByYl9oYXNoKTsKIAkJd2hpbGUgKGZuYW1lKSB7CiAJCQlzdHJ1Y3QgZm5hbWUgKiBvbGQgPSBmbmFtZTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDhhYWM1MzMuLjM0YjM5ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtNzY3LDcgKzc2Nyw2IEBACiAJaWYgKGlucHV0LT5ncm91cCAhPSBzYmktPnNfZ3JvdXBzX2NvdW50KSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19GVU5DVElPTl9fLAogCQkJICAgICAibXVsdGlwbGUgcmVzaXplcnMgcnVuIG9uIGZpbGVzeXN0ZW0hIik7Ci0JCXVubG9ja19zdXBlcihzYik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0X2pvdXJuYWw7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeS5jIGIvZnMvaW5vdGlmeS5jCmluZGV4IDczMmVjNGIuLjcyMzgzNmEgMTAwNjQ0Ci0tLSBhL2ZzL2lub3RpZnkuYworKysgYi9mcy9pbm90aWZ5LmMKQEAgLTUsNyArNSwxMCBAQAogICoJSm9obiBNY0N1dGNoYW4JPHR0YkB0ZW50YWNsZS5kaHMub3JnPgogICoJUm9iZXJ0IExvdmUJPHJtbEBub3ZlbGwuY29tPgogICoKKyAqIEtlcm5lbCBBUEkgYWRkZWQgYnk6IEFteSBHcmlmZmlzIDxhbXkuZ3JpZmZpc0BocC5jb20+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+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorCitzdGF0aWMgaW50IGpmZnMyX3VzZXJfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWlmICghc3RyY21wKG5hbWUsICIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1VTRVIsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfdXNlcl9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAiIikpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9VU0VSLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIHNpemVfdCBqZmZzMl91c2VyX2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKwlzaXplX3QgcmV0bGVuID0gWEFUVFJfVVNFUl9QUkVGSVhfTEVOICsgbmFtZV9sZW4gKyAxOworCisJaWYgKGxpc3QgJiYgcmV0bGVuIDw9IGxpc3Rfc2l6ZSkgeworCQlzdHJjcHkobGlzdCwgWEFUVFJfVVNFUl9QUkVGSVgpOworCQlzdHJjcHkobGlzdCArIFhBVFRSX1VTRVJfUFJFRklYX0xFTiwgbmFtZSk7CisJfQorCisJcmV0dXJuIHJldGxlbjsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfdXNlcl94YXR0cl9oYW5kbGVyID0geworCS5wcmVmaXggPSBYQVRUUl9VU0VSX1BSRUZJWCwKKwkubGlzdCA9IGpmZnMyX3VzZXJfbGlzdHhhdHRyLAorCS5zZXQgPSBqZmZzMl91c2VyX3NldHhhdHRyLAorCS5nZXQgPSBqZmZzMl91c2VyX2dldHhhdHRyCit9OwpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggNmY5OWMwYS4uYWI2MWE4YiAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC03NTUsNiArNzU1LDcgQEAKIAlpZiAocmVxdWVzdC0+ZmxfdHlwZSA9PSBGX1VOTENLKQogCQlnb3RvIG91dDsKIAorCWVycm9yID0gLUVOT01FTTsKIAluZXdfZmwgPSBsb2Nrc19hbGxvY19sb2NrKCk7CiAJaWYgKG5ld19mbCA9PSBOVUxMKQogCQlnb3RvIG91dDsKQEAgLTc4MSw2ICs3ODIsNyBAQAogCWxvY2tzX2NvcHlfbG9jayhuZXdfZmwsIHJlcXVlc3QpOwogCWxvY2tzX2luc2VydF9sb2NrKCZpbm9kZS0+aV9mbG9jaywgbmV3X2ZsKTsKIAluZXdfZmwgPSBOVUxMOworCWVycm9yID0gMDsKIAogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDk2NzIzYWUuLjE4NGZlNGFjIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTEwODAsOCArMTA4MCw4IEBACiAJbmQtPmZsYWdzID0gZmxhZ3M7CiAJbmQtPmRlcHRoID0gMDsKIAotCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCWlmICgqbmFtZT09Jy8nKSB7CisJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCQlpZiAoY3VycmVudC0+ZnMtPmFsdHJvb3QgJiYgIShuZC0+ZmxhZ3MgJiBMT09LVVBfTk9BTFQpKSB7CiAJCQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5hbHRyb290bW50KTsKIAkJCW5kLT5kZW50cnkgPSBkZ2V0KGN1cnJlbnQtPmZzLT5hbHRyb290KTsKQEAgLTEwOTIsNDggKzEwOTIsNDkgQEAKIAkJfQogCQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5yb290bW50KTsKIAkJbmQtPmRlbnRyeSA9IGRnZXQoY3VycmVudC0+ZnMtPnJvb3QpOworCQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCX0gZWxzZSBpZiAoZGZkID09IEFUX0ZEQ1dEKSB7CisJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5wd2RtbnQpOwogCQluZC0+ZGVudHJ5ID0gZGdldChjdXJyZW50LT5mcy0+cHdkKTsKKwkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAkJZmlsZSA9IGZnZXRfbGlnaHQoZGZkLCAmZnB1dF9uZWVkZWQpOwogCQlyZXR2YWwgPSAtRUJBREY7CiAJCWlmICghZmlsZSkKLQkJCWdvdG8gdW5sb2NrX2ZhaWw7CisJCQlnb3RvIG91dF9mYWlsOwogCiAJCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OwogCiAJCXJldHZhbCA9IC1FTk9URElSOwogCQlpZiAoIVNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQotCQkJZ290byBmcHV0X3VubG9ja19mYWlsOworCQkJZ290byBmcHV0X2ZhaWw7CiAKIAkJcmV0dmFsID0gZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9FWEVDKTsKIAkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZnB1dF91bmxvY2tfZmFpbDsKKwkJCWdvdG8gZnB1dF9mYWlsOwogCiAJCW5kLT5tbnQgPSBtbnRnZXQoZmlsZS0+Zl92ZnNtbnQpOwogCQluZC0+ZGVudHJ5ID0gZGdldChkZW50cnkpOwogCiAJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOwogCX0KLQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCWN1cnJlbnQtPnRvdGFsX2xpbmtfY291bnQgPSAwOwogCXJldHZhbCA9IGxpbmtfcGF0aF93YWxrKG5hbWUsIG5kKTsKIG91dDoKIAlpZiAobGlrZWx5KHJldHZhbCA9PSAwKSkgewogCQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCAmJiBuZCAmJiBuZC0+ZGVudHJ5ICYmCiAJCQkJbmQtPmRlbnRyeS0+ZF9pbm9kZSkpCi0JCWF1ZGl0X2lub2RlKG5hbWUsIG5kLT5kZW50cnktPmRfaW5vZGUsIGZsYWdzKTsKKwkJYXVkaXRfaW5vZGUobmFtZSwgbmQtPmRlbnRyeS0+ZF9pbm9kZSk7CiAJfQorb3V0X2ZhaWw6CiAJcmV0dXJuIHJldHZhbDsKIAotZnB1dF91bmxvY2tfZmFpbDoKK2ZwdXRfZmFpbDoKIAlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKLXVubG9ja19mYWlsOgotCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7Ci0JcmV0dXJuIHJldHZhbDsKKwlnb3RvIG91dF9mYWlsOwogfQogCiBpbnQgZmFzdGNhbGwgcGF0aF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLApkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDMxN2I3YzcuLjRmMTc4YWMgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTYzMyw3ICs2MzMsNyBAQAogCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OwogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCi0JYXVkaXRfaW5vZGUoTlVMTCwgaW5vZGUsIDApOworCWF1ZGl0X2lub2RlKE5VTEwsIGlub2RlKTsKIAogCWVyciA9IC1FUk9GUzsKIAlpZiAoSVNfUkRPTkxZKGlub2RlKSkKQEAgLTc4Niw3ICs3ODYsNyBAQAogCWlmIChmaWxlKSB7CiAJCXN0cnVjdCBkZW50cnkgKiBkZW50cnk7CiAJCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OwotCQlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUsIDApOworCQlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUpOwogCQllcnJvciA9IGNob3duX2NvbW1vbihkZW50cnksIHVzZXIsIGdyb3VwKTsKIAkJZnB1dChmaWxlKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDZjYzc3ZGMuLjZhZmZmNzIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xMDE5LDggKzEwMTksOCBAQAogCWlmIChjdXJyZW50ICE9IHRhc2spCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoY291bnQgPiBQQUdFX1NJWkUpCi0JCWNvdW50ID0gUEFHRV9TSVpFOworCWlmIChjb3VudCA+PSBQQUdFX1NJWkUpCisJCWNvdW50ID0gUEFHRV9TSVpFIC0gMTsKIAogCWlmICgqcHBvcyAhPSAwKSB7CiAJCS8qIE5vIHBhcnRpYWwgd3JpdGVzLiAqLwpAQCAtMTAzMyw2ICsxMDMzLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIocGFnZSwgYnVmLCBjb3VudCkpCiAJCWdvdG8gb3V0X2ZyZWVfcGFnZTsKIAorCXBhZ2VbY291bnRdID0gJ1wwJzsKIAlsb2dpbnVpZCA9IHNpbXBsZV9zdHJ0b3VsKHBhZ2UsICZ0bXAsIDEwKTsKIAlpZiAodG1wID09IHBhZ2UpIHsKIAkJbGVuZ3RoID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2ZzL3hhdHRyLmMgYi9mcy94YXR0ci5jCmluZGV4IGU0MTYxOTAuLmMzMmYxNWIgMTAwNjQ0Ci0tLSBhL2ZzL3hhdHRyLmMKKysrIGIvZnMveGF0dHIuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJaWYgKCFmKQogCQlyZXR1cm4gZXJyb3I7CiAJZGVudHJ5ID0gZi0+Zl9kZW50cnk7Ci0JYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlLCAwKTsKKwlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUpOwogCWVycm9yID0gc2V0eGF0dHIoZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogCWZwdXQoZik7CiAJcmV0dXJuIGVycm9yOwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJaWYgKCFmKQogCQlyZXR1cm4gZXJyb3I7CiAJZGVudHJ5ID0gZi0+Zl9kZW50cnk7Ci0JYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlLCAwKTsKKwlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUpOwogCWVycm9yID0gcmVtb3ZleGF0dHIoZGVudHJ5LCBuYW1lKTsKIAlmcHV0KGYpOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCmluZGV4IDJlNmQ1NDUuLjNjNmE2MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApAQCAtNDksNyArNDksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCBiYWRmMDI3Li5lZjdkODNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfX0FDUElfUFJPQ0VTU09SX0gKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9iaXRvcHMuaAppbmRleCAzZjg4NzE1Li40YjZlZjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9iaXRvcHMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX0JJVE9QU19ICiAjZGVmaW5lIF9BTFBIQV9CSVRPUFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGUuaAppbmRleCBlNmQ0ZDE2Li5mMTk5ZTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlLmgKQEAgLTQsNyArNCw2IEBACiAjaWZuZGVmIF9fQVJDSF9BTFBIQV9DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9BTFBIQV9DQUNIRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogQnl0ZXMgcGVyIEwxIChkYXRhKSBjYWNoZSBsaW5lLiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0FMUEhBX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0FMUEhBX0VWNikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlZmx1c2guaAppbmRleCAzZmM2ZWY3Li44MDU2NDBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGVmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9BTFBIQV9DQUNIRUZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgQWxwaGEuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2NpYS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9jaWEuaAppbmRleCAzYTcwZDY4Li45ZTA1MTZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2NpYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfY2lhLmgKQEAgLTQsNyArNCw2IEBACiAvKiBEZWZpbmUgdG8gZXhwZXJpbWVudCB3aXRoIGZpdHRpbmcgZXZlcnl0aGluZyBpbnRvIG9uZSA1MTJNQiBIQUUgd2luZG93LiAgKi8KICNkZWZpbmUgQ0lBX09ORV9IQUVfV0lORE9XIDEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdDIuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdDIuaAppbmRleCA1YzFjNDAzLi5kYmE3MGM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3QyLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FMUEhBX1QyX19IX18KICNkZWZpbmUgX19BTFBIQV9UMl9fSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZG1hLW1hcHBpbmcuaAppbmRleCA2MmQwZDY2Li5iOWZmNGQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BTFBIQV9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9BTFBIQV9ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvZG1hLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9kbWEuaAppbmRleCA2ODNhZmFhLi44N2NmZGJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9kbWEuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfQVNNX0RNQV9ICiAjZGVmaW5lIF9BU01fRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZmxvcHB5LmgKaW5kZXggMjg5YTAwZC4uZTE3N2Q0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvZmxvcHB5LmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvZmxvcHB5LmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fQUxQSEFfRkxPUFBZX0gKICNkZWZpbmUgX19BU01fQUxQSEFfRkxPUFBZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIGZkX2luYihwb3J0KQkJCWluYl9wKHBvcnQpCiAjZGVmaW5lIGZkX291dGIodmFsdWUscG9ydCkJCW91dGJfcCh2YWx1ZSxwb3J0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaGFyZGlycS5oCmluZGV4IDdiYjZhMzYuLmQ5NTNlMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BTFBIQV9IQVJESVJRX0gKICNkZWZpbmUgX0FMUEhBX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaHdfaXJxLmgKaW5kZXggYTMxMGI5ZS4uY2E5ZDQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaHdfaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BTFBIQV9IV19JUlFfSAogI2RlZmluZSBfQUxQSEFfSFdfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzZW5kX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKmgsIHVuc2lnbmVkIGludCBpKSB7fQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2lkZS5oCmluZGV4IDYxMjZhZmUuLjJhNWNjMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2lkZS5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9ERUZBVUxUUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9pby5oIGIvaW5jbHVkZS9hc20tYWxwaGEvaW8uaAppbmRleCAzZWJiZWVlLi5mNWFlOThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2lvLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9pcnEuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2lycS5oCmluZGV4IDU2NmRiNzIuLmY2ZGUwMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2lycS5oCkBAIC04LDcgKzgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiAgIGRlZmluZWQoQ09ORklHX0FMUEhBX0dFTkVSSUMpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2ttYXBfdHlwZXMuaAppbmRleCAzZDEwY2QzLi4zZTY3MzVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9rbWFwX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEva21hcF90eXBlcy5oCkBAIC0zLDcgKzMsNiBAQAogCiAvKiBEdW1teSBoZWFkZXIganVzdCB0byBkZWZpbmUga21fdHlwZS4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KICMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbWFjaHZlYy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbWFjaHZlYy5oCmluZGV4IGVjZTE2NmEuLmFjZWQyMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL21hY2h2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9tYWNodmVjLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQUxQSEFfTUFDSFZFQ19ICiAjZGVmaW5lIF9fQUxQSEFfTUFDSFZFQ19IIDEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaAppbmRleCAwYzAxN2ZjLi5mZTI0OWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21tdV9jb250ZXh0LmgKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIExpbnVzIFRvcnZhbGRzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbW16b25lLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9tbXpvbmUuaAppbmRleCAxOTJkODBjLi42NGQwYWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9tbXpvbmUuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX0FTTV9NTVpPTkVfSF8KICNkZWZpbmUgX0FTTV9NTVpPTkVfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogc3RydWN0IGJvb3RtZW1fZGF0YV90OyAvKiBzdHVwaWQgZm9yd2FyZCBkZWNsLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcGFnZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFnZS5oCmluZGV4IDYxYmNmNzAuLjhjN2NkNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BTFBIQV9QQUdFX0gKICNkZWZpbmUgX0FMUEhBX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhbC5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BhcmFtLmgKaW5kZXggM2VkMGIzYi4uMjE0ZTc5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wYXJhbS5oCkBAIC01LDcgKzUsNiBAQAogICAgaGFyZHdhcmUgaWdub3JlcyByZXByb2dyYW1taW5nLiAgV2UgYWxzbyBuZWVkIHVzZXJsYW5kIGJ1eS1pbiB0byB0aGUgCiAgICBjaGFuZ2UgaW4gSFosIHNpbmNlIHRoaXMgaXMgdmlzaWJsZSBpbiB0aGUgd2FpdDQgcmVzb3VyY2VzIGV0Yy4gICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBIWgogIyBpZm5kZWYgQ09ORklHX0FMUEhBX1JBV0hJREUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BnYWxsb2MuaAppbmRleCAzMDg0NzU2Li40NzE4NjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGdhbGxvYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfUEdBTExPQ19ICiAjZGVmaW5lIF9BTFBIQV9QR0FMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaAppbmRleCBhOTg1Y2QyLi45M2VhYTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBUaGlzIGhvcGVmdWxseSB3b3JrcyB3aXRoIGFueSBzdGFuZGFyZCBBbHBoYSBwYWdlLXNpemUsIGFzIGRlZmluZWQKICAqIGluIDxhc20vcGFnZS5oPiAoY3VycmVudGx5IDgxOTIpLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zZXJpYWwuaAppbmRleCA3ZTRiMjk4Li45ZDI2M2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zZXJpYWwuaApAQCAtMiw3ICsyLDYgQEAKICAqIGluY2x1ZGUvYXNtLWFscGhhL3NlcmlhbC5oCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc21wLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zbXAuaAppbmRleCA5OTUwNzA2Li5hMWExZWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zbXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC00NSwxMCArNDQsOCBAQAogI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQlfX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCiAjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogCi1leHRlcm4gY3B1bWFza190IGNwdV9wcmVzZW50X21hc2s7Ci1leHRlcm4gY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOwogZXh0ZXJuIGludCBzbXBfbnVtX2NwdXM7Ci0jZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAJY3B1X3ByZXNlbnRfbWFzaworI2RlZmluZSBjcHVfcG9zc2libGVfbWFwCWNwdV9wcmVzZW50X21hcAogCiBpbnQgc21wX2NhbGxfZnVuY3Rpb25fb25fY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8saW50IHJldHJ5LCBpbnQgd2FpdCwgY3B1bWFza190IGNwdSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zcGlubG9jay5oCmluZGV4IDgxOTdjNjkuLjBjMjk0YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc3BpbmxvY2suaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX1NQSU5MT0NLX0gKICNkZWZpbmUgX0FMUEhBX1NQSU5MT0NLX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaAppbmRleCBmM2I3YjFhLi4wM2U5YzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BTFBIQV9TWVNURU1fSAogI2RlZmluZSBfX0FMUEhBX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFsLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vYmFycmllci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1iaXRzLmgKaW5kZXggZjQ4MzdmYS4uNTU0MTEwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90ZXJtYml0cy5oCkBAIC0xNDgsNiArMTQ4LDcgQEAKICNkZWZpbmUgSFVQQ0wJMDAwNDAwMDAKIAogI2RlZmluZSBDTE9DQUwJMDAxMDAwMDAKKyNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCiAjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLwogCiAvKiBjX2xmbGFnIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1hbHBoYS90bGJmbHVzaC5oCmluZGV4IDlkNDg0YzEuLjFjYTNlZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX1RMQkZMVVNIX0gKICNkZWZpbmUgX0FMUEhBX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdW5pc3RkLmgKaW5kZXggZWYyNWI2NS4uYmM2ZTZhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvdW5pc3RkLmgKQEAgLTM4Myw2ICszODMsOCBAQAogI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCQk0NDUKICNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoCQk0NDYKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ0NwogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKQEAgLTU2NSw5ICs1NjcsOCBAQAogCV9zeXNjYWxsX3JldHVybih0eXBlKTsJCQkJCQlcCiB9CiAKLSNlbmRpZiAvKiBfX0xJQlJBUllfXyAmJiBfX0dOVUNfXyAqLworI2VuZGlmIC8qIF9fR05VQ19fICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NApAQCAtNTc4LDcgKzU3OSw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC02NjEsNCArNjYxLDUgQEAKIAogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgIGFzbSgiLndlYWtcdCIgI3ggIlxuIiAjeCAiID0gc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BTFBIQV9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FwbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FwbS5oCmluZGV4IDNhNTBlYjcuLmQwOTExM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcG0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXBtLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgQVJNX0FTTV9TQTExMDBfQVBNX0gKICNkZWZpbmUgQVJNX0FTTV9TQTExMDBfQVBNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL21lbW9yeS5oCmluZGV4IGQ4MjA5ZjguLjI0YjUxY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL21lbW9yeS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHhmMDAwMDAwMCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2Fjb3JuZmIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9hY29ybmZiLmgKaW5kZXggMzg2NzIzMS4uYWVhNjMzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2Fjb3JuZmIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvYWNvcm5mYi5oCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2RlZmluZSBhY29ybmZiX3ZhbGlkX3BpeHJhdGUodmFyKSAodmFyLT5waXhjbG9jayA+PSAzOTMyNSAmJiB2YXItPnBpeGNsb2NrIDw9IDQwMTE5KQogCiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9oYXJkd2FyZS5oCmluZGV4IDEzODY4NzEuLjBmZGJlNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaGFyZHdhcmUuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBDTFBTNzExMV9WSVJUX0JBU0UJMHhmZjAwMDAwMAogI2RlZmluZSBDTFBTNzExMV9CQVNFCQlDTFBTNzExMV9WSVJUX0JBU0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmgKaW5kZXggNjFkODcxNy4uYzZlOGRjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdW5jb21wcmVzcy5oCmluZGV4IDA3MTU3YjcuLjAzZDIzM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC91bmNvbXByZXNzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCmluZGV4IGVjNTFmZTkuLmRhYWQ4ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWVtb3J5Lmg+CiAKICNpZmRlZiBDT05GSUdfQVJDSF9GT09UQlJJREdFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaAppbmRleCA5OTE4MWZmYy4uY2JkN2FlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oCkBAIC0xOSw3ICsxOSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19GT09UQlJJREdFX0FERElOKQogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS92bWFsbG9jLmgKaW5kZXggZDFjYTk1NS4uMDI1OTgyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS92bWFsbG9jLmgKQEAgLTYsNyArNiw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQVJDSF9GT09UQlJJREdFCiAjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MzAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3NtcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9zbXAuaAppbmRleCBkYTY5ODFlLi5hYjJjNzliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivc21wLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIEFTTUFSTV9BUkNIX1NNUF9ICiAjZGVmaW5lIEFTTUFSTV9BUkNIX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oCmluZGV4IGJjNjJmNGIuLmU0M2ViZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvbWVtb3J5LmgKQEAgLTUsNyArNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCmluZGV4IDQ3MmJhZGIuLjE0Y2E4ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCkBAIC0zLDcgKzMsNiBAQAogICoKICAqIElPUDN4eCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzIxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lRMzEyNDQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaAppbmRleCBjOThlYjYyLi5mYmRkNWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC91bmNvbXByZXNzLmgKQEAgLTEsNyArMSw2IEBACiAvKgogICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC91bmNvbXByZXNzLmgKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvbWVtb3J5LmgKaW5kZXggNmUxOWY0Ni4uYzg1ZmMwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L21lbW9yeS5oCkBAIC00OSw3ICs0OSw3IEBACiB7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7CiAKLQlpZiAoKChwcm9jZXNzb3JfaWQgJiAxNSkgPj0gMikgfHwgbWFjaGluZV9pc19yb2FkcnVubmVyKCkpCisJaWYgKCgocHJvY2Vzc29yX2lkICYgMTUpID49IDQpIHx8IG1hY2hpbmVfaXNfcm9hZHJ1bm5lcigpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2RtYS5oCmluZGV4IGIxYTA3MWUuLjc4OWY3ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZG1hLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAogI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvc2VyaWFsX2w3MjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWxfbDcyMDAuaAppbmRleCAyMzhjNTk1Li5iMTAwOGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWxfbDcyMDAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9zZXJpYWxfbDcyMDAuaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBVQVJURFIJCQkweDAwCS8qIFR4L1J4IGRhdGEgKi8KICNkZWZpbmUgUlhTVEFUCQkJMHgwNAkvKiBSeCBzdGF0dXMgKi8KICNkZWZpbmUgSF9VQlJMQ1IJCTB4MDgJLyogbW9kZSByZWdpc3RlciBoaWdoICovCi0jZGVmaW5lIE1fVUJSTENSCQkweDBDCS8qIG1vZGUgcmVnIG1pZCAoTVNCIG9mIGJ1YWQpKi8KKyNkZWZpbmUgTV9VQlJMQ1IJCTB4MEMJLyogbW9kZSByZWcgbWlkIChNU0Igb2YgYmF1ZCkqLwogI2RlZmluZSBMX1VCUkxDUgkJMHgxMAkvKiBtb2RlIHJlZyBsb3cgKExTQiBvZiBiYXVkKSovCiAjZGVmaW5lIFVBUlRDT04JCQkweDE0CS8qIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgVUFSVEZMRwkJCTB4MTgJLyogZmxhZyByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdW5jb21wcmVzcy5oCmluZGV4IDlmY2Q0MGEuLjA0YmUyYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC91bmNvbXByZXNzLmgKQEAgLTYsNyArNiw3IEBACiAgKiBDaGFuZ2Vsb2c6CiAgKiAgMDUtMDEtMjAwMAlTSkgJQ3JlYXRlZAogICogIDA1LTEzLTIwMDAJU0pICUZpbGxlZCBpbiBmdW5jdGlvbiBib2RpZXMKLSAqICAwNy0yNi0yMDAwCVNKSAlSZW1vdmVkIGhhcmQgY29kZWQgYnVhZCByYXRlCisgKiAgMDctMjYtMjAwMAlTSkgJUmVtb3ZlZCBoYXJkIGNvZGVkIGJhdWQgcmF0ZQogICovCiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY2xvY2tzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2Nsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZTAyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2Nsb2Nrcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY2xvY2tzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fQVNNX0FSQ0hfQ0xPQ0tTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DTE9DS1NfSAorCit1bnNpZ25lZCBpbnQgZmNsa2ZyZXFfZ2V0ICh2b2lkKTsKK3Vuc2lnbmVkIGludCBoY2xrZnJlcV9nZXQgKHZvaWQpOwordW5zaWduZWQgaW50IHBjbGtmcmVxX2dldCAodm9pZCk7CisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX0NMT0NLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2NvbnN0YW50cy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9jb25zdGFudHMuaAppbmRleCA1MmMxY2I5Li41MWRlOTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2NvbnN0YW50cy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY29uc3RhbnRzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9DT05TVEFOVFNfSAogI2RlZmluZSBfX0FTTV9BUkNIX0NPTlNUQU5UU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogQWRkcmVzc2luZyBjb25zdGFudHMgKi8KIApAQCAtMjksOCArMjgsNyBAQAogCiAjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQogCi0jIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHhjMDAwMDAwMCAvKiBTdGFydCBvZiBTRFJBTSAqLwotLyojIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHgwMDAwMDAwMCAqLyAvKiBTdGFydCBvZiBmbGFzaCAqLworIyBkZWZpbmUgSU9CQVJSSUVSX1BIWVMJCTB4MTAwMDAwMDAgLyogU2Vjb25kIGJhbmssIGZhc3Rlc3QgdGltaW5nICovCiAjIGRlZmluZSBJT0JBUlJJRVJfVklSVAkJMHhmMDAwMDAwMAogIyBkZWZpbmUgSU9CQVJSSUVSX1NJWkUJCVBBR0VfU0laRQogCkBAIC01Myw2ICs1MSw5IEBACiAjIGRlZmluZSBDUExEMDhfUEhZUwkJQ1BMRFhfUEhZUyAoMHgwOCkKICMgZGVmaW5lIENQTEQwOF9WSVJUCQlDUExEWF9WSVJUICgweDA4KQogIyBkZWZpbmUgQ1BMRDA4X1NJWkUJCVBBR0VfU0laRQorIyBkZWZpbmUgQ1BMRDBBX1BIWVMJCUNQTERYX1BIWVMgKDB4MGEpCisjIGRlZmluZSBDUExEMEFfVklSVAkJQ1BMRFhfVklSVCAoMHgwYSkKKyMgZGVmaW5lIENQTEQwQV9TSVpFCQlQQUdFX1NJWkUKICMgZGVmaW5lIENQTEQwQ19QSFlTCQlDUExEWF9QSFlTICgweDBjKQogIyBkZWZpbmUgQ1BMRDBDX1ZJUlQJCUNQTERYX1ZJUlQgKDB4MGMpCiAjIGRlZmluZSBDUExEMENfU0laRQkJUEFHRV9TSVpFCkBAIC04NCw1ICs4NSw3IEBACiAjZGVmaW5lCVhUQUxfSU4JCQkxNDc0NTYwMAkvKiAxNC43NDU2IE1IeiBjcnlzdGFsICovCiAjZGVmaW5lIFBMTF9DTE9DSwkJKFhUQUxfSU4gKiAyMSkJLyogMzA5IE1IeiBQTEwgY2xvY2sgKi8KICNkZWZpbmUgTUFYX0hDTEtfS0haCQkxMDAwMDAJCS8qIEhDTEsgbWF4IGxpbWl0IH4xMDBNSHogKi8KKyNkZWZpbmUgSENMSwkJCSg5OTk5MzYwMCkKKy8vI2RlZmluZSBIQ0xLCQkJKDExOTgwODAwMCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ09OU1RBTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2RtYS5oCmluZGV4IDE1NDkyZTMuLmE4Y2JkMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9kbWEuaApAQCAtMSw5ICsxLDg2IEBACiAvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2RtYS5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMyBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwNSBNYXJjIFNpbmdlcgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCisKK3R5cGVkZWYgZW51bSB7CisJRE1BX00yTTAJPSAwLAorCURNQV9NMk0xCT0gMSwKKwlETUFfTTJQMAk9IDIsCS8qIFR4ICovCisJRE1BX00yUDEJPSAzLAkvKiBSeCAqLworCURNQV9NMlAyCT0gNCwJLyogVHggKi8KKwlETUFfTTJQMwk9IDUsCS8qIFJ4ICovCisJRE1BX00yUDQJPSA2LAkvKiBUeCAtIEFDOTcgKi8KKwlETUFfTTJQNQk9IDcsCS8qIFJ4IC0gQUM5NyAqLworCURNQV9NMlA2CT0gOCwJLyogVHggKi8KKwlETUFfTTJQNwk9IDksCS8qIFJ4ICovCit9IGRtYV9kZXZpY2VfdDsKKworI2RlZmluZSBETUFfTEVOR1RIX01BWAkJKCg2NCoxMDI0KSAtIDQpIC8qIGJ5dGVzICovCisKKyNkZWZpbmUgRE1BQ19HQ0EJCV9fUkVHKERNQUNfUEhZUyArIDB4MmI4MCkKKyNkZWZpbmUgRE1BQ19HSVIJCV9fUkVHKERNQUNfUEhZUyArIDB4MmJjMCkKKworI2RlZmluZSBETUFDX0dJUl9NTUkxCQkoMTw8MTEpCisjZGVmaW5lIERNQUNfR0lSX01NSTAJCSgxPDwxMCkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJOAkJKDE8PDkpCisjZGVmaW5lIERNQUNfR0lSX01QSTkJCSgxPDw4KQorI2RlZmluZSBETUFDX0dJUl9NUEk2CQkoMTw8NykKKyNkZWZpbmUgRE1BQ19HSVJfTVBJNwkJKDE8PDYpCisjZGVmaW5lIERNQUNfR0lSX01QSTQJCSgxPDw1KQorI2RlZmluZSBETUFDX0dJUl9NUEk1CQkoMTw8NCkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJMgkJKDE8PDMpCisjZGVmaW5lIERNQUNfR0lSX01QSTMJCSgxPDwyKQorI2RlZmluZSBETUFDX0dJUl9NUEkwCQkoMTw8MSkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJMQkJKDE8PDApCisKKyNkZWZpbmUgRE1BQ19NMlAwCQkweDAwMDAKKyNkZWZpbmUgRE1BQ19NMlAxCQkweDAwNDAKKyNkZWZpbmUgRE1BQ19NMlAyCQkweDAwODAKKyNkZWZpbmUgRE1BQ19NMlAzCQkweDAwYzAKKyNkZWZpbmUgRE1BQ19NMlA0CQkweDAyNDAKKyNkZWZpbmUgRE1BQ19NMlA1CQkweDAyMDAKKyNkZWZpbmUgRE1BQ19NMlA2CQkweDAyYzAKKyNkZWZpbmUgRE1BQ19NMlA3CQkweDAyODAKKyNkZWZpbmUgRE1BQ19NMlA4CQkweDAzNDAKKyNkZWZpbmUgRE1BQ19NMlA5CQkweDAzMDAKKyNkZWZpbmUgRE1BQ19NMk0wCQkweDAxMDAKKyNkZWZpbmUgRE1BQ19NMk0xCQkweDAxNDAKKworI2RlZmluZSBETUFDX1BfUENPTlRST0woYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwMCkKKyNkZWZpbmUgRE1BQ19QX1BJTlRFUlJVUFQoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwNCkKKyNkZWZpbmUgRE1BQ19QX1BQQUxMT0MoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwOCkKKyNkZWZpbmUgRE1BQ19QX1BTVEFUVVMoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwYykKKyNkZWZpbmUgRE1BQ19QX1JFTUFJTihjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDE0KQorI2RlZmluZSBETUFDX1BfTUFYQ05UMChjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDIwKQorI2RlZmluZSBETUFDX1BfQkFTRTAoYykJCV9fUkVHKERNQUNfUEhZUyArIChjKSArIDB4MjQpCisjZGVmaW5lIERNQUNfUF9DVVJSRU5UMChjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDI4KQorI2RlZmluZSBETUFDX1BfTUFYQ05UMShjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDMwKQorI2RlZmluZSBETUFDX1BfQkFTRTEoYykJCV9fUkVHKERNQUNfUEhZUyArIChjKSArIDB4MzQpCisjZGVmaW5lIERNQUNfUF9DVVJSRU5UMShjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDM4KQorCisjZGVmaW5lIERNQUNfUENPTlRST0xfRU5BQkxFCSgxPDw0KQorCisjZGVmaW5lIERNQUNfUE9SVF9VU0IJCTAKKyNkZWZpbmUgRE1BQ19QT1JUX1NETU1DCQkxCisjZGVmaW5lIERNQUNfUE9SVF9BQzk3XzEJMgorI2RlZmluZSBETUFDX1BPUlRfQUM5N18yCTMKKyNkZWZpbmUgRE1BQ19QT1JUX0FDOTdfMwk0CisjZGVmaW5lIERNQUNfUE9SVF9VQVJUMQkJNgorI2RlZmluZSBETUFDX1BPUlRfVUFSVDIJCTcKKyNkZWZpbmUgRE1BQ19QT1JUX1VBUlQzCQk4CisKKyNkZWZpbmUgRE1BQ19QU1RBVFVTX0NVUlJTVEFURV9TSElGVAk0CisjZGVmaW5lIERNQUNfUFNUQVRVU19DVVJSU1RBVEVfTUFTSwkweDMKKworI2RlZmluZSBETUFDX1BTVEFUVVNfTkVYVEJVRgkgKDE8PDYpCisjZGVmaW5lIERNQUNfUFNUQVRVU19TVEFMTFJJTlQJICgxPDwwKQorCisjZGVmaW5lIERNQUNfSU5UX0NIRQkJICgxPDwzKQorI2RlZmluZSBETUFDX0lOVF9ORkIJCSAoMTw8MSkKKyNkZWZpbmUgRE1BQ19JTlRfU1RBTEwJCSAoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUwppbmRleCBhMmY2N2MwLi45ZmM3ZjQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9lbnRyeS1tYWNyby5TCkBAIC0xMCwxMSArMTAsNzMgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAKLSMgaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKLSMgIGVycm9yICJMSDdBNDAwIGFuZCBMSDdBNDA0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCi0jIGVuZGlmCisvKiBJbiBvcmRlciB0byBhbGxvdyB0aGVyZSB0byBiZSBzdXBwb3J0IGZvciBib3RoIG9mIHRoZSBwcm9jZXNzb3IKKyAgIGNsYXNzZXMgYXQgdGhlIHNhbWUgdGltZSwgd2UgbWFrZSBhIGhhY2sgaGVyZSB0aGF0IGlzbid0IHZlcnkKKyAgIHByZXR0eS4gIEF0IHN0YXJ0dXAsIHRoZSBsaW5rIHBvaW50ZWQgdG8gd2l0aCB0aGUKKyAgIGJyYW5jaF9pcnFfbGg3YTQwMCBzeW1ib2wgaXMgcmVwbGFjZWQgd2l0aCBhIE5PUCB3aGVuIHRoZSBDUFUgaXMKKyAgIGRldGVjdGVkIGFzIGEgbGg3YTQwNC4KIAotIyBpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKQorICAgKioqIEZJWE1FOiB3ZSBzaG91bGQgY2xlYW4gdGhpcyB1cCBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lCisJICAgICAgaW1wbGVtZW50YXRpb24gZm9yIGVhY2ggQ1BVJ3MgZGVzaWduLgorCisqLworCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKK2JyYW5jaF9pcnFfbGg3YTQwMDogYiAxMDAwZgorCitAIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMSDdBNDA0IGdldF9pcnFucl9hbmRfYmFzZS4KKworCQltb3YJXGlycW5yLCAjMAkJCUAgVklDMSBpcnEgYmFzZQorCQltb3YJXGJhc2UsICNpb19wMnYoMHg4MDAwMDAwMCkJQCBBUEIgcmVnaXN0ZXJzCisJCWFkZAlcYmFzZSwgXGJhc2UsICMweDgwMDAKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMV9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJdHN0CVx0bXAsICNWQV9WSUMxREVGQVVMVAkJQCBEZWZhdWx0IHZlY3RvcmVkIFZJQzEKKwkJbGRybmUJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIFZJQzFfSVJRU1RBVFVTCisJCWJuZQkxMDAxZgorCQlhZGQJXGJhc2UsIFxiYXNlLCAjKDB4YTAwMCAtIDB4ODAwMCkKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMl9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBWSUMyX0lSUVNUQVRVUworCQltb3YJXGlycW5yLCAjMzIJCQlAIFZJQzIgaXJxIGJhc2UKKworMTAwMToJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEJQCBTaGlmdCBpbnRvIGNhcnJ5CisJCWJjcwkxMDA4ZgkJCQlAIEJpdCBzZXQ7IGlycSBmb3VuZAorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJCWJuZQkxMDAxYgkJCQlAIFVudGlsIG5vIGJpdHMKKwkJYgkxMDA5ZgkJCQlAIE5vdGhpbmc/ICBIbW0uCisxMDAyOgkJYW5kCVxpcnFuciwgXHRtcCwgIzB4M2YJCUAgTWFzayBmb3IgdmFsaWQgYml0cworMTAwODoJCW1vdnMJXGlycXN0YXQsICMxCQkJQCBGb3JjZSAhWgorCQlzdHIJXHRtcCwgW1xiYXNlLCAjMHgwMDMwXQkJQCBDbGVhciB2ZWN0b3IKKwkJYgkxMDA5ZgorCitAIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMSDdBNDAwIGdldF9pcnFucl9hbmRfYmFzZS4KKworMTAwMDoJCW1vdglcaXJxbnIsICMwCisJCW1vdglcYmFzZSwgI2lvX3AydigweDgwMDAwMDAwKQlAIEFQQiByZWdpc3RlcnMKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMweDUwMF0JQCBQSUMgSU5UU1IKKworMTAwMToJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEJQCBTaGlmdCBpbnRvIGNhcnJ5CisJCWJjcwkxMDA4ZgkJCQlAIEJpdCBzZXQ7IGlycSBmb3VuZAorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJCWJuZQkxMDAxYgkJCQlAIFVudGlsIG5vIGJpdHMKKwkJYgkxMDA5ZgkJCQlAIE5vdGhpbmc/ICBIbW0uCisxMDA4OgkJbW92cwlcaXJxc3RhdCwgIzEJCQlAIEZvcmNlICFaCisKKzEwMDk6CisgICAgICAgICAgICAgICAuZW5kbQorCisKKworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaGFyZHdhcmUuaAppbmRleCBhZWIwN2MxLi5lOWZmNzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9oYXJkd2FyZS5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgkJLyogQWRkZWQgZm9yIHRoZSBzYWtlIG9mIGFtYmEtY2xjZCBkcml2ZXIgKi8KKwogI2RlZmluZSBpb19wMnYoeCkgKDB4ZjAwMDAwMDAgfCAoKCh4KSAmIDB4ZmZmMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQogI2RlZmluZSBpb192MnAoeCkgKCAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZjAwMDApIDw8IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQogCkBAIC01Myw2ICs1NSw4IEBACiAKICNlbmRpZgogCisjZGVmaW5lIE1BU0tfQU5EX1NFVCh2LG0scykJKHYpID0gKCh2KSZ+KG0pKXwocykKKwogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCmluZGV4IGY5MWYzZTUuLmFmZThjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBGSVFfU1RBUlQJODAKIApAQCAtMTU0LDkgKzE1MywxMCBAQAogI2lmICFkZWZpbmVkIChJUlFfR1BJTzBJTlRSKQogIyBkZWZpbmUgSVJRX0dQSU8wSU5UUglJUlFfR1BJTzBGSVEKICNlbmRpZgotI2RlZmluZSBJUlFfVElDSyAJSVJRX1RJTlRSCisjZGVmaW5lIElSUV9USUNLCUlSUV9USU5UUgogI2RlZmluZSBJUlFfUENDMV9SRFkJSVJRX0dQSU82SU5UUgkvKiBQQ0NhcmQgMSByZWFkeSAqLwogI2RlZmluZSBJUlFfUENDMl9SRFkJSVJRX0dQSU83SU5UUgkvKiBQQ0NhcmQgMiByZWFkeSAqLworI2RlZmluZSBJUlFfVVNCCQlJUlFfVVNCSU5UUgkvKiBVU0IgZGV2aWNlICovCiAKICNpZmRlZiBDT05GSUdfTUFDSF9LRVY3QTQwMAogIyBkZWZpbmUgSVJRX1RTCQlJUlFfR1BJT0ZJUQkvKiBUb3VjaHNjcmVlbiAqLwpAQCAtMTkxLDYgKzE5MSwxMCBAQAogIyBkZWZpbmUgSVJRX0xQRDdBNDAwX1RTCUlSUV9MUEQ3QTQwWF9DUExEICsgMQkvKiBUb3VjaCBzY3JlZW4gKi8KICNlbmRpZgogCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApCisjIGRlZmluZSBJUlFfVE9VQ0gJCUlSUV9MUEQ3QTQwMF9UUworI2VuZGlmCisKICNkZWZpbmUgTlJfSVJRUwkJKE5SX0lSUV9DUFUgKyBOUl9JUlFfQk9BUkQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvcmVnaXN0ZXJzLmgKaW5kZXggMmVkYjIyZS4uYjRmMDliMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9yZWdpc3RlcnMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3JlZ2lzdGVycy5oCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29uc3RhbnRzLmg+CiAKICNpZm5kZWYgX19BU01fQVJDSF9SRUdJU1RFUlNfSApAQCAtMTgsNyArMTcsNyBAQAogCiAJLyogUGh5c2ljYWwgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzZXMgKi8KIAotI2RlZmluZSBBQzk3X1BIWVMJKDB4ODAwMDAwMDApCS8qIEFDOTcgQ29udHJvbGxlciAqLworI2RlZmluZSBBQzk3Q19QSFlTCSgweDgwMDAwMDAwKQkvKiBBQzk3IENvbnRyb2xsZXIgKi8KICNkZWZpbmUgTU1DX1BIWVMJKDB4ODAwMDAxMDApCS8qIE11bHRpbWVkaWEgQ2FyZCBDb250cm9sbGVyICovCiAjZGVmaW5lIFVTQl9QSFlTCSgweDgwMDAwMjAwKQkvKiBVU0IgQ2xpZW50ICovCiAjZGVmaW5lIFNDSV9QSFlTCSgweDgwMDAwMzAwKQkvKiBTZWN1cmUgQ2FyZCBJbnRlcmZhY2UgKi8KQEAgLTM1LDYgKzM0LDggQEAKICNkZWZpbmUgUlRDX1BIWVMJKDB4ODAwMDBkMDApCS8qIFJlYWwtdGltZSBDbG9jayAqLwogI2RlZmluZSBHUElPX1BIWVMJKDB4ODAwMDBlMDApCS8qIEdlbmVyYWwgUHVycG9zZSBJTyAqLwogI2RlZmluZSBCTUlfUEhZUwkoMHg4MDAwMGYwMCkJLyogQmF0dGVyeSBNb25pdG9yIEludGVyZmFjZSAqLworI2RlZmluZSBIUlRGVENfUEhZUwkoMHg4MDAwMTAwMCkJLyogSGlnaC1yZXMgVEZUIENvbnRyb2xsZXIgKExIN0E0MDApICovCisjZGVmaW5lIEFMSV9QSFlTCSgweDgwMDAxMDAwKQkvKiBBZHZhbmNlZCBMQ0QgSW50ZXJmYWNlIChMSDdBNDA0KSAqLwogI2RlZmluZSBXRFRfUEhZUwkoMHg4MDAwMTQwMCkJLyogV2F0Y2hkb2cgVGltZXIgKi8KICNkZWZpbmUgU01DX1BIWVMJKDB4ODAwMDIwMDApCS8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAqLwogI2RlZmluZSBTRFJDX1BIWVMJKDB4ODAwMDI0MDApCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KQEAgLTQzLDYgKzQ0LDcgQEAKIAogCS8qIFBoeXNpY2FsIHJlZ2lzdGVycyBvZiB0aGUgTEg3QTQwNCAqLwogCisjZGVmaW5lIEFEQ19QSFlTCSgweDgwMDAxMzAwKQkvKiBBL0QgJiBUb3VjaHNjcmVlbiBDb250cm9sbGVyICovCiAjZGVmaW5lIFZJQzFfUEhZUwkoMHg4MDAwODAwMCkJLyogVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgMSAqLwogI2RlZmluZSBVU0JIX1BIWVMJKDB4ODAwMDkwMDApCS8qIFVTQiBPSENJIGhvc3QgY29udHJvbGxlciAqLwogI2RlZmluZSBWSUMyX1BIWVMJKDB4ODAwMGEwMDApCS8qIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIDIgKi8KQEAgLTUzLDEwICs1NSwzMiBAQAogCiAJLyogQ2xvY2svU3RhdGUgQ29udHJvbGxlciByZWdpc3RlciAqLwogCisjZGVmaW5lIENTQ19QV1JTUglfX1JFRyhDU0NfUEhZUyArIDB4MDApIC8qIFJlc2V0IHJlZ2lzdGVyICYgSUQgKi8KICNkZWZpbmUgQ1NDX1BXUkNOVAlfX1JFRyhDU0NfUEhZUyArIDB4MDQpIC8qIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1NDX0NMS1NFVAlfX1JFRyhDU0NfUEhZUyArIDB4MjApIC8qIENsb2NrIHNwZWVkIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1NDX1VTQkRSRVNFVAlfX1JFRyhDU0NfUEhZUyArIDB4NGMpIC8qIFVTQiBEZXZpY2UgcmVzZXRzICovCiAKICNkZWZpbmUgQ1NDX1BXUkNOVF9VU0JIX0VOCSgxPDwyOCkJLyogVVNCIEhvc3QgcG93ZXIgZW5hYmxlICovCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMk0xX0VOCSgxPDwyNykKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yTTBfRU4JKDE8PDI2KQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQOF9FTgkoMTw8MjUpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlA5X0VOCSgxPDwyNCkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDZfRU4JKDE8PDIzKQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQN19FTgkoMTw8MjIpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlA0X0VOCSgxPDwyMSkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDVfRU4JKDE8PDIwKQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQMl9FTgkoMTw8MTkpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlAzX0VOCSgxPDwxOCkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDBfRU4JKDE8PDE3KQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQMV9FTgkoMTw8MTYpCiAKKyNkZWZpbmUgQ1NDX1BXUlNSX0NISVBNQU5fU0hJRlQJKDI0KQorI2RlZmluZSBDU0NfUFdSU1JfQ0hJUE1BTl9NQVNLCSgweGZmKQorI2RlZmluZSBDU0NfUFdSU1JfQ0hJUElEX1NISUZUCSgxNikKKyNkZWZpbmUgQ1NDX1BXUlNSX0NISVBJRF9NQVNLCSgweGZmKQorCisjZGVmaW5lIENTQ19VU0JEUkVTRVRfQVBCUkVTRVRSRUcJKDE8PDEpCisjZGVmaW5lIENTQ19VU0JEUkVTRVRfSU9SRVNFVFJFRwkoMTw8MCkKIAogCS8qIEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVycyAqLwogCkBAIC0xMDksNiArMTMzLDEzIEBACiAjZGVmaW5lIEdQSU9fR1BJT0ZFT0kJX19SRUcoR1BJT19QSFlTICsgMHg1NCkJLyogR1BJTyBFbmQtb2YtSW50ZXJydXB0ICovCiAjZGVmaW5lIEdQSU9fR1BJT0lOVEVOCV9fUkVHKEdQSU9fUEhZUyArIDB4NTgpCS8qIEdQSU8gSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBHUElPX0lOVFNUQVRVUwlfX1JFRyhHUElPX1BIWVMgKyAweDVjKQkvKiBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgR1BJT19QSU5NVVgJX19SRUcoR1BJT19QSFlTICsgMHgyYykKKyNkZWZpbmUgR1BJT19QQURECV9fUkVHKEdQSU9fUEhZUyArIDB4MTApCisjZGVmaW5lIEdQSU9fUEFECV9fUkVHKEdQSU9fUEhZUyArIDB4MDApCisjZGVmaW5lIEdQSU9fUENECV9fUkVHKEdQSU9fUEhZUyArIDB4MDgpCisjZGVmaW5lIEdQSU9fUENERAlfX1JFRyhHUElPX1BIWVMgKyAweDE4KQorI2RlZmluZSBHUElPX1BFREQJX19SRUcoR1BJT19QSFlTICsgMHgyNCkKKyNkZWZpbmUgR1BJT19QRUQJX19SRUcoR1BJT19QSFlTICsgMHgyMCkKIAogCiAJLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIHJlZ2lzdGVycyAqLwpAQCAtMTM4LDIwICsxNjksMjEgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQotIyBkZWZpbmUgQ1BMRF9DT05UUk9MCQlfX1JFRzgoQ1BMRDAyX1BIWVMpCi0jIGRlZmluZSBDUExEX1NQSV9EQVRBCQlfX1JFRzgoQ1BMRDA2X1BIWVMpCi0jIGRlZmluZSBDUExEX1NQSV9DT05UUk9MCV9fUkVHOChDUExEMDhfUEhZUykKLSMgZGVmaW5lIENQTERfU1BJX0VFUFJPTQlfX1JFRzgoQ1BMRDBBX1BIWVMpCi0jIGRlZmluZSBDUExEX0lOVEVSUlVQVFMJX19SRUc4KENQTEQwQ19QSFlTKSAvKiBJUlEgbWFzay9zdGF0dXMgKi8KLSMgZGVmaW5lIENQTERfQk9PVF9NT0RFCQlfX1JFRzgoQ1BMRDBFX1BIWVMpCi0jIGRlZmluZSBDUExEX0ZMQVNICQlfX1JFRzgoQ1BMRDEwX1BIWVMpCi0jIGRlZmluZSBDUExEX1BPV0VSX01HTVQJX19SRUc4KENQTEQxMl9QSFlTKQotIyBkZWZpbmUgQ1BMRF9SRVZJU0lPTgkJX19SRUc4KENQTEQxNF9QSFlTKQotIyBkZWZpbmUgQ1BMRF9HUElPX0VYVAkJX19SRUc4KENQTEQxNl9QSFlTKQotIyBkZWZpbmUgQ1BMRF9HUElPX0RBVEEJCV9fUkVHOChDUExEMThfUEhZUykKLSMgZGVmaW5lIENQTERfR1BJT19ESVIJCV9fUkVHOChDUExEMUFfUEhZUykKLSNlbmRpZgogCisjIGRlZmluZSBDUExEX0NPTlRST0wJCV9fUkVHMTYoQ1BMRDAyX1BIWVMpCisjIGRlZmluZSBDUExEX1NQSV9EQVRBCQlfX1JFRzE2KENQTEQwNl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9TUElfQ09OVFJPTAlfX1JFRzE2KENQTEQwOF9QSFlTKQorIyBkZWZpbmUgQ1BMRF9TUElfRUVQUk9NCV9fUkVHMTYoQ1BMRDBBX1BIWVMpCisjIGRlZmluZSBDUExEX0lOVEVSUlVQVFMJX19SRUcxNihDUExEMENfUEhZUykgLyogSVJRIG1hc2svc3RhdHVzICovCisjIGRlZmluZSBDUExEX0JPT1RfTU9ERQkJX19SRUcxNihDUExEMEVfUEhZUykKKyMgZGVmaW5lIENQTERfRkxBU0gJCV9fUkVHMTYoQ1BMRDEwX1BIWVMpCisjIGRlZmluZSBDUExEX1BPV0VSX01HTVQJX19SRUcxNihDUExEMTJfUEhZUykKKyMgZGVmaW5lIENQTERfUkVWSVNJT04JCV9fUkVHMTYoQ1BMRDE0X1BIWVMpCisjIGRlZmluZSBDUExEX0dQSU9fRVhUCQlfX1JFRzE2KENQTEQxNl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9HUElPX0RBVEEJCV9fUkVHMTYoQ1BMRDE4X1BIWVMpCisjIGRlZmluZSBDUExEX0dQSU9fRElSCQlfX1JFRzE2KENQTEQxQV9QSFlTKQorCisjZW5kaWYKIAogCS8qIFRpbWVyIHJlZ2lzdGVycyAqLwogCkBAIC0xOTAsNCArMjIyLDMgQEAKIAogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9SRUdJU1RFUlNfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3NzcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9zc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJiMWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9zc3AuaApAQCAtMCwwICsxLDcxIEBACisvKiBzc3AuaAorICAgICAkSWQkCisKKyAgIHdyaXR0ZW4gYnkgTWFyYyBTaW5nZXIKKyAgIDYgRGVjIDIwMDQKKworICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisKKyAgIC0tLS0tLS0tLS0tCisgICBERVNDUklQVElPTgorICAgLS0tLS0tLS0tLS0KKworICAgVGhpcyBTU1AgaGVhZGVyIGlzIGF2YWlsYWJsZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIGZvciB0aGlzCisgICBtYWNoaW5lL2FyY2hpdGVjdHVyZSwgYmVjYXVzZSBkcml2ZXJzIHRoYXQgdXNlIGl0IG1heSBiZSBkaXNwZXJzZWQuCisKKyAgIFRoaXMgZmlsZSB3YXMgY2xvbmVkIGZyb20gdGhlIDc5NTJ4IGltcGxlbWVudGF0aW9uLiAgSXQgd291bGQgYmUKKyAgIGJldHRlciB0byBzaGFyZSB0aGVtLCBidXQgd2UncmUgdGFraW5nIGFuIGVhc2llciBhcHByb2FjaCBmb3IgdGhlCisgICB0aW1lIGJlaW5nLgorCisqLworCisjaWYgIWRlZmluZWQgKF9fU1NQX0hfXykKKyMgICAgZGVmaW5lICAgX19TU1BfSF9fCisKKy8qIC0tLS0tIEluY2x1ZGVzICovCisKKy8qIC0tLS0tIFR5cGVzICovCisKK3N0cnVjdCBzc3BfZHJpdmVyIHsKKwlpbnQgICgqaW5pdCkJCSh2b2lkKTsKKwl2b2lkICgqZXhpdCkJCSh2b2lkKTsKKwl2b2lkICgqYWNxdWlyZSkJCSh2b2lkKTsKKwl2b2lkICgqcmVsZWFzZSkJCSh2b2lkKTsKKwlpbnQgICgqY29uZmlndXJlKQkoaW50IGRldmljZSwgaW50IG1vZGUsIGludCBzcGVlZCwKKwkJCQkgaW50IGZyYW1lX3NpemVfd3JpdGUsIGludCBmcmFtZV9zaXplX3JlYWQpOworCXZvaWQgKCpjaGlwX3NlbGVjdCkJKGludCBlbmFibGUpOworCXZvaWQgKCpzZXRfY2FsbGJhY2tzKSAgICh2b2lkKiBoYW5kbGUsCisJCQkJIGlycXJldHVybl90ICgqY2FsbGJhY2tfdHgpKHZvaWQqKSwKKwkJCQkgaXJxcmV0dXJuX3QgKCpjYWxsYmFja19yeCkodm9pZCopKTsKKwl2b2lkICgqZW5hYmxlKQkJKHZvaWQpOworCXZvaWQgKCpkaXNhYmxlKQkJKHZvaWQpOworLy8JaW50ICAoKnNhdmVfc3RhdGUpCSh2b2lkKik7CisvLwl2b2lkICgqcmVzdG9yZV9zdGF0ZSkJKHZvaWQqKTsKKwlpbnQgICgqcmVhZCkJCSh2b2lkKTsKKwlpbnQgICgqd3JpdGUpCQkodTE2IGRhdGEpOworCWludCAgKCp3cml0ZV9yZWFkKQkodTE2IGRhdGEpOworCXZvaWQgKCpmbHVzaCkJCSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfYXN5bmMpCSh2b2lkKiBwdiwgc2l6ZV90IGNiKTsKKwlzaXplX3QgKCp3cml0ZV9wb3MpCSh2b2lkKTsKK307CisKKwkvKiBUaGVzZSBtb2RlcyBhcmUgb25seSBhdmFpbGFibGUgb24gdGhlIExINzk1MjQgKi8KKyNkZWZpbmUgU1NQX01PREVfU1BJCQkoMSkKKyNkZWZpbmUgU1NQX01PREVfU1NJCQkoMikKKyNkZWZpbmUgU1NQX01PREVfTUlDUk9XSVJFCSgzKQorI2RlZmluZSBTU1BfTU9ERV9JMlMJCSg0KQorCisJLyogQ1BMRCBTUEkgZGV2aWNlcyAqLworI2RlZmluZSBERVZJQ0VfRUVQUk9NCTAJLyogQ29uZmlndXJhdGlvbiBlZXByb20gKi8KKyNkZWZpbmUgREVWSUNFX01BQwkxCS8qIE1BQyBlZXByb20gKExQRDc5NTI0KSAqLworI2RlZmluZSBERVZJQ0VfQ09ERUMJMgkvKiBBdWRpbyBjb2RlYyAqLworI2RlZmluZSBERVZJQ0VfVE9VQ0gJMwkvKiBUb3VjaCBzY3JlZW4gKExQRDc5NTIwKSAqLworCisvKiAtLS0tLSBHbG9iYWxzICovCisKKy8qIC0tLS0tIFByb3RvdHlwZXMgKi8KKworLy9leHRlcm4gc3RydWN0IHNzcF9kcml2ZXIgbGg3OTUyMF9pMnNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBzc3BfZHJpdmVyIGxoN2E0MDBfY3BsZF9zc3BfZHJpdmVyOworCisjZW5kaWYgIC8qIF9fU1NQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaAppbmRleCBmODA1MzM0Li4zZDFjZTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaApAQCAtMTYsNyArMTYsNyBAQAogI2lmbmRlZiBVQVJUX1JfU1RBVFVTCiAjIGRlZmluZSBVQVJUX1JfU1RBVFVTCSgweDEwKQogI2VuZGlmCi0jZGVmaW5lIG5UeFJkeSAgCSgweDIwKQkvKiBOb3QgVHhSZWFkeSAobGl0ZXJhbGx5IFR4IEZJRk8gZnVsbCkgKi8KKyNkZWZpbmUgblR4UmR5CQkoMHgyMCkJLyogTm90IFR4UmVhZHkgKGxpdGVyYWxseSBUeCBGSUZPIGZ1bGwpICovCiAKIAkvKiBBY2Nlc3MgVUFSVCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWZvcmUgTU1VIGlzIHNldHVwICovCiAjZGVmaW5lIFVBUlRfU1RBVFVTICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKSAoVUFSVDJfUEhZUyArIFVBUlRfUl9TVEFUVVMpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCmluZGV4IDZkNjI0MGEuLmRmZGJmMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX09NQVBfQk9BUkRfSAogI2RlZmluZSBfT01BUF9CT0FSRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBEaWZmZXJlbnQgcGVyaXBoZXJhbCBpZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAppbmRleCA3OTA5YjcyLi5jN2Q5ZTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCkBAIC0zNyw3ICszNyw2IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9ICiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKaW5kZXggNjc5NzBkMS4uYWMyYmZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCkBAIC00LDcgKzQsNiBAQAogICovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKaW5kZXggY2EyYzhiZS4uYWNhMGFkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFlMDAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9jbG9jay5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2Nsb2NrLmgKKyAqCisgKiBDbG9jayBjb250cm9sIGRyaXZlciBmb3IgUE5YNDAwOCAtIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yczogVml0YWx5IFdvb2wsIERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX1BOWDQwMDhfQ0xPQ0tfSF9fCisjZGVmaW5lIF9fUE5YNDAwOF9DTE9DS19IX18KKworc3RydWN0IG1vZHVsZTsKK3N0cnVjdCBjbGs7CisKKyNkZWZpbmUgUFdSTUFOX1ZBX0JBU0UJCUlPX0FERFJFU1MoUE5YNDAwOF9QV1JNQU5fQkFTRSkKKyNkZWZpbmUgSENMS0RJVkNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDQwKQorI2RlZmluZSBQV1JDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHg0NCkKKyNkZWZpbmUgUExMQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NDgpCisjZGVmaW5lIE9TQzEzQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NGMpCisjZGVmaW5lIFNZU0NMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDUwKQorI2RlZmluZSBIQ0xLUExMQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NTgpCisjZGVmaW5lIFVTQkNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDY0KQorI2RlZmluZSBTRFJBTUNMS0NUUkxfUkVHCShQV1JNQU5fVkFfQkFTRSArIDB4NjgpCisjZGVmaW5lIE1TQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4ODApCisjZGVmaW5lIEJUQ0xLQ1RSTAkJKFBXUk1BTl9WQV9CQVNFICsgMHg4NCkKKyNkZWZpbmUgRFVNQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4OTApCisjZGVmaW5lIEkyQ0NMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGFjKQorI2RlZmluZSBLRVlDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhiMCkKKyNkZWZpbmUgVFNDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhiNCkKKyNkZWZpbmUgUFdNQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4YjgpCisjZGVmaW5lIFNQSUNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGM0KQorI2RlZmluZSBGTEFTSENMS0NUUkxfUkVHCShQV1JNQU5fVkFfQkFTRSArIDB4YzgpCisjZGVmaW5lIFVBUlQzQ0xLX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhkMCkKKyNkZWZpbmUgVUFSVENMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGU0KQorI2RlZmluZSBETUFDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhlOCkKKyNkZWZpbmUgQVVUT0NMS19DVFJMCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGVjKQorI2RlZmluZSBKUEVHQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4ZmMpCisKKyNkZWZpbmUgQVVESU9DT05GSUdfVkFfQkFTRQlJT19BRERSRVNTKFBOWDQwMDhfQVVESU9DT05GSUdfQkFTRSkKKyNkZWZpbmUgRFNQUExMQ1RSTF9SRUcJCShBVURJT0NPTkZJR19WQV9CQVNFICsgMHg2MCkKKyNkZWZpbmUgRFNQQ0xLQ1RSTF9SRUcJCShBVURJT0NPTkZJR19WQV9CQVNFICsgMHg2NCkKKyNkZWZpbmUgQVVESU9DTEtDVFJMX1JFRwkoQVVESU9DT05GSUdfVkFfQkFTRSArIDB4NjgpCisjZGVmaW5lIEFVRElPUExMQ1RSTF9SRUcJKEFVRElPQ09ORklHX1ZBX0JBU0UgKyAweDZDKQorCisjZGVmaW5lIFVTQl9PVEdfQ0xLQ1RSTF9SRUcJSU9fQUREUkVTUyhQTlg0MDA4X1VTQl9DT05GSUdfQkFTRSArIDB4ZmY0KQorCisjZGVmaW5lIFZGUDlDTEtDVFJMX1JFRwkJSU9fQUREUkVTUyhQTlg0MDA4X0RFQlVHX0JBU0UpCisKKyNkZWZpbmUgQ0xLX1JBVEVfMTNNSFogMTMwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfMU1IWiAxMDAwCisjZGVmaW5lIENMS19SQVRFXzIwOE1IWiAyMDgwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfNDhNSFogNDgwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfMzJLSFogMzIKKworI2RlZmluZSBQTlg0MDA4X1VBUlRfQ0xLIENMS19SQVRFXzEzTUhaICogMTAwMCAvKiBpbiBNSHogKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzODM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDI3IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92CVxyeCwgIzB4MDAwOTAwMDAKKwkJYWRkZXEJXHJ4LCBccngsICMweDQwMDAwMDAwCisJCWFkZG5lCVxyeCwgXHJ4LCAjMHhmNDAwMDAwMAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiCVxyZCwgW1xyeCwgIzB4MF0KKwkJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlZTEyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZG1hLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9kbWEuaAorICoKKyAqICBQTlg0MDA4IERNQSBoZWFkZXIgZmlsZQorICoKKyAqICBBdXRob3I6CVZpdGFseSBXb29sCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4gKGMpIDIwMDUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICisKKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJOAorCisjZGVmaW5lIERNQUNfQkFTRQkJSU9fQUREUkVTUyhQTlg0MDA4X0RNQV9DT05GSUdfQkFTRSkKKyNkZWZpbmUgRE1BQ19JTlRfU1RBVAkJKERNQUNfQkFTRSArIDB4MDAwMCkKKyNkZWZpbmUgRE1BQ19JTlRfVENfU1RBVAkoRE1BQ19CQVNFICsgMHgwMDA0KQorI2RlZmluZSBETUFDX0lOVF9UQ19DTEVBUgkoRE1BQ19CQVNFICsgMHgwMDA4KQorI2RlZmluZSBETUFDX0lOVF9FUlJfU1RBVAkoRE1BQ19CQVNFICsgMHgwMDBjKQorI2RlZmluZSBETUFDX0lOVF9FUlJfQ0xFQVIJKERNQUNfQkFTRSArIDB4MDAxMCkKKyNkZWZpbmUgRE1BQ19TT0ZUX1NSRVEJCShETUFDX0JBU0UgKyAweDAwMjQpCisjZGVmaW5lIERNQUNfQ09ORklHCQkoRE1BQ19CQVNFICsgMHgwMDMwKQorI2RlZmluZSBETUFDX0N4X1NSQ19BRERSKGMpCShETUFDX0JBU0UgKyAweDAxMDAgKyAoYykgKiAweDIwKQorI2RlZmluZSBETUFDX0N4X0RFU1RfQUREUihjKQkoRE1BQ19CQVNFICsgMHgwMTA0ICsgKGMpICogMHgyMCkKKyNkZWZpbmUgRE1BQ19DeF9MTEkoYykJCShETUFDX0JBU0UgKyAweDAxMDggKyAoYykgKiAweDIwKQorI2RlZmluZSBETUFDX0N4X0NPTlRST0woYykJKERNQUNfQkFTRSArIDB4MDEwYyArIChjKSAqIDB4MjApCisjZGVmaW5lIERNQUNfQ3hfQ09ORklHKGMpCShETUFDX0JBU0UgKyAweDAxMTAgKyAoYykgKiAweDIwKQorCitlbnVtIHsKKwlXSURUSF9CWVRFID0gMCwKKwlXSURUSF9IV09SRCwKKwlXSURUSF9XT1JECit9OworCitlbnVtIHsKKwlGQ19NRU0yTUVNX0RNQSwKKwlGQ19NRU0yUEVSX0RNQSwKKwlGQ19QRVIyTUVNX0RNQSwKKwlGQ19QRVIyUEVSX0RNQSwKKwlGQ19QRVIyUEVSX0RQRVIsCisJRkNfTUVNMlBFUl9QRVIsCisJRkNfUEVSMk1FTV9QRVIsCisJRkNfUEVSMlBFUl9TUEVSCit9OworCitlbnVtIHsKKwlETUFfSU5UX1VOS05PV04gPSAwLAorCURNQV9FUlJfSU5UID0gMSwKKwlETUFfVENfSU5UID0gMiwKK307CisKK2VudW0geworCURNQV9CVUZGRVJfQUxMT0NBVEVEID0gMSwKKwlETUFfSEFTX0xMID0gMiwKK307CisKK2VudW0geworCVBFUl9DQU1fRE1BXzEgPSAwLAorCVBFUl9OREZfRkxBU0ggPSAxLAorCVBFUl9NQlhfU0xBVkVfRklGTyA9IDIsCisJUEVSX1NQSTJfUkVDX1hNSVQgPSAzLAorCVBFUl9NU19TRF9SWF9YTUlUID0gNCwKKwlQRVJfSFNfVUFSVF8xX1hNSVQgPSA1LAorCVBFUl9IU19VQVJUXzFfUlggPSA2LAorCVBFUl9IU19VQVJUXzJfWE1JVCA9IDcsCisJUEVSX0hTX1VBUlRfMl9SWCA9IDgsCisJUEVSX0hTX1VBUlRfN19YTUlUID0gOSwKKwlQRVJfSFNfVUFSVF83X1JYID0gMTAsCisJUEVSX1NQSTFfUkVDX1hNSVQgPSAxMSwKKwlQRVJfTUxDX05ERl9TUkVDID0gMTIsCisJUEVSX0NBTV9ETUFfMiA9IDEzLAorCVBFUl9QUk5HX0lORklGTyA9IDE0LAorCVBFUl9QUk5HX09VVEZJRk8gPSAxNSwKK307CisKK3N0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsIHsKKwlpbnQgdGNfbWFzazsKKwlpbnQgY2FjaGVhYmxlOworCWludCBidWZmZXJhYmxlOworCWludCBwcml2X21vZGU7CisJaW50IGRpOworCWludCBzaTsKKwlpbnQgZGVzdF9haGIxOworCWludCBzcmNfYWhiMTsKKwlpbnQgZHdpZHRoOworCWludCBzd2lkdGg7CisJaW50IGRic2l6ZTsKKwlpbnQgc2JzaXplOworCWludCB0cl9zaXplOworfTsKKworc3RydWN0IHBueDQwMDhfZG1hX2NoX2NvbmZpZyB7CisJaW50IGhhbHQ7CisJaW50IGFjdGl2ZTsKKwlpbnQgbG9jazsKKwlpbnQgaXRjOworCWludCBpZTsKKwlpbnQgZmxvd19jbnRybDsKKwlpbnQgZGVzdF9wZXI7CisJaW50IHNyY19wZXI7Cit9OworCitzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgeworCXVuc2lnbmVkIGxvbmcgc3JjX2FkZHI7CisJdW5zaWduZWQgbG9uZyBkZXN0X2FkZHI7CisJdTMyIG5leHRfZG1hOworCXVuc2lnbmVkIGxvbmcgY2hfY3RybDsKKwlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKm5leHQ7CisJaW50IGZsYWdzOworCXZvaWQgKmFsbG9jX2RhdGE7CisJaW50ICgqZnJlZSkgKHZvaWQgKik7Cit9OworCitzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnIHsKKwlpbnQgaXNfbGw7CisJdW5zaWduZWQgbG9uZyBzcmNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGRlc3RfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGNoX2N0cmw7CisJdW5zaWduZWQgbG9uZyBjaF9jZmc7CisJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbDsKKwl1MzIgbGxfZG1hOworCWludCBmbGFnczsKKwl2b2lkICphbGxvY19kYXRhOworCWludCAoKmZyZWUpICh2b2lkICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqcG54NDAwOF9hbGxvY19sbF9lbnRyeShkbWFfYWRkcl90ICopOworZXh0ZXJuIHZvaWQgcG54NDAwOF9mcmVlX2xsX2VudHJ5KHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqLCBkbWFfYWRkcl90KTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZnJlZV9sbCh1MzIgbGxfZG1hLCBzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKik7CisKK2V4dGVybiBpbnQgcG54NDAwOF9yZXF1ZXN0X2NoYW5uZWwoY2hhciAqLCBpbnQsCisJCQkJICAgdm9pZCAoKikoaW50LCBpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQkJICAgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZnJlZV9jaGFubmVsKGludCk7CitleHRlcm4gaW50IHBueDQwMDhfY29uZmlnX2RtYShpbnQsIGludCwgaW50KTsKK2V4dGVybiBpbnQgcG54NDAwOF9kbWFfcGFja19jb250cm9sKGNvbnN0IHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICosCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX3BhcnNlX2NvbnRyb2wodW5zaWduZWQgbG9uZywKKwkJCQkgICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICopOworZXh0ZXJuIGludCBwbng0MDA4X2RtYV9wYWNrX2NvbmZpZyhjb25zdCBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY29uZmlnICosCisJCQkJICAgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgcG54NDAwOF9kbWFfcGFyc2VfY29uZmlnKHVuc2lnbmVkIGxvbmcsCisJCQkJICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jb25maWcgKik7CitleHRlcm4gaW50IHBueDQwMDhfY29uZmlnX2NoYW5uZWwoaW50LCBzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnICopOworZXh0ZXJuIGludCBwbng0MDA4X2NoYW5uZWxfZ2V0X2NvbmZpZyhpbnQsIHN0cnVjdCBwbng0MDA4X2RtYV9jb25maWcgKik7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZShpbnQpOworZXh0ZXJuIGludCBwbng0MDA4X2RtYV9jaF9kaXNhYmxlKGludCk7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZWQoaW50KTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZG1hX3NwbGl0X2hlYWRfZW50cnkoc3RydWN0IHBueDQwMDhfZG1hX2NvbmZpZyAqLAorCQkJCQkgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKik7CitleHRlcm4gdm9pZCBwbng0MDA4X2RtYV9zcGxpdF9sbF9lbnRyeShzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKiwKKwkJCQkgICAgICAgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKik7CisKKyNlbmRpZgkJCQkvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWMxOThlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBQTlg0MDA4LWJhc2VkIHBsYXRmb3JtcworICoKKyAqIDIwMDUtMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQXV0aG9yOiBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4KKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisjZGVmaW5lIElPX0JBU0UgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIElPX0FERFJFU1MoeCkgICgoKCgoeCkgJiAweGZmMDAwMDAwKSA+PiA0KSB8ICgoeCkgJiAweGZmZmZmKSkgfCBJT19CQVNFKQorCisjZGVmaW5lIElOVFJDX01BU0sJCQkweDAwCisjZGVmaW5lIElOVFJDX1JBV19TVEFUCQkJMHgwNAorI2RlZmluZSBJTlRSQ19TVEFUCQkJMHgwOAorI2RlZmluZSBJTlRSQ19QT0xBUgkJCTB4MEMKKyNkZWZpbmUgSU5UUkNfQUNUX1RZUEUJCQkweDEwCisjZGVmaW5lIElOVFJDX1RZUEUJCQkweDE0CisKKyNkZWZpbmUgU0lDMV9CQVNFX0lOVCAgIDMyCisjZGVmaW5lIFNJQzJfQkFTRV9JTlQgICA2NAorCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKy8qIGRlY29kZSB0aGUgTUlDIGludGVycnVwdCBudW1iZXJzICovCisJCWxkcglcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UpCisJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjSU5UUkNfU1RBVF0KKworCQljbXAJXGlycXN0YXQsIzE8PDE2CisJCW1vdmhzCVxpcnFuciwjMTYKKwkJbW92bG8JXGlycW5yLCMwCisJCW1vdmhzCVxpcnFzdGF0LFxpcnFzdGF0LGxzciMxNgorCQljbXAJXGlycXN0YXQsIzE8PDgKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjOAorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjOAorCQljbXAJXGlycXN0YXQsIzE8PDQKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjNAorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjNAorCQljbXAJXGlycXN0YXQsIzE8PDIKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjMgorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjMgorCQljbXAJXGlycXN0YXQsIzE8PDEKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjMQorCisvKiB3YXMgdGhlcmUgYW4gaW50ZXJydXB0ID8gaWYgbm90IHRoZW4gZHJvcCBvdXQgd2l0aCBFUSBzdGF0dXMgKi8KKwkJdGVxCVxpcnFzdGF0LCMwCisJCWJlcQkxMDAzZgorCisvKiBhbmQgbm93IGNoZWNrIGZvciBleHRlbmRlZCBJUlEgcmVhc29ucyAqLworCQljbXAJXGlycW5yLCMxCisJCWJscwkxMDAzZgorCQljbXAJXGlycW5yLCMzMAorCQlibG8JMTAwMmYKKworLyogSVJRIDMxLDMwICA6IEhpZ2ggcHJpb3JpdHkgY2FzY2FkZSBJUlEgaGFuZGxlICovCisvKiByZWFkIHRoZSBjb3JyZWN0IFNJQyAqLworLyogZGVjb2Rpbmcgc3RhdHVzIGFmdGVyIGNvbXBhcmUgOiBlcSBpcyAzMCAoU0lDMSkgLCBuZSBpcyAzMSAoU0lDMikgKi8KKy8qIHNldCB0aGUgYmFzZSBJUlEgbnVtYmVyICovCisJCWxkcmVxCVxiYXNlLCA9SU9fQUREUkVTUyhQTlg0MDA4X0lOVENUUkxTSUMxX0JBU0UpCisJCW1vdmVxICBcaXJxbnIsI1NJQzFfQkFTRV9JTlQKKwkJbGRybmUJXGJhc2UsID1JT19BRERSRVNTKFBOWDQwMDhfSU5UQ1RSTFNJQzJfQkFTRSkKKwkJbW92bmUgICBcaXJxbnIsI1NJQzJfQkFTRV9JTlQKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNJTlRSQ19TVEFUXQorCQlsZHIJXHRtcCwJICBbXGJhc2UsICNJTlRSQ19UWVBFXQorLyogYW5kIHdpdGggaW52ZXJ0ZWQgbWFzayA6IGxvdyBwcmlvcml0eSBpbnRlcnJ1cHRzICAqLworCQlhbmQJXGlycXN0YXQsXGlycXN0YXQsXHRtcAorCQliCTEwMDRmCisKKzEwMDM6CisvKiBJUlEgMSwwICA6IExvdyBwcmlvcml0eSBjYXNjYWRlIElSUSBoYW5kbGUgKi8KKy8qIHJlYWQgdGhlIGNvcnJlY3QgU0lDICovCisvKiBkZWNvZGluZyBzdGF0dXMgYWZ0ZXIgY29tcGFyZSA6IGVxIGlzIDEgKFNJQzIpICwgbmUgaXMgMCAoU0lDMSkqLworLyogcmVhZCB0aGUgY29ycmVjdCBTSUMgKi8KKy8qIHNldCB0aGUgYmFzZSBJUlEgbnVtYmVyICAqLworCQlsZHJuZQlcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFKQorCQltb3ZuZSAgIFxpcnFuciwjU0lDMV9CQVNFX0lOVAorCQlsZHJlcQlcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMl9CQVNFKQorCQltb3ZlcSAgIFxpcnFuciwjU0lDMl9CQVNFX0lOVAorCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgI0lOVFJDX1NUQVRdCisJCWxkcglcdG1wLAkgIFtcYmFzZSwgI0lOVFJDX1RZUEVdCisvKiBhbmQgd2l0aCBpbnZlcnRlZCBtYXNrIDogbG93IHByaW9yaXR5IGludGVycnVwdHMgICovCisJCWJpYwlcaXJxc3RhdCxcaXJxc3RhdCxcdG1wCisKKzEwMDQ6CisKKwkJY21wCVxpcnFzdGF0LCMxPDwxNgorCQlhZGRocwlcaXJxbnIsXGlycW5yLCMxNgorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjMTYKKwkJY21wCVxpcnFzdGF0LCMxPDw4CisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzgKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzgKKwkJY21wCVxpcnFzdGF0LCMxPDw0CisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzQKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzQKKwkJY21wCVxpcnFzdGF0LCMxPDwyCisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzIKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzIKKwkJY21wCVxpcnFzdGF0LCMxPDwxCisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzEKKworCisvKiBpcyBpcnFzdGF0IG5vdCB6ZXJvICovCisKKzEwMDI6CisvKiB3ZSBhc3NlcnQgdGhhdCBpcnFzdGF0IGlzIG5vdCBlcXVhbCB0byB6ZXJvIGFuZCByZXR1cm4gbmUgc3RhdHVzIGlmIHRydWUqLworCQl0ZXEJXGlycXN0YXQsIzAKKzEwMDM6CisJCS5lbmRtCisKKworCQkubWFjcm8JaXJxX3ByaW9fdGFibGUKKwkJLmVuZG0KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTVhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2dwaW8uaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZ3Bpby5oCisgKgorICogUE5YNDAwOCBHUElPIGRyaXZlciAtIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIEJhc2VkIG9uIHJlZmVyZW5jZSBjb2RlIGJ5IEl3byBNZXJnbGVyIGFuZCBaLlRhYmFhbG91dGUgZnJvbSBQaGlsaXBzOgorICogQ29weXJpZ2h0IChjKSAyMDA1IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTi5WLgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfUE5YNDAwOF9HUElPX0hfCisjZGVmaW5lIF9QTlg0MDA4X0dQSU9fSF8KKworCisvKiBCbG9jayBudW1iZXJzICovCisjZGVmaW5lIEdQSU9fSU4JCSgwKQorI2RlZmluZSBHUElPX09VVAkJKDB4MTAwKQorI2RlZmluZSBHUElPX0JJRAkJKDB4MjAwKQorI2RlZmluZSBHUElPX1JBTQkJKDB4MzAwKQorI2RlZmluZSBHUElPX01VWAkJKDB4NDAwKQorCisjZGVmaW5lIEdQSU9fVFlQRV9NQVNLKEspICgoSykgJiAweDcwMCkKKworLyogSU5QVVQgR1BJT3MgKi8KKy8qIEdQSSAqLworI2RlZmluZSBHUElfMDAJCShHUElPX0lOIHwgMCkKKyNkZWZpbmUgR1BJXzAxCQkoR1BJT19JTiB8IDEpCisjZGVmaW5lIEdQSV8wMiAgIAkoR1BJT19JTiB8IDIpCisjZGVmaW5lIEdQSV8wMyAJIAkoR1BJT19JTiB8IDMpCisjZGVmaW5lIEdQSV8wNCAgIAkoR1BJT19JTiB8IDQpCisjZGVmaW5lIEdQSV8wNSAgIAkoR1BJT19JTiB8IDUpCisjZGVmaW5lIEdQSV8wNiAgIAkoR1BJT19JTiB8IDYpCisjZGVmaW5lIEdQSV8wNyAgIAkoR1BJT19JTiB8IDcpCisjZGVmaW5lIEdQSV8wOCAgIAkoR1BJT19JTiB8IDgpCisjZGVmaW5lIEdQSV8wOSAgIAkoR1BJT19JTiB8IDkpCisjZGVmaW5lIFUxX1JYIAkJKEdQSU9fSU4gfCAxNSkKKyNkZWZpbmUgVTJfSFRDUyAJKEdQSU9fSU4gfCAxNikKKyNkZWZpbmUgVTJfUlgJIAkoR1BJT19JTiB8IDE3KQorI2RlZmluZSBVM19SWAkJKEdQSU9fSU4gfCAxOCkKKyNkZWZpbmUgVTRfUlgJCShHUElPX0lOIHwgMTkpCisjZGVmaW5lIFU1X1JYCQkoR1BJT19JTiB8IDIwKQorI2RlZmluZSBVNl9JUlJYIAkoR1BJT19JTiB8IDIxKQorI2RlZmluZSBVN19IQ1RTIAkoR1BJT19JTiB8IDIyKQorI2RlZmluZSBVN19SWAkJKEdQSU9fSU4gfCAyMykKKy8qIE1JU0MgSU4gKi8KKyNkZWZpbmUgU1BJMV9EQVRJTgkoR1BJT19JTiB8IDI1KQorI2RlZmluZSBESVNQX1NZTkMJKEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgU1BJMl9EQVRJTgkoR1BJT19JTiB8IDI3KQorI2RlZmluZSBHUElfMTEgIAkoR1BJT19JTiB8IDI4KQorCisjZGVmaW5lIEdQSU9fSU5fTUFTSyAgIDB4MWVmZjgzZmYKKworLyogT1VUUFVUIEdQSU9zICovCisvKiBHUE8gKi8KKyNkZWZpbmUgR1BPXzAwCQkoR1BJT19PVVQgfCAwKQorI2RlZmluZSBHUE9fMDEgICAJKEdQSU9fT1VUIHwgMSkKKyNkZWZpbmUgR1BPXzAyICAgCShHUElPX09VVCB8IDIpCisjZGVmaW5lIEdQT18wMyAJIAkoR1BJT19PVVQgfCAzKQorI2RlZmluZSBHUE9fMDQgICAJKEdQSU9fT1VUIHwgNCkKKyNkZWZpbmUgR1BPXzA1ICAgCShHUElPX09VVCB8IDUpCisjZGVmaW5lIEdQT18wNiAgIAkoR1BJT19PVVQgfCA2KQorI2RlZmluZSBHUE9fMDcgICAJKEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgR1BPXzA4CQkoR1BJT19PVVQgfCA4KQorI2RlZmluZSBHUE9fMDkgICAJKEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgR1BPXzEwICAgCShHUElPX09VVCB8IDEwKQorI2RlZmluZSBHUE9fMTEgCSAJKEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIEdQT18xMiAgIAkoR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgR1BPXzEzICAgCShHUElPX09VVCB8IDEzKQorI2RlZmluZSBHUE9fMTQgICAJKEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIEdQT18xNSAgIAkoR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgR1BPXzE2ICAJKEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIEdQT18xNyAJIAkoR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgR1BPXzE4ICAgCShHUElPX09VVCB8IDE4KQorI2RlZmluZSBHUE9fMTkgICAJKEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIEdQT18yMCAgIAkoR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgR1BPXzIxICAgCShHUElPX09VVCB8IDIxKQorI2RlZmluZSBHUE9fMjIgICAJKEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIEdQT18yMyAgIAkoR1BJT19PVVQgfCAyMykKKworI2RlZmluZSBHUElPX09VVF9NQVNLICAgMHhmZmZmZmYKKworLyogQklESVJFQ1RJT05BTCBHUElPcyAqLworLyogUkFNIHBpbnMgKi8KKyNkZWZpbmUgUkFNX0QxOQkJKEdQSU9fUkFNIHwgMCkKKyNkZWZpbmUgUkFNX0QyMCAgCShHUElPX1JBTSB8IDEpCisjZGVmaW5lIFJBTV9EMjEgIAkoR1BJT19SQU0gfCAyKQorI2RlZmluZSBSQU1fRDIyIAkoR1BJT19SQU0gfCAzKQorI2RlZmluZSBSQU1fRDIzICAJKEdQSU9fUkFNIHwgNCkKKyNkZWZpbmUgUkFNX0QyNCAgCShHUElPX1JBTSB8IDUpCisjZGVmaW5lIFJBTV9EMjUgIAkoR1BJT19SQU0gfCA2KQorI2RlZmluZSBSQU1fRDI2ICAJKEdQSU9fUkFNIHwgNykKKyNkZWZpbmUgUkFNX0QyNwkJKEdQSU9fUkFNIHwgOCkKKyNkZWZpbmUgUkFNX0QyOCAgCShHUElPX1JBTSB8IDkpCisjZGVmaW5lIFJBTV9EMjkgIAkoR1BJT19SQU0gfCAxMCkKKyNkZWZpbmUgUkFNX0QzMCAJKEdQSU9fUkFNIHwgMTEpCisjZGVmaW5lIFJBTV9EMzEgIAkoR1BJT19SQU0gfCAxMikKKworI2RlZmluZSBHUElPX1JBTV9NQVNLICAgMHgxZmZmCisKKy8qIEkvTyBwaW5zICovCisjZGVmaW5lIEdQSU9fMDAgIAkoR1BJT19CSUQgfCAyNSkKKyNkZWZpbmUgR1BJT18wMSAJKEdQSU9fQklEIHwgMjYpCisjZGVmaW5lIEdQSU9fMDIgIAkoR1BJT19CSUQgfCAyNykKKyNkZWZpbmUgR1BJT18wMyAgCShHUElPX0JJRCB8IDI4KQorI2RlZmluZSBHUElPXzA0IAkoR1BJT19CSUQgfCAyOSkKKyNkZWZpbmUgR1BJT18wNSAgCShHUElPX0JJRCB8IDMwKQorCisjZGVmaW5lIEdQSU9fQklEX01BU0sgICAweDdlMDAwMDAwCisKKy8qIE5vbi1HUElPIG11bHRpcGxleGVkIFBJT3MuIEZvciBtdWx0aXBsZXhpbmcgd2l0aCBHUElPLCBwbGVhc2UgdXNlIEdQSU8gbWFjcm9zICovCisjZGVmaW5lIEdQSU9fU0RSQU1fU0VMIAkoR1BJT19NVVggfCAzKQorCisjZGVmaW5lIEdQSU9fTVVYX01BU0sgICAweDgKKworLyogRXh0cmFjdGlvbi9hc3NlbWJseSBtYWNyb3MgKi8KKyNkZWZpbmUgR1BJT19CSVRfTUFTSyhLKSAoKEspICYgMHgxRikKKyNkZWZpbmUgR1BJT19CSVQoSykgKDEgPDwgR1BJT19CSVRfTUFTSyhLKSkKKyNkZWZpbmUgR1BJT19JU01VWChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fTVVYKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX01VWF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU1JBTShLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fUkFNKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX1JBTV9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU0JJRChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fQklEKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX0JJRF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU09VVChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fT1VUKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX09VVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU0lOKEspICAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fSU4pICYmIChHUElPX0JJVChLKSAmIEdQSU9fSU5fTUFTSykpCisKK2V4dGVybiBpbnQgcG54NDAwOF9ncGlvX3JlZ2lzdGVyX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fdW5yZWdpc3Rlcl9waW4odW5zaWduZWQgc2hvcnQgcGluKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBueDQwMDhfZ3Bpb19yZWFkX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fd3JpdGVfcGluKHVuc2lnbmVkIHNob3J0IHBpbiwgaW50IG91dHB1dCk7CitleHRlcm4gaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX2RpcmVjdGlvbih1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fZGlyZWN0aW9uKHVuc2lnbmVkIHNob3J0IHBpbik7CitleHRlcm4gaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX211eCh1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fbXV4KHVuc2lnbmVkIHNob3J0IHBpbik7CisKKyNlbmRpZgkJCQkvKiBfUE5YNDAwOF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0MTAzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaGFyZHdhcmUuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorCisvKiBTdGFydCBvZiB2aXJ0dWFsIGFkZHJlc3NlcyBmb3IgSU8gZGV2aWNlcyAqLworI2RlZmluZSBJT19CQVNFICAgICAgICAgMHhGMDAwMDAwMAorCisvKiBUaGlzIG1hY3JvIHJlbGllcyBvbiBmYWN0IHRoYXQgZm9yIGFsbCBIVyBpL28gYWRkcmVzc2VzIGJpdHMgMjAtMjMgYXJlIDAgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KSAgKCgoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4ZmZmZmYpKSB8IElPX0JBU0UpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWU0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lvLmgKQEAgLTAsMCArMSwyMSBAQAorCisvKgorICogIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaW8uaAorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxjaGlnaXJldkBydS5tdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYmZmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCisgKgorICogUE5YNDAwOCBJUlEgY29udHJvbGxlciBkcml2ZXIgLSBoZWFkZXIgZmlsZQorICogdGhpcyBvbmUgaXMgdXNlZCBpbiBlbnRyeS1hcm52LlMgYXMgd2VsbCBzbyBpdCBjYW5ub3QgY29udGFpbiBDIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX1BOWDQwMDhfSVJRX0hfXworI2RlZmluZSBfX1BOWDQwMDhfSVJRX0hfXworCisjZGVmaW5lIE1JQ19WQV9CQVNFICAgICAgICAgICAgIElPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UpCisjZGVmaW5lIFNJQzFfVkFfQkFTRSAgICAgICAgICAgIElPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFKQorI2RlZmluZSBTSUMyX1ZBX0JBU0UgICAgICAgICAgICBJT19BRERSRVNTKFBOWDQwMDhfSU5UQ1RSTFNJQzJfQkFTRSkKKworLyogTWFudWFsOiBDaGFwdGVyIDIwLCBwYWdlIDE5NSAqLworCisjZGVmaW5lIElOVENfQklUKGlycSkgKDE8PCAoKGlycSkgJiAweDFGKSkKKworI2RlZmluZSBJTlRDX0VSKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDAgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX1JTUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDQgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX1NSKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDggKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX0FQUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweEMgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX0FUUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDEwICsgKCgoaXJxKSYoMHgzPDw1KSk8PDkpKSkKKyNkZWZpbmUgSU5UQ19JVFIoaXJxKSAgIElPX0FERFJFU1MoKFBOWDQwMDhfSU5UQ1RSTE1JQ19CQVNFICsgMHgxNCArICgoKGlycSkmKDB4Mzw8NSkpPDw5KSkpCisKKyNkZWZpbmUgU1RBUlRfSU5UX1JFR19CSVQoaXJxKSAoMTw8KChpcnEpJjB4MUYpKQorCisjZGVmaW5lIFNUQVJUX0lOVF9FUl9SRUcoaXJxKSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9QV1JNQU5fQkFTRSArIDB4MjAgKyAoKChpcnEpJigweDE8PDUpKT4+MSkpKQorI2RlZmluZSBTVEFSVF9JTlRfUlNSX1JFRyhpcnEpICAgIElPX0FERFJFU1MoKFBOWDQwMDhfUFdSTUFOX0JBU0UgKyAweDI0ICsgKCgoaXJxKSYoMHgxPDw1KSk+PjEpKSkKKyNkZWZpbmUgU1RBUlRfSU5UX1NSX1JFRyhpcnEpICAgICBJT19BRERSRVNTKChQTlg0MDA4X1BXUk1BTl9CQVNFICsgMHgyOCArICgoKGlycSkmKDB4MTw8NSkpPj4xKSkpCisjZGVmaW5lIFNUQVJUX0lOVF9BUFJfUkVHKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9QV1JNQU5fQkFTRSArIDB4MkMgKyAoKChpcnEpJigweDE8PDUpKT4+MSkpKQorCitleHRlcm4gdm9pZCBfX2luaXQgcG54NDAwOF9pbml0X2lycSh2b2lkKTsKKworI2VuZGlmIC8qIF9fUE5YNDAwOF9JUlFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZWM3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycXMuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxcy5oCisgKgorICogUE5YNDAwOCBJUlEgY29udHJvbGxlciBkcml2ZXIgLSBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fUE5YNDAwOF9JUlFTX2hfXworI2RlZmluZSBfX1BOWDQwMDhfSVJRU19oX18KKworI2RlZmluZSBOUl9JUlFTICAgICAgICAgOTYKKworLypNYW51YWw6IHRhYmxlIDI1OSwgcGFnZSAxOTkqLworCisvKlNVQjIgSW50ZXJydXB0IFJvdXRpbmcgKFNJQzIpKi8KKworI2RlZmluZSBTSUMyX0JBU0VfSU5UICAgNjQKKworI2RlZmluZSBDTEtfU1dJVENIX0FSTV9JTlQgOTUJLyptYW51YWw6IENsa3N3aXRjaCBBUk0gICovCisjZGVmaW5lIENMS19TV0lUQ0hfRFNQX0lOVCA5NAkvKm1hbnVhbDogQ2xrU3dpdGNoIERTUCAgKi8KKyNkZWZpbmUgQ0xLX1NXSVRDSF9BVURfSU5UIDkzCS8qbWFudWFsOiBDbGtzd2l0Y2ggQVVEICAqLworI2RlZmluZSBHUElfMDZfSU5UICAgICAgICAgOTIKKyNkZWZpbmUgR1BJXzA1X0lOVCAgICAgICAgIDkxCisjZGVmaW5lIEdQSV8wNF9JTlQgICAgICAgICA5MAorI2RlZmluZSBHUElfMDNfSU5UICAgICAgICAgODkKKyNkZWZpbmUgR1BJXzAyX0lOVCAgICAgICAgIDg4CisjZGVmaW5lIEdQSV8wMV9JTlQgICAgICAgICA4NworI2RlZmluZSBHUElfMDBfSU5UICAgICAgICAgODYKKyNkZWZpbmUgQlRfQ0xLUkVRX0lOVCAgICAgIDg1CisjZGVmaW5lIFNQSTFfREFUSU5fSU5UICAgICA4NAorI2RlZmluZSBVNV9SWF9JTlQgICAgICAgICAgODMKKyNkZWZpbmUgU0RJT19JTlRfTiAgICAgICAgIDgyCisjZGVmaW5lIENBTV9IU19JTlQgICAgICAgICA4MQorI2RlZmluZSBDQU1fVlNfSU5UICAgICAgICAgODAKKyNkZWZpbmUgR1BJXzA3X0lOVCAgICAgICAgIDc5CisjZGVmaW5lIERJU1BfU1lOQ19JTlQgICAgICA3OAorI2RlZmluZSBEU1BfSU5UOCAgICAgICAgICAgNzcKKyNkZWZpbmUgVTdfSENUU19JTlQgICAgICAgIDc2CisjZGVmaW5lIEdQSV8xMF9JTlQgICAgICAgICA3NQorI2RlZmluZSBHUElfMDlfSU5UICAgICAgICAgNzQKKyNkZWZpbmUgR1BJXzA4X0lOVCAgICAgICAgIDczCisjZGVmaW5lIERTUF9JTlQ3ICAgICAgICAgICA3MgorI2RlZmluZSBVMl9IQ1RTX0lOVCAgICAgICAgNzEKKyNkZWZpbmUgU1BJMl9EQVRJTl9JTlQgICAgIDcwCisjZGVmaW5lIEdQSU9fMDVfSU5UICAgICAgICA2OQorI2RlZmluZSBHUElPXzA0X0lOVCAgICAgICAgNjgKKyNkZWZpbmUgR1BJT18wM19JTlQgICAgICAgIDY3CisjZGVmaW5lIEdQSU9fMDJfSU5UICAgICAgICA2NgorI2RlZmluZSBHUElPXzAxX0lOVCAgICAgICAgNjUKKyNkZWZpbmUgR1BJT18wMF9JTlQgICAgICAgIDY0CisKKy8qTWFudWFsOiB0YWJsZSAyNTgsIHBhZ2UgMTk4Ki8KKworLypTVUIxIEludGVycnVwdCBSb3V0aW5nIChTSUMxKSovCisKKyNkZWZpbmUgU0lDMV9CQVNFX0lOVCAgIDMyCisKKyNkZWZpbmUgVVNCX0kyQ19JTlQgICAgICAgIDYzCisjZGVmaW5lIFVTQl9ERVZfSFBfSU5UICAgICA2MgorI2RlZmluZSBVU0JfREVWX0xQX0lOVCAgICAgNjEKKyNkZWZpbmUgVVNCX0RFVl9ETUFfSU5UICAgIDYwCisjZGVmaW5lIFVTQl9IT1NUX0lOVCAgICAgICA1OQorI2RlZmluZSBVU0JfT1RHX0FUWF9JTlRfTiAgNTgKKyNkZWZpbmUgVVNCX09UR19USU1FUl9JTlQgIDU3CisjZGVmaW5lIFNXX0lOVCAgICAgICAgICAgICA1NgorI2RlZmluZSBTUEkxX0lOVCAgICAgICAgICAgNTUKKyNkZWZpbmUgS0VZX0lSUSAgICAgICAgICAgIDU0CisjZGVmaW5lIERTUF9NX0lOVCAgICAgICAgICA1MworI2RlZmluZSBSVENfSU5UICAgICAgICAgICAgNTIKKyNkZWZpbmUgSTJDXzFfSU5UICAgICAgICAgIDUxCisjZGVmaW5lIEkyQ18yX0lOVCAgICAgICAgICA1MAorI2RlZmluZSBQTEwxX0xPQ0tfSU5UICAgICAgNDkKKyNkZWZpbmUgUExMMl9MT0NLX0lOVCAgICAgIDQ4CisjZGVmaW5lIFBMTDNfTE9DS19JTlQgICAgICA0NworI2RlZmluZSBQTEw0X0xPQ0tfSU5UICAgICAgNDYKKyNkZWZpbmUgUExMNV9MT0NLX0lOVCAgICAgIDQ1CisjZGVmaW5lIFNQSTJfSU5UICAgICAgICAgICA0NAorI2RlZmluZSBEU1BfSU5UMSAgICAgICAgICAgNDMKKyNkZWZpbmUgRFNQX0lOVDIgICAgICAgICAgIDQyCisjZGVmaW5lIERTUF9URE1fSU5UMiAgICAgICA0MQorI2RlZmluZSBUU19BVVhfSU5UICAgICAgICAgNDAKKyNkZWZpbmUgVFNfSVJRICAgICAgICAgICAgIDM5CisjZGVmaW5lIFRTX1BfSU5UICAgICAgICAgICAzOAorI2RlZmluZSBVT1VUMV9UT19QQURfSU5UICAgMzcKKyNkZWZpbmUgR1BJXzExX0lOVCAgICAgICAgIDM2CisjZGVmaW5lIERTUF9JTlQ0ICAgICAgICAgICAzNQorI2RlZmluZSBKVEFHX0NPTU1fUlhfSU5UICAgMzQKKyNkZWZpbmUgSlRBR19DT01NX1RYX0lOVCAgIDMzCisjZGVmaW5lIERTUF9JTlQzICAgICAgICAgICAzMgorCisvKk1hbnVhbDogdGFibGUgMjU3LCBwYWdlIDE5NyovCisKKy8qTUFJTiBJbnRlcnJ1cHQgUm91dGluZyovCisKKyNkZWZpbmUgTUFJTl9CQVNFX0lOVCAgIDAKKworI2RlZmluZSBTVUIyX0ZJUV9OICAgICAgICAgMzEJLyphY3RpdmUgbG93ICovCisjZGVmaW5lIFNVQjFfRklRX04gICAgICAgICAzMAkvKmFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgSlBFR19JTlQgICAgICAgICAgIDI5CisjZGVmaW5lIERNQV9JTlQgICAgICAgICAgICAyOAorI2RlZmluZSBNU1RJTUVSX0lOVCAgICAgICAgMjcKKyNkZWZpbmUgSUlSMV9JTlQgICAgICAgICAgIDI2CisjZGVmaW5lIElJUjJfSU5UICAgICAgICAgICAyNQorI2RlZmluZSBJSVI3X0lOVCAgICAgICAgICAgMjQKKyNkZWZpbmUgRFNQX1RETV9JTlQwICAgICAgIDIzCisjZGVmaW5lIERTUF9URE1fSU5UMSAgICAgICAyMgorI2RlZmluZSBEU1BfUF9JTlQgICAgICAgICAgMjEKKyNkZWZpbmUgRFNQX0lOVDAgICAgICAgICAgIDIwCisjZGVmaW5lIERVTV9JTlQgICAgICAgICAgICAxOQorI2RlZmluZSBVT1VUMF9UT19QQURfSU5UICAgMTgKKyNkZWZpbmUgTVA0X0VOQ19JTlQgICAgICAgIDE3CisjZGVmaW5lIE1QNF9ERUNfSU5UICAgICAgICAxNgorI2RlZmluZSBTRDBfSU5UICAgICAgICAgICAgMTUKKyNkZWZpbmUgTUJYX0lOVCAgICAgICAgICAgIDE0CisjZGVmaW5lIFNEMV9JTlQgICAgICAgICAgICAxMworI2RlZmluZSBNU19JTlRfTiAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfSU5UICAgICAgICAgIDExIC8qTkFORCovCisjZGVmaW5lIElJUjZfSU5UICAgICAgICAgICAxMAorI2RlZmluZSBJSVI1X0lOVCAgICAgICAgICAgOQorI2RlZmluZSBJSVI0X0lOVCAgICAgICAgICAgOAorI2RlZmluZSBJSVIzX0lOVCAgICAgICAgICAgNworI2RlZmluZSBXQVRDSF9JTlQgICAgICAgICAgNgorI2RlZmluZSBIU1RJTUVSX0lOVCAgICAgICAgNQorI2RlZmluZSBBUkNIX1RJTUVSX0lSUSAgICAgSFNUSU1FUl9JTlQKKyNkZWZpbmUgQ0FNX0lOVCAgICAgICAgICAgIDQKKyNkZWZpbmUgUFJOR19JTlQgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0lOVCAgICAgICAgIDIKKyNkZWZpbmUgU1VCMl9JUlFfTiAgICAgICAgIDEJLyphY3RpdmUgbG93ICovCisjZGVmaW5lIFNVQjFfSVJRX04gICAgICAgICAwCS8qYWN0aXZlIGxvdyAqLworCisjZGVmaW5lIFBOWDQwMDhfSVJRX1RZUEVTIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypJUlEgIydzOiAqLyAgICAgICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9MT1csICBJUlFUX0xPVywgIElSUVRfSElHSCwgLyogIDAsIDEsIDIsIDMgKi8gICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogIDQsIDUsIDYsIDcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogIDgsIDksMTAsMTEgKi8gICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMTIsMTMsMTQsMTUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMTYsMTcsMTgsMTkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMjAsMjEsMjIsMjMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMjQsMjUsMjYsMjcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfTE9XLCAgLyogMjgsMjksMzAsMzEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9MT1csICBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMzIsMzMsMzQsMzUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0ZBTExJTkcsIElSUVRfSElHSCwgLyogMzYsMzcsMzgsMzkgKi8gIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNDAsNDEsNDIsNDMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNDQsNDUsNDYsNDcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfTE9XLCAgLyogNDgsNDksNTAsNTEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNTIsNTMsNTQsNTUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfSElHSCwgLyogNTYsNTcsNTgsNTkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjAsNjEsNjIsNjMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjQsNjUsNjYsNjcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjgsNjksNzAsNzEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNzIsNzMsNzQsNzUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNzYsNzcsNzgsNzkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODAsODEsODIsODMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODQsODUsODYsODcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODgsODksOTAsOTEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogOTIsOTMsOTQsOTUgKi8gICAgIFwKK30KKworLyogU3RhcnQgRW5hYmxlIFBpbiBJbnRlcnJ1cHRzIC0gdGFibGUgNTggcGFnZSA2NiAqLworCisjZGVmaW5lIFNFX1BJTl9CQVNFX0lOVCAgIDMyCisKKyNkZWZpbmUgU0VfVTdfUlhfSU5UICAgICAgICAgICAgNjMKKyNkZWZpbmUgU0VfVTdfSENUU19JTlQgICAgICAgICAgNjIKKyNkZWZpbmUgU0VfQlRfQ0xLUkVRX0lOVCAgICAgICAgNjEKKyNkZWZpbmUgU0VfVTZfSVJSWF9JTlQgICAgICAgICAgNjAKKy8qNTkgdW51c2VkKi8KKyNkZWZpbmUgU0VfVTVfUlhfSU5UICAgICAgICAgICAgNTgKKyNkZWZpbmUgU0VfR1BJXzExX0lOVCAgICAgICAgICAgNTcKKyNkZWZpbmUgU0VfVTNfUlhfSU5UICAgICAgICAgICAgNTYKKyNkZWZpbmUgU0VfVTJfSENUU19JTlQgICAgICAgICAgNTUKKyNkZWZpbmUgU0VfVTJfUlhfSU5UICAgICAgICAgICAgNTQKKyNkZWZpbmUgU0VfVTFfUlhfSU5UICAgICAgICAgICAgNTMKKyNkZWZpbmUgU0VfRElTUF9TWU5DX0lOVCAgICAgICAgNTIKKy8qNTEgdW51c2VkKi8KKyNkZWZpbmUgU0VfU0RJT19JTlRfTiAgICAgICAgICAgNTAKKyNkZWZpbmUgU0VfTVNESU9fU1RBUlRfSU5UICAgICAgNDkKKyNkZWZpbmUgU0VfR1BJXzA2X0lOVCAgICAgICAgICAgNDgKKyNkZWZpbmUgU0VfR1BJXzA1X0lOVCAgICAgICAgICAgNDcKKyNkZWZpbmUgU0VfR1BJXzA0X0lOVCAgICAgICAgICAgNDYKKyNkZWZpbmUgU0VfR1BJXzAzX0lOVCAgICAgICAgICAgNDUKKyNkZWZpbmUgU0VfR1BJXzAyX0lOVCAgICAgICAgICAgNDQKKyNkZWZpbmUgU0VfR1BJXzAxX0lOVCAgICAgICAgICAgNDMKKyNkZWZpbmUgU0VfR1BJXzAwX0lOVCAgICAgICAgICAgNDIKKyNkZWZpbmUgU0VfU1lTQ0xLRU5fUElOX0lOVCAgICAgNDEKKyNkZWZpbmUgU0VfU1BJMV9EQVRBSU5fSU5UICAgICAgNDAKKyNkZWZpbmUgU0VfR1BJXzA3X0lOVCAgICAgICAgICAgMzkKKyNkZWZpbmUgU0VfU1BJMl9EQVRBSU5fSU5UICAgICAgMzgKKyNkZWZpbmUgU0VfR1BJXzEwX0lOVCAgICAgICAgICAgMzcKKyNkZWZpbmUgU0VfR1BJXzA5X0lOVCAgICAgICAgICAgMzYKKyNkZWZpbmUgU0VfR1BJXzA4X0lOVCAgICAgICAgICAgMzUKKy8qMzQtMzIgdW51c2VkKi8KKworLyogU3RhcnQgRW5hYmxlIEludGVybmFsIEludGVycnVwdHMgLSB0YWJsZSA1NyBwYWdlIDY1ICovCisKKyNkZWZpbmUgU0VfSU5UX0JBU0VfSU5UICAgMAorCisjZGVmaW5lIFNFX1RTX0lSUSAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFNFX1RTX1BfSU5UICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNFX1RTX0FVWF9JTlQgICAgICAgICAgIDI5CisvKjI3LTI4IHVudXNlZCovCisjZGVmaW5lIFNFX1VTQl9BSEJfTkVFRF9DTEtfSU5UIDI2CisjZGVmaW5lIFNFX01TVElNRVJfSU5UICAgICAgICAgIDI1CisjZGVmaW5lIFNFX1JUQ19JTlQgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFNFX1VTQl9ORUVEX0NMS19JTlQgICAgIDIzCisjZGVmaW5lIFNFX1VTQl9JTlQgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFNFX1VTQl9JMkNfSU5UICAgICAgICAgIDIxCisjZGVmaW5lIFNFX1VTQl9PVEdfVElNRVJfSU5UICAgIDIwCisKKyNlbmRpZiAvKiBfX1BOWDQwMDhfSVJRU19oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODI2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAqIENvcHlyaWdodCAoYykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpICgoeCkgLSBQQUdFX09GRlNFVCArIFBIWVNfT0ZGU0VUKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpICgoeCkgKyBQQUdFX09GRlNFVCAtIFBIWVNfT0ZGU0VUKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQ1ZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wYXJhbS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wYXJhbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIEhaIDEwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWEzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3BsYXRmb3JtLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGxhdGZyb20uaAorICoKKyAqIFBOWDQwMDggQmFzZSBhZGRyZXNzZXMgLSBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiByZWZlcmVuY2UgY29kZSByZWNlaXZlZCBmcm9tIFBoaWxpcHM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUExBVEZPUk1fSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfUExBVEZPUk1fSF9fCisKKyNkZWZpbmUgUE5YNDAwOF9JUkFNX0JBU0UJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUE5YNDAwOF9JUkFNX1NJWkUJCTB4MDAwMTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9ZVVZfU0xBVkVfQkFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBQTlg0MDA4X0RVTV9TTEFWRV9CQVNFCQkweDE4MDAwMDAwCisjZGVmaW5lIFBOWDQwMDhfTkRGX0ZMQVNIX0JBU0UJCTB4MjAwMjAwMDAKKyNkZWZpbmUgUE5YNDAwOF9TUEkxX0JBU0UJCTB4MjAwODgwMDAKKyNkZWZpbmUgUE5YNDAwOF9TUEkyX0JBU0UJCTB4MjAwOTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9TRF9DT05GSUdfQkFTRQkJMHgyMDA5ODAwMAorI2RlZmluZSBQTlg0MDA4X0ZMQVNIX0RBVEEJCTB4MjAwQjAwMDAKKyNkZWZpbmUgUE5YNDAwOF9NTENfRkxBU0hfQkFTRQkJMHgyMDBCODAwMAorI2RlZmluZSBQTlg0MDA4X0pQRUdfQ09ORklHX0JBU0UJMHgzMDBBMDAwMAorI2RlZmluZSBQTlg0MDA4X0RNQV9DT05GSUdfQkFTRQkJMHgzMTAwMDAwMAorI2RlZmluZSBQTlg0MDA4X1VTQl9DT05GSUdfQkFTRQkJMHgzMTAyMDAwMAorI2RlZmluZSBQTlg0MDA4X1NEUkFNX0NGR19CQVNFCQkweDMxMDgwMDAwCisjZGVmaW5lIFBOWDQwMDhfQUhCMkZBQl9CQVNFCQkweDQwMDAwMDAwCisjZGVmaW5lIFBOWDQwMDhfUFdSTUFOX0JBU0UJCTB4NDAwMDQwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UJCTB4NDAwMDgwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFCTB4NDAwMEMwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMU0lDMl9CQVNFCTB4NDAwMTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQxX0JBU0UJCTB4NDAwMTQwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQyX0JBU0UJCTB4NDAwMTgwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQ3X0JBU0UJCTB4NDAwMUMwMDAKKyNkZWZpbmUgUE5YNDAwOF9SVENfQkFTRQkJMHg0MDAyNDAwMAorI2RlZmluZSBQTlg0MDA4X1BJT19CQVNFCQkweDQwMDI4MDAwCisjZGVmaW5lIFBOWDQwMDhfTVNUSU1FUl9CQVNFCQkweDQwMDM0MDAwCisjZGVmaW5lIFBOWDQwMDhfSFNUSU1FUl9CQVNFCQkweDQwMDM4MDAwCisjZGVmaW5lIFBOWDQwMDhfV0RPR19CQVNFCQkweDQwMDNDMDAwCisjZGVmaW5lIFBOWDQwMDhfREVCVUdfQkFTRQkJMHg0MDA0MDAwMAorI2RlZmluZSBQTlg0MDA4X1RPVUNIMV9CQVNFCQkweDQwMDQ4MDAwCisjZGVmaW5lIFBOWDQwMDhfS0VZU0NBTl9CQVNFCQkweDQwMDUwMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVENUUkxfQkFTRQkJMHg0MDA1NDAwMAorI2RlZmluZSBQTlg0MDA4X1BXTV9CQVNFCQkweDQwMDVDMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVDNfQkFTRQkJMHg0MDA4MDAwMAorI2RlZmluZSBQTlg0MDA4X1VBUlQ0X0JBU0UJCTB4NDAwODgwMDAKKyNkZWZpbmUgUE5YNDAwOF9VQVJUNV9CQVNFCQkweDQwMDkwMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVDZfQkFTRQkJMHg0MDA5ODAwMAorI2RlZmluZSBQTlg0MDA4X0kyQzFfQkFTRQkJMHg0MDBBMDAwMAorI2RlZmluZSBQTlg0MDA4X0kyQzJfQkFTRQkJMHg0MDBBODAwMAorI2RlZmluZSBQTlg0MDA4X01BR0lDR0FURV9CQVNFCQkweDQwMEIwMDAwCisjZGVmaW5lIFBOWDQwMDhfRFVNQ09ORl9CQVNFCQkweDQwMEI4MDAwCisjZGVmaW5lIFBOWDQwMDhfRFVNX01BSU5DRkdfQkFTRSAgICAgICAJMHg0MDBCQzAwMAorI2RlZmluZSBQTlg0MDA4X0RTUF9CQVNFCQkweDQwMEMwMDAwCisjZGVmaW5lIFBOWDQwMDhfUFJPRkNPVU5URVJfQkFTRQkweDQwMEM4MDAwCisjZGVmaW5lIFBOWDQwMDhfQ1JZUFRPX0JBU0UJCTB4NDAwRDAwMDAKKyNkZWZpbmUgUE5YNDAwOF9DQU1JRkNPTkZfQkFTRQkJMHg0MDBEODAwMAorI2RlZmluZSBQTlg0MDA4X1lVVjJSR0JfQkFTRQkJMHg0MDBFMDAwMAorI2RlZmluZSBQTlg0MDA4X0FVRElPQ09ORklHX0JBU0UJMHg0MDBFODAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcG0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjYwNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3BtLmgKKyAqCisgKiBQTlg0MDA4IFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXNzIC0gaGVhZGVyIGZpbGUKKyAqCisgKiBBdXRob3JzOiBWaXRhbHkgV29vbCwgRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9QTlg0MDA4X1BNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QTlg0MDA4X1BNX0gKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisjaW5jbHVkZSAiaXJxLmgiCisjaW5jbHVkZSAiaXJxcy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKK2V4dGVybiB2b2lkIHBueDQwMDhfcG1faWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBueDQwMDhfcG1fc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcG54NDAwOF9jcHVfc3VzcGVuZF9zejsKK2V4dGVybiB2b2lkIHBueDQwMDhfY3B1X3N1c3BlbmQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IHBueDQwMDhfY3B1X3N0YW5kYnlfc3o7CitleHRlcm4gdm9pZCBwbng0MDA4X2NwdV9zdGFuZGJ5KHZvaWQpOworCitleHRlcm4gaW50IHBueDQwMDhfc3RhcnR1cF9wbGwoc3RydWN0IGNsayAqKTsKK2V4dGVybiBpbnQgcG54NDAwOF9zaHV0ZG93bl9wbGwoc3RydWN0IGNsayAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X2ludF91bWFzayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9FUl9SRUcoaXJxKSkgfAorCQkgICAgIFNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9FUl9SRUcoaXJxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9pbnRfbWFzayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9FUl9SRUcoaXJxKSkgJgorCQkgICAgIH5TVEFSVF9JTlRfUkVHX0JJVChpcnEpLCBTVEFSVF9JTlRfRVJfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X2Fjayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKFNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9SU1JfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X3NldF9mYWxsaW5nX2VkZ2UodTggaXJxKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTVEFSVF9JTlRfQVBSX1JFRyhpcnEpKSAmCisJCSAgICAgflNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9BUFJfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZSh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9BUFJfUkVHKGlycSkpIHwKKwkJICAgICBTVEFSVF9JTlRfUkVHX0JJVChpcnEpLCBTVEFSVF9JTlRfQVBSX1JFRyhpcnEpKTsKK30KKworI2VuZGlmCQkJCS8qIEFTU0VNQkxFUiAqLworI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfUE5YNDAwOF9QTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTNkYTcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwljcHVfcmVzZXQoMCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDcwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3RpbWV4LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdGltZXguaAorICoKKyAqIFBOWDQwMDggdGltZXJzIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BOWDQwMDhfVElNRVhfSAorI2RlZmluZSBfX1BOWDQwMDhfVElNRVhfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMDAwMDAwCisKKyNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKHgpCisKKy8qIE1pbGxpU2Vjb25kIFRpbWVyIC0gQ2hhcHRlciAyMSBQYWdlIDIwMiAqLworCisjZGVmaW5lIE1TVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBNU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgTVNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIE1TVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgTVNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBNU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxYykpCisKKy8qIEhpZ2ggU3BlZWQgVGltZXIgLSBDaHBhdGVyIDIyLCBQYWdlIDIwNSAqLworCisjZGVmaW5lIEhTVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBIU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgSFNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIEhTVElNX1BNQVRDSCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweEMpKQorI2RlZmluZSBIU1RJTV9QQ09VTlQgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxMCkpCisjZGVmaW5lIEhTVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgSFNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBIU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxYykpCisjZGVmaW5lIEhTVElNX01BVENIMiAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDIwKSkKKyNkZWZpbmUgSFNUSU1fQ0NSICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MjgpKQorI2RlZmluZSBIU1RJTV9DUjAgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyQykpCisjZGVmaW5lIEhTVElNX0NSMSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDMwKSkKKworLyogSU1QT1JUQU5UOiBib3RoIHRpbWVycyBhcmUgVVBDT1VOVElORyAqLworCisvKiB4U1RJTV9NQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVIwX0lOVCAgICAgICAgMQorI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMTw8MSkKKyNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDE8PDIpCisjZGVmaW5lIE1SMV9JTlQgICAgICAgICgxPDwzKQorI2RlZmluZSBSRVNFVF9DT1VOVDEgICAoMTw8NCkKKyNkZWZpbmUgU1RPUF9DT1VOVDEgICAgKDE8PDUpCisjZGVmaW5lIE1SMl9JTlQgICAgICAgICgxPDw2KQorI2RlZmluZSBSRVNFVF9DT1VOVDIgICAoMTw8NykKKyNkZWZpbmUgU1RPUF9DT1VOVDIgICAgKDE8PDgpCisKKy8qIHhTVElNX0NUUkwgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIENPVU5UX0VOQUIgICAgIDEKKyNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDE8PDEpCisjZGVmaW5lIERFQlVHX0VOICAgICAgICgxPDwyKQorCisvKiB4U1RJTV9JTlQgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIE1BVENIMF9JTlQgICAgIDEKKyNkZWZpbmUgTUFUQ0gxX0lOVCAgICAgKDE8PDEpCisjZGVmaW5lIE1BVENIMl9JTlQgICAgICgxPDwyKQorI2RlZmluZSBSVENfVElDSzAgICAgICAoMTw8NCkKKyNkZWZpbmUgUlRDX1RJQ0sxICAgICAgKDE8PDUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE0ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3VuY29tcHJlc3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIFVBUlQ1X0JBU0UgMHg0MDA5MDAwMAorCisjZGVmaW5lIFVBUlQ1X0RSICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFVBUlQ1X0JBU0UpKQorI2RlZmluZSBVQVJUNV9GUiAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChVQVJUNV9CQVNFICsgMTgpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHB1dGMoY2hhciBjKQoreworCXdoaWxlIChVQVJUNV9GUiAmICgxIDw8IDUpKQorCQliYXJyaWVyKCk7CisKKwlVQVJUNV9EUiA9IGM7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3ZtYWxsb2MuaAorICoKKyAqIEF1dGhvcjogVml0YWx5IFdvb2wgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pZHAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pZHAuaAppbmRleCBlN2VmNDk3Li5iNjk1MjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaWRwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lkcC5oCkBAIC0xNSw3ICsxNSw2IEBACiAgKiAgICAgICAgICAgICBDaGFuZ2VzIGZvciAyLjYga2VybmVsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIE5vdGU6IHRoaXMgZmlsZSBtdXN0IGJlIHNhZmUgdG8gaW5jbHVkZSBpbiBhc3NlbWJseSBmaWxlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKaW5kZXggNjdhZjIzOC4uZjNiYzcwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUFhBMjd4CiAjZGVmaW5lIFBYQV9JUlFfU0tJUAkwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL29oY2kuaAppbmRleCA3ZGE4OTU2Li5lODQ4YTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvb2hjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9vaGNpLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgUE1NX05QU19NT0RFICAgICAgICAgICAxCiAjZGVmaW5lIFBNTV9HTE9CQUxfTU9ERSAgICAgICAgMgogI2RlZmluZSBQTU1fUEVSUE9SVF9NT0RFICAgICAgIDMKKworCWludCBwb3dlcl9idWRnZXQ7CiB9OwogCiBleHRlcm4gdm9pZCBweGFfc2V0X29oY2lfaW5mbyhzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKaW5kZXggYzhmNTNhNy4uNjY1MGQ0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX19QWEFfUkVHU19ICiAjZGVmaW5lIF9fUFhBX1JFR1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBQWEEgQ2hpcCBzZWxlY3RzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90aW1leC5oCmluZGV4IGFhMTI1ZWMuLjI0NzNiYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90aW1leC5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19QWEEyNXgpCiAvKiBQWEEyNTAvMjEwIHRpbWVyIGJhc2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3NtcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvc21wLmgKaW5kZXggZmM4Nzc4My4uNTE1ODE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvc21wLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIEFTTUFSTV9BUkNIX1NNUF9ICiAjZGVmaW5lIEFTTUFSTV9BUkNIX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKaW5kZXggYjAxMWUxNC4uNzI5NjRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSCBfX0ZJTEVfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSAiaGFyZHdhcmUuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmgKaW5kZXggYzM4MGQyNi4uNWU0YzhjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCkBAIC0xMjYsOSArMTI2LDE4IEBACiAjZGVmaW5lIFMzQzI0WFhfU1pfSUlTCSAgIFNaXzFNCiAKIC8qIEdQSU8gcG9ydHMgKi8KLSNkZWZpbmUgUzNDMjRYWF9WQV9HUElPCSAgIFMzQzI0MTBfQUREUigweDAwRTAwMDAwKQorCisvKiB0aGUgY2FsY3VsYXRpb24gZm9yIHRoZSBWQSBvZiB0aGlzIG11c3QgZW5zdXJlIHRoYXQKKyAqIGl0IGlzIHRoZSBzYW1lIGRpc3RhbmNlIGFwYXJ0IGZyb20gdGhlIFVBUlQgaW4gdGhlCisgKiBwaHN5aWNhbCBhZGRyZXNzIHNwYWNlLCBhcyB0aGUgaW5pdGlhbCBtYXBwaW5nIGZvciB0aGUgSU8KKyAqIGlzIGRvbmUgYXMgYSAxOjEgbWFwaW5nLiBUaGlzIHB1dHMgaXQgKGN1cnJlbnRseSkgYXQKKyAqIDB4RjY4MDAwMDAsIHdoaWNoIGlzIG5vdCBpbiB0aGUgd2F5IG9mIGFueSBjdXJyZW50IG1hcHBpbmcKKyAqIGJ5IHRoZSBiYXNlIHN5c3RlbS4KKyovCisKICNkZWZpbmUgUzNDMjQwMF9QQV9HUElPCSAgICgweDE1NjAwMDAwKQogI2RlZmluZSBTM0MyNDEwX1BBX0dQSU8JICAgKDB4NTYwMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfVkFfR1BJTwkgICAoKFMzQzI0MTBfUEFfR1BJTyAtIFMzQzI0WFhfUEFfVUFSVCkgKyBTM0MyNFhYX1ZBX1VBUlQpCiAjZGVmaW5lIFMzQzI0WFhfU1pfR1BJTwkgICBTWl8xTQogCiAvKiBSVEMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmgKaW5kZXggMzQzNjA3MC4uNmM5MmZhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmgKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLSNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCiAKIC8qIGV4dHJhIHJlZ2lzdGVycyAqLwogI2RlZmluZSBTM0MyNDQwX0NBTURJVk4JICAgIFMzQzI0MTBfQ0xLUkVHKDB4MTgpCkBAIC0xMzYsNyArMTM2LDkgQEAKICNkZWZpbmUgUzNDMjQ0MF9DQU1ESVZOX0hDTEs0X0hBTEYgICAoMTw8OSkKICNkZWZpbmUgUzNDMjQ0MF9DQU1ESVZOX0RWU0VOICAgICAgICAoMTw8MTIpCiAKLSNlbmRpZiAvKiBDT05GSUdfQ1BVX1MzQzI0NDAgKi8KKyNkZWZpbmUgUzNDMjQ0Ml9DQU1ESVZOX0NBTUNMS19ESVYzICAoMTw8NSkKKworI2VuZGlmIC8qIENPTkZJR19DUFVfUzNDMjQ0MCBvciBDT05GSUdfQ1BVX1MzQzI0NDIgKi8KIAogCiAjZW5kaWYgLyogX19BU01fQVJNX1JFR1NfQ0xPQ0sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oCmluZGV4IGQyNTc0MDguLjVmMTAzMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaApAQCAtNDUwLDEyICs0NTAsMTQgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEQwX09VVFAJKDB4MDEgPDwgMCkKICNkZWZpbmUgUzNDMjQxMF9HUEQwX1ZEOAkoMHgwMiA8PCAwKQogI2RlZmluZSBTM0MyNDAwX0dQRDBfVkZSQU1FCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzI0NDJfR1BEMF9uU1BJQ1MxCSgweDAzIDw8IDApCiAKICNkZWZpbmUgUzNDMjQxMF9HUEQxICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktELCAxKQogI2RlZmluZSBTM0MyNDEwX0dQRDFfSU5QCSgweDAwIDw8IDIpCiAjZGVmaW5lIFMzQzI0MTBfR1BEMV9PVVRQCSgweDAxIDw8IDIpCiAjZGVmaW5lIFMzQzI0MTBfR1BEMV9WRDkJKDB4MDIgPDwgMikKICNkZWZpbmUgUzNDMjQwMF9HUEQxX1ZNCQkoMHgwMiA8PCAyKQorI2RlZmluZSBTM0MyNDQyX0dQRDFfU1BJQ0xLMQkoMHgwMyA8PCAyKQogCiAjZGVmaW5lIFMzQzI0MTBfR1BEMiAgICAgICAgICAgIFMzQzI0MTBfR1BJT05PKFMzQzI0MTBfR1BJT19CQU5LRCwgMikKICNkZWZpbmUgUzNDMjQxMF9HUEQyX0lOUAkoMHgwMCA8PCA0KQpAQCAtODU4LDYgKzg2MCw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BHMTJfT1VUUCAgICAoMHgwMSA8PCAyNCkKICNkZWZpbmUgUzNDMjQxMF9HUEcxMl9FSU5UMjAgICgweDAyIDw8IDI0KQogI2RlZmluZSBTM0MyNDEwX0dQRzEyX1hNT04gICAgKDB4MDMgPDwgMjQpCisjZGVmaW5lIFMzQzI0NDJfR1BHMTJfblNQSUNTMCAoMHgwMyA8PCAyNCkKIAogI2RlZmluZSBTM0MyNDEwX0dQRzEzICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktHLCAxMykKICNkZWZpbmUgUzNDMjQxMF9HUEcxM19JTlAgICAgICgweDAwIDw8IDI2KQpAQCAtOTQzLDYgKzk0Niw3IEBACiAjZGVmaW5lIFMzQzI0MTBfR1BIOV9JTlAgICAgICAoMHgwMCA8PCAxOCkKICNkZWZpbmUgUzNDMjQxMF9HUEg5X09VVFAgICAgICgweDAxIDw8IDE4KQogI2RlZmluZSBTM0MyNDEwX0dQSDlfQ0xLT1VUMCAgKDB4MDIgPDwgMTgpCisjZGVmaW5lIFMzQzI0NDJfR1BIOV9uU1BJQ1MwICAoMHgwMyA8PCAxOCkKIAogI2RlZmluZSBTM0MyNDEwX0dQSDEwICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktILCAxMCkKICNkZWZpbmUgUzNDMjQxMF9HUEgxMF9JTlAgICAgICgweDAwIDw8IDIwKQpAQCAtMTA1MSw2ICsxMDU1LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMV9JRE1BU0sJICAgKDB4ZmZmZjAwMDApCiAjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzFfMjQxMAkgICAoMHgzMjQxMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMV8yNDQwCSAgICgweDMyNDQwMDAwKQorI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMxXzI0NDIJICAgKDB4MzI0NDBhYWEpCiAKICNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMl9XVFJFU0VUICAgKDE8PDIpCiAjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzJfT0ZGUkVTRVQgICgxPDwxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaAppbmRleCBhNmY2YTBlLi44ZTE1MmEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGRlZmluZXMgZm9yIFVBUlQgcmVnaXN0ZXJzICovCiAjaW5jbHVkZSAiYXNtL2FyY2gvcmVncy1zZXJpYWwuaCIKQEAgLTgyLDcgKzgxLDggQEAKIAkJd2hpbGUgKDEpIHsKIAkJCWxldmVsID0gdWFydF9yZChTM0MyNDEwX1VGU1RBVCk7CiAKLQkJCWlmIChjcHVpZCA9PSBTM0MyNDEwX0dTVEFUVVMxXzI0NDApIHsKKwkJCWlmIChjcHVpZCA9PSBTM0MyNDEwX0dTVEFUVVMxXzI0NDAgfHwKKwkJCSAgICBjcHVpZCA9PSBTM0MyNDEwX0dTVEFUVVMxXzI0NDIpIHsKIAkJCQlsZXZlbCAmPSBTM0MyNDQwX1VGU1RBVF9UWE1BU0s7CiAJCQkJbGV2ZWwgPj49IFMzQzI0NDBfVUZTVEFUX1RYU0hJRlQ7CiAJCQl9IGVsc2UgewpAQCAtMTMwLDcgKzEzMCw3IEBACiB7CiAJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1REQVQpOwogCV9fcmF3X3dyaXRlbChXRE9HX0NPVU5ULCBTM0MyNDEwX1dUQ05UKTsKLQlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4ODApLCBTM0MyNDEwX1dUQ09OKTsKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9hc3NhYmV0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYXNzYWJldC5oCmluZGV4IDFmNTliMzYuLmQ2YTFiYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9hc3NhYmV0LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2Fzc2FiZXQuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0FTU0FCRVRfSAogI2RlZmluZSBfX0FTTV9BUkNIX0FTU0FCRVRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFN5c3RlbSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGZsYWdzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jZXJmLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY2VyZi5oCmluZGV4IDM1NmQ1YmEuLjlhMTljM2QwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY2VyZi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jZXJmLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0lOQ0xVREVfQ0VSRl9IXwogI2RlZmluZSBfSU5DTFVERV9DRVJGX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBDRVJGX0VUSF9JTwkJCTB4ZjAwMDAwMDAKICNkZWZpbmUgQ0VSRl9FVEhfSVJRIElSUV9HUElPMjYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jb2xsaWUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jb2xsaWUuaAppbmRleCBkNDllNWZmLi4xNGEzNDRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY29sbGllLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NvbGxpZS5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfQ09MTElFX0gKICNkZWZpbmUgX19BU01fQVJDSF9DT0xMSUVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgQ09MTElFX1NDUF9DSEFSR0VfT04JU0NPT1BfR1BDUl9QQTExCiAjZGVmaW5lIENPTExJRV9TQ1BfRElBR19CT09UMQlTQ09PUF9HUENSX1BBMTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kbWEuaAppbmRleCAwMjU3NWQ3Li42Yjc5MTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2RtYS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiaGFyZHdhcmUuaCIKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oCmluZGV4IGVlMDA4YTUuLjFhYmQ3Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFVOQ0FDSEVBQkxFX0FERFIJMHhmYTA1MDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaWRlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaWRlLmgKaW5kZXggMjE1MzUzOC4uOThiMTBiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pZGUuaApAQCAtOSw3ICs5LDYgQEAKICAqICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaXJxcy5oCmluZGV4IGVhYmQzYmUuLmQ3OTQwNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lycXMuaApAQCAtNyw3ICs3LDYgQEAKICAqCiAgKiAyMDAxLzExLzE0CVJNSwlDbGVhbmVkIHVwIGFuZCBzdGFuZGFyZGlzZWQgYSBsb3Qgb2YgdGhlIElSUXMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZQlJUlFfR1BJTzAJCTAKICNkZWZpbmUJSVJRX0dQSU8xCQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKaW5kZXggYTI5ZmFjMS4uMWZmMTcyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zeXN0ZW0uaAppbmRleCAwZjA2MTJmLi5hZWY5MWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3N5c3RlbS5oCkBAIC0zLDcgKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAoYykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oCmluZGV4IDNkNzI4M2QuLjRiMGNlM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJNX0FUT01JQ19ICiAjZGVmaW5lIF9fQVNNX0FSTV9BVE9NSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9idWcuaCBiL2luY2x1ZGUvYXNtLWFybS9idWcuaAppbmRleCA1YWI4MjE2Li43ZmIwMjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNQVJNX0JVR19ICiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KIAogI2lmZGVmIENPTkZJR19CVUcKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKaW5kZXggNzQ2YmU1Ni4uZmUwYzc0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01BUk1fQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9BU01BUk1fQ0FDSEVGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9jcHUuaCBiL2luY2x1ZGUvYXNtLWFybS9jcHUuaAppbmRleCA3NTFiYzc0Li43MTU0MjZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2NwdS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9DUFVfSAogI2RlZmluZSBfX0FTTV9BUk1fQ1BVX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCiBzdHJ1Y3QgY3B1aW5mb19hcm0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaAppbmRleCA2M2NhNzQxLi41NWViNGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+IC8qIG5lZWQgc3RydWN0IHBhZ2UgKi8KIAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2RtYS5oCmluZGV4IDQ5YzAxZTIuLjlmMmM1MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZG1hLmgKQEAgLTMsNyArMyw2IEBACiAKIHR5cGVkZWYgdW5zaWduZWQgaW50IGRtYWNoX3Q7CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9lbGYuaCBiL2luY2x1ZGUvYXNtLWFybS9lbGYuaAppbmRleCAyZDQ0YjQyLi43MTA2MWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2VsZi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTUFSTV9FTEZfSAogI2RlZmluZSBfX0FTTUFSTV9FTEZfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaCBiL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKaW5kZXggNTJiYWUwOC4uMTMyYzNjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9GUFNUQVRFX0gKICNkZWZpbmUgX19BU01fQVJNX0ZQU1RBVEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9nbHVlLmggYi9pbmNsdWRlL2FzbS1hcm0vZ2x1ZS5oCmluZGV4IDIyM2UwZDYuLjBjYzVkM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9nbHVlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2dsdWUuaApAQCAtMTUsNyArMTUsNiBAQAogICovCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX1NURENfXwogI2RlZmluZSBfX19fZ2x1ZShuYW1lLGZuKQluYW1lIyNmbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmgKaW5kZXggMWNiYjE3My4uMTgyMzEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVjMjEyODUuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9kZWMyMTI4NS5oCmluZGV4IDY2ODVlM2YuLjU0NmY3MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9kZWMyMTI4NS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9kZWMyMTI4NS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIERDMjEyODVfUENJX0lPCQkJMHg3YzAwMDAwMAogI2RlZmluZSBEQzIxMjg1X1BDSV9NRU0JCQkweDgwMDAwMDAwCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjZGVmaW5lIERDMjEyODVfSU8oeCkJCSgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShBUk1DU1JfQkFTRSsoeCkpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvbWQuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb21kLmgKaW5kZXggODJmYTJjMi4uMzk2ZTU1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvbWQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9tZC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9fQVNNQVJNX0hBUkRXQVJFX0lPTURfSAogI2RlZmluZSBfX0FTTUFSTV9IQVJEV0FSRV9JT01EX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbGVkcy5oIGIvaW5jbHVkZS9hc20tYXJtL2xlZHMuaAppbmRleCA4OGNlNDEyLi4xMjI5MGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbGVkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9sZWRzLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgQVNNX0FSTV9MRURTX0gKICNkZWZpbmUgQVNNX0FSTV9MRURTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiB0eXBlZGVmIGVudW0gewogCWxlZF9pZGxlX3N0YXJ0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX2F0OTFybTkyMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9hdDkxcm05MjAwLmgKaW5kZXggOThmNGIwYy4uYTAyNjlkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX2F0OTFybTkyMDAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfYXQ5MXJtOTIwMC5oCkBAIC03LDcgKzcsNiBAQAogICoKICAqICBMb3cgbGV2ZWwgbWFjaGluZSBkZXBlbmRlbnQgVUFSVCBmdW5jdGlvbnMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RydWN0IHVhcnRfcG9ydDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX3NhMTEwMC5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX3NhMTEwMC5oCmluZGV4IDkxNjIwMTguLjIwYzIyYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9zYTExMDAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfc2ExMTAwLmgKQEAgLTcsNyArNyw2IEBACiAgKgogICogTG93IGxldmVsIG1hY2hpbmUgZGVwZW5kZW50IFVBUlQgZnVuY3Rpb25zLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCB1YXJ0X3BvcnQ7CiBzdHJ1Y3QgdWFydF9pbmZvOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oCmluZGV4IDk2YzZkYjcuLjlmMjgwNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC90aW1lLmgKQEAgLTUwLDYgKzUwLDcgQEAKICNkZWZpbmUgRFlOX1RJQ0tfRU5BQkxFRAkoMSA8PCAxKQogCiBzdHJ1Y3QgZHluX3RpY2tfdGltZXIgeworCXNwaW5sb2NrX3QJbG9jazsKIAl1bnNpZ25lZCBpbnQJc3RhdGU7CQkJLyogQ3VycmVudCBzdGF0ZSAqLwogCWludAkJKCplbmFibGUpKHZvaWQpOwkvKiBFbmFibGVzIGR5bmFtaWMgdGljayAqLwogCWludAkJKCpkaXNhYmxlKSh2b2lkKTsJLyogRGlzYWJsZXMgZHluYW1pYyB0aWNrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKaW5kZXggMjA5Mjg5NC4uNzMxZTMyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaApAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBVTCh4KSAoeCkKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wYWdlLmggYi9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oCmluZGV4IGE0MDRkMmIuLjY2Y2ZlYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNQVJNX1BBR0VfSAogI2RlZmluZSBfQVNNQVJNX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJCTEyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGNpLmggYi9pbmNsdWRlL2FzbS1hcm0vcGNpLmgKaW5kZXggZWFkM2NlZC4uZjIxYWJkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wY2kuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgQVNNQVJNX1BDSV9ICiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiAvKiBmb3IgUENJQklPU19NSU5fKiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2MtZm5zLmggYi9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaAppbmRleCAxMDYwNDVlLi5lOTMxMDg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaApAQCAtMTMsNyArMTMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBXb3JrIG91dCBpZiB3ZSBuZWVkIG11bHRpcGxlIENQVSBzdXBwb3J0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmgKaW5kZXggNzdhZGI3Zi4uMmJlYmUzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fUFRSQUNFX0gKICNkZWZpbmUgX19BU01fQVJNX1BUUkFDRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBQVFJBQ0VfR0VUUkVHUwkJMTIKICNkZWZpbmUgUFRSQUNFX1NFVFJFR1MJCTEzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc21wLmggYi9pbmNsdWRlL2FzbS1hcm0vc21wLmgKaW5kZXggZmU0NWY3Zi4uZjY3YWNjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zbXAuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fU01QX0gKICNkZWZpbmUgX19BU01fQVJNX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKaW5kZXggOTViM2FiZi4uOWM3NDRhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIENQVV9BUkNIX1VOS05PV04JMAogI2RlZmluZSBDUFVfQVJDSF9BUk12MwkJMQpAQCAtMTI3LDYgKzEyNiwxMiBAQAogfQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9YU0MzKQorI2RlZmluZQljcHVfaXNfeHNjYWxlKCkJMAorI2Vsc2UKKyNkZWZpbmUJY3B1X2lzX3hzY2FsZSgpCTEKKyNlbmRpZgorCiAjZGVmaW5lIHNldF9jcih4KQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCiAJIm1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDAJQCBzZXQgQ1IiCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKaW5kZXggNzI4OTkyNC4uZDk3ZmM3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTUFSTV9UTEJGTFVTSF9ICiAjZGVmaW5lIF9BU01BUk1fVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgQ09ORklHX01NVQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKaW5kZXggY2JmMzlhNS4uMWU4OTFmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaApAQCAtMTMsOCArMTMsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fVU5JU1REX0gKICNkZWZpbmUgX19BU01fQVJNX1VOSVNURF9ICiAKLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KICNkZWZpbmUgX19OUl9PQUJJX1NZU0NBTExfQkFTRQkweDkwMDAwMAogCiAjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQpAQCAtMzc4LDYgKzM3Niw5IEBACiAjdW5kZWYgX19OUl9pcGMKICNlbmRpZgogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKwogI2RlZmluZSBfX3N5czIoeCkgI3gKICNkZWZpbmUgX19zeXMxKHgpIF9fc3lzMih4KQogCkBAIC01MjYsNyArNTI3LDYgQEAKICAgX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJCQlcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKQEAgLTU0Nyw3ICs1NDcsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU09DS0VUQ0FMTAogI2VuZGlmCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNTcxLDcgKzU3MCw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01ODEsNCArNTgwLDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fQVJNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCmluZGV4IDE1NTJjODYuLjk3ZTk0NGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2F0b21pYy5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BVE9NSUNfSAogI2RlZmluZSBfX0FTTV9BUk1fQVRPTUlDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2Vycm9yIFNNUCBpcyBOT1Qgc3VwcG9ydGVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9idWcuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCmluZGV4IDcxNzdjNzMuLjg1NDVkNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNQVJNX0JVR19ICiAjZGVmaW5lIF9BU01BUk1fQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwogI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2RtYS5oCmluZGV4IDk5NWUyMjMuLjQzMjZiYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2RtYS5oCkBAIC0zLDcgKzMsNiBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGludCBkbWFjaF90OwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaGFyZGlycS5oCmluZGV4IDg3YzE5ZDIuLmU3MTc3NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkd2FyZS5oCmluZGV4IDgyZmM1NWUuLjgwMWRmMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaGFyZHdhcmUuaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9pby5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaW8uaAppbmRleCAwMmY5NGQ4Li4yYWEwMzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2lvLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2xlZHMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2xlZHMuaAppbmRleCA4OGNlNDEyLi4xMjI5MGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9sZWRzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbGVkcy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIEFTTV9BUk1fTEVEU19ICiAjZGVmaW5lIEFTTV9BUk1fTEVEU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBlbnVtIHsKIAlsZWRfaWRsZV9zdGFydCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L21hY2gtdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFybTI2L21hY2gtdHlwZXMuaAppbmRleCBiMzQwNDViLi4wYWVhZWRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9tYWNoLXR5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvbWFjaC10eXBlcy5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fTUFDSF9UWVBFX0gKICNkZWZpbmUgX19BU01fQVJNX01BQ0hfVFlQRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIGV4dGVybiB1bnNpZ25lZCBpbnQgX19tYWNoaW5lX2FyY2hfdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BhZ2UuaAppbmRleCBkM2YyM2FjLi5mYTE5ZGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNQVJNX1BBR0VfSAogI2RlZmluZSBfQVNNQVJNX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oCmluZGV4IGE1OTAyNTAuLjE5YWM5MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmgKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXJpYWwuaAppbmRleCA1ZmM3NDdkLi5kZDg2YTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zZXJpYWwuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX0FTTV9TRVJJQUxfSAogI2RlZmluZSBfX0FTTV9TRVJJQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oCmluZGV4IDVjYTc3MTYuLjM4MzQ5ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3N5c2lycS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc3lzaXJxLmgKaW5kZXggY2FkMjUwYy4uODFkY2E5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvc3lzaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc3lzaXJxLmgKQEAgLTExLDcgKzExLDYgQEAKICAqICAgMDQtMDQtMTk5OCBQSkIgICAgIE1lcmdlZCBhcmMgYW5kIGE1ayB2ZXJzaW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQTVLKQogI2RlZmluZSBJUlFfUFJJTlRFUiAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c3RlbS5oCmluZGV4IDcwMjg4NDkuLmQxZjY5ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c3RlbS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBjb21waWxlciBkaWQgYWN0dWFsbHkgYWxsb2NhdGUgdGhlIHJlZ2lzdGVyIHdlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCmluZGV4IGJlNGMyZmIuLjcwZWI2ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCkBAIC0xNCw4ICsxNCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9VTklTVERfSAogI2RlZmluZSBfX0FTTV9BUk1fVU5JU1REX0gKIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLQogI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRQkweDkwMDAwMAogCiAvKgpAQCAtMzEyLDYgKzMxMCw5IEBACiAjZGVmaW5lIF9fQVJNX05SX2NhY2hlZmx1c2gJCShfX0FSTV9OUl9CQVNFKzIpCiAjZGVmaW5lIF9fQVJNX05SX3VzcjI2CQkJKF9fQVJNX05SX0JBU0UrMykKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKICNkZWZpbmUgX19zeXMyKHgpICN4CiAjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKIApAQCAtNDQzLDcgKzQ0NCw2IEBACiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKQEAgLTQ2Miw3ICs0NjIsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTQ4Niw3ICs0ODUsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNDk2LDQgKzQ5NSw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX0FSTV9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9pby5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9pby5oCmluZGV4IGRkMzkxOTguLjExZWY1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lvLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fQVJDSF9DUklTX0lPX0gKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3N2aW50by5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBFdHJheCBzaGFkb3cgcmVnaXN0ZXJzIC0gd2hpY2ggbGl2ZSBpbiBhcmNoL2NyaXMva2VybmVsL3NoYWRvd3MuYyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcGFnZS5oCmluZGV4IDQwN2U2ZTYuLjdkODMwN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQ1JJU19BUkNIX1BBR0VfSAogI2RlZmluZSBfQ1JJU19BUkNIX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3N5c3RlbS5oCmluZGV4IDFhYzdiNjMuLjRhOWNkMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQ1JJU19BUkNIX1NZU1RFTV9ICiAjZGVmaW5lIF9fQVNNX0NSSVNfQVJDSF9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIHJlYWQgdGhlIENQVSB2ZXJzaW9uIHJlZ2lzdGVyICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaW8uaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaW8uaAppbmRleCAwNDNjOWNlLi41ZWZlNGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pby5oCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9yZWdfbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL3JlZ19yZHdyLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaHdyZWdzL2dpb19kZWZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIGVudW0gY3Jpc3YzMl9pb19kaXIKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaXJxLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lycS5oCmluZGV4IGQzNWFhODEuLmVlYjBhODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9BUkNIX0lSUV9ICiAjZGVmaW5lIF9BU01fQVJDSF9JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSAiaHdyZWdzL2ludHJfdmVjdC5oIgogCiAvKiBOdW1iZXIgb2Ygbm9uLWNwdSBpbnRlcnJ1cHRzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wYWdlLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3BhZ2UuaAppbmRleCA3NzgyN2JjLi5mYTQ1NGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9DUklTX0FSQ0hfUEFHRV9ICiAjZGVmaW5lIF9BU01fQ1JJU19BUkNIX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3Byb2Nlc3Nvci5oCmluZGV4IDMyYmYyZTUuLjU1NTNiMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wcm9jZXNzb3IuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9DUklTX0FSQ0hfUFJPQ0VTU09SX0gKICNkZWZpbmUgX0FTTV9DUklTX0FSQ0hfUFJPQ0VTU09SX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBSZXR1cm4gY3VycmVudCBpbnN0cnVjdGlvbiBwb2ludGVyLiAqLwogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3N5c3RlbS5oCmluZGV4IGEzZDc1ZDUuLmQyMGUyZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9DUklTX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX0FTTV9DUklTX0FSQ0hfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBSZWFkIHRoZSBDUFUgdmVyc2lvbiByZWdpc3Rlci4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZHZyKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2VzaGxpYmxkLmggYi9pbmNsdWRlL2FzbS1jcmlzL2VzaGxpYmxkLmgKaW5kZXggMmI1NzdjZC4uMTBjZTM2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9lc2hsaWJsZC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvZXNobGlibGQuaApAQCAtMzIsNyArMzIsNiBAQAogLyogV2UgaGF2ZSBkZXBlbmRlbmNpZXMgYWxsIG92ZXIgdGhlIHBsYWNlIGZvciB0aGUgaG9zdCBzeXN0ZW0KICAgIGZvciB4c2ltIGJlaW5nIGEgbGludXggc3lzdGVtLCBzbyBsZXQncyBub3QgcHJldGVuZCBhbnl0aGluZwogICAgZWxzZSB3aXRoICNpZmRlZjpzIGhlcmUgdW50aWwgZml4ZWQuICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogCiAvKiBNYXliZSBkbyBzYW5pdHkgY2hlY2tpbmcgaWYgZmlsZSBpbnB1dC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZXRyYXhncGlvLmggYi9pbmNsdWRlL2FzbS1jcmlzL2V0cmF4Z3Bpby5oCmluZGV4IDgwZWUxMGYuLjVkMDAyOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZXRyYXhncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9ldHJheGdwaW8uaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBfQVNNX0VUUkFYR1BJT19ICiAjZGVmaW5lIF9BU01fRVRSQVhHUElPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogLyogZXRyYXhncGlvIF9JT0NfVFlQRSwgYml0cyA4IHRvIDE1IGluIGlvY3RsIGNtZCAqLwogI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YxMAogI2RlZmluZSBFVFJBWEdQSU9fSU9DVFlQRSA0MwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9mYXN0dGltZXIuaCBiL2luY2x1ZGUvYXNtLWNyaXMvZmFzdHRpbWVyLmgKaW5kZXggNjk1MjIwMi4uYTNhNzcxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9mYXN0dGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2Zhc3R0aW1lci5oCkBAIC01LDcgKzUsNiBAQAogICogVGhpcyBtYXkgYmUgdXNlZnVsIGluIG90aGVyIE9TIHRoYW4gTGludXggc28gdXNlIDIgc3BhY2UgaW5kZW50YXRpb24uLi4KICAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMiBBeGlzIENvbW11bmljYXRpb25zIEFCCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+IC8qIHN0cnVjdCB0aW1ldmFsICovCiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaAppbmRleCAzNzg3NjMzLi44MTgzMmU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0NSSVNfUEFHRV9ICiAjZGVmaW5lIF9DUklTX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcGFnZS5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9wY2kuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcGNpLmgKaW5kZXggMjA2NGJjMS4uYjJhYzhhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3BjaS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9DUklTX1BDSV9ICiAjZGVmaW5lIF9fQVNNX0NSSVNfUENJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igc3RydWN0IHBhZ2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wZ3RhYmxlLmgKaW5kZXggNzBhODMyNS4uNWQ3NmMxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wZ3RhYmxlLmgKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wcm9jZXNzb3IuaAppbmRleCA5NjFlMmJjLi41NjhkYTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcHJvY2Vzc29yLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fQ1JJU19QUk9DRVNTT1JfSAogI2RlZmluZSBfX0FTTV9DUklTX1BST0NFU1NPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3J0Yy5oIGIvaW5jbHVkZS9hc20tY3Jpcy9ydGMuaAppbmRleCA5N2MxMzAzLi5jYjRiZjkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3J0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcnRjLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIF9fUlRDX0hfXwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19FVFJBWF9EUzEzMDIKICAgIC8qIERhbGxhcyBEUzEzMDIgY2xvY2svY2FsZW5kYXIgcmVnaXN0ZXIgbnVtYmVycy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWNyaXMvdGxiZmx1c2guaAppbmRleCBjNTIyMzgwLi4wNTY5NjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQ1JJU19UTEJGTFVTSF9ICiAjZGVmaW5lIF9DUklTX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAppbmRleCBiYjJkZmU0Li5jMjk1NGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKQEAgLTI5NSwxMSArMjk1LDExIEBACiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjg3CiAjZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODgKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAyODkKIAogCi0KLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCkBAIC0zNzksMTIgKzM3OSwxMCBAQAogICogY29tcGxhaW50cy4gIFdlIGRvbid0IHdhbnQgdG8gdXNlIC1mbm8tYnVpbHRpbiwgc28ganVzdCB1c2UgYQogICogZGlmZmVyZW50IG5hbWUgd2hlbiBpbiB0aGUga2VybmVsLgogICovCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfZXhpdCBrZXJuZWxfc3lzY2FsbF9leGl0Ci0jZW5kaWYKIHN0YXRpYyBpbmxpbmUgX3N5c2NhbGwxKGludCxfZXhpdCxpbnQsZXhpdGNvZGUpCiBzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhwaWRfdCx3YWl0cGlkLHBpZF90LHBpZCxpbnQgKix3YWl0X3N0YXQsaW50LG9wdGlvbnMpCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIAogLyoKQEAgLTM5NSw0ICszOTMsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0NSSVNfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmgKaW5kZXggNWQ5Zjg0Yi4uOWE0ZmYwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9hdG9taWMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfQVNNX0FUT01JQ19ICiAjZGVmaW5lIF9BU01fQVRPTUlDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3Nwci1yZWdzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaAppbmRleCA2MzQ0ZDA2Li45ODBhZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9BU01fQklUT1BTX0gKICNkZWZpbmUgX0FTTV9CSVRPUFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oIGIvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oCmluZGV4IDQ1MTcxMmMuLjZiMWI0NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYnVnLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9CVUdfSAogI2RlZmluZSBfQVNNX0JVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oCmluZGV4IGNmNjliNjMuLjI3OTcxNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9jYWNoZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0NBQ0hFX0gKICNkZWZpbmUgX19BU01fQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCiAjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQkoQ09ORklHX0ZSVl9MMV9DQUNIRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9kbWEuaCBiL2luY2x1ZGUvYXNtLWZydi9kbWEuaAppbmRleCBkOGY5YTJmLi4xOGQ2YmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2RtYS5oCkBAIC0xNCw3ICsxNCw2IEBACiAKIC8vI2RlZmluZSBETUFfREVCVUcgMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICN1bmRlZiBNQVhfRE1BX0NIQU5ORUxTCQkvKiBkb24ndCB1c2Uga2VybmVsL2RtYS5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZWxmLmggYi9pbmNsdWRlL2FzbS1mcnYvZWxmLmgKaW5kZXggN2QyMDk4Zi4uMzg2NTZkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9lbGYuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9FTEZfSAogI2RlZmluZSBfX0FTTV9FTEZfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS91c2VyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9mcHUuaCBiL2luY2x1ZGUvYXNtLWZydi9mcHUuaAppbmRleCBiMTE3OGY4Li5kNzNjNjBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2ZwdS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9GUFVfSAogI2RlZmluZSBfX0FTTV9GUFVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1mcnYvaGFyZGlycS5oCmluZGV4IDY4NTEyMzkuLjc1ODFiNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2hhcmRpcnEuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1mcnYvaGlnaG1lbS5oCmluZGV4IDI5NWY3NGEuLmNmYmY3ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaApAQCAtMTcsNyArMTcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CiAjaW5jbHVkZSA8YXNtL3Nwci1yZWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaWRlLmggYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKaW5kZXggYWUwMzFlYS4uZjBiZDJjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pZGUuaApAQCAtMTQsNyArMTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lvLmggYi9pbmNsdWRlL2FzbS1mcnYvaW8uaAppbmRleCAwMTI0N2NiLi5iNTZlYmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaW8uaApAQCAtMTcsNyArMTcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaXJxLmggYi9pbmNsdWRlL2FzbS1mcnYvaXJxLmgKaW5kZXggMmMxNmQ4ZC4uNThiNjE5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9pcnEuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX0lSUV9IXwogI2RlZmluZSBfQVNNX0lSUV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiB0aGUgc3lzdGVtIGhhcyBhbiBvbi1DUFUgUElDIGFuZCBhbm90aGVyIFBJQyBvbiB0aGUgRlBHQSBhbmQgb3RoZXIgUElDcyBvbiBvdGhlciBwZXJpcGhlcmFscywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tZnJ2L21tdV9jb250ZXh0LmgKaW5kZXggNGZiOWVhMy4uNzJlZGNhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L21tdV9jb250ZXh0LmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9BU01fTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWZydi9wYWdlLmgKaW5kZXggZGMwZjdlMC4uMTM0Y2MwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcGFnZS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL21lbS1sYXlvdXQuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wY2kuaCBiL2luY2x1ZGUvYXNtLWZydi9wY2kuaAppbmRleCA1OThiMGM2Li5mMzVhNDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BjaS5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIEFTTV9QQ0lfSAogI2RlZmluZQlBU01fUENJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1mcnYvcGdhbGxvYy5oCmluZGV4IDFiZDI4ZjQuLmNlOTgyYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BnYWxsb2MuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfQVNNX1BHQUxMT0NfSAogI2RlZmluZSBfQVNNX1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCmluZGV4IGQxYzNiMTguLjdhZjc0ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBfQVNNX1BHVEFCTEVfSAogI2RlZmluZSBfQVNNX1BHVEFCTEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21lbS1sYXlvdXQuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1mcnYvcHJvY2Vzc29yLmgKaW5kZXggNTIyOGMxOC4uMWM0ZGJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wcm9jZXNzb3IuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1BST0NFU1NPUl9ICiAjZGVmaW5lIF9BU01fUFJPQ0VTU09SX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20tZnJ2L3NlZ21lbnQuaAppbmRleCA2MTIyMmYwLi5lMzYxNmE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc2VnbWVudC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zZWdtZW50LmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9TRUdNRU5UX0gKICNkZWZpbmUgX0FTTV9TRUdNRU5UX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1mcnYvc2VyaWFsLmgKaW5kZXggNjkxN2Q1NS4uZGJiODI1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zZXJpYWwuaApAQCAtNiw3ICs2LDYgQEAKICAqCiAgKiBCYXNlZCBvbiBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2VyaWFsLXJlZ3MuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zbXAuaCBiL2luY2x1ZGUvYXNtLWZydi9zbXAuaAppbmRleCA1Y2E3NzE2Li4zODM0OWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3NtcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaAppbmRleCAxNzM0ZWQ5Li4zNTE4NjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fU1lTVEVNX0gKICNkZWZpbmUgX0FTTV9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGdldCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tZnJ2L3RsYmZsdXNoLmgKaW5kZXggYmMzNDYyNjIuLmRhM2EzMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fVExCRkxVU0hfSAogI2RlZmluZSBfQVNNX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWZydi90eXBlcy5oCmluZGV4IDI1NjBmNTkuLjFiNmQxOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi90eXBlcy5oCkBAIC00Niw3ICs0Niw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBzaWduZWQgY2hhciBzODsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaCBiL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaAppbmRleCBhMGQxOTliLi5kYzhlOWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fVU5BTElHTkVEX0gKICNkZWZpbmUgX0FTTV9VTkFMSUdORURfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBVbmFsaWduZWQgYWNjZXNzZXMgb24gdUNsaW51eCBjYW4ndCBiZSBwZXJmb3JtZWQgaW4gYSBmYXVsdCBoYW5kbGVyIC0gdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKaW5kZXggMjY2MmEzZS4uN2MyZTcxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaApAQCAtMzE3LDYgKzMxNyw4IEBACiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwOAogI2RlZmluZSBfX05SX3Bwb2xsCQkzMDkKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAzMTAKIAogLyoKQEAgLTQ3Nyw5ICs0NzksOCBAQAogCXJldHVybiB3YWl0cGlkKC0xLHdhaXRfc3RhdCwwKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogLyogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUiAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtNTAzLDcgKzUwNCw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECi0jZW5kaWYKIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTUxNSw0ICs1MTUsNSBAQAogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3ZpcnRjb252ZXJ0LmggYi9pbmNsdWRlL2FzbS1mcnYvdmlydGNvbnZlcnQuaAppbmRleCBhMjlhMGFlLi41OTc4OGZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdmlydGNvbnZlcnQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdmlydGNvbnZlcnQuaApAQCAtMTcsNyArMTcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKICNpZmRlZiBDT05GSUdfTU1VCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCAxYTU2NWE5Li4wY2Q5NzExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fR0VORVJJQ19CVUdfSAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19CVUcKICNpZm5kZWYgSEFWRV9BUkNIX0JVRwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oCmluZGV4IDFiMzU2MjAuLmI1NDFlNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCmluZGV4IGI2NjM1MjAuLmMxNTRiOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19GQ05UTF9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19GQ05UTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uIGZpbGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKaW5kZXggOTI5MWMyNC4uYWI0NjkyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9HRU5FUklDX0xPQ0FMX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX0xPQ0FMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCmluZGV4IDM1OGU0ZDMuLmMyMDU5YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCkBAIC0xNTksMTcgKzE1OSw4IEBACiAjZGVmaW5lIGxhenlfbW11X3Byb3RfdXBkYXRlKHB0ZSkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZm5kZWYgX19IQVZFX0FSQ0hfTVVMVElQTEVfWkVST19QQUdFCisjaWZuZGVmIF9fSEFWRV9BUkNIX01PVkVfUFRFCiAjZGVmaW5lIG1vdmVfcHRlKHB0ZSwgcHJvdCwgb2xkX2FkZHIsIG5ld19hZGRyKQkocHRlKQotI2Vsc2UKLSNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCQkJCVwKLSh7CQkJCQkJCQkJXAotIAlwdGVfdCBuZXdwdGUgPSAocHRlKTsJCQkJCQlcCi0JaWYgKHB0ZV9wcmVzZW50KHB0ZSkgJiYgcGZuX3ZhbGlkKHB0ZV9wZm4ocHRlKSkgJiYJCVwKLQkJCXB0ZV9wYWdlKHB0ZSkgPT0gWkVST19QQUdFKG9sZF9hZGRyKSkJCVwKLQkJbmV3cHRlID0gbWtfcHRlKFpFUk9fUEFHRShuZXdfYWRkciksIChwcm90KSk7CQlcCi0JbmV3cHRlOwkJCQkJCQkJXAotfSkKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnbmFsLmgKaW5kZXggOTQxOGQ2ZS4uZGFlMWQ4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ25hbC5oCkBAIC0xLDMgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX1NJR05BTF9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKICNpZm5kZWYgU0lHX0JMT0NLCiAjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCiAjZW5kaWYKQEAgLTE5LDMgKzI0LDUgQEAKICNkZWZpbmUgU0lHX0lHTgkoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwogI2RlZmluZSBTSUdfRVJSCSgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCiAjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCmluZGV4IGNkZDQxNDUuLjg2N2Q5MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfX1RMQl9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19fVExCX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaAppbmRleCA1NzRmNTdiNi4uZDc2Mjk5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgMjAwMiwgWW9zaGlub3JpIFNhdG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2RtYS5oIGIvaW5jbHVkZS9hc20taDgzMDAvZG1hLmgKaW5kZXggMzcwODY4MS4uM2VkYmFhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZG1hLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9ETUFfSAogI2RlZmluZSBfSDgzMDBfRE1BX0ggCiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBTZXQgbnVtYmVyIG9mIGNoYW5uZWxzIG9mIERNQSBvbiBDb2xkRmlyZSBmb3IgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2VsZi5oIGIvaW5jbHVkZS9hc20taDgzMDAvZWxmLmgKaW5kZXggZjRhZjE1NS4uN2JhNmEwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZWxmLmgKQEAgLTUsNyArNSw2IEBACiAgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VzZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20taDgzMDAvaGFyZGlycS5oCmluZGV4IGU5NjFiZmUuLjE4ZmE3OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9oYXJkaXJxLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9fSDgzMDBfSEFSRElSUV9ICiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9pby5oIGIvaW5jbHVkZS9hc20taDgzMDAvaW8uaAppbmRleCAxNzczZTM3Li45MWI3NDg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2lvLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAva2V5Ym9hcmQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2tleWJvYXJkLmgKaW5kZXggYjA1ZDExMy4uZmJhZDY1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAva2V5Ym9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9rZXlib2FyZC5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfSDgzMDBfS0VZQk9BUkRfSAogI2RlZmluZSBfSDgzMDBfS0VZQk9BUkRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGR1bW15IGkuZS4gbm8gcmVhbCBrZXlib2FyZCAqLwogI2RlZmluZSBrYmRfc2V0a2V5Y29kZSh4Li4uKQkoLUVOT1NZUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9tbXVfY29udGV4dC5oCmluZGV4IDIzYjU1NWIuLjg1NTcyMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvbW11X2NvbnRleHQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19IODMwMF9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9fSDgzMDBfTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGFnZS5oIGIvaW5jbHVkZS9hc20taDgzMDAvcGFnZS5oCmluZGV4IDY0NzJjOWYuLmY5ZjlkM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9QQUdFX0gKICNkZWZpbmUgX0g4MzAwX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2Vfb2Zmc2V0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9wYWdlX29mZnNldC5oCmluZGV4IDhjYzZlMTcuLmY4NzA2NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2Vfb2Zmc2V0LmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcGFnZV9vZmZzZXQuaApAQCAtMSw0ICsxLDMgQEAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3BhcmFtLmgKaW5kZXggMTI2ZGRkZi4uYzI1ODA2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wYXJhbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSDgzMDBfUEFSQU1fSAogI2RlZmluZSBfSDgzMDBfUEFSQU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgSFoKICNkZWZpbmUgSFogMTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmgKaW5kZXggZjZlMjk2Zi4uOGI3YzY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wcm9jZXNzb3IuaAppbmRleCBjNmYwYTcxMC4uYzdlMmY0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqLwogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWFwaG9yZS1oZWxwZXIuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWFwaG9yZS1oZWxwZXIuaAppbmRleCAyOWUwZmJmLi40ZmVhMzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUtaGVscGVyLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLWhlbHBlci5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NobS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2htLmgKaW5kZXggYmVjNzU4NS4uZWQ2NjIzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc2htLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2htLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9TSE1fSAogI2RlZmluZSBfSDgzMDBfU0hNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBmb3JtYXQgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIHRoYXQgY29ycmVzcG9uZCB0byBzaGFyZWQgbWVtb3J5IHBhZ2VzCiAgICBjdXJyZW50bHkgb3V0IGluIHN3YXAgc3BhY2UgKHNlZSBhbHNvIG1tL3N3YXAuYyk6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCmluZGV4IDhlODFjZjYuLjEzNGUwOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSDgzMDBfU1lTVEVNX0gKICNkZWZpbmUgX0g4MzAwX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaAppbmRleCA4YTkzOTYxLi5mZmI2N2Y0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19IODMwMF9VTkFMSUdORURfSAogI2RlZmluZSBfX0g4MzAwX1VOQUxJR05FRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogVXNlIG1lbW1vdmUgaGVyZSwgc28gZ2NjIGRvZXMgbm90IGluc2VydCBhIF9fYnVpbHRpbl9tZW1jcHkuICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKaW5kZXggYWRiMDUxNS4uMjI2ZGQ1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKQEAgLTI5Miw2ICsyOTIsOCBAQAogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4NwogI2RlZmluZSBfX05SX2tleWN0bAkJMjg4CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjg5CiAKIApAQCAtNDYwLDcgKzQ2Miw2IEBACiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgX19yZXMpOwkJCVwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKQEAgLTQ4Myw3ICs0ODQsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTUzNCw3ICs1MzQsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNTQzLDQgKzU0Myw1IEBACiAgIGFzbSAoIi53ZWFrXHRfIiAjbmFtZSAiXG4iCQkJCVwKICAgICAgICAiLnNldFx0XyIgI25hbWUgIixfc3lzX25pX3N5c2NhbGwiKTsKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0g4MzAwX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdmlydGNvbnZlcnQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3ZpcnRjb252ZXJ0LmgKaW5kZXggM2IzNDRjMS4uZWU3ZDVlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvdmlydGNvbnZlcnQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC92aXJ0Y29udmVydC5oCkBAIC03LDcgKzcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAppbmRleCAyODgyMzNmLi5jYzliOTQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQVBJQ19ICiAjZGVmaW5lIF9fQVNNX0FQSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCmluZGV4IDRkZGNlNTIuLjRmMDYxZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BUkNIX0kzODZfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX0kzODZfQVRPTUlDX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaAppbmRleCAwOGRlYWVlLi4xYzc4MGZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgMTk5MiwgTGludXMgVG9ydmFsZHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYnVnLmggYi9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oCmluZGV4IDhmNzlkZTEuLjgwNjJjZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9idWcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0kzODZfQlVHX0gKICNkZWZpbmUgX0kzODZfQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGVsbCB0aGUgdXNlciB0aGVyZSBpcyBzb21lIHByb2JsZW0uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2J1Z3MuaCBiL2luY2x1ZGUvYXNtLWkzODYvYnVncy5oCmluZGV4IDUwMjMzZTAuLjJhOWU0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYnVncy5oCkBAIC0xNyw3ICsxNyw2IEBACiAgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1pMzg2L2J5dGVvcmRlci5oCmluZGV4IGEwZDczZjQuLmE0NTQ3MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYnl0ZW9yZGVyLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9ieXRlb3JkZXIuaApAQCAtOCw3ICs4LDYgQEAKIAogLyogRm9yIGF2b2lkaW5nIGJzd2FwIG9uIGkzODYgKi8KICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjZW5kaWYKIAogc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvY2FjaGUuaAppbmRleCBjYTE1YzljLi41N2M2MmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jYWNoZS5oCkBAIC00LDcgKzQsNiBAQAogI2lmbmRlZiBfX0FSQ0hfSTM4Nl9DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9JMzg2X0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBMMSBjYWNoZSBsaW5lIHNpemUgKi8KICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oIGIvaW5jbHVkZS9hc20taTM4Ni9kbWEuaAppbmRleCBmMjRiMmJiLi5kMjNhYWM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZG1hLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fRE1BX0gKICNkZWZpbmUgX0FTTV9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JLyogQW5kIHNwaW5sb2NrcyAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZml4bWFwLmggYi9pbmNsdWRlL2FzbS1pMzg2L2ZpeG1hcC5oCmluZGV4IGNmYjFjNjEuLmY3ZTA2OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZml4bWFwLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9maXhtYXAuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfQVNNX0ZJWE1BUF9ICiAjZGVmaW5lIF9BU01fRklYTUFQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiB1c2VkIGJ5IHZtYWxsb2MuYywgdnN5c2NhbGwubGRzLlMuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1pMzg2L2hhcmRpcnEuaAppbmRleCBlZTc1NGQzLi4wZTM1OGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hpZ2htZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvaGlnaG1lbS5oCmluZGV4IDBmZDMzMTMuLmU5YTM0ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaGlnaG1lbS5oCkBAIC0yMCw3ICsyMCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oIGIvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmgKaW5kZXggN2YxYThhNi4uYWY1ZDQzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9ocGV0LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oIGIvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaAppbmRleCA2MjI4MTViLi45NWQzZmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaHdfaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqCTx0b21zb2Z0QGluZm9ybWF0aWsudHUtY2hlbW5pdHouZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pZGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvaWRlLmgKaW5kZXggNDU0NDQwMS4uNzM0NjVkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBNQVhfSFdJRlMKICMgaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lvLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lvLmgKaW5kZXggNzk2NzBiYi4uYjM3MjRmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaW8uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9JT19ICiAjZGVmaW5lIF9BU01fSU9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pb19hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAppbmRleCBkOTJlMjUzLi41MDkyZTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvX2FwaWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fSU9fQVBJQ19ICiAjZGVmaW5lIF9fQVNNX0lPX0FQSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lycS5oIGIvaW5jbHVkZS9hc20taTM4Ni9pcnEuaAppbmRleCA1MTY5ZDdhLi4zMzE3MjZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaXJxLmgKQEAgLTEwLDcgKzEwLDYgQEAKICAqCTx0b21zb2Z0QGluZm9ybWF0aWsudHUtY2hlbW5pdHouZGU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAvKiBpbmNsdWRlIGNvbWVzIGZyb20gbWFjaGluZSBzcGVjaWZpYyBkaXJlY3RvcnkgKi8KICNpbmNsdWRlICJpcnFfdmVjdG9ycy5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2ttYXBfdHlwZXMuaAppbmRleCA2ODg2YTBjLi44MDZhYWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2ttYXBfdHlwZXMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKICNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KICMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmgKaW5kZXggM2Q2ZDEyOS4uOWZkMDczMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX0FQSUNfSAogI2RlZmluZSBfX0FTTV9NQUNIX0FQSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjZGVmaW5lIGVzcl9kaXNhYmxlICgxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCmluZGV4IGJmMDgyMTguLjYyYjdiZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21tdV9jb250ZXh0LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fSTM4Nl9TQ0hFRF9ICiAjZGVmaW5lIF9fSTM4Nl9TQ0hFRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tdHJyLmggYi9pbmNsdWRlL2FzbS1pMzg2L210cnIuaAppbmRleCA2NGNmOTM3Li41YTQ2ZGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L210cnIuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L210cnIuaApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBfTElOVVhfTVRSUl9ICiAjZGVmaW5lIF9MSU5VWF9NVFJSX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaAppbmRleCAzMGY1MmEyLi5lM2E1NTJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19YODZfVVNFXzNETk9XCiAKQEAgLTEzNyw5ICsxMzYsOSBAQAogCSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAogCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhZ2UuaD4KIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9JMzg2X1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wYXJhbS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wYXJhbS5oCmluZGV4IDA5NTU4MGYuLjc0NWRjNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01pMzg2X1BBUkFNX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSMgaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KICMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLwogIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGNpLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BjaS5oCmluZGV4IDc4Yzg1OTg1YS4uNjRiNmQwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BjaS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX2kzODZfUENJX0gKICNkZWZpbmUgX19pMzg2X1BDSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogZm9yIHN0cnVjdCBwYWdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCmluZGV4IDAzODBjM2QuLjRiMWU2MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSTM4Nl9QR0FMTE9DX0gKICNkZWZpbmUgX0kzODZfUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igc3RydWN0IHBhZ2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKaW5kZXggNjcyYzNmNy4uMDk2OTdmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9JMzg2X1BHVEFCTEVfSAogI2RlZmluZSBfSTM4Nl9QR1RBQkxFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhlIExpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IGFzc3VtZXMgYSB0aHJlZS1sZXZlbCBwYWdlIHRhYmxlIHNldHVwLiBPbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKaW5kZXggODA1ZjBkYy4uNGRmMzgxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKaW5kZXggZTFlY2ZjYy4uYmQ2NzQ4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCkBAIC0yLDcgKzIsNiBAQAogICogaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCmluZGV4IDYxZDNhYjkuLjE0MmQxMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaApAQCAtNSw3ICs1LDYgQEAKICAqIFdlIG5lZWQgdGhlIEFQSUMgZGVmaW5pdGlvbnMgYXV0b21hdGljYWxseSBhcyBwYXJ0IG9mICdzbXAuaCcKICAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCmluZGV4IGQ3NmI3NjkuLjA0YmEzMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9yd2xvY2suaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3N0cmluZy5oIGIvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaAppbmRleCBiYjVmODhhLi5iOTI3NzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9JMzg2X1NUUklOR19IXwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogLyoKICAqIE9uIGEgNDg2IG9yIFBlbnRpdW0sIHdlIGFyZSBiZXR0ZXIgb2ZmIG5vdCB1c2luZyB0aGUKICAqIGJ5dGUgc3RyaW5nIG9wZXJhdGlvbnMuIEJ1dCBvbiBhIDM4NiBvciBhIFBQcm8gdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaAppbmRleCAxOWNjNzljLi4wMjQ5ZjkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NZU1RFTV9ICiAjZGVmaW5lIF9fQVNNX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgKaW5kZXggMWY3ZDQ4Yy4uODQyMGVkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaApAQCAtOSw3ICs5LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90aW1leC5oIGIvaW5jbHVkZS9hc20taTM4Ni90aW1leC5oCmluZGV4IDI5MmI1YTYuLmQ0MzQ5ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RpbWV4LmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9BU01pMzg2X1RJTUVYX0gKICNkZWZpbmUgX0FTTWkzODZfVElNRVhfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9FTEFOCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgKaW5kZXggYWIyMTZlMS4uZDU3Y2E1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0kzODZfVExCRkxVU0hfSAogI2RlZmluZSBfSTM4Nl9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90eXBlcy5oIGIvaW5jbHVkZS9hc20taTM4Ni90eXBlcy5oCmluZGV4IGU1MGEwOGIuLjRiNGIyOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmgKQEAgLTM1LDcgKzM1LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiB0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaAppbmRleCAzNzE0NTdiLi4xZWM2NTUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaApAQCAtNCw3ICs0LDYgQEAKIC8qCiAgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCmluZGV4IGViNGIxNTIuLmRlMmNjYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaApAQCAtMzIzLDYgKzMyMyw4IEBACiAjZGVmaW5lIF9fTlJfdGVlCQkzMTUKICNkZWZpbmUgX19OUl92bXNwbGljZQkJMzE2CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMgMzE3CiAKIC8qCkBAIC00MjIsNyArNDI0LDYgQEAKIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKQEAgLTQ0Niw3ICs0NDcsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNDk3LDQgKzQ5Nyw1IEBACiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKICNlbmRpZgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fSTM4Nl9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvYXNtbWFjcm8uaCBiL2luY2x1ZGUvYXNtLWlhNjQvYXNtbWFjcm8uaAppbmRleCBlZGYyY2ViYi4uYzIyYjQ2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9hc21tYWNyby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYXNtbWFjcm8uaApAQCAtNiw3ICs2LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgRU5UUlkobmFtZSkJCQkJXAogCS5hbGlnbiAzMjsJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oCmluZGV4IGYwYTEwNGQuLmU3NDgyYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9DQUNIRV9ICiAjZGVmaW5lIF9BU01fSUE2NF9DQUNIRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEhld2xldHQtUGFja2FyZCBDbwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9kZWxheS5oIGIvaW5jbHVkZS9hc20taWE2NC9kZWxheS5oCmluZGV4IGJiYTcwMjAuLmEzMGE2MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZGVsYXkuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2RlbGF5LmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBEb24gRHVnZ2VyIDxkb24uZHVnZ2VyQGludGVsLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20taWE2NC9kbWEtbWFwcGluZy5oCmluZGV4IGRmNjdkNDAuLjk5YThmOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2RtYS1tYXBwaW5nLmgKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKICNkZWZpbmUgZG1hX2FsbG9jX2NvaGVyZW50CXBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9kbWEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvZG1hLmgKaW5kZXggM2JlMWI0OS4uZGFkM2E3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2RtYS5oCkBAIC02LDcgKzYsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmggYi9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oCmluZGV4IDQ0NmZjZTAuLjI1Zjk4MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9lbGYuaApAQCAtOCw3ICs4LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20taWE2NC9oYXJkaXJxLmgKaW5kZXggMzNlZjhmMC4uMTQwZTQ5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9oYXJkaXJxLmgKQEAgLTYsNyArNiw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pYTMyLmggYi9pbmNsdWRlL2FzbS1pYTY0L2lhMzIuaAppbmRleCBmODA0NGExLi41ZmY4ZDc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2lhMzIuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2lhMzIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9JQTY0X0lBMzJfSAogI2RlZmluZSBfQVNNX0lBNjRfSUEzMl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oIGIvaW5jbHVkZS9hc20taWE2NC9pZGUuaAppbmRleCA5M2Y0NWM1Li5lOTI4Njc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaWRlLmgKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaW50cmluc2ljcy5oIGIvaW5jbHVkZS9hc20taWE2NC9pbnRyaW5zaWNzLmgKaW5kZXggODA4OWY5NS4uM2E5NWFhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9pbnRyaW5zaWNzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pbnRyaW5zaWNzLmgKQEAgLTksNyArOSw2IEBACiAgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogaW5jbHVkZSBjb21waWxlciBzcGVjaWZpYyBpbnRyaW5zaWNzICovCiAjaW5jbHVkZSA8YXNtL2lhNjRyZWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQva21hcF90eXBlcy5oCmluZGV4IGJjNzc3NTIuLjVkMTY1OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQva21hcF90eXBlcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfS01BUF9UWVBFU19ICiAjZGVmaW5lIF9BU01fSUE2NF9LTUFQX1RZUEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KICMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaAppbmRleCBhOWM5OTVhLi4wZGY3MmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfTUFDSFZFQ19ICiAjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb25zOiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmggYi9pbmNsdWRlL2FzbS1pYTY0L21lbWluaXQuaAppbmRleCA0NjUwMWIwLi44OTRiYzRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21lbWluaXQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21lbWluaXQuaApAQCAtNyw3ICs3LDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogRW50cmllcyBkZWZpbmVkIHNvIGZhcjoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbm9kZWRhdGEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbm9kZWRhdGEuaAppbmRleCA5OTc4YzdjLi5hMTQwMzEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9ub2RlZGF0YS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9OT0RFREFUQV9ICiAjZGVmaW5lIF9BU01fSUE2NF9OT0RFREFUQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAKICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L251bWEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbnVtYS5oCmluZGV4IGRhZTZhZWIuLmU1YTgyNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbnVtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbnVtYS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9OVU1BX0gKICNkZWZpbmUgX0FTTV9JQTY0X05VTUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTlVNQQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGFnZS5oCmluZGV4IDIwODc4MjUuLmY1YTk0OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFnZS5oCkBAIC03LDcgKzcsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhcmFtLmgKaW5kZXggNWUxZTBkMi4uNDljNjJkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFyYW0uaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jIGluY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBtdXN0bid0IGluY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiBvdXRzaWRlIG9mICNpZmRlZiBfX0tFUk5FTF9fICovCiAjIGlmZGVmIENPTkZJR19JQTY0X0hQX1NJTQogICAvKgogICAgKiBZZWFoLCBzaW11bGF0aW5nIHN0dWZmIGlzIHNsb3csIHNvIGxldCB1cyBjYXRjaCBzb21lIGJyZWF0aCBiZXR3ZWVuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20taWE2NC9wZXJjcHUuaAppbmRleCAyYjE0ZGVlLi5hZTM1N2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyY3B1LmgKQEAgLTEyLDcgKzEyLDYgQEAKICMgZGVmaW5lIFRISVNfQ1BVKHZhcikJKHBlcl9jcHVfXyMjdmFyKSAgLyogdXNlIHRoaXMgdG8gbWFyayBhY2Nlc3NlcyB0byBwZXItQ1BVIHZhcmlhYmxlcy4uLiAqLwogI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20taWE2NC9wZ2FsbG9jLmgKaW5kZXggZjJmMjMzOC4uOWNiNjhlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wZ2FsbG9jLmgKQEAgLTEzLDcgKzEzLDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCwgR291dGhhbSBSYW8gPGdvdXRoYW0ucmFvQGludGVsLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCmluZGV4IGMwZjgxNDQuLmVhYWMwOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL21tYW4uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKaW5kZXggYjNiZDU4ZS4uMjY1ZjQ4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAwNi8xNi8wMAlBLiBNYWxsaWNrCWFkZGVkIGNzZC9zc2QvdHNzZCBmb3IgaWEzMiBzdXBwb3J0CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KICNpbmNsdWRlIDxhc20va3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oCmluZGV4IDk0NzFjZGMuLjQxNWFiYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaApAQCAtNTQsNyArNTQsNiBAQAogICogVGhpcyBpcyBiZWNhdXNlIGFyLmVjIGlzIHNhdmVkIGFzIHBhcnQgb2YgYXIucGZzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9mcHUuaD4KICNpZm5kZWYgQVNNX09GRlNFVFNfQwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbXAuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKaW5kZXggYTM5MTQzNS4uNzE5ZmYzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9TTVBfSAogI2RlZmluZSBfQVNNX0lBNjRfU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NpbXVsYXRvci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zaW11bGF0b3IuaAppbmRleCAxNmE0OGI1Li5jM2ZkM2ViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NpbXVsYXRvci5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc2ltdWxhdG9yLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9TTl9TSU1VTEFUT1JfSAogI2RlZmluZSBfQVNNX0lBNjRfU05fU0lNVUxBVE9SX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFNOTUFHSUMgMHhhZWVlZWVlZThiYWRiZWVmTAogI2RlZmluZSBJU19NRURVU0EoKQkJCSh7bG9uZyBzbjsgYXNtKCJtb3YgJTA9Y3B1aWRbJTFdIiA6ICI9ciIoc24pIDogInIiKDIpKTsgc24gPT0gU05NQUdJQzt9KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oCmluZGV4IDc0OWRlYjIuLmE2NzZkZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9JQTY0X1NOX1NOX0NQVUlEX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NOX1NOX0NQVUlEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgogI2luY2x1ZGUgPGFzbS9zbi9wZGEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCmluZGV4IDUxYWNhMDIuLjhjODY1ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApAQCAtMTIsNyArMTIsNiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zYWwuaD4KICNpbmNsdWRlIDxhc20vc24vc25fY3B1aWQuaD4KICNpbmNsdWRlIDxhc20vc24vYXJjaC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi94cGMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmgKaW5kZXggYWEzYjhhYy4uODQwNmYxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi94cGMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwYy5oCkBAIC0xNSw3ICsxNSw2IEBACiAjZGVmaW5lIF9BU01fSUE2NF9TTl9YUENfSAogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1pYTY0L3N0cmluZy5oCmluZGV4IDQzNTAyZDMuLjg1ZmQ2NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zdHJpbmcuaApAQCAtOSw3ICs5LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIHJlbW92ZSB0aGlzIG9uY2Ugd2UgcmVtb3ZlIHRoZSBBLXN0ZXAgd29ya2Fyb3VuZC4uLiAqLwogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgkxIC8qIHNlZSBhcmNoL2lhNjQvbGliL3N0cmxlbi5TICovCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVAkxIC8qIHNlZSBhcmNoL2lhNjQvbGliL21lbXNldC5TICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaAppbmRleCAyZjM2MjA1Li42NWRiNDNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBBc2l0IE1hbGxpY2sgPGFzaXQuay5tYWxsaWNrQGludGVsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMTk5OSBEb24gRHVnZ2VyIDxkb24uZHVnZ2VyQGludGVsLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2tyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RsYi5oCmluZGV4IDgzNDM3MGIuLjI2ZWRjYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC90bGIuaApAQCAtMzcsNyArMzcsNiBAQAogICoJfQogICoJdGxiX2ZpbmlzaF9tbXUodGxiLCBzdGFydCwgZW5kKTsJLy8gZmluaXNoIHVubWFwIGZvciBhZGRyZXNzIHNwYWNlIE1NCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKaW5kZXggYTM1YjMyMy4uY2Y5YWNiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaApAQCAtNiw3ICs2LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAppbmRleCA3MTA3NzYzLi42MzJmMmVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKQEAgLTI5NCw3ICsyOTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgTlJfc3lzY2FsbHMJCQkyNzkgLyogbGVuZ3RoIG9mIHN5c2NhbGwgdGFibGUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmgKaW5kZXggMWExYWExNy4uNDcwNDFkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCkBAIC05LDcgKzksNiBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIE0zMlIgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG1hY3JvIGRlZmluaXRpb25zLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX1NUUgogI2lmZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKaW5kZXggMzEyMmZlMS4uZjVhN2Q3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2F0b21pYy5oCkBAIC05LDcgKzksNiBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmgKaW5kZXggOTAyYTM2Ni4uNjZhYjY3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGVmbHVzaC5oCmluZGV4IGU1NzQyN2IuLjhiMjYxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGVmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX00zMlJfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9BU01fTTMyUl9DQUNIRUZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIGV4dGVybiB2b2lkIF9mbHVzaF9jYWNoZV9hbGwodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaGFyZGlycS5oCmluZGV4IDVkYTgzMGUuLmNiOGFhNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvaGFyZGlycS5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmggYi9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oCmluZGV4IGY3YWE5NjkuLjIxOWEwZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9pZGUuaApAQCAtMTUsNyArMTUsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgTUFYX0hXSUZTCiAjIGlmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9pcnEuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaXJxLmgKaW5kZXggY2E5NDM5NS4uMmY5M2Y0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lycS5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfQVNNX00zMlJfSVJRX0gKICNkZWZpbmUgX0FTTV9NMzJSX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVRfQWxwaGEpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfVVNSVikKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW0zMnIva21hcF90eXBlcy5oCmluZGV4IDc0Mjk1OTEuLjA1MjRkODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIva21hcF90eXBlcy5oCkBAIC0zLDcgKzMsNiBAQAogCiAvKiBEdW1teSBoZWFkZXIganVzdCB0byBkZWZpbmUga21fdHlwZS4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KICMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzIxMDR1dC9tMzIxMDR1dF9wbGQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmgKaW5kZXggYTRlYWMyMC4uNmJhNGRkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tMzIxMDR1dC9tMzIxMDR1dF9wbGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9NMzIxMDRVVF9NMzIxMDRVVF9QTERfSAogI2RlZmluZSBfTTMyMTA0VVRfTTMyMTA0VVRfUExEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzIxMDRVVCkKICNkZWZpbmUgUExEX1BMQVRfQkFTRQkJMHgwMmMwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sYW4uaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGFuLmgKaW5kZXggNTA1NDVlYy4uYzA1MGIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sYW4uaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xhbi5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9NMzI3MDBVVF9NMzI3MDBVVF9MQU5fSAogI2RlZmluZSBfTTMyNzAwVVRfTTMyNzAwVVRfTEFOX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGNkLmggYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xjZC5oCmluZGV4IGVkZTZjNzcuLjRkYTRlODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGNkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sY2QuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfTTMyNzAwVVRfTTMyNzAwVVRfTENEX0gKICNkZWZpbmUgX00zMjcwMFVUX00zMjcwMFVUX0xDRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaAppbmRleCBmNWU0Nzk0Li5mMzVmOTE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX00zMjcwMFVUX00zMjcwMFVUX1BMRF9ICiAjZGVmaW5lIF9NMzI3MDBVVF9NMzI3MDBVVF9QTERfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUX0FscGhhKQogI2RlZmluZSBQTERfUExBVF9CQVNFCQkweDA4YzAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMnIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oCmluZGV4IGIxMzNjYTYuLmRlY2ZjNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyci5oCkBAIC03LDcgKzcsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIENoaXAgdHlwZSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0NISVBfWE5VWF9NUCkgfHwgZGVmaW5lZChDT05GSUdfQ0hJUF9YTlVYMl9NUCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbW11LmggYi9pbmNsdWRlL2FzbS1tMzJyL21tdS5oCmluZGV4IDljMDBlYjcuLmNmM2Y2ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tbXUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9NMzJSX01NVV9ICiAjZGVmaW5lIF9BU01fTTMyUl9NTVVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiAhZGVmaW5lZChDT05GSUdfTU1VKQogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tbTMyci9tbXVfY29udGV4dC5oCmluZGV4IDM2MzRjNTMuLjU0MjMwMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL21tdV9jb250ZXh0LmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9tMzJyLmg+CiAKQEAgLTE1LDcgKzE0LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sYW4uaCBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sYW4uaAppbmRleCA3YTJhODM5Li42MTk0ODI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGFuLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xhbi5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9PUFNQVVRfT1BTUFVUX0xBTl9ICiAjZGVmaW5lIF9PUFNQVVRfT1BTUFVUX0xBTl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGNkLmggYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGNkLmgKaW5kZXggM2E4ODNlMy4uNDRjZmQ3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xjZC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sY2QuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfT1BTUFVUX09QU1BVVF9MQ0RfSAogI2RlZmluZSBfT1BTUFVUX09QU1BVVF9MQ0RfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X3BsZC5oIGIvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X3BsZC5oCmluZGV4IDIwMThlNjkuLjQ2Mjk2ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9wbGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfcGxkLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX09QU1BVVF9PUFNQVVRfUExEX0gKICNkZWZpbmUgX09QU1BVVF9PUFNQVVRfUExEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFBMRF9QTEFUX0JBU0UJCTB4MWNjMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wYWdlLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BhZ2UuaAppbmRleCA5ZGRiYzA4Li45Njg4YmUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9NMzJSX1BBR0VfSAogI2RlZmluZSBfQVNNX00zMlJfUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkxMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BnYWxsb2MuaAppbmRleCA2ZGEzMDliLi5lMDlhODZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BnYWxsb2MuaApAQCAtMyw3ICszLDYgQEAKIAogLyogJElkJCAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLTJsZXZlbC5oIGIvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IDg2MTcyN2MuLmJlMGYxNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIHRyYWRpdGlvbmFsIE0zMlIgdHdvLWxldmVsIHBhZ2luZyBzdHJ1Y3R1cmU6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oCmluZGV4IDc1NzQwZGUuLjE5ODNiN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oCkBAIC0yMCw3ICsyMCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1tMzJyL3Byb2Nlc3Nvci5oCmluZGV4IDA5ZmQxODEuLjMyNzU1YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wcm9jZXNzb3IuaApAQCAtMTQsNyArMTQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+ICAvKiBwdF9yZWdzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oCmluZGV4IDUzYzc5MjQuLmEwN2ZhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaApAQCAtMTIsNyArMTIsNiBAQAogICogICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tMzJyLmg+CQkvKiBNMzJSX1BTV19CU00sIE0zMlJfUFNXX0JQTSAqLwogCiAvKiAwIC0gMTMgYXJlIGludGVnZXIgcmVnaXN0ZXJzIChnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzKS4gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3J0Yy5oIGIvaW5jbHVkZS9hc20tbTMyci9ydGMuaAppbmRleCBlYzNjZGY2Li42YjJiODM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3J0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcnRjLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIF9fUlRDX0hfXwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogICAgLyogRGFsbGFzIERTMTMwMiBjbG9jay9jYWxlbmRhciByZWdpc3RlciBudW1iZXJzLiAqLwogIyAgZGVmaW5lIFJUQ19TRUNPTkRTICAgICAgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKaW5kZXggODE3NTBlZC4uNDFlNDVkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tbTMyci9zZXJpYWwuaAppbmRleCAxYmY0ODBmLi41YWMyNDRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2VyaWFsLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qIGluY2x1ZGUvYXNtLW0zMnIvc2VyaWFsLmggKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIEJBU0VfQkFVRAkxMTUyMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAppbmRleCA5NDJiOGEzLi43MzAyNWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaApAQCAtMyw3ICszLDYgQEAKIAogLyogJElkJCAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBzaWdjb250ZXh0IHsKIAkvKiBDUFUgcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaAppbmRleCAxMTg0MjkzLi42NTBkMjU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qICRJZCQgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaAppbmRleCA3ZGU3ZGVmLi5mOTRjMWE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oCkBAIC05LDcgKzksNiBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIENPTkZJR19ERUJVR19TUElOTE9DSywgQ09ORklHX1NNUCAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaAppbmRleCBlNTUwMTNmLi4zMzU2N2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKQEAgLTEwLDcgKzEwLDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdGltZXguaCBiL2luY2x1ZGUvYXNtLW0zMnIvdGltZXguaAppbmRleCBhYmYxMmU3Li5lODliZmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci90aW1leC5oCkBAIC05LDcgKzksNiBAQAogICogbTMyciBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCShDT05GSUdfQlVTX0NMT0NLIC8gQ09ORklHX1RJTUVSX0RJVklERSkKICNkZWZpbmUgQ0xPQ0tfVElDS19GQUNUT1IJMjAJLyogRmFjdG9yIG9mIGJvdGggMTAwMDAwMCBhbmQgQ0xPQ0tfVElDS19SQVRFICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1tMzJyL3RsYmZsdXNoLmgKaW5kZXggYmM3YzQwNy4uYWU0NDk0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9NMzJSX1RMQkZMVVNIX0gKICNkZWZpbmUgX0FTTV9NMzJSX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tMzJyLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oCmluZGV4IDgxOWNjMjguLjI2ZTk3OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oCkBAIC0xMSw3ICsxMSw2IEBACiAvKgogICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaAppbmRleCBiZTBlYjAxLi5jYzMxNzkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKQEAgLTI5NSw2ICsyOTUsOCBAQAogI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjg1CiAKIC8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI0OiBzZWUKQEAgLTQwNSw3ICs0MDcsNiBAQAogX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCkBAIC00MjEsNyArNDIyLDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQgLyp3aWxsIGJlIHVudXNlZCovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTQ3MCw0ICs0NzAsNSBAQAogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX00zMlJfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oCmluZGV4IDczMmQ2OTYuLmQ1ZWVkNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BUkNIX002OEtfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX002OEtfQVRPTUlDX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkvKiBsb2NhbF9pcnFfWFhYKCkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9idWcuaCBiL2luY2x1ZGUvYXNtLW02OGsvYnVnLmgKaW5kZXggMDcyY2UyNy4uN2I2MDc3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19CVUdfSAogI2RlZmluZSBfTTY4S19CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+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+CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9hZGRyc3BhY2UuaAppbmRleCA0MjUyMGNjLi40NWM3MDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9BRERSU1BBQ0VfSAogI2RlZmluZSBfQVNNX0FERFJTUEFDRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxzcGFjZXMuaD4KIAogLyoKQEAgLTEyOSw2MCArMTI4LDI2IEBACiAjaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9SNDMwMCkJCQkJCQlcCiAgICAgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9SNFgwMCkJCQkJCVwKICAgICB8fCBkZWZpbmVkIChDT05GSUdfQ1BVX1I1MDAwKQkJCQkJXAorICAgIHx8IGRlZmluZWQgKENPTkZJR19DUFVfUk03MDAwKQkJCQkJXAogICAgIHx8IGRlZmluZWQgKENPTkZJR19DUFVfTkVWQURBKQkJCQkJXAogICAgIHx8IGRlZmluZWQgKENPTkZJR19DUFVfVFg0OVhYKQkJCQkJXAogICAgIHx8IGRlZmluZWQgKENPTkZJR19DUFVfTUlQUzY0KQotI2RlZmluZSBLVVNJWkUJCV9MTENPTlNUXygweDAwMDAwMTAwMDAwMDAwMDApCS8qIDJeXjQwICovCi0jZGVmaW5lIEtVU0laRV82NAlfTExDT05TVF8oMHgwMDAwMDEwMDAwMDAwMDAwKQkvKiAyXl40MCAqLwotI2RlZmluZSBLMFNJWkUJCV9MTENPTlNUXygweDAwMDAwMDEwMDAwMDAwMDApCS8qIDJeXjM2ICovCi0jZGVmaW5lIEsxU0laRQkJX0xMQ09OU1RfKDB4MDAwMDAwMTAwMDAwMDAwMCkJLyogMl5eMzYgKi8KLSNkZWZpbmUgSzJTSVpFCQlfTExDT05TVF8oMHgwMDAwMDBmZjgwMDAwMDAwKQotI2RlZmluZSBLU0VHU0laRQlfTExDT05TVF8oMHgwMDAwMDBmZjgwMDAwMDAwKQkvKiBtYXggc3lzc2Vnc3ogKi8KICNkZWZpbmUgVE9fUEhZU19NQVNLCV9MTENPTlNUXygweDAwMDAwMDBmZmZmZmZmZmYpCS8qIDJeXjM2IC0gMSAqLwogI2VuZGlmCiAKICNpZiBkZWZpbmVkIChDT05GSUdfQ1BVX1I4MDAwKQogLyogV2Uga2VlcCBLVVNJWkUgY29uc2lzdGVudCB3aXRoIFI0MDAwIGZvciBub3cgKDJeXjQwKSBpbnN0ZWFkIG9mICgyXl40OCkgKi8KLSNkZWZpbmUgS1VTSVpFCQlfTExDT05TVF8oMHgwMDAwMDEwMDAwMDAwMDAwKQkvKiAyXl40MCAqLwotI2RlZmluZSBLVVNJWkVfNjQJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogMl5eNDAgKi8KLSNkZWZpbmUgSzBTSVpFCQlfTExDT05TVF8oMHgwMDAwMDEwMDAwMDAwMDAwKQkvKiAyXl40MCAqLwotI2RlZmluZSBLMVNJWkUJCV9MTENPTlNUXygweDAwMDAwMTAwMDAwMDAwMDApCS8qIDJeXjQwICovCi0jZGVmaW5lIEsyU0laRQkJX0xMQ09OU1RfKDB4MDAwMTAwMDAwMDAwMDAwMCkKLSNkZWZpbmUgS1NFR1NJWkUJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogbWF4IHN5c3NlZ3N6ICovCiAjZGVmaW5lIFRPX1BIWVNfTUFTSwlfTExDT05TVF8oMHgwMDAwMDBmZmZmZmZmZmZmKQkvKiAyXl40MCAtIDEgKi8KICNlbmRpZgogCiAjaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9SMTAwMDApCi0jZGVmaW5lIEtVU0laRQkJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogMl5eNDAgKi8KLSNkZWZpbmUgS1VTSVpFXzY0CV9MTENPTlNUXygweDAwMDAwMTAwMDAwMDAwMDApCS8qIDJeXjQwICovCi0jZGVmaW5lIEswU0laRQkJX0xMQ09OU1RfKDB4MDAwMDAxMDAwMDAwMDAwMCkJLyogMl5eNDAgKi8KLSNkZWZpbmUgSzFTSVpFCQlfTExDT05TVF8oMHgwMDAwMDEwMDAwMDAwMDAwKQkvKiAyXl40MCAqLwotI2RlZmluZSBLMlNJWkUJCV9MTENPTlNUXygweDAwMDAwZmZmODAwMDAwMDApCi0jZGVmaW5lIEtTRUdTSVpFCV9MTENPTlNUXygweDAwMDAwZmZmODAwMDAwMDApCS8qIG1heCBzeXNzZWdzeiAqLwogI2RlZmluZSBUT19QSFlTX01BU0sJX0xMQ09OU1RfKDB4MDAwMDAwZmZmZmZmZmZmZikJLyogMl5eNDAgLSAxICovCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TQjEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TQjFBKQotI2RlZmluZSBLVVNJWkUJCV9MTENPTlNUXygweDAwMDAxMDAwMDAwMDAwMDApCS8qIDJeXjQ0ICovCi0jZGVmaW5lIEtVU0laRV82NAlfTExDT05TVF8oMHgwMDAwMTAwMDAwMDAwMDAwKQkvKiAyXl40NCAqLwotI2RlZmluZSBLMFNJWkUJCV9MTENPTlNUXygweDAwMDAxMDAwMDAwMDAwMDApCS8qIDJeXjQ0ICovCi0jZGVmaW5lIEsxU0laRQkJX0xMQ09OU1RfKDB4MDAwMDEwMDAwMDAwMDAwMCkJLyogMl5eNDQgKi8KLSNkZWZpbmUgSzJTSVpFCQlfTExDT05TVF8oMHgwMDAwZmZmZjgwMDAwMDAwKQotI2RlZmluZSBLU0VHU0laRQlfTExDT05TVF8oMHgwMDAwZmZmZjgwMDAwMDAwKQkvKiBtYXggc3lzc2Vnc3ogKi8KICNkZWZpbmUgVE9fUEhZU19NQVNLCV9MTENPTlNUXygweDAwMDAwZmZmZmZmZmZmZmYpCS8qIDJeXjQ0IC0gMSAqLwogI2VuZGlmCiAKLS8qCi0gKiBGdXJ0aGVyIG5hbWVzIGZvciBTR0kgc291cmNlIGNvbXBhdGliaWxpdHkuICBUaGVzZSBhcmUgc3RvbGVuIGZyb20KLSAqIElSSVgncyA8c3lzL21pcHNfYWRkcnNwYWNlLmg+LgotICovCi0jZGVmaW5lIEtVQkFTRQkJX0xMQ09OU1RfKDApCi0jZGVmaW5lIEtVU0laRV8zMglfTExDT05TVF8oMHgwMDAwMDAwMDgwMDAwMDAwKQkvKiBLVVNJWkUKLQkJCQkJCQkgICBmb3IgYSAzMiBiaXQgcHJvYyAqLwotI2RlZmluZSBLMEJBU0VfRVhMX1dSCV9MTENPTlNUXygweGE4MDAwMDAwMDAwMDAwMDApCS8qIGV4Y2x1c2l2ZSBvbiB3cml0ZSAqLwotI2RlZmluZSBLMEJBU0VfTk9OQ09ICV9MTENPTlNUXygweDk4MDAwMDAwMDAwMDAwMDApCS8qIG5vbmNvaGVyZW50ICovCi0jZGVmaW5lIEswQkFTRV9FWEwJX0xMQ09OU1RfKDB4YTAwMDAwMDAwMDAwMDAwMCkJLyogZXhjbHVzaXZlICovCi0KICNpZm5kZWYgQ09ORklHX0NQVV9SODAwMAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hcG0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXBtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjNjkyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXBtLmgKQEAgLTAsMCArMSw2NSBAQAorLyogLSotIGxpbnV4LWMgLSotCisgKgorICogKEMpIDIwMDMgemVja2VAaGFuZGhlbGRzLm9yZworICoKKyAqIEdQTCB2ZXJzaW9uIDIKKyAqCisgKiBiYXNlZCBvbiBhcmNoL2FybS9rZXJuZWwvYXBtLmMKKyAqIGZhY3RvciBvdXQgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBieSBhcmNoaXRlY3R1cmVzIHRvIHByb3ZpZGUKKyAqIGFwbSBzdGF0dXMKKyAqCisgKgorICovCisjaWZuZGVmIE1JUFNfQVNNX1NBMTEwMF9BUE1fSAorI2RlZmluZSBNSVBTX0FTTV9TQTExMDBfQVBNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBnZXRzIGZpbGxlZCBpbiBieSB0aGUgbWFjaGluZSBzcGVjaWZpYyAnZ2V0X3Bvd2VyX3N0YXR1cycKKyAqIGltcGxlbWVudGF0aW9uLiAgQW55IGZpZWxkcyB3aGljaCBhcmUgbm90IHNldCBkZWZhdWx0IHRvIGEgc2FmZSB2YWx1ZS4KKyAqLworc3RydWN0IGFwbV9wb3dlcl9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyCWFjX2xpbmVfc3RhdHVzOworI2RlZmluZSBBUE1fQUNfT0ZGTElORQkJCTAKKyNkZWZpbmUgQVBNX0FDX09OTElORQkJCTEKKyNkZWZpbmUgQVBNX0FDX0JBQ0tVUAkJCTIKKyNkZWZpbmUgQVBNX0FDX1VOS05PV04JCQkweGZmCisKKwl1bnNpZ25lZCBjaGFyCWJhdHRlcnlfc3RhdHVzOworI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfSElHSAkJMAorI2RlZmluZSBBUE1fQkFUVEVSWV9TVEFUVVNfTE9XCQkxCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTAkyCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19DSEFSR0lORwkzCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19OT1RfUFJFU0VOVAk0CisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19VTktOT1dOCTB4ZmYKKworCXVuc2lnbmVkIGNoYXIJYmF0dGVyeV9mbGFnOworI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0hJR0gJCSgxIDw8IDApCisjZGVmaW5lIEFQTV9CQVRURVJZX0ZMQUdfTE9XCQkoMSA8PCAxKQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0NSSVRJQ0FMCSgxIDw8IDIpCisjZGVmaW5lIEFQTV9CQVRURVJZX0ZMQUdfQ0hBUkdJTkcJKDEgPDwgMykKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19OT1RfUFJFU0VOVAkoMSA8PCA3KQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX1VOS05PV04JMHhmZgorCisJaW50CQliYXR0ZXJ5X2xpZmU7CisJaW50CQl0aW1lOworCWludAkJdW5pdHM7CisjZGVmaW5lIEFQTV9VTklUU19NSU5TCQkJMAorI2RlZmluZSBBUE1fVU5JVFNfU0VDUwkJCTEKKyNkZWZpbmUgQVBNX1VOSVRTX1VOS05PV04JCS0xCisKK307CisKKy8qCisgKiBUaGlzIGFsbG93cyBtYWNoaW5lcyB0byBwcm92aWRlIHRoZWlyIG93biAiYXBtIGdldCBwb3dlciBzdGF0dXMiIGZ1bmN0aW9uLgorICovCitleHRlcm4gdm9pZCAoKmFwbV9nZXRfcG93ZXJfc3RhdHVzKShzdHJ1Y3QgYXBtX3Bvd2VyX2luZm8gKik7CisKKy8qCisgKiBRdWV1ZSBhbiBldmVudCAoQVBNX1NZU19TVVNQRU5EIG9yIEFQTV9DUklUSUNBTF9TVVNQRU5EKQorICovCit2b2lkIGFwbV9xdWV1ZV9ldmVudChhcG1fZXZlbnRfdCBldmVudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hcmMvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXJjL3R5cGVzLmgKaW5kZXggYmJiNzI1Yy4uYjlhZGNkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hcmMvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FyYy90eXBlcy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX0FSQ19UWVBFU19ICiAjZGVmaW5lIF9BU01fQVJDX1RZUEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0FSQzMyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtLmggYi9pbmNsdWRlL2FzbS1taXBzL2FzbS5oCmluZGV4IDRiMDkwZjMuLmUzMDM4YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc20uaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX0FTTV9BU01fSAogI2RlZmluZSBfX0FTTV9BU01fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KIAogI2lmbmRlZiBDQVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tMzIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tMzIuaAppbmRleCAxMWRhZjVjLi41ZGUzOTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLTMyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby0zMi5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8YXNtL2ZwcmVnZGVmLmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CiAKLQkubWFjcm8JZnB1X3NhdmVfZG91YmxlIHRocmVhZCBzdGF0dXMgdG1wMT10MCB0bXAyCisJLm1hY3JvCWZwdV9zYXZlX2RvdWJsZSB0aHJlYWQgc3RhdHVzIHRtcDE9dDAKIAljZmMxCVx0bXAxLCAgZmNyMzEKIAlzZGMxCSRmMCwgIFRIUkVBRF9GUFIwKFx0aHJlYWQpCiAJc2RjMQkkZjIsICBUSFJFQURfRlBSMihcdGhyZWFkKQpAQCAtNzAsNyArNzAsNyBAQAogCXN3CVx0bXAsIFRIUkVBRF9GQ1IzMShcdGhyZWFkKQogCS5lbmRtCiAKLQkubWFjcm8JZnB1X3Jlc3RvcmVfZG91YmxlIHRocmVhZCB0bXA9dDAKKwkubWFjcm8JZnB1X3Jlc3RvcmVfZG91YmxlIHRocmVhZCBzdGF0dXMgdG1wPXQwCiAJbHcJXHRtcCwgVEhSRUFEX0ZDUjMxKFx0aHJlYWQpCiAJbGRjMQkkZjAsICBUSFJFQURfRlBSMChcdGhyZWFkKQogCWxkYzEJJGYyLCAgVEhSRUFEX0ZQUjIoXHRocmVhZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tNjQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8tNjQuaAppbmRleCA1NTljMzU1Li4yMjVmZWVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLTY0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby02NC5oCkBAIC01MywxMiArNTMsMTIgQEAKIAlzZGMxCSRmMzEsIFRIUkVBRF9GUFIzMShcdGhyZWFkKQogCS5lbmRtCiAKLQkubWFjcm8JZnB1X3NhdmVfZG91YmxlIHRocmVhZCBzdGF0dXMgdG1wMSB0bXAyCi0Jc2xsCVx0bXAyLCBcdG1wMSwgNQotCWJnZXoJXHRtcDIsIDJmCisJLm1hY3JvCWZwdV9zYXZlX2RvdWJsZSB0aHJlYWQgc3RhdHVzIHRtcAorCXNsbAlcdG1wLCBcc3RhdHVzLCA1CisJYmdleglcdG1wLCAyZgogCWZwdV9zYXZlXzE2b2RkIFx0aHJlYWQKIDI6Ci0JZnB1X3NhdmVfMTZldmVuIFx0aHJlYWQgXHRtcDEJCQkjIGNsb2JiZXJzIHQxCisJZnB1X3NhdmVfMTZldmVuIFx0aHJlYWQgXHRtcAogCS5lbmRtCiAKIAkubWFjcm8JZnB1X3Jlc3RvcmVfMTZldmVuIHRocmVhZCB0bXA9dDAKQEAgLTEwMSwxMyArMTAxLDEyIEBACiAJbGRjMQkkZjMxLCBUSFJFQURfRlBSMzEoXHRocmVhZCkKIAkuZW5kbQogCi0JLm1hY3JvCWZwdV9yZXN0b3JlX2RvdWJsZSB0aHJlYWQgdG1wCi0JbWZjMAl0MCwgQ1AwX1NUQVRVUwotCXNsbAl0MSwgdDAsIDUKLQliZ2V6CXQxLCAxZgkJCQkjIDE2IHJlZ2lzdGVyIG1vZGU/CisJLm1hY3JvCWZwdV9yZXN0b3JlX2RvdWJsZSB0aHJlYWQgc3RhdHVzIHRtcAorCXNsbAlcdG1wLCBcc3RhdHVzLCA1CisJYmdleglcdG1wLCAxZgkJCQkjIDE2IHJlZ2lzdGVyIG1vZGU/CiAKLQlmcHVfcmVzdG9yZV8xNm9kZCBhMAotMToJZnB1X3Jlc3RvcmVfMTZldmVuIGEwLCB0MAkJIyBjbG9iYmVycyB0MAorCWZwdV9yZXN0b3JlXzE2b2RkIFx0aHJlYWQKKzE6CWZwdV9yZXN0b3JlXzE2ZXZlbiBcdGhyZWFkIFx0bXAKIAkuZW5kbQogCiAJLm1hY3JvCWNwdV9zYXZlX25vbnNjcmF0Y2ggdGhyZWFkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmggYi9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKaW5kZXggZjU0YWExNC4uMmM0MmY2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9BU01NQUNST19ICiAjZGVmaW5lIF9BU01fQVNNTUFDUk9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KIAogI2lmZGVmIENPTkZJR18zMkJJVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKaW5kZXggMmM4Yjg1My4uMTNkNDRlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2F0b21pYy5oCkBAIC0xNyw3ICsxNyw2IEBACiAgKiA8bGludXgvc3BpbmxvY2suaD4gd2UgaGF2ZSB0byBpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPiBvdXRzaWRlIHRoZQogICogbWFpbiBiaWcgd3JhcHBlciAuLi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpZm5kZWYgX0FTTV9BVE9NSUNfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9iY2FjaGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYmNhY2hlLmgKaW5kZXggNDQ2MTAyYi4uMzY0NmEzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9iY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2JjYWNoZS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX0JDQUNIRV9ICiAjZGVmaW5lIF9BU01fQkNBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBTb21lIFI0MDAwIC8gUjQ0MDAgLyBSNDYwMCAvIFI1MDAwIG1hY2hpbmVzIG1heSBoYXZlIGEgbm9uLWRtYS1jb2hlcmVudCwKICAgIGNoaXBzZXQgaW1wbGVtZW50ZWQgY2FjaGVzLiAgT24gbWFjaGluZXMgd2l0aCBvdGhlciBDUFVzIHRoZSBDUFUgZG9lcyB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCmluZGV4IGQyZjQ0NDUuLjA5OGNlYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9CSVRPUFNfSAogI2RlZmluZSBfQVNNX0JJVE9QU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oCmluZGV4IDE0ZmM4OGYuLjNiNzQ1ZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKQEAgLTIxNyw2ICsyMTcsMTMgQEAKICAqLwogI2RlZmluZSBNQUNIX0dST1VQX1RJVEFOICAgICAgIDIyCS8qIFBNQy1TaWVycmEgVGl0YW4JCSovCiAjZGVmaW5lICBNQUNIX1RJVEFOX1lPU0VNSVRFCTEJLyogUE1DLVNpZXJyYSBZb3NlbWl0ZQkJKi8KKyNkZWZpbmUgIE1BQ0hfVElUQU5fRVhDSVRFCTIJLyogQmFzbGVyIGVYY2l0ZQkJKi8KKworLyoKKyAqIFZhbGlkIG1hY2h0eXBlIGZvciBncm91cCBORUMgRU1NQTJSSAorICovCisjZGVmaW5lIE1BQ0hfR1JPVVBfTkVDX0VNTUEyUkggMjUJLyogTkVDIEVNTUEyUkggKHdhcyAyMykJCSovCisjZGVmaW5lICBNQUNIX05FQ19NQVJLRUlOUwkwCS8qIE5FQyBFTU1BMlJIIE1hcmstZWlucwkqLwogCiAjZGVmaW5lIENMX1NJWkUJCQlDT01NQU5EX0xJTkVfU0laRQogCkBAIC0yNTgsNCArMjY1LDEwIEBACiAgKiBSZWdpc3RlcnMgYTAsIGExLCBhMyBhbmQgYTQgYXMgcGFzc2VkIHRvIHRoZSBrZW5yZWwgZW50cnkgYnkgZmlybXdhcmUKICAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZndfYXJnMCwgZndfYXJnMSwgZndfYXJnMiwgZndfYXJnMzsKKworLyoKKyAqIFBsYXRmb3JtIG1lbW9yeSBkZXRlY3Rpb24gaG9vayBjYWxsZWQgYnkgc2V0dXBfYXJjaAorICovCitleHRlcm4gdm9pZCBwbGF0X21lbV9zZXR1cCh2b2lkKTsKKwogI2VuZGlmIC8qIF9BU01fQk9PVElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9idWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmgKaW5kZXggODdkNDlhNS4uN2I0NzM5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9CVUdfSAogI2RlZmluZSBfX0FTTV9CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oIGIvaW5jbHVkZS9hc20tbWlwcy9idWdzLmgKaW5kZXggY2IyZWE3Yy4uMGQ3ZjljMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9idWdzLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9BU01fQlVHU19ICiAjZGVmaW5lIF9BU01fQlVHU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vY3B1LWluZm8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oCmluZGV4IGFlZmMwMmYuLmVlZTgzY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYnl0ZW9yZGVyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9ieXRlb3JkZXIuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9CWVRFT1JERVJfSAogI2RlZmluZSBfQVNNX0JZVEVPUkRFUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1taXBzL2NhY2hlLmgKaW5kZXggNTVlMTlmMi4uMzdmMTc1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGUuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9DQUNIRV9ICiAjZGVmaW5lIF9BU01fQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8a21hbGxvYy5oPgogCiAjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQlDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tbWlwcy9jaGVja3N1bS5oCmluZGV4IGIwOWY4OTcuLmE1ZTYwNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9DSEVDS1NVTV9ICiAjZGVmaW5lIF9BU01fQ0hFQ0tTVU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmgKaW5kZXggMjU0ZTExZS4uODgxY2UxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfX0FTTV9DUFVfRkVBVFVSRVNfSAogI2RlZmluZSBfX0FTTV9DUFVfRkVBVFVSRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdS1pbmZvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKaW5kZXggNjU3MmFjNy4uYTJmMGM4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9DUFVfSU5GT19ICiAjZGVmaW5lIF9fQVNNX0NQVV9JTkZPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAjaWZkZWYgQ09ORklHX1NHSV9JUDI3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS5oIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUuaAppbmRleCA4MThiOWE5Li5kZmYyYTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LmgKQEAgLTUxLDYgKzUxLDcgQEAKICNkZWZpbmUgUFJJRF9JTVBfUjQzMDAJCTB4MGIwMAogI2RlZmluZSBQUklEX0lNUF9WUjQxWFgJCTB4MGMwMAogI2RlZmluZSBQUklEX0lNUF9SMTIwMDAJCTB4MGUwMAorI2RlZmluZSBQUklEX0lNUF9SMTQwMDAJCTB4MGYwMAogI2RlZmluZSBQUklEX0lNUF9SODAwMAkJMHgxMDAwCiAjZGVmaW5lIFBSSURfSU1QX1BSNDQ1MAkJMHgxMjAwCiAjZGVmaW5lIFBSSURfSU1QX1I0NjAwCQkweDIwMDAKQEAgLTg3LDYgKzg4LDcgQEAKICNkZWZpbmUgUFJJRF9JTVBfMjRLCQkweDkzMDAKICNkZWZpbmUgUFJJRF9JTVBfMzRLCQkweDk1MDAKICNkZWZpbmUgUFJJRF9JTVBfMjRLRQkJMHg5NjAwCisjZGVmaW5lIFBSSURfSU1QXzc0SwkJMHg5NzAwCiAKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIFBSSUQncyBmb3Igd2hlbiAyMzoxNiA9PSBQUklEX0NPTVBfU0lCWVRFCkBAIC0xOTYsNyArMTk4LDkgQEAKICNkZWZpbmUgQ1BVXzM0SwkJCTYwCiAjZGVmaW5lIENQVV9QUjQ0NTAJCTYxCiAjZGVmaW5lIENQVV9TQjFBCQk2MgotI2RlZmluZSBDUFVfTEFTVAkJNjIKKyNkZWZpbmUgQ1BVXzc0SwkJCTYzCisjZGVmaW5lIENQVV9SMTQwMDAJCTY0CisjZGVmaW5lIENQVV9MQVNUCQk2NAogCiAvKgogICogSVNBIExldmVsIGVuY29kaW5ncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1MDc0LmggYi9pbmNsdWRlL2FzbS1taXBzL2RkYjUwNzQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQwOWFjMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RkYjUwNzQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS8qCi0gKiAgaW5jbHVkZS9hc20tbWlwcy9kZGI1MDc0LmggLS0gTkVDIEREQiBWcmMtNTA3NCBkZWZpbml0aW9ucwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqLwotCi1leHRlcm4gdm9pZCBkZGI1MDc0X2xlZF9oZXgoaW50IGhleCk7Ci1leHRlcm4gdm9pZCBkZGI1MDc0X2xlZF9kMihpbnQgb24pOwotZXh0ZXJuIHZvaWQgZGRiNTA3NF9sZWRfZDMoaW50IG9uKTsKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjUwNzQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1MDc0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZDg4MzAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjUwNzQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiAgaW5jbHVkZS9hc20tbWlwcy9kZGI1MDc0LmggLS0gTkVDIEREQiBWcmMtNTA3NCBkZWZpbml0aW9ucwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBzb255Y29tLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgU29ueSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBDZW50ZXIgRXVyb3BlIChTRENFKSwgQnJ1c3NlbHMKLSAqLwotCi0jaWZuZGVmIF9BU01fRERCNVhYWF9EREI1MDc0X0gKLSNkZWZpbmUgX0FTTV9EREI1WFhYX0REQjUwNzRfSAotCi0jaW5jbHVkZSA8YXNtL25pbGU0Lmg+Ci0KLSNkZWZpbmUgRERCX1NEUkFNX1NJWkUgICAgICAweDA0MDAwMDAwICAgICAgLyogNjRNQiAqLwotCi0jZGVmaW5lIEREQl9QQ0lfSU9fQkFTRSAgICAgMHgwNjAwMDAwMAotI2RlZmluZSBEREJfUENJX0lPX1NJWkUgICAgIDB4MDIwMDAwMDAgICAgICAvKiAzMiBNQiAqLwotCi0jZGVmaW5lIEREQl9QQ0lfTUVNX0JBU0UgICAgMHgwODAwMDAwMAotI2RlZmluZSBEREJfUENJX01FTV9TSVpFICAgIDB4MDgwMDAwMDAgIC8qIDEyOCBNQiAqLwotCi0jZGVmaW5lIEREQl9QQ0lfQ09ORklHX0JBU0UgRERCX1BDSV9NRU1fQkFTRQotI2RlZmluZSBEREJfUENJX0NPTkZJR19TSVpFIEREQl9QQ0lfTUVNX1NJWkUKLQotI2RlZmluZSBOSUxFNF9QQ0lfSU9fQkFTRSAgIDB4YTYwMDAwMDAKLSNkZWZpbmUgTklMRTRfUENJX01FTV9CQVNFICAweGE4MDAwMDAwCi0jZGVmaW5lIE5JTEU0X1BDSV9DRkdfQkFTRSAgTklMRTRfUENJX01FTV9CQVNFCi0jZGVmaW5lIEREQl9QQ0lfSUFDS19CQVNFIE5JTEU0X1BDSV9JT19CQVNFCi0KLSNkZWZpbmUgTklMRTRfSVJRX0JBU0UgTlVNX0k4MjU5X0lOVEVSUlVQVFMKLSNkZWZpbmUgQ1BVX0lSUV9CQVNFIChOVU1fTklMRTRfSU5URVJSVVBUUyArIE5JTEU0X0lSUV9CQVNFKQotI2RlZmluZSBDUFVfTklMRTRfQ0FTQ0FERSAyCi0KLWV4dGVybiB2b2lkIGRkYjUwNzRfbGVkX2hleChpbnQgaGV4KTsKLWV4dGVybiB2b2lkIGRkYjUwNzRfbGVkX2QyKGludCBvbik7Ci1leHRlcm4gdm9pZCBkZGI1MDc0X2xlZF9kMyhpbnQgb24pOwotCi1leHRlcm4gdm9pZCBuaWxlNF9pcnFfc2V0dXAodTMyIGJhc2UpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ni5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyMzM5MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ni5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBoZWFkZXIgZmlsZSBzcGVjaWZpYyBmb3IgZGRiNTQ3NgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogSnVuIFN1biwganN1bkBtdmlzdGEuY29tIG9yIGpzdW5AanVuc3VuLm5ldAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLS8qCi0gKiAgTWVtb3J5IG1hcCAocGh5c2ljYWwgYWRkcmVzcykKLSAqCi0gKiAgTm90ZSBtb3N0IG9mIHRoZSBmb2xsb3dpbmcgYWRkcmVzcyBtdXN0IGJlIHByb3Blcmx5IGFsaWduZWQgYnkgdGhlCi0gKiAgY29ycmVzcG9uZGluZyBzaXplLiAgRm9yIGV4YW1wbGUsIGlmIFBDSV9JT19TSVpFIGlzIDE2TUIsIHRoZW4KLSAqICBQQ0lfSU9fQkFTRSBtdXN0IGJlIGFsaWduZWQgYWxvbmcgMTZNQiBib3VuZGFyeS4KLSAqLwotI2RlZmluZSBEREJfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAotI2RlZmluZSBEREJfU0RSQU1fU0laRQkJMHgwNDAwMDAwMCAgICAgIC8qIDY0TUIgKi8KLQotI2RlZmluZQlEREJfRENTM19CQVNFCQkweDA0MDAwMDAwCS8qIGZsYXNoIDEgKi8KLSNkZWZpbmUJRERCX0RDUzNfU0laRQkJMHgwMTAwMDAwMAkvKiAxNk1CICovCi0KLSNkZWZpbmUJRERCX0RDUzJfQkFTRQkJMHgwNTAwMDAwMAkvKiBmbGFzaCAyICovCi0jZGVmaW5lCUREQl9EQ1MyX1NJWkUJCTB4MDEwMDAwMDAJLyogMTZNQiAqLwotCi0jZGVmaW5lIEREQl9QQ0lfSU9fQkFTRQkJMHgwNjAwMDAwMAotI2RlZmluZSBEREJfUENJX0lPX1NJWkUJCTB4MDIwMDAwMDAgICAgICAvKiAzMiBNQiAqLwotCi0jZGVmaW5lCUREQl9QQ0lfTUVNX0JBU0UJMHgwODAwMDAwMAotI2RlZmluZQlEREJfUENJX01FTV9TSVpFCTB4MDgwMDAwMDAJLyogMTI4IE1CICovCi0KLSNkZWZpbmUJRERCX0RDUzVfQkFTRQkJMHgxMzAwMDAwMAkvKiBEREIgc3RhdHVzIHJlZ3MgKi8KLSNkZWZpbmUJRERCX0RDUzVfU0laRQkJMHgwMDIwMDAwMAkvKiAyTUIsIDgtYml0ICovCi0KLSNkZWZpbmUJRERCX0RDUzRfQkFTRQkJMHgxNDAwMDAwMAkvKiBEREIgY29udHJvbCByZWdzICovCi0jZGVmaW5lCUREQl9EQ1M0X1NJWkUJCTB4MDAyMDAwMDAJLyogMk1CLCA4LWJpdCAqLwotCi0jZGVmaW5lIEREQl9JTlRDU19CQVNFCQkweDFmYTAwMDAwICAgICAgLyogVlJDNTQ3NiBjb250cm9sIHJlZ3MgKi8KLSNkZWZpbmUgRERCX0lOVENTX1NJWkUJCTB4MDAyMDAwMDAgICAgICAvKiAyTUIgKi8KLQotI2RlZmluZSBEREJfQk9PVENTX0JBU0UgICAgICAgICAweDFmYzAwMDAwICAgICAgLyogQm9vdCBST00gLyBFUFJPTSAvRmxhc2ggKi8KLSNkZWZpbmUgRERCX0JPT1RDU19TSVpFICAgICAgICAgMHgwMDIwMDAwMCAgICAgIC8qIDIgTUIgLSBkb2Mgc2F5cyA0TUIgKi8KLQotCi0vKiBhbGlhc2VzICovCi0jZGVmaW5lCUREQl9QQ0lfQ09ORklHX0JBU0UJRERCX1BDSV9NRU1fQkFTRQotI2RlZmluZQlEREJfUENJX0NPTkZJR19TSVpFCUREQl9QQ0lfTUVNX1NJWkUKLQotLyogUENJIGludHIgYWNrIHNoYXJlIFBDSVcwIHdpdGggUENJIElPICovCi0jZGVmaW5lCUREQl9QQ0lfSUFDS19CQVNFCUREQl9QQ0lfSU9fQkFTRQotCi0vKgotICogSW50ZXJydXB0IG1hcHBpbmcKLSAqCi0gKiBXZSBoYXZlIHRocmVlIGludGVycnVwdCBjb250cm9sbGVyczoKLSAqCi0gKiAgIC4gQ1BVIGl0c2VsZiAtIDggc291cmNlcwotICogICAuIGk4MjU5IC0gMTYgc291cmNlcwotICogICAuIHZyYzU0NzYgLSAxNiBzb3VyY2VzCi0gKgotICogIFRoZXkgY29ubmVjdGVkIGFzIGZvbGxvd3M6Ci0gKiAgICBhbGwgdnJjNTQ3NiBpbnRlcnJ1cHRzIGFyZSByb3V0ZWQgdG8gY3B1IElQMiAoYnkgc29mdHdhcmUgc2V0dGluZykKLSAqICAgIGFsbCBpMjg2OSBhcmUgcm91dGVkIHRvIElOVEMgaW4gdnJjNTQ3NiAoYnkgaGFyZHdhcmUgY29ubmVjdGlvbikKLSAqCi0gKiAgQWxsIFZSQzU0NzYgUENJIGludGVycnVwdHMgYXJlIGxldmVsLXRyaWdnZXJlZCAobm8gYWNrIG5lZWRlZCkuCi0gKiAgQWxsIFBDSSBpcnEgYnV0IElOVEMgYXJlIGFjdGl2ZSBsb3cuCi0gKi8KLQotLyoKLSAqIGlycSBudW1iZXIgYmxvY2sgYXNzaWdubWVudAotICovCi0KLSNkZWZpbmUJTlVNX0NQVV9JUlEJCTgKLSNkZWZpbmUJTlVNX0k4MjU5X0lSUQkJMTYKLSNkZWZpbmUJTlVNX1ZSQzU0NzZfSVJRCQkxNgotCi0jZGVmaW5lCUREQl9JUlFfQkFTRQkJMAotCi0jZGVmaW5lCUk4MjU5X0lSUV9CQVNFCQlEREJfSVJRX0JBU0UKLSNkZWZpbmUJVlJDNTQ3Nl9JUlFfQkFTRQkoSTgyNTlfSVJRX0JBU0UgKyBOVU1fSTgyNTlfSVJRKQotI2RlZmluZQlDUFVfSVJRX0JBU0UJCShWUkM1NDc2X0lSUV9CQVNFICsgTlVNX1ZSQzU0NzZfSVJRKQotCi0vKgotICogdnJjNTQ3NiBpcnEgZGVmcywgc2VlIHBhZ2UgNTItNjQgb2YgVnJjNTA3NCBzeXN0ZW0gY29udHJvbGxlciBtYW51YWwKLSAqLwotCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0NQQ0UJMAkvKiBjcHUgcGFyaXR5IGVycm9yICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0NOVEQJMQkvKiBjcHUgbm8gdGFyZ2V0ICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX01DRQkJMgkvKiBtZW1vcnkgY2hlY2sgZXJyb3IgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfRE1BCQkzCS8qIERNQSAqLwotI2RlZmluZSBWUkM1NDc2X0lSUV9VQVJUCTQJLyogdnJjNTQ3NiBidWlsdGluIFVBUlQsIG5vdCB1c2VkICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX1dET0cJNQkvKiB3YXRjaGRvZyB0aW1lciAqLwotI2RlZmluZSBWUkM1NDc2X0lSUV9HUFQJCTYJLyogZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0xCUlQJNwkvKiBsb2NhbCBidXMgcmVhZCB0aW1lb3V0ICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0lOVEEJOAkvKiBQQ0kgSU5UICNBICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0lOVEIJOQkvKiBQQ0kgSU5UICNCICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX0lOVEMJMTAJLyogUENJIElOVCAjQyAqLwotI2RlZmluZSBWUkM1NDc2X0lSUV9JTlRECTExCS8qIFBDSSBJTlQgI0QgKi8KLSNkZWZpbmUgVlJDNTQ3Nl9JUlFfSU5URQkxMgkvKiBQQ0kgSU5UICNFICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX1JFU0VSVkVEXzEzCTEzCS8qIHJlc2VydmVkICAqLwotI2RlZmluZSBWUkM1NDc2X0lSUV9QQ0lTCTE0CS8qIFBDSSBTRVJSICMgICovCi0jZGVmaW5lIFZSQzU0NzZfSVJRX1BDSQkJMTUJLyogUENJIGludGVybmFsIGVycm9yICovCi0KLS8qCi0gKiBpMjg1OSBpcnEgYXNzaWdubWVudAotICovCi0jZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8wCTAKLSNkZWZpbmUgSTgyNTlfSVJRX0tFWUJPQVJECTEJLyogTTE1NDMgZGVmYXVsdCAqLwotI2RlZmluZSBJODI1OV9JUlFfQ0FTQ0FERQkyCi0jZGVmaW5lIEk4MjU5X0lSUV9VQVJUX0IJMwkvKiBNMTU0MyBkZWZhdWx0LCBtYXkgY29uZmxpY3Qgd2l0aCBSVEMgYWNjb3JkaW5nIHRvIHNjaGVtYXRpYyBkaWFncmFtICAqLwotI2RlZmluZSBJODI1OV9JUlFfVUFSVF9BCTQJLyogTTE1NDMgZGVmYXVsdCAqLwotI2RlZmluZSBJODI1OV9JUlFfUEFSQUxMRUwJNQkvKiBNMTU0MyBkZWZhdWx0ICovCi0jZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF82CTYKLSNkZWZpbmUgSTgyNTlfSVJRX1JFU0VSVkVEXzcJNwotI2RlZmluZSBJODI1OV9JUlFfUlRDCQk4CS8qIHdobyBzZXQgdGhpcz8gKi8KLSNkZWZpbmUgSTgyNTlfSVJRX1VTQgkJOQkvKiBkZGJfc2V0dXAgKi8KLSNkZWZpbmUgSTgyNTlfSVJRX1BNVQkJMTAJLyogZGRiX3NldHVwICovCi0jZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8xMQkxMQotI2RlZmluZSBJODI1OV9JUlFfUkVTRVJWRURfMTIJMTIJLyogbTE1NDNfaXJxX3NldHVwICovCi0jZGVmaW5lIEk4MjU5X0lSUV9SRVNFUlZFRF8xMwkxMwotI2RlZmluZSBJODI1OV9JUlFfSERDMQkJMTQJLyogZGVmYXVsdCBhbmQgZGRiX3NldHVwICovCi0jZGVmaW5lIEk4MjU5X0lSUV9IREMyCQkxNQkvKiBkZWZhdWx0ICovCi0KLQotLyoKLSAqIG1pc2MKLSAqLwotI2RlZmluZQlWUkM1NDc2X0k4MjU5X0NBU0NBREUJVlJDNTQ3Nl9JUlFfSU5UQwotI2RlZmluZQlDUFVfVlJDNTQ3Nl9DQVNDQURFCTIKLQotI2RlZmluZSBpc19pODI1OV9pcnEoaXJxKSAgICAgICAoKGlycSkgPCBOVU1fSTgyNTlfSVJRKQotI2RlZmluZSBuaWxlNF90b19pcnEobikgICAgICAgICAoKG4pK05VTV9JODI1OV9JUlEpCi0jZGVmaW5lIGlycV90b19uaWxlNChuKSAgICAgICAgICgobiktTlVNX0k4MjU5X0lSUSkKLQotLyoKLSAqIGxvdy1sZXZlbCBpcnEgZnVuY3Rpb25zCi0gKi8KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdm9pZCBuaWxlNF9tYXBfaXJxKGludCBuaWxlNF9pcnEsIGludCBjcHVfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X21hcF9pcnFfYWxsKGludCBjcHVfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X2VuYWJsZV9pcnEoaW50IG5pbGU0X2lycSk7Ci1leHRlcm4gdm9pZCBuaWxlNF9kaXNhYmxlX2lycShpbnQgbmlsZTRfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X2Rpc2FibGVfaXJxX2FsbCh2b2lkKTsKLWV4dGVybiB1MTYgbmlsZTRfZ2V0X2lycV9zdGF0KGludCBjcHVfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X2VuYWJsZV9pcnFfb3V0cHV0KGludCBjcHVfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X2Rpc2FibGVfaXJxX291dHB1dChpbnQgY3B1X2lycSk7Ci1leHRlcm4gdm9pZCBuaWxlNF9zZXRfcGNpX2lycV9wb2xhcml0eShpbnQgcGNpX2lycSwgaW50IGhpZ2gpOwotZXh0ZXJuIHZvaWQgbmlsZTRfc2V0X3BjaV9pcnFfbGV2ZWxfb3JfZWRnZShpbnQgcGNpX2lycSwgaW50IGxldmVsKTsKLWV4dGVybiB2b2lkIG5pbGU0X2NsZWFyX2lycShpbnQgbmlsZTRfaXJxKTsKLWV4dGVybiB2b2lkIG5pbGU0X2NsZWFyX2lycV9tYXNrKHUzMiBtYXNrKTsKLWV4dGVybiB1OCBuaWxlNF9pODI1OV9pYWNrKHZvaWQpOwotZXh0ZXJuIHZvaWQgbmlsZTRfZHVtcF9pcnFfc3RhdHVzKHZvaWQpOyAgICAgICAgLyogRGVidWcgKi8KLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ny5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzcuaAppbmRleCBhNDM4NTQ4Li5jNWFmNGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ny5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1NDc3LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19BU01fRERCNVhYWF9EREI1NDc3X0gKICNkZWZpbmUgX19BU01fRERCNVhYWF9EREI1NDc3X0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBjb250YWlucyBtYWNyb3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gRERCNTQ3NyBvciByZW5hbWVkIGZyb20KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmggYi9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNXh4eC5oCmluZGV4IDg3M2MwM2YuLmU5N2ZjYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjV4eHguaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9EREI1WFhYX0REQjVYWFhfSAogI2RlZmluZSBfX0FTTV9EREI1WFhYX0REQjVYWFhfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyoKQEAgLTE3NCwxMyArMTczLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRkYl9zeW5jKHZvaWQpCiB7Ci0vKiBUaGUgRERCNTA3NCBkb2Vzbid0IHNlZW0gdG8gbGlrZSB0aGVzZSBhY2Nlc3Nlcy4gVGhleSBraWxsIHRoZSBib2FyZCBvbgotICogaW50ZXJydXB0IGxvYWQKLSAqLwotI2lmbmRlZiBDT05GSUdfRERCNTA3NAogICAgIHZvbGF0aWxlIHUzMiAqcCA9ICh2b2xhdGlsZSB1MzIgKikweGJmYzAwMDAwOwogICAgICh2b2lkKSgqcCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRkYl9vdXQzMih1MzIgb2Zmc2V0LCB1MzIgdmFsKQpAQCAtMjYwLDExICsyNTQsNyBAQAogLyoKICAqIGluY2x1ZGUgdGhlIGJvYXJkIGRlcGVuZGVudCBwYXJ0CiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19EREI1MDc0KQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjUwNzQuaD4KLSNlbGlmIGRlZmluZWQoQ09ORklHX0REQjU0NzYpCi0jaW5jbHVkZSA8YXNtL2RkYjV4eHgvZGRiNTQ3Ni5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfRERCNTQ3NykKKyNpZiBkZWZpbmVkKENPTkZJR19EREI1NDc3KQogI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjU0NzcuaD4KICNlbHNlCiAjZXJyb3IgIlVua25vd24gRERCIGJvYXJkISIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVidWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVidWcuaAppbmRleCA5MzBmMmI3Li4xZmQ1YTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWJ1Zy5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9BU01fREVCVUdfSAogI2RlZmluZSBfQVNNX0RFQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogcnVuLXRpbWUgbWFjcm9zIGZvciBjYXRjaGluZyBzcHVyaW91cyBlcnJvcnMuICBFYWJsZSBDT05GSUdfUlVOVElNRV9ERUJVRyBpbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZWMvcHJvbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvcHJvbS5oCmluZGV4IDEzODRkZDAuLmI5YzgyMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3Byb20uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RlYy9wcm9tLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX0FTTV9ERUNfUFJPTV9ICiAjZGVmaW5lIF9BU01fREVDX1BST01fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaAppbmRleCA2NGRkNDUxLi5lYTc3MDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWxheS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fREVMQVlfSAogI2RlZmluZSBfQVNNX0RFTEFZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CkBAIC0xOSwyMCArMTgsMjIgQEAKIHsKIAlpZiAoc2l6ZW9mKGxvbmcpID09IDQpCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIi5zZXRcdG5vcmVvcmRlclxuIgotCQkiMTpcdGJuZXpcdCUwLDFiXG5cdCIKLQkJInN1YnVcdCUwLDFcblx0IgotCQkiLnNldFx0cmVvcmRlciIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkJIgkuYWxpZ24JMwkJCQkJXG4iCisJCSIxOglibmV6CSUwLCAxYgkJCQkJXG4iCisJCSIJc3VidQklMCwgMQkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKIAkJOiAiPXIiIChsb29wcykKIAkJOiAiMCIgKGxvb3BzKSk7CiAJZWxzZSBpZiAoc2l6ZW9mKGxvbmcpID09IDgpCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIi5zZXRcdG5vcmVvcmRlclxuIgotCQkiMTpcdGJuZXpcdCUwLDFiXG5cdCIKLQkJImRzdWJ1XHQlMCwxXG5cdCIKLQkJIi5zZXRcdHJlb3JkZXIiCi0JCToiPXIiIChsb29wcykKLQkJOiIwIiAobG9vcHMpKTsKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkJIgkuYWxpZ24JMwkJCQkJXG4iCisJCSIxOglibmV6CSUwLCAxYgkJCQkJXG4iCisJCSIJZHN1YnUJJTAsIDEJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisJCTogIj1yIiAobG9vcHMpCisJCTogIjAiIChsb29wcykpOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZG1hLmggYi9pbmNsdWRlL2FzbS1taXBzL2RtYS5oCmluZGV4IDZhYWY5OTMuLmU4NTg0OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kbWEuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX0RNQV9ICiAjZGVmaW5lIF9BU01fRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgkJCS8qIG5lZWQgYnl0ZSBJTyAqLwogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CQkvKiBBbmQgc3BpbmxvY2tzICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZWxmLmggYi9pbmNsdWRlL2FzbS1taXBzL2VsZi5oCmluZGV4IGJkYzlkZTIuLmViZDZiZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9lbGYuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9FTEZfSAogI2RlZmluZSBfQVNNX0VMRl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogRUxGIGhlYWRlciBlX2ZsYWdzIGRlZmluZXMuICovCiAvKiBNSVBTIGFyY2hpdGVjdHVyZSBsZXZlbC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZW1tYTJyaC9lbW1hMnJoLmggYi9pbmNsdWRlL2FzbS1taXBzL2VtbWEycmgvZW1tYTJyaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjhkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2VtbWEycmgvZW1tYTJyaC5oCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogIGluY2x1ZGUvYXNtLW1pcHMvZW1tYTJyaC9lbW1hMnJoLmgKKyAqICAgICAgVGhpcyBmaWxlIGlzIEVNTUEyUkggY29tbW9uIGhlYWRlci4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gMjAwNS0yMDA2CisgKgorICogIFRoaXMgZmlsZSBiYXNlZCBvbiBpbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNXh4eC5oCisgKiAgICAgICAgICBDb3B5cmlnaHQgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9FTU1BMlJIX0VNTUEyUkhfSAorI2RlZmluZSBfX0FTTV9FTU1BMlJIX0VNTUEyUkhfSAorCisvKgorICogRU1NQTJSSCByZWdpc3RlcnMKKyAqLworI2RlZmluZSBSRUdCQVNFIDB4MTAwMDAwMDAKKworI2RlZmluZSBFTU1BMlJIX0JISUZfU1RSQVBfMAkoMHgwMDAwMTArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0lOVF9TVF8wCSgweDAwMDAzMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfSU5UX1NUXzEJKDB4MDAwMDM0K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfQkhJRl9JTlRfU1RfMgkoMHgwMDAwMzgrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0lOVF9FTl8wCSgweDAwMDA0MCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0JISUZfSU5UX0VOXzEJKDB4MDAwMDQ0K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfQkhJRl9JTlRfRU5fMgkoMHgwMDAwNDgrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0lOVDFfRU5fMAkoMHgwMDAwNTArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0lOVDFfRU5fMQkoMHgwMDAwNTQrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX0lOVDFfRU5fMgkoMHgwMDAwNTgrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX1NXX0lOVAkoMHgwMDAwNzArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX1NXX0lOVF9FTgkoMHgwMDAwODArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9CSElGX1NXX0lOVF9DTFIJKDB4MDAwMDkwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfQkhJRl9NQUlOX0NUUkwJKDB4MDAwMGI0K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfQkhJRl9FWENFUFRfVkVDVF9CQVNFX0FERFJFU1MJKDB4MDAwMGMwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfR1BJT19ESVIJKDB4MTEwZDIwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfR1BJT19JTlRfU1QJKDB4MTEwZDMwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfR1BJT19JTlRfTUFTSwkoMHgxMTBkM2MrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9HUElPX0lOVF9NT0RFCSgweDExMGQ0OCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0dQSU9fSU5UX0NORF9BCSgweDExMGQ1NCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX0dQSU9fSU5UX0NORF9CCSgweDExMGQ2MCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BCUkRfSU5UX0VOCSgweDEwMDAxMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BCUkRfQ0xLU0VMCSgweDEwMDAyOCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BGVVIwX0JBU0UJKDB4MTAxMDAwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUEZVUjFfQkFTRQkoMHgxMDIwMDArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QRlVSMl9CQVNFCSgweDEwMzAwMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BJSUMwX0JBU0UJKDB4MTA3MDAwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUElJQzFfQkFTRQkoMHgxMDgwMDArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QSUlDMl9CQVNFCSgweDEwOTAwMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BDSV9DT05UUk9MCSgweDIwMDAwMCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BDSV9BUkJJVF9DVFIJKDB4MjAwMDA0K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUENJX0lXSU4wX0NUUgkoMHgyMDAwMTArUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfSVdJTjFfQ1RSCSgweDIwMDAxNCtSRUdCQVNFKQorI2RlZmluZSBFTU1BMlJIX1BDSV9JTklUX0VTV1AJKDB4MjAwMDE4K1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUENJX0lOVAkJKDB4MjAwMDIwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUENJX0lOVF9FTgkoMHgyMDAwMjQrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfVFdJTl9DVFIJKDB4MjAwMDMwK1JFR0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfUENJX1RXSU5fQkFEUgkoMHgyMDAwMzQrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfVFdJTjBfREFEUgkoMHgyMDAwMzgrUkVHQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfVFdJTjFfREFEUgkoMHgyMDAwM2MrUkVHQkFTRSkKKworLyoKKyAqICBNZW1vcnkgbWFwIChwaHlzaWNhbCBhZGRyZXNzKQorICoKKyAqICBOb3RlIG1vc3Qgb2YgdGhlIGZvbGxvd2luZyBhZGRyZXNzIG11c3QgYmUgcHJvcGVybHkgYWxpZ25lZCBieSB0aGUKKyAqICBjb3JyZXNwb25kaW5nIHNpemUuICBGb3IgZXhhbXBsZSwgaWYgUENJX0lPX1NJWkUgaXMgMTZNQiwgdGhlbgorICogIFBDSV9JT19CQVNFIG11c3QgYmUgYWxpZ25lZCBhbG9uZyAxNk1CIGJvdW5kYXJ5LgorICovCisKKy8qIHRoZSBhY3R1YWwgcmFtIHNpemUgaXMgZGV0ZWN0ZWQgYXQgcnVuLXRpbWUgKi8KKyNkZWZpbmUgRU1NQTJSSF9SQU1fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIEVNTUEyUkhfUkFNX1NJWkUJMHgxMDAwMDAwMAkvKiBsZXNzIHRoYW4gMjU2TUIgKi8KKworI2RlZmluZSBFTU1BMlJIX0lPX0JBU0UJCTB4MTAwMDAwMDAKKyNkZWZpbmUgRU1NQTJSSF9JT19TSVpFCQkweDAxMDAwMDAwCS8qIDE2IE1CICovCisKKyNkZWZpbmUgRU1NQTJSSF9HRU5FUkFMSU9fQkFTRQkweDExMDAwMDAwCisjZGVmaW5lIEVNTUEyUkhfR0VORVJBTElPX1NJWkUJMHgwMTAwMDAwMAkvKiAxNiBNQiAqLworCisjZGVmaW5lIEVNTUEyUkhfUENJX0lPX0JBU0UJMHgxMjAwMDAwMAorI2RlZmluZSBFTU1BMlJIX1BDSV9JT19TSVpFCTB4MDIwMDAwMDAJLyogMzIgTUIgKi8KKworI2RlZmluZSBFTU1BMlJIX1BDSV9NRU1fQkFTRQkweDE0MDAwMDAwCisjZGVmaW5lIEVNTUEyUkhfUENJX01FTV9TSVpFCTB4MDgwMDAwMDAJLyogMTI4IE1CICovCisKKyNkZWZpbmUgRU1NQTJSSF9ST01fQkFTRQkweDFjMDAwMDAwCisjZGVmaW5lIEVNTUEyUkhfUk9NX1NJWkUJMHgwNDAwMDAwMAkvKiA2NCBNQiAqLworCisjZGVmaW5lIEVNTUEyUkhfUENJX0NPTkZJR19CQVNFCUVNTUEyUkhfUENJX0lPX0JBU0UKKyNkZWZpbmUgRU1NQTJSSF9QQ0lfQ09ORklHX1NJWkUJRU1NQTJSSF9QQ0lfSU9fU0laRQorCisjZGVmaW5lIE5VTV9DUFVfSVJRCQk4CisjZGVmaW5lIE5VTV9FTU1BMlJIX0lSUQkJOTYKKworI2RlZmluZSBDUFVfRU1NQTJSSF9DQVNDQURFCTIKKyNkZWZpbmUgRU1NQTJSSF9JUlFfQkFTRQkwCisKKy8qCisgKiBlbW1hMnJoIGlycSBkZWZzCisgKi8KKworI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQwCSgwICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMQkoMSArIEVNTUEyUkhfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDIJKDIgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQzCSgzICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNAkoNCArIEVNTUEyUkhfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDUJKDUgKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ2CSg2ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNwkoNyArIEVNTUEyUkhfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfSVJRX0lOVDgJKDggKyBFTU1BMlJIX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX0lSUV9JTlQ5CSg5ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTAJKDEwICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTEJKDExICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTIJKDEyICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTMJKDEzICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTQJKDE0ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTUJKDE1ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTYJKDE2ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTcJKDE3ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTgJKDE4ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMTkJKDE5ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjAJKDIwICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjEJKDIxICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjIJKDIyICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjMJKDIzICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjQJKDI0ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjUJKDI1ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjYJKDI2ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjcJKDI3ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjgJKDI4ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMjkJKDI5ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzAJKDMwICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzEJKDMxICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzIJKDMyICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzMJKDMzICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzQJKDM0ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzUJKDM1ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzYJKDM2ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzcJKDM3ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzgJKDM4ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UMzkJKDM5ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDAJKDQwICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDEJKDQxICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDIJKDQyICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDMJKDQzICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDQJKDQ0ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDUJKDQ1ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDYJKDQ2ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDcJKDQ3ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDgJKDQ4ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNDkJKDQ5ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTAJKDUwICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTEJKDUxICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTIJKDUyICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTMJKDUzICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTQJKDU0ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTUJKDU1ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTYJKDU2ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTcJKDU3ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTgJKDU4ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNTkJKDU5ICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNjAJKDYwICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNjEJKDYxICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNjIJKDYyICsgRU1NQTJSSF9JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9JUlFfSU5UNjMJKDYzICsgRU1NQTJSSF9JUlFfQkFTRSkKKworI2RlZmluZSBFTU1BMlJIX0lSUV9QRlVSMAlFTU1BMlJIX0lSUV9JTlQ0OQorI2RlZmluZSBFTU1BMlJIX0lSUV9QRlVSMQlFTU1BMlJIX0lSUV9JTlQ1MAorI2RlZmluZSBFTU1BMlJIX0lSUV9QRlVSMglFTU1BMlJIX0lSUV9JTlQ1MQorI2RlZmluZSBFTU1BMlJIX0lSUV9QSUlDMAlFTU1BMlJIX0lSUV9JTlQ1NgorI2RlZmluZSBFTU1BMlJIX0lSUV9QSUlDMQlFTU1BMlJIX0lSUV9JTlQ1NworI2RlZmluZSBFTU1BMlJIX0lSUV9QSUlDMglFTU1BMlJIX0lSUV9JTlQ1OAorCisvKgorICogIEVNTUEyUkggUmVnaXN0ZXIgQWNjZXNzCisgKi8KKworI2RlZmluZSBFTU1BMlJIX0JBU0UgKDB4YTAwMDAwMDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbW1hMnJoX3N5bmModm9pZCkKK3sKKwl2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopMHhiZmMwMDAwMDsKKwkodm9pZCkoKnApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW1tYTJyaF9vdXQzMih1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCSoodm9sYXRpbGUgdTMyICopKEVNTUEyUkhfQkFTRSB8IG9mZnNldCkgPSB2YWw7CisJZW1tYTJyaF9zeW5jKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGVtbWEycmhfaW4zMih1MzIgb2Zmc2V0KQoreworCXUzMiB2YWwgPSAqKHZvbGF0aWxlIHUzMiAqKShFTU1BMlJIX0JBU0UgfCBvZmZzZXQpOworCWVtbWEycmhfc3luYygpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbW1hMnJoX291dDE2KHUzMiBvZmZzZXQsIHUxNiB2YWwpCit7CisJKih2b2xhdGlsZSB1MTYgKikoRU1NQTJSSF9CQVNFIHwgb2Zmc2V0KSA9IHZhbDsKKwllbW1hMnJoX3N5bmMoKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgZW1tYTJyaF9pbjE2KHUzMiBvZmZzZXQpCit7CisJdTE2IHZhbCA9ICoodm9sYXRpbGUgdTE2ICopKEVNTUEyUkhfQkFTRSB8IG9mZnNldCk7CisJZW1tYTJyaF9zeW5jKCk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVtbWEycmhfb3V0OCh1MzIgb2Zmc2V0LCB1OCB2YWwpCit7CisJKih2b2xhdGlsZSB1OCAqKShFTU1BMlJIX0JBU0UgfCBvZmZzZXQpID0gdmFsOworCWVtbWEycmhfc3luYygpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGVtbWEycmhfaW44KHUzMiBvZmZzZXQpCit7CisJdTggdmFsID0gKih2b2xhdGlsZSB1OCAqKShFTU1BMlJIX0JBU0UgfCBvZmZzZXQpOworCWVtbWEycmhfc3luYygpOworCXJldHVybiB2YWw7Cit9CisKKy8qKgorICogSUlDIHJlZ2lzdGVycyBtYXAKKyAqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQ05UIC0gQ29udHJvbCByZWdpc3RlciAoMDBIIFIvVykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTUFQgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNUVCAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQUNLRSAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBXVElNICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNQSUUgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgV1JFTCAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBMUkVMICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIElJQ0UgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ05UX1JFU0VSVkVEICAgIDB4MDAwMDAwZmYJLyogcmVzZXJ2ZWQgYml0IDAgKi8KKworI2RlZmluZSBJMkNfRU1NQV9TVEFSVCAgICAgIChJSUNFIHwgU1RUKQorI2RlZmluZSBJMkNfRU1NQV9TVE9QICAgICAgIChJSUNFIHwgU1BUKQorI2RlZmluZSBJMkNfRU1NQV9SRVBTVEFSVCAgIEkyQ19FTU1BX1NUQVJUCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFNUQSAtIFN0YXR1cyByZWdpc3RlciAoMTBIIFJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgTVNUUyAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBBTEQgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVYQyAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQ09JICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBUUkMgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFDS0QgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU1REICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTUEQgICAgICAgICAweDAwMDAwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENTRUwgLSBDbG9jayBzZWxlY3QgcmVnaXN0ZXIgKDIwSCBSL1cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRkNMICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBORDUwICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIENMRCAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgREFEICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBTTUMgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERGQyAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0wgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDU0VMX1JFU0VSVkVEICAgMHgwMDAwMDBmZgkvKiByZXNlcnZlZCBiaXQgMCAqLworCisjZGVmaW5lIEZBU1QzOTcgICAgIDB4MDAwMDAwOGIKKyNkZWZpbmUgRkFTVDI5NyAgICAgMHgwMDAwMDA4YQorI2RlZmluZSBGQVNUMzQ3ICAgICAweDAwMDAwMDBiCisjZGVmaW5lIEZBU1QyNjAgICAgIDB4MDAwMDAwMGEKKyNkZWZpbmUgRkFTVDEzMCAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTVEFOREFSRDEwOCAweDAwMDAwMDgzCisjZGVmaW5lIFNUQU5EQVJEODMgIDB4MDAwMDAwODIKKyNkZWZpbmUgU1RBTkRBUkQ5NSAgMHgwMDAwMDAwMworI2RlZmluZSBTVEFOREFSRDczICAweDAwMDAwMDAyCisjZGVmaW5lIFNUQU5EQVJEMzYgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1RBTkRBUkQ3MSAgMHgwMDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTVkEgLSBTbGF2ZSBhZGRyZXNzIHJlZ2lzdGVyICgzMEggUi9XKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNWQSAgICAgICAgIDB4MDAwMDAwZmUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogU0hSIC0gU2hpZnQgcmVnaXN0ZXIgKDQwSCBSL1cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTUiAgICAgICAgICAweDAwMDAwMGZmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIElOVCAtIEludGVycnVwdCByZWdpc3RlciAoNTBIIFIvVykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIElOVE0gLSBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciAoNjBIIFIvVykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSU5URTAgICAgICAgMHgwMDAwMDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkyQyByZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjZGVmaW5lIEkyQ19FTU1BX0NOVCAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgSTJDX0VNTUFfU1RBICAgICAgICAgICAgMHgxMAorI2RlZmluZSBJMkNfRU1NQV9DU0VMICAgICAgICAgICAweDIwCisjZGVmaW5lIEkyQ19FTU1BX1NWQSAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgSTJDX0VNTUFfU0hSICAgICAgICAgICAgMHg0MAorI2RlZmluZSBJMkNfRU1NQV9JTlQgICAgICAgICAgICAweDUwCisjZGVmaW5lIEkyQ19FTU1BX0lOVE0gICAgICAgICAgIDB4NjAKKworLyoKKyAqIGluY2x1ZGUgdGhlIGJvYXJkIGRlcGVuZGVudCBwYXJ0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NQVJLRUlOUykKKyNpbmNsdWRlIDxhc20vZW1tYTJyaC9tYXJrZWlucy5oPgorI2Vsc2UKKyNlcnJvciAiVW5rbm93biBFTU1BMlJIIGJvYXJkISIKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fRU1NQTJSSF9FTU1BMlJIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZW1tYTJyaC9tYXJrZWlucy5oIGIvaW5jbHVkZS9hc20tbWlwcy9lbW1hMnJoL21hcmtlaW5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhNzY2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZW1tYTJyaC9tYXJrZWlucy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tbWlwcy9lbW1hMnJoL21hcmtlaW5zLmgKKyAqICAgICAgVGhpcyBmaWxlIGlzIEVNTUEyUkggYm9hcmQgZGVwZW5kZWQgaGVhZGVyLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIE5FQyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiAyMDA1LTIwMDYKKyAqCisgKiAgVGhpcyBmaWxlIGJhc2VkIG9uIGluY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKKyAqICAgICAgICAgIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgTUFSS0VJTlNfSAorI2RlZmluZSBNQVJLRUlOU19ICisKKyNkZWZpbmUgTlVNX0VNTUEyUkhfSVJRX1NXCTMyCisjZGVmaW5lIE5VTV9FTU1BMlJIX0lSUV9HUElPCTMyCisKKyNkZWZpbmUgRU1NQTJSSF9TV19DQVNDQURFCShFTU1BMlJIX0lSUV9JTlQ3IC0gRU1NQTJSSF9JUlFfSU5UMCkKKyNkZWZpbmUgRU1NQTJSSF9HUElPX0NBU0NBREUJKEVNTUEyUkhfSVJRX0lOVDQ2IC0gRU1NQTJSSF9JUlFfSU5UMCkKKworI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9CQVNFCShFTU1BMlJIX0lSUV9CQVNFICsgTlVNX0VNTUEyUkhfSVJRKQorI2RlZmluZSBFTU1BMlJIX0dQSU9fSVJRX0JBU0UJKEVNTUEyUkhfU1dfSVJRX0JBU0UgKyBOVU1fRU1NQTJSSF9JUlFfU1cpCisjZGVmaW5lIENQVV9JUlFfQkFTRQkJKEVNTUEyUkhfR1BJT19JUlFfQkFTRSArIE5VTV9FTU1BMlJIX0lSUV9HUElPKQorCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDAJKDArRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMQkoMStFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyCSgyK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDMJKDMrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UNAkoNCtFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQ1CSg1K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDYJKDYrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UNwkoNytFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQ4CSg4K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDkJKDkrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTAJKDEwK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDExCSgxMStFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxMgkoMTIrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTMJKDEzK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDE0CSgxNCtFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxNQkoMTUrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTYJKDE2K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDE3CSgxNytFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQxOAkoMTgrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMTkJKDE5K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDIwCSgyMCtFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyMQkoMjErRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjIJKDIyK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDIzCSgyMytFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyNAkoMjQrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjUJKDI1K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDI2CSgyNitFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQyNwkoMjcrRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMjgJKDI4K0VNTUEyUkhfU1dfSVJRX0JBU0UpCisjZGVmaW5lIEVNTUEyUkhfU1dfSVJRX0lOVDI5CSgyOStFTU1BMlJIX1NXX0lSUV9CQVNFKQorI2RlZmluZSBFTU1BMlJIX1NXX0lSUV9JTlQzMAkoMzArRU1NQTJSSF9TV19JUlFfQkFTRSkKKyNkZWZpbmUgRU1NQTJSSF9TV19JUlFfSU5UMzEJKDMxK0VNTUEyUkhfU1dfSVJRX0JBU0UpCisKKyNkZWZpbmUgTUFSS0VJTlNfUENJX0lSUV9JTlRBCUVNTUEyUkhfR1BJT19JUlFfQkFTRSsxNQorI2RlZmluZSBNQVJLRUlOU19QQ0lfSVJRX0lOVEIJRU1NQTJSSF9HUElPX0lSUV9CQVNFKzE2CisjZGVmaW5lIE1BUktFSU5TX1BDSV9JUlFfSU5UQwlFTU1BMlJIX0dQSU9fSVJRX0JBU0UrMTcKKyNkZWZpbmUgTUFSS0VJTlNfUENJX0lSUV9JTlRECUVNTUEyUkhfR1BJT19JUlFfQkFTRSsxOAorCisjZW5kaWYgLyogQ09ORklHX01BUktFSU5TICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1taXBzL2ZjbnRsLmgKaW5kZXggNDNkMDQ3YS4uNzg3MjIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZmNudGwuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9GQ05UTF9ICiAjZGVmaW5lIF9BU01fRkNOVExfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgT19BUFBFTkQJMHgwMDA4CiAjZGVmaW5lIE9fU1lOQwkJMHgwMDEwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaAppbmRleCA3M2EzMDI4Li4xY2FkZWZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZml4bWFwLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX0FTTV9GSVhNQVBfSAogI2RlZmluZSBfQVNNX0ZJWE1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2lmZGVmIENPTkZJR19ISUdITUVNCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mcHUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKaW5kZXggYjBmNTAwMS4uNThjNTYxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mcHUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fRlBVX0gKICNkZWZpbmUgX0FTTV9GUFVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogCkBAIC0xMzgsMTAgKzEzNyw5IEBACiAJaWYgKGNwdV9oYXNfZnB1KSB7CiAJCWlmICgodHNrID09IGN1cnJlbnQpICYmIF9faXNfZnB1X293bmVyKCkpCiAJCQlfc2F2ZV9mcChjdXJyZW50KTsKLQkJcmV0dXJuIHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwcjsKIAl9CiAKLQlyZXR1cm4gdHNrLT50aHJlYWQuZnB1LnNvZnQuZnByOworCXJldHVybiB0c2stPnRocmVhZC5mcHUuZnByOwogfQogCiAjZW5kaWYgLyogX0FTTV9GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mcHVfZW11bGF0b3IuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZnB1X2VtdWxhdG9yLmgKaW5kZXggMTZjYjRkMS4uMjczMWMzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mcHVfZW11bGF0b3IuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZwdV9lbXVsYXRvci5oCkBAIC0xMiw4ICsxMiw4IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgotICogRnVydGhlciBwcml2YXRlIGRhdGEgZm9yIHdoaWNoIG5vIHNwYWNlIGV4aXN0cyBpbiBtaXBzX2ZwdV9zb2Z0X3N0cnVjdC4KLSAqIFRoaXMgc2hvdWxkIGJlIHN1YnN1bWVkIGludG8gdGhlIG1pcHNfZnB1X3NvZnRfc3RydWN0IHN0cnVjdHVyZSBhcworICogRnVydGhlciBwcml2YXRlIGRhdGEgZm9yIHdoaWNoIG5vIHNwYWNlIGV4aXN0cyBpbiBtaXBzX2ZwdV9zdHJ1Y3QuCisgKiBUaGlzIHNob3VsZCBiZSBzdWJzdW1lZCBpbnRvIHRoZSBtaXBzX2ZwdV9zdHJ1Y3Qgc3RydWN0dXJlIGFzCiAgKiBkZWZpbmVkIGluIHByb2Nlc3Nvci5oIGFzIHNvb24gYXMgdGhlIGFic3VyZCB3aXJlZCBhYnNvbHV0ZSBhc3NlbWJsZXIKICAqIG9mZnNldHMgYmVjb21lIGR5bmFtaWMgYXQgY29tcGlsZSB0aW1lLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLW1pcHMvZnV0ZXguaAppbmRleCBhNTU0MDg5Li5lZDAyM2VhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oCkBAIC0zLDEwICszLDEwIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3dhci5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBfX0ZVVEVYX1NNUF9TWU5DICIJc3luYwkJCQkJXG4iCkBAIC0xNiwzMCArMTYsNjAgQEAKIAogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKQkJXAogewkJCQkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JIgkuc2V0CXB1c2gJCQkJCVxuIglcCi0JIgkuc2V0CW5vYXQJCQkJCVxuIglcCi0JIgkuc2V0CW1pcHMzCQkJCQlcbiIJXAotCSIxOglsbAklMSwgKCUzKQkjIF9fZnV0ZXhfYXRvbWljX29wMQlcbiIJXAotCSIJLnNldAltaXBzMAkJCQkJXG4iCVwKLQkiCSIgaW5zbgkiCQkJCQlcbiIJXAotCSIJLnNldAltaXBzMwkJCQkJXG4iCVwKLQkiMjoJc2MJJDEsICglMykJCQkJXG4iCVwKLQkiCWJlcXpsCSQxLCAxYgkJCQkJXG4iCVwKLQlfX0ZVVEVYX1NNUF9TWU5DCQkJCQkJXAotCSIzOgkJCQkJCQlcbiIJXAotCSIJLnNldAlwb3AJCQkJCVxuIglcCi0JIgkuc2V0CW1pcHMwCQkJCQlcbiIJXAotCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIgkJCQlcbiIJXAotCSI0OglsaQklMCwgJTUJCQkJCVxuIglcCi0JIglqCTJiCQkJCQlcbiIJXAotCSIJLnByZXZpb3VzCQkJCQlcbiIJXAotCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIglcCi0JIgkiX19VQV9BRERSICJcdDFiLCA0YgkJCQlcbiIJXAotCSIJIl9fVUFfQUREUiAiXHQyYiwgNGIJCQkJXG4iCVwKLQkiCS5wcmV2aW91cwkJCQkJXG4iCVwKLQk6ICI9ciIgKHJldCksICI9ciIgKG9sZHZhbCkJCQkJCVwKLQk6ICIwIiAoMCksICJyIiAodWFkZHIpLCAiSnIiIChvcGFyZyksICJpIiAoLUVGQVVMVCkpOwkJXAorCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIJLnNldAlwdXNoCQkJCVxuIglcCisJCSIJLnNldAlub2F0CQkJCVxuIglcCisJCSIJLnNldAltaXBzMwkJCQlcbiIJXAorCQkiMToJbGwJJTEsICU0CSMgX19mdXRleF9hdG9taWNfb3AJXG4iCVwKKwkJIgkuc2V0CW1pcHMwCQkJCVxuIglcCisJCSIJIiBpbnNuCSIJCQkJXG4iCVwKKwkJIgkuc2V0CW1pcHMzCQkJCVxuIglcCisJCSIyOglzYwkkMSwgJTIJCQkJXG4iCVwKKwkJIgliZXF6bAkkMSwgMWIJCQkJXG4iCVwKKwkJX19GVVRFWF9TTVBfU1lOQwkJCQkJXAorCQkiMzoJCQkJCQlcbiIJXAorCQkiCS5zZXQJcG9wCQkJCVxuIglcCisJCSIJLnNldAltaXBzMAkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAorCQkiNDoJbGkJJTAsICU2CQkJCVxuIglcCisJCSIJagkyYgkJCQlcbiIJXAorCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCVxuIglcCisJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQlcbiIJXAorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJXG4iCVwKKwkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJOiAiPXIiIChyZXQpLCAiPSZyIiAob2xkdmFsKSwgIj1SIiAoKnVhZGRyKQkJXAorCQk6ICIwIiAoMCksICJSIiAoKnVhZGRyKSwgIkpyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpCVwKKwkJOiAibWVtb3J5Iik7CQkJCQkJXAorCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkiCS5zZXQJcHVzaAkJCQlcbiIJXAorCQkiCS5zZXQJbm9hdAkJCQlcbiIJXAorCQkiCS5zZXQJbWlwczMJCQkJXG4iCVwKKwkJIjE6CWxsCSUxLCAlNAkjIF9fZnV0ZXhfYXRvbWljX29wCVxuIglcCisJCSIJLnNldAltaXBzMAkJCQlcbiIJXAorCQkiCSIgaW5zbgkiCQkJCVxuIglcCisJCSIJLnNldAltaXBzMwkJCQlcbiIJXAorCQkiMjoJc2MJJDEsICUyCQkJCVxuIglcCisJCSIJYmVxegkkMSwgMWIJCQkJXG4iCVwKKwkJX19GVVRFWF9TTVBfU1lOQwkJCQkJXAorCQkiMzoJCQkJCQlcbiIJXAorCQkiCS5zZXQJcG9wCQkJCVxuIglcCisJCSIJLnNldAltaXBzMAkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCIJCQlcbiIJXAorCQkiNDoJbGkJJTAsICU2CQkJCVxuIglcCisJCSIJagkyYgkJCQlcbiIJXAorCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCVxuIglcCisJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQlcbiIJXAorCQkiCSJfX1VBX0FERFIgIlx0MmIsIDRiCQkJXG4iCVwKKwkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJOiAiPXIiIChyZXQpLCAiPSZyIiAob2xkdmFsKSwgIj1SIiAoKnVhZGRyKQkJXAorCQk6ICIwIiAoMCksICJSIiAoKnVhZGRyKSwgIkpyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpCVwKKwkJOiAibWVtb3J5Iik7CQkJCQkJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlyZXQgPSAtRU5PU1lTOwkJCQkJCVwKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTYwLDIzICs5MCwyMyBAQAogCiAJc3dpdGNoIChvcCkgewogCWNhc2UgRlVURVhfT1BfU0VUOgotCQlfX2Z1dGV4X2F0b21pY19vcCgibW92ZQkkMSwgJXo0IiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCV9fZnV0ZXhfYXRvbWljX29wKCJtb3ZlCSQxLCAlejUiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZVVEVYX09QX0FERDoKLQkJX19mdXRleF9hdG9taWNfb3AoImFkZHUJJDEsICUxLCAlejQiLAorCQlfX2Z1dGV4X2F0b21pY19vcCgiYWRkdQkkMSwgJTEsICV6NSIsCiAJCSAgICAgICAgICAgICAgICAgIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOwogCQlicmVhazsKIAljYXNlIEZVVEVYX09QX09SOgotCQlfX2Z1dGV4X2F0b21pY19vcCgib3IJJDEsICUxLCAlejQiLAorCQlfX2Z1dGV4X2F0b21pY19vcCgib3IJJDEsICUxLCAlejUiLAogCQkgICAgICAgICAgICAgICAgICByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9PUF9BTkROOgotCQlfX2Z1dGV4X2F0b21pY19vcCgiYW5kCSQxLCAlMSwgJXo0IiwKKwkJX19mdXRleF9hdG9taWNfb3AoImFuZAkkMSwgJTEsICV6NSIsCiAJCSAgICAgICAgICAgICAgICAgIHJldCwgb2xkdmFsLCB1YWRkciwgfm9wYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9PUF9YT1I6Ci0JCV9fZnV0ZXhfYXRvbWljX29wKCJ4b3IJJDEsICUxLCAlejQiLAorCQlfX2Z1dGV4X2F0b21pY19vcCgieG9yCSQxLCAlMSwgJXo1IiwKIAkJICAgICAgICAgICAgICAgICAgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMDIsNyArMTMyLDY5IEBACiBzdGF0aWMgaW5saW5lIGludAogZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoaW50IF9fdXNlciAqdWFkZHIsIGludCBvbGR2YWwsIGludCBuZXd2YWwpCiB7Ci0JcmV0dXJuIC1FTk9TWVM7CisJaW50IHJldHZhbDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMJCQlcbiIKKwkJIgkuc2V0CXB1c2gJCQkJCVxuIgorCQkiCS5zZXQJbm9hdAkJCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCisJCSIxOglsbAklMCwgJTIJCQkJCVxuIgorCQkiCWJuZQklMCwgJXozLCAzZgkJCQlcbiIKKwkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKKwkJIgltb3ZlCSQxLCAlejQJCQkJCVxuIgorCQkiCS5zZXQJbWlwczMJCQkJCVxuIgorCQkiMjoJc2MJJDEsICUxCQkJCQlcbiIKKwkJIgliZXF6bAkkMSwgMWIJCQkJCVxuIgorCQlfX0ZVVEVYX1NNUF9TWU5DCisJCSIzOgkJCQkJCQlcbiIKKwkJIgkuc2V0CXBvcAkJCQkJXG4iCisJCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIgkJCQlcbiIKKwkJIjQ6CWxpCSUwLCAlNQkJCQkJXG4iCisJCSIJagkzYgkJCQkJXG4iCisJCSIJLnByZXZpb3VzCQkJCQlcbiIKKwkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiCQkJXG4iCisJCSIJIl9fVUFfQUREUiAiXHQxYiwgNGIJCQkJXG4iCisJCSIJIl9fVUFfQUREUiAiXHQyYiwgNGIJCQkJXG4iCisJCSIJLnByZXZpb3VzCQkJCQlcbiIKKwkJOiAiPSZyIiAocmV0dmFsKSwgIj1SIiAoKnVhZGRyKQorCQk6ICJSIiAoKnVhZGRyKSwgIkpyIiAob2xkdmFsKSwgIkpyIiAobmV3dmFsKSwgImkiICgtRUZBVUxUKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIiMgZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMJCQlcbiIKKwkJIgkuc2V0CXB1c2gJCQkJCVxuIgorCQkiCS5zZXQJbm9hdAkJCQkJXG4iCisJCSIJLnNldAltaXBzMwkJCQkJXG4iCisJCSIxOglsbAklMCwgJTIJCQkJCVxuIgorCQkiCWJuZQklMCwgJXozLCAzZgkJCQlcbiIKKwkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKKwkJIgltb3ZlCSQxLCAlejQJCQkJCVxuIgorCQkiCS5zZXQJbWlwczMJCQkJCVxuIgorCQkiMjoJc2MJJDEsICUxCQkJCQlcbiIKKwkJIgliZXF6CSQxLCAxYgkJCQkJXG4iCisJCV9fRlVURVhfU01QX1NZTkMKKwkJIjM6CQkJCQkJCVxuIgorCQkiCS5zZXQJcG9wCQkJCQlcbiIKKwkJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiCQkJCVxuIgorCQkiNDoJbGkJJTAsICU1CQkJCQlcbiIKKwkJIglqCTNiCQkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQkiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJCQlcbiIKKwkJIgkiX19VQV9BRERSICJcdDFiLCA0YgkJCQlcbiIKKwkJIgkiX19VQV9BRERSICJcdDJiLCA0YgkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQk6ICI9JnIiIChyZXR2YWwpLCAiPVIiICgqdWFkZHIpCisJCTogIlIiICgqdWFkZHIpLCAiSnIiIChvbGR2YWwpLCAiSnIiIChuZXd2YWwpLCAiaSIgKC1FRkFVTFQpCisJCTogIm1lbW9yeSIpOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXJldHVybiByZXR2YWw7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmggYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAppbmRleCBkYWRjMDUxLi42Njk0M2M0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0hBWkFSRFNfSAogI2RlZmluZSBfQVNNX0hBWkFSRFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaAppbmRleCA4Y2Y1OTg0Li5jOTc2YmZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaApAQCAtMTksNyArMTksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2luc3QuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaW5zdC5oCmluZGV4IGUwNzQ1ZjQuLjFlZDhkMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW5zdC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaW5zdC5oCkBAIC02LDYgKzYsNyBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDIwMDAgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgVGhpZW1vIFNldWZlcgogICovCiAjaWZuZGVmIF9BU01fSU5TVF9ICiAjZGVmaW5lIF9BU01fSU5TVF9ICkBAIC0yMSwxNCArMjIsMTQgQEAKIAljb3AwX29wLCBjb3AxX29wLCBjb3AyX29wLCBjb3AxeF9vcCwKIAliZXFsX29wLCBibmVsX29wLCBibGV6bF9vcCwgYmd0emxfb3AsCiAJZGFkZGlfb3AsIGRhZGRpdV9vcCwgbGRsX29wLCBsZHJfb3AsCi0JbWFqb3JfMWNfb3AsIGphbHhfb3AsIG1ham9yXzFlX29wLCBtYWpvcl8xZl9vcCwKKwlzcGVjMl9vcCwgamFseF9vcCwgbWRteF9vcCwgc3BlYzNfb3AsCiAJbGJfb3AsIGxoX29wLCBsd2xfb3AsIGx3X29wLAogCWxidV9vcCwgbGh1X29wLCBsd3Jfb3AsIGx3dV9vcCwKIAlzYl9vcCwgc2hfb3AsIHN3bF9vcCwgc3dfb3AsCiAJc2RsX29wLCBzZHJfb3AsIHN3cl9vcCwgY2FjaGVfb3AsCiAJbGxfb3AsIGx3YzFfb3AsIGx3YzJfb3AsIHByZWZfb3AsCiAJbGxkX29wLCBsZGMxX29wLCBsZGMyX29wLCBsZF9vcCwKLQlzY19vcCwgc3djMV9vcCwgc3djMl9vcCwgcmRod3Jfb3AsCisJc2Nfb3AsIHN3YzFfb3AsIHN3YzJfb3AsIG1ham9yXzNiX29wLAogCXNjZF9vcCwgc2RjMV9vcCwgc2RjMl9vcCwgc2Rfb3AKIH07CiAKQEAgLTM3LDcgKzM4LDcgQEAKICAqLwogZW51bSBzcGVjX29wIHsKIAlzbGxfb3AsIG1vdmNfb3AsIHNybF9vcCwgc3JhX29wLAotCXNsbHZfb3AsIHNybHZfb3AsIHNyYXZfb3AsIHNwZWMxX3VudXNlZF9vcCwgLyogT3Bjb2RlIDB4MDcgaXMgdW51c2VkICovCisJc2xsdl9vcCwgcG1vbl9vcCwgc3Jsdl9vcCwgc3Jhdl9vcCwKIAlqcl9vcCwgamFscl9vcCwgbW92el9vcCwgbW92bl9vcCwKIAlzeXNjYWxsX29wLCBicmVha19vcCwgc3BpbV9vcCwgc3luY19vcCwKIAltZmhpX29wLCBtdGhpX29wLCBtZmxvX29wLCBtdGxvX29wLApAQCAtNTUsNiArNTYsMjggQEAKIH07CiAKIC8qCisgKiBmdW5jIGZpZWxkIG9mIHNwZWMyIG9wY29kZS4KKyAqLworZW51bSBzcGVjMl9vcCB7CisJbWFkZF9vcCwgbWFkZHVfb3AsIG11bF9vcCwgc3BlYzJfM191bnVzZWRfb3AsCisJbXN1Yl9vcCwgbXN1YnVfb3AsIC8qIG1vcmUgdW51c2VkIG9wcyAqLworCWNsel9vcCA9IDB4MjAsIGNsb19vcCwKKwlkY2x6X29wID0gMHgyNCwgZGNsb19vcCwKKwlzZGJwcF9vcCA9IDB4M2YKK307CisKKy8qCisgKiBmdW5jIGZpZWxkIG9mIHNwZWMzIG9wY29kZS4KKyAqLworZW51bSBzcGVjM19vcCB7CisJZXh0X29wLCBkZXh0bV9vcCwgZGV4dHVfb3AsIGRleHRfb3AsCisJaW5zX29wLCBkaW5zbV9vcCwgZGluc3Vfb3AsIGRpbnNfb3AsCisJYnNoZmxfb3AgPSAweDIwLAorCWRic2hmbF9vcCA9IDB4MjQsCisJcmRod3Jfb3AgPSAweDNmCit9OworCisvKgogICogcnQgZmllbGQgb2YgYmNvbmQgb3Bjb2Rlcy4KICAqLwogZW51bSBydF9vcCB7CkBAIC0xNTEsOCArMTc0LDggQEAKICAqIGZ1bmMgZmllbGQgZm9yIG1hZCBvcGNvZGVzIChNSVBTIElWKS4KICAqLwogZW51bSBtYWRfZnVuYyB7Ci0JbWFkZF9vcCAgICAgID0gMHgwOCwgbXN1Yl9vcCAgICAgID0gMHgwYSwKLQlubWFkZF9vcCAgICAgPSAweDBjLCBubXN1Yl9vcCAgICAgPSAweDBlCisJbWFkZF9mcF9vcCAgICAgID0gMHgwOCwgbXN1Yl9mcF9vcCAgICAgID0gMHgwYSwKKwlubWFkZF9mcF9vcCAgICAgPSAweDBjLCBubXN1Yl9mcF9vcCAgICAgPSAweDBlCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmgKaW5kZXggNGJiOWMwNi4uYTk5ZDY4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fSU5URVJSVVBUX0gKICNkZWZpbmUgX0FTTV9JTlRFUlJVUFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KIAogX19hc21fXyAoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lvLmggYi9pbmNsdWRlL2FzbS1taXBzL2lvLmgKaW5kZXggNmIxN2ViOS4uZGY2MjRlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaW8uaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX0lPX0gKICNkZWZpbmUgX0FTTV9JT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lwMzIvbWFjaGluZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9pcDMyL21hY2hpbmUuaAppbmRleCBlNDQwZmRmLi4xYjYzMWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2lwMzIvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNoaW5lLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9JUDMyX01BQ0hJTkVfSAogI2RlZmluZSBfQVNNX0lQMzJfTUFDSElORV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19TR0lfSVAzMgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaAppbmRleCBkZGU2NzdmLi5kMzVjNjE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fSVJRX0gKICNkZWZpbmUgX0FTTV9JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXNhZGVwLmggYi9pbmNsdWRlL2FzbS1taXBzL2lzYWRlcC5oCmluZGV4IDdiYjAwMzUuLjI0YzZjZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXNhZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pc2FkZXAuaApAQCAtNSw3ICs1LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTggSGFyYWxkIEtvZXJmZ2VuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTTV9JU0FERVBfSAogI2RlZmluZSBfX0FTTV9JU0FERVBfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9qbXIzOTI3L2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy9qbXIzOTI3L2lycS5oCmluZGV4IGIwYzMyNWEuLmZlNTUxZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogc3RydWN0IHRiX2lycV9zcGFjZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMva21hcF90eXBlcy5oCmluZGV4IDY4ODZhMGMuLjgwNmFhZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMva21hcF90eXBlcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAogI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2xvY2FsLmggYi9pbmNsdWRlL2FzbS1taXBzL2xvY2FsLmgKaW5kZXggYzM4ODQ0Zi4uOWUyZDQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbG9jYWwuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9MT0NBTF9ICiAjZGVmaW5lIF9BU01fTE9DQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDAuaAppbmRleCA0Njg2ZTE3Li41ODJhY2Q4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNpZm5kZWYgX0FVMTAwMF9IXwogI2RlZmluZSBfQVUxMDAwX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfTEFOR1VBR0VfQVNTRU1CTFkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHguaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4LmgKaW5kZXggYjdiNDZkZC4uOTQ3MTM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHguaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eC5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaWZuZGVmIF9BVTFYWFhfSF8KICNkZWZpbmUgX0FVMVhYWF9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCmluZGV4IGIzMjdiY2QuLmQ1YjM4YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaApAQCAtMzQsNyArMzQsNiBAQAogI2lmbmRlZiBfQVUxMDAwX0RCRE1BX0hfCiAjZGVmaW5lIF9BVTEwMDBfREJETUFfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9pZGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2lkZS5oCmluZGV4IGU4NjdiNGUuLjMwMWU3MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2lkZS5oCkBAIC0yOSw3ICsyOSw2IEBACiAgKiBOb3RlOiBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyICJBTUQgQWxjaGVteSBBdTEyMDAvQXUxNTUwIElERQogICogICAgICAgSW50ZXJmYWNlIGFuZCBMaW51eCBEZXZpY2UgRHJpdmVyIiBBcHBsaWNhdGlvbiBOb3RlLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCiAgICAgICAgICNkZWZpbmUgRE1BX1dBSVRfVElNRU9VVCAgICAgICAgMTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oCmluZGV4IDhlNWZiM2MuLjVjM2UyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oCkBAIC0zMyw3ICszMyw2IEBACiAjaWZuZGVmIF9BVTEwMDBfUFNDX0hfCiAjZGVmaW5lIF9BVTEwMDBfUFNDX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogVGhlIFBTQyBiYXNlIGFkZHJlc3Nlcy4gICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvaW9yZW1hcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKaW5kZXggZDNlYzYyNy4uMDk4ZmNhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfQVUxWDAwX0lPUkVNQVBfSAogI2RlZmluZSBfX0FTTV9NQUNIX0FVMVgwMF9JT1JFTUFQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBDT05GSUdfNjRCSVRfUEhZU19BRERSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtY29iYWx0L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWNvYmFsdC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCBhY2U4YzVlLi5lMGUwOGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtY29iYWx0L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1jb2JhbHQvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fQVNNX0NPQkFMVF9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogI2RlZmluZSBfX0FTTV9DT0JBTFRfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIGNwdV9oYXNfdGxiCQkxCiAjZGVmaW5lIGNwdV9oYXNfNGtleAkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjF4MDAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kYjF4MDAvZGIxeDAwLmgKaW5kZXggN2IyOGIyMy4uOGZiYjRiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjF4MDAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMXgwMC5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaWZuZGVmIF9fQVNNX0RCMVgwMF9ICiAjZGVmaW5lIF9fQVNNX0RCMVgwMF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAogI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgMHhBRjAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRkYjUwNzQvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kZGI1MDc0L21jMTQ2ODE4cnRjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYjlhY2IuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRkYjUwNzQvbWMxNDY4MThydGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDAzIGJ5IFJhbGYgQmFlY2hsZQotICoKLSAqIFJUQyByb3V0aW5lcyBmb3IgUEMgc3R5bGUgYXR0YWNoZWQgRGFsbGFzIGNoaXAuCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9EREI1MDc0X01DMTQ2ODE4UlRDX0gKLSNkZWZpbmUgX19BU01fTUFDSF9EREI1MDc0X01DMTQ2ODE4UlRDX0gKLQotI2luY2x1ZGUgPGFzbS9kZGI1eHh4L2RkYjUwNzQuaD4KLSNpbmNsdWRlIDxhc20vZGRiNXh4eC9kZGI1eHh4Lmg+Ci0KLSNkZWZpbmUgUlRDX1BPUlQoeCkJKDB4NzAgKyAoeCkpCi0jZGVmaW5lIFJUQ19JUlEJCTgKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIENNT1NfUkVBRCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShLU0VHMUFERFIoRERCX1BDSV9NRU1fQkFTRSkrYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBDTU9TX1dSSVRFKHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShLU0VHMUFERFIoRERCX1BDSV9NRU1fQkFTRSkrYWRkcikgPSBkYXRhOwotfQotCi0jZGVmaW5lIFJUQ19BTFdBWVNfQkNECTEKLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfRERCNTA3NF9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGVjL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGVjL3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNGYwZTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRlYy9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBieSBSYWxmIEJhZWNobGUKLSAqLwotI2lmbmRlZiBfX0FTTV9NQUNIX0RFQ19QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfREVDX1BBUkFNX0gKLQotLyoKLSAqIGxvZzIoSFopLCBjaGFuZ2UgdGhpcyBoZXJlIGlmIHlvdSB3YW50IGFub3RoZXIgSFogdmFsdWUuIFRoaXMgaXMgYWxzbwotICogdXNlZCBpbiBkZWNfdGltZV9pbml0LiAgTWluaW11bSBpcyAxLCBNYXhpbXVtIGlzIDE1LgotICovCi0jZGVmaW5lIExPR18yX0haIDcKLSNkZWZpbmUgSFogKDEgPDwgTE9HXzJfSFopCi0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0RFQ19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZW1tYTJyaC9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1lbW1hMnJoL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZTY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZW1tYTJyaC9pcnEuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfRU1NQTJSSF9JUlFfSAorI2RlZmluZSBfX0FTTV9NQUNIX0VNTUEyUkhfSVJRX0gKKworI2RlZmluZSBOUl9JUlFTCTI1NgorCisjZW5kaWYgLyogX19BU01fTUFDSF9FTU1BMlJIX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI3NmIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfRVhDSVRFX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfRVhDSVRFX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisKKy8qCisgKiBCYXNsZXIgZVhjaXRlIGhhcyBhbiBSTTkxMjIgcHJvY2Vzc29yLgorICovCisjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMTYJCTAKKyNkZWZpbmUgY3B1X2hhc19kaXZlYwkJMAorI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9zCTAKKyNkZWZpbmUgY3B1X2hhc19wcmVmZXRjaAkxCisjZGVmaW5lIGNwdV9oYXNfbWNoZWNrCQkwCisjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCTAKKworI2RlZmluZSBjcHVfaGFzX2xsc2MJCTEKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkwCisjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwkwCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkwCisjZGVmaW5lIGNwdV9oYXNfZHNwCQkwCisjZGVmaW5lIGNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZQkwCisKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCisKKyNkZWZpbmUgY3B1X2hhc19zdWJzZXRfcGNhY2hlcwkwCisKKyNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkzMgorI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCTMyCisjZGVmaW5lIGNwdV9zY2FjaGVfbGluZV9zaXplKCkJMzIKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfRVhDSVRFX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL2V4Y2l0ZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTI2MTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGUuaApAQCAtMCwwICsxLDE1NSBAQAorI2lmbmRlZiBfX0VYQ0lURV9IX18KKyNkZWZpbmUgX19FWENJVEVfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIEVYQ0lURV9DUFVfRVhUX0NMT0NLIDEwMDAwMDAwMAorCisjaWYgIWRlZmluZWQoX19BU1NFTUJMRVJfXykKK3ZvaWQgX19pbml0IGV4Y2l0ZV9rZ2RiX2luaXQodm9pZCk7Cit2b2lkIGV4Y2l0ZV9wcm9jZnNfaW5pdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbXNpemU7CitleHRlcm4gY2hhciBtb2RldHR5W107CitleHRlcm4gdTMyIHVuaXRfaWQ7CisjZW5kaWYKKworLyogQmFzZSBuYW1lIGZvciBYSUNBUCBkZXZpY2VzICovCisjZGVmaW5lIFhJQ0FQX05BTUUJInhpY2FwX2dwaSIKKworLyogT0NEIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgTEtCMAkJMHgwMDM4CisjZGVmaW5lIExLQjUJCTB4MDEyOAorI2RlZmluZSBMS001CQkweDAxMkMKKyNkZWZpbmUgTEtCNwkJMHgwMTM4CisjZGVmaW5lIExLTTcJCTB4MDEzYworI2RlZmluZSBMS0I4CQkweDAxNDAKKyNkZWZpbmUgTEtNOAkJMHgwMTQ0CisjZGVmaW5lIExLQjkJCTB4MDE0OAorI2RlZmluZSBMS005CQkweDAxNGMKKyNkZWZpbmUgTEtCMTAJCTB4MDE1MAorI2RlZmluZSBMS00xMAkJMHgwMTU0CisjZGVmaW5lIExLQjExCQkweDAxNTgKKyNkZWZpbmUgTEtNMTEJCTB4MDE1YworI2RlZmluZSBMS0IxMgkJMHgwMTYwCisjZGVmaW5lIExLTTEyCQkweDAxNjQKKyNkZWZpbmUgTEtCMTMJCTB4MDE2OAorI2RlZmluZSBMS00xMwkJMHgwMTZjCisjZGVmaW5lIExEUDAJCTB4MDIwMAorI2RlZmluZSBMRFAxCQkweDAyMTAKKyNkZWZpbmUgTERQMgkJMHgwMjIwCisjZGVmaW5lIExEUDMJCTB4MDIzMAorI2RlZmluZSBJTlRQSU4wCQkweDBBNDAKKyNkZWZpbmUgSU5UUElOMQkJMHgwQTQ0CisjZGVmaW5lIElOVFBJTjIJCTB4MEE0OAorI2RlZmluZSBJTlRQSU4zCQkweDBBNEMKKyNkZWZpbmUgSU5UUElONAkJMHgwQTUwCisjZGVmaW5lIElOVFBJTjUJCTB4MEE1NAorI2RlZmluZSBJTlRQSU42CQkweDBBNTgKKyNkZWZpbmUgSU5UUElONwkJMHgwQTVDCisKKworCisKKy8qIFRJVEFOIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQ1BSUgkJMHgwMDA0CisjZGVmaW5lIENQRFNSCQkweDAwMDgKKyNkZWZpbmUgQ1BUQzBSCQkweDAwMGMKKyNkZWZpbmUgQ1BUQzFSCQkweDAwMTAKKyNkZWZpbmUgQ1BDRkcwCQkweDAwMjAKKyNkZWZpbmUgQ1BDRkcxCQkweDAwMjQKKyNkZWZpbmUgQ1BEU1QwQQkJMHgwMDI4CisjZGVmaW5lIENQRFNUMEIJCTB4MDAyYworI2RlZmluZSBDUERTVDFBCQkweDAwMzAKKyNkZWZpbmUgQ1BEU1QxQgkJMHgwMDM0CisjZGVmaW5lIENQWERTVEEJCTB4MDAzOAorI2RlZmluZSBDUFhEU1RCCQkweDAwM2MKKyNkZWZpbmUgQ1BYQ0lTUkEJMHgwMDQ4CisjZGVmaW5lIENQWENJU1JCCTB4MDA0YworI2RlZmluZSBDUEdJRzBFUgkweDAwNTAKKyNkZWZpbmUgQ1BHSUcxRVIJMHgwMDU0CisjZGVmaW5lIENQR1JXTAkJMHgwMDY4CisjZGVmaW5lIENQVVJTTE1UCTB4MDBmOAorI2RlZmluZSBVQUNGRwkJMHgwMjAwCisjZGVmaW5lIFVBSU5UUwkJMHgwMjA0CisjZGVmaW5lIFNEUlhGQ0lFCTB4NDgyOAorI2RlZmluZSBTRFRYRkNJRQkweDQ5MjgKKyNkZWZpbmUgSU5UUDBTdGF0dXMwCTB4MUIwMAorI2RlZmluZSBJTlRQME1hc2swCTB4MUIwNAorI2RlZmluZSBJTlRQMFNldDAJMHgxQjA4CisjZGVmaW5lIElOVFAwQ2xlYXIwCTB4MUIwQworI2RlZmluZSBHWENGRwkJMHg1MDAwCisjZGVmaW5lIEdYRE1BRFJQRlgJMHg1MDE4CisjZGVmaW5lIEdYRE1BX0RFU0NBRFIJMHg1MDFjCisjZGVmaW5lIEdYQ0gwVERFU1NUUlQJMHg1MDU0CisKKy8qIElSUSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBOTUlDT05GSUcJCTB4YWMwCisjZGVmaW5lIFRJVEFOX01TR0lOVAkweGM0CisjZGVmaW5lIFRJVEFOX0lSUQkoKFRJVEFOX01TR0lOVCAvIDB4MjApICsgMikKKyNkZWZpbmUgRlBHQTBfTVNHSU5UCTB4NWEKKyNkZWZpbmUgRlBHQTBfSVJRCSgoRlBHQTBfTVNHSU5UIC8gMHgyMCkgKyAyKQorI2RlZmluZSBGUEdBMV9NU0dJTlQJMHg3YgorI2RlZmluZSBGUEdBMV9JUlEJKChGUEdBMV9NU0dJTlQgLyAweDIwKSArIDIpCisjZGVmaW5lIFBIWV9NU0dJTlQJMHg5YworI2RlZmluZSBQSFlfSVJRCQkoKFBIWV9NU0dJTlQgICAvIDB4MjApICsgMikKKworI2lmIGRlZmluZWQoQ09ORklHX0JBU0xFUl9FWENJVEVfUFJPVE9UWVBFKQorLyogUHJlLXJlbGVhc2UgdW5pdHMgdXNlZCBpbnRlcnJ1cHQgcGluICM5ICovCisjZGVmaW5lIFVTQl9JUlEJCTExCisjZWxzZQorLyogUmUtZGVzaWduZWQgdW5pdHMgdXNlIGludGVycnVwdCBwaW4gIzEgKi8KKyNkZWZpbmUgVVNCX01TR0lOVAkweDM5CisjZGVmaW5lIFVTQl9JUlEJCSgoVVNCX01TR0lOVCAvIDB4MjApICsgMikKKyNlbmRpZgorI2RlZmluZSBUSU1FUl9JUlEJMTIKKworCisvKiBEZXZpY2UgYWRkcmVzcyByYW5nZXMgKi8KKyNkZWZpbmUgRVhDSVRFX09GRlNfT0NECQkweDFmZmZjMDAwCisjZGVmaW5lCUVYQ0lURV9TSVpFX09DRAkJKDE2ICogMTAyNCkKKyNkZWZpbmUgRVhDSVRFX1BIWVNfT0NECQlDUEhZU0FERFIoRVhDSVRFX09GRlNfT0NEKQorI2RlZmluZSBFWENJVEVfQUREUl9PQ0QJCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfT0NEKQorCisjZGVmaW5lIEVYQ0lURV9PRkZTX1NDUkFNIAkweDFmZmZhMDAwCisjZGVmaW5lCUVYQ0lURV9TSVpFX1NDUkFNCSg4IDw8IDEwKQorI2RlZmluZSBFWENJVEVfUEhZU19TQ1JBTSAJQ1BIWVNBRERSKEVYQ0lURV9PRkZTX1NDUkFNKQorI2RlZmluZSBFWENJVEVfQUREUl9TQ1JBTSAJQ0tTRUcxQUREUihFWENJVEVfT0ZGU19TQ1JBTSkKKworI2RlZmluZSBFWENJVEVfT0ZGU19QQ0lfSU8JMHgxZmZmODAwMAorI2RlZmluZQlFWENJVEVfU0laRV9QQ0lfSU8JKDggPDwgMTApCisjZGVmaW5lIEVYQ0lURV9QSFlTX1BDSV9JTwlDUEhZU0FERFIoRVhDSVRFX09GRlNfUENJX0lPKQorI2RlZmluZSBFWENJVEVfQUREUl9QQ0lfSU8gCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfUENJX0lPKQorCisjZGVmaW5lIEVYQ0lURV9PRkZTX1RJVEFOCTB4MWZmZjAwMDAKKyNkZWZpbmUgRVhDSVRFX1NJWkVfVElUQU4JKDMyIDw8IDEwKQorI2RlZmluZSBFWENJVEVfUEhZU19USVRBTglDUEhZU0FERFIoRVhDSVRFX09GRlNfVElUQU4pCisjZGVmaW5lIEVYQ0lURV9BRERSX1RJVEFOCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfVElUQU4pCisKKyNkZWZpbmUgRVhDSVRFX09GRlNfUENJX01FTQkweDFmZmUwMDAwCisjZGVmaW5lIEVYQ0lURV9TSVpFX1BDSV9NRU0JKDY0IDw8IDEwKQorI2RlZmluZSBFWENJVEVfUEhZU19QQ0lfTUVNCUNQSFlTQUREUihFWENJVEVfT0ZGU19QQ0lfTUVNKQorI2RlZmluZSBFWENJVEVfQUREUl9QQ0lfTUVNCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfUENJX01FTSkKKworI2RlZmluZSBFWENJVEVfT0ZGU19GUEdBCTB4MWZmZGMwMDAKKyNkZWZpbmUgRVhDSVRFX1NJWkVfRlBHQQkoMTYgPDwgMTApCisjZGVmaW5lIEVYQ0lURV9QSFlTX0ZQR0EJQ1BIWVNBRERSKEVYQ0lURV9PRkZTX0ZQR0EpCisjZGVmaW5lIEVYQ0lURV9BRERSX0ZQR0EJQ0tTRUcxQUREUihFWENJVEVfT0ZGU19GUEdBKQorCisjZGVmaW5lIEVYQ0lURV9PRkZTX05BTkQJMHgxZmZkODAwMAorI2RlZmluZSBFWENJVEVfU0laRV9OQU5ECSgxNiA8PCAxMCkKKyNkZWZpbmUgRVhDSVRFX1BIWVNfTkFORAlDUEhZU0FERFIoRVhDSVRFX09GRlNfTkFORCkKKyNkZWZpbmUgRVhDSVRFX0FERFJfTkFORAlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX05BTkQpCisKKyNkZWZpbmUgRVhDSVRFX09GRlNfQk9PVFJPTQkweDFmMDAwMDAwCisjZGVmaW5lIEVYQ0lURV9TSVpFX0JPT1RST00JKDggPDwgMjApCisjZGVmaW5lIEVYQ0lURV9QSFlTX0JPT1RST00JQ1BIWVNBRERSKEVYQ0lURV9PRkZTX0JPT1RST00pCisjZGVmaW5lIEVYQ0lURV9BRERSX0JPT1RST00JQ0tTRUcxQUREUihFWENJVEVfT0ZGU19CT09UUk9NKQorCisvKiBGUEdBIGFkZHJlc3Mgb2Zmc2V0cyAqLworI2RlZmluZSBFWENJVEVfRlBHQV9EUFIJCTB4MDEwNAkvKiBkdWFsLXBvcnRlZCByYW0gKi8KKyNkZWZpbmUgRVhDSVRFX0ZQR0FfU1lTQ1RMCTB4MDIwMAkvKiBzeXN0ZW0gY29udHJvbCByZWdpc3RlciBibG9jayAqLworCisjZW5kaWYgLyogX19FWENJVEVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL2V4Y2l0ZV9uYW5kZmxhc2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvZXhjaXRlX25hbmRmbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Y2Y2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL2V4Y2l0ZV9uYW5kZmxhc2guaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19FWENJVEVfTkFOREZMQVNIX0hfXworI2RlZmluZSBfX0VYQ0lURV9OQU5ERkxBU0hfSF9fCisKKy8qIFJlc291cmNlIG5hbWVzICovCisjZGVmaW5lIEVYQ0lURV9OQU5ERkxBU0hfUkVTT1VSQ0VfUkVHUwkiZXhjaXRlX25hbmRmbGFzaF9yZWdzIgorCisjZW5kaWYgLyogX19FWENJVEVfTkFOREZMQVNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9ybTlrX2V0aC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9ybTlrX2V0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzA1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL3JtOWtfZXRoLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmICFkZWZpbmVkKF9fUk05S19FVEhfSF9fKQorI2RlZmluZSBfX1JNOUtfRVRIX0hfXworCisjZGVmaW5lIFJNOUtfR0VfTkFNRQkJCSJybTlrX2dlIgorCisvKiBSZXNvdXJjZSBuYW1lcyAqLworI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX01BQyAgICAgIAkicm05a19nZV9tYWMiCisjZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfTVNUQVQgICAgICAJInJtOWtfZ2VfbXN0YXQiCisjZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfUEtUUFJPQwkicm05a19nZV9wa3Rwcm9jIgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX1hETUEJCSJybTlrX2dlX3hkbWEiCisjZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRklGT19SWCAgCSJybTlrX2dlX2ZpZm9fcngiCisjZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRklGT19UWCAgCSJybTlrX2dlX2ZpZm9fdHgiCisjZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRklGT01FTV9SWCAgCSJybTlrX2dlX2ZpZm9fbWVtb3J5X3J4IgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0ZJRk9NRU1fVFggIAkicm05a19nZV9maWZvX21lbW9yeV90eCIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9QSFkgICAgICAJInJtOWtfZ2VfcGh5IgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfUlggIAkicm05a19nZV9kbWFkZXNjX3J4IgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfVFggIAkicm05a19nZV9kbWFkZXNjX3R4IgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0lSUV9NQUlOCSJybTlrX2dlX2lycV9tYWluIgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0lSUV9QSFkJInJtOWtfZ2VfaXJxX3BoeSIKKyNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9HUElfU0xJQ0UJInJtOWtfZ2VfZ3BpX3NsaWNlIgorI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX01ESU9fQ0hBTk5FTAkicm05a19nZV9tZGlvX2NoYW5uZWwiCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfX1JNOUtfRVRIX0hfXykgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvcm05a193ZHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvcm05a193ZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmEzYzA4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9ybTlrX3dkdC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19STTlLX1dEVF9IX18KKyNkZWZpbmUgX19STTlLX1dEVF9IX18KKworLyogRGV2aWNlIG5hbWUgKi8KKyNkZWZpbmUgV0RUX05BTUUJCSJ3ZHRfZ3BpIgorCisvKiBSZXNvdXJjZSBuYW1lcyAqLworI2RlZmluZSBXRFRfUkVTT1VSQ0VfUkVHUwkiZXhjaXRlX3dhdGNoZG9nX3JlZ3MiCisjZGVmaW5lIFdEVF9SRVNPVVJDRV9JUlEJImV4Y2l0ZV93YXRjaGRvZ19pcnEiCisjZGVmaW5lIFdEVF9SRVNPVVJDRV9DT1VOVEVSCSJleGNpdGVfd2F0Y2hkb2dfY291bnRlciIKKworI2VuZGlmIC8qIF9fUk05S19XRFRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL3JtOWtfeGljYXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvcm05a194aWNhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTU3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL3JtOWtfeGljYXAuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9fRVhDSVRFX1hJQ0FQX0hfXworI2RlZmluZSBfX0VYQ0lURV9YSUNBUF9IX18KKworCisvKiBSZXNvdXJjZSBuYW1lcyAqLworI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9GSUZPX1JYCQkieGljYXBfZmlmb19yeCIKKyNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfRklGT19UWAkJInhpY2FwX2ZpZm9fdHgiCisjZGVmaW5lIFhJQ0FQX1JFU09VUkNFX1hETUEgCQkieGljYXBfeGRtYSIKKyNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfRE1BREVTQwkJInhpY2FwX2RtYWRlc2MiCisjZGVmaW5lIFhJQ0FQX1JFU09VUkNFX1BLVFBST0MgIAkieGljYXBfcGt0cHJvYyIKKyNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfSVJRCQkieGljYXBfaXJxIgorI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9HUElfU0xJQ0UJInhpY2FwX2dwaV9zbGljZSIKKyNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfRklGT19CTEsJCSJ4aWNhcF9maWZvX2Jsb2NrcyIKKyNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfUEtUX1NUUkVBTQkieGljYXBfcGt0X3N0cmVhbSIKKworI2VuZGlmIC8qIF9fRVhDSVRFX1hJQ0FQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaAppbmRleCBlMzMxNTM1Li42ZWJhMmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaApAQCAtMTUsNyArMTUsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMva21hbGxvYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMva21hbGxvYy5oCmluZGV4IDM3M2Q2NmQuLjQxMGFiNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2ttYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9rbWFsbG9jLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19LTUFMTE9DX0gKICNkZWZpbmUgX19BU01fTUFDSF9HRU5FUklDX0tNQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgQ09ORklHX0RNQV9DT0hFUkVOVAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGQxMmY5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaWZuZGVmIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9ICi0KLSNkZWZpbmUgSFoJCTEwMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfR0VORVJJQ19QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9zcGFjZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3NwYWNlcy5oCmluZGV4IGI4NDlkOGQuLjBhZTk5OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3NwYWNlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL3NwYWNlcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fTUFDSF9HRU5FUklDX1NQQUNFU19ICiAjZGVmaW5lIF9BU01fTUFDSF9HRU5FUklDX1NQQUNFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR18zMkJJVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IDJhMzdiZWQuLmY3YzVkYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0xMyw3ICsxMyw3IEBACiAgKi8KICNkZWZpbmUgY3B1X2hhc190bGIJCTEKICNkZWZpbmUgY3B1X2hhc180a2V4CQkxCi0jZGVmaW5lIGNwdV9oYXNfNGtjYWNoZQkJMQorI2RlZmluZSBjcHVfaGFzXzRrX2NhY2hlCTEKICNkZWZpbmUgY3B1X2hhc19mcHUJCTEKICNkZWZpbmUgY3B1X2hhc18zMmZwcgkJMQogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDIyL3NwYWNlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvc3BhY2VzLmgKaW5kZXggODM4NWY3MS4uYWIyMGMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvc3BhY2VzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvc3BhY2VzLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9NQUNIX0lQMjJfU1BBQ0VTX0gKICNkZWZpbmUgX0FTTV9NQUNIX0lQMjJfU1BBQ0VTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHXzMyQklUCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggMmQyZjViOS4uMTljMmQxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTMxLDYgKzMxLDkgQEAKICNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCiAjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCiAKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkxCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJMQorCiAjZGVmaW5lIGNwdV9oYXNfc3Vic2V0X3BjYWNoZXMJMQogCiAjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggMzYwNzBiNS4uMmEzZGUwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfSVAzMl9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogI2RlZmluZSBfX0FTTV9NQUNIX0lQMzJfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogUjUwMDAgaGFzIGFuIGludGVyZXN0aW5nICJyZXN0cmljdGlvbiI6ICBsbChkKS9zYyhkKQpAQCAtMzgsNiArMzcsOCBAQAogI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAKICNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCTAKICNkZWZpbmUgY3B1X2hhc19kc3AJCTAKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCisKIAogI2RlZmluZSBjcHVfaGFzX21pcHMzMnIxCTAKICNkZWZpbmUgY3B1X2hhc19taXBzMzJyMgkwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9rbWFsbG9jLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9rbWFsbG9jLmgKaW5kZXggOWQyZDRkOS4uZjYxOThhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIva21hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2ttYWxsb2MuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9JUDMyX0tNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9NQUNIX0lQMzJfS01BTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9SNTAwMCkgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9STTcwMDApCiAjZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTgkzMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovcGFyYW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1qYXp6L3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTc2M2EuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWphenovcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9KQVpaX1BBUkFNX0gKLSNkZWZpbmUgX19BU01fTUFDSF9KQVpaX1BBUkFNX0gKLQotLyoKLSAqIEphenogaXMgY3VycmVudGx5IHVzaW5nIHRoZSBpbnRlcm5hbCAxMDBIeiB0aW1lciBvZiB0aGUgUjQwMzAKLSAqLwotI2RlZmluZSBIWgkJMTAwCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0pBWlpfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCBlMDZhZjZjLi5lOTYwNjc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9NSVBTX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfTUlQU19DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBDUFUgZmVhdHVyZSBvdmVycmlkZXMgZm9yIE1JUFMgYm9hcmRzCkBAIC0xNyw3ICsxNiw3IEBACiAjaWZkZWYgQ09ORklHX0NQVV9NSVBTMzIKICNkZWZpbmUgY3B1X2hhc190bGIJCTEKICNkZWZpbmUgY3B1X2hhc180a2V4CQkxCi0jZGVmaW5lIGNwdV9oYXNfNGtjYWNoZQkJMQorI2RlZmluZSBjcHVfaGFzXzRrX2NhY2hlCTEKIC8qICNkZWZpbmUgY3B1X2hhc19mcHUJCT8gKi8KIC8qICNkZWZpbmUgY3B1X2hhc18zMmZwcgk/ICovCiAjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJMQpAQCAtNDcsNyArNDYsNyBAQAogI2lmZGVmIENPTkZJR19DUFVfTUlQUzY0CiAjZGVmaW5lIGNwdV9oYXNfdGxiCQkxCiAjZGVmaW5lIGNwdV9oYXNfNGtleAkJMQotI2RlZmluZSBjcHVfaGFzXzRrY2FjaGUJCTEKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCiAvKiAjZGVmaW5lIGNwdV9oYXNfZnB1CQk/ICovCiAvKiAjZGVmaW5lIGNwdV9oYXNfMzJmcHIJPyAqLwogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2lycS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKaW5kZXggZjg1Nzk2OS4uMDgzZDljNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfTUlQU19JUlFfSAogI2RlZmluZSBfX0FTTV9NQUNIX01JUFNfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIE5SX0lSUVMJMjU2CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDVlZjZkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaWZuZGVmIF9fQVNNX01BQ0hfTUlQU19QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfTUlQU19QQVJBTV9ICi0KLSNkZWZpbmUgSFoJCTEwMAkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwotCi0jZW5kaWYgLyogX19BU01fTUFDSF9NSVBTX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTUwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oCmluZGV4IDk1NzhlYWQuLjlhNDk1NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTUwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjE1NTAuaApAQCAtMjcsNyArMjcsNiBAQAogI2lmbmRlZiBfX0FTTV9QQjE1NTBfSAogI2RlZmluZSBfX0FTTV9QQjE1NTBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBEQkRNQV9BQzk3X1RYX0NIQU4gRFNDUl9DTUQwX1BTQzFfVFgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1xZW11L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcWVtdS9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjMwZWU0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1xZW11L3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaWZuZGVmIF9fQVNNX01BQ0hfUUVNVV9QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfUUVNVV9QQVJBTV9ICi0KLSNkZWZpbmUgSFoJCTEwMAkJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwotCi0jZW5kaWYgLyogX19BU01fTUFDSF9RRU1VX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybTIwMC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybTIwMC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCA5MWU3Y2Y1Li4xMTQxMGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0xNCw3ICsxNCw3IEBACiAKICNkZWZpbmUgY3B1X2hhc190bGIJCTEKICNkZWZpbmUgY3B1X2hhc180a2V4CQkxCi0jZGVmaW5lIGNwdV9oYXNfNGtjYWNoZQkJMQorI2RlZmluZSBjcHVfaGFzXzRrX2NhY2hlCTEKICNkZWZpbmUgY3B1X2hhc19mcHUJCTEKICNkZWZpbmUgY3B1X2hhc18zMmZwcgkJMQogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKQEAgLTM1LDEwICszNSw4IEBACiAjZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAogI2RlZmluZSBjcHVfaGFzXzY0Yml0cwkJMQogCi0jZGVmaW5lIGNwdV9oYXNfc3Vic2V0X3BjYWNoZXMJMAkvKiBObyBTLWNhY2hlIG9uIFI1MDAwIEkgdGhpbmsgLi4uICAqLwogI2RlZmluZSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpCTMyCiAjZGVmaW5lIGNwdV9pY2FjaGVfbGluZV9zaXplKCkJMzIKLSNkZWZpbmUgY3B1X3NjYWNoZV9saW5lX3NpemUoKQkwCS8qIE5vIFMtY2FjaGUgb24gUjUwMDAgSSB0aGluayAuLi4gICovCiAKICNkZWZpbmUgY3B1X2hhc19taXBzMzJyMQkwCiAjZGVmaW5lIGNwdV9oYXNfbWlwczMycjIJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXNpbS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaW0vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggY2FkYmU4ZS4uZDczNmJkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXNpbS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtc2ltL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX1NJTV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogI2RlZmluZSBfX0FTTV9NQUNIX1NJTV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBDUFUgZmVhdHVyZSBvdmVycmlkZXMgZm9yIE1JUFMgYm9hcmRzCkBAIC0xNiw3ICsxNSw3IEBACiAjaWZkZWYgQ09ORklHX0NQVV9NSVBTMzIKICNkZWZpbmUgY3B1X2hhc190bGIJCTEKICNkZWZpbmUgY3B1X2hhc180a2V4CQkxCi0jZGVmaW5lIGNwdV9oYXNfNGtjYWNoZQkJMQorI2RlZmluZSBjcHVfaGFzXzRrX2NhY2hlCTEKICNkZWZpbmUgY3B1X2hhc19mcHUJCTAKIC8qICNkZWZpbmUgY3B1X2hhc18zMmZwcgk/ICovCiAjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJMQpAQCAtNDEsNyArNDAsNyBAQAogI2lmZGVmIENPTkZJR19DUFVfTUlQUzY0CiAjZGVmaW5lIGNwdV9oYXNfdGxiCQkxCiAjZGVmaW5lIGNwdV9oYXNfNGtleAkJMQotI2RlZmluZSBjcHVfaGFzXzRrY2FjaGUJCTEKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCiAvKiAjZGVmaW5lIGNwdV9oYXNfZnB1CQk/ICovCiAvKiAjZGVmaW5lIGNwdV9oYXNfMzJmcHIJPyAqLwogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC13cnBwbWMvbWFjaC1ndDY0MTIwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtd3JwcG1jL21hY2gtZ3Q2NDEyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTIwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtd3JwcG1jL21hY2gtZ3Q2NDEyMC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBUaGlzIGlzIGEgZGlyZWN0IGNvcHkgb2YgdGhlIGV2OTYxMDAuaCBmaWxlLCB3aXRoIGEgZ2xvYmFsCisgKiBzZWFyY2ggYW5kIHJlcGxhY2UuICBUaGUgbnVtYmVycyBhcmUgdGhlIHNhbWUuCisgKgorICogVGhlIHJlYXNvbiBJJ20gZHVwbGljYXRpbmcgdGhpcyBpcyBzbyB0aGF0IHRoZSA2NDEyMC85NjEwMAorICogZGVmaW5lcyB3b24ndCBiZSBjb25mdXNpbmcgaW4gdGhlIHNvdXJjZSBjb2RlLgorICovCisjaWZuZGVmIF9fQVNNX01JUFNfR1Q2NDEyMF9ICisjZGVmaW5lIF9fQVNNX01JUFNfR1Q2NDEyMF9ICisKKy8qCisgKiBUaGlzIGlzIHRoZSBDUFUgcGh5c2ljYWwgbWVtb3J5IG1hcCBvZiBQUE1DIEJvYXJkOgorICoKKyAqICAgIDB4MDAwMDAwMDAtMHgwM0ZGRkZGRiAgICAgIC0gNjRNQiBTRFJBTSAoU0NTWzBdIykKKyAqICAgIDB4MUMwMDAwMDAtMHgxQzAwMDAwMCAgICAgIC0gTEVEIChDUzApCisgKiAgICAweDFDODAwMDAwLTB4MUM4MDAwMDcgICAgICAtIFVBUlQgMTY1NTAgcG9ydCAoQ1MxKQorICogICAgMHgxRjAwMDAwMC0weDFGMDAwMDAwICAgICAgLSBNYWlsQm94IChDUzMpCisgKiAgICAweDFGQzAwMDAwLTB4MjAwMDAwMDAgICAgICAtIDRNQiBGbGFzaCAoQk9PVCBDUykKKyAqLworCisjZGVmaW5lIFdSUFBNQ19TRFJBTV9TQ1MwX0JBU0UJMHgwMDAwMDAwMAorI2RlZmluZSBXUlBQTUNfU0RSQU1fU0NTMF9TSVpFCTB4MDQwMDAwMDAKKworI2RlZmluZSBXUlBQTUNfVUFSVDE2NTUwX0JBU0UJMHgxQzgwMDAwMAorI2RlZmluZSBXUlBQTUNfVUFSVDE2NTUwX0NMT0NLCTM2ODY0MDAgLyogMy42OE1IWiAqLworCisjZGVmaW5lIFdSUFBNQ19MRURfQkFTRQkJMHgxQzAwMDAwMAorI2RlZmluZSBXUlBQTUNfTUJPWF9CQVNFCTB4MUYwMDAwMDAKKworI2RlZmluZSBXUlBQTUNfQk9PVFJPTV9CQVNFCTB4MUZDMDAwMDAKKyNkZWZpbmUgV1JQUE1DX0JPT1RST01fU0laRQkweDAwNDAwMDAwIC8qIDRNIEZsYXNoICovCisKKyNkZWZpbmUgV1JQUE1DX01JUFNfVElNRVJfSVJRCTcgLyogTUlQUyBjb21wYXJlL2NvdW50IHRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBXUlBQTUNfVUFSVDE2NTUwX0lSUQk2CisjZGVmaW5lIFdSUFBNQ19QQ0lfSU5UQV9JUlEJMworCisvKgorICogUENJIEJ1cyBJL08gYW5kIE1lbW9yeSByZXNvdXJjZXMgYWxsb2NhdGlvbgorICoKKyAqIE5PVEU6IFdlIG9ubHkgaGF2ZSBQQ0lfMCBob3NlIGludGVyZmFjZQorICovCisjZGVmaW5lIEdUX1BDSV9NRU1fQkFTRQkweDEzMDAwMDAwVUwKKyNkZWZpbmUgR1RfUENJX01FTV9TSVpFCTB4MDIwMDAwMDBVTAorI2RlZmluZSBHVF9QQ0lfSU9fQkFTRQkweDExMDAwMDAwVUwKKyNkZWZpbmUgR1RfUENJX0lPX1NJWkUJMHgwMjAwMDAwMFVMCisjZGVmaW5lIEdUX0lTQV9JT19CQVNFCVBDSV9JT19CQVNFCisKKy8qCisgKiBQQ0kgaW50ZXJydXB0cyB3aWxsIGNvbWUgaW4gb24gZWl0aGVyIHRoZSBJTlRBIG9yIElOVEQgaW50ZXJydXBzIGxpbmVzLAorICogd2hpY2ggYXJlIG1hcHBlZCB0byB0aGUgIzIgYW5kICM1IGludGVycnVwdCBwaW5zIG9mIHRoZSBNSVBTLiAgT24gb3VyCisgKiBib2FyZHMsIHRoZXkgYWxsIGVpdGhlciBjb21lIGluIG9uIEludEQgb3IgdGhleSBhbGwgY29tZSBpbiBvbiBJbnRBLCB0aGV5CisgKiBhcmVuJ3QgbWl4ZWQuIFRoZXJlIGNhbiBiZSBudW1lcm91cyBQQ0kgaW50ZXJydXB0cywgc28gd2Uga2VlcCBhIGxpc3Qgb2YgdGhlCisgKiAicmVxdWVzdGVkIiBpbnRlcnJ1cHQgbnVtYmVycyBhbmQgZ28gdGhyb3VnaCB0aGUgbGlzdCB3aGVuZXZlciB3ZSBnZXQgYW4KKyAqIEludEEvRC4KKyAqCisgKiBJbnRlcnJ1cHRzIDwgOCBhcmUgZGlyZWN0bHkgd2lyZWQgdG8gdGhlIHByb2Nlc3NvcjsgUENJIElOVEEgaXMgOCBhbmQKKyAqIElOVEQgaXMgMTEuCisgKi8KKyNkZWZpbmUgR1RfVElNRVIJNAorI2RlZmluZSBHVF9JTlRBCQkyCisjZGVmaW5lIEdUX0lOVEQJCTUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIEdUNjQxMjAgaW50ZXJuYWwgcmVnaXN0ZXIgc3BhY2UgYmFzZSBhZGRyZXNzCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGd0NjQxMjBfYmFzZTsKKworI2RlZmluZSBHVDY0MTIwX0JBU0UJKGd0NjQxMjBfYmFzZSkKKworLyogZGVmaW5lIFdSUFBNQ19FQVJMWV9ERUJVRyB0byBlbmFibGUgZWFybHkgb3V0cHV0IHNvbWV0aGluZyB0byBVQVJUICovCisjdW5kZWYgV1JQUE1DX0VBUkxZX0RFQlVHCisKKyNpZmRlZiBXUlBQTUNfRUFSTFlfREVCVUcKK2V4dGVybiB2b2lkIHdycHBtY19sZWRfb24oaW50IG1hc2spOworZXh0ZXJuIHZvaWQgd3JwcG1jX2xlZF9vZmYoaW50IG1hc2spOworZXh0ZXJuIHZvaWQgd3JwcG1jX2Vhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CisjZWxzZQorI2RlZmluZSB3cnBwbWNfZWFybHlfcHJpbnRrKGZtdCwgLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBXUlBQTUNfRUFSTFlfREVCVUcgKi8KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fQVNNX01JUFNfR1Q2NDEyMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCmluZGV4IGZhOGI5MTMuLmI5OGYxNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIF9fQVNNX01JUFNfQk9BUkRTX0dFTkVSSUNfSAogI2RlZmluZSBfX0FTTV9NSVBTX0JPQVJEU19HRU5FUklDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmggYi9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKaW5kZXggYTJlZjU3OS4uNjczOTc3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfQVNNX01JUFNSRUdTX0gKICNkZWZpbmUgX0FTTV9NSVBTUkVHU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KIApAQCAtMjkxLDcgKzI5MCw3IEBACiAjZGVmaW5lIFNUMF9ETAkJCShfVUxDQVNUXygxKSA8PCAyNCkKIAogLyoKLSAqIEVuYWJsZSB0aGUgTUlQUyBEU1AgQVNFCisgKiBFbmFibGUgdGhlIE1JUFMgTURNWCBhbmQgRFNQIEFTRXMKICAqLwogI2RlZmluZSBTVDBfTVgJCQkweDAxMDAwMDAwCiAKQEAgLTE0NTEsMTIgKzE0NTAsMTAgQEAKIHsKIAlpZiAoKHByZXZpb3VzICYgX19FTVRfRU5BQkxFKSkKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIJLnNldAlub3Jlb3JkZXIJCQkJXG4iCiAJCSIJLnNldAltaXBzMzJyMgkJCQlcbiIKIAkJIgkud29yZAkweDQxNjAwYmUxCQkjIGVtdAkJXG4iCiAJCSIJZWhiCQkJCQkJXG4iCi0JCSIJLnNldAltaXBzMAkJCQkJXG4iCi0JCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIpOworCQkiCS5zZXQJbWlwczAJCQkJCVxuIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2VoYih2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCmluZGV4IDZlMDlmNGMuLjE4YjY5ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9BU01fTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbW16b25lLmggYi9pbmNsdWRlL2FzbS1taXBzL21tem9uZS5oCmluZGV4IDdiZGU0NDMuLmRjMjMxYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbW16b25lLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX0FTTV9NTVpPTkVfSF8KICNkZWZpbmUgX0FTTV9NTVpPTkVfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8bW16b25lLmg+CiAKQEAgLTE0LDE3ICsxMyw2IEBACiAjZGVmaW5lIGt2YWRkcl90b19uaWQoa3ZhZGRyKQlwYV90b19uaWQoX19wYShrdmFkZHIpKQogI2RlZmluZSBwZm5fdG9fbmlkKHBmbikJCXBhX3RvX25pZCgocGZuKSA8PCBQQUdFX1NISUZUKQogCi0jZGVmaW5lIHBmbl92YWxpZChwZm4pCQkJCQkJXAotKHsJCQkJCQkJCVwKLSAJdW5zaWduZWQgbG9uZyBfX3BmbiA9IChwZm4pOwkJCQlcCi0gCWludCBfX24gPSBwZm5fdG9fbmlkKF9fcGZuKTsJCQkJXAotCSgoX19uID49IDApID8gKF9fcGZuIDwgTk9ERV9EQVRBKF9fbiktPm5vZGVfc3RhcnRfcGZuICsJXAotCQkgICAgICAgTk9ERV9EQVRBKF9fbiktPm5vZGVfc3Bhbm5lZF9wYWdlcykgOiAwKTtcCi19KQotCi0vKiBYWFg6IEZJWE1FIC0tIHdsaSAqLwotI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDApCi0KICNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCiAKICNlbmRpZiAvKiBfQVNNX01NWk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW9kdWxlLmgKaW5kZXggMmFmNDk2Yy4uMzk5ZDAzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21vZHVsZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX01PRFVMRV9ICiAjZGVmaW5lIF9BU01fTU9EVUxFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tbWlwcy9tc2didWYuaAppbmRleCBhMTUzMzk1Li4wZDZjN2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21zZ2J1Zi5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbXNnYnVmLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTVNHQlVGX0gKICNkZWZpbmUgX0FTTV9NU0dCVUZfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHRoZSBNSVBTIGFyY2hpdGVjdHVyZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmgKaW5kZXggNDZmMmQyMy4uMTQ3ODQ0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX0FTTV9QQUNDRVNTX0gKICNkZWZpbmUgX0FTTV9QQUNDRVNTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNpZmRlZiBDT05GSUdfMzJCSVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKaW5kZXggYTFlYWIxMy4uNmI5Nzc0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUEFHRV9ICiAjZGVmaW5lIF9BU01fUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIApAQCAtMTM5LDkgKzEzOCwzMCBAQAogCiAjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKIAorI2lmbmRlZiBDT05GSUdfU1BBUlNFTUVNCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KKworI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbWF4X21hcG5yKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19ORUVEX01VTFRJUExFX05PREVTKQorCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19wZm4gPSAocGZuKTsJCQkJCVwKKwlpbnQgX19uID0gcGZuX3RvX25pZChfX3Bmbik7CQkJCQlcCisJKChfX24gPj0gMCkgPyAoX19wZm4gPCBOT0RFX0RBVEEoX19uKS0+bm9kZV9zdGFydF9wZm4gKwkJXAorCSAgICAgICAgICAgICAgICAgICAgICAgTk9ERV9EQVRBKF9fbiktPm5vZGVfc3Bhbm5lZF9wYWdlcykJXAorCSAgICAgICAgICAgIDogMCk7CQkJCQkJXAorfSkKKworI2Vsc2UKKyNlcnJvciBQcm92aWRlIGEgZGVmaW5pdGlvbiBvZiBwZm5fdmFsaWQKKyNlbmRpZgogCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGFyYW0uaAppbmRleCAyYmVhZDgyLi4xZDliYjhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wYXJhbS5oCkBAIC0xMSw3ICsxMSw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSMgaW5jbHVkZSA8cGFyYW0uaD4JCQkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCisjIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KICMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLwogIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BjaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kuaAppbmRleCA2YzlhZDgxLi5jNGQ2OGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGNpLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9BU01fUENJX0gKICNkZWZpbmUgX0FTTV9QQ0lfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGNpL2JyaWRnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmgKaW5kZXggYjRlZTk5NS4uMGM0NWU3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS94dGFsay94d2lkZ2V0Lmg+CQkvKiBnZW5lcmljIHdpZGdldCBoZWFkZXIgKi8KKyNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KIAogLyogSS9PIHBhZ2Ugc2l6ZSAqLwogCkBAIC04NDgsNCArODQ5LDYgQEAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2JyaWRnZV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gaW50IHJlcXVlc3RfYnJpZGdlX2lycShzdHJ1Y3QgYnJpZGdlX2NvbnRyb2xsZXIgKmJjKTsKIAorZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIGJyaWRnZV9wY2lfb3BzOworCiAjZW5kaWYgLyogX0FTTV9QQ0lfQlJJREdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmgKaW5kZXggZmUxZGY1Ny4uNTgyYzFmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ2FsbG9jLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUEdBTExPQ19ICiAjZGVmaW5lIF9BU01fUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaAppbmRleCA0ZDZiYzQ1Li40YjI2ZDg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9QR1RBQkxFXzMyX0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFXzMyX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCkBAIC0xNzcsNDggKzE3Niw2NyBAQAogCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAxMCkgfCAoKG9mZnNldCkgPDwgMTUpIH0pCiAKIC8qCi0gKiBCaXRzIDAsIDEsIDIsIDkgYW5kIDEwIGFyZSB0YWtlbiwgc3BsaXQgdXAgdGhlIDI3IGJpdHMgb2Ygb2Zmc2V0Ci0gKiBpbnRvIHRoaXMgcmFuZ2U6CisgKiBCaXRzIDAsIDQsIDgsIGFuZCA5IGFyZSB0YWtlbiwgc3BsaXQgdXAgMjggYml0cyBvZiBvZmZzZXQgaW50byB0aGlzIHJhbmdlOgogICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI3CisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI4CiAKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpIFwKLQkoKCgoX3B0ZSkucHRlID4+IDMpICYgMHgzZiApICsgKCgoX3B0ZSkucHRlID4+IDExKSA8PCA4ICkpCisjZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKQkoKCgoX3B0ZSkucHRlID4+IDEgKSAmIDB4MDcpIHwgXAorCQkJCSAoKChfcHRlKS5wdGUgPj4gMiApICYgMHgzOCkgfCBcCisJCQkJICgoKF9wdGUpLnB0ZSA+PiAxMCkgPDwgIDYgKSkKIAotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCi0JKChwdGVfdCkgeyAoKChvZmYpICYgMHgzZikgPDwgMykgKyAoKChvZmYpID4+IDgpIDw8IDExKSArIF9QQUdFX0ZJTEUgfSkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKChvZmYpICYgMHgwNykgPDwgMSApIHwgXAorCQkJCQkgICAoKChvZmYpICYgMHgzOCkgPDwgMiApIHwgXAorCQkJCQkgICAoKChvZmYpID4+ICA2ICkgPDwgMTApIHwgXAorCQkJCQkgICBfUEFHRV9GSUxFIH0pCiAKICNlbHNlCiAKIC8qIFN3YXAgZW50cmllcyBtdXN0IGhhdmUgVkFMSUQgYW5kIEdMT0JBTCBiaXRzIGNsZWFyZWQuICovCi0jZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoKHgpLnZhbCA+PiA4KSAmIDB4MWYpCi0jZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKCh4KS52YWwgPj4gMTMpCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKQorI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoKCh4KS52YWwgPj4gMikgJiAweDFmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkgCSAoKHgpLnZhbCA+PiA3KQogI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLG9mZnNldCkJXAotCQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgOCkgfCAoKG9mZnNldCkgPDwgMTMpIH0pCisJCSgoc3dwX2VudHJ5X3QpICB7ICgodHlwZSkgPDwgMikgfCAoKG9mZnNldCkgPDwgNykgfSkKKyNlbHNlCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoKHgpLnZhbCA+PiA4KSAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KSAJICgoeCkudmFsID4+IDEzKQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLG9mZnNldCkJXAorCQkoKHN3cF9lbnRyeV90KSAgeyAoKHR5cGUpIDw8IDgpIHwgKChvZmZzZXQpIDw8IDEzKSB9KQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikKIC8qCi0gKiBCaXRzIDAsIDEsIDIsIDcgYW5kIDggYXJlIHRha2VuLCBzcGxpdCB1cCB0aGUgMjcgYml0cyBvZiBvZmZzZXQKLSAqIGludG8gdGhpcyByYW5nZToKKyAqIEJpdHMgMCBhbmQgMSBvZiBwdGVfaGlnaCBhcmUgdGFrZW4sIHVzZSB0aGUgcmVzdCBmb3IgdGhlIHBhZ2Ugb2Zmc2V0Li4uCiAgKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjcKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMzAKIAotI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMl9SMSkKLQkvKiBmaXhtZSAqLwotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgKCgoX3B0ZSkucHRlX2hpZ2ggPj4gNikgKyAoKF9wdGUpLnB0ZV9oaWdoICYgMHgzZikpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIFwKLQkoKHB0ZV90KXsoKChvZmYpICYgMHgzZikgKyAoKG9mZikgPDwgNikgKyBfUEFHRV9GSUxFKX0pCisjZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKQkoKF9wdGUpLnB0ZV9oaWdoID4+IDIpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIAkoKHB0ZV90KSB7IF9QQUdFX0ZJTEUsIChvZmYpIDw8IDIgfSkKIAogI2Vsc2UKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpIFwKLQkoKCgoX3B0ZSkucHRlID4+IDMpICYgMHgxZiApICsgKCgoX3B0ZSkucHRlID4+IDkpIDw8IDYgKSkKKy8qCisgKiBCaXRzIDAsIDQsIDYsIGFuZCA3IGFyZSB0YWtlbiwgc3BsaXQgdXAgMjggYml0cyBvZiBvZmZzZXQgaW50byB0aGlzIHJhbmdlOgorICovCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI4CiAKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgXAotCSgocHRlX3QpIHsgKCgob2ZmKSAmIDB4MWYpIDw8IDMpICsgKCgob2ZmKSA+PiA2KSA8PCA5KSArIF9QQUdFX0ZJTEUgfSkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpCSgoKChfcHRlKS5wdGUgPj4gMSkgJiAweDcpIHwgXAorCQkJCSAoKChfcHRlKS5wdGUgPj4gMikgJiAweDgpIHwgXAorCQkJCSAoKChfcHRlKS5wdGUgPj4gOCkgPDwgIDQpKQorCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKCgob2ZmKSAmIDB4NykgPDwgMSkgfCBcCisJCQkJCSAgICgoKG9mZikgJiAweDgpIDw8IDIpIHwgXAorCQkJCQkgICAoKChvZmYpID4+ICA0KSA8PCA4KSB8IFwKKwkJCQkJICAgX1BBR0VfRklMRSB9KQogI2VuZGlmCiAKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKSAoKHN3cF9lbnRyeV90KSB7IChwdGUpLnB0ZV9oaWdoIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7IDAsICh4KS52YWwgfSkKKyNlbHNlCiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKKyNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9QR1RBQkxFXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS02NC5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmgKaW5kZXggODIxNjZiMi4uZTNkYjkzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUEdUQUJMRV82NF9ICiAjZGVmaW5lIF9BU01fUEdUQUJMRV82NF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CkBAIC0yMjQsMTUgKzIyMywxMiBAQAogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIH0pCiAKIC8qCi0gKiBCaXRzIDAsIDEsIDIsIDcgYW5kIDggYXJlIHRha2VuLCBzcGxpdCB1cCB0aGUgMzIgYml0cyBvZiBvZmZzZXQKLSAqIGludG8gdGhpcyByYW5nZToKKyAqIEJpdHMgMCwgNCwgNiwgYW5kIDcgYXJlIHRha2VuLiBMZXQncyBsZWF2ZSBiaXRzIDEsIDIsIDMsIGFuZCA1IGFsb25lIHRvCisgKiBtYWtlIHRoaW5ncyBlYXNpZXIsIGFuZCBvbmx5IHVzZSB0aGUgdXBwZXIgNTYgYml0cyBmb3IgdGhlIHBhZ2Ugb2Zmc2V0Li4uCiAgKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMzIKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJNTYKIAotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgXAotCSgoKChfcHRlKS5wdGUgPj4gMykgJiAweDFmICkgKyAoKChfcHRlKS5wdGUgPj4gOSkgPDwgNiApKQotCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIFwKLQkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDFmKSA8PCAzKSArICgoKG9mZikgPj4gNikgPDwgOSkgKyBfUEFHRV9GSUxFIH0pCisjZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKQkoKF9wdGUpLnB0ZSA+PiA4KQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgob2ZmKSA8PCA4KSB8IF9QQUdFX0ZJTEUgfSkKIAogI2VuZGlmIC8qIF9BU01fUEdUQUJMRV82NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtYml0cy5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLWJpdHMuaAppbmRleCAwMWU3NmU5Li43NDk0YmE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS1iaXRzLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9QR1RBQkxFX0JJVFNfSAogI2RlZmluZSBfQVNNX1BHVEFCTEVfQklUU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIE5vdGUgdGhhdCB3ZSBzaGlmdCB0aGUgbG93ZXIgMzJiaXRzIG9mIGVhY2ggRW50cnlMb1swMV0gZW50cnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKaW5kZXggNzAyYTI4Zi4uYTM2Y2ExYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fUEdUQUJMRV9ICiAjZGVmaW5lIF9BU01fUEdUQUJMRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZmRlZiBDT05GSUdfMzJCSVQKICNpbmNsdWRlIDxhc20vcGd0YWJsZS0zMi5oPgogI2VuZGlmCkBAIC03MCw3ICs2OSwxNSBAQAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpIFwKIAkodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSArICgoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSkgJiB6ZXJvX3BhZ2VfbWFzaykpKQogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX01VTFRJUExFX1pFUk9fUEFHRQorI2RlZmluZSBfX0hBVkVfQVJDSF9NT1ZFX1BURQorI2RlZmluZSBtb3ZlX3B0ZShwdGUsIHByb3QsIG9sZF9hZGRyLCBuZXdfYWRkcikJCQkJXAorKHsJCQkJCQkJCQlcCisgCXB0ZV90IG5ld3B0ZSA9IChwdGUpOwkJCQkJCVwKKwlpZiAocHRlX3ByZXNlbnQocHRlKSAmJiBwZm5fdmFsaWQocHRlX3BmbihwdGUpKSAmJgkJXAorCQkJcHRlX3BhZ2UocHRlKSA9PSBaRVJPX1BBR0Uob2xkX2FkZHIpKQkJXAorCQluZXdwdGUgPSBta19wdGUoWkVST19QQUdFKG5ld19hZGRyKSwgKHByb3QpKTsJCVwKKwluZXdwdGU7CQkJCQkJCQlcCit9KQogCiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIApAQCAtODIsMTAgKzg5LDExIEBACiAjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCShwZm5fdG9fcGFnZShwbWRfcGh5cyhwbWQpID4+IFBBR0VfU0hJRlQpKQogI2RlZmluZSBwbWRfcGFnZV9rZXJuZWwocG1kKQlwbWRfdmFsKHBtZCkKIAotI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoIShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfR0xPQkFMKSkKLSNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCkKLQogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMl9SMSkKKworI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoISgoKHB0ZSkucHRlX2xvdyB8IChwdGUpLnB0ZV9oaWdoKSAmIH5fUEFHRV9HTE9CQUwpKQorI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCSgocHRlKS5wdGVfbG93ICYgX1BBR0VfUFJFU0VOVCkKKwogc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlwdGVwLT5wdGVfaGlnaCA9IHB0ZS5wdGVfaGlnaDsKQEAgLTkzLDI3ICsxMDEsMzUgQEAKIAlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7CiAJLy9wcmludGsoInB0ZV9oaWdoICV4IHB0ZV9sb3cgJXhcbiIsIHB0ZXAtPnB0ZV9oaWdoLCBwdGVwLT5wdGVfbG93KTsKIAotCWlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9HTE9CQUwpIHsKKwlpZiAocHRlLnB0ZV9sb3cgJiBfUEFHRV9HTE9CQUwpIHsKIAkJcHRlX3QgKmJ1ZGR5ID0gcHRlcF9idWRkeShwdGVwKTsKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoZSBidWRkeSBpcyBnbG9iYWwgdG9vIChpZiBpdCdzICFub25lLAogCQkgKiBpdCBiZXR0ZXIgYWxyZWFkeSBiZSBnbG9iYWwpCiAJCSAqLwotCQlpZiAocHRlX25vbmUoKmJ1ZGR5KSkKLQkJCWJ1ZGR5LT5wdGVfbG93IHw9IF9QQUdFX0dMT0JBTDsKKwkJaWYgKHB0ZV9ub25lKCpidWRkeSkpIHsKKwkJCWJ1ZGR5LT5wdGVfbG93ICB8PSBfUEFHRV9HTE9CQUw7CisJCQlidWRkeS0+cHRlX2hpZ2ggfD0gX1BBR0VfR0xPQkFMOworCQl9CiAJfQogfQogI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CisJcHRlX3QgbnVsbCA9IF9fcHRlKDApOworCiAJLyogUHJlc2VydmUgZ2xvYmFsIHN0YXR1cyBmb3IgdGhlIHBhaXIgKi8KLQlpZiAocHRlX3ZhbCgqcHRlcF9idWRkeShwdGVwKSkgJiBfUEFHRV9HTE9CQUwpCi0JCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKF9QQUdFX0dMT0JBTCkpOwotCWVsc2UKLQkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgX19wdGUoMCkpOworCWlmIChwdGVwX2J1ZGR5KHB0ZXApLT5wdGVfbG93ICYgX1BBR0VfR0xPQkFMKQorCQludWxsLnB0ZV9sb3cgPSBudWxsLnB0ZV9oaWdoID0gX1BBR0VfR0xPQkFMOworCisJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgbnVsbCk7CiB9CiAjZWxzZQorCisjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSghKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9HTE9CQUwpKQorI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorCiAvKgogICogQ2VydGFpbiBhcmNoaXRlY3R1cmVzIG5lZWQgdG8gZG8gc3BlY2lhbCB0aGluZ3Mgd2hlbiBwdGUncwogICogd2l0aGluIGEgcGFnZSB0YWJsZSBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuICBUaHVzLCB0aGUgZm9sbG93aW5nCkBAIC0xNzQsNzUgKzE5MCw3NiBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBwdGVfdXNlcihwdGVfdCBwdGUpCXsgQlVHKCk7IHJldHVybiAwOyB9CiAjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IxKQotc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfUkVBRDsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1dSSVRFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfTU9ESUZJRUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCXsgcmV0dXJuIChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9BQ0NFU1NFRDsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfRklMRTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX1JFQUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZS5wdGVfbG93ICYgX1BBR0VfV1JJVEU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZS5wdGVfbG93ICYgX1BBR0VfTU9ESUZJRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlLnB0ZV9sb3cgJiBfUEFHRV9GSUxFOyB9CisKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyAmPSB+KF9QQUdFX1dSSVRFIHwgX1BBR0VfU0lMRU5UX1dSSVRFKTsKLQkocHRlKS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1dSSVRFOworCXB0ZS5wdGVfbG93ICAmPSB+KF9QQUdFX1dSSVRFIHwgX1BBR0VfU0lMRU5UX1dSSVRFKTsKKwlwdGUucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9XUklURTsKIAlyZXR1cm4gcHRlOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9SRUFEIHwgX1BBR0VfU0lMRU5UX1JFQUQpOwotCShwdGUpLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfUkVBRDsKKwlwdGUucHRlX2xvdyAgJj0gfihfUEFHRV9SRUFEIHwgX1BBR0VfU0lMRU5UX1JFQUQpOworCXB0ZS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1JFQUQ7CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyAmPSB+KF9QQUdFX01PRElGSUVEfF9QQUdFX1NJTEVOVF9XUklURSk7Ci0JKHB0ZSkucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9XUklURTsKKwlwdGUucHRlX2xvdyAgJj0gfihfUEFHRV9NT0RJRklFRCB8IF9QQUdFX1NJTEVOVF9XUklURSk7CisJcHRlLnB0ZV9oaWdoICY9IH5fUEFHRV9TSUxFTlRfV1JJVEU7CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKQogewotCShwdGUpLnB0ZV9sb3cgJj0gfihfUEFHRV9BQ0NFU1NFRHxfUEFHRV9TSUxFTlRfUkVBRCk7Ci0JKHB0ZSkucHRlX2hpZ2ggJj0gfl9QQUdFX1NJTEVOVF9SRUFEOworCXB0ZS5wdGVfbG93ICAmPSB+KF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfU0lMRU5UX1JFQUQpOworCXB0ZS5wdGVfaGlnaCAmPSB+X1BBR0VfU0lMRU5UX1JFQUQ7CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCiB7Ci0JKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9XUklURTsKLQlpZiAoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEKSB7Ci0JCShwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfU0lMRU5UX1dSSVRFOwotCQkocHRlKS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7CisJcHRlLnB0ZV9sb3cgfD0gX1BBR0VfV1JJVEU7CisJaWYgKHB0ZS5wdGVfbG93ICYgX1BBR0VfTU9ESUZJRUQpIHsKKwkJcHRlLnB0ZV9sb3cgIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKKwkJcHRlLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKIAl9CiAJcmV0dXJuIHB0ZTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkKIHsKLQkocHRlKS5wdGVfbG93IHw9IF9QQUdFX1JFQUQ7Ci0JaWYgKChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9BQ0NFU1NFRCkgewotCQkocHRlKS5wdGVfbG93IHw9IF9QQUdFX1NJTEVOVF9SRUFEOwotCQkocHRlKS5wdGVfaGlnaCB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwlwdGUucHRlX2xvdyB8PSBfUEFHRV9SRUFEOworCWlmIChwdGUucHRlX2xvdyAmIF9QQUdFX0FDQ0VTU0VEKSB7CisJCXB0ZS5wdGVfbG93ICB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwkJcHRlLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9SRUFEOwogCX0KIAlyZXR1cm4gcHRlOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIHsKLQkocHRlKS5wdGVfbG93IHw9IF9QQUdFX01PRElGSUVEOwotCWlmICgocHRlKS5wdGVfbG93ICYgX1BBR0VfV1JJVEUpIHsKLQkJKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9TSUxFTlRfV1JJVEU7Ci0JCShwdGUpLnB0ZV9oaWdoIHw9IF9QQUdFX1NJTEVOVF9XUklURTsKKwlwdGUucHRlX2xvdyB8PSBfUEFHRV9NT0RJRklFRDsKKwlpZiAocHRlLnB0ZV9sb3cgJiBfUEFHRV9XUklURSkgeworCQlwdGUucHRlX2xvdyAgfD0gX1BBR0VfU0lMRU5UX1dSSVRFOworCQlwdGUucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1dSSVRFOwogCX0KIAlyZXR1cm4gcHRlOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKIHsKLQkocHRlKS5wdGVfbG93IHw9IF9QQUdFX0FDQ0VTU0VEOwotCWlmICgocHRlKS5wdGVfbG93ICYgX1BBR0VfUkVBRCkKLQkJKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKLQkJKHB0ZSkucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJcHRlLnB0ZV9sb3cgfD0gX1BBR0VfQUNDRVNTRUQ7CisJaWYgKHB0ZS5wdGVfbG93ICYgX1BBR0VfUkVBRCkKKwkJcHRlLnB0ZV9sb3cgIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCQlwdGUucHRlX2hpZ2ggfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CiAJcmV0dXJuIHB0ZTsKIH0KICNlbHNlCkBAIC0zMzUsOCArMzUyLDkgQEAKICNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQogewotCXB0ZS5wdGVfbG93ICY9IF9QQUdFX0NIR19NQVNLOwotCXB0ZS5wdGVfbG93IHw9IHBncHJvdF92YWwobmV3cHJvdCk7CisJcHRlLnB0ZV9sb3cgICY9IF9QQUdFX0NIR19NQVNLOworCXB0ZS5wdGVfaGlnaCAmPSB+MHgzZjsKKwlwdGUucHRlX2xvdyAgfD0gcGdwcm90X3ZhbChuZXdwcm90KTsKIAlwdGUucHRlX2hpZ2ggfD0gcGdwcm90X3ZhbChuZXdwcm90KSAmIDB4M2Y7CiAJcmV0dXJuIHB0ZTsKIH0KQEAgLTM2MCw5ICszNzgsNyBAQAogCV9fdXBkYXRlX2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKIH0KIAotI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCi0jZW5kaWYKIAogI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKIGV4dGVybiBpbnQgcmVtYXBfcGZuX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wcmVmZXRjaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9wcmVmZXRjaC5oCmluZGV4IDcxMjkzZWMuLjE3ODUwODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcHJlZmV0Y2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3ByZWZldGNoLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fQVNNX1BSRUZFVENIX0gKICNkZWZpbmUgX19BU01fUFJFRkVUQ0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBSNTAwMCBhbmQgUk01MjAwIGltcGxlbWVudHMgcHJlZiBhbmQgcHJlZnggaW5zdHJ1Y3Rpb25zIGJ1dCB0aGV5J3JlIG5vcHMsIHNvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaAppbmRleCAwZmI3NWYwLi41ZjgwYmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9QUk9DRVNTT1JfSAogI2RlZmluZSBfQVNNX1BST0NFU1NPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCkBAIC03MSwxMSArNzAsNiBAQAogCiB0eXBlZGVmIF9fdTY0IGZwdXJlZ190OwogCi1zdHJ1Y3QgbWlwc19mcHVfaGFyZF9zdHJ1Y3QgewotCWZwdXJlZ190CWZwcltOVU1fRlBVX1JFR1NdOwotCXVuc2lnbmVkIGludAlmY3IzMTsKLX07Ci0KIC8qCiAgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGFkZCBzb21lIG1vcmUgZmllbGRzIGZvciBlbXVsYXRvciBzdGF0aXN0aWNzLCBidXQgdGhlcmUKICAqIGFyZSBhIG51bWJlciBvZiBmaXhlZCBvZmZzZXRzIGluIG9mZnNldC5oIGFuZCBlbHNld2hlcmUgdGhhdCB3b3VsZCBoYXZlIHRvCkBAIC04MywxOCArNzcsMTMgQEAKICAqIHRoZSBGUFUgZW11bGF0b3IgZm9yIG5vdy4gIFNlZSBhc20tbWlwcy9mcHVfZW11bGF0b3IuaC4KICAqLwogCi1zdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3Qgeworc3RydWN0IG1pcHNfZnB1X3N0cnVjdCB7CiAJZnB1cmVnX3QJZnByW05VTV9GUFVfUkVHU107CiAJdW5zaWduZWQgaW50CWZjcjMxOwogfTsKIAotdW5pb24gbWlwc19mcHVfdW5pb24gewotICAgICAgICBzdHJ1Y3QgbWlwc19mcHVfaGFyZF9zdHJ1Y3QgaGFyZDsKLSAgICAgICAgc3RydWN0IG1pcHNfZnB1X3NvZnRfc3RydWN0IHNvZnQ7Ci19OwotCiAjZGVmaW5lIElOSVRfRlBVIHsgXAotCXt7MCx9LH0gXAorCXswLH0gXAogfQogCiAjZGVmaW5lIE5VTV9EU1BfUkVHUyAgIDYKQEAgLTEzMyw3ICsxMjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3AwX3N0YXR1czsKIAogCS8qIFNhdmVkIGZwdS9mcHUgZW11bGF0b3Igc3R1ZmYuICovCi0JdW5pb24gbWlwc19mcHVfdW5pb24gZnB1OworCXN0cnVjdCBtaXBzX2ZwdV9zdHJ1Y3QgZnB1OwogI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCiAJLyogRW11bGF0ZWQgaW5zdHJ1Y3Rpb24gY291bnQgKi8KIAl1bnNpZ25lZCBsb25nIGVtdWxhdGVkX2ZwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKaW5kZXggZmE5ZDg3MS4uNDExMzMxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1BUUkFDRV9ICiAjZGVmaW5lIF9BU01fUFRSQUNFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2lzYWRlcC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3FlbXUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcWVtdS5oCmluZGV4IDkwNWMzOTUuLjUzMWNhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcWVtdS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcWVtdS5oCkBAIC0yMSw0ICsyMSwxMCBAQAogICovCiAjZGVmaW5lIFFFTVVfQzBfQ09VTlRFUl9DTE9DSwkxMDAwMDAwMDAKIAorLyoKKyAqIE1hZ2ljIHFlbXUgc3lzdGVtIGNvbnRyb2wgbG9jYXRpb24uCisgKi8KKyNkZWZpbmUgUUVNVV9SRVNUQVJUX1JFRwkweEJGQkYwMDAwCisjZGVmaW5lIFFFTVVfSEFMVF9SRUcJCTB4QkZCRjAwMDQKKwogI2VuZGlmIC8qIF9fQVNNX1FFTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9yZWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcmVnLmgKaW5kZXggNjE3MzAwNC4uNjM0YjU1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9yZWcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3JlZy5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX01JUFNfUkVHX0gKICNkZWZpbmUgX19BU01fTUlQU19SRUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkgfHwgZGVmaW5lZChXQU5UX0NPTVBBVF9SRUdfSCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9yZXNvdXJjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9yZXNvdXJjZS5oCmluZGV4IDFmYmEwMGMuLjg3Y2IzMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcmVzb3VyY2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3Jlc291cmNlLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUkVTT1VSQ0VfSAogI2RlZmluZSBfQVNNX1JFU09VUkNFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhlc2UgZml2ZSByZXNvdXJjZSBsaW1pdCBJRHMgaGF2ZSBhIE1JUFMvTGludXgtc3BlY2lmaWMgb3JkZXJpbmcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3JtOWstb2NkLmggYi9pbmNsdWRlL2FzbS1taXBzL3JtOWstb2NkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBiODBkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcm05ay1vY2QuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNCBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRworICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmICFkZWZpbmVkKF9BU01fUk05S19PQ0RfSCkKKyNkZWZpbmUgX0FTTV9STTlLX09DRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK2V4dGVybiB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBjb25zdCBvY2RfYmFzZTsKK2V4dGVybiB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBjb25zdCB0aXRhbl9iYXNlOworCisjZGVmaW5lIG9jZF9hZGRyKF9feF9fKQkJKG9jZF9iYXNlICsgKF9feF9fKSkKKyNkZWZpbmUgdGl0YW5fYWRkcihfX3hfXykJKHRpdGFuX2Jhc2UgKyAoX194X18pKQorI2RlZmluZSBzY3JhbV9hZGRyKF9feF9fKQkoc2NyYW1fYmFzZSArIChfX3hfXykpCisKKy8qIE9DRCByZWdpc3RlciBhY2Nlc3MgKi8KKyNkZWZpbmUgb2NkX3JlYWRsKF9fb2Zmc19fKSBfX3Jhd19yZWFkbChvY2RfYWRkcihfX29mZnNfXykpCisjZGVmaW5lIG9jZF9yZWFkdyhfX29mZnNfXykgX19yYXdfcmVhZHcob2NkX2FkZHIoX19vZmZzX18pKQorI2RlZmluZSBvY2RfcmVhZGIoX19vZmZzX18pIF9fcmF3X3JlYWRiKG9jZF9hZGRyKF9fb2Zmc19fKSkKKyNkZWZpbmUgb2NkX3dyaXRlbChfX3ZhbF9fLCBfX29mZnNfXykgXAorCV9fcmF3X3dyaXRlbCgoX192YWxfXyksIG9jZF9hZGRyKF9fb2Zmc19fKSkKKyNkZWZpbmUgb2NkX3dyaXRldyhfX3ZhbF9fLCBfX29mZnNfXykgXAorCV9fcmF3X3dyaXRldygoX192YWxfXyksIG9jZF9hZGRyKF9fb2Zmc19fKSkKKyNkZWZpbmUgb2NkX3dyaXRlYihfX3ZhbF9fLCBfX29mZnNfXykgXAorCV9fcmF3X3dyaXRlYigoX192YWxfXyksIG9jZF9hZGRyKF9fb2Zmc19fKSkKKworLyogVElUQU4gcmVnaXN0ZXIgYWNjZXNzIC0gMzIgYml0LXdpZGUgb25seSAqLworI2RlZmluZSB0aXRhbl9yZWFkbChfX29mZnNfXykgX19yYXdfcmVhZGwodGl0YW5fYWRkcihfX29mZnNfXykpCisjZGVmaW5lIHRpdGFuX3dyaXRlbChfX3ZhbF9fLCBfX29mZnNfXykgXAorCV9fcmF3X3dyaXRlbCgoX192YWxfXyksIHRpdGFuX2FkZHIoX19vZmZzX18pKQorCisvKiBQcm90ZWN0IGFjY2VzcyB0byBzaGFyZWQgVElUQU4gcmVnaXN0ZXJzICovCitleHRlcm4gc3BpbmxvY2tfdCB0aXRhbl9sb2NrOworZXh0ZXJuIGludCB0aXRhbl9pcnFmbGFnczsKKyNkZWZpbmUgbG9ja190aXRhbl9yZWdzKCkgc3Bpbl9sb2NrX2lycXNhdmUoJnRpdGFuX2xvY2ssIHRpdGFuX2lycWZsYWdzKQorI2RlZmluZSB1bmxvY2tfdGl0YW5fcmVncygpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpdGFuX2xvY2ssIHRpdGFuX2lycWZsYWdzKQorCisjZW5kaWYJLyogIWRlZmluZWQoX0FTTV9STTlLX09DRF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKaW5kZXggNzE5NmNlYi4uNTg0YmQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NFUklBTF9ICiAjZGVmaW5lIF9BU01fU0VSSUFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zZ2lhcmNzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaAppbmRleCA3MjJiNzdhLi5kZGI4NTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1NHSUFSQ1NfSAogI2RlZmluZSBfQVNNX1NHSUFSQ1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyYy90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9ib2FyZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvYm9hcmQuaAppbmRleCA5MDBlZGNiLi4zZGZlMjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9ib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2JvYXJkLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpZm5kZWYgX1NJQllURV9CT0FSRF9ICiAjZGVmaW5lIF9TSUJZVEVfQk9BUkRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TSUJZVEVfU1dBUk0pIHx8IGRlZmluZWQoQ09ORklHX1NJQllURV9QVFNXQVJNKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfU0lCWVRFX0NSSE9ORSkgfHwgZGVmaW5lZChDT05GSUdfU0lCWVRFX0NSSElORSkgfHwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvY2FybWVsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaAppbmRleCBiNWU3ZGFlLi41N2M1M2U2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9TSUJZVEVfQ0FSTUVMX0gKICNkZWZpbmUgX19BU01fU0lCWVRFX0NBUk1FTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zZW50b3NhLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zZW50b3NhLmgKaW5kZXggODI0NjA1OC4uNjRjNDc4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2VudG9zYS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NlbnRvc2EuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9TSUJZVEVfU0VOVE9TQV9ICiAjZGVmaW5lIF9fQVNNX1NJQllURV9TRU5UT1NBX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3N3YXJtLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zd2FybS5oCmluZGV4IDA2ZTFkNTIuLjg2ZGIzN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3N3YXJtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc3dhcm0uaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0FTTV9TSUJZVEVfU1dBUk1fSAogI2RlZmluZSBfX0FTTV9TSUJZVEVfU1dBUk1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTAuaD4KICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9pbnQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1taXBzL3NpZ2NvbnRleHQuaAppbmRleCA4ZWRhYmIwLi5jZWZhNjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpZ2NvbnRleHQuaApAQCAtNTUsOCArNTUsMTQgQEAKIHN0cnVjdCBzaWdjb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nCXNjX3JlZ3NbMzJdOwogCXVuc2lnbmVkIGxvbmcJc2NfZnByZWdzWzMyXTsKLQl1bnNpZ25lZCBsb25nCXNjX2hpWzRdOwotCXVuc2lnbmVkIGxvbmcJc2NfbG9bNF07CisJdW5zaWduZWQgbG9uZwlzY19tZGhpOworCXVuc2lnbmVkIGxvbmcJc2NfaGkxOworCXVuc2lnbmVkIGxvbmcJc2NfaGkyOworCXVuc2lnbmVkIGxvbmcJc2NfaGkzOworCXVuc2lnbmVkIGxvbmcJc2NfbWRsbzsKKwl1bnNpZ25lZCBsb25nCXNjX2xvMTsKKwl1bnNpZ25lZCBsb25nCXNjX2xvMjsKKwl1bnNpZ25lZCBsb25nCXNjX2xvMzsKIAl1bnNpZ25lZCBsb25nCXNjX3BjOwogCXVuc2lnbmVkIGludAlzY19mcGNfY3NyOwogCXVuc2lnbmVkIGludAlzY191c2VkX21hdGg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCmluZGV4IDJiYTMxM2QuLjJlMzI5NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NJR0lORk9fSAogI2RlZmluZSBfQVNNX1NJR0lORk9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUgKHNpemVvZihsb25nKSArIDIqc2l6ZW9mKGludCkpCiAjdW5kZWYgX19BUkNIX1NJX1RSQVBOTwkvKiBleGNlcHRpb24gY29kZSBuZWVkcyB0byBmaWxsIHRoaXMgLi4uICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKaW5kZXggZDgzNDllNC4uYTFmM2EzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NJR05BTF9ICiAjZGVmaW5lIF9BU01fU0lHTkFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgX05TSUcJCTEyOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2ltLmgKaW5kZXggOWMyYWYxYi4uNjdjNGZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpbS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NJTV9ICiAjZGVmaW5lIF9BU01fU0lNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCmluZGV4IDc1YzZmZTcuLjE2MDhmZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbXAuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAKQEAgLTQ4LDcgKzQ3LDYgQEAKICNkZWZpbmUgU01QX0NBTExfRlVOQ1RJT04JMHgyCiAKIGV4dGVybiBjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9vbmxpbmVfbWFwOwogI2RlZmluZSBjcHVfcG9zc2libGVfbWFwCXBoeXNfY3B1X3ByZXNlbnRfbWFwCiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwpAQCAtODYsOSArODQsOSBAQAogZXh0ZXJuIHZvaWQgcGxhdF9zbXBfc2V0dXAodm9pZCk7CiAKIC8qCi0gKiBDYWxsZWQgYWZ0ZXIgaW5pdF9JUlEgYnV0IGJlZm9yZSBfX2NwdV91cC4KKyAqIENhbGxlZCBpbiBzbXBfcHJlcGFyZV9jcHVzLgogICovCi1leHRlcm4gdm9pZCBwcm9tX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpOworZXh0ZXJuIHZvaWQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIAogLyoKICAqIExhc3QgY2hhbmNlIGZvciB0aGUgYm9hcmQgY29kZSB0byBmaW5pc2ggU01QIGluaXRpYWxpemF0aW9uIGJlZm9yZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hZGRycy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hZGRycy5oCmluZGV4IDJiNWNlZjEuLjhmYTBhZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYWRkcnMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FkZHJzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fU05fQUREUlNfSAogI2RlZmluZSBfQVNNX1NOX0FERFJTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0yNywxMyArMjYsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQkvKiBGSVhNRSAqLwotI2RlZmluZSBQU19VSU5UX0NBU1QJCShfX3BzdW5zaWduZWRfdCkKLSNkZWZpbmUgVUlOVDY0X0NBU1QJCShfX3VpbnQ2NF90KQotI2Vsc2UJLyogQ09ORklHX1NHSV9JTyAqLwogI2RlZmluZSBQU19VSU5UX0NBU1QJCSh1bnNpZ25lZCBsb25nKQogI2RlZmluZSBVSU5UNjRfQ0FTVAkJKHVuc2lnbmVkIGxvbmcpCi0jZW5kaWYJLyogQ09ORklHX1NHSV9JTyAqLwogCiAjZGVmaW5lIEhVQlJFR19DQVNUCQkodm9sYXRpbGUgaHVicmVnX3QgKikKIApAQCAtMjUzLDE0ICsyNDcsNiBAQAogICogZm9yIF94LgogICovCiAKLSNpZmRlZiBfU1RBTkRBTE9ORQotCi0vKiBETyBOT1QgVVNFIFRIRVNFIERJUkVDVExZIElOIFRIRSBLRVJORUwuIFNFRSBCRUxPVy4gKi8KLSNkZWZpbmUgTE9DQUxfSFVCKF94KQkJKEhVQlJFR19DQVNUIChJQUxJQVNfQkFTRSArIChfeCkpKQotI2RlZmluZSBSRU1PVEVfSFVCKF9uLCBfeCkJKEhVQlJFR19DQVNUIChOT0RFX1NXSU5fQkFTRShfbiwgMSkgKwlcCi0JCQkJCSAgICAgIDB4ODAwMDAwICsgKF94KSkpCi0jZW5kaWYgLyogX1NUQU5EQUxPTkUgKi8KLQogLyoKICAqIFdBUk5JTkc6CiAgKglXaGVuIGNlcnRhaW4gSHViIGNoaXAgd29ya2Fyb3VuZCBhcmUgZGVmaW5lZCwgaXQncyBub3Qgc3VmZmljaWVudApAQCAtMzI3LDIwICszMTMsNiBAQAogCVBIWVNfVE9fSzAoTk9ERV9PRkZTRVQobmFzaWQpIHwgQVJDU19TUEJfT0ZGU0VUKQogI2RlZmluZSBBUkNTX1NQQl9TSVpFCQkweDA0MDAKIAotI2lmZGVmIF9TVEFOREFMT05FCi0KLSNkZWZpbmUgQVJDU19UVkVDVE9SX09GRlNFVAkweDI4MDAKLSNkZWZpbmUgQVJDU19QVkVDVE9SX09GRlNFVAkweDJjMDAKLQotLyoKLSAqIFRoZXNlIGFkZHJlc3NlcyBhcmUgdXNlZCBieSB0aGUgbWFzdGVyIENQVSB0byBpbnN0YWxsIHRoZSB0cmFuc2ZlcgotICogYW5kIHByaXZhdGUgdmVjdG9ycy4gIEFsbCBvdGhlcnMgdXNlIHRoZSBTUEIgdG8gZmluZCB0aGVtLgotICovCi0jZGVmaW5lIFRWQUREUgkoTk9ERV9DQUNfQkFTRShnZXRfbmFzaWQoKSkgKyBBUkNTX1RWRUNUT1JfT0ZGU0VUKQotI2RlZmluZSBQVkFERFIJKE5PREVfQ0FDX0JBU0UoZ2V0X25hc2lkKCkpICsgQVJDU19QVkVDVE9SX09GRlNFVCkKLQotI2VuZGlmIC8qIF9TVEFOREFMT05FICovCi0KICNkZWZpbmUgS0xESVJfT0ZGU0VUCQkweDIwMDAKICNkZWZpbmUgS0xESVJfQUREUihuYXNpZCkJCQkJCQlcCiAJVE9fTk9ERV9VTkNBQygobmFzaWQpLCBLTERJUl9PRkZTRVQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FnZW50LmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FnZW50LmgKaW5kZXggZDZkZjEzYS4uYWM0ZWE4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hZ2VudC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYWdlbnQuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX1NHSV9TTl9BR0VOVF9ICiAjZGVmaW5lIF9BU01fU0dJX1NOX0FHRU5UX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYXJjaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmgKaW5kZXggZDI0N2E4MS4uNTExNzRhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9TTl9BUkNIX0gKICNkZWZpbmUgX0FTTV9TTl9BUkNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CiAjaWZkZWYgQ09ORklHX1NHSV9JUDI3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9zbjBfZnJ1LmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL2ZydS5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLW1pcHMvc24vc24wL3NuMF9mcnUuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tbWlwcy9zbi9mcnUuaAppbmRleCA4MmM2Mzc3Li5iM2UzNjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9zbjBfZnJ1LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9mcnUuaApAQCAtNiwxMCArNiwxMCBAQAogICogRGVyaXZlZCBmcm9tIElSSVggPHN5cy9TTi9TTjAvc24wX2ZydS5oPgogICoKICAqIENvcHlyaWdodCAoQykgMTk5MiAtIDE5OTcsIDE5OTkgU2lsY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDYgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMpCiAgKi8KLSNpZm5kZWYgX0FTTV9TTl9TTjBfU04wX0ZSVV9ICi0jZGVmaW5lIF9BU01fU05fU04wX1NOMF9GUlVfSAorI2lmbmRlZiBfX0FTTV9TTl9GUlVfSAorI2RlZmluZSBfX0FTTV9TTl9GUlVfSAogCiAjZGVmaW5lIE1BWF9ESU1NUwkJCTgJIC8qIG1heCAjIG9mIGRpbW0gYmFua3MgKi8KICNkZWZpbmUgTUFYX1BDSURFVgkJCTgJIC8qIG1heCAjIG9mIHBjaSBkZXZpY2VzIG9uIGEgcGNpIGJ1cyAqLwpAQCAtNDEsNCArNDEsNCBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uZmlkZW5jZSBsZXZlbCB0aGF0IHRoZSBwY2kgZGV2IGlzIGJhZCAqLwogfSBrZl9wY2lfYnVzX3Q7CiAKLSNlbmRpZiAvKiBfQVNNX1NOX1NOMF9TTjBfRlJVX0ggKi8KKyNlbmRpZiAvKiBfX0FTTV9TTl9GUlVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9pby5oCmluZGV4IDEzMzI2NDUuLmFiMmZhOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2lvLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fU05fSU9fSAogI2RlZmluZSBfQVNNX1NOX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmIGRlZmluZWQgKENPTkZJR19TR0lfSVAyNykKICNpbmNsdWRlIDxhc20vc24vc24wL2h1YmlvLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaAppbmRleCA5NzA5ZmY3Li41MjIzOGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCkBAIC0yNyw3ICsyNyw2IEBACiAgKiAgICAgIHRoYXQgb2Zmc2V0cyBvZiBleGlzdGluZyBmaWVsZHMgZG8gbm90IGNoYW5nZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KIApAQCAtMzcsNyArMzYsNyBAQAogLy8jaW5jbHVkZSA8c3lzL1NOL3JvdXRlci5oPgogLy8gWFhYIFN0b2xlbiBmcm9tIDxzeXMvU04vcm91dGVyLmg+OgogI2RlZmluZSBNQVhfUk9VVEVSX1BPUlRTICg2KSAgICAvKiBNYXguIG51bWJlciBvZiBwb3J0cyBvbiBhIHJvdXRlciAqLwotI2luY2x1ZGUgPGFzbS9zbi9zbjAvc24wX2ZydS5oPgorI2luY2x1ZGUgPGFzbS9zbi9mcnUuaD4KIC8vI2luY2x1ZGUgPHN5cy9ncmFwaC5oPgogLy8jaW5jbHVkZSA8c3lzL3h0YWxrL3hib3cuaD4KIApAQCAtNTQsMzIgKzUzLDIxIEBACiAjaW5jbHVkZSA8YXNtL3NuL2FnZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2FyYy90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmMvaGludi5oPgotI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JTykgfHwgZGVmaW5lZChDT05GSUdfU0dJX0lQMzUpCisjaWYgZGVmaW5lZChDT05GSUdfU0dJX0lQMzUpCiAvLyBUaGUgaGFjayBmaWxlIGhhcyB0byBiZSBiZWZvcmUgdmVjdG9yIGFuZCBhZnRlciBzbjBfZnJ1Li4uLgogI2luY2x1ZGUgPGFzbS9oYWNrLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3ZlY3Rvci5oPgogI2luY2x1ZGUgPGFzbS94dGFsay94dGFsay5oPgotI2VuZGlmIC8qIENPTkZJR19TR0lfSU8gfHwgQ09ORklHX1NHSV9JUDM1ICovCisjZW5kaWYgLyogQ09ORklHX1NHSV9JUDM1ICovCiAjZW5kaWYgLyogQ09ORklHX1NHSV9JUDI3IHx8IENPTkZJR19TR0lfSVAzNSAqLwogCiAjZGVmaW5lIEtMQ0ZHSU5GT19NQUdJQwkweGJlZWRiYWJlCiAKLSNpZmRlZiBGUlVURVNUCi10eXBlZGVmIHU2NCBrbGNvbmZfb2ZmX3Q7Ci0jZWxzZQogdHlwZWRlZiBzMzIga2xjb25mX29mZl90OwotI2VuZGlmCiAKIC8qCiAgKiBTb21lIElNUE9SVEFOVCBPRkZTRVRTLiBUaGVzZSBhcmUgdGhlIG9mZnNldHMgb24gYWxsIE5PREVTLgogICovCi0jaWYgMAotI2RlZmluZSBSQU1CQVNFICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEFSQ1NTUEJfT0ZGICAgICAgICAgICAgIDB4MTAwMCAvKiBzaGlmdCBpdCB0byBzeXMvYXJjcy9zcGIuaCAqLwotCi0jZGVmaW5lIE9GRl9IV0dSQVBIIAkJMAotI2VuZGlmCi0KICNkZWZpbmUJTUFYX01PRFVMRV9JRAkJMjU1CiAjZGVmaW5lIFNJWkVfUEFECQk0MDk2IC8qIDRrIHBhZGRpbmcgZm9yIHN0cnVjdHVyZXMgKi8KIC8qCkBAIC0xMzQsMTUgKzEyMiw5IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgY29uc29sZV9zIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pCS8qIEZJWE1FICovCi0JX19wc3Vuc2lnbmVkX3QgCXVhcnRfYmFzZTsKLQlfX3BzdW5zaWduZWRfdCAJY29uZmlnX2Jhc2U7Ci0JX19wc3Vuc2lnbmVkX3QgCW1lbW9yeV9iYXNlOwotI2Vsc2UKIAl1bnNpZ25lZCBsb25nIAl1YXJ0X2Jhc2U7CiAJdW5zaWduZWQgbG9uZyAJY29uZmlnX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyAJbWVtb3J5X2Jhc2U7Ci0jZW5kaWYKIAlzaG9ydAkJYmF1ZDsKIAlzaG9ydAkJZmxhZzsKIAlpbnQJCXR5cGU7CkBAIC0xNzQsMTAgKzE1Niw2IEBACiAKIAogI2RlZmluZSBLTF9DT05GSUdfSERSKF9uYXNpZCkgCSgoa2xfY29uZmlnX2hkcl90ICopKEtMQ09ORklHX0FERFIoX25hc2lkKSkpCi0jaWYgMAotI2RlZmluZSBLTF9DT05GSUdfTUFMTE9DX0hEUihfbmFzaWQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEtMX0NPTkZJR19IRFIoX25hc2lkKS0+Y2hfbWFsbG9jX2hkcikKLSNlbmRpZgogI2RlZmluZSBLTF9DT05GSUdfSU5GT19PRkZTRVQoX25hc2lkKQkJCQkJXAogICAgICAgICAoS0xfQ09ORklHX0hEUihfbmFzaWQpLT5jaF9ib2FyZF9pbmZvKQogI2RlZmluZSBLTF9DT05GSUdfSU5GT19TRVRfT0ZGU0VUKF9uYXNpZCwgX29mZikJCQkJXApAQCAtMTk3LDIzICsxNzUsMTMgQEAKIAogLyogLS0tIE5ldyBNYWNyb3MgZm9yIHRoZSBjaGFuZ2VkIGtsX2NvbmZpZ19oZHJfdCBzdHJ1Y3R1cmUgLS0tICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pCi0jZGVmaW5lIFBUUl9DSF9NQUxMT0NfSERSKF9rKSAgICgoa2xjX21hbGxvY19oZHJfdCAqKVwKLQkJCSgoX19wc3Vuc2lnbmVkX3QpX2sgKyAoX2stPmNoX21hbGxvY19oZHJfb2ZmKSkpCi0jZWxzZQogI2RlZmluZSBQVFJfQ0hfTUFMTE9DX0hEUihfaykgICAoKGtsY19tYWxsb2NfaGRyX3QgKilcCiAJCQkodW5zaWduZWQgbG9uZylfayArIChfay0+Y2hfbWFsbG9jX2hkcl9vZmYpKSkKLSNlbmRpZgogCiAjZGVmaW5lIEtMX0NPTkZJR19DSF9NQUxMT0NfSERSKF9uKSAgIFBUUl9DSF9NQUxMT0NfSERSKEtMX0NPTkZJR19IRFIoX24pKQogCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQotI2RlZmluZSBQVFJfQ0hfQ09OU19JTkZPKF9rKQkoKGNvbnNvbGVfdCAqKVwKLQkJCSgoX19wc3Vuc2lnbmVkX3QpX2sgKyAoX2stPmNoX2NvbnNfb2ZmKSkpCi0jZWxzZQogI2RlZmluZSBQVFJfQ0hfQ09OU19JTkZPKF9rKQkoKGNvbnNvbGVfdCAqKVwKIAkJCSgodW5zaWduZWQgbG9uZylfayArIChfay0+Y2hfY29uc19vZmYpKSkKLSNlbmRpZgogCiAjZGVmaW5lIEtMX0NPTkZJR19DSF9DT05TX0lORk8oX24pICAgUFRSX0NIX0NPTlNfSU5GTyhLTF9DT05GSUdfSERSKF9uKSkKIApAQCAtNDkwLDE0ICs0NTgsNiBAQAogI2RlZmluZSBLTENGX05VTV9DT01QUyhfYnJkKQkoKF9icmQpLT5icmRfbnVtY29tcHRzKQogI2RlZmluZSBLTENGX01PRFVMRV9JRChfYnJkKQkoKF9icmQpLT5icmRfbW9kdWxlKQogCi0jaWZkZWYgRlJVVEVTVAotCi0jZGVmaW5lIEtMQ0ZfTkVYVChfYnJkKSAJCSgoX2JyZCktPmJyZF9uZXh0ID8gKGxib2FyZF90ICopKChfYnJkKS0+YnJkX25leHQpOiAgTlVMTCkKLSNkZWZpbmUgS0xDRl9DT01QKF9icmQsIF9uZHgpICAgCShrbGluZm9fdCAqKSgoX2JyZCktPmJyZF9jb21wdHNbKF9uZHgpXSkKLSNkZWZpbmUgS0xDRl9DT01QX0VSUk9SKF9icmQsIF9jb21wKSAgIAkoX2JyZCA9IF9icmQgLCAoX2NvbXApLT5lcnJpbmZvKQotCi0jZWxzZQotCiAjZGVmaW5lIEtMQ0ZfTkVYVChfYnJkKSAJXAogICAgICAgICAoKF9icmQpLT5icmRfbmV4dCA/IAlcCiAJIChsYm9hcmRfdCAqKShOT0RFX09GRlNFVF9UT19LMShOQVNJRF9HRVQoX2JyZCksIChfYnJkKS0+YnJkX25leHQpKTpcCkBAIC01MDksOCArNDY5LDYgQEAKICNkZWZpbmUgS0xDRl9DT01QX0VSUk9SKF9icmQsIF9jb21wKQlcCiAgICAgICAgICAgICAgICAoTk9ERV9PRkZTRVRfVE9fSzEoTkFTSURfR0VUKF9icmQpLCAoX2NvbXApLT5lcnJpbmZvKSkKIAotI2VuZGlmCi0KICNkZWZpbmUgS0xDRl9DT01QX1RZUEUoX2NvbXApCSgoX2NvbXApLT5zdHJ1Y3RfdHlwZSkKICNkZWZpbmUgS0xDRl9CUklER0VfV19JRChfY29tcCkJKChfY29tcCktPnBoeXNpZCkJLyogV2lkZ2V0IElEICovCiAKQEAgLTYzMSwxOCArNTg5LDYgQEAKIAlrbGNvbmZfb2ZmX3QJcG9ydF9vZmZzZXQ7CiB9IGtscG9ydF90OwogCi0jaWYgMAotLyoKLSAqIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBrbHBvcnRfcyBidXQgaW5zdGVhZCBvZiBoYXZpbmcgYSBjb21wb25hbnQKLSAqIG9mZnNldCBpdCBoYXMgYSBib2FyZCBvZmZzZXQuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGtseGJvd19wb3J0X3MgewotCW5hc2lkX3QJCXBvcnRfbmFzaWQ7Ci0JdW5zaWduZWQgY2hhcglwb3J0X2ZsYWc7Ci0Ja2xjb25mX29mZl90CWJvYXJkX29mZnNldDsKLX0ga2x4Ym93X3BvcnRfdDsKLSNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCBrbGNwdV9zIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENQVSAqLwogCWtsaW5mb190IAljcHVfaW5mbzsKIAl1bnNpZ25lZCBzaG9ydCAJY3B1X3ByaWQ7CS8qIFByb2Nlc3NvciBQUklEIHZhbHVlICovCkBAIC05NDUsMzYgKzg5MSw2IEBACiBleHRlcm4gbGJvYXJkX3QgKmZpbmRfbGJvYXJkX2NsYXNzKGxib2FyZF90ICpzdGFydCwgdW5zaWduZWQgY2hhciBicmRfY2xhc3MpOwogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pCi1leHRlcm4geHdpZGdldG51bV90IG5vZGV2ZXJ0ZXhfd2lkZ2V0bnVtX2dldCh2ZXJ0ZXhfaGRsX3Qgbm9kZV92dHgpOwotZXh0ZXJuIHZlcnRleF9oZGxfdCBub2RldmVydGV4X3hib3dfcGVlcl9nZXQodmVydGV4X2hkbF90IG5vZGVfdnR4KTsKLWV4dGVybiBsYm9hcmRfdCAqZmluZF9nZnhwaXBlKGludCBwaXBlbnVtKTsKLWV4dGVybiB2b2lkIHNldHVwX2dmeHBpcGVfbGluayh2ZXJ0ZXhfaGRsX3QgdmhkbCxpbnQgcGlwZW51bSk7Ci1leHRlcm4gbGJvYXJkX3QgKmZpbmRfbGJvYXJkX21vZHVsZV9jbGFzcyhsYm9hcmRfdCAqc3RhcnQsIG1vZHVsZWlkX3QgbW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJyZF9jbGFzcyk7Ci1leHRlcm4gbGJvYXJkX3QgKmZpbmRfbmljX2xib2FyZChsYm9hcmRfdCAqLCBuaWNfdCk7Ci1leHRlcm4gbGJvYXJkX3QgKmZpbmRfbmljX3R5cGVfbGJvYXJkKG5hc2lkX3QsIHVuc2lnbmVkIGNoYXIsIG5pY190KTsKLWV4dGVybiBsYm9hcmRfdCAqZmluZF9sYm9hcmRfbW9kc2xvdChsYm9hcmRfdCAqc3RhcnQsIG1vZHVsZWlkX3QgbW9kLCBzbG90aWRfdCBzbG90KTsKLWV4dGVybiBsYm9hcmRfdCAqZmluZF9sYm9hcmRfbW9kdWxlKGxib2FyZF90ICpzdGFydCwgbW9kdWxlaWRfdCBtb2QpOwotZXh0ZXJuIGxib2FyZF90ICpnZXRfYm9hcmRfbmFtZShuYXNpZF90IG5hc2lkLCBtb2R1bGVpZF90IG1vZCwgc2xvdGlkX3Qgc2xvdCwgY2hhciAqbmFtZSk7Ci1leHRlcm4gaW50CWNvbmZpZ19maW5kX25pY19yb3V0ZXIobmFzaWRfdCwgbmljX3QsIGxib2FyZF90ICoqLCBrbHJvdV90KiopOwotZXh0ZXJuIGludAljb25maWdfZmluZF9uaWNfaHViKG5hc2lkX3QsIG5pY190LCBsYm9hcmRfdCAqKiwga2xodWJfdCoqKTsKLWV4dGVybiBpbnQJY29uZmlnX2ZpbmRfeGJvdyhuYXNpZF90LCBsYm9hcmRfdCAqKiwga2x4Ym93X3QqKik7Ci1leHRlcm4ga2xjcHVfdCAqZ2V0X2NwdWluZm8oY3B1aWRfdCBjcHUpOwotZXh0ZXJuIGludCAJdXBkYXRlX2tsY2ZnX2NwdWluZm8obmFzaWRfdCwgaW50KTsKLWV4dGVybiB2b2lkIAlib2FyZF90b19wYXRoKGxib2FyZF90ICpicmQsIGNoYXIgKnBhdGgpOwotZXh0ZXJuIG1vZHVsZWlkX3QgZ2V0X21vZHVsZV9pZChuYXNpZF90IG5hc2lkKTsKLWV4dGVybiB2b2lkIAluaWNfbmFtZV9jb252ZXJ0KGNoYXIgKm9sZF9uYW1lLCBjaGFyICpuZXdfbmFtZSk7Ci1leHRlcm4gaW50IAltb2R1bGVfYnJkcyhuYXNpZF90IG5hc2lkLCBsYm9hcmRfdCAqKm1vZHVsZV9icmRzLCBpbnQgbik7Ci1leHRlcm4gbGJvYXJkX3QgKmJyZF9mcm9tX2tleSh1bG9uZ190IGtleSk7Ci1leHRlcm4gdm9pZCAJZGV2aWNlX2NvbXBvbmVudF9jYW5vbmljYWxfbmFtZV9nZXQobGJvYXJkX3QgKixrbGluZm9fdCAqLAotCQkJCQkJICAgIGNoYXIgKik7Ci1leHRlcm4gaW50CWJvYXJkX3NlcmlhbF9udW1iZXJfZ2V0KGxib2FyZF90ICosY2hhciAqKTsKLWV4dGVybiBpbnQJaXNfbWFzdGVyX2Jhc2VpbyhuYXNpZF90LG1vZHVsZWlkX3Qsc2xvdGlkX3QpOwotZXh0ZXJuIG5hc2lkX3QJZ2V0X2FjdHVhbF9uYXNpZChsYm9hcmRfdCAqYnJkKSA7Ci1leHRlcm4gbmV0X3ZlY190IGtsY2ZnX2Rpc2NvdmVyX3JvdXRlKGxib2FyZF90ICosIGxib2FyZF90ICosIGludCk7Ci0jZWxzZQkvKiBDT05GSUdfU0dJX0lPICovCiBleHRlcm4ga2xjcHVfdCAqc25fZ2V0X2NwdWluZm8oY3B1aWRfdCBjcHUpOwotI2VuZGlmCS8qIENPTkZJR19TR0lfSU8gKi8KIAogI2VuZGlmIC8qIF9BU01fU05fS0xDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGRpci5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGRpci5oCmluZGV4IGYwZWZhYjEuLjA1NzNjYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2tsZGlyLmgKQEAgLTExLDExICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU05fS0xESVJfSAogI2RlZmluZSBfQVNNX1NOX0tMRElSX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0dJX0lPKQotI2luY2x1ZGUgPGFzbS9oYWNrLmg+Ci0jZW5kaWYKIAogLyoKICAqIFRoZSBrbGRpciBtZW1vcnkgYXJlYSByZXNpZGVzIGF0IGEgZml4ZWQgcGxhY2UgaW4gZWFjaCBub2RlJ3MgbWVtb3J5IGFuZApAQCAtMTM2LDggKzEzMSw2IEBACiAjZGVmaW5lIEtMRElSX09GRl9TVFJJREUJCTB4MjgKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2lmICFkZWZpbmVkKENPTkZJR19TR0lfSU8pCi0KIC8qCiAgKiBUaGlzIGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIElQMjdfU1lNTU9OX1NUS19TSVpFIG11c3QgYmUgYXQgbGVhc3Qgd2hhdAogICogd2UgZGVmaW5lIGhlcmUuICBTaW5jZSBpdCdzIHNldCB1cCBpbiB0aGUgcHJvbS4gIFdlIGNhbid0IHJlZGVmaW5lIGl0IGxhdGVyCkBAIC0xNDcsNyArMTQwLDcgQEAKICAqLwogI2RlZmluZSBTWU1NT05fU1RBQ0tfU0laRQkJMHg4MDAwCiAKLSNpZiBkZWZpbmVkIChQUk9NKSB8fCBkZWZpbmVkIChTQUJMRSkKKyNpZiBkZWZpbmVkIChQUk9NKQogCiAvKgogICogVGhlc2UgZGVmaW5lcyBhcmUgcHJvbSB2ZXJzaW9uIGRlcGVuZGVudC4gIE5vIGNvZGUgb3RoZXIgdGhhbiB0aGUgSVAyNwpAQCAtMTg0LDcgKzE3Nyw3IEBACiAjZGVmaW5lIElQMjdfRlJFRU1FTV9DT1VOVAkJMQogI2RlZmluZSBJUDI3X0ZSRUVNRU1fU1RSSURFCQkwCiAKLSNlbmRpZiAvKiBQUk9NIHx8IFNBQkxFKi8KKyNlbmRpZiAvKiBQUk9NICovCiAvKgogICogVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBvZiB0aGVzZSBpbiBhIHBhcnRpdGlvbiBzbyB0aGUgSU82IG11c3Qgc2V0IGl0IHVwLgogICovCkBAIC0yMDcsMTcgKzIwMCwxMSBAQAogI2RlZmluZSBLTERJUl9FTlRfU0laRQkJCTB4NDAKICNkZWZpbmUgS0xESVJfTUFYX0VOVFJJRVMJCSgweDQwMCAvIDB4NDApCiAKLSNlbmRpZgkvKiAhQ09ORklHX1NHSV9JTyAqLwotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogdHlwZWRlZiBzdHJ1Y3Qga2xkaXJfZW50X3MgewogCXU2NAkJbWFnaWM7CQkvKiBJbmRpY2F0ZXMgdmFsaWRpdHkgb2YgZW50cnkgICAgICAqLwogCW9mZl90CQlvZmZzZXQ7CQkvKiBPZmZzZXQgZnJvbSBzdGFydCBvZiBub2RlIHNwYWNlICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NHSV9JTykJLyogRklYTUUgKi8KLQlfX3BzdW5zaWduZWRfdAlwb2ludGVyOwkvKiBQb2ludGVyIHRvIGFyZWEgaW4gc29tZSBjYXNlcyAgICAqLwotI2Vsc2UKIAl1bnNpZ25lZCBsb25nCXBvaW50ZXI7CS8qIFBvaW50ZXIgdG8gYXJlYSBpbiBzb21lIGNhc2VzICAgICovCi0jZW5kaWYKIAlzaXplX3QJCXNpemU7CQkvKiBTaXplIGluIGJ5dGVzIAkJICAgICovCiAJdTY0CQljb3VudDsJCS8qIFJlcGVhdCBjb3VudCBpZiBhcnJheSwgMSBpZiBub3QgICovCiAJc2l6ZV90CQlzdHJpZGU7CQkvKiBTdHJpZGUgaWYgYXJyYXksIDAgaWYgbm90ICAgICAgICAqLwpAQCAtMjI3LDIyICsyMTQsNCBAQAogfSBrbGRpcl9lbnRfdDsKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TR0lfSU8pCi0KLSNkZWZpbmUgS0xESVJfRU5UX1NJWkUJCQkweDQwCi0jZGVmaW5lIEtMRElSX01BWF9FTlRSSUVTCQkoMHg0MDAgLyAweDQwKQotCi0vKgotICogVGhlIGFjdHVhbCBvZmZzZXRzIG9mIGVhY2ggbWVtb3J5IGFyZWEgYXJlIG1hY2hpbmUtZGVwZW5kZW50Ci0gKi8KLSNpZmRlZiBDT05GSUdfU0dJX0lQMjcKLS8vIE5vdCB5ZXQgI2luY2x1ZGUgPGFzbS9zbi9zbjAva2xkaXIuaD4KLSNlbGlmIGRlZmluZWQoQ09ORklHX1NHSV9JUDM1KQotI2luY2x1ZGUgPGFzbS9zbi9zbjEva2xkaXIuaD4KLSNlbHNlCi0jZXJyb3IgImtsZGlyLmggaXMgY3VycmVudGx5IGRlZmluZWQgZm9yIElQMjcgYW5kIElQMzUgcGxhdGZvcm1zIG9ubHkiCi0jZW5kaWYKLQotI2VuZGlmCS8qIENPTkZJR19TR0lfSU8gKi8KLQogI2VuZGlmIC8qIF9BU01fU05fS0xESVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9sYXVuY2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbGF1bmNoLmgKaW5kZXggYjY3Njk5Yy4uYjdjMjIyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9sYXVuY2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2xhdW5jaC5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NOX0xBVU5DSF9ICiAjZGVmaW5lIF9BU01fU05fTEFVTkNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL21hcHBlZF9rZXJuZWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbWFwcGVkX2tlcm5lbC5oCmluZGV4IDU5ZWRiMjAuLmMzZGQ1ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vbWFwcGVkX2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbWFwcGVkX2tlcm5lbC5oCkBAIC0yMCw3ICsyMCw2IEBACiAgKiBjb2RlLiBTbyBubyBqdW1wcyBjYW4gYmUgZG9uZSBiZWZvcmUgd2UgaGF2ZSBzd2l0Y2hlZCB0byB1c2luZwogICogY2tzc2VnIGFkZHJlc3Nlcy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAogI2RlZmluZSBSRVBfQkFTRQlDQUNfQkFTRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYWRkcnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FkZHJzLmgKaW5kZXggMzk4ODE1Ni4uOWU4Y2M1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYWRkcnMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hZGRycy5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU05fU04wX0FERFJTX0gKICNkZWZpbmUgX0FTTV9TTl9TTjBfQUREUlNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBTTjAgKG9uIGEgVDUpIEFkZHJlc3MgbWFwCkBAIC00OSw3ICs0OCw3IEBACiAgKiBzbyBmb3Igbm93IHdlIGp1c3QgdXNlIGRlZmluZXMgYnJhY2tldGVkIGJ5IGFuIGlmZGVmLgogICovCiAKLSNpZmRlZiBDT05GSUdfU0dJX1NOMF9OX01PREUKKyNpZmRlZiBDT05GSUdfU0dJX1NOX05fTU9ERQogCiAjZGVmaW5lIE5PREVfU0laRV9CSVRTCQkzMQogI2RlZmluZSBCV0lOX1NJWkVfQklUUwkJMjgKQEAgLTYzLDcgKzYyLDcgQEAKICNkZWZpbmUgQkRESVJfVVBQRVJfTUFTSwkoVUlOVDY0X0NBU1QgMHg3ZmZmZiA8PCAxMCkKICNkZWZpbmUgQkRFQ0NfVVBQRVJfTUFTSwkoVUlOVDY0X0NBU1QgMHgzZmZmZmZmIDw8IDMpCiAKLSNlbHNlIC8qICFkZWZpbmVkKENPTkZJR19TR0lfU04wX05fTU9ERSksIGFzc3VtZSB0aGF0IE0tbW9kZSBpcyBkZXNpcmVkICovCisjZWxzZSAvKiAhZGVmaW5lZChDT05GSUdfU0dJX1NOX05fTU9ERSksIGFzc3VtZSB0aGF0IE0tbW9kZSBpcyBkZXNpcmVkICovCiAKICNkZWZpbmUgTk9ERV9TSVpFX0JJVFMJCTMyCiAjZGVmaW5lIEJXSU5fU0laRV9CSVRTCQkyOQpAQCAtNzcsNyArNzYsNyBAQAogI2RlZmluZSBCRERJUl9VUFBFUl9NQVNLCShVSU5UNjRfQ0FTVCAweGZmZmZmIDw8IDEwKQogI2RlZmluZSBCREVDQ19VUFBFUl9NQVNLCShVSU5UNjRfQ0FTVCAweDdmZmZmZmYgPDwgMykKIAotI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19TR0lfU04wX05fTU9ERSkgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU0dJX1NOX05fTU9ERSkgKi8KIAogI2RlZmluZSBOT0RFX0FERFJTUEFDRV9TSVpFCShVSU5UNjRfQ0FTVCAxIDw8IE5PREVfU0laRV9CSVRTKQogCkBAIC04NSwxNSArODQsMTUgQEAKICNkZWZpbmUgTkFTSURfR0VUKF9wYSkJCShpbnQpICgoVUlOVDY0X0NBU1QgKF9wYSkgPj4JCVwKIAkJCQkJTkFTSURfU0hGVCkgJiBOQVNJRF9CSVRNQVNLKQogCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAKICNkZWZpbmUgTk9ERV9TV0lOX0JBU0UobmFzaWQsIHdpZGdldCkJCQkJCVwKIAkoKHdpZGdldCA9PSAwKSA/IE5PREVfQldJTl9CQVNFKChuYXNpZCksIFNXSU4wX0JJR1dJTikJCVwKIAk6IFJBV19OT0RFX1NXSU5fQkFTRShuYXNpZCwgd2lkZ2V0KSkKLSNlbHNlIC8qIF9fQVNTRU1CTFlfXyB8fCBfU1RBTkRBTE9ORSAqLworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCiAjZGVmaW5lIE5PREVfU1dJTl9CQVNFKG5hc2lkLCB3aWRnZXQpIFwKICAgICAgKE5PREVfSU9fQkFTRShuYXNpZCkgKyAoVUlOVDY0X0NBU1QgKHdpZGdldCkgPDwgU1dJTl9TSVpFX0JJVFMpKQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyB8fCBfU1RBTkRBTE9ORSAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgogICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBwZXJ0YWluIHRvIHRoZSBJTyBzcGVjaWFsIGFkZHJlc3MKQEAgLTE0MywxMiArMTQyLDcgQEAKICNkZWZpbmUgU04wX1dJREdFVF9CQVNFKF9uYXNpZCwgX3dpZCkJKE5PREVfU1dJTl9CQVNFKChfbmFzaWQpLCAoX3dpZCkpKQogCiAvKiBUdXJuIG9uIHNhYmxlIGxvZ2dpbmcgZm9yIHRoZSBwcm9jZXNzb3JzIHdob3NlIGJpdHMgYXJlIHNldC4gKi8KLSNpZmRlZiBTQUJMRQotI2RlZmluZSBTQUJMRV9MT0dfVFJJR0dFUihfbWFwKQlcCi0JCSooKHZvbGF0aWxlIGh1YnJlZ190ICopKElPX0JBU0UgKyAweDE3ZmZmZjApKSA9IChfbWFwKQotI2Vsc2UKICNkZWZpbmUgU0FCTEVfTE9HX1RSSUdHRVIoX21hcCkKLSNlbmRpZiAvKiBTQUJMRSAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2RlZmluZSBLRVJOX05NSV9BRERSKG5hc2lkLCBzbGljZSkJCQkJCVwKQEAgLTI4MSw3NiArMjc1LDYgQEAKIAogI2RlZmluZSBfQVJDU1BST00KIAotI2lmZGVmIF9TVEFOREFMT05FCi0KLS8qCi0gKiBUaGUgUFJPTSBuZWVkcyB0byBwYXNzIHRoZSBkZXZpY2UgYmFzZSBhZGRyZXNzIGFuZCB0aGUKLSAqIGRldmljZSBwY2kgY2ZnIHNwYWNlIGFkZHJlc3MgdG8gdGhlIGRldmljZSBkcml2ZXJzIGR1cmluZwotICogaW5zdGFsbC4gVGhlIENPTVBPTkVOVC0+S2V5IGZpZWxkIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4KLSAqIE1hY3JvcyBuZWVkZWQgYnkgU04wIGRldmljZSBkcml2ZXJzIHRvIGNvbnZlcnQgdGhlCi0gKiBDT01QT05FTlQtPktleSBmaWVsZCB0byB0aGUgcmVzcGVjdGl2ZSBiYXNlIGFkZHJlc3MuCi0gKiBLZXkgZmllbGQgbG9va3MgYXMgZm9sbG93czoKLSAqCi0gKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgfGRldm5hc2lkIHwgd2lkZ2V0ICB8cGNpaWQgfGh1YndpZGlkfGhzdG5hc2lkIHwgYWRhcCB8Ci0gKiAgfCAgIDIgICAgIHwgICAxICAgICB8ICAxICAgfCAgIDEgICAgfCAgICAyICAgIHwgICAxICB8Ci0gKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgfCAgICAgICAgIHwgICAgICB8Ci0gKiAgNjQgICAgICAgIDQ4ICAgICAgICA0MCAgICAgMzIgICAgICAgMjQgICAgICAgIDggICAgICAwCi0gKgotICogVGhlc2UgYXJlIHVzZWQgYnkgc3RhbmRhbG9uZSBkcml2ZXJzIHRpbGwgdGhlIGlvIGluZnJhc3RydWN0dXJlCi0gKiBpcyBpbiBwbGFjZS4KLSAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jZGVmaW5lIHVjaGFyIHVuc2lnbmVkIGNoYXIKLQotI2RlZmluZSBLRVlfREVWTkFTSURfU0hGVCAgNDgKLSNkZWZpbmUgS0VZX1dJRElEX1NIRlQJICAgNDAKLSNkZWZpbmUgS0VZX1BDSUlEX1NIRlQJICAgMzIKLSNkZWZpbmUgS0VZX0hVQldJRF9TSEZUCSAgIDI0Ci0jZGVmaW5lIEtFWV9IU1ROQVNJRF9TSEZUICA4Ci0KLSNkZWZpbmUgTUtfU04wX0tFWShuYXNpZCwgd2lkaWQsIHBjaWlkKSBcCi0JCQkoKCgoX19wc3Vuc2lnbmVkX3QpbmFzaWQpPDwgS0VZX0RFVk5BU0lEX1NIRlQgfFwKLQkJCQkoKF9fcHN1bnNpZ25lZF90KXdpZGlkKSA8PCBLRVlfV0lESURfU0hGVCkgfFwKLQkJCQkoKF9fcHN1bnNpZ25lZF90KXBjaWlkKSA8PCBLRVlfUENJSURfU0hGVCkKLQotI2RlZmluZSBBRERfSFVCV0lEX0tFWShrZXksaHVid2lkKVwKLQkJCShrZXl8PSgoX19wc3Vuc2lnbmVkX3QpaHVid2lkIDw8IEtFWV9IVUJXSURfU0hGVCkpCi0KLSNkZWZpbmUgQUREX0hTVE5BU0lEX0tFWShrZXksaHN0bmFzaWQpXAotCQkJKGtleXw9KChfX3BzdW5zaWduZWRfdCloc3RuYXNpZCA8PCBLRVlfSFNUTkFTSURfU0hGVCkpCi0KLSNkZWZpbmUgR0VUX0RFVk5BU0lEX0ZST01fS0VZKGtleSkJKChzaG9ydCkoa2V5ID4+IEtFWV9ERVZOQVNJRF9TSEZUKSkKLSNkZWZpbmUgR0VUX1dJRElEX0ZST01fS0VZKGtleSkJCSgodWNoYXIpKGtleSA+PiBLRVlfV0lESURfU0hGVCkpCi0jZGVmaW5lIEdFVF9QQ0lJRF9GUk9NX0tFWShrZXkpCQkoKHVjaGFyKShrZXkgPj4gS0VZX1BDSUlEX1NIRlQpKQotI2RlZmluZSBHRVRfSFVCV0lEX0ZST01fS0VZKGtleSkJKCh1Y2hhcikoa2V5ID4+IEtFWV9IVUJXSURfU0hGVCkpCi0jZGVmaW5lIEdFVF9IU1ROQVNJRF9GUk9NX0tFWShrZXkpCSgoc2hvcnQpKGtleSA+PiBLRVlfSFNUTkFTSURfU0hGVCkpCi0KLSNkZWZpbmUgUENJXzY0X1RBUkdJRF9TSEZUCQk2MAotCi0jZGVmaW5lIEdFVF9QQ0lCQVNFX0ZST01fS0VZKGtleSkgIChOT0RFX1NXSU5fQkFTRShHRVRfREVWTkFTSURfRlJPTV9LRVkoa2V5KSxcCi0JCQkJCUdFVF9XSURJRF9GUk9NX0tFWShrZXkpKVwKLQkJCQkJfCBCUklER0VfREVWSU8oR0VUX1BDSUlEX0ZST01fS0VZKGtleSkpKQotCi0jZGVmaW5lIEdFVF9QQ0lDRkdCQVNFX0ZST01fS0VZKGtleSkgXAotCQkJKE5PREVfU1dJTl9CQVNFKEdFVF9ERVZOQVNJRF9GUk9NX0tFWShrZXkpLFwKLQkJCSAgICAgIEdFVF9XSURJRF9GUk9NX0tFWShrZXkpKVwKLQkJCXwgQlJJREdFX1RZUEUwX0NGR19ERVYoR0VUX1BDSUlEX0ZST01fS0VZKGtleSkpKQotCi0jZGVmaW5lIEdFVF9XSURCQVNFX0ZST01fS0VZKGtleSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgKE5PREVfU1dJTl9CQVNFKEdFVF9ERVZOQVNJRF9GUk9NX0tFWShrZXkpLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9XSURJRF9GUk9NX0tFWShrZXkpKSkKLQotI2RlZmluZSBQVVRfSU5TVEFMTF9TVEFUVVMoYyxzKQkJYy0+UmV2aXNpb24gPSBzCi0jZGVmaW5lIEdFVF9JTlNUQUxMX1NUQVRVUyhjKQkJYy0+UmV2aXNpb24KLQotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9TVEFOREFMT05FICovCi0KICNpZiBkZWZpbmVkIChIVUJfRVJSX1NUU19XQVIpCiAKICNkZWZpbmUgRVJSX1NUU19XQVJfUkVHSVNURVIJSUlPX0lJQlVTRVJSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hcmNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hcmNoLmgKaW5kZXggZmI3ODc3My4uZjczNGYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYXJjaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaApAQCAtMTEsOSArMTEsNiBAQAogI2lmbmRlZiBfQVNNX1NOX1NOMF9BUkNIX0gKICNkZWZpbmUgX0FTTV9TTl9TTjBfQVJDSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2lmbmRlZiBTQUJMRQogCiAjaWZuZGVmIFNOMFhYTCAgLyogMTI4IGNwdSBTTVAgbWF4ICovCiAvKgpAQCAtNTQsMjUgKzUxLDE2IEBACiAgKi8KICNkZWZpbmUgTUFYX1BBUlRJVElPTlMJCU1BWF9SRUdJT05TCiAKLQotI2Vsc2UKLQotI2RlZmluZSBNQVhfQ09NUEFDVF9OT0RFUwk0Ci0jZGVmaW5lIE1BWF9OQVNJRFMJCTQKLSNkZWZpbmUgTUFYQ1BVUwkJCTgKLQotI2VuZGlmCi0KICNkZWZpbmUgTkFTSURfTUFTS19CWVRFUwkoKE1BWF9OQVNJRFMgKyA3KSAvIDgpCiAKIC8qCiAgKiBTbG90IGNvbnN0YW50cyBmb3IgU04wCiAgKi8KLSNpZmRlZiBDT05GSUdfU0dJX1NOMF9OX01PREUKKyNpZmRlZiBDT05GSUdfU0dJX1NOX05fTU9ERQogI2RlZmluZSBNQVhfTUVNX1NMT1RTICAgMTYgICAgICAgICAgICAgICAgICAgICAgLyogbWF4IHNsb3RzIHBlciBub2RlICovCi0jZWxzZSAvKiAhQ09ORklHX1NHSV9TTjBfTl9NT0RFLCBhc3N1bWUgTV9NT0RFICovCisjZWxzZSAvKiAhQ09ORklHX1NHSV9TTl9OX01PREUsIGFzc3VtZSBDT05GSUdfU0dJX1NOX01fTU9ERSAqLwogI2RlZmluZSBNQVhfTUVNX1NMT1RTICAgMzIgICAgICAgICAgICAgICAgICAgICAgLyogbWF4IHNsb3RzIHBlciBub2RlICovCi0jZW5kaWYgLyogZGVmaW5lZChOX01PREUpICovCisjZW5kaWYgLyogQ09ORklHX1NHSV9TTl9NX01PREUgKi8KIAogI2RlZmluZSBTTE9UX1NISUZUICAgICAgCSgyNykKICNkZWZpbmUgU0xPVF9NSU5fTUVNX1NJWkUJKDMyKjEwMjQqMTAyNCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Yi5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViLmgKaW5kZXggZjVkYmJhNi4uM2UyMjhmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViLmgKQEAgLTMxLDEwICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJuaS5oPgogLy8jaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJjb3JlLmg+CiAKLSNpZmRlZiBTQUJMRQotI2RlZmluZSBJUDI3X05PX0hVQlVBUlRfSU5UCTEKLSNlbmRpZgotCiAvKiBUcmFuc2xhdGlvbiBvZiB1bmNhY2hlZCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lCVVBVFRSX0hTUEVDCTAKICNkZWZpbmUJVUFUVFJfSU8JMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1YmlvLmgKaW5kZXggZjMxNGRhMi4uZWY5MWIzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJpby5oCkBAIC00ODYsMjIgKzQ4Niw2IEBACiAjZGVmaW5lIElDUkJOX0FfQ0VSUl9TSEZUCTU0CiAjZGVmaW5lIElDUkJOX0FfRVJSX01BU0sJMHgzZmYKIAotI2lmIDAJLyogRGlzYWJsZWQsIHRoaXMgY2F1c2VzIG5hbWVzcGFjZSBwb2x1dGlvbiBhbmQgYnJlYWsgYWxsbW9kY29uZmlnICovCi0vKgotICogRWFzeSBhY2Nlc3MgbWFjcm9zLgotICovCi0jZGVmaW5lCWFfZXJyb3IJCWljcmJhX2ZpZWxkc19zLmVycm9yCi0jZGVmaW5lCWFfZWNvZGUJCWljcmJhX2ZpZWxkc19zLmVjb2RlCi0jZGVmaW5lCWFfbG5ldHVjZQlpY3JiYV9maWVsZHNfcy5sbmV0dWNlCi0jZGVmaW5lCWFfbWFyawkJaWNyYmFfZmllbGRzX3MubWFyawotI2RlZmluZQlhX3hlcnIJCWljcmJhX2ZpZWxkc19zLnhlcnIKLSNkZWZpbmUJYV9zaWRuCQlpY3JiYV9maWVsZHNfcy5zaWRuCi0jZGVmaW5lCWFfdG51bQkJaWNyYmFfZmllbGRzX3MudG51bQotI2RlZmluZQlhX2FkZHIJCWljcmJhX2ZpZWxkc19zLmFkZHIKLSNkZWZpbmUJYV92YWxpZAkJaWNyYmFfZmllbGRzX3MudmFsaWQKLSNkZWZpbmUJYV9pb3cJCWljcmJhX2ZpZWxkc19zLmlvdwotI2VuZGlmCi0KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNkZWZpbmUJSUlPX0lDUkJfQUREUl9TSEZUCTIJLyogU2hpZnQgdG8gZ2V0IHByb3BlciBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJtZC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaAppbmRleCBhNjZkZWY0Li4xNGMyMjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJtZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Ym1kLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYJX0FTTV9TTl9TTjBfSFVCTURfSAogI2RlZmluZQlfQVNNX1NOX1NOMF9IVUJNRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEh1YiBNZW1vcnkvRGlyZWN0b3J5IGludGVyZmFjZSByZWdpc3RlcnMKQEAgLTkyLDcgKzkxLDcgQEAKICNkZWZpbmUgTURfVVJFRzFfMTQJCTB4MjIwMGYwIC8qIHVDb250cm9sbGVyL1VBUlQgMSByZWdpc3RlciAgICAgKi8KICNkZWZpbmUgTURfVVJFRzFfMTUJCTB4MjIwMGY4IC8qIHVDb250cm9sbGVyL1VBUlQgMSByZWdpc3RlciAgICAgKi8KIAotI2lmZGVmIENPTkZJR19TR0lfU04wX05fTU9ERQorI2lmZGVmIENPTkZJR19TR0lfU05fTl9NT0RFCiAjZGVmaW5lIE1EX01FTV9CQU5LUwkJNAkgLyogNCBiYW5rcyBvZiBtZW1vcnkgbWF4IGluIE4gbW9kZSAqLwogI2Vsc2UKICNkZWZpbmUgTURfTUVNX0JBTktTCQk4CSAvKiA4IGJhbmtzIG9mIG1lbW9yeSBtYXggaW4gTSBtb2RlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJwaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVicGkuaAppbmRleCAzNTViYmE4Li5lMzlmNWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJwaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1YnBpLmgKQEAgLTM5OCwyNCArMzk4LDYgQEAKIAogLyogUElfUlRfRklMVEVSX0NUUkwgbWFzayBhbmQgc2hpZnQgZGVmaW5pdGlvbnMgKi8KIAotI2lmIDAKLS8qCi0gKiBYWFggLSBUaGlzIHJlZ2lzdGVyJ3MgZGVmaW5pdGlvbiBoYXMgY2hhbmdlZCwgYnV0IGl0J3Mgb25seSBpbXBsZW1lbnRlZAotICogaW4gSHViIDIuCi0gKi8KLSNkZWZpbmUgUFJGQ19EUk9QX0NPVU5UX1NIRlQJMjcKLSNkZWZpbmUgUFJGQ19EUk9QX0NPVU5UX01BU0sJKFVJTlQ2NF9DQVNUIDB4M2ZmIDw8IDI3KQotI2RlZmluZSBQUkZDX0RST1BfQ1RSX1NIRlQJMTgKLSNkZWZpbmUgUFJGQ19EUk9QX0NUUl9NQVNLCShVSU5UNjRfQ0FTVCAweDFmZiA8PCAxOCkKLSNkZWZpbmUgUFJGQ19NQVNLX0VOQUJMRV9TSEZUCTEwCi0jZGVmaW5lIFBSRkNfTUFTS19FTkFCTEVfTUFTSwkoVUlOVDY0X0NBU1QgMHg3ZiA8PCAxMCkKLSNkZWZpbmUgUFJGQ19NQVNLX0NUUl9TSEZUCTIKLSNkZWZpbmUgUFJGQ19NQVNLX0NUUl9NQVNLCShVSU5UNjRfQ0FTVCAweGZmIDw8IDIpCi0jZGVmaW5lIFBSRkNfT0ZGU0VUX1NIRlQJMAotI2RlZmluZSBQUkZDX09GRlNFVF9NQVNLCShVSU5UNjRfQ0FTVCAzKQotI2VuZGlmIC8qIDAgKi8KLQotCiAvKgogICogQml0cyBmb3IgTkFDS19DTlRfQS9CIGFuZCBOQUNLX0NNUAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9pcDI3LmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9pcDI3LmgKaW5kZXggYWRlMGU5Ny4uM2M5N2UwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaXAyNy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2lwMjcuaApAQCAtNiw3ICs2LDcgQEAKICAqIERlcml2ZWQgZnJvbSBJUklYIDxzeXMvU04vU04wL0lQMjcuaD4uCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkyIC0gMTk5NywgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDYgYnkgUmFsZiBCYWVjaGxlCiAgKi8KICNpZm5kZWYgX0FTTV9TTl9TTjBfSVAyN19ICiAjZGVmaW5lIF9BU01fU05fU04wX0lQMjdfSApAQCAtODIsMTEgKzgyLDQgQEAKICNkZWZpbmUgU0VORF9OTUkoX25hc2lkLCBfc2xpY2UpCVwKICAgICAgICAgICBSRU1PVEVfSFVCX1MoKF9uYXNpZCksICAoUElfTk1JX0EgKyAoKF9zbGljZSkgKiBQSV9OTUlfT0ZGU0VUKSksIDEpCiAKLS8qIFNhbml0eSBoYXp6YXJkIC4uLiAgQmVsb3cgYWxsIHRoZSBPcmlnaW4gaGFja3MgYXJlIGZvbGxvd2luZy4gICovCi0KLSNkZWZpbmUgU04wMF9CUklER0UJCTB4OTIwMDAwMDAwODAwMDAwMAotI2RlZmluZSBTTjAwSV9CUklER0UwCQkweDkyMDAwMDAwMGIwMDAwMDAKLSNkZWZpbmUgU04wMElfQlJJREdFMQkJMHg5MjAwMDAwMDBlMDAwMDAwCi0jZGVmaW5lIFNOMDBJX0JSSURHRTIJCTB4OTIwMDAwMDAwZjAwMDAwMAotCiAjZW5kaWYgLyogX0FTTV9TTl9TTjBfSVAyN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbmkuaAppbmRleCBiM2JjNjk4Li5iOWJhNTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuaS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc25pLmgKQEAgLTE1LDkgKzE1LDYgQEAKIC8qCiAgKiBBU0lDIFBDSSByZWdpc3RlcnMgZm9yIGxpdHRsZSBlbmRpYW4gY29uZmlndXJhdGlvbi4KICAqLwotI2lmbmRlZiBfX01JUFNFTF9fCi0jZXJyb3IgIkZpeCBtZSBmb3IgYmlnIGVuZGlhbiIKLSNlbmRpZgogI2RlZmluZSBQQ0lNVF9VQ09ORgkJMHhiZmZmMDAwMAogI2RlZmluZSBQQ0lNVF9JT0FEVElNRU9VVDIJMHhiZmZmMDAwOAogI2RlZmluZSBQQ0lNVF9JT01FTUNPTkYJCTB4YmZmZjAwMTAKQEAgLTUxLDkgKzQ4LDkgQEAKICNkZWZpbmUgUENJTVRfUENJX0NPTkYJCTB4YmZmZjAxMDAKIAogLyoKLSAqIERhdGEgcG9ydCBmb3IgdGhlIFBDSSBidXMuCisgKiBEYXRhIHBvcnQgZm9yIHRoZSBQQ0kgYnVzIGluIElPIHNwYWNlCiAgKi8KLSNkZWZpbmUgUENJTVRfQ09ORklHX0RBVEEJMHhiNDAwMGNmYworI2RlZmluZSBQQ0lNVF9DT05GSUdfREFUQQkweDBjZmMKIAogLyoKICAqIEJvYXJkIHNwZWNpZmljIHJlZ2lzdGVycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zcGFyc2VtZW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3BhcnNlbWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1YWM2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3BhcnNlbWVtLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfTUlQU19TUEFSU0VNRU1fSAorI2RlZmluZSBfTUlQU19TUEFSU0VNRU1fSAorI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKworLyoKKyAqIFNFQ1RJT05fU0laRV9CSVRTCQkyXk46IGhvdyBiaWcgZWFjaCBzZWN0aW9uIHdpbGwgYmUKKyAqIE1BWF9QSFlTTUVNX0JJVFMJCTJeTjogaG93IG11Y2ggbWVtb3J5IHdlIGNhbiBoYXZlIGluIHRoYXQgc3BhY2UKKyAqLworI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUyAgICAgICAyOAorI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTICAgICAgICAzNQorCisjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqLworI2VuZGlmIC8qIF9NSVBTX1NQQVJTRU1FTV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKaW5kZXggYzQ4NTZhOC4uNTEzYWE1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9TVEFDS0ZSQU1FX0gKICNkZWZpbmUgX0FTTV9TVEFDS0ZSQU1FX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9hc20uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3RyaW5nLmggYi9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oCmluZGV4IDkwN2RhNjAuLjQzNmUzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zdHJpbmcuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX1NUUklOR19ICiAjZGVmaW5lIF9BU01fU1RSSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogTW9zdCBvZiB0aGUgaW5saW5lIGZ1bmN0aW9ucyBhcmUgcmF0aGVyIG5haXZlIGltcGxlbWVudGF0aW9ucyBzbyBJIGp1c3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCmluZGV4IDI2MWY3MWQuLjEzMDMzM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1NZU1RFTV9ICiAjZGVmaW5lIF9BU01fU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmgKaW5kZXggZjhkOTdkYS4uYWU4YWRhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGhyZWFkX2luZm8uaApAQCAtOSw3ICs5LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmgKaW5kZXggYmI0YWUzYy4uMjc2YmU3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fVExCRkxVU0hfSAogI2RlZmluZSBfX0FTTV9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy5oIGIvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy5oCmluZGV4IDZjZTFlOTQuLjk0YmVmMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpZm5kZWYgX19BU01fVFg0OTI3X1RPU0hJQkFfUkJUWDQ5MjdfSAogI2RlZmluZSBfX0FTTV9UWDQ5MjdfVE9TSElCQV9SQlRYNDkyN19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHg0OTI3L3R4NDkyNy5oPgogI2luY2x1ZGUgPGFzbS90eDQ5MjcvdHg0OTI3X21pcHMuaD4KICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL3R5cGVzLmgKaW5kZXggY2QyODEzZC4uMmI1MmUxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdHlwZXMuaApAQCAtNTIsNyArNTIsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgX19zaWduZWQgY2hhciBzODsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmgKaW5kZXggYjk2ZjNlMC4uMWNkZDRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy91YWNjZXNzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fVUFDQ0VTU19ICiAjZGVmaW5lIF9BU01fVUFDQ0VTU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAppbmRleCAxMDY4ZmU5Li44YmIwYmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKQEAgLTkwNSw2ICs5MDUsOCBAQAogI2RlZmluZSBfX05SX04zMl9MaW51eAkJCTYwMDAKICNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI2OAogCisjaWZkZWYgX19LRVJORUxfXworCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKiBYWFggLSBfZm9vIG5lZWRzIHRvIGJlIF9fZm9vLCB3aGlsZSBfX05SX2JhciBjb3VsZCBiZSBfTlJfYmFyLiAqLwpAQCAtMTE2OCw5ICsxMTcwLDYgQEAKIAogI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpAQCAtMTE5Nyw3ICsxMTk2LDYgQEAKICMgaWZkZWYgQ09ORklHX01JUFMzMl9PMzIKICMgIGRlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKICMgZW5kaWYKLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC0xMjQ4LDQgKzEyNDYsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcbiIgI3ggIlx0PVx0c3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyYzQxNzMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyYzQxNzMuaAppbmRleCA0ZDQxYTljLi45NmZkY2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cmM0MTczLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdnJjNDE3My5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZuZGVmIF9fTkVDX1ZSQzQxNzNfSAogI2RlZmluZSBfX05FQ19WUkM0MTczX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy93YXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmgKaW5kZXggYWQzNzRiZC4uM2FjMTQ2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy93YXIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3dhci5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX1dBUl9ICiAjZGVmaW5lIF9BU01fV0FSX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogQW5vdGhlciBSNDYwMCBlcnJhdHVtLiAgRHVlIHRvIHRoZSBsYWNrIG9mIGVycmF0YSBpbmZvcm1hdGlvbiB0aGUgZXhhY3QKQEAgLTE3Miw3ICsxNzEsOCBAQAogICogT24gdGhlIFJNOTAwMCB0aGVyZSBpcyBhIHByb2JsZW0gd2hpY2ggbWFrZXMgdGhlIENyZWF0ZURpcnR5RXhjbHVzaXZlCiAgKiBjYWNoZSBvcGVyYXRpb24gdW51c2FibGUgb24gU01QIHN5c3RlbXMuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFgpIHx8IGRlZmluZWQoQ09ORklHX1BNQ19ZT1NFTUlURSkKKyNpZiBkZWZpbmVkKENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFgpIHx8IGRlZmluZWQoQ09ORklHX1BNQ19ZT1NFTUlURSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0JBU0xFUl9FWENJVEUpCiAjZGVmaW5lICBSTTkwMDBfQ0RFWF9TTVBfV0FSCQkxCiAjZW5kaWYKIApAQCAtMTgyLDcgKzE4Miw3IEBACiAgKiBiZWluZyBmZXRjaGVkIG1heSBjYXNlIHNwdXJpb3VzIGV4Y2VwdGlvbnMuCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFgpIHx8IGRlZmluZWQoQ09ORklHX01PTUVOQ09fT0NFTE9UXzMpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19QTUNfWU9TRU1JVEUpCisgICAgZGVmaW5lZChDT05GSUdfUE1DX1lPU0VNSVRFKSB8fCBkZWZpbmVkKENPTkZJR19CQVNMRVJfRVhDSVRFKQogI2RlZmluZSBJQ0FDSEVfUkVGSUxMU19XT1JLQVJPVU5EX1dBUgkxCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy93YmZsdXNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3diZmx1c2guaAppbmRleCBjM2JlZjUwLi5lYWRjMGFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3diZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3diZmx1c2guaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX1dCRkxVU0hfSAogI2RlZmluZSBfQVNNX1dCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQ1BVX0hBU19XQgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmgKaW5kZXggNDAzZWE5Ny4uNDhiZjliOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX0FTTV9QQVJJU0NfQVRPTUlDX0hfCiAjZGVmaW5lIF9BU01fUEFSSVNDX0FUT01JQ19IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKaW5kZXggYzgzMTY2NS4uN2QyMmZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKQEAgLTUsNyArNSw2IEBACiAjaWZuZGVmIF9fQVJDSF9QQVJJU0NfQ0FDSEVfSAogI2RlZmluZSBfX0FSQ0hfUEFSSVNDX0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogUEEgMi4wIHByb2Nlc3NvcnMgaGF2ZSA2NC1ieXRlIGNhY2hlbGluZXM7IFBBIDEuMSBwcm9jZXNzb3JzIGhhdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGVmbHVzaC5oCmluZGV4IDc2YjZiN2QuLjBiNDU5Y2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1BBUklTQ19DQUNIRUZMVVNIX0gKICNkZWZpbmUgX1BBUklTQ19DQUNIRUZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CS8qIGZvciBmbHVzaF91c2VyX2RjYWNoZV9yYW5nZV9hc20oKSBwcm90byAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEtbWFwcGluZy5oCmluZGV4IDc0ZDRhYzYuLjFlMzg3ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfUEFSSVNDX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX1BBUklTQ19ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmgKaW5kZXggMzFmZDEwZC4uOTk3OWMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9ETUFfSAogI2RlZmluZSBfQVNNX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmgKaW5kZXggMjQ0ZjZiOC4uYjllYjI0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fSU9fSAogI2RlZmluZSBfQVNNX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2lycS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lycS5oCmluZGV4IGIwYTMwZTIuLjM3N2JhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9BU01fUEFSSVNDX0lSUV9ICiAjZGVmaW5lIF9BU01fUEFSSVNDX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mva21hcF90eXBlcy5oCmluZGV4IDY4ODZhMGMuLjgwNmFhZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9rbWFwX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9LTUFQX1RZUEVTX0gKICNkZWZpbmUgX0FTTV9LTUFQX1RZUEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KICMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKaW5kZXggYzBkZDQ2MS4uMDY5NWJjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQogIyBkZWZpbmUgUEFHRV9TSElGVAkxMgkvKiA0ayAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaAppbmRleCBmNDY5NGQ0Li4wN2NiOWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTVBBUklTQ19QQVJBTV9ICiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjIGlmZGVmIENPTkZJR19QQTIwCiAjICBkZWZpbmUgSFoJCTEwMDAJCS8qIEZhc3RlciBtYWNoaW5lcyAqLwogIyBlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmgKaW5kZXggNzdiYmFmYi4uOGI2MzFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wY2kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fUEFSSVNDX1BDSV9ICiAjZGVmaW5lIF9fQVNNX1BBUklTQ19QQ0lfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oCmluZGV4IDBhM2ZhY2UuLjA4MzY0ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9QQVJJU0NfUERDX0gKICNkZWZpbmUgX1BBUklTQ19QRENfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglQREMgcmV0dXJuIHZhbHVlcyAuLi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCmluZGV4IGFlYzA4OWUuLmI2YmNjNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oCmluZGV4IDg5ZjJmMWMuLmNhNDlkYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmgKQEAgLTksNyArOSw2IEBACiAjZGVmaW5lIF9fQVNNX1BBUklTQ19QUk9DRVNTT1JfSAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmgKaW5kZXggNDMzNGQ2Yy4uNWEzZTIzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3Bzdy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wc3cuaApAQCAtMSw2ICsxLDUgQEAKICNpZm5kZWYgX1BBUklTQ19QU1dfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUJUFNXX0kJMHgwMDAwMDAwMQogI2RlZmluZQlQU1dfRAkweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmgKaW5kZXggZGJkYmQyZS4uZDRjMGUyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zbXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmgKaW5kZXggYTVhOTczYy4uODYzODc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19QQVJJU0NfU1lTVEVNX0gKICNkZWZpbmUgX19QQVJJU0NfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wc3cuaD4KIAogLyogVGhlIHByb2dyYW0gc3RhdHVzIHdvcmQgYXMgYml0ZmllbGRzLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmgKaW5kZXggODI1OTk0YS4uZjY2MmU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qIFRMQiBmbHVzaGluZyByb3V0aW5lcy4uLi4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaAppbmRleCAwZTFhMzBiLi4xMmI4NjcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCkBAIC03OTIsNiArNzkyLDcgQEAKICNkZWZpbmUgSFBVWF9HQVRFV0FZX0FERFIgICAgICAgMHhDMDAwMDAwNAogI2RlZmluZSBMSU5VWF9HQVRFV0FZX0FERFIgICAgICAweDEwMAogCisjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2RlZmluZSBTWVNfaWZ5KHN5c2NhbGxfbmFtZSkgICBfX05SXyMjc3lzY2FsbF9uYW1lCkBAIC05MzQsNyArOTM1LDYgQEAKICAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCA1LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCkBAIC05NTYsNyArOTU2LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgogCiAvKiBtbWFwICYgbW1hcDIgdGFrZSA2IGFyZ3VtZW50cyAqLwogI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSx0eXBlNixhcmc2KSBcCkBAIC0xMDU2LDQgKzEwNTUsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BBUklTQ19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaAppbmRleCBjNWMzMjU5Li40YWEyMjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfQUJTX0FERFJfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogYyAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oCmluZGV4IDYzNzljMmQuLjY0MmJlNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KICNpZiBkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoQ09ORklHXzQwM0dDWCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaAppbmRleCA5ZmNmMDE2Li5mNjI2NWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCkBAIC0zMjksNyArMzI5LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfQ0VMTAkoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBcCiAJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAotCSAgICBDUFVfRlRSX0NUUkwgfCBDUFVfRlRSX1BBVVNFX1pFUk8pCisJICAgIENQVV9GVFJfQ1RSTCB8IENQVV9GVFJfUEFVU0VfWkVSTyB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKICNkZWZpbmUgQ1BVX0ZUUlNfQ09NUEFUSUJMRQkoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLW1hcHBpbmcuaAppbmRleCAyYWM2M2Y1Li4yYWI5YmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEtbWFwcGluZy5oCkBAIC04LDcgKzgsNiBAQAogI2RlZmluZSBfQVNNX0RNQV9NQVBQSU5HX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAvKiBuZWVkIHN0cnVjdCBwYWdlIGRlZmluaXRpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEuaAppbmRleCA0YmI1N2ZlLi43YTQzNzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLmgKQEAgLTIyLDcgKzIyLDYgQEAKICAqIHdpdGggYSBncmFpbiBvZiBzYWx0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oCmluZGV4IDg2OGM3MTMuLmU5Yzg2YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBfUFBDNjRfRUVIX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmgKaW5kZXggOTRkMjI4Zi4uOTljMThiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oCkBAIC0zLDE0ICszLDE0IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIHRhc2tfc3RydWN0ICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYXV4dmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAKIC8qIFBvd2VyUEMgcmVsb2NhdGlvbnMgZGVmaW5lZCBieSB0aGUgQUJJcyAqLwogI2RlZmluZSBSX1BQQ19OT05FCQkwCkBAIC0xMjksNyArMTI5LDcgQEAKICAgLyogQXNzdW1wdGlvbjogRUxGX0FSQ0ggPT0gRU1fUFBDIGFuZCBFTEZfQ0xBU1MgPT0gRUxGQ0xBU1MzMiAqLwogICB0eXBlZGVmIGVsZl9ncmVnX3QzMiBlbGZfZ3JlZ190OwogICB0eXBlZGVmIGVsZl9ncmVnc2V0X3QzMiBlbGZfZ3JlZ3NldF90OwotIyBkZWZpbmUgZWxmX2FkZHJfdCB1MzIKKyMgZGVmaW5lIGVsZl9hZGRyX3QgX191MzIKICNlbmRpZiAvKiBFTEZfQVJDSCAqLwogCiAvKiBGbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KQEAgLTE2MSw2ICsxNjEsNyBAQAogdHlwZWRlZiBlbGZfdnJyZWdfdCBlbGZfdnJyZWdzZXRfdDMyW0VMRl9OVlJSRUczMl07CiAjZW5kaWYKIAorI2lmZGVmIF9fS0VSTkVMX18KIC8qCiAgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgogICovCkBAIC0xNzYsOCArMTc3LDYgQEAKIAogI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAoMHgwODAwMDAwMCkKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogLyogQ29tbW9uIHJvdXRpbmUgZm9yIGJvdGggMzItYml0IGFuZCA2NC1iaXQgcHJvY2Vzc2VzICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcHBjX2VsZl9jb3JlX2NvcHlfcmVncyhlbGZfZ3JlZ3NldF90IGVsZl9yZWdzLAogCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mbG9wcHkuaAppbmRleCA2MDgxNjRjLi43ZTJkMTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmxvcHB5LmgKQEAgLTExLDcgKzExLDYgQEAKICNkZWZpbmUgX19BU01fUE9XRVJQQ19GTE9QUFlfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKICNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmJfcChwb3J0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKaW5kZXggMjZiODlkOC4uY2UwZjdkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCkBAIC02LDcgKzYsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaWRlLmgKaW5kZXggZGE1ZjY0MC4uYjA5YjQyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjZW5kaWYKIAogI2lmbmRlZiAgX19wb3dlcnBjNjRfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKaW5kZXggMThjYTI5ZS4uMmFjZjdiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaApAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBfQVNNX0lPTU1VX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKaW5kZXggN2JjNmQ3My4uMWU5ZjI1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXNlcmllc19pby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2lzZXJpZXNfaW8uaAppbmRleCA0OTZhYTg1Li5mMjkwMDliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXNlcmllc19pby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pc2VyaWVzX2lvLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lTRVJJRVNfSU9fSAogI2RlZmluZSBfQVNNX1BPV0VSUENfSVNFUklFU19JU0VSSUVTX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKaW5kZXggMGY5MjU0Yy4uM2U3ZDM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW16b25lLmgKaW5kZXggODhkNzBiYS4uZDQ4NGNhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tem9uZS5oCkBAIC04LDcgKzgsNiBAQAogI2RlZmluZSBfQVNNX01NWk9ORV9IXwogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogZ2VuZXJpYyBub24tbGluZWFyIG1lbW9yeSBzdXBwb3J0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAppbmRleCA3MDYzMjVmLi4zYzZmNjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaApAQCAtMTYsNyArMTYsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfUEFDQV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZQk8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZQk8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZQk8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUJPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKaW5kZXggMmZiZWNlYi4uZjA0NjliOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oCmluZGV4IGU5ZjFmNDYuLjk2NGUzMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQkvKiBGb3IgVEFTS19TSVpFICovCiAjaW5jbHVkZSA8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAppbmRleCBkZDFjMGE5Li5hOTQwY2ZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaApAQCAtNSw3ICs1LDYgQEAKICNkZWZpbmUgX0FTTV9QT1dFUlBDX1BQQ19BU01fSAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKaW5kZXggOTdlZjFjZC4uZjRlMmNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc21wLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtcC5oCmluZGV4IDRhNzE2ZjcuLjA2OGYxMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXAuaApAQCAtMTcsNyArMTcsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfU01QX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc211LmgKaW5kZXggMmRjOTM2My4uNTFlNjVmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtdS5oCkBAIC01LDcgKzUsNiBAQAogICogRGVmaW5pdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIFNNVSBjaGlwIGluIG5ld2VyIEc1IFBvd2VyTWFjcwogICovCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaAppbmRleCA3Y2ZjZmYzLi45NTcxM2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKQEAgLTI0LDcgKzI0LDYgQEAKICNkZWZpbmUgX1NQVV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Rlcm1iaXRzLmgKaW5kZXggZWJmNjA1NS4uNmQ1MzNiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGVybWJpdHMuaApAQCAtMTUzLDYgKzE1Myw3IEBACiAjZGVmaW5lIEhVUENMCTAwMDQwMDAwCiAKICNkZWZpbmUgQ0xPQ0FMCTAwMTAwMDAwCisjZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLwogI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCQkvKiBmbG93IGNvbnRyb2wgKi8KIAogLyogY19sZmxhZyBiaXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKaW5kZXggODhiNTUzYy4uZDMzOWUyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBUSFJFQURfU0laRQkJKDEgPDwgVEhSRUFEX1NISUZUKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oCmluZGV4IDkxMjExOGQuLjQ0NjMxNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oCkBAIC0xNCw3ICsxNCw2IEBACiAjZGVmaW5lIF9fUE9XRVJQQ19USU1FX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmgKaW5kZXggYzAyZDE1YS4uM2I5YThlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaApAQCAtNyw3ICs3LDYgQEAKICAqIFBvd2VyUEMgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMDI0MDAwIC8qIFVuZGVybHlpbmcgSFogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYi5oCmluZGV4IDYwMWE1M2MuLjRlMmE4MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90bGIuaApAQCAtMTMsNyArMTMsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfVExCX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZm5kZWYgX19wb3dlcnBjNjRfXwogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiZmx1c2guaAppbmRleCBhMjk5OGVlLi45M2M3ZDBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90bGJmbHVzaC5oCkBAIC0xNyw3ICsxNyw2IEBACiAgKi8KICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RydWN0IG1tX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCmluZGV4IDg3MzYyYTAuLjE5YzU3NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19UT1BPTE9HWV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBzeXNfZGV2aWNlOwogc3RydWN0IGRldmljZV9ub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90eXBlcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90eXBlcy5oCmluZGV4IGJhYWJiYTkuLmQ2ZmI1NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3R5cGVzLmgKQEAgLTY0LDcgKzY0LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiB0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKaW5kZXggZWRkZTI0Ni4uZWI2NmVhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCkBAIC0zMjQsMTIgKzMyNCwxMiBAQAogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkyOTkKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzAxCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fTlJfX2V4aXQgX19OUl9leGl0CiAjZGVmaW5lIE5SX3N5c2NhbGxzCV9fTlJfc3lzY2FsbHMKLSNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC00NDEsOSArNDQxLDcgQEAKIAlfX3N5c2NhbGxfbnIoNiwgdHlwZSwgbmFtZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7IFwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CkBAIC00OTksOCArNDk3LDggQEAKICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdC4iICN4ICJcblx0LnNldFx0LiIgI3ggIiwuc3lzX25pX3N5c2NhbGwiKQogI2VuZGlmCiAKLSNlbmRpZgkJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJCS8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmCQkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1BQQ19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdmdhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3ZnYS5oCmluZGV4IGY4ZDM1MGEuLmVhZGFmMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdmdhLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92Z2EuaApAQCAtMTIsNyArMTIsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1ZHQV9DT05TT0xFKSB8fCBkZWZpbmVkKENPTkZJR19NREFfQ09OU09MRSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy92aW8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdmlvLmgKaW5kZXggMDU0NGVjZS4uYmUxNGM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy92aW8uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zpby5oCkBAIC0xNSw3ICsxNSw2IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19WSU9fSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2FtaWdhaHcuaCBiL2luY2x1ZGUvYXNtLXBwYy9hbWlnYWh3LmgKaW5kZXggOGM5ODk0NS4uOTBmZDEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2FtaWdhaHcuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYW1pZ2Fody5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfX0FTTVBQQ19BTUlHQUhXX0gKICNkZWZpbmUgX19BU01QUENfQU1JR0FIV19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20tbTY4ay9hbWlnYWh3Lmg+CiAKICN1bmRlZiBDSElQX1BIWVNBRERSCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvYm9vdGluZm8uaCBiL2luY2x1ZGUvYXNtLXBwYy9ib290aW5mby5oCmluZGV4IDkzZDk1NWMuLjJhY2U0YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9ib290aW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9ib290aW5mby5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfUFBDX0JPT1RJTkZPX0gKICNkZWZpbmUgX1BQQ19CT09USU5GT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVBVUykgJiYgIWRlZmluZWQoX19CT09URVJfXykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oIGIvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKaW5kZXggMzFmMzYyOS4uMzI0N2JlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2NvbW1wcm9jLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19DUE1fOFhYX18KICNkZWZpbmUgX19DUE1fOFhYX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS84eHhfaW1tYXAuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pYm00MDMuaCBiL2luY2x1ZGUvYXNtLXBwYy9pYm00MDMuaAppbmRleCBiZjZlZmEwLi5jOWM1ZDUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaWJtNDAzLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2libTQwMy5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0lCTTQwM19IX18KICNkZWZpbmUgX19BU01fSUJNNDAzX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR180MDNHQ1gpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pYm00NHguaCBiL2luY2x1ZGUvYXNtLXBwYy9pYm00NHguaAppbmRleCAzYWNjMzgyLi43ODE4YjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2libTQ0eC5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQVNNX0lCTTQ0eF9IX18KICNkZWZpbmUgX19BU01fSUJNNDR4X0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgTlJfQk9BUkRfSVJRUwogI2RlZmluZSBOUl9CT0FSRF9JUlFTIDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pYm00eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9pYm00eHguaAppbmRleCAzOGY5OTcxLi5jZjYyYjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaWJtNHh4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2libTR4eC5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9fQVNNX0lCTTRYWF9IX18KICNkZWZpbmUgX19BU01fSUJNNFhYX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKICNpZmRlZiBDT05GSUdfNDB4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW8uaCBiL2luY2x1ZGUvYXNtLXBwYy9pby5oCmluZGV4IGI5MTlkOGYuLjg5YzZmMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pby5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfUFBDX0lPX0gKICNkZWZpbmUgX1BQQ19JT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcHBjL21hY2hkZXAuaAppbmRleCBlMWEwYTdiLi5kYTc3NDY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbWFjaGRlcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tYWNoZGVwLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9QUENfTUFDSERFUF9ICiAjZGVmaW5lIF9QUENfTUFDSERFUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21tdS5oIGIvaW5jbHVkZS9hc20tcHBjL21tdS5oCmluZGV4IDkyMDVkYjQuLjBhNzBiMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbW11LmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9QUENfTU1VX0hfCiAjZGVmaW5lIF9QUENfTU1VX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1wcGMvbW11X2NvbnRleHQuaAppbmRleCA0ZjE1MmNjLi45NGYyYmY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbW11X2NvbnRleHQuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX19QUENfTU1VX0NPTlRFWFRfSAogI2RlZmluZSBfX1BQQ19NTVVfQ09OVEVYVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwLmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oCmluZGV4IDZiYTY5YTguLjRiOTM0ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19BU01fUFBDX01QQzgyNjBfSF9fCiAjZGVmaW5lIF9fQVNNX1BQQ19NUEM4MjYwX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfODI2MAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaAppbmRleCAzYzIzZmM0Li4wMmVkMmMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19BU01fTVBDODN4eF9IX18KICNkZWZpbmUgX19BU01fTVBDODN4eF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogI2lmZGVmIENPTkZJR184M3h4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaAppbmRleCBmNDcwMDJhLi5jMjViZGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19BU01fTVBDODV4eF9IX18KICNkZWZpbmUgX19BU01fTVBDODV4eF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogI2lmZGVmIENPTkZJR184NXh4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKaW5kZXggMzUxNWE3Zi4uYWRjY2UzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19DT05GSUdfOHh4X0RFRlMKICNkZWZpbmUgX19DT05GSUdfOHh4X0RFRlMKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHXzh4eAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oIGIvaW5jbHVkZS9hc20tcHBjL212NjR4NjAuaAppbmRleCA0ZjI0MDViLi42NjNlZGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL29jcC5oIGIvaW5jbHVkZS9hc20tcHBjL29jcC5oCmluZGV4IDk4MzExNmYuLjNiZTVkNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9vY3AuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvb2NwLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9vcGVuX3BpYy5oIGIvaW5jbHVkZS9hc20tcHBjL29wZW5fcGljLmgKaW5kZXggZWMyZjQ2Ni4uYTRmZTk2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL29wZW5fcGljLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL29wZW5fcGljLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX1BQQ19LRVJORUxfT1BFTl9QSUNfSAogI2RlZmluZSBfUFBDX0tFUk5FTF9PUEVOX1BJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2RlZmluZSBPUEVOUElDX1NJWkUJMHg0MDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKaW5kZXggMGZiNjhhMC4uMGIxOWFmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfUFBDX1BBR0VfSAogI2RlZmluZSBfUFBDX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KQEAgLTE1LDcgKzE0LDYgQEAKICNkZWZpbmUgUEFHRV9NQVNLCSh+KCgxIDw8IFBBR0VfU0hJRlQpIC0gMSkpCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFRoaXMgbXVzdCBtYXRjaCB3aGF0IGlzIGluIGFyY2gvcHBjL01ha2VmaWxlICovCiAjZGVmaW5lIFBBR0VfT0ZGU0VUCUNPTkZJR19LRVJORUxfU1RBUlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wY19zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXBwYy9wY19zZXJpYWwuaAppbmRleCA4Zjk5NGY5Li44MWEyZDBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcGNfc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BjX3NlcmlhbC5oCkBAIC05LDcgKzksNiBAQAogICogYW55b25lIHVzaW5nIGFueSBvZiB0aG9zZSBvbiBhIFBQQyBwbGF0Zm9ybS4gIC0tIHBhdWx1cwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1wcGMvcGdhbGxvYy5oCmluZGV4IGJkZWZkMWMuLjQ0ZDg4YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BnYWxsb2MuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX1BQQ19QR0FMTE9DX0gKICNkZWZpbmUgX1BQQ19QR0FMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogZXh0ZXJuIHZvaWQgX19iYWRfcHRlKHBtZF90ICpwbWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKaW5kZXggNTcwYjM1NS4uOWNiODM2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCkBAIC00LDcgKzQsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9kbWEuaCBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfZG1hLmgKaW5kZXggNDZhMDg2Zi4uOTM1ZDFlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X2RtYS5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZuZGVmIF9fQVNNUFBDX1BQQzR4eF9ETUFfSAogI2RlZmluZSBfX0FTTVBQQ19QUEM0eHhfRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfcGljLmggYi9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X3BpYy5oCmluZGV4IGMxNmM3ZjguLmU0NDI2MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfcGljLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9waWMuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZglfX1BQQzRYWF9QSUNfSF9fCiAjZGVmaW5lCV9fUFBDNFhYX1BJQ19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXBwYy9zZXJpYWwuaAppbmRleCBiNzRhZjU0Li44YTU5Zjg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NlcmlhbC5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfX0FTTV9TRVJJQUxfSF9fCiAjZGVmaW5lIF9fQVNNX1NFUklBTF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfRVY2NDI2MCkKICNpbmNsdWRlIDxwbGF0Zm9ybXMvZXY2NDI2MC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NtcC5oIGIvaW5jbHVkZS9hc20tcHBjL3NtcC5oCmluZGV4IDMwZTkyNjguLjBiN2ZhODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvc21wLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX1BQQ19TTVBfSAogI2RlZmluZSBfUFBDX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RpbWUuaCBiL2luY2x1ZGUvYXNtLXBwYy90aW1lLmgKaW5kZXggYzg2MTEyMy4uZjdlYWRmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdGltZS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfX0FTTV9USU1FX0hfXwogI2RlZmluZSBfX0FTTV9USU1FX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaAppbmRleCBjYTA5MmZmLi40ZDJiMTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAgIENvcHlyaWdodCAoQykgMTk5MiwgTGludXMgVG9ydmFsZHMKICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9jbWIuaCBiL2luY2x1ZGUvYXNtLXMzOTAvY21iLmgKaW5kZXggZGFlMWRkNC4uMmQwOTk1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9jbWIuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oCkBAIC00Nyw3ICs0Nyw3IEBACiAvKiByZXNldCBjaGFubmVsIG1lYXN1cmVtZW50IGJsb2NrICovCiAjZGVmaW5lIEJJT0RBU0RSRVNFVENNQgkJX0lPKERBU0RfSU9DVExfTEVUVEVSLDM0KQogLyogcmVhZCBjaGFubmVsIG1lYXN1cmVtZW50IGRhdGEgKi8KLSNkZWZpbmUgQklPREFTRFJFQURDTUIJCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMyLHU2NCkKKyNkZWZpbmUgQklPREFTRFJFQURDTUIJCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMyLF9fdTY0KQogLyogcmVhZCBjaGFubmVsIG1lYXN1cmVtZW50IGRhdGEgKi8KICNkZWZpbmUgQklPREFTRFJFQURBTExDTUIJX0lPV1IoREFTRF9JT0NUTF9MRVRURVIsMzMsc3RydWN0IGNtYmRhdGEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAppbmRleCAyMzQ1MGVkLi43ZjFlZjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBERUJVR19ICiAjZGVmaW5lIERFQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXMzOTAvZnV0ZXguaAppbmRleCA0MGMyNWUxLi4xODAyNzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCkBAIC0xMSwyMyArMTEsMjQgQEAKICNkZWZpbmUgX19mdXRleF9hdG9taWNfZml4dXAgXAogCQkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAogCQkgICAgICIgICAuYWxpZ24gNFxuIgkJCQkJXAotCQkgICAgICIgICAubG9uZyAgMGIsMmIsMWIsMmJcbiIJCQkJXAorCQkgICAgICIgICAubG9uZyAgMGIsNGIsMmIsNGIsM2IsNGJcbiIJCQlcCiAJCSAgICAgIi5wcmV2aW91cyIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19maXh1cCBcCiAJCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCiAJCSAgICAgIiAgIC5hbGlnbiA4XG4iCQkJCQlcCi0JCSAgICAgIiAgIC5xdWFkICAwYiwyYiwxYiwyYlxuIgkJCQlcCisJCSAgICAgIiAgIC5xdWFkICAwYiw0YiwyYiw0YiwzYiw0YlxuIgkJCVwKIAkJICAgICAiLnByZXZpb3VzIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX29wKGluc24sIHJldCwgb2xkdmFsLCBuZXd2YWwsIHVhZGRyLCBvcGFyZykJXAotCWFzbSB2b2xhdGlsZSgiICAgbCAgICUxLDAoJTYpXG4iCQkJCVwKLQkJICAgICAiMDogIiBpbnNuCQkJCQkJXAotCQkgICAgICIgICBjcyAgJTEsJTIsMCglNilcbiIJCQkJXAotCQkgICAgICIxOiBqbCAgMGJcbiIJCQkJCVwKKwlhc20gdm9sYXRpbGUoIiAgIHNhY2YgMjU2XG4iCQkJCQlcCisJCSAgICAgIjA6IGwgICAlMSwwKCU2KVxuIgkJCQlcCisJCSAgICAgIjE6ICIgaW5zbgkJCQkJCVwKKwkJICAgICAiMjogY3MgICUxLCUyLDAoJTYpXG4iCQkJCVwKKwkJICAgICAiMzogamwgIDFiXG4iCQkJCQlcCiAJCSAgICAgIiAgIGxoaSAlMCwwXG4iCQkJCQlcCi0JCSAgICAgIjI6XG4iCQkJCQkJXAorCQkgICAgICI0OiBzYWNmIDBcbiIJCQkJCVwKIAkJICAgICBfX2Z1dGV4X2F0b21pY19maXh1cAkJCQlcCiAJCSAgICAgOiAiPWQiIChyZXQpLCAiPSZkIiAob2xkdmFsKSwgIj0mZCIgKG5ld3ZhbCksCVwKIAkJICAgICAgICI9bSIgKCp1YWRkcikJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKaW5kZXggNjc5MmM1NS4uZTg0YjdlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9oYXJkaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaWRhbHMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvaWRhbHMuaAppbmRleCA4MDM4ODU4Li5lODJjMTBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2lkYWxzLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9pZGFscy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9TMzkwX0lEQUxTX0gKICNkZWZpbmUgX1MzOTBfSURBTFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb2NhbC5oIGIvaW5jbHVkZS9hc20tczM5MC9sb2NhbC5oCmluZGV4IGNmODE4OTAuLjg2NzQ1YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2xvY2FsLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTE9DQUxfSAogI2RlZmluZSBfQVNNX0xPQ0FMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAppbmRleCBkYjA2MDZjLi41OTZjOGIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaApAQCAtOTgsOCArOTgsOCBAQAogI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweEQ1OAogI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4RDYwCiAjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sgICAgICAgICAgICAgICAgMHhENjgKLSNkZWZpbmUgX19MQ19DUFVJRCAgICAgICAgICAgICAgICAgICAgICAweEQ5MAotI2RlZmluZSBfX0xDX0NQVUFERFIgICAgICAgICAgICAgICAgICAgIDB4RDk4CisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweEQ4MAorI2RlZmluZSBfX0xDX0NQVUFERFIJCQkweEQ4OAogI2RlZmluZSBfX0xDX0lQTERFViAgICAgICAgICAgICAgICAgICAgIDB4REI4CiAjZGVmaW5lIF9fTENfSklGRllfVElNRVIJCTB4REMwCiAjZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4REQ4CkBAIC0xMjQsNyArMTI0LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zaWdwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oCmluZGV4IDNiMTEzOGEuLmIyNjI4ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfUzM5MF9QQUdFX0gKICNkZWZpbmUgX1MzOTBfUEFHRV9ICiAKLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KQEAgLTIwLDYgKzE5LDcgQEAKICNkZWZpbmUgUEFHRV9ERUZBVUxUX0tFWQkoUEFHRV9ERUZBVUxUX0FDQyA8PCA0KQogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2lmbmRlZiBfX3MzOTB4X18KQEAgLTE4OSw5ICsxODksOSBAQAogI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCiAJCQkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCiAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZiAvKiBfUzM5MF9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKaW5kZXggZTI4YWFmMi4uMzAwMmZkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX1MzOTBfUEdBTExPQ19ICiAjZGVmaW5lIF9TMzkwX1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zMzkwL3Bvc2l4X3R5cGVzLmgKaW5kZXggNjE3ODhkZS4uYjk0Yzk4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcG9zaXhfdHlwZXMuaApAQCAtNzYsMjQgKzc2LDM2IEBACiB9IF9fa2VybmVsX2ZzaWRfdDsKIAogCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorI2lmZGVmIF9fS0VSTkVMX18KIAotI2lmbmRlZiBfUzM5MF9CSVRPUFNfSAotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KLSNlbmRpZgorI3VuZGVmIF9fRkRfU0VUCitzdGF0aWMgaW5saW5lIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSB8PSAoMVVMPDxfcmVtKTsKK30KIAotI3VuZGVmICBfX0ZEX1NFVAotI2RlZmluZSBfX0ZEX1NFVChmZCxmZHNldHApICBzZXRfYml0KChmZCksKGZkc2V0cCktPmZkc19iaXRzKQorI3VuZGVmIF9fRkRfQ0xSCitzdGF0aWMgaW5saW5lIHZvaWQgX19GRF9DTFIodW5zaWduZWQgbG9uZyBmZCwgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJZmRzZXRwLT5mZHNfYml0c1tfdG1wXSAmPSB+KDFVTDw8X3JlbSk7Cit9CiAKLSN1bmRlZiAgX19GRF9DTFIKLSNkZWZpbmUgX19GRF9DTFIoZmQsZmRzZXRwKSAgY2xlYXJfYml0KChmZCksKGZkc2V0cCktPmZkc19iaXRzKQotCi0jdW5kZWYgIF9fRkRfSVNTRVQKLSNkZWZpbmUgX19GRF9JU1NFVChmZCxmZHNldHApICB0ZXN0X2JpdCgoZmQpLChmZHNldHApLT5mZHNfYml0cykKKyN1bmRlZiBfX0ZEX0lTU0VUCitzdGF0aWMgaW5saW5lIGludCBfX0ZEX0lTU0VUKHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IF9fa2VybmVsX2ZkX3NldCAqZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX3RtcCA9IGZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX3JlbSA9IGZkICUgX19ORkRCSVRTOworCXJldHVybiAoZmRzZXRwLT5mZHNfYml0c1tfdG1wXSAmICgxVUw8PF9yZW0pKSAhPSAwOworfQogCiAjdW5kZWYgIF9fRkRfWkVSTwotI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKSAobWVtc2V0ICgoZmRzZXRwKSwgMCwgc2l6ZW9mKCooZmRfc2V0ICopKGZkc2V0cCkpKSkKKyNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkgXAorCSgodm9pZCkgbWVtc2V0ICgoX19wdHJfdCkgKGZkc2V0cCksIDAsIHNpemVvZiAoX19rZXJuZWxfZmRfc2V0KSkpCiAKLSNlbmRpZiAgICAgLyogZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKSovCisjZW5kaWYgICAgIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaAppbmRleCBhOTQ5Y2MwLi40ZDc1ZDc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmgKQEAgLTE4MSwxMSArMTgxLDggQEAKICNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgICAgICAgICAyMQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogdHlwZWRlZiB1bmlvbgogewpAQCAtMzAxLDYgKzI5OCw5IEBACiB9IHMzOTBfcmVnczsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCiAvKgogICogVGhlIHB0X3JlZ3Mgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24KICAqIHRoZSBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2ZwLW1hY2hpbmUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2ZwLW1hY2hpbmUuaAppbmRleCAzYzc5YjUzLi5kZTY5ZGZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zZnAtbWFjaGluZS5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaWZuZGVmIF9TRlBfTUFDSElORV9ICiAjZGVmaW5lIF9TRlBfTUFDSElORV9ICiAgICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTMyCiAjZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc21wLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCmluZGV4IDQ0NGRhZTUuLjY1NzY0NjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCmluZGV4IDZhODlkYmIuLjcxYTA3MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9TWVNURU1fSAogI2RlZmluZSBfX0FTTV9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oCmluZGV4IDFiYjczYjAuLjczY2Q4NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9TMzkwX1RMQkZMVVNIX0gKICNkZWZpbmUgX1MzOTBfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdHlwZXMuaAppbmRleCA1NzM4YWQ2My4uYWUyOTUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdHlwZXMuaApAQCAtNTgsNyArNTgsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgc2lnbmVkIGNoYXIgczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAppbmRleCA0MWMyNzkyLi5lMjE0NDNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKQEAgLTM5Miw2ICszOTIsOCBAQAogCiAjZW5kaWYKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjI6IHNlZSA8YXNtLXMzOTAvZXJybm8uaD4gKi8KIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykJCQkgICAgIFwKQEAgLTU0Niw3ICs1NDgsNiBAQAogCV9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJICAgICBcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQpAQCAtNTczLDExICs1NzQsOSBAQAogIyAgIGRlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKICMgICBkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19SVF9TSUdTVVNQRU5ECiAjIGVuZGlmCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC02MjUsNyArNjI0LDcgQEAKIAkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKIAkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTYzNSw0ICs2MzQsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1MzOTBfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3Z0b2MuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdnRvYy5oCmluZGV4IGQxZGU1YjcuLjNhNTI2N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdnRvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdnRvYy5oCkBAIC0xNzcsMjcgKzE3NywyNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCB2dG9jX2Ntc19sYWJlbCB7Ci0JdTggbGFiZWxfaWRbNF07CQkvKiBMYWJlbCBpZGVudGlmaWVyICovCi0JdTggdm9sX2lkWzZdOwkJLyogVm9saWQgKi8KLQl1MTYgdmVyc2lvbl9pZDsJCS8qIFZlcnNpb24gaWRlbnRpZmllciAqLwotCXUzMiBibG9ja19zaXplOwkJLyogRGlzayBibG9jayBzaXplICovCi0JdTMyIG9yaWdpbl9wdHI7CQkvKiBEaXNrIG9yaWdpbiBwb2ludGVyICovCi0JdTMyIHVzYWJsZV9jb3VudDsJLyogTnVtYmVyIG9mIHVzYWJsZSBjeWxpbmRlcnMvYmxvY2tzICovCi0JdTMyIGZvcm1hdHRlZF9jb3VudDsJLyogTWF4aW11bSBudW1iZXIgb2YgZm9ybWF0dGVkIGN5bGluZGVycy8KKwlfX3U4IGxhYmVsX2lkWzRdOwkJLyogTGFiZWwgaWRlbnRpZmllciAqLworCV9fdTggdm9sX2lkWzZdOwkJLyogVm9saWQgKi8KKwlfX3UxNiB2ZXJzaW9uX2lkOwkJLyogVmVyc2lvbiBpZGVudGlmaWVyICovCisJX191MzIgYmxvY2tfc2l6ZTsJCS8qIERpc2sgYmxvY2sgc2l6ZSAqLworCV9fdTMyIG9yaWdpbl9wdHI7CQkvKiBEaXNrIG9yaWdpbiBwb2ludGVyICovCisJX191MzIgdXNhYmxlX2NvdW50OwkvKiBOdW1iZXIgb2YgdXNhYmxlIGN5bGluZGVycy9ibG9ja3MgKi8KKwlfX3UzMiBmb3JtYXR0ZWRfY291bnQ7CS8qIE1heGltdW0gbnVtYmVyIG9mIGZvcm1hdHRlZCBjeWxpbmRlcnMvCiAJCQkJICogYmxvY2tzICovCi0JdTMyIGJsb2NrX2NvdW50OwkvKiBEaXNrIHNpemUgaW4gQ01TIGJsb2NrcyAqLwotCXUzMiB1c2VkX2NvdW50OwkJLyogTnVtYmVyIG9mIENNUyBibG9ja3MgaW4gdXNlICovCi0JdTMyIGZzdF9zaXplOwkJLyogRmlsZSBTdGF0dXMgVGFibGUgKEZTVCkgc2l6ZSAqLwotCXUzMiBmc3RfY291bnQ7CQkvKiBOdW1iZXIgb2YgRlNUcyBwZXIgQ01TIGJsb2NrICovCi0JdTggZm9ybWF0X2RhdGVbNl07CS8qIERpc2sgRk9STUFUIGRhdGUgKi8KLQl1OCByZXNlcnZlZDFbMl07Ci0JdTMyIGRpc2tfb2Zmc2V0OwkvKiBEaXNrIG9mZnNldCB3aGVuIHJlc2VydmVkKi8KLQl1MzIgbWFwX2Jsb2NrOwkJLyogQWxsb2NhdGlvbiBNYXAgQmxvY2sgd2l0aCBuZXh0IGhvbGUgKi8KLQl1MzIgaGJsa19kaXNwOwkJLyogRGlzcGxhY2VtZW50IGludG8gSEJMSyBkYXRhIG9mIG5leHQgaG9sZSAqLwotCXUzMiB1c2VyX2Rpc3A7CQkvKiBEaXNwbGFjZW1lbnQgaW50byB1c2VyIHBhcnQgb2YgQWxsb2NhdGlvbgorCV9fdTMyIGJsb2NrX2NvdW50OwkvKiBEaXNrIHNpemUgaW4gQ01TIGJsb2NrcyAqLworCV9fdTMyIHVzZWRfY291bnQ7CQkvKiBOdW1iZXIgb2YgQ01TIGJsb2NrcyBpbiB1c2UgKi8KKwlfX3UzMiBmc3Rfc2l6ZTsJCS8qIEZpbGUgU3RhdHVzIFRhYmxlIChGU1QpIHNpemUgKi8KKwlfX3UzMiBmc3RfY291bnQ7CQkvKiBOdW1iZXIgb2YgRlNUcyBwZXIgQ01TIGJsb2NrICovCisJX191OCBmb3JtYXRfZGF0ZVs2XTsJLyogRGlzayBGT1JNQVQgZGF0ZSAqLworCV9fdTggcmVzZXJ2ZWQxWzJdOworCV9fdTMyIGRpc2tfb2Zmc2V0OwkvKiBEaXNrIG9mZnNldCB3aGVuIHJlc2VydmVkKi8KKwlfX3UzMiBtYXBfYmxvY2s7CQkvKiBBbGxvY2F0aW9uIE1hcCBCbG9jayB3aXRoIG5leHQgaG9sZSAqLworCV9fdTMyIGhibGtfZGlzcDsJCS8qIERpc3BsYWNlbWVudCBpbnRvIEhCTEsgZGF0YSBvZiBuZXh0IGhvbGUgKi8KKwlfX3UzMiB1c2VyX2Rpc3A7CQkvKiBEaXNwbGFjZW1lbnQgaW50byB1c2VyIHBhcnQgb2YgQWxsb2NhdGlvbgogCQkJCSAqIG1hcCAqLwotCXU4IHJlc2VydmVkMls0XTsKLQl1OCBzZWdtZW50X25hbWVbOF07CS8qIE5hbWUgb2Ygc2hhcmVkIHNlZ21lbnQgKi8KKwlfX3U4IHJlc2VydmVkMls0XTsKKwlfX3U4IHNlZ21lbnRfbmFtZVs4XTsJLyogTmFtZSBvZiBzaGFyZWQgc2VnbWVudCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZiAvKiBfQVNNX1MzOTBfVlRPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3o5MGNyeXB0LmggYi9pbmNsdWRlL2FzbS1zMzkwL3o5MGNyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhMjQzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvejkwY3J5cHQuaApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3o5MGNyeXB0LmgKKyAqCisgKiAgejkwY3J5cHQgMS4zLjMgKHVzZXItdmlzaWJsZSBoZWFkZXIpCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKiAgICAgICAgICAgICBFcmljIFJvc3NtYW4gKGVkcm9zc21hQHVzLmlibS5jb20pCisgKgorICogIEhvdHBsdWcgJiBtaXNjIGRldmljZSBzdXBwb3J0OiBKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9TMzkwX1o5MENSWVBUX0gKKyNkZWZpbmUgX19BU01fUzM5MF9aOTBDUllQVF9ICisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSB6OTBjcnlwdF9WRVJTSU9OIDEKKyNkZWZpbmUgejkwY3J5cHRfUkVMRUFTRSAzCS8vIDIgPSBQQ0lYQ0MsIDMgPSByZXdyaXRlIGZvciBjb2Rpbmcgc3RhbmRhcmRzCisjZGVmaW5lIHo5MGNyeXB0X1ZBUklBTlQgMwkvLyAzID0gQ0VYMkEgc3VwcG9ydAorCisvKioKKyAqIHN0cnVjdCBpY2FfcnNhX21vZGV4cG8KKyAqCisgKiBSZXF1aXJlbWVudHM6CisgKiAtIG91dHB1dGRhdGFsZW5ndGggaXMgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgaW5wdXRkYXRhbGVuZ3RoLgorICogLSBBbGwga2V5IHBhcnRzIGFyZSByaWdodCBqdXN0aWZpZWQgaW4gdGhlaXIgZmllbGRzLCBwYWRkZWQgb24KKyAqICAgdGhlIGxlZnQgd2l0aCB6ZXJvZXMuCisgKiAtIGxlbmd0aChiX2tleSkgPSBpbnB1dGRhdGFsZW5ndGgKKyAqIC0gbGVuZ3RoKG5fbW9kdWx1cykgPSBpbnB1dGRhdGFsZW5ndGgKKyAqLworc3RydWN0IGljYV9yc2FfbW9kZXhwbyB7CisJY2hhciBfX3VzZXIgKglpbnB1dGRhdGE7CisJdW5zaWduZWQgaW50CWlucHV0ZGF0YWxlbmd0aDsKKwljaGFyIF9fdXNlciAqCW91dHB1dGRhdGE7CisJdW5zaWduZWQgaW50CW91dHB1dGRhdGFsZW5ndGg7CisJY2hhciBfX3VzZXIgKgliX2tleTsKKwljaGFyIF9fdXNlciAqCW5fbW9kdWx1czsKK307CisKKy8qKgorICogc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQKKyAqCisgKiBSZXF1aXJlbWVudHM6CisgKiAtIGlucHV0ZGF0YWxlbmd0aCBpcyBldmVuLgorICogLSBvdXRwdXRkYXRhbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGlucHV0ZGF0YWxlbmd0aC4KKyAqIC0gQWxsIGtleSBwYXJ0cyBhcmUgcmlnaHQganVzdGlmaWVkIGluIHRoZWlyIGZpZWxkcywgcGFkZGVkIG9uCisgKiAgIHRoZSBsZWZ0IHdpdGggemVyb2VzLgorICogLSBsZW5ndGgoYnBfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAorICogLSBsZW5ndGgoYnFfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yCisgKiAtIGxlbmd0aChucF9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4CisgKiAtIGxlbmd0aChucV9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIKKyAqIC0gbGVuZ3RoKHVfbXVsdF9pbnYpID0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4CisgKi8KK3N0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0IHsKKwljaGFyIF9fdXNlciAqCWlucHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOworCWNoYXIgX191c2VyICoJb3V0cHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKKwljaGFyIF9fdXNlciAqCWJwX2tleTsKKwljaGFyIF9fdXNlciAqCWJxX2tleTsKKwljaGFyIF9fdXNlciAqCW5wX3ByaW1lOworCWNoYXIgX191c2VyICoJbnFfcHJpbWU7CisJY2hhciBfX3VzZXIgKgl1X211bHRfaW52OworfTsKKworI2RlZmluZSBaOTBfSU9DVExfTUFHSUMgJ3onICAvLyBOT1RFOiAgTmVlZCB0byBhbGxvY2F0ZSBmcm9tIGxpbnV4IGZvbGtzCisKKy8qKgorICogSW50ZXJmYWNlIG5vdGVzOgorICoKKyAqIFRoZSBpb2N0bCgpcyB3aGljaCBhcmUgaW1wbGVtZW50ZWQgKGFsb25nIHdpdGggcmVsZXZhbnQgZGV0YWlscykKKyAqIGFyZToKKyAqCisgKiAgIElDQVJTQU1PREVYUE8KKyAqICAgICBQZXJmb3JtIGFuIFJTQSBvcGVyYXRpb24gdXNpbmcgYSBNb2R1bHVzLUV4cG9uZW50IHBhaXIKKyAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwbyBzdHJ1Y3QgYXMgaXRzIGFyZy4KKyAqCisgKiAgICAgTk9URTogcGxlYXNlIHJlZmVyIHRvIHRoZSBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICBibG9jaworICoKKyAqICAgSUNBUlNBQ1JUCisgKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgQ2hpbmVzZS1SZW1haW5kZXIgVGhlb3JlbSBrZXkKKyAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwb19jcnQgc3RydWN0IGFzIGl0cyBhcmcuCisgKgorICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCisgKiAgICAgICAgICAgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY29udGVudHMgb2YgdGhlCisgKiAgICAgICAgICAgYmxvY2sKKyAqCisgKiAgIFo5MFNUQVRfVE9UQUxDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBkZXZpY2UgdHlwZXMgdG9nZXRoZXIuCisgKgorICogICBaOTBTVEFUX1BDSUNBQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJQ0FzLgorICoKKyAqICAgWjkwU1RBVF9QQ0lDQ0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNDcy4KKyAqCisgKiAgIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDIgUENJWENDcy4KKyAqCisgKiAgIFo5MFNUQVRfUENJWENDTUNMM0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDMgUENJWENDcy4KKyAqCisgKiAgIFo5MFNUQVRfQ0VYMkNDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBDRVgyQ3MuCisgKgorICogICBaOTBTVEFUX0NFWDJBQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkFzLgorICoKKyAqICAgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyB3YWl0aW5nIHRvIGJlCisgKiAgICAgc2VudCB0byBhIGRldmljZS4KKyAqCisgKiAgIFo5MFNUQVRfUEVORElOR1FfQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2VudCB0byBhCisgKiAgICAgZGV2aWNlIGF3YWl0aW5nIHRoZSByZXBseS4KKyAqCisgKiAgIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgaGFuZGxlcy4KKyAqCisgKiAgIFo5MFNUQVRfRE9NQUlOX0lOREVYCisgKiAgICAgUmV0dXJuIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBDcnlwdG9ncmFwaGljIERvbWFpbi4KKyAqCisgKiAgIFo5MFNUQVRfU1RBVFVTX01BU0sKKyAqICAgICBSZXR1cm4gYW4gNjQgZWxlbWVudCBhcnJheSBvZiB1bnNpZ25lZCBjaGFycyBmb3IgdGhlIHN0YXR1cyBvZgorICogICAgIGFsbCBkZXZpY2VzLgorICogICAgICAgMHgwMTogUENJQ0EKKyAqICAgICAgIDB4MDI6IFBDSUNDCisgKiAgICAgICAweDAzOiBQQ0lYQ0NfTUNMMgorICogICAgICAgMHgwNDogUENJWENDX01DTDMKKyAqICAgICAgIDB4MDU6IENFWDJDCisgKiAgICAgICAweDA2OiBDRVgyQQorICogICAgICAgMHgwZDogZGV2aWNlIGlzIGRpc2FibGVkIHZpYSB0aGUgcHJvYyBmaWxlc3lzdGVtCisgKgorICogICBaOTBTVEFUX1FERVBUSF9NQVNLCisgKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgY2hhcnMgZm9yIHRoZSBxdWV1ZQorICogICAgIGRlcHRoIG9mIGFsbCBkZXZpY2VzLgorICoKKyAqICAgWjkwU1RBVF9QRVJERVZfUkVRQ05UCisgKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlcnMgZm9yIHRoZSBudW1iZXIKKyAqICAgICBvZiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3RzIHBlciBkZXZpY2Ugc2luY2UgdGhlIGRldmljZQorICogICAgIHdhcyBkZXRlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUuCisgKgorICogICBJQ0FaOTBTVEFUVVMgKGRlcHJlY2F0ZWQpCisgKiAgICAgUmV0dXJuIHNvbWUgZGV2aWNlIGRyaXZlciBzdGF0dXMgaW4gYSBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QKKyAqICAgICBUaGlzIHRha2VzIGFuIGljYV96OTBfc3RhdHVzIHN0cnVjdCBhcyBpdHMgYXJnLgorICoKKyAqICAgICBOT1RFOiB0aGlzIGlvY3RsKCkgaXMgZGVwcmVjYXRlZCwgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKKyAqICAgICAgICAgICBzaW5nbGUgaW9jdGwoKXMgZm9yIGVhY2ggdHlwZSBvZiBzdGF0dXMgYmVpbmcgcmVxdWVzdGVkCisgKgorICogICBaOTBTVEFUX1BDSVhDQ0NPVU5UIChkZXByZWNhdGVkKQorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lYQ0NzIChNQ0wyICsgTUNMMykuCisgKiAgICAgVGhpcyBpcyBERVBSRUNBVEVEIG5vdyB0aGF0IE1DTDMgUENJWENDcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBmcm9tCisgKiAgICAgTUNMMiBQQ0lYQ0NzLgorICoKKyAqICAgWjkwUVVJRVNDRSAobm90IHJlY29tbWVuZGVkKQorICogICAgIFF1aWVzY2UgdGhlIGRyaXZlci4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gc3RvcCBhbGwgbmV3CisgKiAgICAgcmVxdWVzdHMgZnJvbSBiZWluZyBwcm9jZXNzZWQuICBJdHMgdXNlIGlzIE5PVCByZWNvbW1lbmRlZCwKKyAqICAgICBleGNlcHQgaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGVyZSBpcyBubyBvdGhlciB3YXkgdG8gc3RvcAorICogICAgIGNhbGxlcnMgZnJvbSBhY2Nlc3NpbmcgdGhlIGRyaXZlci4gIEl0cyBvcmlnaW5hbCB1c2Ugd2FzIHRvCisgKiAgICAgYWxsb3cgdGhlIGRyaXZlciB0byBiZSAiZHJhaW5lZCIgb2Ygd29yayBpbiBwcmVwYXJhdGlvbiBmb3IKKyAqICAgICBhIHN5c3RlbSBzaHV0ZG93bi4KKyAqCisgKiAgICAgTk9URTogb25jZSBpc3N1ZWQsIHRoaXMgYmFuIG9uIG5ldyB3b3JrIGNhbm5vdCBiZSB1bmRvbmUKKyAqICAgICAgICAgICBleGNlcHQgYnkgdW5sb2FkaW5nIGFuZCByZWxvYWRpbmcgdGhlIGRyaXZlci4KKyAqLworCisvKioKKyAqIFN1cHBvcnRlZCBpb2N0bCBjYWxscworICovCisjZGVmaW5lIElDQVJTQU1PREVYUE8JX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA1LCAwKQorI2RlZmluZSBJQ0FSU0FDUlQJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA2LCAwKQorCisvKiBERVBSRUNBVEVEIHN0YXR1cyBjYWxscyAoYm91bmQgZm9yIHJlbW92YWwgYXQgc29tZSBwb2ludCkgKi8KKyNkZWZpbmUgSUNBWjkwU1RBVFVTCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDEwLCBzdHJ1Y3QgaWNhX3o5MF9zdGF0dXMpCisjZGVmaW5lIFo5MFNUQVRfUENJWENDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDMsIGludCkKKworLyogdW5yZWxhdGVkIHRvIElDQSBjYWxsZXJzICovCisjZGVmaW5lIFo5MFFVSUVTQ0UJX0lPKFo5MF9JT0NUTF9NQUdJQywgMHgxMSkKKworLyogTmV3IHN0YXR1cyBjYWxscyAqLworI2RlZmluZSBaOTBTVEFUX1RPVEFMQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDAsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9QQ0lDQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQxLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUENJQ0NDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MiwgaW50KQorI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YiwgaW50KQorI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YywgaW50KQorI2RlZmluZSBaOTBTVEFUX0NFWDJDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGQsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9DRVgyQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRlLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDQsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NSwgaW50KQorI2RlZmluZSBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVCBfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NiwgaW50KQorI2RlZmluZSBaOTBTVEFUX0RPTUFJTl9JTkRFWAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NywgaW50KQorI2RlZmluZSBaOTBTVEFUX1NUQVRVU19NQVNLCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ4LCBjaGFyWzY0XSkKKyNkZWZpbmUgWjkwU1RBVF9RREVQVEhfTUFTSwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0OSwgY2hhcls2NF0pCisjZGVmaW5lIFo5MFNUQVRfUEVSREVWX1JFUUNOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YSwgaW50WzY0XSkKKworI2VuZGlmIC8qIF9fQVNNX1MzOTBfWjkwQ1JZUFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYnVnLmggYi9pbmNsdWRlL2FzbS1zaC9idWcuaAppbmRleCA3MDUwOGEzLi4xYjRmYzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9idWcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU0hfQlVHX0gKICNkZWZpbmUgX19BU01fU0hfQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCmluZGV4IDVlYmQwZjIuLmZhMDNiMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaApAQCAtOSw3ICs5LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBieSBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKaW5kZXggNDhmMWY0Mi4uMTI0OTY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TSF9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9fQVNNX1NIX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+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+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCmluZGV4IGM0NGU3NDYuLjRlMjE4ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCkBAIC0xNCw3ICsxNCw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgpAQCAtNjg5LDYgKzY4OCwyMyBAQAogI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQkJXAogCXNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDBVTCkpCiAKKyNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTU9WRV9QVEUKKyNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpCQkJCVwKKyh7CQkJCQkJCQkJXAorIAlwdGVfdCBuZXdwdGUgPSAocHRlKTsJCQkJCQlcCisJaWYgKHRsYl90eXBlICE9IGh5cGVydmlzb3IgJiYgcHRlX3ByZXNlbnQocHRlKSkgewkJXAorCQl1bnNpZ25lZCBsb25nIHRoaXNfcGZuID0gcHRlX3BmbihwdGUpOwkJCVwKKwkJCQkJCQkJCVwKKwkJaWYgKHBmbl92YWxpZCh0aGlzX3BmbikgJiYJCQkJXAorCQkgICAgKCgob2xkX2FkZHIpIF4gKG5ld19hZGRyKSkgJiAoMSA8PCAxMykpKQkJXAorCQkJZmx1c2hfZGNhY2hlX3BhZ2VfYWxsKGN1cnJlbnQtPm1tLAkJXAorCQkJCQkgICAgICBwZm5fdG9fcGFnZSh0aGlzX3BmbikpOwlcCisJfQkJCQkJCQkJXAorCW5ld3B0ZTsJCQkJCQkJCVwKK30pCisjZW5kaWYKKwogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzIwNDhdOwogZXh0ZXJuIHBtZF90IHN3YXBwZXJfbG93X3BtZF9kaXJbMjA0OF07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCmluZGV4IGM2ODk2YjguLjY2ZGQyZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaApAQCAtMTMsNyArMTMsNiBAQAogICovCiAjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IF9fYXNtX18oInJkICUlcGMsICUwIiA6ICI9ciIgKHBjKSk7IHBjOyB9KQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9hLm91dC5oPgogI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnaW5mby5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmgKaW5kZXggZGYxN2U0Ny4uYzk2ZTZjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKaW5kZXggZTMwNTliYi4uZmRjNDJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oCkBAIC02LDcgKzYsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaAppbmRleCA4OWQ4NmVjLi4zODgyNDliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9TUEFSQzY0X1NNUF9ICiAjZGVmaW5lIF9TUEFSQzY0X1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oCmluZGV4IDUwOGM0MTYuLmJkNWZmYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9fU1BBUkM2NF9TUElOTE9DS19ICiAjZGVmaW5lIF9fU1BBUkM2NF9TUElOTE9DS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CS8qIEZvciBOUl9DUFVTICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaAppbmRleCBhMThlYzg3Li40Y2E2ODYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9fU1BBUkM2NF9TWVNURU1fSAogI2RlZmluZSBfX1NQQVJDNjRfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3Zpc2FzbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oCmluZGV4IGVkYzhlMDguLmQ0MzU1OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmgKQEAgLTksNyArOSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBzcGFyYzY0X3RpY2tfb3BzIHsKIAl2b2lkICgqaW5pdF90aWNrKSh1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYi5oCmluZGV4IDYxYzAxODguLjdhZjFlMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfVExCX0gKICNkZWZpbmUgX1NQQVJDNjRfVExCX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCmluZGV4IGUzYTdjNDUuLjM0ODczMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9TUEFSQzY0X1RMQkZMVVNIX0gKICNkZWZpbmUgX1NQQVJDNjRfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKaW5kZXggMmQ1ZTNjNC4uZjIzNTI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9UVEFCTEVfSAogI2RlZmluZSBfU1BBUkM2NF9UVEFCTEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3V0cmFwLmg+CiAKICNpZmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCmluZGV4IDk5OGVmNGEuLmJhZGM3M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaApAQCAtMzIxLDYgKzMyMSw3IEBACiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkzMDEKIAorI2lmZGVmIF9fS0VSTkVMX18KIC8qIFdBUk5JTkc6IFlvdSBNQVkgTk9UIGFkZCBzeXNjYWxsIG51bWJlcnMgbGFyZ2VyIHRoYW4gMzAxLCBzaW5jZQogICogICAgICAgICAgYWxsIG9mIHRoZSBzeXNjYWxsIHRhYmxlcyBpbiB0aGUgU3BhcmMga2VybmVsIGFyZQogICogICAgICAgICAgc2l6ZWQgdG8gaGF2ZSAzMDEgZW50cmllcyAoc3RhcnRpbmcgYXQgemVybykuICBUaGVyZWZvcmUKQEAgLTQ4Nyw3ICs0ODgsNiBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCi0jaWZkZWYgX19LRVJORUxfXwogLyogc3lzY29uZiBvcHRpb25zLCBmb3IgU3VuT1MgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSAgIF9TQ19BUkdfTUFYICAgICAgICAgICAgIDEKICNkZWZpbmUgICBfU0NfQ0hJTERfTUFYICAgICAgICAgICAyCkBAIC01MjEsNyArNTIxLDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECiAjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfUlRfU0lHU1VTUEVORAotI2VuZGlmCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01MzEsNCArNTMwLDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX1NQQVJDNjRfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2Eub3V0LmggYi9pbmNsdWRlL2FzbS11bS9hLm91dC5oCmluZGV4IDdjMjYyNjUuLjUwY2VlN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2Eub3V0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vYS5vdXQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19VTV9BX09VVF9ICiAjZGVmaW5lIF9fVU1fQV9PVVRfSAogCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAiYXNtL2FyY2gvYS5vdXQuaCIKICNpbmNsdWRlICJjaG9vc2UtbW9kZS5oIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9jYWNoZS5oIGIvaW5jbHVkZS9hc20tdW0vY2FjaGUuaAppbmRleCAzZDA1ODcwLi4xOWUxYmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2NhY2hlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fVU1fQ0FDSEVfSAogI2RlZmluZSBfX1VNX0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfVU1MX1g4NikgJiYgIWRlZmluZWQoQ09ORklHXzY0QklUKQogIyBkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCShDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCmluZGV4IDI5OThjZjkuLjk5NzExMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2VsZi1wcGMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fVU1fRUxGX1BQQ19ICiAjZGVmaW5lIF9fVU1fRUxGX1BQQ19ICiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKIAogZXh0ZXJuIGxvbmcgZWxmX2F1eF9od2NhcDsKICNkZWZpbmUgRUxGX0hXQ0FQIChlbGZfYXV4X2h3Y2FwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZml4bWFwLmggYi9pbmNsdWRlL2FzbS11bS9maXhtYXAuaAppbmRleCBhZTBjYTM5Li5kMzUyYTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS11bS9maXhtYXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19VTV9GSVhNQVBfSAogI2RlZmluZSBfX1VNX0ZJWE1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNocGFyYW0uaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS11bS9oYXJkaXJxLmgKaW5kZXggMTIyNGIyNi4uMzEzZWJiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2hhcmRpcnEuaApAQCAtMyw3ICszLDYgQEAKICNpZm5kZWYgX19BU01fVU1fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX1VNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9pcnFmbGFncy5oIGIvaW5jbHVkZS9hc20tdW0vaXJxZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTliOWFiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tdW0vaXJxZmxhZ3MuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX19VTV9JUlFGTEFHU19ICisjZGVmaW5lIF9fVU1fSVJRRkxBR1NfSAorCisvKiBFbXB0eSBmb3Igbm93ICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tdW0vbGlua2FnZS5oCmluZGV4IGUzZDYyZGMuLjc4Yjg2MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaAorKysgYi9pbmNsdWRlL2FzbS11bS9saW5rYWdlLmgKQEAgLTMsNyArMyw2IEBACiAKICNpbmNsdWRlICJhc20vYXJjaC9saW5rYWdlLmgiCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogPGxpbnV4L2xpbmthZ2UuaD4gd2lsbCBwaWNrIHNhbmUgZGVmYXVsdHMgKi8KICNpZmRlZiBDT05GSUdfR1BST0YKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS11bS9tbXVfY29udGV4dC5oCmluZGV4IDlhMGU0OGUuLmY3MDljNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vbW11X2NvbnRleHQuaApAQCAtNyw3ICs3LDYgQEAKICNkZWZpbmUgX19VTV9NTVVfQ09OVEVYVF9ICiAKICNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgotI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAjaW5jbHVkZSAidW1fbW11LmgiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaAppbmRleCA0MTM2NDMzLi40Mjk2ZDMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vcGFnZS5oCkBAIC05LDcgKzksNiBAQAogCiBzdHJ1Y3QgcGFnZTsKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS92bS1mbGFncy5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tdW0vcGdhbGxvYy5oCmluZGV4IGVhNDk0MTEuLjM0YWIyNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wZ2FsbG9jLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fVU1fUEdBTExPQ19ICiAjZGVmaW5lIF9fVU1fUEdBTExPQ19ICiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKICNpbmNsdWRlICJsaW51eC9tbS5oIgogI2luY2x1ZGUgImFzbS9maXhtYXAuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKaW5kZXggZGEwN2E2OS4uODI0YzI4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCkBAIC0xMCw3ICsxMCw2IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAotI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgogI2luY2x1ZGUgImFzbS9wdHJhY2UuaCIKICNpbmNsdWRlICJjaG9vc2UtbW9kZS5oIgogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1nZW5lcmljLmgKaW5kZXggNTAzNDg0My4uYTM2ZjUzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oCkBAIC04LDcgKzgsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAKICNkZWZpbmUgcHRfcmVncyBwdF9yZWdzX3N1YmFyY2gKICNkZWZpbmUgc2hvd19yZWdzIHNob3dfcmVnc19zdWJhcmNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9zbXAuaCBiL2luY2x1ZGUvYXNtLXVtL3NtcC5oCmluZGV4IGFlZGE2NjUuLmNhNTUyMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3NtcC5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAibGludXgvYml0b3BzLmgiCiAjaW5jbHVkZSAiYXNtL2N1cnJlbnQuaCIKICNpbmNsdWRlICJsaW51eC9jcHVtYXNrLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaAppbmRleCBmMTY2Yjk4Li4yNjFlMmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKQEAgLTgsNyArOCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXVtL3VhY2Nlc3MuaAppbmRleCBiZWE1YTAxLi4xNmM3MzRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vdWFjY2Vzcy5oCkBAIC00MSwxMSArNDEsMTEgQEAKIAogI2RlZmluZSBfX2dldF91c2VyKHgsIHB0cikgXAogKHsgXAotCWNvbnN0IF9fdHlwZW9mX18ocHRyKSBfX3ByaXZhdGVfcHRyID0gcHRyOwlcCisJY29uc3QgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wcml2YXRlX3B0ciA9IChwdHIpOwlcCiAJX190eXBlb2ZfXyh4KSBfX3ByaXZhdGVfdmFsOwkJCVwKIAlpbnQgX19wcml2YXRlX3JldCA9IC1FRkFVTFQ7CQkJXAogCSh4KSA9IChfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpKTA7CQkJCVwKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigodm9pZCAqKSAmX19wcml2YXRlX3ZhbCwgKF9fcHJpdmF0ZV9wdHIpLAlcCisJaWYgKF9fY29weV9mcm9tX3VzZXIoKF9fZm9yY2Ugdm9pZCAqKSZfX3ByaXZhdGVfdmFsLCAoX19wcml2YXRlX3B0ciksXAogCQkJICAgICBzaXplb2YoKihfX3ByaXZhdGVfcHRyKSkpID09IDApIHsJCVwKIAkJKHgpID0gKF9fdHlwZW9mX18oKihfX3ByaXZhdGVfcHRyKSkpIF9fcHJpdmF0ZV92YWw7CVwKIAkJX19wcml2YXRlX3JldCA9IDA7CQkJCQlcCkBAIC02Miw3ICs2Miw3IEBACiAKICNkZWZpbmUgX19wdXRfdXNlcih4LCBwdHIpIFwKICh7IFwKLSAgICAgICAgX190eXBlb2ZfXyhwdHIpIF9fcHJpdmF0ZV9wdHIgPSBwdHI7IFwKKyAgICAgICAgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19wcml2YXRlX3B0ciA9IHB0cjsgXAogICAgICAgICBfX3R5cGVvZl9fKCooX19wcml2YXRlX3B0cikpIF9fcHJpdmF0ZV92YWw7IFwKICAgICAgICAgaW50IF9fcHJpdmF0ZV9yZXQgPSAtRUZBVUxUOyBcCiAgICAgICAgIF9fcHJpdmF0ZV92YWwgPSAoX190eXBlb2ZfXygqKF9fcHJpdmF0ZV9wdHIpKSkgKHgpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tdjg1MC9hdG9taWMuaAppbmRleCAxNjZkZjAwLi5lNGU1N2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYXRvbWljLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19WODUwX0FUT01JQ19IX18KICNkZWZpbmUgX19WODUwX0FUT01JQ19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaAppbmRleCAxZjZmZDVhLi4xZmE5OWJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYml0b3BzLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNkZWZpbmUgX19WODUwX0JJVE9QU19IX18KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogdW5saWtlbHkgICovCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkvKiBzd2FiMzIgKi8KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBpbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXY4NTAvZG1hLW1hcHBpbmcuaAppbmRleCBjNjNmYjUwLi4xY2M0MmM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX1Y4NTBfRE1BX01BUFBJTkdfSF9fCiAjZGVmaW5lIF9fVjg1MF9ETUFfTUFQUElOR19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXY4NTAvaGFyZGlycS5oCmluZGV4IGQ5ODQ4OGMuLjA0ZTIwMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX1Y4NTBfSEFSRElSUV9IX18KICNkZWZpbmUgX19WODUwX0hBUkRJUlFfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmggYi9pbmNsdWRlL2FzbS12ODUwL21hY2hkZXAuaAppbmRleCA5OGQ4YmY2Li5mMWUzYjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL21hY2hkZXAuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL21hY2hkZXAuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX1Y4NTBfTUFDSERFUF9IX18KICNkZWZpbmUgX19WODUwX01BQ0hERVBfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogY2hpcHMgKi8KICNpZmRlZiBDT05GSUdfVjg1MEVfTUExCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXY4NTAvcGd0YWJsZS5oCmluZGV4IDNjZjg3NzUuLjFlYTJhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvcGd0YWJsZS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS12ODUwL3Byb2Nlc3Nvci5oCmluZGV4IDJkMzEzMDguLjY5NjViNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9wcm9jZXNzb3IuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX1Y4NTBfUFJPQ0VTU09SX0hfXwogI2RlZmluZSBfX1Y4NTBfUFJPQ0VTU09SX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZuZGVmIF9fQVNTRU1CTFlfXyAvKiA8bGludXgvdGhyZWFkX2luZm8uaD4gaXMgbm90IGFzbS1zYWZlLiAgKi8KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tdjg1MC9zZXJpYWwuaAppbmRleCA4YzJhNjA5Li4zNmQ4ZjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvc2VyaWFsLmgKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgYnkgUmFsZiBCYWVjaGxlCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1JURV9DQl9NRTIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmgKaW5kZXggODI0NjBhNy4uYmNiNDRiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3VuaXN0ZC5oCkBAIC0xNCw4ICsxNCw2IEBACiAjaWZuZGVmIF9fVjg1MF9VTklTVERfSF9fCiAjZGVmaW5lIF9fVjg1MF9VTklTVERfSF9fCiAKLSNpbmNsdWRlIDxhc20vY2xpbmthZ2UuaD4KLQogI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbAkgIDAKICNkZWZpbmUgX19OUl9leGl0CQkgIDEKICNkZWZpbmUgX19OUl9mb3JrCQkgIDIKQEAgLTIzNywxMCArMjM1LDkgQEAKICAgIGV4Y2VwdCB0aGUgc3lzY2FsbCBudW1iZXIgKHIxMikuICAqLwogI2RlZmluZSBTWVNDQUxMX1NIT1JUX0NMT0JCRVJTCVNZU0NBTExfQ0xPQkJFUlMsICJyMTMiLCAicjE0IgogCisjaWZkZWYgX19LRVJORUxfXwogCi0vKiBVc2VyIHByb2dyYW1zIHNvbWV0aW1lcyBlbmQgdXAgaW5jbHVkaW5nIHRoaXMgaGVhZGVyIGZpbGUKLSAgIChpbmRpcmVjdGx5LCB2aWEgdUNsaWJjIGhlYWRlciBmaWxlcyksIHNvIEknbSBhIGJpdCBuZXJ2b3VzIGp1c3QKLSAgIGluY2x1ZGluZyA8bGludXgvY29tcGlsZXIuaD4uICAqLworI2luY2x1ZGUgPGFzbS9jbGlua2FnZS5oPgogCiAjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKQkJCQkJICAgICAgXAogICBkbyB7CQkJCQkJCQkJICAgICAgXApAQCAtMzY4LDcgKzM2NSw2IEBACiB9CiAJCQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKQEAgLTM4OSw3ICszODUsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTQ0MCw3ICs0MzUsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNDU1LDQgKzQ1MCw1IEBACiAgIHZvaWQgbmFtZSAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzICgic3lzX25pX3N5c2NhbGwiKSkpOwogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19WODUwX1VOSVNURF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91YXJ0LmgKaW5kZXggNTkzMGQ1OS4uNTE4MmZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91YXJ0LmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC92ODUwZV91YXJ0LmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpZm5kZWYgX19WODUwX1Y4NTBFX1VBUlRfSF9fCiAjZGVmaW5lIF9fVjg1MF9WODUwRV9VQVJUX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgogCiAjaW5jbHVkZSA8YXNtL3Y4NTBlX3V0aWxzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaAppbmRleCBiZGJkODkzLi5hNzMxYmUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FQSUNfSAogI2RlZmluZSBfX0FTTV9BUElDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmgKaW5kZXggY2VjYmY3Yi4uYmQzZmE2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hdG9taWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BUkNIX1g4Nl82NF9BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfWDg2XzY0X0FUT01JQ19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyogYXRvbWljX3Qgc2hvdWxkIGJlIDMyIGJpdCBzaWduZWQgdHlwZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oCmluZGV4IDc5MjEyMTIuLmU5YmY5MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYml0b3BzLmgKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgMTk5MiwgTGludXMgVG9ydmFsZHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBMT0NLX1BSRUZJWCAibG9jayA7ICIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9idWdzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvYnVncy5oCmluZGV4IDU5YmM2ODkuLmQ4NmM1ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9idWdzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2J1Z3MuaApAQCAtMTAsNyArMTAsNiBAQAogICoJdm9pZCBjaGVja19idWdzKHZvaWQpOwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCmluZGV4IGY4ZGZmMWMuLmVkOGE5ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCkBAIC00LDcgKzQsNiBAQAogI2lmbmRlZiBfX0FSQ0hfWDg2NjRfQ0FDSEVfSAogI2RlZmluZSBfX0FSQ0hfWDg2NjRfQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIEwxIGNhY2hlIGxpbmUgc2l6ZSAqLwogI2RlZmluZSBMMV9DQUNIRV9TSElGVAkoQ09ORklHX1g4Nl9MMV9DQUNIRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxsaW5nLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FsbGluZy5oCmluZGV4IGZjMmM1YTYuLjZmNGY2M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxsaW5nLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhbGxpbmcuaApAQCAtMiw3ICsyLDYgQEAKICAqIFNvbWUgbWFjcm9zIHRvIGhhbmRsZSBzdGFjayBmcmFtZXMgaW4gYXNzZW1ibHkuCiAgKi8gCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBSMTUgMAogI2RlZmluZSBSMTQgOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaAppbmRleCA0OWE4MWE2Li40OThmNjZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaApAQCAtNiw3ICs2LDYgQEAKICAqIGRvY3VtZW50YXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLmgKaW5kZXggNmYyYTgxNy4uYzU1NjIwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9ETUFfSAogI2RlZmluZSBfQVNNX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkvKiBBbmQgc3BpbmxvY2tzICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2R3YXJmMi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2R3YXJmMi5oCmluZGV4IDA3NjU0YmQuLjA3NDRkYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kd2FyZjIuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZHdhcmYyLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9EV0FSRjJfSAogI2RlZmluZSBfRFdBUkYyX0ggMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjd2FybmluZyAiYXNtL2R3YXJmMi5oIHNob3VsZCBiZSBvbmx5IGluY2x1ZGVkIGluIHB1cmUgYXNzZW1ibHkgZmlsZXMiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZWxmLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZWxmLmgKaW5kZXggYzk4NjMzYS4uYjRmOGY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaApAQCAtMTU5LDcgKzE1OSw3IEBACiAjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCiAKIC8qIDFHQiBmb3IgNjRiaXQsIDhNQiBmb3IgMzJiaXQgKi8KLSNkZWZpbmUgU1RBQ0tfUk5EX01BU0sgKGlzX2NvbXBhdF90YXNrKCkgPyAweDdmZiA6IDB4M2ZmZmZmKQorI2RlZmluZSBTVEFDS19STkRfTUFTSyAodGVzdF90aHJlYWRfZmxhZyhUSUZfSUEzMikgPyAweDdmZiA6IDB4M2ZmZmZmKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2ZpeG1hcC5oCmluZGV4IDdiMjg2YmQuLjBiNGZmYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZml4bWFwLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9GSVhNQVBfSAogI2RlZmluZSBfQVNNX0ZJWE1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2hhcmRpcnEuaAppbmRleCA4Njg5OTUxLi42NGE2NWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vcGRhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmgKaW5kZXggMGRmMTcxNS4uM2RlOTZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9od19pcnEuaApAQCAtMTcsNyArMTcsNiBAQAogICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMi5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lhMzIuaAppbmRleCBlNmI3ZjIyLi4wMTkwYjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2XzY0X0lBMzJfSAogI2RlZmluZSBfQVNNX1g4Nl82NF9JQTMyX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKaW5kZXggYTA1ZGE4YS4uNzBlOTFmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fSU9fSAogI2RlZmluZSBfQVNNX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIHg4NiBJTyBpbnN0cnVjdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oCmluZGV4IDUyNDg0ZTguLmZiN2EwOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fSU9fQVBJQ19ICiAjZGVmaW5lIF9fQVNNX0lPX0FQSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXVfY29udGV4dC5oCmluZGV4IDE5ZjBjODMuLmFmMDNiOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXVfY29udGV4dC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX1g4Nl82NF9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9fWDg2XzY0X01NVV9DT05URVhUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKaW5kZXggNjk0NGU3MS4uNzBiYjk5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXpvbmUuaApAQCAtNCw3ICs0LDYgQEAKICNpZm5kZWYgX0FTTV9YODZfNjRfTU1aT05FX0gKICNkZWZpbmUgX0FTTV9YODZfNjRfTU1aT05FX0ggMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTlVNQQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvbXRyci5oIGIvaW5jbHVkZS9hc20teDg2XzY0L210cnIuaAppbmRleCA2NmFjMWMwLi5kNjEzNWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbXRyci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tdHJyLmgKQEAgLTIzLDkgKzIzLDcgQEAKICNpZm5kZWYgX0xJTlVYX01UUlJfSAogI2RlZmluZSBfTElOVVhfTVRSUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiAjZGVmaW5lCU1UUlJfSU9DVExfQkFTRQknTScKIApAQCAtMTAyLDExICsxMDAsMTAgQEAKICAgICByZXR1cm4gLUVOT0RFVjsKIH0KIAotIyAgZW5kaWYKLQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX01UUlIgKi8KIAogI2lmZGVmIENPTkZJR19DT01QQVQKKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogc3RydWN0IG10cnJfc2VudHJ5MzIKIHsKQEAgLTEzOCw0ICsxMzUsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgIC8qICBfTElOVVhfTVRSUl9IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmgKaW5kZXggNDA4MTg1Yi4uZjdiZjg3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfWDg2XzY0X1BBR0VfSAogI2RlZmluZSBfWDg2XzY0X1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKQEAgLTEzNiw5ICsxMzUsOSBAQAogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQSAxCQogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgLyogX1g4Nl82NF9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJhbS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BhcmFtLmgKaW5kZXggNTk1NmIyMy4uYTcyODc4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BhcmFtLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU014ODZfNjRfUEFSQU1fSAogCiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICMgZGVmaW5lIEhaICAgICAgICAgICAgQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KICMgZGVmaW5lIFVTRVJfSFogICAgICAgMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzICovCiAjZGVmaW5lIENMT0NLU19QRVJfU0VDICAgICAgICAoVVNFUl9IWikgICAgICAgLyogbGlrZSB0aW1lcygpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmgKaW5kZXggOGEwNWFmMi4uMmRiMDYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wY2kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX194ODY2NF9QQ0lfSAogI2RlZmluZSBfX3g4NjY0X1BDSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaAppbmRleCAzN2EzZWM0Li4zMDYxYTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaAppbmRleCBkYzc1MmVhLi5iMDQ5NmUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oCkBAIC0yLDcgKzIsNiBAQAogICogaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCmluZGV4IGE0ZmRhZWIuLjc2ODZiOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKQEAgLTUsNyArNSw2IEBACiAgKiBXZSBuZWVkIHRoZSBBUElDIGRlZmluaXRpb25zIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiAnc21wLmgnCiAgKi8KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmgKaW5kZXggZmU0ODRhNi4uNWQ4YTVlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9yd2xvY2suaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogWW91ciBiYXNpYyBTTVAgc3BpbmxvY2tzLCBhbGxvd2luZyBvbmx5IGEgc2luZ2xlIENQVSBhbnl3aGVyZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zd2lvdGxiLmgKaW5kZXggNjA3NTdlZi4uNWY5YTAxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3dpb3RsYi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1NXSU9UTEJfSAogI2RlZmluZSBfQVNNX1NXVElPTEJfSCAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmgKaW5kZXggMzk3NTk4OS4uZjQ4ZTBkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU1lTVEVNX0gKICNkZWZpbmUgX19BU01fU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKaW5kZXggNGE5YzIwZS4uZDE2ZDViNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9YODY2NF9UTEJGTFVTSF9ICiAjZGVmaW5lIF9YODY2NF9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaAppbmRleCA5ZGI1NGU5Li44MGM0ZTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdG9wb2xvZ3kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9YODZfNjRfVE9QT0xPR1lfSAogI2RlZmluZSBfQVNNX1g4Nl82NF9UT1BPTE9HWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19OVU1BCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oCmluZGV4IGJkZGZmY2IuLjFlMWZhMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaApAQCAtNCw3ICs0LDYgQEAKIC8qCiAgKiBVc2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaAppbmRleCBmZWI3N2NiLi4wYWZmMjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCkBAIC02MTgsNiArNjE4LDggQEAKICNkZWZpbmUgX19OUl92bXNwbGljZQkJMjc4CiBfX1NZU0NBTEwoX19OUl92bXNwbGljZSwgc3lzX3Ztc3BsaWNlKQogCisjaWZkZWYgX19LRVJORUxfXworCiAjZGVmaW5lIF9fTlJfc3lzY2FsbF9tYXggX19OUl92bXNwbGljZQogCiAjaWZuZGVmIF9fTk9fU1RVQlMKQEAgLTYzNSw3ICs2MzcsNiBAQAogCXJldHVybiAodHlwZSkgKHJlcyk7IFwKIH0gd2hpbGUgKDApCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQpAQCAtNjU3LDcgKzY1OCw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCi0jZW5kaWYKIAogI2lmbmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTgyMSw3ICs4MjEsNyBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCisjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC04NDgsNCArODQ4LDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaAppbmRleCBmZTEwNWExLi41YzI2NzIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2F0b21pYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9YVEVOU0FfQVRPTUlDX0gKICNkZWZpbmUgX1hURU5TQV9BVE9NSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCmluZGV4IDgxYTc5N2EuLmJkYzAwYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfQ0hFQ0tTVU1fSAogI2RlZmluZSBfWFRFTlNBX0NIRUNLU1VNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9kZWxheS5oCmluZGV4IDFiYzYwMWUuLmUxZDhjOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9kZWxheS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9YVEVOU0FfREVMQVlfSAogI2RlZmluZSBfWFRFTlNBX0RFTEFZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2RtYS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2RtYS5oCmluZGV4IDFjMjJiMDIuLmRiMjYzM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvZG1hLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9ETUFfSAogI2RlZmluZSBfWFRFTlNBX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLwogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2hhcmRpcnEuaAppbmRleCBhYTljMWFkLi44N2NiMTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9oYXJkaXJxLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9IQVJESVJRX0gKICNkZWZpbmUgX1hURU5TQV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvaWRlLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvaWRlLmgKaW5kZXggYjUyM2NkNC4uNmI5MTI3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pZGUuaApAQCAtMTQsNyArMTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgTUFYX0hXSUZTCiAjIGRlZmluZSBNQVhfSFdJRlMJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2lvLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaAppbmRleCBjNWMxMzk4Li41NTZlNWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaW8uaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZSBfWFRFTlNBX0lPX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2lycS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2lycS5oCmluZGV4IGQ5ODRlOTUuLjA0OWZkZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaXJxLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9JUlFfSAogI2RlZmluZSBfWFRFTlNBX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGxhdGZvcm0vaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaAppbmRleCAzNjRhN2IwLi5hZjY4M2E3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfWFRFTlNBX01NVV9DT05URVhUX0gKICNkZWZpbmUgX1hURU5TQV9NTVVfQ09OVEVYVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcGFnZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3BhZ2UuaAppbmRleCA5OTJiYWM1Li40MGY0YzZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wYWdlLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ2FsbG9jLmgKaW5kZXggNzM0YThkMC4uZDU2ZGRmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGdhbGxvYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLmgKaW5kZXggMzYxNjM4OS4uNDgxMzVhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX1hURU5TQV9QTEFURk9STV9ICiAjZGVmaW5lIF9YVEVOU0FfUExBVEZPUk1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCmluZGV4IGIyOWY3YWUuLmY5ODYxNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX1hURU5TQV9TWVNURU1fSAogI2RlZmluZSBfWFRFTlNBX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaAppbmRleCA2YjM5ZDY2Li41ZTFiOTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3VuaXN0ZC5oCkBAIC0xMSw4ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfVU5JU1REX0gKICNkZWZpbmUgX1hURU5TQV9VTklTVERfSAogCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCiAjZGVmaW5lIF9fTlJfc3BpbGwJCSAgMAogI2RlZmluZSBfX05SX2V4aXQJCSAgMQogI2RlZmluZSBfX05SX3JlYWQJCSAgMwpAQCAtMjIxLDIxICsyMTksOSBAQAogI2RlZmluZSBTWVNYVEVOU0FfQ09VTlQJCSAgIDUJLyogY291bnQgb2Ygc3lzY2FsbDAgZnVuY3Rpb25zKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIHJldHVybiAoKHR5cGUpKHJlcykpCi0jZWxzZQotI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAotZG8geyBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCi0JLyogQXZvaWQgdXNpbmcgInJlcyIgd2hpY2ggaXMgZGVjbGFyZWQgdG8gYmUgaW4gcmVnaXN0ZXIgcjI7IFwKLQkgKiBlcnJubyBtaWdodCBleHBhbmQgdG8gYSBmdW5jdGlvbiBjYWxsIGFuZCBjbG9iYmVyIGl0LiAgKi8gXAotCQlpbnQgX19lcnIgPSAtKHJlcyk7IFwKLQkJZXJybm8gPSBfX2VycjsgXAotCQlyZXMgPSAtMTsgXAotCX0gXAotCXJldHVybiAodHlwZSkgKHJlcyk7IFwKLX0gd2hpbGUgKDApCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKKyNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIHJldHVybiAoKHR5cGUpKHJlcykpCiAKIC8qIFRlbnNpbGljYSdzIHh0LXhjYyBjb21waWxlciBpcyBtdWNoIG1vcmUgYWdyZXNzaXZlIGF0IGNvZGUKICAqIG9wdGltaXphdGlvbiB0aGFuIGdjYy4gIE11bHRpcGxlIF9fYXNtX18gc3RhdGVtZW50cyBhcmUKQEAgLTQyOSwxMSArNDE1LDEwIEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKTsKIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9YVEVOU0FfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNjdC5oIGIvaW5jbHVkZS9saW51eC9hY2N0LmgKaW5kZXggOWE2NjQwMS4uM2Q1NGZiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY2N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hY2N0LmgKQEAgLTE2LDcgKzE2LDYgQEAKICNkZWZpbmUgX0xJTlVYX0FDQ1RfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC0xMTYsNyArMTE1LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QKIHN0cnVjdCB2ZnNtb3VudDsKQEAgLTE2NSw2ICsxNjMsNyBAQAogI2VuZGlmCS8qIF9fS0VSTkVMICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogLyoKICAqIFlldCBhbm90aGVyIHNldCBvZiBIWiB0byAqSFogaGVscGVyIGZ1bmN0aW9ucy4KICAqIFNlZSA8bGludXgvamlmZmllcy5oPiBmb3IgdGhlIG9yaWdpbmFsLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpLmggYi9pbmNsdWRlL2xpbnV4L2FjcGkuaAppbmRleCBkM2JjMjVlLi4xY2YwYjkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBfTElOVVhfQUNQSV9ICiAjZGVmaW5lIF9MSU5VWF9BQ1BJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYJQ09ORklHX0FDUEkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaCBiL2luY2x1ZGUvbGludXgvYWZmc19oYXJkYmxvY2tzLmgKaW5kZXggM2ZiODY5OS4uZjFiOTQ4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FmZnNfaGFyZGJsb2Nrcy5oCkBAIC0xLDQ1ICsxLDQ3IEBACiAjaWZuZGVmCUFGRlNfSEFSREJMT0NLU19ICiAjZGVmaW5lCUFGRlNfSEFSREJMT0NLU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBKdXN0IHRoZSBuZWVkZWQgZGVmaW5pdGlvbnMgZm9yIHRoZSBSREIgb2YgYW4gQW1pZ2EgSEQuICovCiAKIHN0cnVjdCBSaWdpZERpc2tCbG9jayB7Ci0JdTMyCXJkYl9JRDsKKwlfX3UzMglyZGJfSUQ7CiAJX19iZTMyCXJkYl9TdW1tZWRMb25nczsKLQlzMzIJcmRiX0Noa1N1bTsKLQl1MzIJcmRiX0hvc3RJRDsKKwlfX3MzMglyZGJfQ2hrU3VtOworCV9fdTMyCXJkYl9Ib3N0SUQ7CiAJX19iZTMyCXJkYl9CbG9ja0J5dGVzOwotCXUzMglyZGJfRmxhZ3M7Ci0JdTMyCXJkYl9CYWRCbG9ja0xpc3Q7CisJX191MzIJcmRiX0ZsYWdzOworCV9fdTMyCXJkYl9CYWRCbG9ja0xpc3Q7CiAJX19iZTMyCXJkYl9QYXJ0aXRpb25MaXN0OwotCXUzMglyZGJfRmlsZVN5c0hlYWRlckxpc3Q7Ci0JdTMyCXJkYl9Ecml2ZUluaXQ7Ci0JdTMyCXJkYl9SZXNlcnZlZDFbNl07Ci0JdTMyCXJkYl9DeWxpbmRlcnM7Ci0JdTMyCXJkYl9TZWN0b3JzOwotCXUzMglyZGJfSGVhZHM7Ci0JdTMyCXJkYl9JbnRlcmxlYXZlOwotCXUzMglyZGJfUGFyazsKLQl1MzIJcmRiX1Jlc2VydmVkMlszXTsKLQl1MzIJcmRiX1dyaXRlUHJlQ29tcDsKLQl1MzIJcmRiX1JlZHVjZWRXcml0ZTsKLQl1MzIJcmRiX1N0ZXBSYXRlOwotCXUzMglyZGJfUmVzZXJ2ZWQzWzVdOwotCXUzMglyZGJfUkRCQmxvY2tzTG87Ci0JdTMyCXJkYl9SREJCbG9ja3NIaTsKLQl1MzIJcmRiX0xvQ3lsaW5kZXI7Ci0JdTMyCXJkYl9IaUN5bGluZGVyOwotCXUzMglyZGJfQ3lsQmxvY2tzOwotCXUzMglyZGJfQXV0b1BhcmtTZWNvbmRzOwotCXUzMglyZGJfSGlnaFJEU0tCbG9jazsKLQl1MzIJcmRiX1Jlc2VydmVkNDsKKwlfX3UzMglyZGJfRmlsZVN5c0hlYWRlckxpc3Q7CisJX191MzIJcmRiX0RyaXZlSW5pdDsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQxWzZdOworCV9fdTMyCXJkYl9DeWxpbmRlcnM7CisJX191MzIJcmRiX1NlY3RvcnM7CisJX191MzIJcmRiX0hlYWRzOworCV9fdTMyCXJkYl9JbnRlcmxlYXZlOworCV9fdTMyCXJkYl9QYXJrOworCV9fdTMyCXJkYl9SZXNlcnZlZDJbM107CisJX191MzIJcmRiX1dyaXRlUHJlQ29tcDsKKwlfX3UzMglyZGJfUmVkdWNlZFdyaXRlOworCV9fdTMyCXJkYl9TdGVwUmF0ZTsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQzWzVdOworCV9fdTMyCXJkYl9SREJCbG9ja3NMbzsKKwlfX3UzMglyZGJfUkRCQmxvY2tzSGk7CisJX191MzIJcmRiX0xvQ3lsaW5kZXI7CisJX191MzIJcmRiX0hpQ3lsaW5kZXI7CisJX191MzIJcmRiX0N5bEJsb2NrczsKKwlfX3UzMglyZGJfQXV0b1BhcmtTZWNvbmRzOworCV9fdTMyCXJkYl9IaWdoUkRTS0Jsb2NrOworCV9fdTMyCXJkYl9SZXNlcnZlZDQ7CiAJY2hhcglyZGJfRGlza1ZlbmRvcls4XTsKIAljaGFyCXJkYl9EaXNrUHJvZHVjdFsxNl07CiAJY2hhcglyZGJfRGlza1JldmlzaW9uWzRdOwogCWNoYXIJcmRiX0NvbnRyb2xsZXJWZW5kb3JbOF07CiAJY2hhcglyZGJfQ29udHJvbGxlclByb2R1Y3RbMTZdOwogCWNoYXIJcmRiX0NvbnRyb2xsZXJSZXZpc2lvbls0XTsKLQl1MzIJcmRiX1Jlc2VydmVkNVsxMF07CisJX191MzIJcmRiX1Jlc2VydmVkNVsxMF07CiB9OwogCiAjZGVmaW5lCUlETkFNRV9SSUdJRERJU0sJMHg1MjQ0NTM0QgkvKiAiUkRTSyIgKi8KQEAgLTQ3LDE2ICs0OSwxNiBAQAogc3RydWN0IFBhcnRpdGlvbkJsb2NrIHsKIAlfX2JlMzIJcGJfSUQ7CiAJX19iZTMyCXBiX1N1bW1lZExvbmdzOwotCXMzMglwYl9DaGtTdW07Ci0JdTMyCXBiX0hvc3RJRDsKKwlfX3MzMglwYl9DaGtTdW07CisJX191MzIJcGJfSG9zdElEOwogCV9fYmUzMglwYl9OZXh0OwotCXUzMglwYl9GbGFnczsKLQl1MzIJcGJfUmVzZXJ2ZWQxWzJdOwotCXUzMglwYl9EZXZGbGFnczsKLQl1OAlwYl9Ecml2ZU5hbWVbMzJdOwotCXUzMglwYl9SZXNlcnZlZDJbMTVdOworCV9fdTMyCXBiX0ZsYWdzOworCV9fdTMyCXBiX1Jlc2VydmVkMVsyXTsKKwlfX3UzMglwYl9EZXZGbGFnczsKKwlfX3U4CXBiX0RyaXZlTmFtZVszMl07CisJX191MzIJcGJfUmVzZXJ2ZWQyWzE1XTsKIAlfX2JlMzIJcGJfRW52aXJvbm1lbnRbMTddOwotCXUzMglwYl9FUmVzZXJ2ZWRbMTVdOworCV9fdTMyCXBiX0VSZXNlcnZlZFsxNV07CiB9OwogCiAjZGVmaW5lCUlETkFNRV9QQVJUSVRJT04JMHg1MDQxNTI1NAkvKiAiUEFSVCIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKaW5kZXggNmQ1OWM4ZS4uYmZiOGVjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmgKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgX0FHUF9ICiAjZGVmaW5lIF9BR1BfSCAxCiAKLSNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgotCiAjZGVmaW5lIEFHUElPQ19CQVNFICAgICAgICdBJwogI2RlZmluZSBBR1BJT0NfSU5GTyAgICAgICBfSU9SIChBR1BJT0NfQkFTRSwgMCwgc3RydWN0IGFncF9pbmZvKikKICNkZWZpbmUgQUdQSU9DX0FDUVVJUkUgICAgX0lPICAoQUdQSU9DX0JBU0UsIDEpCkBAIC0xMTIsNiArMTEwLDcgQEAKIAogI2Vsc2UJCQkJLyogX19LRVJORUxfXyAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KIAogI2RlZmluZSBBR1BHQVJUX01JTk9SIDE3NQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oIGIvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaAppbmRleCA5Y2Y2NGIxLi4yOWMwNDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgKQEAgLTksNyArOSw2IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oIGIvaW5jbHVkZS9saW51eC9hdG1kZXYuaAppbmRleCBiMjAzZWE4Li4xZWIyMzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKQEAgLTIwOSw3ICsyMDksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPiAvKiB3YWl0X3F1ZXVlX2hlYWRfdCAqLwogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4gLyogc3RydWN0IHRpbWV2YWwgKi8KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCBiNzRjMTQ4Li5lMDUxZmY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC0yNCw4ICsyNCw3IEBACiAjaWZuZGVmIF9MSU5VWF9BVURJVF9IXwogI2RlZmluZSBfTElOVVhfQVVESVRfSF8KIAotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLWVtLmg+CiAKIC8qIFRoZSBuZXRsaW5rIG1lc3NhZ2VzIGZvciB0aGUgYXVkaXQgc3lzdGVtIGlzIGRpdmlkZWQgaW50byBibG9ja3M6CiAgKiAxMDAwIC0gMTA5OSBhcmUgZm9yIGNvbW1hbmRpbmcgdGhlIGF1ZGl0IHN5c3RlbQpAQCAtODMsNyArODIsMTIgQEAKICNkZWZpbmUgQVVESVRfQ09ORklHX0NIQU5HRQkxMzA1CS8qIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZSAqLwogI2RlZmluZSBBVURJVF9TT0NLQUREUgkJMTMwNgkvKiBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcgKi8KICNkZWZpbmUgQVVESVRfQ1dECQkxMzA3CS8qIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgQVVESVRfRVhFQ1ZFCQkxMzA5CS8qIGV4ZWN2ZSBhcmd1bWVudHMgKi8KICNkZWZpbmUgQVVESVRfSVBDX1NFVF9QRVJNCTEzMTEJLyogSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZSAqLworI2RlZmluZSBBVURJVF9NUV9PUEVOCQkxMzEyCS8qIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfU0VORFJFQ1YJMTMxMwkvKiBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfTk9USUZZCQkxMzE0CS8qIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZSAqLworI2RlZmluZSBBVURJVF9NUV9HRVRTRVRBVFRSCTEzMTUJLyogUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUgKi8KIAogI2RlZmluZSBBVURJVF9BVkMJCTE0MDAJLyogU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAqLwogI2RlZmluZSBBVURJVF9TRUxJTlVYX0VSUgkxNDAxCS8qIEludGVybmFsIFNFIExpbnV4IEVycm9ycyAqLwpAQCAtMTUxLDYgKzE1NSw3IEBACiAjZGVmaW5lIEFVRElUX1NFX1RZUEUJMTUJLyogc2VjdXJpdHkgbGFiZWwgdHlwZSAqLwogI2RlZmluZSBBVURJVF9TRV9TRU4JMTYJLyogc2VjdXJpdHkgbGFiZWwgc2Vuc2l0aXZpdHkgbGFiZWwgKi8KICNkZWZpbmUgQVVESVRfU0VfQ0xSCTE3CS8qIHNlY3VyaXR5IGxhYmVsIGNsZWFyYW5jZSBsYWJlbCAqLworI2RlZmluZSBBVURJVF9QUElECTE4CiAKIAkJCQkvKiBUaGVzZSBhcmUgT05MWSB1c2VmdWwgd2hlbiBjaGVja2luZwogCQkJCSAqIGF0IHN5c2NhbGwgZXhpdCB0aW1lIChBVURJVF9BVF9FWElUKS4gKi8KQEAgLTE1OSw2ICsxNjQsNyBAQAogI2RlZmluZSBBVURJVF9JTk9ERQkxMDIKICNkZWZpbmUgQVVESVRfRVhJVAkxMDMKICNkZWZpbmUgQVVESVRfU1VDQ0VTUyAgIDEwNAkvKiBleGl0ID49IDA7IHZhbHVlIGlnbm9yZWQgKi8KKyNkZWZpbmUgQVVESVRfV0FUQ0gJMTA1CiAKICNkZWZpbmUgQVVESVRfQVJHMCAgICAgIDIwMAogI2RlZmluZSBBVURJVF9BUkcxICAgICAgKEFVRElUX0FSRzArMSkKQEAgLTI3MywxNiArMjc5LDIxIEBACiB9OwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0cnVjdCBhdWRpdF9zaWdfaW5mbyB7CiAJdWlkX3QJCXVpZDsKIAlwaWRfdAkJcGlkOworCWNoYXIJCWN0eFswXTsKIH07CiAKIHN0cnVjdCBhdWRpdF9idWZmZXI7CiBzdHJ1Y3QgYXVkaXRfY29udGV4dDsKIHN0cnVjdCBpbm9kZTsKIHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtczsKK3N0cnVjdCBsaW51eF9iaW5wcm07CitzdHJ1Y3QgbXFfYXR0cjsKK3N0cnVjdCBtcXN0YXQ7CiAKICNkZWZpbmUgQVVESVRTQ19JTlZBTElEIDAKICNkZWZpbmUgQVVESVRTQ19TVUNDRVNTIDEKQEAgLTI5NywxNSArMzA4LDE5IEBACiAJCQkJaW50IG1ham9yLCB1bnNpZ25lZCBsb25nIGEwLCB1bnNpZ25lZCBsb25nIGExLAogCQkJCXVuc2lnbmVkIGxvbmcgYTIsIHVuc2lnbmVkIGxvbmcgYTMpOwogZXh0ZXJuIHZvaWQgYXVkaXRfc3lzY2FsbF9leGl0KGludCBmYWlsZWQsIGxvbmcgcmV0dXJuX2NvZGUpOwotZXh0ZXJuIHZvaWQgYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIF9fYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGF1ZGl0X3B1dG5hbWUoY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9fYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IGNoYXIgKmRuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXVuc2lnbmVkIGxvbmcgcGlubyk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgICB1bnNpZ25lZCBmbGFncykgeworc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCi0JCV9fYXVkaXRfaW5vZGUobmFtZSwgaW5vZGUsIGZsYWdzKTsKKwkJX19hdWRpdF9nZXRuYW1lKG5hbWUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpIHsKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCV9fYXVkaXRfaW5vZGUobmFtZSwgaW5vZGUpOwogfQogc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IGNoYXIgKmRuYW1lLCAKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIApAQCAtMzIwLDEzICszMzUsNjEgQEAKIAkJCSAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdCwgdW5zaWduZWQgaW50ICpzZXJpYWwpOwogZXh0ZXJuIGludCAgYXVkaXRfc2V0X2xvZ2ludWlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdWlkX3QgbG9naW51aWQpOwogZXh0ZXJuIHVpZF90IGF1ZGl0X2dldF9sb2dpbnVpZChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4KTsKLWV4dGVybiBpbnQgYXVkaXRfaXBjX29iaihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7Ci1leHRlcm4gaW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7CitleHRlcm4gaW50IF9fYXVkaXRfaXBjX29iaihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCk7CitleHRlcm4gaW50IF9fYXVkaXRfaXBjX3NldF9wZXJtKHVuc2lnbmVkIGxvbmcgcWJ5dGVzLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUpOworZXh0ZXJuIGludCBhdWRpdF9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwogZXh0ZXJuIGludCBhdWRpdF9zb2NrZXRjYWxsKGludCBuYXJncywgdW5zaWduZWQgbG9uZyAqYXJncyk7CiBleHRlcm4gaW50IGF1ZGl0X3NvY2thZGRyKGludCBsZW4sIHZvaWQgKmFkZHIpOwogZXh0ZXJuIGludCBhdWRpdF9hdmNfcGF0aChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKLWV4dGVybiB2b2lkIGF1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CiBleHRlcm4gaW50IGF1ZGl0X3NldF9tYWN4YXR0cihjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgX19hdWRpdF9tcV9vcGVuKGludCBvZmxhZywgbW9kZV90IG1vZGUsIHN0cnVjdCBtcV9hdHRyIF9fdXNlciAqdV9hdHRyKTsKK2V4dGVybiBpbnQgX19hdWRpdF9tcV90aW1lZHNlbmQobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpOworZXh0ZXJuIGludCBfX2F1ZGl0X21xX3RpbWVkcmVjZWl2ZShtcWRfdCBtcWRlcywgc2l6ZV90IG1zZ19sZW4sIHVuc2lnbmVkIGludCBfX3VzZXIgKnVfbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpOworZXh0ZXJuIGludCBfX2F1ZGl0X21xX25vdGlmeShtcWRfdCBtcWRlcywgY29uc3Qgc3RydWN0IHNpZ2V2ZW50IF9fdXNlciAqdV9ub3RpZmljYXRpb24pOworZXh0ZXJuIGludCBfX2F1ZGl0X21xX2dldHNldGF0dHIobXFkX3QgbXFkZXMsIHN0cnVjdCBtcV9hdHRyICptcXN0YXQpOworCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9pcGNfb2JqKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQoreworCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwkJcmV0dXJuIF9fYXVkaXRfaXBjX29iaihpcGNwKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlKQoreworCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwkJcmV0dXJuIF9fYXVkaXRfaXBjX3NldF9wZXJtKHFieXRlcywgdWlkLCBnaWQsIG1vZGUpOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfb3BlbihpbnQgb2ZsYWcsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgbXFfYXR0ciBfX3VzZXIgKnVfYXR0cikKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X21xX29wZW4ob2ZsYWcsIG1vZGUsIHVfYXR0cik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9tcV90aW1lZHNlbmQobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlyZXR1cm4gX19hdWRpdF9tcV90aW1lZHNlbmQobXFkZXMsIG1zZ19sZW4sIG1zZ19wcmlvLCB1X2Fic190aW1lb3V0KTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X21xX3RpbWVkcmVjZWl2ZShtcWRfdCBtcWRlcywgc2l6ZV90IG1zZ19sZW4sIHVuc2lnbmVkIGludCBfX3VzZXIgKnVfbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlyZXR1cm4gX19hdWRpdF9tcV90aW1lZHJlY2VpdmUobXFkZXMsIG1zZ19sZW4sIHVfbXNnX3ByaW8sIHVfYWJzX3RpbWVvdXQpOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfbm90aWZ5KG1xZF90IG1xZGVzLCBjb25zdCBzdHJ1Y3Qgc2lnZXZlbnQgX191c2VyICp1X25vdGlmaWNhdGlvbikKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X21xX25vdGlmeShtcWRlcywgdV9ub3RpZmljYXRpb24pOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRfdCBtcWRlcywgc3RydWN0IG1xX2F0dHIgKm1xc3RhdCkKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X21xX2dldHNldGF0dHIobXFkZXMsIG1xc3RhdCk7CisJcmV0dXJuIDA7Cit9CiAjZWxzZQogI2RlZmluZSBhdWRpdF9hbGxvYyh0KSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9mcmVlKHQpIGRvIHsgOyB9IHdoaWxlICgwKQpAQCAtMzM0LDE5ICszOTcsMjQgQEAKICNkZWZpbmUgYXVkaXRfc3lzY2FsbF9leGl0KGYscikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2dldG5hbWUobikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X3B1dG5hbWUobikgZG8geyA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9fYXVkaXRfaW5vZGUobixpLGYpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2F1ZGl0X2lub2RlKG4saSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIF9fYXVkaXRfaW5vZGVfY2hpbGQoZCxpLHApIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBhdWRpdF9pbm9kZShuLGksZikgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X2lub2RlKG4saSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2lub2RlX2NoaWxkKGQsaSxwKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRzY19nZXRfc3RhbXAoYyx0LHMpIGRvIHsgQlVHKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2dldF9sb2dpbnVpZChjKSAoeyAtMTsgfSkKICNkZWZpbmUgYXVkaXRfaXBjX29iaihpKSAoeyAwOyB9KQotI2RlZmluZSBhdWRpdF9pcGNfc2V0X3Blcm0ocSx1LGcsbSxpKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9pcGNfc2V0X3Blcm0ocSx1LGcsbSkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfYnBybShwKSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9zb2NrZXRjYWxsKG4sYSkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfc29ja2FkZHIobGVuLCBhZGRyKSAoeyAwOyB9KQogI2RlZmluZSBhdWRpdF9hdmNfcGF0aChkZW50cnksIG1udCkgKHsgMDsgfSkKLSNkZWZpbmUgYXVkaXRfc2lnbmFsX2luZm8ocyx0KSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfc2V0X21hY3hhdHRyKG4pIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9tcV9vcGVuKG8sbSxhKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9tcV90aW1lZHNlbmQoZCxsLHAsdCkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfbXFfdGltZWRyZWNlaXZlKGQsbCxwLHQpICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X21xX25vdGlmeShkLG4pICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X21xX2dldHNldGF0dHIoZCxzKSAoeyAwOyB9KQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVVESVQKQEAgLTM2NCw4ICs0MzIsMTEgQEAKIGV4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nX2hleChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKIAkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkJCSAgc2l6ZV90IGxlbik7Ci1leHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsCitleHRlcm4gY29uc3QgY2hhciAqCSAgICBhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLAogCQkJCQkJICAgICAgY29uc3QgY2hhciAqc3RyaW5nKTsKK2V4dGVybiBjb25zdCBjaGFyICoJICAgIGF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKKwkJCQkJCQlzaXplX3QgbiwKKwkJCQkJCQljb25zdCBjaGFyICpzdHJpbmcpOwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfZF9wYXRoKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC0zODMsOCArNDU0LDggQEAKICNkZWZpbmUgYXVkaXRfbG9nX2VuZChiKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfbG9nX2hleChhLGIsbCkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYSxzKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbG9nX25fdW50cnVzdGVkc3RyaW5nKGEsbixzKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfbG9nX2RfcGF0aChiLHAsZCx2KSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYXVkaXRfcGFuaWMobSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZW5kaWYKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA1OWUxMjU5Li41ZDMyNzMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9CTEtERVZfSAogI2RlZmluZSBfTElOVVhfQkxLREVWX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3BnLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3BnLmgKaW5kZXggYmU1ZDBmNC4uZmFmOGE0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtwZy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrcGcuaApAQCAtMjQsNiArMjQsNyBAQAogICoKICAqIEZvciB0b2RheSwgb25seSB0aGUgcGFydGl0aW9uIHN0dWZmIC0gYWViLCA5OTA1MTUKICAqLworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KIAogI2RlZmluZSBCTEtQRyAgICAgIF9JTygweDEyLDEwNSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IGIzNGQzZTcuLmViMWE4NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgQkxLVFJBQ0VfSAogI2RlZmluZSBCTEtUUkFDRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9yZWxheS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9ibG9ja2dyb3VwX2xvY2suaAppbmRleCAwMTM3ZWU1Li44NjA3MzEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxvY2tncm91cF9sb2NrLmgKQEAgLTYsNyArNiw2IEBACiAgKiBTaW1wbGUgaGFzaGVkIHNwaW5sb2NraW5nLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvY2FjaGUuaAppbmRleCBjYzRiM2FhLi40NTUyNTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jYWNoZS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfX0xJTlVYX0NBQ0hFX0gKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAjaWZuZGVmIEwxX0NBQ0hFX0FMSUdOCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGEuaCBiL2luY2x1ZGUvbGludXgvY29kYS5oCmluZGV4IGJiYzVhZmMuLmI1Y2YwNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29kYS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29kYS5oCkBAIC01OSw3ICs1OSw2IEBACiAjaWZuZGVmIF9DT0RBX0hFQURFUl8KICNkZWZpbmUgX0NPREFfSEVBREVSXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIENhdGNoIG5ldyBfS0VSTkVMIGRlZm4gZm9yIE5ldEJTRCBhbmQgREpHUFAvX19DWUdXSU4zMl9fICovCiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaAppbmRleCA2ZDNhNjU0Li5kZGExNjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKQEAgLTQsNyArNCw2IEBACiAgKiBUaGVzZSBhcmUgdGhlIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMKICAqIHN5c2NhbGwgY29tcGF0aWJpbGl0eSBsYXllci4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggZjIzZDNjNi4uOWI0ZjExMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtNzgsNiArNzgsNyBAQAogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAvKgogICogQWxsb3cgdXMgdG8gbWFyayBmdW5jdGlvbnMgYXMgJ2RlcHJlY2F0ZWQnIGFuZCBoYXZlIGdjYyBlbWl0IGEgbmljZQogICogd2FybmluZyBmb3IgZWFjaCB1c2UsIGluIGhvcGVzIG9mIHNwZWVkaW5nIHRoZSBmdW5jdGlvbnMgcmVtb3ZhbC4KQEAgLTEyNyw2ICsxMjgsMTYgQEAKICMgZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXwkvKiB1bmltcGxlbWVudGVkICovCiAjZW5kaWYKIAorI2lmbmRlZiBub2lubGluZQorI2RlZmluZSBub2lubGluZQorI2VuZGlmCisKKyNpZm5kZWYgX19hbHdheXNfaW5saW5lCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZSBpbmxpbmUKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAvKgogICogRnJvbSB0aGUgR0NDIG1hbnVhbDoKICAqCkBAIC0xNDUsMTIgKzE1Niw0IEBACiAjIGRlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCS8qIHVuaW1wbGVtZW50ZWQgKi8KICNlbmRpZgogCi0jaWZuZGVmIG5vaW5saW5lCi0jZGVmaW5lIG5vaW5saW5lCi0jZW5kaWYKLQotI2lmbmRlZiBfX2Fsd2F5c19pbmxpbmUKLSNkZWZpbmUgX19hbHdheXNfaW5saW5lIGlubGluZQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0xJTlVYX0NPTVBJTEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggNzIxMzcxMy4uMDg3MzRlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTExNyw2ICsxMTcsMTAgQEAKIGV4dGVybiB2b2lkIGNvbnNvbGVfc3RhcnQoc3RydWN0IGNvbnNvbGUgKik7CiBleHRlcm4gaW50IGlzX2NvbnNvbGVfbG9ja2VkKHZvaWQpOwogCisvKiBTdXNwZW5kIGFuZCByZXN1bWUgY29uc29sZSBtZXNzYWdlcyBvdmVyIFBNIGV2ZW50cyAqLworZXh0ZXJuIHZvaWQgc3VzcGVuZF9jb25zb2xlKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzdW1lX2NvbnNvbGUodm9pZCk7CisKIC8qIFNvbWUgZGVidWcgc3R1YiB0byBjYXRjaCBzb21lIG9mIHRoZSBvYnZpb3VzIHJhY2VzIGluIHRoZSBWVCBjb2RlICovCiAjaWYgMQogI2RlZmluZSBXQVJOX0NPTlNPTEVfVU5MT0NLRUQoKQlXQVJOX09OKCFpc19jb25zb2xlX2xvY2tlZCgpICYmICFvb3BzX2luX3Byb2dyZXNzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCAxNzg2NmQ3Li41YWE5NTAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtMTUsNyArMTUsNiBAQAogI2RlZmluZSBfTElOVVhfQ1BVRlJFUV9ICiAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmFtZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmgKaW5kZXggYTg5NDhmMy4uYTQxZjM4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcmFtZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCkBAIC0xLDEzICsxLDcgQEAKICNpZm5kZWYgX19DUkFNRlNfSAogI2RlZmluZSBfX0NSQU1GU19ICiAKLSNpZm5kZWYgX19LRVJORUxfXwotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKLQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBDUkFNRlNfTUFHSUMJCTB4MjhjZDNkNDUJLyogc29tZSByYW5kb20gbnVtYmVyICovCiAjZGVmaW5lIENSQU1GU19TSUdOQVRVUkUJIkNvbXByZXNzZWQgUk9NRlMiCkBAIC0zMyw5ICsyNyw5IEBACiAgKiBSZWFzb25hYmx5IHRlcnNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbm9kZSBkYXRhLgogICovCiBzdHJ1Y3QgY3JhbWZzX2lub2RlIHsKLQl1MzIgbW9kZTpDUkFNRlNfTU9ERV9XSURUSCwgdWlkOkNSQU1GU19VSURfV0lEVEg7CisJX191MzIgbW9kZTpDUkFNRlNfTU9ERV9XSURUSCwgdWlkOkNSQU1GU19VSURfV0lEVEg7CiAJLyogU0laRSBmb3IgZGV2aWNlIGZpbGVzIGlzIGlfcmRldiAqLwotCXUzMiBzaXplOkNSQU1GU19TSVpFX1dJRFRILCBnaWQ6Q1JBTUZTX0dJRF9XSURUSDsKKwlfX3UzMiBzaXplOkNSQU1GU19TSVpFX1dJRFRILCBnaWQ6Q1JBTUZTX0dJRF9XSURUSDsKIAkvKiBOQU1FTEVOIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUgbmFtZSwgZGl2aWRlZCBieSA0IGFuZAogICAgICAgICAgICByb3VuZGVkIHVwLiAgKGNyYW1mcyBkb2Vzbid0IHN1cHBvcnQgaGFyZCBsaW5rcy4pICovCiAJLyogT0ZGU0VUOiBGb3Igc3ltbGlua3MgYW5kIG5vbi1lbXB0eSByZWd1bGFyIGZpbGVzLCB0aGlzCkBAIC00NCwyNyArMzgsMjcgQEAKIAkgICBzZWUgUkVBRE1FKS4gIEZvciBub24tZW1wdHkgZGlyZWN0b3JpZXMgaXQgaXMgdGhlIG9mZnNldAogCSAgIChkaXZpZGVkIGJ5IDQpIG9mIHRoZSBpbm9kZSBvZiB0aGUgZmlyc3QgZmlsZSBpbiB0aGF0CiAJICAgZGlyZWN0b3J5LiAgRm9yIGFueXRoaW5nIGVsc2UsIG9mZnNldCBpcyB6ZXJvLiAqLwotCXUzMiBuYW1lbGVuOkNSQU1GU19OQU1FTEVOX1dJRFRILCBvZmZzZXQ6Q1JBTUZTX09GRlNFVF9XSURUSDsKKwlfX3UzMiBuYW1lbGVuOkNSQU1GU19OQU1FTEVOX1dJRFRILCBvZmZzZXQ6Q1JBTUZTX09GRlNFVF9XSURUSDsKIH07CiAKIHN0cnVjdCBjcmFtZnNfaW5mbyB7Ci0JdTMyIGNyYzsKLQl1MzIgZWRpdGlvbjsKLQl1MzIgYmxvY2tzOwotCXUzMiBmaWxlczsKKwlfX3UzMiBjcmM7CisJX191MzIgZWRpdGlvbjsKKwlfX3UzMiBibG9ja3M7CisJX191MzIgZmlsZXM7CiB9OwogCiAvKgogICogU3VwZXJibG9jayBpbmZvcm1hdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBGUy4KICAqLwogc3RydWN0IGNyYW1mc19zdXBlciB7Ci0JdTMyIG1hZ2ljOwkJCS8qIDB4MjhjZDNkNDUgLSByYW5kb20gbnVtYmVyICovCi0JdTMyIHNpemU7CQkJLyogbGVuZ3RoIGluIGJ5dGVzICovCi0JdTMyIGZsYWdzOwkJCS8qIGZlYXR1cmUgZmxhZ3MgKi8KLQl1MzIgZnV0dXJlOwkJCS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCi0JdTggc2lnbmF0dXJlWzE2XTsJCS8qICJDb21wcmVzc2VkIFJPTUZTIiAqLworCV9fdTMyIG1hZ2ljOwkJCS8qIDB4MjhjZDNkNDUgLSByYW5kb20gbnVtYmVyICovCisJX191MzIgc2l6ZTsJCQkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KKwlfX3UzMiBmbGFnczsJCQkvKiBmZWF0dXJlIGZsYWdzICovCisJX191MzIgZnV0dXJlOwkJCS8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJX191OCBzaWduYXR1cmVbMTZdOwkJLyogIkNvbXByZXNzZWQgUk9NRlMiICovCiAJc3RydWN0IGNyYW1mc19pbmZvIGZzaWQ7CS8qIHVuaXF1ZSBmaWxlc3lzdGVtIGluZm8gKi8KLQl1OCBuYW1lWzE2XTsJCQkvKiB1c2VyLWRlZmluZWQgbmFtZSAqLworCV9fdTggbmFtZVsxNl07CQkJLyogdXNlci1kZWZpbmVkIG5hbWUgKi8KIAlzdHJ1Y3QgY3JhbWZzX2lub2RlIHJvb3Q7CS8qIHJvb3QgaW5vZGUgZGF0YSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggMGFiMWJjMS4uNWEwNDcwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9MSU5VWF9DUllQVE9fSAogI2RlZmluZSBfTElOVVhfQ1JZUFRPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2N5Y2xvbXguaCBiL2luY2x1ZGUvbGludXgvY3ljbG9teC5oCmluZGV4IDMwMGQ3MDQuLmI4OGY3ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3ljbG9teC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3ljbG9teC5oCkBAIC0yNCw3ICsyNCw2IEBACiAqIDE5OTgvMDgvMDgJYWNtZQkJVmVyc2lvbiAwLjAuMQogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNvb2tpZXMuaCBiL2luY2x1ZGUvbGludXgvZGNvb2tpZXMuaAppbmRleCAxZDY4NDI4Li4wZmU3Y2RmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Rjb29raWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY29va2llcy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBEQ09PS0lFU19ICiAjZGVmaW5lIERDT09LSUVTX0gKICAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QUk9GSUxJTkcKICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2RldmZzX2ZzX2tlcm5lbC5oCmluZGV4IDg5ODEwZTcuLjBkNzRhNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0xJTlVYX0RFVkZTX0ZTX0tFUk5FTF9ICiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggZThlNTNiOS4uYjJlNWRhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9ERVZJQ0VfSF8KICNkZWZpbmUgX0RFVklDRV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tsaXN0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RpdmVydC5oIGIvaW5jbHVkZS9saW51eC9kaXZlcnQuaAppbmRleCA2OTE5YjA5Li44ZmI0ZTlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RpdmVydC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGl2ZXJ0LmgKQEAgLTI3LDEwICsyNywxMCBAQAogewogCWludAkJZGl2ZXJ0OyAgLyogYXJlIHdlIGFjdGl2ZSAqLwogCXVuc2lnbmVkIGludCBwcm90b3M7CS8qIHByb3RvY29scyAqLwotCXUxNgkJdGNwX2RzdFtNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdGNwIGRzdCBwb3J0cyB0byBkaXZlcnQgKi8KLQl1MTYJCXRjcF9zcmNbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHRjcCBzcmMgcG9ydHMgdG8gZGl2ZXJ0ICovCi0JdTE2CQl1ZHBfZHN0W01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB1ZHAgZHN0IHBvcnRzIHRvIGRpdmVydCAqLwotCXUxNgkJdWRwX3NyY1tNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdWRwIHNyYyBwb3J0cyB0byBkaXZlcnQgKi8KKwlfX3UxNgkJdGNwX2RzdFtNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdGNwIGRzdCBwb3J0cyB0byBkaXZlcnQgKi8KKwlfX3UxNgkJdGNwX3NyY1tNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdGNwIHNyYyBwb3J0cyB0byBkaXZlcnQgKi8KKwlfX3UxNgkJdWRwX2RzdFtNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdWRwIGRzdCBwb3J0cyB0byBkaXZlcnQgKi8KKwlfX3UxNgkJdWRwX3NyY1tNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdWRwIHNyYyBwb3J0cyB0byBkaXZlcnQgKi8KIH07CiAKIC8qCkBAIC00MCwxMiArNDAsMTIgQEAKIAogdHlwZWRlZiB1bmlvbiBfZGl2ZXJ0X2NmX2FyZwogewotCXMxNgkJaW50MTY7Ci0JdTE2CQl1aW50MTY7Ci0JczMyCQlpbnQzMjsKLQl1MzIJCXVpbnQzMjsKLQlzNjQJCWludDY0OwotCXU2NAkJdWludDY0OworCV9fczE2CQlpbnQxNjsKKwlfX3UxNgkJdWludDE2OworCV9fczMyCQlpbnQzMjsKKwlfX3UzMgkJdWludDMyOworCV9fczY0CQlpbnQ2NDsKKwlfX3U2NAkJdWludDY0OwogCXZvaWQJX191c2VyICpwdHI7CiB9IGRpdmVydF9jZl9hcmc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmggYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YjIzNmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworI2lmbmRlZiBETUFFTkdJTkVfSAorI2RlZmluZSBETUFFTkdJTkVfSAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19ETUFfRU5HSU5FCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKKy8qKgorICogZW51bSBkbWFfZXZlbnQgLSByZXNvdXJjZSBQTlAvcG93ZXIgbWFuYWdtZW50IGV2ZW50cworICogQERNQV9SRVNPVVJDRV9TVVNQRU5EOiBETUEgZGV2aWNlIGdvaW5nIGludG8gbG93IHBvd2VyIHN0YXRlCisgKiBARE1BX1JFU09VUkNFX1JFU1VNRTogRE1BIGRldmljZSByZXR1cm5pbmcgdG8gZnVsbCBwb3dlcgorICogQERNQV9SRVNPVVJDRV9BRERFRDogRE1BIGRldmljZSBhZGRlZCB0byB0aGUgc3lzdGVtCisgKiBARE1BX1JFU09VUkNFX1JFTU9WRUQ6IERNQSBkZXZpY2UgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0KKyAqLworZW51bSBkbWFfZXZlbnQgeworCURNQV9SRVNPVVJDRV9TVVNQRU5ELAorCURNQV9SRVNPVVJDRV9SRVNVTUUsCisJRE1BX1JFU09VUkNFX0FEREVELAorCURNQV9SRVNPVVJDRV9SRU1PVkVELAorfTsKKworLyoqCisgKiB0eXBlZGVmIGRtYV9jb29raWVfdAorICoKKyAqIGlmIGRtYV9jb29raWVfdCBpcyA+MCBpdCdzIGEgRE1BIHJlcXVlc3QgY29va2llLCA8MCBpdCdzIGFuIGVycm9yIGNvZGUKKyAqLwordHlwZWRlZiBzMzIgZG1hX2Nvb2tpZV90OworCisjZGVmaW5lIGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSAoKGNvb2tpZSkgPCAwID8gMSA6IDApCisKKy8qKgorICogZW51bSBkbWFfc3RhdHVzIC0gRE1BIHRyYW5zYWN0aW9uIHN0YXR1cworICogQERNQV9TVUNDRVNTOiB0cmFuc2FjdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisgKiBARE1BX0lOX1BST0dSRVNTOiB0cmFuc2FjdGlvbiBub3QgeWV0IHByb2Nlc3NlZAorICogQERNQV9FUlJPUjogdHJhbnNhY3Rpb24gZmFpbGVkCisgKi8KK2VudW0gZG1hX3N0YXR1cyB7CisJRE1BX1NVQ0NFU1MsCisJRE1BX0lOX1BST0dSRVNTLAorCURNQV9FUlJPUiwKK307CisKKy8qKgorICogc3RydWN0IGRtYV9jaGFuX3BlcmNwdSAtIHRoZSBwZXItQ1BVIHBhcnQgb2Ygc3RydWN0IGRtYV9jaGFuCisgKiBAcmVmY291bnQ6IGxvY2FsX3QgdXNlZCBmb3Igb3Blbi1jb2RlZCAiYmlncmVmIiBjb3VudGluZworICogQG1lbWNweV9jb3VudDogdHJhbnNhY3Rpb24gY291bnRlcgorICogQGJ5dGVzX3RyYW5zZmVycmVkOiBieXRlIGNvdW50ZXIKKyAqLworCitzdHJ1Y3QgZG1hX2NoYW5fcGVyY3B1IHsKKwlsb2NhbF90IHJlZmNvdW50OworCS8qIHN0YXRzICovCisJdW5zaWduZWQgbG9uZyBtZW1jcHlfY291bnQ7CisJdW5zaWduZWQgbG9uZyBieXRlc190cmFuc2ZlcnJlZDsKK307CisKKy8qKgorICogc3RydWN0IGRtYV9jaGFuIC0gZGV2aWNlcyBzdXBwbHkgRE1BIGNoYW5uZWxzLCBjbGllbnRzIHVzZSB0aGVtCisgKiBAY2xpZW50OiBwdHIgdG8gdGhlIGNsaWVudCB1c2VyIG9mIHRoaXMgY2hhbiwgd2lsbCBiZSBOVUxMIHdoZW4gdW51c2VkCisgKiBAZGV2aWNlOiBwdHIgdG8gdGhlIGRtYSBkZXZpY2Ugd2hvIHN1cHBsaWVzIHRoaXMgY2hhbm5lbCwgYWx3YXlzICFOVUxMCisgKiBAY29va2llOiBsYXN0IGNvb2tpZSB2YWx1ZSByZXR1cm5lZCB0byBjbGllbnQKKyAqIEBjaGFuX2lkOgorICogQGNsYXNzX2RldjoKKyAqIEByZWZjb3VudDoga3JlZiwgdXNlZCBpbiAiYmlncmVmIiBzbG93LW1vZGUKKyAqIEBzbG93X3JlZjoKKyAqIEByY3U6CisgKiBAY2xpZW50X25vZGU6IHVzZWQgdG8gYWRkIHRoaXMgdG8gdGhlIGNsaWVudCBjaGFuIGxpc3QKKyAqIEBkZXZpY2Vfbm9kZTogdXNlZCB0byBhZGQgdGhpcyB0byB0aGUgZGV2aWNlIGNoYW4gbGlzdAorICogQGxvY2FsOiBwZXItY3B1IHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZG1hX2NoYW5fcGVyY3B1CisgKi8KK3N0cnVjdCBkbWFfY2hhbiB7CisJc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlOworCWRtYV9jb29raWVfdCBjb29raWU7CisKKwkvKiBzeXNmcyAqLworCWludCBjaGFuX2lkOworCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NfZGV2OworCisJc3RydWN0IGtyZWYgcmVmY291bnQ7CisJaW50IHNsb3dfcmVmOworCXN0cnVjdCByY3VfaGVhZCByY3U7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsaWVudF9ub2RlOworCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX25vZGU7CisJc3RydWN0IGRtYV9jaGFuX3BlcmNwdSAqbG9jYWw7Cit9OworCit2b2lkIGRtYV9jaGFuX2NsZWFudXAoc3RydWN0IGtyZWYgKmtyZWYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NoYW5fZ2V0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlpZiAodW5saWtlbHkoY2hhbi0+c2xvd19yZWYpKQorCQlrcmVmX2dldCgmY2hhbi0+cmVmY291bnQpOworCWVsc2UgeworCQlsb2NhbF9pbmMoJihwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgZ2V0X2NwdSgpKS0+cmVmY291bnQpKTsKKwkJcHV0X2NwdSgpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9jaGFuX3B1dChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJaWYgKHVubGlrZWx5KGNoYW4tPnNsb3dfcmVmKSkKKwkJa3JlZl9wdXQoJmNoYW4tPnJlZmNvdW50LCBkbWFfY2hhbl9jbGVhbnVwKTsKKwllbHNlIHsKKwkJbG9jYWxfZGVjKCYocGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGdldF9jcHUoKSktPnJlZmNvdW50KSk7CisJCXB1dF9jcHUoKTsKKwl9Cit9CisKKy8qCisgKiB0eXBlZGVmIGRtYV9ldmVudF9jYWxsYmFjayAtIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYSBETUEgZXZlbnQgY2FsbGJhY2sKKyAqLwordHlwZWRlZiB2b2lkICgqZG1hX2V2ZW50X2NhbGxiYWNrKSAoc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCwKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBlbnVtIGRtYV9ldmVudCBldmVudCk7CisKKy8qKgorICogc3RydWN0IGRtYV9jbGllbnQgLSBpbmZvIG9uIHRoZSBlbnRpdHkgbWFraW5nIHVzZSBvZiBETUEgc2VydmljZXMKKyAqIEBldmVudF9jYWxsYmFjazogZnVuYyBwdHIgdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBoYXBwZW5zCisgKiBAY2hhbl9jb3VudDogbnVtYmVyIG9mIGNoYW5zIGFsbG9jYXRlZAorICogQGNoYW5zX2Rlc2lyZWQ6IG51bWJlciBvZiBjaGFucyByZXF1ZXN0ZWQuIENhbiBiZSArLy0gY2hhbl9jb3VudAorICogQGxvY2s6IHByb3RlY3RzIGFjY2VzcyB0byB0aGUgY2hhbm5lbHMgbGlzdAorICogQGNoYW5uZWxzOiB0aGUgbGlzdCBvZiBETUEgY2hhbm5lbHMgYWxsb2NhdGVkCisgKiBAZ2xvYmFsX25vZGU6IGxpc3RfaGVhZCBmb3IgZ2xvYmFsIGRtYV9jbGllbnRfbGlzdAorICovCitzdHJ1Y3QgZG1hX2NsaWVudCB7CisJZG1hX2V2ZW50X2NhbGxiYWNrCWV2ZW50X2NhbGxiYWNrOworCXVuc2lnbmVkIGludAkJY2hhbl9jb3VudDsKKwl1bnNpZ25lZCBpbnQJCWNoYW5zX2Rlc2lyZWQ7CisKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJY2hhbm5lbHM7CisJc3RydWN0IGxpc3RfaGVhZAlnbG9iYWxfbm9kZTsKK307CisKKy8qKgorICogc3RydWN0IGRtYV9kZXZpY2UgLSBpbmZvIG9uIHRoZSBlbnRpdHkgc3VwcGx5aW5nIERNQSBzZXJ2aWNlcworICogQGNoYW5jbnQ6IGhvdyBtYW55IERNQSBjaGFubmVscyBhcmUgc3VwcG9ydGVkCisgKiBAY2hhbm5lbHM6IHRoZSBsaXN0IG9mIHN0cnVjdCBkbWFfY2hhbgorICogQGdsb2JhbF9ub2RlOiBsaXN0X2hlYWQgZm9yIGdsb2JhbCBkbWFfZGV2aWNlX2xpc3QKKyAqIEByZWZjb3VudDoKKyAqIEBkb25lOgorICogQGRldl9pZDoKKyAqIE90aGVyIGZ1bmMgcHRyczogdXNlZCB0byBtYWtlIHVzZSBvZiB0aGlzIGRldmljZSdzIGNhcGFiaWxpdGllcworICovCitzdHJ1Y3QgZG1hX2RldmljZSB7CisKKwl1bnNpZ25lZCBpbnQgY2hhbmNudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNoYW5uZWxzOworCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX25vZGU7CisKKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCisJaW50IGRldl9pZDsKKworCWludCAoKmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcykoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKwl2b2lkICgqZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisJZG1hX2Nvb2tpZV90ICgqZGV2aWNlX21lbWNweV9idWZfdG9fYnVmKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQl2b2lkICpkZXN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pOworCWRtYV9jb29raWVfdCAoKmRldmljZV9tZW1jcHlfYnVmX3RvX3BnKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdm9pZCAqa2RhdGEsCisJCQlzaXplX3QgbGVuKTsKKwlkbWFfY29va2llX3QgKCpkZXZpY2VfbWVtY3B5X3BnX3RvX3BnKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQlzdHJ1Y3QgcGFnZSAqZGVzdF9wZywgdW5zaWduZWQgaW50IGRlc3Rfb2ZmLAorCQkJc3RydWN0IHBhZ2UgKnNyY19wZywgdW5zaWduZWQgaW50IHNyY19vZmYsIHNpemVfdCBsZW4pOworCWVudW0gZG1hX3N0YXR1cyAoKmRldmljZV9tZW1jcHlfY29tcGxldGUpKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCWRtYV9jb29raWVfdCBjb29raWUsIGRtYV9jb29raWVfdCAqbGFzdCwKKwkJCWRtYV9jb29raWVfdCAqdXNlZCk7CisJdm9pZCAoKmRldmljZV9tZW1jcHlfaXNzdWVfcGVuZGluZykoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK307CisKKy8qIC0tLSBwdWJsaWMgRE1BIGVuZ2luZSBBUEkgLS0tICovCisKK3N0cnVjdCBkbWFfY2xpZW50ICpkbWFfYXN5bmNfY2xpZW50X3JlZ2lzdGVyKGRtYV9ldmVudF9jYWxsYmFjayBldmVudF9jYWxsYmFjayk7Cit2b2lkIGRtYV9hc3luY19jbGllbnRfdW5yZWdpc3RlcihzdHJ1Y3QgZG1hX2NsaWVudCAqY2xpZW50KTsKK3ZvaWQgZG1hX2FzeW5jX2NsaWVudF9jaGFuX3JlcXVlc3Qoc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCwKKwkJdW5zaWduZWQgaW50IG51bWJlcik7CisKKy8qKgorICogZG1hX2FzeW5jX21lbWNweV9idWZfdG9fYnVmIC0gb2ZmbG9hZGVkIGNvcHkgYmV0d2VlbiB2aXJ0dWFsIGFkZHJlc3NlcworICogQGNoYW46IERNQSBjaGFubmVsIHRvIG9mZmxvYWQgY29weSB0bworICogQGRlc3Q6IGRlc3RpbmF0aW9uIGFkZHJlc3MgKHZpcnR1YWwpCisgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyAodmlydHVhbCkKKyAqIEBsZW46IGxlbmd0aAorICoKKyAqIEJvdGggQGRlc3QgYW5kIEBzcmMgbXVzdCBiZSBtYXBwYWJsZSB0byBhIGJ1cyBhZGRyZXNzIGFjY29yZGluZyB0byB0aGUKKyAqIERNQSBtYXBwaW5nIEFQSSBydWxlcyBmb3Igc3RyZWFtaW5nIG1hcHBpbmdzLgorICogQm90aCBAZGVzdCBhbmQgQHNyYyBtdXN0IHN0YXkgbWVtb3J5IHJlc2lkZW50IChrZXJuZWwgbWVtb3J5IG9yIGxvY2tlZAorICogdXNlciBzcGFjZSBwYWdlcykKKyAqLworc3RhdGljIGlubGluZSBkbWFfY29va2llX3QgZG1hX2FzeW5jX21lbWNweV9idWZfdG9fYnVmKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwl2b2lkICpkZXN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCit7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgY3B1KS0+Ynl0ZXNfdHJhbnNmZXJyZWQgKz0gbGVuOworCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5tZW1jcHlfY291bnQrKzsKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfbWVtY3B5X2J1Zl90b19idWYoY2hhbiwgZGVzdCwgc3JjLCBsZW4pOworfQorCisvKioKKyAqIGRtYV9hc3luY19tZW1jcHlfYnVmX3RvX3BnIC0gb2ZmbG9hZGVkIGNvcHkKKyAqIEBjaGFuOiBETUEgY2hhbm5lbCB0byBvZmZsb2FkIGNvcHkgdG8KKyAqIEBwYWdlOiBkZXN0aW5hdGlvbiBwYWdlCisgKiBAb2Zmc2V0OiBvZmZzZXQgaW4gcGFnZSB0byBjb3B5IHRvCisgKiBAa2RhdGE6IHNvdXJjZSBhZGRyZXNzICh2aXJ0dWFsKQorICogQGxlbjogbGVuZ3RoCisgKgorICogQm90aCBAcGFnZS9Ab2Zmc2V0IGFuZCBAa2RhdGEgbXVzdCBiZSBtYXBwYWJsZSB0byBhIGJ1cyBhZGRyZXNzIGFjY29yZGluZworICogdG8gdGhlIERNQSBtYXBwaW5nIEFQSSBydWxlcyBmb3Igc3RyZWFtaW5nIG1hcHBpbmdzLgorICogQm90aCBAcGFnZS9Ab2Zmc2V0IGFuZCBAa2RhdGEgbXVzdCBzdGF5IG1lbW9yeSByZXNpZGVudCAoa2VybmVsIG1lbW9yeSBvcgorICogbG9ja2VkIHVzZXIgc3BhY2UgcGFnZXMpCisgKi8KK3N0YXRpYyBpbmxpbmUgZG1hX2Nvb2tpZV90IGRtYV9hc3luY19tZW1jcHlfYnVmX3RvX3BnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdm9pZCAqa2RhdGEsIHNpemVfdCBsZW4pCit7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgY3B1KS0+Ynl0ZXNfdHJhbnNmZXJyZWQgKz0gbGVuOworCXBlcl9jcHVfcHRyKGNoYW4tPmxvY2FsLCBjcHUpLT5tZW1jcHlfY291bnQrKzsKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfbWVtY3B5X2J1Zl90b19wZyhjaGFuLCBwYWdlLCBvZmZzZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2RhdGEsIGxlbik7Cit9CisKKy8qKgorICogZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcgLSBvZmZsb2FkZWQgY29weQorICogQGNoYW46IERNQSBjaGFubmVsIHRvIG9mZmxvYWQgY29weSB0bworICogQGRlc3RfcGFnZTogZGVzdGluYXRpb24gcGFnZQorICogQGRlc3Rfb2ZmOiBvZmZzZXQgaW4gcGFnZSB0byBjb3B5IHRvCisgKiBAc3JjX3BhZ2U6IHNvdXJjZSBwYWdlCisgKiBAc3JjX29mZjogb2Zmc2V0IGluIHBhZ2UgdG8gY29weSBmcm9tCisgKiBAbGVuOiBsZW5ndGgKKyAqCisgKiBCb3RoIEBkZXN0X3BhZ2UvQGRlc3Rfb2ZmIGFuZCBAc3JjX3BhZ2UvQHNyY19vZmYgbXVzdCBiZSBtYXBwYWJsZSB0byBhIGJ1cworICogYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIERNQSBtYXBwaW5nIEFQSSBydWxlcyBmb3Igc3RyZWFtaW5nIG1hcHBpbmdzLgorICogQm90aCBAZGVzdF9wYWdlL0BkZXN0X29mZiBhbmQgQHNyY19wYWdlL0BzcmNfb2ZmIG11c3Qgc3RheSBtZW1vcnkgcmVzaWRlbnQKKyAqIChrZXJuZWwgbWVtb3J5IG9yIGxvY2tlZCB1c2VyIHNwYWNlIHBhZ2VzKQorICovCitzdGF0aWMgaW5saW5lIGRtYV9jb29raWVfdCBkbWFfYXN5bmNfbWVtY3B5X3BnX3RvX3BnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwlzdHJ1Y3QgcGFnZSAqZGVzdF9wZywgdW5zaWduZWQgaW50IGRlc3Rfb2ZmLCBzdHJ1Y3QgcGFnZSAqc3JjX3BnLAorCXVuc2lnbmVkIGludCBzcmNfb2ZmLCBzaXplX3QgbGVuKQoreworCWludCBjcHUgPSBnZXRfY3B1KCk7CisJcGVyX2NwdV9wdHIoY2hhbi0+bG9jYWwsIGNwdSktPmJ5dGVzX3RyYW5zZmVycmVkICs9IGxlbjsKKwlwZXJfY3B1X3B0cihjaGFuLT5sb2NhbCwgY3B1KS0+bWVtY3B5X2NvdW50Kys7CisJcHV0X2NwdSgpOworCisJcmV0dXJuIGNoYW4tPmRldmljZS0+ZGV2aWNlX21lbWNweV9wZ190b19wZyhjaGFuLCBkZXN0X3BnLCBkZXN0X29mZiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19wZywgc3JjX29mZiwgbGVuKTsKK30KKworLyoqCisgKiBkbWFfYXN5bmNfbWVtY3B5X2lzc3VlX3BlbmRpbmcgLSBmbHVzaCBwZW5kaW5nIGNvcGllcyB0byBIVworICogQGNoYW46CisgKgorICogVGhpcyBhbGxvd3MgZHJpdmVycyB0byBwdXNoIGNvcGllcyB0byBIVyBpbiBiYXRjaGVzLAorICogcmVkdWNpbmcgTU1JTyB3cml0ZXMgd2hlcmUgcG9zc2libGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfYXN5bmNfbWVtY3B5X2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXJldHVybiBjaGFuLT5kZXZpY2UtPmRldmljZV9tZW1jcHlfaXNzdWVfcGVuZGluZyhjaGFuKTsKK30KKworLyoqCisgKiBkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlIC0gcG9sbCBmb3IgdHJhbnNhY3Rpb24gY29tcGxldGlvbgorICogQGNoYW46IERNQSBjaGFubmVsCisgKiBAY29va2llOiB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGNoZWNrIHN0YXR1cyBvZgorICogQGxhc3Q6IHJldHVybnMgbGFzdCBjb21wbGV0ZWQgY29va2llLCBjYW4gYmUgTlVMTAorICogQHVzZWQ6IHJldHVybnMgbGFzdCBpc3N1ZWQgY29va2llLCBjYW4gYmUgTlVMTAorICoKKyAqIElmIEBsYXN0IGFuZCBAdXNlZCBhcmUgcGFzc2VkIGluLCB1cG9uIHJldHVybiB0aGV5IHJlZmxlY3QgdGhlIGRyaXZlcgorICogaW50ZXJuYWwgc3RhdGUgYW5kIGNhbiBiZSB1c2VkIHdpdGggZG1hX2FzeW5jX2lzX2NvbXBsZXRlKCkgdG8gY2hlY2sKKyAqIHRoZSBzdGF0dXMgb2YgbXVsdGlwbGUgY29va2llcyB3aXRob3V0IHJlLWNoZWNraW5nIGhhcmR3YXJlIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gZG1hX3N0YXR1cyBkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwlkbWFfY29va2llX3QgY29va2llLCBkbWFfY29va2llX3QgKmxhc3QsIGRtYV9jb29raWVfdCAqdXNlZCkKK3sKKwlyZXR1cm4gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfbWVtY3B5X2NvbXBsZXRlKGNoYW4sIGNvb2tpZSwgbGFzdCwgdXNlZCk7Cit9CisKKy8qKgorICogZG1hX2FzeW5jX2lzX2NvbXBsZXRlIC0gdGVzdCBhIGNvb2tpZSBhZ2FpbnN0IGNoYW4gc3RhdGUKKyAqIEBjb29raWU6IHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gdGVzdCBzdGF0dXMgb2YKKyAqIEBsYXN0X2NvbXBsZXRlOiBsYXN0IGtub3cgY29tcGxldGVkIHRyYW5zYWN0aW9uCisgKiBAbGFzdF91c2VkOiBsYXN0IGNvb2tpZSB2YWx1ZSBoYW5kZWQgb3V0CisgKgorICogZG1hX2FzeW5jX2lzX2NvbXBsZXRlKCkgaXMgdXNlZCBpbiBkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlKCkKKyAqIHRoZSB0ZXN0IGxvZ2ljIGlzIHNlcGVyYXRlZCBmb3IgbGlnaHR3ZWlnaHQgdGVzdGluZyBvZiBtdWx0aXBsZSBjb29raWVzCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBkbWFfc3RhdHVzIGRtYV9hc3luY19pc19jb21wbGV0ZShkbWFfY29va2llX3QgY29va2llLAorCQkJZG1hX2Nvb2tpZV90IGxhc3RfY29tcGxldGUsIGRtYV9jb29raWVfdCBsYXN0X3VzZWQpCit7CisJaWYgKGxhc3RfY29tcGxldGUgPD0gbGFzdF91c2VkKSB7CisJCWlmICgoY29va2llIDw9IGxhc3RfY29tcGxldGUpIHx8IChjb29raWUgPiBsYXN0X3VzZWQpKQorCQkJcmV0dXJuIERNQV9TVUNDRVNTOworCX0gZWxzZSB7CisJCWlmICgoY29va2llIDw9IGxhc3RfY29tcGxldGUpICYmIChjb29raWUgPiBsYXN0X3VzZWQpKQorCQkJcmV0dXJuIERNQV9TVUNDRVNTOworCX0KKwlyZXR1cm4gRE1BX0lOX1BST0dSRVNTOworfQorCisKKy8qIC0tLSBETUEgZGV2aWNlIC0tLSAqLworCitpbnQgZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlKTsKK3ZvaWQgZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpOworCisvKiAtLS0gSGVscGVyIGlvdi1sb2NraW5nIGZ1bmN0aW9ucyAtLS0gKi8KKworc3RydWN0IGRtYV9wYWdlX2xpc3QgeworCWNoYXIgKmJhc2VfYWRkcmVzczsKKwlpbnQgbnJfcGFnZXM7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKK307CisKK3N0cnVjdCBkbWFfcGlubmVkX2xpc3QgeworCWludCBucl9pb3ZlY3M7CisJc3RydWN0IGRtYV9wYWdlX2xpc3QgcGFnZV9saXN0WzBdOworfTsKKworc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqZG1hX3Bpbl9pb3ZlY19wYWdlcyhzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IGxlbik7Cit2b2lkIGRtYV91bnBpbl9pb3ZlY19wYWdlcyhzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0KiBwaW5uZWRfbGlzdCk7CisKK2RtYV9jb29raWVfdCBkbWFfbWVtY3B5X3RvX2lvdmVjKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IGlvdmVjICppb3YsCisJc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqcGlubmVkX2xpc3QsIHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBzaXplX3QgbGVuKTsKK2RtYV9jb29raWVfdCBkbWFfbWVtY3B5X3BnX3RvX2lvdmVjKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IGlvdmVjICppb3YsCisJc3RydWN0IGRtYV9waW5uZWRfbGlzdCAqcGlubmVkX2xpc3QsIHN0cnVjdCBwYWdlICpwYWdlLAorCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBsZW4pOworCisjZW5kaWYgLyogQ09ORklHX0RNQV9FTkdJTkUgKi8KKyNlbmRpZiAvKiBETUFFTkdJTkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWkuaCBiL2luY2x1ZGUvbGludXgvZG1pLmgKaW5kZXggNjRmZDZjMy4uYjJjZDIwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtaS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfX0RNSV9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogZW51bSBkbWlfZmllbGQgewogCURNSV9OT05FLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbm90aWZ5LmggYi9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaAppbmRleCBmMTM0YTAxLi4xMDJhOTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaApAQCAtMTgsNyArMTgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfRE5PVElGWQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmggYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKaW5kZXggYWQxMzNmYy4uMTcxM2FjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCisrKyBiL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaApAQCAtMjEsNyArMjEsNyBAQAogdHlwZWRlZiB2b2lkIChlbGV2YXRvcl9hY3RpdmF0ZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2RlYWN0aXZhdGVfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCi10eXBlZGVmIGludCAoZWxldmF0b3JfaW5pdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBlbGV2YXRvcl90ICopOwordHlwZWRlZiB2b2lkICooZWxldmF0b3JfaW5pdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBlbGV2YXRvcl90ICopOwogdHlwZWRlZiB2b2lkIChlbGV2YXRvcl9leGl0X2ZuKSAoZWxldmF0b3JfdCAqKTsKIAogc3RydWN0IGVsZXZhdG9yX29wcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYtZW0uaCBiL2luY2x1ZGUvbGludXgvZWxmLWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0YTk2ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZWxmLWVtLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfTElOVVhfRUxGX0VNX0gKKyNkZWZpbmUgX0xJTlVYX0VMRl9FTV9ICisKKy8qIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdGhlIHZhcmlvdXMgRUxGIHRhcmdldCBtYWNoaW5lcyAqLworI2RlZmluZSBFTV9OT05FCQkwCisjZGVmaW5lIEVNX00zMgkJMQorI2RlZmluZSBFTV9TUEFSQwkyCisjZGVmaW5lIEVNXzM4NgkJMworI2RlZmluZSBFTV82OEsJCTQKKyNkZWZpbmUgRU1fODhLCQk1CisjZGVmaW5lIEVNXzQ4NgkJNgkvKiBQZXJoYXBzIGRpc3VzZWQgKi8KKyNkZWZpbmUgRU1fODYwCQk3CisjZGVmaW5lIEVNX01JUFMJCTgJLyogTUlQUyBSMzAwMCAob2ZmaWNpYWxseSwgYmlnLWVuZGlhbiBvbmx5KSAqLworI2RlZmluZSBFTV9NSVBTX1JTNF9CRQkxMAkvKiBNSVBTIFI0MDAwIGJpZy1lbmRpYW4gKi8KKyNkZWZpbmUgRU1fUEFSSVNDCTE1CS8qIEhQUEEgKi8KKyNkZWZpbmUgRU1fU1BBUkMzMlBMVVMJMTgJLyogU3VuJ3MgInY4cGx1cyIgKi8KKyNkZWZpbmUgRU1fUFBDCQkyMAkvKiBQb3dlclBDICovCisjZGVmaW5lIEVNX1BQQzY0CTIxICAgICAgIC8qIFBvd2VyUEM2NCAqLworI2RlZmluZSBFTV9TSAkJNDIJLyogU3VwZXJIICovCisjZGVmaW5lIEVNX1NQQVJDVjkJNDMJLyogU1BBUkMgdjkgNjQtYml0ICovCisjZGVmaW5lIEVNX0lBXzY0CTUwCS8qIEhQL0ludGVsIElBLTY0ICovCisjZGVmaW5lIEVNX1g4Nl82NAk2MgkvKiBBTUQgeDg2LTY0ICovCisjZGVmaW5lIEVNX1MzOTAJCTIyCS8qIElCTSBTLzM5MCAqLworI2RlZmluZSBFTV9DUklTCQk3NgkvKiBBeGlzIENvbW11bmljYXRpb25zIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fVjg1MAkJODcJLyogTkVDIHY4NTAgKi8KKyNkZWZpbmUgRU1fTTMyUgkJODgJLyogUmVuZXNhcyBNMzJSICovCisjZGVmaW5lIEVNX0g4XzMwMAk0NgkvKiBSZW5lc2FzIEg4LzMwMCwzMDBILEg4UyAqLworI2RlZmluZSBFTV9GUlYJCTB4NTQ0MQkvKiBGdWppdHN1IEZSLVYgKi8KKworLyoKKyAqIFRoaXMgaXMgYW4gaW50ZXJpbSB2YWx1ZSB0aGF0IHdlIHdpbGwgdXNlIHVudGlsIHRoZSBjb21taXR0ZWUgY29tZXMKKyAqIHVwIHdpdGggYSBmaW5hbCBudW1iZXIuCisgKi8KKyNkZWZpbmUgRU1fQUxQSEEJMHg5MDI2CisKKy8qIEJvZ3VzIG9sZCB2ODUwIG1hZ2ljIG51bWJlciwgdXNlZCBieSBvbGQgdG9vbHMuICovCisjZGVmaW5lIEVNX0NZR05VU19WODUwCTB4OTA4MAorLyogQm9ndXMgb2xkIG0zMnIgbWFnaWMgbnVtYmVyLCB1c2VkIGJ5IG9sZCB0b29scy4gKi8KKyNkZWZpbmUgRU1fQ1lHTlVTX00zMlIJMHg5MDQxCisvKiBUaGlzIGlzIHRoZSBvbGQgaW50ZXJpbSB2YWx1ZSBmb3IgUy8zOTAgYXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIEVNX1MzOTBfT0xECTB4QTM5MAorCisKKyNlbmRpZiAvKiBfTElOVVhfRUxGX0VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IGQzYmZhY2IuLmI3MGQxZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYXV4dmVjLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLWVtLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogCiAjaWZuZGVmIGVsZl9yZWFkX2ltcGxpZXNfZXhlYwpAQCAtNTUsNjQgKzU2LDYgQEAKICNkZWZpbmUgRVRfTE9QUk9DIDB4ZmYwMAogI2RlZmluZSBFVF9ISVBST0MgMHhmZmZmCiAKLS8qIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdGhlIHZhcmlvdXMgRUxGIHRhcmdldCBtYWNoaW5lcyAqLwotI2RlZmluZSBFTV9OT05FICAwCi0jZGVmaW5lIEVNX00zMiAgIDEKLSNkZWZpbmUgRU1fU1BBUkMgMgotI2RlZmluZSBFTV8zODYgICAzCi0jZGVmaW5lIEVNXzY4SyAgIDQKLSNkZWZpbmUgRU1fODhLICAgNQotI2RlZmluZSBFTV80ODYgICA2ICAgLyogUGVyaGFwcyBkaXN1c2VkICovCi0jZGVmaW5lIEVNXzg2MCAgIDcKLQotI2RlZmluZSBFTV9NSVBTCQk4CS8qIE1JUFMgUjMwMDAgKG9mZmljaWFsbHksIGJpZy1lbmRpYW4gb25seSkgKi8KLQotI2RlZmluZSBFTV9NSVBTX1JTNF9CRSAxMAkvKiBNSVBTIFI0MDAwIGJpZy1lbmRpYW4gKi8KLQotI2RlZmluZSBFTV9QQVJJU0MgICAgICAxNQkvKiBIUFBBICovCi0KLSNkZWZpbmUgRU1fU1BBUkMzMlBMVVMgMTgJLyogU3VuJ3MgInY4cGx1cyIgKi8KLQotI2RlZmluZSBFTV9QUEMJICAgICAgIDIwCS8qIFBvd2VyUEMgKi8KLSNkZWZpbmUgRU1fUFBDNjQgICAgICAgMjEgICAgICAgLyogUG93ZXJQQzY0ICovCi0KLSNkZWZpbmUgRU1fU0gJICAgICAgIDQyCS8qIFN1cGVySCAqLwotCi0jZGVmaW5lIEVNX1NQQVJDVjkgICAgIDQzCS8qIFNQQVJDIHY5IDY0LWJpdCAqLwotCi0jZGVmaW5lIEVNX0lBXzY0CTUwCS8qIEhQL0ludGVsIElBLTY0ICovCi0KLSNkZWZpbmUgRU1fWDg2XzY0CTYyCS8qIEFNRCB4ODYtNjQgKi8KLQotI2RlZmluZSBFTV9TMzkwCQkyMgkvKiBJQk0gUy8zOTAgKi8KLQotI2RlZmluZSBFTV9DUklTICAgICAgICAgNzYgICAgICAvKiBBeGlzIENvbW11bmljYXRpb25zIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KLQotI2RlZmluZSBFTV9WODUwCQk4NwkvKiBORUMgdjg1MCAqLwotCi0jZGVmaW5lIEVNX00zMlIJCTg4CS8qIFJlbmVzYXMgTTMyUiAqLwotCi0jZGVmaW5lIEVNX0g4XzMwMCAgICAgICA0NiAgICAgIC8qIFJlbmVzYXMgSDgvMzAwLDMwMEgsSDhTICovCi0KLS8qCi0gKiBUaGlzIGlzIGFuIGludGVyaW0gdmFsdWUgdGhhdCB3ZSB3aWxsIHVzZSB1bnRpbCB0aGUgY29tbWl0dGVlIGNvbWVzCi0gKiB1cCB3aXRoIGEgZmluYWwgbnVtYmVyLgotICovCi0jZGVmaW5lIEVNX0FMUEhBCTB4OTAyNgotCi0vKiBCb2d1cyBvbGQgdjg1MCBtYWdpYyBudW1iZXIsIHVzZWQgYnkgb2xkIHRvb2xzLiAgKi8KLSNkZWZpbmUgRU1fQ1lHTlVTX1Y4NTAJMHg5MDgwCi0KLS8qIEJvZ3VzIG9sZCBtMzJyIG1hZ2ljIG51bWJlciwgdXNlZCBieSBvbGQgdG9vbHMuICAqLwotI2RlZmluZSBFTV9DWUdOVVNfTTMyUgkweDkwNDEKLQotLyoKLSAqIFRoaXMgaXMgdGhlIG9sZCBpbnRlcmltIHZhbHVlIGZvciBTLzM5MCBhcmNoaXRlY3R1cmUKLSAqLwotI2RlZmluZSBFTV9TMzkwX09MRCAgICAgMHhBMzkwCi0KLSNkZWZpbmUgRU1fRlJWCQkweDU0NDEJCS8qIEZ1aml0c3UgRlItViAqLwotCiAvKiBUaGlzIGlzIHRoZSBpbmZvIHRoYXQgaXMgbmVlZGVkIHRvIHBhcnNlIHRoZSBkeW5hbWljIHNlY3Rpb24gb2YgdGhlIGZpbGUgKi8KICNkZWZpbmUgRFRfTlVMTAkJMAogI2RlZmluZSBEVF9ORUVERUQJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCmluZGV4IDE3NDU4MmYuLjQwODExOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXJycXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDkzNTM1ZjAuLmNmMmFiZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0xNSwyNCArMTUsMjQgQEAKIAogLyogVGhpcyBzaG91bGQgd29yayBmb3IgYm90aCAzMiBhbmQgNjQgYml0IHVzZXJsYW5kLiAqLwogc3RydWN0IGV0aHRvb2xfY21kIHsKLQl1MzIJY21kOwotCXUzMglzdXBwb3J0ZWQ7CS8qIEZlYXR1cmVzIHRoaXMgaW50ZXJmYWNlIHN1cHBvcnRzICovCi0JdTMyCWFkdmVydGlzaW5nOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBhZHZlcnRpc2VzICovCi0JdTE2CXNwZWVkOwkJLyogVGhlIGZvcmNlZCBzcGVlZCwgMTBNYiwgMTAwTWIsIGdpZ2FiaXQgKi8KLQl1OAlkdXBsZXg7CQkvKiBEdXBsZXgsIGhhbGYgb3IgZnVsbCAqLwotCXU4CXBvcnQ7CQkvKiBXaGljaCBjb25uZWN0b3IgcG9ydCAqLwotCXU4CXBoeV9hZGRyZXNzOwotCXU4CXRyYW5zY2VpdmVyOwkvKiBXaGljaCB0cmFuc2NlaXZlciB0byB1c2UgKi8KLQl1OAlhdXRvbmVnOwkvKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvbmVnb3RpYXRpb24gKi8KLQl1MzIJbWF4dHhwa3Q7CS8qIFR4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgdHggaW50ICovCi0JdTMyCW1heHJ4cGt0OwkvKiBSeCBwa3RzIGJlZm9yZSBnZW5lcmF0aW5nIHJ4IGludCAqLwotCXUzMglyZXNlcnZlZFs0XTsKKwlfX3UzMgljbWQ7CisJX191MzIJc3VwcG9ydGVkOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBzdXBwb3J0cyAqLworCV9fdTMyCWFkdmVydGlzaW5nOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBhZHZlcnRpc2VzICovCisJX191MTYJc3BlZWQ7CQkvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCAqLworCV9fdTgJZHVwbGV4OwkJLyogRHVwbGV4LCBoYWxmIG9yIGZ1bGwgKi8KKwlfX3U4CXBvcnQ7CQkvKiBXaGljaCBjb25uZWN0b3IgcG9ydCAqLworCV9fdTgJcGh5X2FkZHJlc3M7CisJX191OAl0cmFuc2NlaXZlcjsJLyogV2hpY2ggdHJhbnNjZWl2ZXIgdG8gdXNlICovCisJX191OAlhdXRvbmVnOwkvKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvbmVnb3RpYXRpb24gKi8KKwlfX3UzMgltYXh0eHBrdDsJLyogVHggcGt0cyBiZWZvcmUgZ2VuZXJhdGluZyB0eCBpbnQgKi8KKwlfX3UzMgltYXhyeHBrdDsJLyogUnggcGt0cyBiZWZvcmUgZ2VuZXJhdGluZyByeCBpbnQgKi8KKwlfX3UzMglyZXNlcnZlZFs0XTsKIH07CiAKICNkZWZpbmUgRVRIVE9PTF9CVVNJTkZPX0xFTgkzMgogLyogdGhlc2Ugc3RyaW5ncyBhcmUgc2V0IHRvIHdoYXRldmVyIHRoZSBkcml2ZXIgYXV0aG9yIGRlY2lkZXMuLi4gKi8KIHN0cnVjdCBldGh0b29sX2RydmluZm8gewotCXUzMgljbWQ7CisJX191MzIJY21kOwogCWNoYXIJZHJpdmVyWzMyXTsJLyogZHJpdmVyIHNob3J0IG5hbWUsICJ0dWxpcCIsICJlZXBybzEwMCIgKi8KIAljaGFyCXZlcnNpb25bMzJdOwkvKiBkcml2ZXIgdmVyc2lvbiBzdHJpbmcgKi8KIAljaGFyCWZ3X3ZlcnNpb25bMzJdOwkvKiBmaXJtd2FyZSB2ZXJzaW9uIHN0cmluZywgaWYgYXBwbGljYWJsZSAqLwpAQCAtNDAsNTMgKzQwLDUzIEBACiAJCQkJLyogRm9yIFBDSSBkZXZpY2VzLCB1c2UgcGNpX25hbWUocGNpX2RldikuICovCiAJY2hhcglyZXNlcnZlZDFbMzJdOwogCWNoYXIJcmVzZXJ2ZWQyWzE2XTsKLQl1MzIJbl9zdGF0czsJLyogbnVtYmVyIG9mIHU2NCdzIGZyb20gRVRIVE9PTF9HU1RBVFMgKi8KLQl1MzIJdGVzdGluZm9fbGVuOwotCXUzMgllZWR1bXBfbGVuOwkvKiBTaXplIG9mIGRhdGEgZnJvbSBFVEhUT09MX0dFRVBST00gKGJ5dGVzKSAqLwotCXUzMglyZWdkdW1wX2xlbjsJLyogU2l6ZSBvZiBkYXRhIGZyb20gRVRIVE9PTF9HUkVHUyAoYnl0ZXMpICovCisJX191MzIJbl9zdGF0czsJLyogbnVtYmVyIG9mIHU2NCdzIGZyb20gRVRIVE9PTF9HU1RBVFMgKi8KKwlfX3UzMgl0ZXN0aW5mb19sZW47CisJX191MzIJZWVkdW1wX2xlbjsJLyogU2l6ZSBvZiBkYXRhIGZyb20gRVRIVE9PTF9HRUVQUk9NIChieXRlcykgKi8KKwlfX3UzMglyZWdkdW1wX2xlbjsJLyogU2l6ZSBvZiBkYXRhIGZyb20gRVRIVE9PTF9HUkVHUyAoYnl0ZXMpICovCiB9OwogCiAjZGVmaW5lIFNPUEFTU19NQVgJNgogLyogd2FrZS1vbi1sYW4gc2V0dGluZ3MgKi8KIHN0cnVjdCBldGh0b29sX3dvbGluZm8gewotCXUzMgljbWQ7Ci0JdTMyCXN1cHBvcnRlZDsKLQl1MzIJd29sb3B0czsKLQl1OAlzb3Bhc3NbU09QQVNTX01BWF07IC8qIFNlY3VyZU9uKHRtKSBwYXNzd29yZCAqLworCV9fdTMyCWNtZDsKKwlfX3UzMglzdXBwb3J0ZWQ7CisJX191MzIJd29sb3B0czsKKwlfX3U4CXNvcGFzc1tTT1BBU1NfTUFYXTsgLyogU2VjdXJlT24odG0pIHBhc3N3b3JkICovCiB9OwogCiAvKiBmb3IgcGFzc2luZyBzaW5nbGUgdmFsdWVzICovCiBzdHJ1Y3QgZXRodG9vbF92YWx1ZSB7Ci0JdTMyCWNtZDsKLQl1MzIJZGF0YTsKKwlfX3UzMgljbWQ7CisJX191MzIJZGF0YTsKIH07CiAKIC8qIGZvciBwYXNzaW5nIGJpZyBjaHVua3Mgb2YgZGF0YSAqLwogc3RydWN0IGV0aHRvb2xfcmVncyB7Ci0JdTMyCWNtZDsKLQl1MzIJdmVyc2lvbjsgLyogZHJpdmVyLXNwZWNpZmljLCBpbmRpY2F0ZXMgZGlmZmVyZW50IGNoaXBzL3JldnMgKi8KLQl1MzIJbGVuOyAvKiBieXRlcyAqLwotCXU4CWRhdGFbMF07CisJX191MzIJY21kOworCV9fdTMyCXZlcnNpb247IC8qIGRyaXZlci1zcGVjaWZpYywgaW5kaWNhdGVzIGRpZmZlcmVudCBjaGlwcy9yZXZzICovCisJX191MzIJbGVuOyAvKiBieXRlcyAqLworCV9fdTgJZGF0YVswXTsKIH07CiAKIC8qIGZvciBwYXNzaW5nIEVFUFJPTSBjaHVua3MgKi8KIHN0cnVjdCBldGh0b29sX2VlcHJvbSB7Ci0JdTMyCWNtZDsKLQl1MzIJbWFnaWM7Ci0JdTMyCW9mZnNldDsgLyogaW4gYnl0ZXMgKi8KLQl1MzIJbGVuOyAvKiBpbiBieXRlcyAqLwotCXU4CWRhdGFbMF07CisJX191MzIJY21kOworCV9fdTMyCW1hZ2ljOworCV9fdTMyCW9mZnNldDsgLyogaW4gYnl0ZXMgKi8KKwlfX3UzMglsZW47IC8qIGluIGJ5dGVzICovCisJX191OAlkYXRhWzBdOwogfTsKIAogLyogZm9yIGNvbmZpZ3VyaW5nIGNvYWxlc2NpbmcgcGFyYW1ldGVycyBvZiBjaGlwICovCiBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSB7Ci0JdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfUNPQUxFU0NFICovCisJX191MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9Q09BTEVTQ0UgKi8KIAogCS8qIEhvdyBtYW55IHVzZWNzIHRvIGRlbGF5IGFuIFJYIGludGVycnVwdCBhZnRlcgogCSAqIGEgcGFja2V0IGFycml2ZXMuICBJZiAwLCBvbmx5IHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzCiAJICogaXMgdXNlZC4KIAkgKi8KLQl1MzIJcnhfY29hbGVzY2VfdXNlY3M7CisJX191MzIJcnhfY29hbGVzY2VfdXNlY3M7CiAKIAkvKiBIb3cgbWFueSBwYWNrZXRzIHRvIGRlbGF5IGFuIFJYIGludGVycnVwdCBhZnRlcgogCSAqIGEgcGFja2V0IGFycml2ZXMuICBJZiAwLCBvbmx5IHJ4X2NvYWxlc2NlX3VzZWNzIGlzCkBAIC05NCwyMSArOTQsMjEgQEAKIAkgKiB0byB6ZXJvIGFzIHRoaXMgd291bGQgY2F1c2UgUlggaW50ZXJydXB0cyB0byBuZXZlciBiZQogCSAqIGdlbmVyYXRlZC4KIAkgKi8KLQl1MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisJX191MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CiAKIAkvKiBTYW1lIGFzIGFib3ZlIHR3byBwYXJhbWV0ZXJzLCBleGNlcHQgdGhhdCB0aGVzZSB2YWx1ZXMKIAkgKiBhcHBseSB3aGlsZSBhbiBJUlEgaXMgYmVpbmcgc2VydmljZWQgYnkgdGhlIGhvc3QuICBOb3QKIAkgKiBhbGwgY2FyZHMgc3VwcG9ydCB0aGlzIGZlYXR1cmUgYW5kIHRoZSB2YWx1ZXMgYXJlIGlnbm9yZWQKIAkgKiBpbiB0aGF0IGNhc2UuCiAJICovCi0JdTMyCXJ4X2NvYWxlc2NlX3VzZWNzX2lycTsKLQl1MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOworCV9fdTMyCXJ4X2NvYWxlc2NlX3VzZWNzX2lycTsKKwlfX3UzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CiAKIAkvKiBIb3cgbWFueSB1c2VjcyB0byBkZWxheSBhIFRYIGludGVycnVwdCBhZnRlcgogCSAqIGEgcGFja2V0IGlzIHNlbnQuICBJZiAwLCBvbmx5IHR4X21heF9jb2FsZXNjZWRfZnJhbWVzCiAJICogaXMgdXNlZC4KIAkgKi8KLQl1MzIJdHhfY29hbGVzY2VfdXNlY3M7CisJX191MzIJdHhfY29hbGVzY2VfdXNlY3M7CiAKIAkvKiBIb3cgbWFueSBwYWNrZXRzIHRvIGRlbGF5IGEgVFggaW50ZXJydXB0IGFmdGVyCiAJICogYSBwYWNrZXQgaXMgc2VudC4gIElmIDAsIG9ubHkgdHhfY29hbGVzY2VfdXNlY3MgaXMKQEAgLTExNiwyMiArMTE2LDIyIEBACiAJICogdG8gemVybyBhcyB0aGlzIHdvdWxkIGNhdXNlIFRYIGludGVycnVwdHMgdG8gbmV2ZXIgYmUKIAkgKiBnZW5lcmF0ZWQuCiAJICovCi0JdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCV9fdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCiAJLyogU2FtZSBhcyBhYm92ZSB0d28gcGFyYW1ldGVycywgZXhjZXB0IHRoYXQgdGhlc2UgdmFsdWVzCiAJICogYXBwbHkgd2hpbGUgYW4gSVJRIGlzIGJlaW5nIHNlcnZpY2VkIGJ5IHRoZSBob3N0LiAgTm90CiAJICogYWxsIGNhcmRzIHN1cHBvcnQgdGhpcyBmZWF0dXJlIGFuZCB0aGUgdmFsdWVzIGFyZSBpZ25vcmVkCiAJICogaW4gdGhhdCBjYXNlLgogCSAqLwotCXUzMgl0eF9jb2FsZXNjZV91c2Vjc19pcnE7Ci0JdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKKwlfX3UzMgl0eF9jb2FsZXNjZV91c2Vjc19pcnE7CisJX191MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOwogCiAJLyogSG93IG1hbnkgdXNlY3MgdG8gZGVsYXkgaW4tbWVtb3J5IHN0YXRpc3RpY3MKIAkgKiBibG9jayB1cGRhdGVzLiAgU29tZSBkcml2ZXJzIGRvIG5vdCBoYXZlIGFuIGluLW1lbW9yeQogCSAqIHN0YXRpc3RpYyBibG9jaywgYW5kIGluIHN1Y2ggY2FzZXMgdGhpcyB2YWx1ZSBpcyBpZ25vcmVkLgogCSAqIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgemVyby4KIAkgKi8KLQl1MzIJc3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3M7CisJX191MzIJc3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3M7CiAKIAkvKiBBZGFwdGl2ZSBSWC9UWCBjb2FsZXNjaW5nIGlzIGFuIGFsZ29yaXRobSBpbXBsZW1lbnRlZCBieQogCSAqIHNvbWUgZHJpdmVycyB0byBpbXByb3ZlIGxhdGVuY3kgdW5kZXIgbG93IHBhY2tldCByYXRlcyBhbmQKQEAgLTE0MCwxOCArMTQwLDE4IEBACiAJICogbm90IGltcGxlbWVudGVkIGJ5IHRoZSBkcml2ZXIgY2F1c2VzIHRoZXNlIHZhbHVlcyB0byBiZQogCSAqIHNpbGVudGx5IGlnbm9yZWQuCiAJICovCi0JdTMyCXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKLQl1MzIJdXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlOworCV9fdTMyCXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKKwlfX3UzMgl1c2VfYWRhcHRpdmVfdHhfY29hbGVzY2U7CiAKIAkvKiBXaGVuIHRoZSBwYWNrZXQgcmF0ZSAobWVhc3VyZWQgaW4gcGFja2V0cyBwZXIgc2Vjb25kKQogCSAqIGlzIGJlbG93IHBrdF9yYXRlX2xvdywgdGhlIHtyeCx0eH1fKl9sb3cgcGFyYW1ldGVycyBhcmUKIAkgKiB1c2VkLgogCSAqLwotCXUzMglwa3RfcmF0ZV9sb3c7Ci0JdTMyCXJ4X2NvYWxlc2NlX3VzZWNzX2xvdzsKLQl1MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93OwotCXUzMgl0eF9jb2FsZXNjZV91c2Vjc19sb3c7Ci0JdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdzsKKwlfX3UzMglwa3RfcmF0ZV9sb3c7CisJX191MzIJcnhfY29hbGVzY2VfdXNlY3NfbG93OworCV9fdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdzsKKwlfX3UzMgl0eF9jb2FsZXNjZV91c2Vjc19sb3c7CisJX191MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93OwogCiAJLyogV2hlbiB0aGUgcGFja2V0IHJhdGUgaXMgYmVsb3cgcGt0X3JhdGVfaGlnaCBidXQgYWJvdmUKIAkgKiBwa3RfcmF0ZV9sb3cgKGJvdGggbWVhc3VyZWQgaW4gcGFja2V0cyBwZXIgc2Vjb25kKSB0aGUKQEAgLTE2Miw0MyArMTYyLDQzIEBACiAJICogaXMgYWJvdmUgcGt0X3JhdGVfaGlnaCwgdGhlIHtyeCx0eH1fKl9oaWdoIHBhcmFtZXRlcnMgYXJlCiAJICogdXNlZC4KIAkgKi8KLQl1MzIJcGt0X3JhdGVfaGlnaDsKLQl1MzIJcnhfY29hbGVzY2VfdXNlY3NfaGlnaDsKLQl1MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKLQl1MzIJdHhfY29hbGVzY2VfdXNlY3NfaGlnaDsKLQl1MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKKwlfX3UzMglwa3RfcmF0ZV9oaWdoOworCV9fdTMyCXJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7CisJX191MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKKwlfX3UzMgl0eF9jb2FsZXNjZV91c2Vjc19oaWdoOworCV9fdTMyCXR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2g7CiAKIAkvKiBIb3cgb2Z0ZW4gdG8gZG8gYWRhcHRpdmUgY29hbGVzY2luZyBwYWNrZXQgcmF0ZSBzYW1wbGluZywKIAkgKiBtZWFzdXJlZCBpbiBzZWNvbmRzLiAgTXVzdCBub3QgYmUgemVyby4KIAkgKi8KLQl1MzIJcmF0ZV9zYW1wbGVfaW50ZXJ2YWw7CisJX191MzIJcmF0ZV9zYW1wbGVfaW50ZXJ2YWw7CiB9OwogCiAvKiBmb3IgY29uZmlndXJpbmcgUlgvVFggcmluZyBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gewotCXUzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31SSU5HUEFSQU0gKi8KKwlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31SSU5HUEFSQU0gKi8KIAogCS8qIFJlYWQgb25seSBhdHRyaWJ1dGVzLiAgVGhlc2UgaW5kaWNhdGUgdGhlIG1heGltdW0gbnVtYmVyCiAJICogb2YgcGVuZGluZyBSWC9UWCByaW5nIGVudHJpZXMgdGhlIGRyaXZlciB3aWxsIGFsbG93IHRoZQogCSAqIHVzZXIgdG8gc2V0LgogCSAqLwotCXUzMglyeF9tYXhfcGVuZGluZzsKLQl1MzIJcnhfbWluaV9tYXhfcGVuZGluZzsKLQl1MzIJcnhfanVtYm9fbWF4X3BlbmRpbmc7Ci0JdTMyCXR4X21heF9wZW5kaW5nOworCV9fdTMyCXJ4X21heF9wZW5kaW5nOworCV9fdTMyCXJ4X21pbmlfbWF4X3BlbmRpbmc7CisJX191MzIJcnhfanVtYm9fbWF4X3BlbmRpbmc7CisJX191MzIJdHhfbWF4X3BlbmRpbmc7CiAKIAkvKiBWYWx1ZXMgY2hhbmdlYWJsZSBieSB0aGUgdXNlci4gIFRoZSB2YWxpZCB2YWx1ZXMgYXJlCiAJICogaW4gdGhlIHJhbmdlIDEgdG8gdGhlICIqX21heF9wZW5kaW5nIiBjb3VudGVycGFydCBhYm92ZS4KIAkgKi8KLQl1MzIJcnhfcGVuZGluZzsKLQl1MzIJcnhfbWluaV9wZW5kaW5nOwotCXUzMglyeF9qdW1ib19wZW5kaW5nOwotCXUzMgl0eF9wZW5kaW5nOworCV9fdTMyCXJ4X3BlbmRpbmc7CisJX191MzIJcnhfbWluaV9wZW5kaW5nOworCV9fdTMyCXJ4X2p1bWJvX3BlbmRpbmc7CisJX191MzIJdHhfcGVuZGluZzsKIH07CiAKIC8qIGZvciBjb25maWd1cmluZyBsaW5rIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHsKLQl1MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9UEFVU0VQQVJBTSAqLworCV9fdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfVBBVVNFUEFSQU0gKi8KIAogCS8qIElmIHRoZSBsaW5rIGlzIGJlaW5nIGF1dG8tbmVnb3RpYXRlZCAodmlhIGV0aHRvb2xfY21kLmF1dG9uZWcKIAkgKiBiZWluZyB0cnVlKSB0aGUgdXNlciBtYXkgc2V0ICdhdXRvbmV0JyBoZXJlIG5vbi16ZXJvIHRvIGhhdmUgdGhlCkBAIC0yMTAsOSArMjEwLDkgQEAKIAkgKiB0aGVuIHtyeCx0eH1fcGF1c2UgZm9yY2UgdGhlIGRyaXZlciB0byB1c2Uvbm90LXVzZSBwYXVzZQogCSAqIGZsb3cgY29udHJvbC4KIAkgKi8KLQl1MzIJYXV0b25lZzsKLQl1MzIJcnhfcGF1c2U7Ci0JdTMyCXR4X3BhdXNlOworCV9fdTMyCWF1dG9uZWc7CisJX191MzIJcnhfcGF1c2U7CisJX191MzIJdHhfcGF1c2U7CiB9OwogCiAjZGVmaW5lIEVUSF9HU1RSSU5HX0xFTgkJMzIKQEAgLTIyMywxMCArMjIzLDEwIEBACiAKIC8qIGZvciBwYXNzaW5nIHN0cmluZyBzZXRzIGZvciBkYXRhIHRhZ2dpbmcgKi8KIHN0cnVjdCBldGh0b29sX2dzdHJpbmdzIHsKLQl1MzIJY21kOwkJLyogRVRIVE9PTF9HU1RSSU5HUyAqLwotCXUzMglzdHJpbmdfc2V0OwkvKiBzdHJpbmcgc2V0IGlkIGUuYy4gRVRIX1NTX1RFU1QsIGV0YyovCi0JdTMyCWxlbjsJCS8qIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSBzdHJpbmcgc2V0ICovCi0JdTgJZGF0YVswXTsKKwlfX3UzMgljbWQ7CQkvKiBFVEhUT09MX0dTVFJJTkdTICovCisJX191MzIJc3RyaW5nX3NldDsJLyogc3RyaW5nIHNldCBpZCBlLmMuIEVUSF9TU19URVNULCBldGMqLworCV9fdTMyCWxlbjsJCS8qIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSBzdHJpbmcgc2V0ICovCisJX191OAlkYXRhWzBdOwogfTsKIAogZW51bSBldGh0b29sX3Rlc3RfZmxhZ3MgewpAQCAtMjM2LDI2ICsyMzYsMjggQEAKIAogLyogZm9yIHJlcXVlc3RpbmcgTklDIHRlc3QgYW5kIGdldHRpbmcgcmVzdWx0cyovCiBzdHJ1Y3QgZXRodG9vbF90ZXN0IHsKLQl1MzIJY21kOwkJLyogRVRIVE9PTF9URVNUICovCi0JdTMyCWZsYWdzOwkJLyogRVRIX1RFU1RfRkxfeHh4ICovCi0JdTMyCXJlc2VydmVkOwotCXUzMglsZW47CQkvKiByZXN1bHQgbGVuZ3RoLCBpbiBudW1iZXIgb2YgdTY0IGVsZW1lbnRzICovCi0JdTY0CWRhdGFbMF07CisJX191MzIJY21kOwkJLyogRVRIVE9PTF9URVNUICovCisJX191MzIJZmxhZ3M7CQkvKiBFVEhfVEVTVF9GTF94eHggKi8KKwlfX3UzMglyZXNlcnZlZDsKKwlfX3UzMglsZW47CQkvKiByZXN1bHQgbGVuZ3RoLCBpbiBudW1iZXIgb2YgdTY0IGVsZW1lbnRzICovCisJX191NjQJZGF0YVswXTsKIH07CiAKIC8qIGZvciBkdW1waW5nIE5JQy1zcGVjaWZpYyBzdGF0aXN0aWNzICovCiBzdHJ1Y3QgZXRodG9vbF9zdGF0cyB7Ci0JdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1NUQVRTICovCi0JdTMyCW5fc3RhdHM7CS8qIG51bWJlciBvZiB1NjQncyBiZWluZyByZXR1cm5lZCAqLwotCXU2NAlkYXRhWzBdOworCV9fdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1NUQVRTICovCisJX191MzIJbl9zdGF0czsJLyogbnVtYmVyIG9mIHU2NCdzIGJlaW5nIHJldHVybmVkICovCisJX191NjQJZGF0YVswXTsKIH07CiAKIHN0cnVjdCBldGh0b29sX3Blcm1fYWRkciB7Ci0JdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1BFUk1BRERSICovCi0JdTMyCXNpemU7Ci0JdTgJZGF0YVswXTsKKwlfX3UzMgljbWQ7CQkvKiBFVEhUT09MX0dQRVJNQUREUiAqLworCV9fdTMyCXNpemU7CisJX191OAlkYXRhWzBdOwogfTsKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogc3RydWN0IG5ldF9kZXZpY2U7CiAKIC8qIFNvbWUgZ2VuZXJpYyBtZXRob2RzIGRyaXZlcnMgbWF5IHVzZSBpbiB0aGVpciBldGh0b29sX29wcyAqLwpAQCAtMzcxLDYgKzM3Myw3IEBACiAJdTMyICAgICAoKmdldF91Zm8pKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCWludCAgICAgKCpzZXRfdWZvKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOwogfTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIENNRHMgY3VycmVudGx5IHN1cHBvcnRlZCAqLwogI2RlZmluZSBFVEhUT09MX0dTRVQJCTB4MDAwMDAwMDEgLyogR2V0IHNldHRpbmdzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQyX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaAppbmRleCBmN2JkMWM3Li5mYWNmMzRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaApAQCAtMTcsNyArMTcsNiBAQAogI2RlZmluZSBfTElOVVhfRVhUMl9GU19ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnNfc2IuaD4KIAogLyoKICAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcwpAQCAtNzAsNiArNjksNyBAQAogI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDCTB4RUY1MwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnNfc2IuaD4KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDJfc2JfaW5mbyAqRVhUMl9TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiBzYi0+c19mc19pbmZvOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAppbmRleCAzYWRlNmE0Li43NTdkNTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtMTcsMTEgKzE3LDYgQEAKICNkZWZpbmUgX0xJTlVYX0VYVDNfRlNfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9leHQzX2ZzX2kuaD4KLSNpbmNsdWRlIDxsaW51eC9leHQzX2ZzX3NiLmg+Ci0KLQotc3RydWN0IHN0YXRmczsKIAogLyoKICAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZXN5c3RlbSBjb25zdGFudHMvc3RydWN0dXJlcwpAQCAtNDg3LDYgKzQ4Miw4IEBACiB9OwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnNfc2IuaD4KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDNfc2JfaW5mbyAqIEVYVDNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKQEAgLTY2NCw2ICs2NjEsOCBAQAogI2RlZmluZSBEWF9IQVNIX0hBTEZfTUQ0CTEKICNkZWZpbmUgRFhfSEFTSF9URUEJCTIKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogLyogaGFzaCBpbmZvIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBkaXJlY3RvcnkgaGFzaCAqLwogc3RydWN0IGR4X2hhc2hfaW5mbwogewpAQCAtNjc1LDcgKzY3NCw2IEBACiAKICNkZWZpbmUgRVhUM19IVFJFRV9FT0YJMHg3ZmZmZmZmZgogCi0jaWZkZWYgX19LRVJORUxfXwogLyoKICAqIENvbnRyb2wgcGFyYW1ldGVycyB1c2VkIGJ5IGV4dDNfaHRyZWVfbmV4dF9ibG9jawogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggZjgxM2JjOC4uZWNjOGMyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNiw3ICs2LDYgQEAKICAqIHN0cnVjdHVyZXMgZXRjLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmggYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKaW5kZXggMTE0MzhlZi4uY2M1ZGVjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaApAQCAtNTQsMTkgKzU0LDIwIEBACiAKIAlpZiAoaXNkaXIpCiAJCWlzZGlyID0gSU5fSVNESVI7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChvbGRfZGlyLCBJTl9NT1ZFRF9GUk9NfGlzZGlyLGNvb2tpZSxvbGRfbmFtZSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChuZXdfZGlyLCBJTl9NT1ZFRF9UT3xpc2RpciwgY29va2llLCBuZXdfbmFtZSk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChvbGRfZGlyLCBJTl9NT1ZFRF9GUk9NfGlzZGlyLGNvb2tpZSxvbGRfbmFtZSwKKwkJCQkgIHNvdXJjZSk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChuZXdfZGlyLCBJTl9NT1ZFRF9UT3xpc2RpciwgY29va2llLCBuZXdfbmFtZSwKKwkJCQkgIHNvdXJjZSk7CiAKIAlpZiAodGFyZ2V0KSB7Ci0JCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQodGFyZ2V0LCBJTl9ERUxFVEVfU0VMRiwgMCwgTlVMTCk7CisJCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQodGFyZ2V0LCBJTl9ERUxFVEVfU0VMRiwgMCwgTlVMTCwgTlVMTCk7CiAJCWlub3RpZnlfaW5vZGVfaXNfZGVhZCh0YXJnZXQpOwogCX0KIAogCWlmIChzb3VyY2UpIHsKLQkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzb3VyY2UsIElOX01PVkVfU0VMRiwgMCwgTlVMTCk7CisJCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoc291cmNlLCBJTl9NT1ZFX1NFTEYsIDAsIE5VTEwsIE5VTEwpOwogCX0KLQlhdWRpdF9pbm9kZV9jaGlsZChvbGRfbmFtZSwgc291cmNlLCBvbGRfZGlyLT5pX2lubyk7Ci0JYXVkaXRfaW5vZGVfY2hpbGQobmV3X25hbWUsIHRhcmdldCwgbmV3X2Rpci0+aV9pbm8pOworCWF1ZGl0X2lub2RlX2NoaWxkKG5ld19uYW1lLCBzb3VyY2UsIG5ld19kaXItPmlfaW5vKTsKIH0KIAogLyoKQEAgLTg1LDcgKzg2LDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2lub2RlcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgSU5fREVMRVRFX1NFTEYsIDAsIE5VTEwpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0RFTEVURV9TRUxGLCAwLCBOVUxMLCBOVUxMKTsKIAlpbm90aWZ5X2lub2RlX2lzX2RlYWQoaW5vZGUpOwogfQogCkBAIC05NSw3ICs5Niw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfY3JlYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlpbm9kZV9kaXJfbm90aWZ5KGlub2RlLCBETl9DUkVBVEUpOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0NSRUFURSwgMCwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgSU5fQ1JFQVRFLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCSAgZGVudHJ5LT5kX2lub2RlKTsKIAlhdWRpdF9pbm9kZV9jaGlsZChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUsIGlub2RlLT5pX2lubyk7CiB9CiAKQEAgLTEwNiw3ICsxMDgsNyBAQAogewogCWlub2RlX2Rpcl9ub3RpZnkoaW5vZGUsIEROX0NSRUFURSk7CiAJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgSU5fQ1JFQVRFIHwgSU5fSVNESVIsIDAsIAotCQkJCSAgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCQkJICBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUpOwogCWF1ZGl0X2lub2RlX2NoaWxkKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSwgaW5vZGUtPmlfaW5vKTsKIH0KIApAQCAtMTIzLDcgKzEyNSw3IEBACiAKIAlkbm90aWZ5X3BhcmVudChkZW50cnksIEROX0FDQ0VTUyk7CiAJaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KGRlbnRyeSwgbWFzaywgMCwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xMzksNyArMTQxLDcgQEAKIAogCWRub3RpZnlfcGFyZW50KGRlbnRyeSwgRE5fTU9ESUZZKTsKIAlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoZGVudHJ5LCBtYXNrLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAogLyoKQEAgLTE1NCw3ICsxNTYsNyBAQAogCQltYXNrIHw9IElOX0lTRElSOwogCiAJaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KGRlbnRyeSwgbWFzaywgMCwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCk7CQorCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwsIE5VTEwpOwogfQogCiAvKgpAQCAtMTcyLDcgKzE3NCw3IEBACiAJCW1hc2sgfD0gSU5fSVNESVI7CiAKIAlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoZGVudHJ5LCBtYXNrLCAwLCBuYW1lKTsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAogLyoKQEAgLTE4Nyw3ICsxODksNyBAQAogCQltYXNrIHw9IElOX0lTRElSOwogCiAJaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KGRlbnRyeSwgbWFzaywgMCwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0yMzQsNyArMjM2LDcgQEAKIAlpZiAoaW5fbWFzaykgewogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCWluX21hc2sgfD0gSU5fSVNESVI7Ci0JCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIGluX21hc2ssIDAsIE5VTEwpOworCQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBpbl9tYXNrLCAwLCBOVUxMLCBOVUxMKTsKIAkJaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KGRlbnRyeSwgaW5fbWFzaywgMCwKIAkJCQkJCSAgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdGFwZS5oIGIvaW5jbHVkZS9saW51eC9mdGFwZS5oCmluZGV4IDcyZmFlZWMuLjdlNzAzOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRhcGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0YXBlLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tdGlvLmg+CiAKICNkZWZpbmUgRlRfU0VDVE9SKHgpCQkoeCsxKQkvKiBzZWN0b3Igb2Zmc2V0IGludG8gcmVhbCBzZWN0b3IgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaCBiL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAppbmRleCA3MWU3YjI4Li4yY2RiYTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCkBAIC05LDYgKzksNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtMTU0LDYgKzE1NSw4IEBACiAKIHZvaWQgZ2FtZXBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KTsKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2RlZmluZSBHQU1FUE9SVF9NT0RFX0RJU0FCTEVECQkwCiAjZGVmaW5lIEdBTUVQT1JUX01PREVfUkFXCQkxCiAjZGVmaW5lIEdBTUVQT1JUX01PREVfQ09PS0VECQkyCkBAIC0xNjksNiArMTcyLDggQEAKICNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX0dSQVZJUwkweDAwMDkKICNkZWZpbmUgR0FNRVBPUlRfSURfVkVORE9SX0dVSUxMRU1PVAkweDAwMGEKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogc3RhdGljIGlubGluZSB2b2lkIGdhbWVwb3J0X3RyaWdnZXIoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCkKIHsKIAlpZiAoZ2FtZXBvcnQtPnRyaWdnZXIpCkBAIC0yMTksNCArMjI0LDUgQEAKIHZvaWQgZ2FtZXBvcnRfc3RhcnRfcG9sbGluZyhzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KTsKIHZvaWQgZ2FtZXBvcnRfc3RvcF9wb2xsaW5nKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpOwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKaW5kZXggNjUyNjExYS4uZTI1Mzg0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5lcmljX3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaApAQCAtMTIsNiArMTIsNyBAQAogI2lmbmRlZiBHRU5FUklDX1NFUklBTF9ICiAjZGVmaW5lIEdFTkVSSUNfU0VSSUFMX0gKIAorI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBzdHJ1Y3QgcmVhbF9kcml2ZXIgewpAQCAtNTQsNiArNTUsNyBAQAogICBzcGlubG9ja190ICAgICAgICAgICAgICBkcml2ZXJfbG9jazsKIH07CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIEZsYWdzICovCiAvKiBXYXJuaW5nOiBzZXJpYWwuaCBkZWZpbmVzIHNvbWUgQVNZTkNfIGZsYWdzLCB0aGV5IHNheSB0aGV5IGFyZSAib25seSIKQEAgLTc1LDcgKzc3LDcgQEAKICNkZWZpbmUgR1NfREVCVUdfRkxPVyAgICAweDAwMDAwMDIwCiAjZGVmaW5lIEdTX0RFQlVHX1dSSVRFICAgMHgwMDAwMDA0MAogCi0KKyNpZmRlZiBfX0tFUk5FTF9fCiB2b2lkIGdzX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOwogaW50ICBnc193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCAKICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC05NCw1ICs5Niw1IEBACiBpbnQgIGdzX3NldHNlcmlhbChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCk7CiBpbnQgIGdzX2dldHNlcmlhbChzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCk7CiB2b2lkIGdzX2dvdF9icmVhayhzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCk7Ci0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCAyZWY4NDViLi4zNDk4YTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC05LDEzICs5LDcgQEAKICAqCQk8ZHJld0Bjb2xvcmFkby5lZHU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiBlbnVtIHsKIC8qIFRoZXNlIHRocmVlIGhhdmUgaWRlbnRpY2FsIGJlaGF2aW91cjsgdXNlIHRoZSBzZWNvbmQgb25lIGlmIERPUyBGRElTSyBnZXRzCkBAIC02MSw2ICs1NSwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCiBzdHJ1Y3QgcGFydGl0aW9uIHsKIAl1bnNpZ25lZCBjaGFyIGJvb3RfaW5kOwkJLyogMHg4MCAtIGFjdGl2ZSAqLwogCXVuc2lnbmVkIGNoYXIgaGVhZDsJCS8qIHN0YXJ0aW5nIGhlYWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IDNhYzQ1MjkuLmNjOWU2MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXJkaXJxLmggYi9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaAppbmRleCBlYWI1MzcwLi4xMTRhZTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgTElOVVhfSEFSRElSUV9ICiAjZGVmaW5lIExJTlVYX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKaW5kZXggODkyYzRlYS4uODVjZTdlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9ISUdITUVNX0gKICNkZWZpbmUgX0xJTlVYX0hJR0hNRU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaCBiL2luY2x1ZGUvbGludXgvaGlnaHVpZC5oCmluZGV4IDUzZWNhYzMuLjQzNGU1NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaHVpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaHVpZC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfSElHSFVJRF9ICiAjZGVmaW5lIF9MSU5VWF9ISUdIVUlEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCmluZGV4IDMwNmFjZjEuLjdkMmExYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9hY3RpdmUoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQogewotCXJldHVybiB0aW1lci0+bm9kZS5yYl9wYXJlbnQgIT0gSFJUSU1FUl9JTkFDVElWRTsKKwlyZXR1cm4gcmJfcGFyZW50KCZ0aW1lci0+bm9kZSkgIT0gJnRpbWVyLT5ub2RlOwogfQogCiAvKiBGb3J3YXJkIGEgaHJ0aW1lciBzbyBpdCBleHBpcmVzIGFmdGVyIG5vdzogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28taXRlLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oCmluZGV4IDI2YThiODkuLjAwNzNmZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28taXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1pdGUuaApAQCAtMjksNyArMjksNyBAQAogI2lmbmRlZiBJMkNfQUxHT19JVEVfSAogI2RlZmluZSBJMkNfQUxHT19JVEVfSCAxCiAKLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBFeGFtcGxlIG9mIGEgc2VxdWVudGlhbCByZWFkIHJlcXVlc3Q6CiAJc3RydWN0IGkyY19paWNfbXNnIHNfbXNnOyAKQEAgLTQ5LDYgKzQ5LDkgQEAKIAljaGFyICpidWY7CS8qIHBvaW50ZXIgdG8gbXNnIGRhdGEgKi8KIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CisKIHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSB7CiAJdm9pZCAqZGF0YTsJCS8qIHByaXZhdGUgZGF0YSBmb3IgbG9sZXZlbCByb3V0aW5lcwkqLwogCXZvaWQgKCpzZXRpaWMpICh2b2lkICpkYXRhLCBpbnQgY3RsLCBpbnQgdmFsKTsKQEAgLTY1LDUgKzY4LDUgQEAKIAogaW50IGkyY19paWNfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CiBpbnQgaTJjX2lpY19kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBJMkNfQUxHT19JVEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggMTYzNWVlMi4uMDUxMDQzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0yMCwxNCArMjAsMTUgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4JCSAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZAogICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLwogCiAjaWZuZGVmIF9MSU5VWF9JMkNfSAogI2RlZmluZSBfTElOVVhfSTJDX0gKIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaWZkZWYgX19LRVJORUxfXyAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4JLyogZm9yIHN0cnVjdCBkZXZpY2UgKi8KQEAgLTM1NCw2ICszNTUsNyBAQAogewogCXJldHVybiBhZGFwLT5ucjsKIH0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qCiAgKiBJMkMgTWVzc2FnZSAtIHVzZWQgZm9yIHB1cmUgaTJjIHRyYW5zYWN0aW9uLCBhbHNvIGZyb20gL2RldiBpbnRlcmZhY2UKQEAgLTQ2OSw2ICs0NzEsNyBAQAogI2RlZmluZSBJMkNfU01CVVMJMHgwNzIwCS8qIFNNQnVzLWxldmVsIGFjY2VzcyAqLwogCiAvKiAtLS0tLSBJMkMtREVWOiBjaGFyIGRldmljZSBpbnRlcmZhY2Ugc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmZGVmIF9fS0VSTkVMX18KIAogI2RlZmluZSBJMkNfTUFKT1IJODkJCS8qIERldmljZSBtYWpvciBudW1iZXIJCSovCiAKQEAgLTY0Niw1ICs2NDksNSBAQAogCQkJCSAgICBmb3JjZV8jI2NoaXA2LCBmb3JjZV8jI2NoaXA3LAlcCiAJCQkJICAgIGZvcmNlXyMjY2hpcDgsIE5VTEwgfTsJCVwKIEkyQ19DTElFTlRfSU5TTU9EX0NPTU1PTgotCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9JMkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8tZGV2LmggYi9pbmNsdWRlL2xpbnV4L2kyby1kZXYuaAppbmRleCAzNmZkMThjLi5jMjUxOWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyby1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyby1kZXYuaApAQCAtMTMsNyArMTMsNyBAQAogICogVGhpcyBoZWFkZXIgZmlsZSBkZWZpbmVzIHRoZSBJMk8gQVBJcyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gYm90aAogICogdGhlIGtlcm5lbCBhbmQgdXNlciBsZXZlbCBhcHBsaWNhdGlvbnMuICBLZXJuZWwgc3BlY2lmaWMgc3RydWN0dXJlcwogICogYXJlIGRlZmluZWQgaW4gaTJvX29zbS4gT1NNcyBzaG91bGQgaW5jbHVkZSBfb25seV8gaTJvX29zbS5oIHdoaWNoCi0gKiBhdXRvbWF0aWNhbGx5IGluY2x1ZHMgdGhpcyBmaWxlLgorICogYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGlzIGZpbGUuCiAgKgogICovCiAKQEAgLTIzLDE0ICsyMyw3IEBACiAvKiBIb3cgbWFueSBjb250cm9sbGVycyBhcmUgd2UgYWxsb3dpbmcgKi8KICNkZWZpbmUgTUFYX0kyT19DT05UUk9MTEVSUwkzMgogCi0vLyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2lmbmRlZiBfX0tFUk5FTF9fCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwotCi0jZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKIC8qCiAgKiBJMk8gQ29udHJvbCBJT0NUTHMgYW5kIHN0cnVjdHVyZXMKQEAgLTUzLDcgKzQ2LDcgQEAKIAogc3RydWN0IGkyb19jbWRfcGFzc3RocnUzMiB7CiAJdW5zaWduZWQgaW50IGlvcDsJLyogSU9QIHVuaXQgbnVtYmVyICovCi0JdTMyIG1zZzsJCS8qIG1lc3NhZ2UgKi8KKwlfX3UzMiBtc2c7CQkvKiBtZXNzYWdlICovCiB9OwogCiBzdHJ1Y3QgaTJvX2NtZF9wYXNzdGhydSB7CkBAIC0xMzgsNTMgKzEzMSw1MyBAQAogI2RlZmluZSBJMk9fQlVTX1VOS05PV04gMHg4MAogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX3BjaV9idXMgewotCXU4IFBjaUZ1bmN0aW9uTnVtYmVyOwotCXU4IFBjaURldmljZU51bWJlcjsKLQl1OCBQY2lCdXNOdW1iZXI7Ci0JdTggcmVzZXJ2ZWQ7Ci0JdTE2IFBjaVZlbmRvcklEOwotCXUxNiBQY2lEZXZpY2VJRDsKKwlfX3U4IFBjaUZ1bmN0aW9uTnVtYmVyOworCV9fdTggUGNpRGV2aWNlTnVtYmVyOworCV9fdTggUGNpQnVzTnVtYmVyOworCV9fdTggcmVzZXJ2ZWQ7CisJX191MTYgUGNpVmVuZG9ySUQ7CisJX191MTYgUGNpRGV2aWNlSUQ7CiB9IGkyb19wY2lfYnVzOwogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX2xvY2FsX2J1cyB7Ci0JdTE2IExiQmFzZUlPUG9ydDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTMyIExiQmFzZU1lbW9yeUFkZHJlc3M7CisJX191MTYgTGJCYXNlSU9Qb3J0OworCV9fdTE2IHJlc2VydmVkOworCV9fdTMyIExiQmFzZU1lbW9yeUFkZHJlc3M7CiB9IGkyb19sb2NhbF9idXM7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9faXNhX2J1cyB7Ci0JdTE2IElzYUJhc2VJT1BvcnQ7Ci0JdTggQ1NOOwotCXU4IHJlc2VydmVkOwotCXUzMiBJc2FCYXNlTWVtb3J5QWRkcmVzczsKKwlfX3UxNiBJc2FCYXNlSU9Qb3J0OworCV9fdTggQ1NOOworCV9fdTggcmVzZXJ2ZWQ7CisJX191MzIgSXNhQmFzZU1lbW9yeUFkZHJlc3M7CiB9IGkyb19pc2FfYnVzOwogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX2Vpc2FfYnVzX2luZm8gewotCXUxNiBFaXNhQmFzZUlPUG9ydDsKLQl1OCByZXNlcnZlZDsKLQl1OCBFaXNhU2xvdE51bWJlcjsKLQl1MzIgRWlzYUJhc2VNZW1vcnlBZGRyZXNzOworCV9fdTE2IEVpc2FCYXNlSU9Qb3J0OworCV9fdTggcmVzZXJ2ZWQ7CisJX191OCBFaXNhU2xvdE51bWJlcjsKKwlfX3UzMiBFaXNhQmFzZU1lbW9yeUFkZHJlc3M7CiB9IGkyb19laXNhX2J1czsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19tY2FfYnVzIHsKLQl1MTYgTWNhQmFzZUlPUG9ydDsKLQl1OCByZXNlcnZlZDsKLQl1OCBNY2FTbG90TnVtYmVyOwotCXUzMiBNY2FCYXNlTWVtb3J5QWRkcmVzczsKKwlfX3UxNiBNY2FCYXNlSU9Qb3J0OworCV9fdTggcmVzZXJ2ZWQ7CisJX191OCBNY2FTbG90TnVtYmVyOworCV9fdTMyIE1jYUJhc2VNZW1vcnlBZGRyZXNzOwogfSBpMm9fbWNhX2J1czsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19vdGhlcl9idXMgewotCXUxNiBCYXNlSU9Qb3J0OwotCXUxNiByZXNlcnZlZDsKLQl1MzIgQmFzZU1lbW9yeUFkZHJlc3M7CisJX191MTYgQmFzZUlPUG9ydDsKKwlfX3UxNiByZXNlcnZlZDsKKwlfX3UzMiBCYXNlTWVtb3J5QWRkcmVzczsKIH0gaTJvX290aGVyX2J1czsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19ocnRfZW50cnkgewotCXUzMiBhZGFwdGVyX2lkOwotCXUzMiBwYXJlbnRfdGlkOjEyOwotCXUzMiBzdGF0ZTo0OwotCXUzMiBidXNfbnVtOjg7Ci0JdTMyIGJ1c190eXBlOjg7CisJX191MzIgYWRhcHRlcl9pZDsKKwlfX3UzMiBwYXJlbnRfdGlkOjEyOworCV9fdTMyIHN0YXRlOjQ7CisJX191MzIgYnVzX251bTo4OworCV9fdTMyIGJ1c190eXBlOjg7CiAJdW5pb24gewogCQlpMm9fcGNpX2J1cyBwY2lfYnVzOwogCQlpMm9fbG9jYWxfYnVzIGxvY2FsX2J1czsKQEAgLTE5Niw2NiArMTg5LDY2IEBACiB9IGkyb19ocnRfZW50cnk7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9faHJ0IHsKLQl1MTYgbnVtX2VudHJpZXM7Ci0JdTggZW50cnlfbGVuOwotCXU4IGhydF92ZXJzaW9uOwotCXUzMiBjaGFuZ2VfaW5kOworCV9fdTE2IG51bV9lbnRyaWVzOworCV9fdTggZW50cnlfbGVuOworCV9fdTggaHJ0X3ZlcnNpb247CisJX191MzIgY2hhbmdlX2luZDsKIAlpMm9faHJ0X2VudHJ5IGhydF9lbnRyeVsxXTsKIH0gaTJvX2hydDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19sY3RfZW50cnkgewotCXUzMiBlbnRyeV9zaXplOjE2OwotCXUzMiB0aWQ6MTI7Ci0JdTMyIHJlc2VydmVkOjQ7Ci0JdTMyIGNoYW5nZV9pbmQ7Ci0JdTMyIGRldmljZV9mbGFnczsKLQl1MzIgY2xhc3NfaWQ6MTI7Ci0JdTMyIHZlcnNpb246NDsKLQl1MzIgdmVuZG9yX2lkOjE2OwotCXUzMiBzdWJfY2xhc3M7Ci0JdTMyIHVzZXJfdGlkOjEyOwotCXUzMiBwYXJlbnRfdGlkOjEyOwotCXUzMiBiaW9zX2luZm86ODsKLQl1OCBpZGVudGl0eV90YWdbOF07Ci0JdTMyIGV2ZW50X2NhcGFiaWxpdGllczsKKwlfX3UzMiBlbnRyeV9zaXplOjE2OworCV9fdTMyIHRpZDoxMjsKKwlfX3UzMiByZXNlcnZlZDo0OworCV9fdTMyIGNoYW5nZV9pbmQ7CisJX191MzIgZGV2aWNlX2ZsYWdzOworCV9fdTMyIGNsYXNzX2lkOjEyOworCV9fdTMyIHZlcnNpb246NDsKKwlfX3UzMiB2ZW5kb3JfaWQ6MTY7CisJX191MzIgc3ViX2NsYXNzOworCV9fdTMyIHVzZXJfdGlkOjEyOworCV9fdTMyIHBhcmVudF90aWQ6MTI7CisJX191MzIgYmlvc19pbmZvOjg7CisJX191OCBpZGVudGl0eV90YWdbOF07CisJX191MzIgZXZlbnRfY2FwYWJpbGl0aWVzOwogfSBpMm9fbGN0X2VudHJ5OwogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX2xjdCB7Ci0JdTMyIHRhYmxlX3NpemU6MTY7Ci0JdTMyIGJvb3RfdGlkOjEyOwotCXUzMiBsY3RfdmVyOjQ7Ci0JdTMyIGlvcF9mbGFnczsKLQl1MzIgY2hhbmdlX2luZDsKKwlfX3UzMiB0YWJsZV9zaXplOjE2OworCV9fdTMyIGJvb3RfdGlkOjEyOworCV9fdTMyIGxjdF92ZXI6NDsKKwlfX3UzMiBpb3BfZmxhZ3M7CisJX191MzIgY2hhbmdlX2luZDsKIAlpMm9fbGN0X2VudHJ5IGxjdF9lbnRyeVsxXTsKIH0gaTJvX2xjdDsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19zdGF0dXNfYmxvY2sgewotCXUxNiBvcmdfaWQ7Ci0JdTE2IHJlc2VydmVkOwotCXUxNiBpb3BfaWQ6MTI7Ci0JdTE2IHJlc2VydmVkMTo0OwotCXUxNiBob3N0X3VuaXRfaWQ7Ci0JdTE2IHNlZ21lbnRfbnVtYmVyOjEyOwotCXUxNiBpMm9fdmVyc2lvbjo0OwotCXU4IGlvcF9zdGF0ZTsKLQl1OCBtc2dfdHlwZTsKLQl1MTYgaW5ib3VuZF9mcmFtZV9zaXplOwotCXU4IGluaXRfY29kZTsKLQl1OCByZXNlcnZlZDI7Ci0JdTMyIG1heF9pbmJvdW5kX2ZyYW1lczsKLQl1MzIgY3VyX2luYm91bmRfZnJhbWVzOwotCXUzMiBtYXhfb3V0Ym91bmRfZnJhbWVzOworCV9fdTE2IG9yZ19pZDsKKwlfX3UxNiByZXNlcnZlZDsKKwlfX3UxNiBpb3BfaWQ6MTI7CisJX191MTYgcmVzZXJ2ZWQxOjQ7CisJX191MTYgaG9zdF91bml0X2lkOworCV9fdTE2IHNlZ21lbnRfbnVtYmVyOjEyOworCV9fdTE2IGkyb192ZXJzaW9uOjQ7CisJX191OCBpb3Bfc3RhdGU7CisJX191OCBtc2dfdHlwZTsKKwlfX3UxNiBpbmJvdW5kX2ZyYW1lX3NpemU7CisJX191OCBpbml0X2NvZGU7CisJX191OCByZXNlcnZlZDI7CisJX191MzIgbWF4X2luYm91bmRfZnJhbWVzOworCV9fdTMyIGN1cl9pbmJvdW5kX2ZyYW1lczsKKwlfX3UzMiBtYXhfb3V0Ym91bmRfZnJhbWVzOwogCWNoYXIgcHJvZHVjdF9pZFsyNF07Ci0JdTMyIGV4cGVjdGVkX2xjdF9zaXplOwotCXUzMiBpb3BfY2FwYWJpbGl0aWVzOwotCXUzMiBkZXNpcmVkX21lbV9zaXplOwotCXUzMiBjdXJyZW50X21lbV9zaXplOwotCXUzMiBjdXJyZW50X21lbV9iYXNlOwotCXUzMiBkZXNpcmVkX2lvX3NpemU7Ci0JdTMyIGN1cnJlbnRfaW9fc2l6ZTsKLQl1MzIgY3VycmVudF9pb19iYXNlOwotCXUzMiByZXNlcnZlZDM6MjQ7Ci0JdTMyIGNtZF9zdGF0dXM6ODsKKwlfX3UzMiBleHBlY3RlZF9sY3Rfc2l6ZTsKKwlfX3UzMiBpb3BfY2FwYWJpbGl0aWVzOworCV9fdTMyIGRlc2lyZWRfbWVtX3NpemU7CisJX191MzIgY3VycmVudF9tZW1fc2l6ZTsKKwlfX3UzMiBjdXJyZW50X21lbV9iYXNlOworCV9fdTMyIGRlc2lyZWRfaW9fc2l6ZTsKKwlfX3UzMiBjdXJyZW50X2lvX3NpemU7CisJX191MzIgY3VycmVudF9pb19iYXNlOworCV9fdTMyIHJlc2VydmVkMzoyNDsKKwlfX3UzMiBjbWRfc3RhdHVzOjg7CiB9IGkyb19zdGF0dXNfYmxvY2s7CiAKIC8qIEV2ZW50IGluZGljYXRvciBtYXNrIGZsYWdzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyby5oIGIvaW5jbHVkZS9saW51eC9pMm8uaAppbmRleCBkZDdkNjI3Li5jMTE1ZTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyby5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJvLmgKQEAgLTExMTQsOCArMTExNCwxMSBAQAogCiAJbW1zZy0+bWZhID0gcmVhZGwoYy0+aW5fcG9ydCk7CiAJaWYgKHVubGlrZWx5KG1tc2ctPm1mYSA+PSBjLT5pbl9xdWV1ZS5sZW4pKSB7CisJCXUzMiBtZmEgPSBtbXNnLT5tZmE7CisKIAkJbWVtcG9vbF9mcmVlKG1tc2csIGMtPmluX21zZy5tZW1wb29sKTsKLQkJaWYobW1zZy0+bWZhID09IEkyT19RVUVVRV9FTVBUWSkKKworCQlpZiAobWZhID09IEkyT19RVUVVRV9FTVBUWSkKIAkJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IGE4YmVmMWQuLjc3ZTY2ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtNiw3ICs2LDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMjAwMiAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mZGRpLmggYi9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaAppbmRleCAxMjg4YTE2Li5lMGExNTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaApAQCAtMTAyLDYgKzEwMiw3IEBACiAJCX0gaGRyOwogCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjaWZkZWYgX19LRVJORUxfXwogLyogRGVmaW5lIEZEREkgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBmZGRpX3N0YXRpc3RpY3MgewogCkBAIC0xOTMsNSArMTk0LDYgQEAKIAlfX3UzMglwb3J0X2xlcl9mbGFnWzJdOwogCV9fdTMyCXBvcnRfaGFyZHdhcmVfcHJlc2VudFsyXTsKIAl9OworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9MSU5VWF9JRl9GRERJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oIGIvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKaW5kZXggMzk1ZjBhYS4uZjI3MmE4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKQEAgLTI0LDcgKzI0LDYgQEAKICNpZm5kZWYgX0ZSQURfSF8KICNkZWZpbmUgX0ZSQURfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19ETENJKSB8fCBkZWZpbmVkKENPTkZJR19ETENJX01PRFVMRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHIuaCBiL2luY2x1ZGUvbGludXgvaWZfdHIuaAppbmRleCA1NTAyZjU5Li4yZjk0Y2YyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3RyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90ci5oCkBAIC00Myw3ICs0Myw2IEBACiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0cmhfaGRyICp0cl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggMjhmNGYzYi4uODk5YzNkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTE2OSw3ICsxNjksNyBAQAogc3RydWN0IGlwX21jX2xpc3QKIHsKIAlzdHJ1Y3QgaW5fZGV2aWNlCSppbnRlcmZhY2U7Ci0JdW5zaWduZWQgbG9uZwkJbXVsdGlhZGRyOworCV9fYmUzMgkJCW11bHRpYWRkcjsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdAkqc291cmNlczsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdAkqdG9tYjsKIAl1bnNpZ25lZCBpbnQJCXNmbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggOTNkY2JlMS4uNjY2Nzc4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9JTklUX0gKICNkZWZpbmUgX0xJTlVYX0lOSVRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIHRvIG1hcmsgc29tZSBmdW5jdGlvbnMgb3IgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lub3RpZnkuaCBiL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oCmluZGV4IDA5ZTAwNDMuLmQ0ZjQ4YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oCkBAIC02NywyMCArNjcsNjYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKy8qCisgKiBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAtIHJlcHJlc2VudHMgYSB3YXRjaCByZXF1ZXN0IG9uIGEgc3BlY2lmaWMgaW5vZGUKKyAqCisgKiBoX2xpc3QgaXMgcHJvdGVjdGVkIGJ5IGloLT5tdXRleCBvZiB0aGUgYXNzb2NpYXRlZCBpbm90aWZ5X2hhbmRsZS4KKyAqIGlfbGlzdCwgbWFzayBhcmUgcHJvdGVjdGVkIGJ5IGlub2RlLT5pbm90aWZ5X211dGV4IG9mIHRoZSBhc3NvY2lhdGVkIGlub2RlLgorICogaWgsIGlub2RlLCBhbmQgd2QgYXJlIG5ldmVyIHdyaXR0ZW4gdG8gb25jZSB0aGUgd2F0Y2ggaXMgY3JlYXRlZC4KKyAqCisgKiBDYWxsZXJzIG11c3QgdXNlIHRoZSBlc3RhYmxpc2hlZCBpbm90aWZ5IGludGVyZmFjZXMgdG8gYWNjZXNzIGlub3RpZnlfd2F0Y2gKKyAqIGNvbnRlbnRzLiAgVGhlIGNvbnRlbnQgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZSB0byB0aGUgaW5vdGlmeQorICogaW1wbGVtZW50YXRpb24uCisgKi8KK3N0cnVjdCBpbm90aWZ5X3dhdGNoIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWhfbGlzdDsJLyogZW50cnkgaW4gaW5vdGlmeV9oYW5kbGUncyBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAlpX2xpc3Q7CS8qIGVudHJ5IGluIGlub2RlJ3MgbGlzdCAqLworCWF0b21pY190CQljb3VudDsJLyogcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IGlub3RpZnlfaGFuZGxlCSppaDsJLyogYXNzb2NpYXRlZCBpbm90aWZ5IGhhbmRsZSAqLworCXN0cnVjdCBpbm9kZQkJKmlub2RlOwkvKiBhc3NvY2lhdGVkIGlub2RlICovCisJX19zMzIJCQl3ZDsJLyogd2F0Y2ggZGVzY3JpcHRvciAqLworCV9fdTMyCQkJbWFzazsJLyogZXZlbnQgbWFzayBmb3IgdGhpcyB3YXRjaCAqLworfTsKKworc3RydWN0IGlub3RpZnlfb3BlcmF0aW9ucyB7CisJdm9pZCAoKmhhbmRsZV9ldmVudCkoc3RydWN0IGlub3RpZnlfd2F0Y2ggKiwgdTMyLCB1MzIsIHUzMiwKKwkJCSAgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKmRlc3Ryb3lfd2F0Y2gpKHN0cnVjdCBpbm90aWZ5X3dhdGNoICopOworfTsKIAogI2lmZGVmIENPTkZJR19JTk9USUZZCiAKKy8qIEtlcm5lbCBBUEkgZm9yIHByb2R1Y2luZyBldmVudHMgKi8KKwogZXh0ZXJuIHZvaWQgaW5vdGlmeV9kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgaW5vdGlmeV9kX21vdmUoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiB2b2lkIGlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoc3RydWN0IGlub2RlICosIF9fdTMyLCBfX3UzMiwKLQkJCQkgICAgICBjb25zdCBjaGFyICopOworCQkJCSAgICAgIGNvbnN0IGNoYXIgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KHN0cnVjdCBkZW50cnkgKiwgX191MzIsIF9fdTMyLAogCQkJCQkgICAgICBjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgaW5vdGlmeV91bm1vdW50X2lub2RlcyhzdHJ1Y3QgbGlzdF9oZWFkICopOwogZXh0ZXJuIHZvaWQgaW5vdGlmeV9pbm9kZV9pc19kZWFkKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB1MzIgaW5vdGlmeV9nZXRfY29va2llKHZvaWQpOwogCisvKiBLZXJuZWwgQ29uc3VtZXIgQVBJICovCisKK2V4dGVybiBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmlub3RpZnlfaW5pdChjb25zdCBzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zICopOworZXh0ZXJuIHZvaWQgaW5vdGlmeV9pbml0X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICopOworZXh0ZXJuIHZvaWQgaW5vdGlmeV9kZXN0cm95KHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqKTsKK2V4dGVybiBfX3MzMiBpbm90aWZ5X2ZpbmRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICosIHN0cnVjdCBpbm9kZSAqLAorCQkJCXN0cnVjdCBpbm90aWZ5X3dhdGNoICoqKTsKK2V4dGVybiBfX3MzMiBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCQkgICAgICAgdTMyKTsKK2V4dGVybiBfX3MzMiBpbm90aWZ5X2FkZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKiwgc3RydWN0IGlub3RpZnlfd2F0Y2ggKiwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKiwgX191MzIpOworZXh0ZXJuIGludCBpbm90aWZ5X3JtX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKK2V4dGVybiBpbnQgaW5vdGlmeV9ybV93ZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKiwgX191MzIpOworZXh0ZXJuIHZvaWQgaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLAorCQkJCQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKK2V4dGVybiB2b2lkIGdldF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICopOworZXh0ZXJuIHZvaWQgcHV0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbm90aWZ5X2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtOTQsNyArMTQwLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgICBfX3UzMiBtYXNrLCBfX3UzMiBjb29raWUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCisJCQkJCSAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCSAgICAgc3RydWN0IGlub2RlICpuX2lub2RlKQogewogfQogCkBAIC0xMTcsNiArMTY0LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlub3RpZnlfaGFuZGxlICppbm90aWZ5X2luaXQoY29uc3Qgc3RydWN0IGlub3RpZnlfb3BlcmF0aW9ucyAqb3BzKQoreworCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfaW5pdF93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbm90aWZ5X2Rlc3Ryb3koc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCkKK3sKK30KKworc3RhdGljIGlubGluZSBfX3MzMiBpbm90aWZ5X2ZpbmRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKip3YXRjaHApCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIF9fczMyIGlub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIF9fczMyIGlub3RpZnlfYWRkX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCisJCQkJICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAorCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTMyIG1hc2spCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbm90aWZ5X3JtX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCisJCQkJICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5vdGlmeV9ybV93ZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBfX3UzMiB3ZCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkJICAgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdldF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKK3sKK30KKwogI2VuZGlmCS8qIENPTkZJR19JTk9USUZZICovCiAKICNlbmRpZgkvKiBfX0tFUk5FTCBfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDUwZTMzOGQuLmIzMmMyYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTE1LDYgKzE1LDcgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNlbmRpZgogCkBAIC0zNDUsNiArMzQ2LDggQEAKICNkZWZpbmUgS0VZX1NBVkUJCTIzNAogI2RlZmluZSBLRVlfRE9DVU1FTlRTCQkyMzUKIAorI2RlZmluZSBLRVlfQkFUVEVSWQkJMjM2CisKICNkZWZpbmUgS0VZX1VOS05PV04JCTI0MAogCiAjZGVmaW5lIEJUTl9NSVNDCQkweDEwMApAQCAtNTc3LDE0ICs1ODAsOSBAQAogICogU3dpdGNoIGV2ZW50cwogICovCiAKLSNkZWZpbmUgU1dfMAkJCTB4MDAKLSNkZWZpbmUgU1dfMQkJCTB4MDEKLSNkZWZpbmUgU1dfMgkJCTB4MDIKLSNkZWZpbmUgU1dfMwkJCTB4MDMKLSNkZWZpbmUgU1dfNAkJCTB4MDQKLSNkZWZpbmUgU1dfNQkJCTB4MDUKLSNkZWZpbmUgU1dfNgkJCTB4MDYKLSNkZWZpbmUgU1dfNwkJCTB4MDcKKyNkZWZpbmUgU1dfTElECQkJMHgwMCAgLyogc2V0ID0gbGlkIHNodXQgKi8KKyNkZWZpbmUgU1dfVEFCTEVUX01PREUJCTB4MDEgIC8qIHNldCA9IHRhYmxldCBtb2RlICovCisjZGVmaW5lIFNXX0hFQURQSE9ORV9JTlNFUlQJMHgwMiAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KICNkZWZpbmUgU1dfTUFYCQkJMHgwZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggMmMwOGZkYy4uOWUwZmVmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfTElOVVhfSU5URVJSVVBUX0gKICNkZWZpbmUgX0xJTlVYX0lOVEVSUlVQVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwbWkuaCBiL2luY2x1ZGUvbGludXgvaXBtaS5oCmluZGV4IDBhODRiNTYuLjU2NTNiMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBtaS5oCkBAIC0zNiw3ICszNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcG1pX21zZ2RlZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAvKgogICogVGhpcyBmaWxlIGRlc2NyaWJlcyBhbiBpbnRlcmZhY2UgdG8gYW4gSVBNSSBkcml2ZXIuICBZb3UgaGF2ZSB0bwpAQCAtMjEwLDYgKzIwOSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKaW5kZXggMTI2M2Q4Yy4uMjk3ODUzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9JUFY2X0gKICNkZWZpbmUgX0lQVjZfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBlZTJhODJhLi40MmM5Y2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTksNyArOSw2IEBACiAgKiBUaGFua3MuIC0tcm1rCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaWYgIWRlZmluZWQoQ09ORklHX1MzOTApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycV9jcHVzdGF0LmggYi9pbmNsdWRlL2xpbnV4L2lycV9jcHVzdGF0LmgKaW5kZXggYWY5MzUwNS4uNzdlNGJhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFfY3B1c3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQuaApAQCAtOSw3ICs5LDYgQEAKICAqIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IEp1bHkgMjAwMC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBTaW1wbGUgd3JhcHBlcnMgcmVkdWNpbmcgc291cmNlIGJsb2F0LiAgRGVmaW5lIGFsbCBpcnFfc3RhdCBmaWVsZHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNhcG5wLmggYi9pbmNsdWRlL2xpbnV4L2lzYXBucC5oCmluZGV4IDI2YzY0YzIuLjFlODcyOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXNhcG5wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2FwbnAuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBMSU5VWF9JU0FQTlBfSAogI2RlZmluZSBMSU5VWF9JU0FQTlBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4uaAppbmRleCA1M2VhZWU5Li42Mjk5MTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4uaApAQCAtMTQ2LDcgKzE0Niw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vdHBhbS5oCmluZGV4IDlmNjViZWEuLmQxOGRkMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuL3RwYW0uaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBfVFBBTV9IXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogLyogSU9DVEwgY29tbWFuZHMgKi8KICNkZWZpbmUgVFBBTV9DTURfRFNQTE9BRAkweDAwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbl9wcHAuaCBiL2luY2x1ZGUvbGludXgvaXNkbl9wcHAuaAppbmRleCAyNmIwMGE3Li44Njg3YTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oCkBAIC02Nyw3ICs2Nyw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19JUFBQX0ZJTFRFUgogI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pc2RuaWYuaCBiL2luY2x1ZGUvbGludXgvaXNkbmlmLmgKaW5kZXggMDRlMTBmOS4uYjliNWE2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG5pZi5oCkBAIC01NCw3ICs1NCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmczIuaCBiL2luY2x1ZGUvbGludXgvamZmczIuaAppbmRleCBjZjc5MmJiLi5jNmY3MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCkBAIC02NSw2ICs2NSwxOCBAQAogCiAjZGVmaW5lIEpGRlMyX05PREVUWVBFX1NVTU1BUlkgKEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDYpCiAKKyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfWEFUVFIgKEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgOCkKKyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfWFJFRiAoSkZGUzJfRkVBVFVSRV9JTkNPTVBBVCB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCA5KQorCisvKiBYQVRUUiBSZWxhdGVkICovCisjZGVmaW5lIEpGRlMyX1hQUkVGSVhfVVNFUgkJMQkvKiBmb3IgInVzZXIuIiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1NFQ1VSSVRZCQkyCS8qIGZvciAic2VjdXJpdHkuIiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX0FDTF9BQ0NFU1MJMwkvKiBmb3IgInN5c3RlbS5wb3NpeF9hY2xfYWNjZXNzIiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX0FDTF9ERUZBVUxUCTQJLyogZm9yICJzeXN0ZW0ucG9zaXhfYWNsX2RlZmF1bHQiICovCisjZGVmaW5lIEpGRlMyX1hQUkVGSVhfVFJVU1RFRAkJNQkvKiBmb3IgInRydXN0ZWQuKiIgKi8KKworI2RlZmluZSBKRkZTMl9BQ0xfVkVSU0lPTgkJMHgwMDAxCisKIC8vIE1heWJlIGxhdGVyLi4uCiAvLyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfQ0hFQ0tQT0lOVCAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEUgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgMykKIC8vI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9PUFRJT05TIChKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0NPUFkgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgNCkKQEAgLTgyLDExICs5NCwxMSBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdWludDMyX3QgdjMyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAgamludDMyX3Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGppbnQzMl90OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdWludDMyX3QgbTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgIGptb2RlX3Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGptb2RlX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1aW50MTZfdCB2MTY7CkBAIC05OSw3ICsxMTEsNyBAQAogCWppbnQxNl90IG5vZGV0eXBlOwogCWppbnQzMl90IHRvdGxlbjsgLyogU28gd2UgY2FuIHNraXAgb3ZlciBub2RlcyB3ZSBkb24ndCBncm9rICovCiAJamludDMyX3QgaGRyX2NyYzsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiBzdHJ1Y3QgamZmczJfcmF3X2RpcmVudAogewpAQCAtMTE3LDcgKzEyOSw3IEBACiAJamludDMyX3Qgbm9kZV9jcmM7CiAJamludDMyX3QgbmFtZV9jcmM7CiAJdWludDhfdCBuYW1lWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CiAKIC8qIFRoZSBKRkZTMiByYXcgaW5vZGUgc3RydWN0dXJlOiBVc2VkIGZvciBzdG9yYWdlIG9uIHBoeXNpY2FsIG1lZGlhLiAgKi8KIC8qIFRoZSB1aWQsIGdpZCwgYXRpbWUsIG10aW1lIGFuZCBjdGltZSBtZW1iZXJzIGNvdWxkIGJlIGxvbmdlciwgYnV0CkBAIC0xNDksNiArMTYxLDMyIEBACiAJamludDMyX3QgZGF0YV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgKGNvbXByZXNzZWQpIGRhdGEuICAqLwogCWppbnQzMl90IG5vZGVfY3JjOyAgIC8qIENSQyBmb3IgdGhlIHJhdyBpbm9kZSAoZXhjbHVkaW5nIGRhdGEpICAqLwogCXVpbnQ4X3QgZGF0YVswXTsKK307CisKK3N0cnVjdCBqZmZzMl9yYXdfeGF0dHIgeworCWppbnQxNl90IG1hZ2ljOworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9IEpGRlMyX05PREVUWVBFX1hBVFRSICovCisJamludDMyX3QgdG90bGVuOworCWppbnQzMl90IGhkcl9jcmM7CisJamludDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KKwlqaW50MzJfdCB2ZXJzaW9uOworCXVpbnQ4X3QgeHByZWZpeDsKKwl1aW50OF90IG5hbWVfbGVuOworCWppbnQxNl90IHZhbHVlX2xlbjsKKwlqaW50MzJfdCBkYXRhX2NyYzsKKwlqaW50MzJfdCBub2RlX2NyYzsKKwl1aW50OF90IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgamZmczJfcmF3X3hyZWYKK3sKKwlqaW50MTZfdCBtYWdpYzsKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPSBKRkZTMl9OT0RFVFlQRV9YUkVGICovCisJamludDMyX3QgdG90bGVuOworCWppbnQzMl90IGhkcl9jcmM7CisJamludDMyX3QgaW5vOwkJLyogaW5vZGUgbnVtYmVyICovCisJamludDMyX3QgeGlkOwkJLyogWEFUVFIgaWRlbnRpZmllciBudW1iZXIgKi8KKwlqaW50MzJfdCBub2RlX2NyYzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBqZmZzMl9yYXdfc3VtbWFyeQpAQCAtMTYzLDE0ICsyMDEsMjIgQEAKIAlqaW50MzJfdCBzdW1fY3JjOwkvKiBzdW1tYXJ5IGluZm9ybWF0aW9uIGNyYyAqLwogCWppbnQzMl90IG5vZGVfY3JjOyAJLyogbm9kZSBjcmMgKi8KIAlqaW50MzJfdCBzdW1bMF07IAkvKiBpbm9kZSBzdW1tYXJ5IGluZm8gKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiB1bmlvbiBqZmZzMl9ub2RlX3VuaW9uCiB7CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSBpOwogCXN0cnVjdCBqZmZzMl9yYXdfZGlyZW50IGQ7CisJc3RydWN0IGpmZnMyX3Jhd194YXR0ciB4OworCXN0cnVjdCBqZmZzMl9yYXdfeHJlZiByOwogCXN0cnVjdCBqZmZzMl9yYXdfc3VtbWFyeSBzOwogCXN0cnVjdCBqZmZzMl91bmtub3duX25vZGUgdTsKIH07CiAKKy8qIERhdGEgcGF5bG9hZCBmb3IgZGV2aWNlIG5vZGVzLiAqLwordW5pb24gamZmczJfZGV2aWNlX25vZGUgeworCWppbnQxNl90IG9sZDsKKwlqaW50MzJfdCBuZXc7Cit9OworCiAjZW5kaWYgLyogX19MSU5VWF9KRkZTMl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvam95c3RpY2suaCBiL2luY2x1ZGUvbGludXgvam95c3RpY2suaAppbmRleCA1ZmQyMGRkLi5lMmQzYTE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCkBAIC0xMTEsMjUgKzExMSwyNSBAQAogI2RlZmluZSBKU19TRVRfQUxMCQk4CiAKIHN0cnVjdCBKU19EQVRBX1RZUEUgewotCWludDMyX3QgYnV0dG9uczsKLQlpbnQzMl90IHg7Ci0JaW50MzJfdCB5OworCV9fczMyIGJ1dHRvbnM7CisJX19zMzIgeDsKKwlfX3MzMiB5OwogfTsKIAogc3RydWN0IEpTX0RBVEFfU0FWRV9UWVBFXzMyIHsKLQlpbnQzMl90IEpTX1RJTUVPVVQ7Ci0JaW50MzJfdCBCVVNZOwotCWludDMyX3QgSlNfRVhQSVJFVElNRTsKLQlpbnQzMl90IEpTX1RJTUVMSU1JVDsKKwlfX3MzMiBKU19USU1FT1VUOworCV9fczMyIEJVU1k7CisJX19zMzIgSlNfRVhQSVJFVElNRTsKKwlfX3MzMiBKU19USU1FTElNSVQ7CiAJc3RydWN0IEpTX0RBVEFfVFlQRSBKU19TQVZFOwogCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfQ09SUjsKIH07CiAKIHN0cnVjdCBKU19EQVRBX1NBVkVfVFlQRV82NCB7Ci0JaW50MzJfdCBKU19USU1FT1VUOwotCWludDMyX3QgQlVTWTsKLQlpbnQ2NF90IEpTX0VYUElSRVRJTUU7Ci0JaW50NjRfdCBKU19USU1FTElNSVQ7CisJX19zMzIgSlNfVElNRU9VVDsKKwlfX3MzMiBCVVNZOworCV9fczY0IEpTX0VYUElSRVRJTUU7CisJX19zNjQgSlNfVElNRUxJTUlUOwogCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfU0FWRTsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX0NPUlI7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCmluZGV4IDliYmQwNDAuLjU0ZTI1NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKQEAgLTUsNyArNSw2IEBACiAjaWZuZGVmIF9MSU5VWF9LQUxMU1lNU19ICiAjZGVmaW5lIF9MSU5VWF9LQUxMU1lNU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBLU1lNX05BTUVfTEVOIDEyNwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggYjQ2MjQ5MC4uNDNlODk1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX0tFUk5FTF9TVEFUX0gKICNkZWZpbmUgX0xJTlVYX0tFUk5FTF9TVEFUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttb2QuaCBiL2luY2x1ZGUvbGludXgva21vZC5oCmluZGV4IGU0YTIzMTUuLjBkYjIyYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21vZC5oCisrKyBiL2luY2x1ZGUvbGludXgva21vZC5oCkBAIC0yMCw3ICsyMCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmggYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAppbmRleCA3NzhhZGMwLi44YmY2NzAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaApAQCAtMjksNyArMjksNiBAQAogICoJCTxqa2VuaXN0b0B1cy5pYm0uY29tPiAgYW5kIFByYXNhbm5hIFMgUGFuY2hhbXVraGkKICAqCQk8cHJhc2FubmFAaW4uaWJtLmNvbT4gYWRkZWQgZnVuY3Rpb24tcmV0dXJuIHByb2Jlcy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saW5rYWdlLmggYi9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaAppbmRleCBjMDhjOTk4Li45MzIwMjFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX0xJTktBR0VfSAogI2RlZmluZSBfTElOVVhfTElOS0FHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAppbmRleCA5OTVmODlkLi5hODg3NmJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9ubG0uaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvbmxtLmgKaW5kZXggODY5YjYzMC4uZDlkNDZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9ubG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL25sbS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBMSU5VWF9MT0NLRF9OTE1fSAogI2RlZmluZSBMSU5VWF9MT0NLRF9OTE1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIE1heGltdW0gZmlsZSBvZmZzZXQgaW4gZmlsZV9sb2NrLmZsX2VuZCAqLwogIyBkZWZpbmUgTkxNX09GRlNFVF9NQVgJCSgoczMyKSAweDdmZmZmZmZmKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tNDh0ODYuaCBiL2luY2x1ZGUvbGludXgvbTQ4dDg2LmgKaW5kZXggOTA2NTE5OS4uOTE1ZDZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tNDh0ODYuaAorKysgYi9pbmNsdWRlL2xpbnV4L200OHQ4Ni5oCkBAIC0xMSw2ICsxMSw2IEBACiAKIHN0cnVjdCBtNDh0ODZfb3BzCiB7Ci0Jdm9pZCAoKndyaXRlYikodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLQl1bnNpZ25lZCBjaGFyICgqcmVhZGIpKHVuc2lnbmVkIGxvbmcgYWRkcik7CisJdm9pZCAoKndyaXRlYnl0ZSkodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKwl1bnNpZ25lZCBjaGFyICgqcmVhZGJ5dGUpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKaW5kZXggNmE3NjIxYi4uNzI0NDBmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CkBAIC0zNiw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KIAogc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IG1tX3N0cnVjdDsKIAogI2lmZGVmIENPTkZJR19OVU1BCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKaW5kZXggZmYwYTY0MC4uNjc4OWM0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9NSUdSQVRFX0gKICNkZWZpbmUgX0xJTlVYX01JR1JBVEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2lmZGVmIENPTkZJR19NSUdSQVRJT04KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlpLmggYi9pbmNsdWRlL2xpbnV4L21paS5oCmluZGV4IDY4ZjVhMGYuLmJlZGRjNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlpLmgKKysrIGIvaW5jbHVkZS9saW51eC9taWkuaApAQCAtOSw3ICs5LDYgQEAKICNkZWZpbmUgX19MSU5VWF9NSUlfSF9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAKIC8qIEdlbmVyaWMgTUlJIHJlZ2lzdGVycy4gKi8KIApAQCAtMTM2LDYgKzEzNSwyMCBAQAogI2RlZmluZSBMUEFfMTAwMEZVTEwgICAgICAgICAgICAweDA4MDAgIC8qIExpbmsgcGFydG5lciAxMDAwQkFTRS1UIGZ1bGwgZHVwbGV4ICovCiAjZGVmaW5lIExQQV8xMDAwSEFMRiAgICAgICAgICAgIDB4MDQwMCAgLyogTGluayBwYXJ0bmVyIDEwMDBCQVNFLVQgaGFsZiBkdXBsZXggKi8KIAorLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiBhbGwgU0lPQ3hNSUl4eHggaW9jdGwgY2FsbHMgKi8KK3N0cnVjdCBtaWlfaW9jdGxfZGF0YSB7CisJX191MTYJCXBoeV9pZDsKKwlfX3UxNgkJcmVnX251bTsKKwlfX3UxNgkJdmFsX2luOworCV9fdTE2CQl2YWxfb3V0OworfTsKKworI2lmZGVmIF9fS0VSTkVMX18gCisKKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorCitzdHJ1Y3QgZXRodG9vbF9jbWQ7CisKIHN0cnVjdCBtaWlfaWZfaW5mbyB7CiAJaW50IHBoeV9pZDsKIAlpbnQgYWR2ZXJ0aXNpbmc7CkBAIC0xNTEsOSArMTY0LDYgQEAKIAl2b2lkICgqbWRpb193cml0ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbCk7CiB9OwogCi1zdHJ1Y3QgZXRodG9vbF9jbWQ7Ci1zdHJ1Y3QgbWlpX2lvY3RsX2RhdGE7Ci0KIGV4dGVybiBpbnQgbWlpX2xpbmtfb2sgKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpKTsKIGV4dGVybiBpbnQgbWlpX253YXlfcmVzdGFydCAoc3RydWN0IG1paV9pZl9pbmZvICptaWkpOwogZXh0ZXJuIGludCBtaWlfZXRodG9vbF9nc2V0KHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpOwpAQCAtMTY4LDE2ICsxNzgsNiBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgKmR1cGxleF9jaGFuZ2VkKTsKIAogCi0KLS8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4gYWxsIFNJT0N4TUlJeHh4IGlvY3RsIGNhbGxzICovCi1zdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgewotCXUxNgkJcGh5X2lkOwotCXUxNgkJcmVnX251bTsKLQl1MTYJCXZhbF9pbjsKLQl1MTYJCXZhbF9vdXQ7Ci19OwotCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1paV9pb2N0bF9kYXRhICppZl9taWkoc3RydWN0IGlmcmVxICpycSkKIHsKIAlyZXR1cm4gKHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqKSAmcnEtPmlmcl9pZnJ1OwpAQCAtMjM1LDUgKzIzNSw1IEBACiAJcmV0dXJuIDA7CiB9CiAKLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0xJTlVYX01JSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAxMTU0Njg0Li5lMmZhMzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC03LDcgKzcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFuLmggYi9pbmNsdWRlL2xpbnV4L21tYW4uaAppbmRleCAxOGE1Njg5Li44NzkyMGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYW4uaApAQCAtMSwxMCArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9NTUFOX0gKICNkZWZpbmUgX0xJTlVYX01NQU5fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vbW1hbi5oPgogCiAjZGVmaW5lIE1SRU1BUF9NQVlNT1ZFCTEKQEAgLTEzLDYgKzksMTIgQEAKICNkZWZpbmUgT1ZFUkNPTU1JVF9HVUVTUwkJMAogI2RlZmluZSBPVkVSQ09NTUlUX0FMV0FZUwkJMQogI2RlZmluZSBPVkVSQ09NTUlUX05FVkVSCQkyCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwogZXh0ZXJuIGludCBzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnk7CiBleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvOwogZXh0ZXJuIGF0b21pY190IHZtX2NvbW1pdHRlZF9zcGFjZTsKQEAgLTYzLDUgKzY1LDUgQEAKIAkgICAgICAgX2NhbGNfdm1fdHJhbnMoZmxhZ3MsIE1BUF9FWEVDVVRBQkxFLCBWTV9FWEVDVVRBQkxFKSB8CiAJICAgICAgIF9jYWxjX3ZtX3RyYW5zKGZsYWdzLCBNQVBfTE9DS0VELCAgICAgVk1fTE9DS0VEICAgICk7CiB9Ci0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX01NQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggMzY3NDAzNS4uOTc0MmUzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00LDcgKzQsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CkBAIC0xNSw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIEZyZWUgbWVtb3J5IG1hbmFnZW1lbnQgLSB6b25lZCBidWRkeSBhbGxvY2F0b3IuICAqLwogI2lmbmRlZiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggZWFlYzEzZC4uYzJkODllMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC02LDcgKzYsNiBAQAogICogUmV3cml0dGVuIGJ5IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAdGFtdS5lZHU+IERlYyAxOTk2CiAgKiBSZXdyaXR0ZW4gYWdhaW4gYnkgUnVzdHkgUnVzc2VsbCwgMjAwMgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTU1NywxMyArNTU2LDQgQEAKIAogI2RlZmluZSBfX01PRFVMRV9TVFJJTkcoeCkgX19zdHJpbmdpZnkoeCkKIAotLyogVXNlIHN5bWJvbF9nZXQgYW5kIHN5bWJvbF9wdXQgaW5zdGVhZC4gIFlvdSdsbCB0aGFuayBtZS4gKi8KLSNkZWZpbmUgSEFWRV9JTlRFUl9NT0RVTEUKLWV4dGVybiB2b2lkIF9fZGVwcmVjYXRlZCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqLAotCQlzdHJ1Y3QgbW9kdWxlICosIGNvbnN0IHZvaWQgKik7Ci1leHRlcm4gdm9pZCBfX2RlcHJlY2F0ZWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqKTsKLWV4dGVybiBjb25zdCB2b2lkICogX19kZXByZWNhdGVkIGludGVyX21vZHVsZV9nZXRfcmVxdWVzdChjb25zdCBjaGFyICosCi0JCWNvbnN0IGNoYXIgKik7Ci1leHRlcm4gdm9pZCBfX2RlcHJlY2F0ZWQgaW50ZXJfbW9kdWxlX3B1dChjb25zdCBjaGFyICopOwotCiAjZW5kaWYgLyogX0xJTlVYX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21zZy5oIGIvaW5jbHVkZS9saW51eC9tc2cuaAppbmRleCA5MDNlMGFiLi5hY2M3YzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21zZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXNnLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9NU0dfSAogCiAjaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAvKiBpcGNzIGN0bCBjb21tYW5kcyAqLwogI2RlZmluZSBNU0dfU1RBVCAxMQpAQCAtNjMsNiArNjIsNyBAQAogI2RlZmluZSBNU0dTRUcgKF9fTVNHU0VHIDw9IDB4ZmZmZiA/IF9fTVNHU0VHIDogMHhmZmZmKQogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyogb25lIG1zZ19tc2cgc3RydWN0dXJlIGZvciBlYWNoIG1lc3NhZ2UgKi8KIHN0cnVjdCBtc2dfbXNnIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKaW5kZXggMjNhNTY4OS4uMDliZmFlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9fTVREX0NGSV9IX18KICNkZWZpbmUgX19NVERfQ0ZJX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvaW5mdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmgKaW5kZXggZDdlYWE0MC4uNjk3Nzc4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvaW5mdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9pbmZ0bC5oCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHVuc2lnbmVkIGludCBuYl9ibG9ja3M7CQkvKiBudW1iZXIgb2YgcGh5c2ljYWwgYmxvY2tzICovCiAgICAgICAgIHVuc2lnbmVkIGludCBuYl9ib290X2Jsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoZSBiaW9zICovCiAgICAgICAgIHN0cnVjdCBlcmFzZV9pbmZvIGluc3RyOwotICAgICAgICBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG9vYmluZm87CisgICAgICAgIHN0cnVjdCBuYW5kX2VjY2xheW91dCBvb2JpbmZvOwogfTsKIAogaW50IElORlRMX21vdW50KHN0cnVjdCBJTkZUTHJlY29yZCAqcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCmluZGV4IDdkZmQ2ZTEuLjI4ZDQ2MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfX0xJTlVYX01URF9NQVBfSF9fCiAjZGVmaW5lIF9fTElOVVhfTVREX01BUF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAppbmRleCBiNmYyZmRhLi45YjdhMmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaApAQCAtMTMsNyArMTMsNiBAQAogI2Vycm9yIFRoaXMgaXMgYSBrZXJuZWwgaGVhZGVyLiBQZXJoYXBzIGluY2x1ZGUgbXRkLXVzZXIuaCBpbnN0ZWFkPwogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgpAQCAtNTYsMTggKzU1LDY5IEBACiAJdV9pbnQzMl90IG51bWJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3Mgb2YgZXJhc2VzaXplIGluIHRoaXMgcmVnaW9uICovCiB9OwogCisvKgorICogb29iIG9wZXJhdGlvbiBtb2RlcworICoKKyAqIE1URF9PT0JfUExBQ0U6CW9vYiBkYXRhIGFyZSBwbGFjZWQgYXQgdGhlIGdpdmVuIG9mZnNldAorICogTVREX09PQl9BVVRPOglvb2IgZGF0YSBhcmUgYXV0b21hdGljYWxseSBwbGFjZWQgYXQgdGhlIGZyZWUgYXJlYXMKKyAqCQkJd2hpY2ggYXJlIGRlZmluZWQgYnkgdGhlIGVjY2xheW91dAorICogTVREX09PQl9SQVc6CQltb2RlIHRvIHJlYWQgcmF3IGRhdGErb29iIGluIG9uZSBjaHVuay4gVGhlIG9vYiBkYXRhCisgKgkJCWlzIGluc2VydGVkIGludG8gdGhlIGRhdGEuIFRoYXRzIGEgcmF3IGltYWdlIG9mIHRoZQorICoJCQlmbGFzaCBjb250ZW50cy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlNVERfT09CX1BMQUNFLAorCU1URF9PT0JfQVVUTywKKwlNVERfT09CX1JBVywKK30gbXRkX29vYl9tb2RlX3Q7CisKKy8qKgorICogc3RydWN0IG10ZF9vb2Jfb3BzIC0gb29iIG9wZXJhdGlvbiBvcGVyYW5kcworICogQG1vZGU6CW9wZXJhdGlvbiBtb2RlCisgKgorICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlL3JlYWQuIFdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBnaXZlbgorICoJCShkYXRidWYgIT0gTlVMTCkgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMuIFdoZW4KKyArCQlubyBkYXRhIGJ1ZmZlciBpcyBhdmFpbGFibGUgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIG9vYiBieXRlcy4KKyAqCisgKiBAcmV0bGVuOgludW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi9yZWFkLiBXaGVuIGEgZGF0YSBidWZmZXIgaXMgZ2l2ZW4KKyAqCQkoZGF0YnVmICE9IE5VTEwpIHRoaXMgaXMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzLiBXaGVuCisgKwkJbm8gZGF0YSBidWZmZXIgaXMgYXZhaWxhYmxlIHRoaXMgaXMgdGhlIG51bWJlciBvZiBvb2IgYnl0ZXMuCisgKgorICogQG9vYmxlbjoJbnVtYmVyIG9mIG9vYiBieXRlcyBwZXIgcGFnZQorICogQG9vYm9mZnM6CW9mZnNldCBvZiBvb2IgZGF0YSBpbiB0aGUgb29iIGFyZWEgKG9ubHkgcmVsZXZhbnQgd2hlbgorICoJCW1vZGUgPSBNVERfT09CX1BMQUNFKQorICogQGRhdGJ1ZjoJZGF0YSBidWZmZXIgLSBpZiBOVUxMIG9ubHkgb29iIGRhdGEgYXJlIHJlYWQvd3JpdHRlbgorICogQG9vYmJ1ZjoJb29iIGRhdGEgYnVmZmVyCisgKi8KK3N0cnVjdCBtdGRfb29iX29wcyB7CisJbXRkX29vYl9tb2RlX3QJbW9kZTsKKwlzaXplX3QJCWxlbjsKKwlzaXplX3QJCXJldGxlbjsKKwlzaXplX3QJCW9vYmxlbjsKKwl1aW50MzJfdAlvb2JvZmZzOworCXVpbnQ4X3QJCSpkYXRidWY7CisJdWludDhfdAkJKm9vYmJ1ZjsKK307CisKIHN0cnVjdCBtdGRfaW5mbyB7CiAJdV9jaGFyIHR5cGU7CiAJdV9pbnQzMl90IGZsYWdzOwogCXVfaW50MzJfdCBzaXplOwkgLy8gVG90YWwgc2l6ZSBvZiB0aGUgTVRECiAKLQkvKiAiTWFqb3IiIGVyYXNlIHNpemUgZm9yIHRoZSBkZXZpY2UuIE5h73ZlIHVzZXJzIG1heSB0YWtlIHRoaXMKKwkvKiAiTWFqb3IiIGVyYXNlIHNpemUgZm9yIHRoZSBkZXZpY2UuIE5hw692ZSB1c2VycyBtYXkgdGFrZSB0aGlzCiAJICogdG8gYmUgdGhlIG9ubHkgZXJhc2Ugc2l6ZSBhdmFpbGFibGUsIG9yIG1heSB1c2UgdGhlIG1vcmUgZGV0YWlsZWQKIAkgKiBpbmZvcm1hdGlvbiBiZWxvdyBpZiB0aGV5IGRlc2lyZQogCSAqLwogCXVfaW50MzJfdCBlcmFzZXNpemU7CisJLyogTWluaW1hbCB3cml0YWJsZSBmbGFzaCB1bml0IHNpemUuIEluIGNhc2Ugb2YgTk9SIGZsYXNoIGl0IGlzIDEgKGV2ZW4KKwkgKiB0aG91Z2ggaW5kaXZpZHVhbCBiaXRzIGNhbiBiZSBjbGVhcmVkKSwgaW4gY2FzZSBvZiBOQU5EIGZsYXNoIGl0IGlzCisJICogb25lIE5BTkQgcGFnZSAob3IgaGFsZiwgb3Igb25lLWZvdXJ0aHMgb2YgaXQpLCBpbiBjYXNlIG9mIEVDQy1lZCBOT1IKKwkgKiBpdCBpcyBvZiBFQ0MgYmxvY2sgc2l6ZSwgZXRjLiBJdCBpcyBpbGxlZ2FsIHRvIGhhdmUgd3JpdGVzaXplID0gMC4KKwkgKiBBbnkgZHJpdmVyIHJlZ2lzdGVyaW5nIGEgc3RydWN0IG10ZF9pbmZvIG11c3QgZW5zdXJlIGEgd3JpdGVzaXplIG9mCisJICogMSBvciBsYXJnZXIuCisJICovCisJdV9pbnQzMl90IHdyaXRlc2l6ZTsKIAotCXVfaW50MzJfdCBvb2JibG9jazsgIC8vIFNpemUgb2YgT09CIGJsb2NrcyAoZS5nLiA1MTIpCiAJdV9pbnQzMl90IG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKIAl1X2ludDMyX3QgZWNjdHlwZTsKIAl1X2ludDMyX3QgZWNjc2l6ZTsKQEAgLTc5LDcgKzEyOSw2IEBACiAJICogTVREX1BST0dSQU1fUkVHSU9OUyBmbGFnIGlzIHNldC4KIAkgKiAoTWF5YmUgd2Ugc2hvdWxkIGhhdmUgYW4gdW5pb24gZm9yIHRob3NlPykKIAkgKi8KLSNkZWZpbmUgTVREX1BST0dSRUdJT05fU0laRShtdGQpICAobXRkKS0+b29iYmxvY2sKICNkZWZpbmUgTVREX1BST0dSRUdJT05fQ1RSTE1PREVfVkFMSUQobXRkKSAgKG10ZCktPm9vYnNpemUKICNkZWZpbmUgTVREX1BST0dSRUdJT05fQ1RSTE1PREVfSU5WQUxJRChtdGQpICAobXRkKS0+ZWNjdHlwZQogCkBAIC04Nyw5ICsxMzYsOCBAQAogCWNoYXIgKm5hbWU7CiAJaW50IGluZGV4OwogCi0JLy8gb29iaW5mbyBpcyBhIG5hbmRfb29iaW5mbyBzdHJ1Y3R1cmUsIHdoaWNoIGNhbiBiZSBzZXQgYnkgaW90Y2wgKE1FTVNFVE9PQklORk8pCi0Jc3RydWN0IG5hbmRfb29iaW5mbyBvb2JpbmZvOwotCXVfaW50MzJfdCBvb2JhdmFpbDsgIC8vIE51bWJlciBvZiBieXRlcyBpbiBPT0IgYXJlYSBhdmFpbGFibGUgZm9yIGZzCisJLyogZWNjIGxheW91dCBzdHJ1Y3R1cmUgcG9pbnRlciAtIHJlYWQgb25seSAhICovCisJc3RydWN0IG5hbmRfZWNjbGF5b3V0ICplY2NsYXlvdXQ7CiAKIAkvKiBEYXRhIGZvciB2YXJpYWJsZSBlcmFzZSByZWdpb25zLiBJZiBudW1lcmFzZXJlZ2lvbnMgaXMgemVybywKIAkgKiBpdCBtZWFucyB0aGF0IHRoZSB3aG9sZSBkZXZpY2UgaGFzIGVyYXNlc2l6ZSBhcyBnaXZlbiBhYm92ZS4KQEAgLTExMiwxMSArMTYwLDEwIEBACiAJaW50ICgqcmVhZCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKIAlpbnQgKCp3cml0ZSkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CiAKLQlpbnQgKCpyZWFkX2VjYykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLQlpbnQgKCp3cml0ZV9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYsIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotCi0JaW50ICgqcmVhZF9vb2IpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7Ci0JaW50ICgqd3JpdGVfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKTsKKwlpbnQgKCpyZWFkX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CisJaW50ICgqd3JpdGVfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiAKIAkvKgogCSAqIE1ldGhvZHMgdG8gYWNjZXNzIHRoZSBwcm90ZWN0aW9uIHJlZ2lzdGVyIGFyZWEsIHByZXNlbnQgaW4gc29tZQpAQCAtMTMwLDE3ICsxNzcsMTEgQEAKIAlpbnQgKCp3cml0ZV91c2VyX3Byb3RfcmVnKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwogCWludCAoKmxvY2tfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbik7CiAKLQkvKiBrdmVjLWJhc2VkIHJlYWQvd3JpdGUgbWV0aG9kcy4gV2UgbmVlZCB0aGVzZSBlc3BlY2lhbGx5IGZvciBOQU5EIGZsYXNoLAotCSAgIHdpdGggaXRzIGxpbWl0ZWQgbnVtYmVyIG9mIHdyaXRlIGN5Y2xlcyBwZXIgZXJhc2UuCisJLyoga3ZlYy1iYXNlZCByZWFkL3dyaXRlIG1ldGhvZHMuCiAJICAgTkI6IFRoZSAnY291bnQnIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIG9mIF92ZWN0b3JzXywgZWFjaCBvZgogCSAgIHdoaWNoIGNvbnRhaW5zIGFuIChvZnMsIGxlbikgdHVwbGUuCiAJKi8KLQlpbnQgKCpyZWFkdikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IGZyb20sIHNpemVfdCAqcmV0bGVuKTsKLQlpbnQgKCpyZWFkdl9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLAotCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7CiAJaW50ICgqd3JpdGV2KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuKTsKLQlpbnQgKCp3cml0ZXZfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sCi0JCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKIAogCS8qIFN5bmMgKi8KIAl2b2lkICgqc3luYykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKQEAgLTE1OSw2ICsyMDAsOSBAQAogCiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJlYm9vdF9ub3RpZmllcjsgIC8qIGRlZmF1bHQgbW9kZSBiZWZvcmUgcmVib290ICovCiAKKwkvKiBFQ0Mgc3RhdHVzIGluZm9ybWF0aW9uICovCisJc3RydWN0IG10ZF9lY2Nfc3RhdHMgZWNjX3N0YXRzOworCiAJdm9pZCAqcHJpdjsKIAogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwpAQCAtMTkyLDIwICsyMzYsNiBAQAogaW50IGRlZmF1bHRfbXRkX3JlYWR2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qga3ZlYyAqdmVjcywKIAkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IGZyb20sIHNpemVfdCAqcmV0bGVuKTsKIAotI2RlZmluZSBNVERfRVJBU0UobXRkLCBhcmdzLi4uKSAoKihtdGQtPmVyYXNlKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUE9JTlQobXRkLCBhLGIsYyxkKSAoKihtdGQtPnBvaW50KSkobXRkLCBhLGIsYywgKHVfY2hhciAqKikoZCkpCi0jZGVmaW5lIE1URF9VTlBPSU5UKG10ZCwgYXJnKSAoKihtdGQtPnVucG9pbnQpKShtdGQsICh1X2NoYXIgKilhcmcpCi0jZGVmaW5lIE1URF9SRUFEKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfV1JJVEUobXRkLCBhcmdzLi4uKSAoKihtdGQtPndyaXRlKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUkVBRFYobXRkLCBhcmdzLi4uKSAoKihtdGQtPnJlYWR2KSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfV1JJVEVWKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZXYpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9SRUFERUNDKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkX2VjYykpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFRUNDKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZV9lY2MpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9SRUFET09CKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkX29vYikpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFT09CKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZV9vb2IpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9TWU5DKG10ZCkgZG8geyBpZiAobXRkLT5zeW5jKSAoKihtdGQtPnN5bmMpKShtdGQpOyAgfSB3aGlsZSAoMCkKLQotCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiB2b2lkIG10ZF9lcmFzZV9jYWxsYmFjayhzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwogI2Vsc2UKQEAgLTIyNiw3ICsyNTYsNyBAQAogCiAjaWZkZWYgQ09ORklHX01URF9ERUJVRwogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQkJCQlcCi0gCWRvIHsJCQkJCQlcCisJZG8gewkJCQkJCVwKIAkJaWYgKG4gPD0gQ09ORklHX01URF9ERUJVR19WRVJCT1NFKQlcCiAJCQlwcmludGsoS0VSTl9JTkZPIGFyZ3MpOwkJXAogCX0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAppbmRleCBkYTVlNjdiLi42NjU1OTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCkBAIC0xMSw1MiArMTEsMTUgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiAgSW5mbzoKLSAqICAgQ29udGFpbnMgc3RhbmRhcmQgZGVmaW5lcyBhbmQgSURzIGZvciBOQU5EIGZsYXNoIGRldmljZXMKKyAqIEluZm86CisgKglDb250YWlucyBzdGFuZGFyZCBkZWZpbmVzIGFuZCBJRHMgZm9yIE5BTkQgZmxhc2ggZGV2aWNlcwogICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgIDAxLTMxLTIwMDAgRE1XICAgICBDcmVhdGVkCi0gKiAgIDA5LTE4LTIwMDAgU0pIICAgICBNb3ZlZCBzdHJ1Y3R1cmUgb3V0IG9mIHRoZSBEaXNrLU9uLUNoaXAgZHJpdmVycwotICoJCQlzbyBpdCBjYW4gYmUgdXNlZCBieSBvdGhlciBOQU5EIGZsYXNoIGRldmljZQotICoJCQlkcml2ZXJzLiBJIGFsc28gY2hhbmdlZCB0aGUgY29weXJpZ2h0IHNpbmNlIG5vbmUKLSAqCQkJb2YgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3BlY2lmaWMKLSAqCQkJdG8gRG9DIGRldmljZXMuIERhdmlkIGNhbiB3aGFjayBtZSB3aXRoIGEgYmFzZWJhbGwKLSAqCQkJYmF0IGxhdGVyIGlmIEkgZGlkIHNvbWV0aGluZyBuYXVnaHR5LgotICogICAxMC0xMS0yMDAwIFNKSCAgICAgQWRkZWQgcHJpdmF0ZSBOQU5EIGZsYXNoIHN0cnVjdHVyZSBmb3IgZHJpdmVyCi0gKiAgIDEwLTI0LTIwMDAgU0pIICAgICBBZGRlZCBwcm90b3R5cGUgZm9yICduYW5kX3NjYW4nIGZ1bmN0aW9uCi0gKiAgIDEwLTI5LTIwMDEgVEcJY2hhbmdlZCBuYW5kX2NoaXAgc3RydWN0dXJlIHRvIHN1cHBvcnQKLSAqCQkJaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIGNvbnRyb2wgbGluZXMKLSAqICAgMDItMjEtMjAwMiBURwlhZGRlZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgcmVhZC93cml0ZSBhZHJlc3MgYW5kCi0gKgkJCXJlYWR5L2J1c3kgbGluZSBhY2Nlc3MgZnVuY3Rpb24KLSAqICAgMDItMjYtMjAwMiBURwlhZGRlZCBjaGlwX2RlbGF5IHRvIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgdG8gb3B0aW1pemUKLSAqCQkJY29tbWFuZCBkZWxheSB0aW1lcyBmb3IgZGlmZmVyZW50IGNoaXBzCi0gKiAgIDA0LTI4LTIwMDIgVEcJT09CIGNvbmZpZyBkZWZpbmVzIG1vdmVkIGZyb20gbmFuZC5jIHRvIGF2b2lkIGR1cGxpY2F0ZQotICoJCQlkZWZpbmVzIGluIGpmZnMyL3didWYuYwotICogICAwOC0wNy0yMDAyIFRHCWZvcmNlZCBiYWQgYmxvY2sgbG9jYXRpb24gdG8gYnl0ZSA1IG9mIE9PQiwgZXZlbiBpZgotICoJCQlDT05GSUdfTVREX05BTkRfRUNDX0pGRlMyIGlzIG5vdCBzZXQKLSAqICAgMDgtMTAtMjAwMiBURwlleHRlbnNpb25zIHRvIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBIVy1FQ0MKLSAqCi0gKiAgIDA4LTI5LTIwMDIgdGdseCAJbmFuZF9jaGlwIHN0cnVjdHVyZTogZGF0YV9wb2kgZm9yIHNlbGVjdGluZwotICoJCQlpbnRlcm5hbCAvIGZzLWRyaXZlciBidWZmZXIKLSAqCQkJc3VwcG9ydCBmb3IgNmJ5dGUvNTEyYnl0ZSBoYXJkd2FyZSBFQ0MKLSAqCQkJcmVhZF9lY2MsIHdyaXRlX2VjYyBleHRlbmRlZCBmb3IgZGlmZmVyZW50IG9vYi1sYXlvdXQKLSAqCQkJb29iIGxheW91dCBzZWxlY3Rpb25zOiBOQU5EX05PTkVfT09CLCBOQU5EX0pGRlMyX09PQiwKLSAqCQkJTkFORF9ZQUZGU19PT0IKLSAqICAxMS0yNS0yMDAyIHRnbHgJQWRkZWQgTWFudWZhY3R1cmVyIGNvZGUgRlVKSVRTVSwgTkFUSU9OQUwKLSAqCQkJU3BsaXQgbWFudWZhY3R1cmVyIGFuZCBkZXZpY2UgSUQgc3RydWN0dXJlcwotICoKLSAqICAwMi0wOC0yMDA0IHRnbHggCWFkZGVkIG9wdGlvbiBmaWVsZCB0byBuYW5kIHN0cnVjdHVyZSBmb3IgY2hpcCBhbm9tYWxpdGllcwotICogIDA1LTI1LTIwMDQgdGdseCAJYWRkZWQgYmFkIGJsb2NrIHRhYmxlIHN1cHBvcnQsIFNULU1JQ1JPIG1hbnVmYWN0dXJlciBpZAotICoJCQl1cGRhdGUgb2YgbmFuZF9jaGlwIHN0cnVjdHVyZSBkZXNjcmlwdGlvbgotICogIDAxLTE3LTIwMDUgZG1hcmxpbglhZGRlZCBleHRlbmRlZCBjb21tYW5kcyBmb3IgQUctQU5EIGRldmljZSBhbmQgYWRkZWQgb3B0aW9uCi0gKiAJCQlmb3IgQkJUX0FVVE9fUkVGUkVTSC4KLSAqICAwMS0yMC0yMDA1IGRtYXJsaW4JYWRkZWQgb3B0aW9uYWwgcG9pbnRlciB0byBoYXJkd2FyZSBzcGVjaWZpYyBjYWxsYmFjayBmb3IKLSAqCQkJZXh0cmEgZXJyb3Igc3RhdHVzIGNoZWNrcy4KKyAqIENoYW5nZWxvZzoKKyAqCVNlZSBnaXQgY2hhbmdlbG9nLgogICovCiAjaWZuZGVmIF9fTElOVVhfTVREX05BTkRfSAogI2RlZmluZSBfX0xJTlVYX01URF9OQU5EX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KQEAgLTY3LDEwICszMCw2IEBACiAvKiBGcmVlIHJlc291cmNlcyBoZWxkIGJ5IHRoZSBOQU5EIGRldmljZSAqLwogZXh0ZXJuIHZvaWQgbmFuZF9yZWxlYXNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAKLS8qIFJlYWQgcmF3IGRhdGEgZnJvbSB0aGUgZGV2aWNlIHdpdGhvdXQgRUNDICovCi1leHRlcm4gaW50IG5hbmRfcmVhZF9yYXcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3Qgb29ibGVuKTsKLQotCiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgTkFORCBjaGlwcyBpbiBhbiBhcnJheSAqLwogI2RlZmluZSBOQU5EX01BWF9DSElQUwkJOAogCkBAIC03OSw0NCArMzgsNDUgQEAKICAqIGFkanVzdCB0aGlzIGFjY29yZGluZ2x5LgogICovCiAjZGVmaW5lIE5BTkRfTUFYX09PQlNJWkUJNjQKKyNkZWZpbmUgTkFORF9NQVhfUEFHRVNJWkUJMjA0OAogCiAvKgogICogQ29uc3RhbnRzIGZvciBoYXJkd2FyZSBzcGVjaWZpYyBDTEUvQUxFL05DRSBmdW5jdGlvbgotKi8KKyAqCisgKiBUaGVzZSBhcmUgYml0cyB3aGljaCBjYW4gYmUgb3InZWQgdG8gc2V0L2NsZWFyIG11bHRpcGxlCisgKiBiaXRzIGluIG9uZSBnby4KKyAqLwogLyogU2VsZWN0IHRoZSBjaGlwIGJ5IHNldHRpbmcgbkNFIHRvIGxvdyAqLwotI2RlZmluZSBOQU5EX0NUTF9TRVROQ0UgCTEKLS8qIERlc2VsZWN0IHRoZSBjaGlwIGJ5IHNldHRpbmcgbkNFIHRvIGhpZ2ggKi8KLSNkZWZpbmUgTkFORF9DVExfQ0xSTkNFCQkyCisjZGVmaW5lIE5BTkRfTkNFCQkweDAxCiAvKiBTZWxlY3QgdGhlIGNvbW1hbmQgbGF0Y2ggYnkgc2V0dGluZyBDTEUgdG8gaGlnaCAqLwotI2RlZmluZSBOQU5EX0NUTF9TRVRDTEUJCTMKLS8qIERlc2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGxvdyAqLwotI2RlZmluZSBOQU5EX0NUTF9DTFJDTEUJCTQKKyNkZWZpbmUgTkFORF9DTEUJCTB4MDIKIC8qIFNlbGVjdCB0aGUgYWRkcmVzcyBsYXRjaCBieSBzZXR0aW5nIEFMRSB0byBoaWdoICovCi0jZGVmaW5lIE5BTkRfQ1RMX1NFVEFMRQkJNQotLyogRGVzZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gbG93ICovCi0jZGVmaW5lIE5BTkRfQ1RMX0NMUkFMRQkJNgotLyogU2V0IHdyaXRlIHByb3RlY3Rpb24gYnkgc2V0dGluZyBXUCB0byBoaWdoLiBOb3QgdXNlZCEgKi8KLSNkZWZpbmUgTkFORF9DVExfU0VUV1AJCTcKLS8qIENsZWFyIHdyaXRlIHByb3RlY3Rpb24gYnkgc2V0dGluZyBXUCB0byBsb3cuIE5vdCB1c2VkISAqLwotI2RlZmluZSBOQU5EX0NUTF9DTFJXUAkJOAorI2RlZmluZSBOQU5EX0FMRQkJMHgwNAorCisjZGVmaW5lIE5BTkRfQ1RSTF9DTEUJCShOQU5EX05DRSB8IE5BTkRfQ0xFKQorI2RlZmluZSBOQU5EX0NUUkxfQUxFCQkoTkFORF9OQ0UgfCBOQU5EX0FMRSkKKyNkZWZpbmUgTkFORF9DVFJMX0NIQU5HRQkweDgwCiAKIC8qCiAgKiBTdGFuZGFyZCBOQU5EIGZsYXNoIGNvbW1hbmRzCiAgKi8KICNkZWZpbmUgTkFORF9DTURfUkVBRDAJCTAKICNkZWZpbmUgTkFORF9DTURfUkVBRDEJCTEKKyNkZWZpbmUgTkFORF9DTURfUk5ET1VUCQk1CiAjZGVmaW5lIE5BTkRfQ01EX1BBR0VQUk9HCTB4MTAKICNkZWZpbmUgTkFORF9DTURfUkVBRE9PQgkweDUwCiAjZGVmaW5lIE5BTkRfQ01EX0VSQVNFMQkJMHg2MAogI2RlZmluZSBOQU5EX0NNRF9TVEFUVVMJCTB4NzAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX01VTFRJCTB4NzEKICNkZWZpbmUgTkFORF9DTURfU0VRSU4JCTB4ODAKKyNkZWZpbmUgTkFORF9DTURfUk5ESU4JCTB4ODUKICNkZWZpbmUgTkFORF9DTURfUkVBRElECQkweDkwCiAjZGVmaW5lIE5BTkRfQ01EX0VSQVNFMgkJMHhkMAogI2RlZmluZSBOQU5EX0NNRF9SRVNFVAkJMHhmZgogCiAvKiBFeHRlbmRlZCBjb21tYW5kcyBmb3IgbGFyZ2UgcGFnZSBkZXZpY2VzICovCiAjZGVmaW5lIE5BTkRfQ01EX1JFQURTVEFSVAkweDMwCisjZGVmaW5lIE5BTkRfQ01EX1JORE9VVFNUQVJUCTB4RTAKICNkZWZpbmUgTkFORF9DTURfQ0FDSEVEUFJPRwkweDE1CiAKIC8qIEV4dGVuZGVkIGNvbW1hbmRzIGZvciBBRy1BTkQgZGV2aWNlICovCkBAIC0xMzgsNiArOTgsOCBAQAogI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfUkVTRVQJMHg3ZgogI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfQ0xFQVIJMHhmZgogCisjZGVmaW5lIE5BTkRfQ01EX05PTkUJCS0xCisKIC8qIFN0YXR1cyBiaXRzICovCiAjZGVmaW5lIE5BTkRfU1RBVFVTX0ZBSUwJMHgwMQogI2RlZmluZSBOQU5EX1NUQVRVU19GQUlMX04xCTB4MDIKQEAgLTE0OCwyMSArMTEwLDEyIEBACiAvKgogICogQ29uc3RhbnRzIGZvciBFQ0NfTU9ERVMKICAqLwotCi0vKiBObyBFQ0MuIFVzYWdlIGlzIG5vdCByZWNvbW1lbmRlZCAhICovCi0jZGVmaW5lIE5BTkRfRUNDX05PTkUJCTAKLS8qIFNvZnR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciAyNTYgQnl0ZSBkYXRhICovCi0jZGVmaW5lIE5BTkRfRUNDX1NPRlQJCTEKLS8qIEhhcmR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciAyNTYgQnl0ZSBkYXRhICovCi0jZGVmaW5lIE5BTkRfRUNDX0hXM18yNTYJMgotLyogSGFyZHdhcmUgRUNDIDMgYnl0ZSBFQ0MgcGVyIDUxMiBCeXRlIGRhdGEgKi8KLSNkZWZpbmUgTkFORF9FQ0NfSFczXzUxMgkzCi0vKiBIYXJkd2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgNTEyIEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzZfNTEyCTQKLS8qIEhhcmR3YXJlIEVDQyA4IGJ5dGUgRUNDIHBlciA1MTIgQnl0ZSBkYXRhICovCi0jZGVmaW5lIE5BTkRfRUNDX0hXOF81MTIJNgotLyogSGFyZHdhcmUgRUNDIDEyIGJ5dGUgRUNDIHBlciAyMDQ4IEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzEyXzIwNDgJNwordHlwZWRlZiBlbnVtIHsKKwlOQU5EX0VDQ19OT05FLAorCU5BTkRfRUNDX1NPRlQsCisJTkFORF9FQ0NfSFcsCisJTkFORF9FQ0NfSFdfU1lORFJPTUUsCit9IG5hbmRfZWNjX21vZGVzX3Q7CiAKIC8qCiAgKiBDb25zdGFudHMgZm9yIEhhcmR3YXJlIEVDQwpAQCAtMjAxLDYgKzE1NCwxMCBAQAogICogYml0cyBmcm9tIGFkamFjZW50IGJsb2NrcyBmcm9tICdsZWFraW5nJyBpbiBhbHRlcmluZyBkYXRhLgogICogVGhpcyBoYXBwZW5zIHdpdGggdGhlIFJlbmVzYXMgQUctQU5EIGNoaXBzLCBwb3NzaWJseSBvdGhlcnMuICAqLwogI2RlZmluZSBCQlRfQVVUT19SRUZSRVNICTB4MDAwMDAwODAKKy8qIENoaXAgZG9lcyBub3QgcmVxdWlyZSByZWFkeSBjaGVjayBvbiByZWFkLiBUcnVlCisgKiBmb3IgYWxsIGxhcmdlIHBhZ2UgZGV2aWNlcywgYXMgdGhleSBkbyBub3Qgc3VwcG9ydAorICogYXV0b2luY3JlbWVudC4qLworI2RlZmluZSBOQU5EX05PX1JFQURSRFkJCTB4MDAwMDAxMDAKIAogLyogT3B0aW9ucyB2YWxpZCBmb3IgU2Ftc3VuZyBsYXJnZSBwYWdlIGRldmljZXMgKi8KICNkZWZpbmUgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgXApAQCAtMjE5LDE4ICsxNzYsMTIgQEAKIC8qIFVzZSBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZS4gVGhpcyBvcHRpb24gaXMgcGFzc2VkIHRvIHRoZQogICogZGVmYXVsdCBiYWQgYmxvY2sgdGFibGUgZnVuY3Rpb24uICovCiAjZGVmaW5lIE5BTkRfVVNFX0ZMQVNIX0JCVAkweDAwMDEwMDAwCi0vKiBUaGUgaHcgZWNjIGdlbmVyYXRvciBwcm92aWRlcyBhIHN5bmRyb21lIGluc3RlYWQgYSBlY2MgdmFsdWUgb24gcmVhZAotICogVGhpcyBjYW4gb25seSB3b3JrIGlmIHdlIGhhdmUgdGhlIGVjYyBieXRlcyBkaXJlY3RseSBiZWhpbmQgdGhlCi0gKiBkYXRhIGJ5dGVzLiBBcHBsaWVzIGZvciBET0MgYW5kIEFHLUFORCBSZW5lc2FzIEhXIFJlZWQgU29sb21vbiBnZW5lcmF0b3JzICovCi0jZGVmaW5lIE5BTkRfSFdFQ0NfU1lORFJPTUUJMHgwMDAyMDAwMAogLyogVGhpcyBvcHRpb24gc2tpcHMgdGhlIGJidCBzY2FuIGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KLSNkZWZpbmUgTkFORF9TS0lQX0JCVFNDQU4JMHgwMDA0MDAwMAorI2RlZmluZSBOQU5EX1NLSVBfQkJUU0NBTgkweDAwMDIwMDAwCiAKIC8qIE9wdGlvbnMgc2V0IGJ5IG5hbmQgc2NhbiAqLwotLyogTmFuZCBzY2FuIGhhcyBhbGxvY2F0ZWQgb29iX2J1ZiAqLwotI2RlZmluZSBOQU5EX09PQkJVRl9BTExPQwkweDQwMDAwMDAwCi0vKiBOYW5kIHNjYW4gaGFzIGFsbG9jYXRlZCBkYXRhX2J1ZiAqLwotI2RlZmluZSBOQU5EX0RBVEFCVUZfQUxMT0MJMHg4MDAwMDAwMAorLyogTmFuZCBzY2FuIGhhcyBhbGxvY2F0ZWQgY29udHJvbGxlciBzdHJ1Y3QgKi8KKyNkZWZpbmUgTkFORF9DT05UUk9MTEVSX0FMTE9DCTB4ODAwMDAwMDAKIAogCiAvKgpAQCAtMjY0LDQ1ICsyMTUsMTAyIEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBuYW5kX2VjY19jdHJsIC0gQ29udHJvbCBzdHJ1Y3R1cmUgZm9yIGVjYworICogQG1vZGU6CWVjYyBtb2RlCisgKiBAc3RlcHM6CW51bWJlciBvZiBlY2Mgc3RlcHMgcGVyIHBhZ2UKKyAqIEBzaXplOglkYXRhIGJ5dGVzIHBlciBlY2Mgc3RlcAorICogQGJ5dGVzOgllY2MgYnl0ZXMgcGVyIHN0ZXAKKyAqIEB0b3RhbDoJdG90YWwgbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIgcGFnZQorICogQHByZXBhZDoJcGFkZGluZyBpbmZvcm1hdGlvbiBmb3Igc3luZHJvbWUgYmFzZWQgZWNjIGdlbmVyYXRvcnMKKyAqIEBwb3N0cGFkOglwYWRkaW5nIGluZm9ybWF0aW9uIGZvciBzeW5kcm9tZSBiYXNlZCBlY2MgZ2VuZXJhdG9ycworICogQGh3Y3RsOglmdW5jdGlvbiB0byBjb250cm9sIGhhcmR3YXJlIGVjYyBnZW5lcmF0b3IuIE11c3Qgb25seQorICoJCWJlIHByb3ZpZGVkIGlmIGFuIGhhcmR3YXJlIEVDQyBpcyBhdmFpbGFibGUKKyAqIEBjYWxjdWxhdGU6CWZ1bmN0aW9uIGZvciBlY2MgY2FsY3VsYXRpb24gb3IgcmVhZGJhY2sgZnJvbSBlY2MgaGFyZHdhcmUKKyAqIEBjb3JyZWN0OglmdW5jdGlvbiBmb3IgZWNjIGNvcnJlY3Rpb24sIG1hdGNoaW5nIHRvIGVjYyBnZW5lcmF0b3IgKHN3L2h3KQorICogQHJlYWRfcGFnZToJZnVuY3Rpb24gdG8gcmVhZCBhIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBlY2MgZ2VuZXJhdG9yIHJlcXVpcmVtZW50cworICogQHdyaXRlX3BhZ2U6CWZ1bmN0aW9uIHRvIHdyaXRlIGEgcGFnZSBhY2NvcmRpbmcgdG8gdGhlIGVjYyBnZW5lcmF0b3IgcmVxdWlyZW1lbnRzCisgKi8KK3N0cnVjdCBuYW5kX2VjY19jdHJsIHsKKwluYW5kX2VjY19tb2Rlc190CW1vZGU7CisJaW50CQkJc3RlcHM7CisJaW50CQkJc2l6ZTsKKwlpbnQJCQlieXRlczsKKwlpbnQJCQl0b3RhbDsKKwlpbnQJCQlwcmVwYWQ7CisJaW50CQkJcG9zdHBhZDsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmxheW91dDsKKwl2b2lkCQkJKCpod2N0bCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKTsKKwlpbnQJCQkoKmNhbGN1bGF0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgICAgY29uc3QgdWludDhfdCAqZGF0LAorCQkJCQkgICAgIHVpbnQ4X3QgKmVjY19jb2RlKTsKKwlpbnQJCQkoKmNvcnJlY3QpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpkYXQsCisJCQkJCSAgIHVpbnQ4X3QgKnJlYWRfZWNjLAorCQkJCQkgICB1aW50OF90ICpjYWxjX2VjYyk7CisJaW50CQkJKCpyZWFkX3BhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQkgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJCSAgICAgdWludDhfdCAqYnVmKTsKKwl2b2lkCQkJKCp3cml0ZV9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJICAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQkJICAgICAgY29uc3QgdWludDhfdCAqYnVmKTsKKwlpbnQJCQkoKnJlYWRfb29iKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJCSAgICBpbnQgcGFnZSwKKwkJCQkJICAgIGludCBzbmRjbWQpOworCWludAkJCSgqd3JpdGVfb29iKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkgICAgIGludCBwYWdlKTsKK307CisKKy8qKgorICogc3RydWN0IG5hbmRfYnVmZmVycyAtIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHJlYWQvd3JpdGUKKyAqIEBlY2NjYWxjOglidWZmZXIgZm9yIGNhbGN1bGF0ZWQgZWNjCisgKiBAZWNjY29kZToJYnVmZmVyIGZvciBlY2MgcmVhZCBmcm9tIGZsYXNoCisgKiBAb29id2J1ZjoJYnVmZmVyIGZvciB3cml0ZSBvb2IgZGF0YQorICogQGRhdGFidWY6CWJ1ZmZlciBmb3IgZGF0YSAtIGR5bmFtaWNhbGx5IHNpemVkCisgKiBAb29icmJ1ZjoJYnVmZmVyIHRvIHJlYWQgb29iIGRhdGEKKyAqCisgKiBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiBidWZmZXJzLiBkYXRhYnVmIGFuZCBvb2JyYnVmIG11c3QgYmUgaW4KKyAqIGNvbnNlY3V0aXZlIG9yZGVyLgorICovCitzdHJ1Y3QgbmFuZF9idWZmZXJzIHsKKwl1aW50OF90CWVjY2NhbGNbTkFORF9NQVhfT09CU0laRV07CisJdWludDhfdAllY2Njb2RlW05BTkRfTUFYX09PQlNJWkVdOworCXVpbnQ4X3QJb29id2J1ZltOQU5EX01BWF9PT0JTSVpFXTsKKwl1aW50OF90IGRhdGFidWZbTkFORF9NQVhfUEFHRVNJWkVdOworCXVpbnQ4X3QJb29icmJ1ZltOQU5EX01BWF9PT0JTSVpFXTsKK307CisKKy8qKgogICogc3RydWN0IG5hbmRfY2hpcCAtIE5BTkQgUHJpdmF0ZSBGbGFzaCBDaGlwIERhdGEKICAqIEBJT19BRERSX1I6CQlbQk9BUkRTUEVDSUZJQ10gYWRkcmVzcyB0byByZWFkIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUgZmxhc2ggZGV2aWNlCiAgKiBASU9fQUREUl9XOgkJW0JPQVJEU1BFQ0lGSUNdIGFkZHJlc3MgdG8gd3JpdGUgdGhlIDggSS9PIGxpbmVzIG9mIHRoZSBmbGFzaCBkZXZpY2UKICAqIEByZWFkX2J5dGU6CQlbUkVQTEFDRUFCTEVdIHJlYWQgb25lIGJ5dGUgZnJvbSB0aGUgY2hpcAotICogQHdyaXRlX2J5dGU6CQlbUkVQTEFDRUFCTEVdIHdyaXRlIG9uZSBieXRlIHRvIHRoZSBjaGlwCiAgKiBAcmVhZF93b3JkOgkJW1JFUExBQ0VBQkxFXSByZWFkIG9uZSB3b3JkIGZyb20gdGhlIGNoaXAKLSAqIEB3cml0ZV93b3JkOgkJW1JFUExBQ0VBQkxFXSB3cml0ZSBvbmUgd29yZCB0byB0aGUgY2hpcAogICogQHdyaXRlX2J1ZjoJCVtSRVBMQUNFQUJMRV0gd3JpdGUgZGF0YSBmcm9tIHRoZSBidWZmZXIgdG8gdGhlIGNoaXAKICAqIEByZWFkX2J1ZjoJCVtSRVBMQUNFQUJMRV0gcmVhZCBkYXRhIGZyb20gdGhlIGNoaXAgaW50byB0aGUgYnVmZmVyCiAgKiBAdmVyaWZ5X2J1ZjoJCVtSRVBMQUNFQUJMRV0gdmVyaWZ5IGJ1ZmZlciBjb250ZW50cyBhZ2FpbnN0IHRoZSBjaGlwIGRhdGEKICAqIEBzZWxlY3RfY2hpcDoJW1JFUExBQ0VBQkxFXSBzZWxlY3QgY2hpcCBucgogICogQGJsb2NrX2JhZDoJCVtSRVBMQUNFQUJMRV0gY2hlY2ssIGlmIHRoZSBibG9jayBpcyBiYWQKICAqIEBibG9ja19tYXJrYmFkOglbUkVQTEFDRUFCTEVdIG1hcmsgdGhlIGJsb2NrIGJhZAotICogQGh3Y29udHJvbDoJCVtCT0FSRFNQRUNJRklDXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc2luZyBjb250cm9sLWxpbmVzCisgKiBAY21kX2N0cmw6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW50aW9uIGZvciBjb250cm9sbGluZworICoJCQlBTEUvQ0xFL25DRS4gQWxzbyB1c2VkIHRvIHdyaXRlIGNvbW1hbmQgYW5kIGFkZHJlc3MKICAqIEBkZXZfcmVhZHk6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNpbmcgZGV2aWNlIHJlYWR5L2J1c3kgbGluZQogICoJCQlJZiBzZXQgdG8gTlVMTCBubyBhY2Nlc3MgdG8gcmVhZHkvYnVzeSBpcyBhdmFpbGFibGUgYW5kIHRoZSByZWFkeS9idXN5IGluZm9ybWF0aW9uCiAgKgkJCWlzIHJlYWQgZnJvbSB0aGUgY2hpcCBzdGF0dXMgcmVnaXN0ZXIKICAqIEBjbWRmdW5jOgkJW1JFUExBQ0VBQkxFXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciB3cml0aW5nIGNvbW1hbmRzIHRvIHRoZSBjaGlwCiAgKiBAd2FpdGZ1bmM6CQlbUkVQTEFDRUFCTEVdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHdhaXQgb24gcmVhZHkKLSAqIEBjYWxjdWxhdGVfZWNjOiAJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiBmb3IgZWNjIGNhbGN1bGF0aW9uIG9yIHJlYWRiYWNrIGZyb20gZWNjIGhhcmR3YXJlCi0gKiBAY29ycmVjdF9kYXRhOglbUkVQTEFDRUFCTEVdIGZ1bmN0aW9uIGZvciBlY2MgY29ycmVjdGlvbiwgbWF0Y2hpbmcgdG8gZWNjIGdlbmVyYXRvciAoc3cvaHcpCi0gKiBAZW5hYmxlX2h3ZWNjOglbQk9BUkRTUEVDSUZJQ10gZnVuY3Rpb24gdG8gZW5hYmxlIChyZXNldCkgaGFyZHdhcmUgZWNjIGdlbmVyYXRvci4gTXVzdCBvbmx5Ci0gKgkJCWJlIHByb3ZpZGVkIGlmIGEgaGFyZHdhcmUgRUNDIGlzIGF2YWlsYWJsZQorICogQGVjYzoJCVtCT0FSRFNQRUNJRklDXSBlY2MgY29udHJvbCBjdHJ1Y3R1cmUKICAqIEBlcmFzZV9jbWQ6CQlbSU5URVJOXSBlcmFzZSBjb21tYW5kIHdyaXRlIGZ1bmN0aW9uLCBzZWxlY3RhYmxlIGR1ZSB0byBBTkQgc3VwcG9ydAogICogQHNjYW5fYmJ0OgkJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiB0byBzY2FuIGJhZCBibG9jayB0YWJsZQotICogQGVjY21vZGU6CQlbQk9BUkRTUEVDSUZJQ10gbW9kZSBvZiBlY2MsIHNlZSBkZWZpbmVzCi0gKiBAZWNjc2l6ZTogCQlbSU5URVJOXSBkYXRhYnl0ZXMgdXNlZCBwZXIgZWNjLWNhbGN1bGF0aW9uCi0gKiBAZWNjYnl0ZXM6IAkJW0lOVEVSTl0gbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIgZWNjLWNhbGN1bGF0aW9uIHN0ZXAKLSAqIEBlY2NzdGVwczoJCVtJTlRFUk5dIG51bWJlciBvZiBlY2MgY2FsY3VsYXRpb24gc3RlcHMgcGVyIHBhZ2UKICAqIEBjaGlwX2RlbGF5OgkJW0JPQVJEU1BFQ0lGSUNdIGNoaXAgZGVwZW5kZW50IGRlbGF5IGZvciB0cmFuc2ZlcmluZyBkYXRhIGZyb20gYXJyYXkgdG8gcmVhZCByZWdzICh0UikKLSAqIEBjaGlwX2xvY2s6CQlbSU5URVJOXSBzcGlubG9jayB1c2VkIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoaXMgc3RydWN0dXJlIGFuZCB0aGUgY2hpcAogICogQHdxOgkJCVtJTlRFUk5dIHdhaXQgcXVldWUgdG8gc2xlZXAgb24gaWYgYSBOQU5EIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcwotICogQHN0YXRlOiAJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOQU5EIGRldmljZQorICogQHN0YXRlOgkJW0lOVEVSTl0gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE5BTkQgZGV2aWNlCiAgKiBAcGFnZV9zaGlmdDoJCVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBwYWdlIChjb2x1bW4gYWRkcmVzcyBiaXRzKQogICogQHBoeXNfZXJhc2Vfc2hpZnQ6CVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBwaHlzaWNhbCBlcmFzZWJsb2NrCiAgKiBAYmJ0X2VyYXNlX3NoaWZ0OglbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgYmJ0IGVudHJ5CiAgKiBAY2hpcF9zaGlmdDoJCVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gb25lIGNoaXAKLSAqIEBkYXRhX2J1ZjoJCVtJTlRFUk5dIGludGVybmFsIGJ1ZmZlciBmb3Igb25lIHBhZ2UgKyBvb2IKLSAqIEBvb2JfYnVmOgkJW0lOVEVSTl0gb29iIGJ1ZmZlciBmb3Igb25lIGVyYXNlYmxvY2sKKyAqIEBkYXRidWY6CQlbSU5URVJOXSBpbnRlcm5hbCBidWZmZXIgZm9yIG9uZSBwYWdlICsgb29iCisgKiBAb29iYnVmOgkJW0lOVEVSTl0gb29iIGJ1ZmZlciBmb3Igb25lIGVyYXNlYmxvY2sKICAqIEBvb2JkaXJ0eToJCVtJTlRFUk5dIGluZGljYXRlcyB0aGF0IG9vYl9idWYgbXVzdCBiZSByZWluaXRpYWxpemVkCiAgKiBAZGF0YV9wb2k6CQlbSU5URVJOXSBwb2ludGVyIHRvIGEgZGF0YSBidWZmZXIKICAqIEBvcHRpb25zOgkJW0JPQVJEU1BFQ0lGSUNdIHZhcmlvdXMgY2hpcCBvcHRpb25zLiBUaGV5IGNhbiBwYXJ0bHkgYmUgc2V0IHRvIGluZm9ybSBuYW5kX3NjYW4gYWJvdXQKQEAgLTMxMiwxMiArMzIwLDEzIEBACiAgKiBAY2hpcHNpemU6CQlbSU5URVJOXSB0aGUgc2l6ZSBvZiBvbmUgY2hpcCBmb3IgbXVsdGljaGlwIGFycmF5cwogICogQHBhZ2VtYXNrOgkJW0lOVEVSTl0gcGFnZSBudW1iZXIgbWFzayA9IG51bWJlciBvZiAocGFnZXMgLyBjaGlwKSAtIDEKICAqIEBwYWdlYnVmOgkJW0lOVEVSTl0gaG9sZHMgdGhlIHBhZ2VudW1iZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIGRhdGFfYnVmCi0gKiBAYXV0b29vYjoJCVtSRVBMQUNFQUJMRV0gdGhlIGRlZmF1bHQgKGF1dG8pcGxhY2VtZW50IHNjaGVtZQorICogQGVjY2xheW91dDoJCVtSRVBMQUNFQUJMRV0gdGhlIGRlZmF1bHQgZWNjIHBsYWNlbWVudCBzY2hlbWUKICAqIEBiYnQ6CQlbSU5URVJOXSBiYWQgYmxvY2sgdGFibGUgcG9pbnRlcgogICogQGJidF90ZDoJCVtSRVBMQUNFQUJMRV0gYmFkIGJsb2NrIHRhYmxlIGRlc2NyaXB0b3IgZm9yIGZsYXNoIGxvb2t1cAogICogQGJidF9tZDoJCVtSRVBMQUNFQUJMRV0gYmFkIGJsb2NrIHRhYmxlIG1pcnJvciBkZXNjcmlwdG9yCiAgKiBAYmFkYmxvY2tfcGF0dGVybjoJW1JFUExBQ0VBQkxFXSBiYWQgYmxvY2sgc2NhbiBwYXR0ZXJuIHVzZWQgZm9yIGluaXRpYWwgYmFkIGJsb2NrIHNjYW4KLSAqIEBjb250cm9sbGVyOgkJW09QVElPTkFMXSBhIHBvaW50ZXIgdG8gYSBoYXJkd2FyZSBjb250cm9sbGVyIHN0cnVjdHVyZSB3aGljaCBpcyBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcworICogQGNvbnRyb2xsZXI6CQlbUkVQTEFDRUFCTEVdIGEgcG9pbnRlciB0byBhIGhhcmR3YXJlIGNvbnRyb2xsZXIgc3RydWN0dXJlCisgKgkJCXdoaWNoIGlzIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbmRlcGVuZGVuZCBkZXZpY2VzCiAgKiBAcHJpdjoJCVtPUFRJT05BTF0gcG9pbnRlciB0byBwcml2YXRlIGNoaXAgZGF0ZQogICogQGVycnN0YXQ6CQlbT1BUSU9OQUxdIGhhcmR3YXJlIHNwZWNpZmljIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBlcnJvciBzdGF0dXMgY2hlY2tzCiAgKgkJCShkZXRlcm1pbmUgaWYgZXJyb3JzIGFyZSBjb3JyZWN0YWJsZSkKQEAgLTMyNSw1OCArMzM0LDU3IEBACiAKIHN0cnVjdCBuYW5kX2NoaXAgewogCXZvaWQgIF9faW9tZW0JKklPX0FERFJfUjsKLQl2b2lkICBfX2lvbWVtIAkqSU9fQUREUl9XOworCXZvaWQgIF9faW9tZW0JKklPX0FERFJfVzsKIAotCXVfY2hhcgkJKCpyZWFkX2J5dGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQl2b2lkCQkoKndyaXRlX2J5dGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgYnl0ZSk7CisJdWludDhfdAkJKCpyZWFkX2J5dGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKIAl1MTYJCSgqcmVhZF93b3JkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0Jdm9pZAkJKCp3cml0ZV93b3JkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdTE2IHdvcmQpOwotCi0Jdm9pZAkJKCp3cml0ZV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci0Jdm9pZAkJKCpyZWFkX2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKTsKLQlpbnQJCSgqdmVyaWZ5X2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKTsKKwl2b2lkCQkoKndyaXRlX2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7CisJdm9pZAkJKCpyZWFkX2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7CisJaW50CQkoKnZlcmlmeV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pOwogCXZvaWQJCSgqc2VsZWN0X2NoaXApKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCk7CiAJaW50CQkoKmJsb2NrX2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKTsKIAlpbnQJCSgqYmxvY2tfbWFya2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOwotCXZvaWQgCQkoKmh3Y29udHJvbCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpOwotCWludCAgCQkoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCXZvaWQgCQkoKmNtZGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKTsKLQlpbnQgCQkoKndhaXRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlKTsKLQlpbnQJCSgqY2FsY3VsYXRlX2VjYykoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKTsKLQlpbnQgCQkoKmNvcnJlY3RfZGF0YSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LCB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKTsKLQl2b2lkCQkoKmVuYWJsZV9od2VjYykoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKTsKKwl2b2lkCQkoKmNtZF9jdHJsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGRhdCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGN0cmwpOworCWludAkJKCpkZXZfcmVhZHkpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKwl2b2lkCQkoKmNtZGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKTsKKwlpbnQJCSgqd2FpdGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzKTsKIAl2b2lkCQkoKmVyYXNlX2NtZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKTsKIAlpbnQJCSgqc2Nhbl9iYnQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQlpbnQJCWVjY21vZGU7Ci0JaW50CQllY2NzaXplOwotCWludAkJZWNjYnl0ZXM7Ci0JaW50CQllY2NzdGVwczsKLQlpbnQgCQljaGlwX2RlbGF5OwotCXNwaW5sb2NrX3QJY2hpcF9sb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IHdxOwotCW5hbmRfc3RhdGVfdCAJc3RhdGU7Ci0JaW50IAkJcGFnZV9zaGlmdDsKKwlpbnQJCSgqZXJyc3RhdCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSwgaW50IHN0YXR1cywgaW50IHBhZ2UpOworCisJaW50CQljaGlwX2RlbGF5OworCXVuc2lnbmVkIGludAlvcHRpb25zOworCisJaW50CQlwYWdlX3NoaWZ0OwogCWludAkJcGh5c19lcmFzZV9zaGlmdDsKIAlpbnQJCWJidF9lcmFzZV9zaGlmdDsKIAlpbnQJCWNoaXBfc2hpZnQ7Ci0JdV9jaGFyIAkJKmRhdGFfYnVmOwotCXVfY2hhcgkJKm9vYl9idWY7Ci0JaW50CQlvb2JkaXJ0eTsKLQl1X2NoYXIJCSpkYXRhX3BvaTsKLQl1bnNpZ25lZCBpbnQJb3B0aW9uczsKLQlpbnQJCWJhZGJsb2NrcG9zOwogCWludAkJbnVtY2hpcHM7CiAJdW5zaWduZWQgbG9uZwljaGlwc2l6ZTsKIAlpbnQJCXBhZ2VtYXNrOwogCWludAkJcGFnZWJ1ZjsKLQlzdHJ1Y3QgbmFuZF9vb2JpbmZvCSphdXRvb29iOworCWludAkJYmFkYmxvY2twb3M7CisKKwluYW5kX3N0YXRlX3QJc3RhdGU7CisKKwl1aW50OF90CQkqb29iX3BvaTsKKwlzdHJ1Y3QgbmFuZF9od19jb250cm9sICAqY29udHJvbGxlcjsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmVjY2xheW91dDsKKworCXN0cnVjdCBuYW5kX2VjY19jdHJsIGVjYzsKKwlzdHJ1Y3QgbmFuZF9idWZmZXJzIGJ1ZmZlcnM7CisJc3RydWN0IG5hbmRfaHdfY29udHJvbCBod2NvbnRyb2w7CisKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCiAJdWludDhfdAkJKmJidDsKIAlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJidF90ZDsKIAlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJidF9tZDsKKwogCXN0cnVjdCBuYW5kX2JidF9kZXNjcgkqYmFkYmxvY2tfcGF0dGVybjsKLQlzdHJ1Y3QgbmFuZF9od19jb250cm9sICAqY29udHJvbGxlcjsKKwogCXZvaWQJCSpwcml2OwotCWludAkJKCplcnJzdGF0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgcGFnZSk7CiB9OwogCiAvKgpAQCAtMzg4LDE5ICszOTYsMTkgQEAKICNkZWZpbmUgTkFORF9NRlJfTkFUSU9OQUwJMHg4ZgogI2RlZmluZSBOQU5EX01GUl9SRU5FU0FTCTB4MDcKICNkZWZpbmUgTkFORF9NRlJfU1RNSUNSTwkweDIwCi0jZGVmaW5lIE5BTkRfTUZSX0hZTklYICAgICAgICAgIDB4YWQKKyNkZWZpbmUgTkFORF9NRlJfSFlOSVgJCTB4YWQKIAogLyoqCiAgKiBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgLSBOQU5EIEZsYXNoIERldmljZSBJRCBTdHJ1Y3R1cmUKICAqCi0gKiBAbmFtZTogIAlJZGVudGlmeSB0aGUgZGV2aWNlIHR5cGUKLSAqIEBpZDogICAJZGV2aWNlIElEIGNvZGUKLSAqIEBwYWdlc2l6ZTogIAlQYWdlc2l6ZSBpbiBieXRlcy4gRWl0aGVyIDI1NiBvciA1MTIgb3IgMAorICogQG5hbWU6CUlkZW50aWZ5IHRoZSBkZXZpY2UgdHlwZQorICogQGlkOgkJZGV2aWNlIElEIGNvZGUKKyAqIEBwYWdlc2l6ZToJUGFnZXNpemUgaW4gYnl0ZXMuIEVpdGhlciAyNTYgb3IgNTEyIG9yIDAKICAqCQlJZiB0aGUgcGFnZXNpemUgaXMgMCwgdGhlbiB0aGUgcmVhbCBwYWdlc2l6ZQogICoJCWFuZCB0aGUgZXJhc2VpemUgYXJlIGRldGVybWluZWQgZnJvbSB0aGUKICAqCQlleHRlbmRlZCBpZCBieXRlcyBpbiB0aGUgY2hpcAotICogQGVyYXNlc2l6ZTogCVNpemUgb2YgYW4gZXJhc2UgYmxvY2sgaW4gdGhlIGZsYXNoIGRldmljZS4KLSAqIEBjaGlwc2l6ZTogIAlUb3RhbCBjaGlwc2l6ZSBpbiBNZWdhIEJ5dGVzCisgKiBAZXJhc2VzaXplOglTaXplIG9mIGFuIGVyYXNlIGJsb2NrIGluIHRoZSBmbGFzaCBkZXZpY2UuCisgKiBAY2hpcHNpemU6CVRvdGFsIGNoaXBzaXplIGluIE1lZ2EgQnl0ZXMKICAqIEBvcHRpb25zOglCaXRmaWVsZCB0byBzdG9yZSBjaGlwIHJlbGV2YW50IG9wdGlvbnMKICAqLwogc3RydWN0IG5hbmRfZmxhc2hfZGV2IHsKQEAgLTQxNSw3ICs0MjMsNyBAQAogLyoqCiAgKiBzdHJ1Y3QgbmFuZF9tYW51ZmFjdHVyZXJzIC0gTkFORCBGbGFzaCBNYW51ZmFjdHVyZXIgSUQgU3RydWN0dXJlCiAgKiBAbmFtZToJTWFudWZhY3R1cmVyIG5hbWUKLSAqIEBpZDogCW1hbnVmYWN0dXJlciBJRCBjb2RlIG9mIGRldmljZS4KKyAqIEBpZDoJCW1hbnVmYWN0dXJlciBJRCBjb2RlIG9mIGRldmljZS4KICovCiBzdHJ1Y3QgbmFuZF9tYW51ZmFjdHVyZXJzIHsKIAlpbnQgaWQ7CkBAIC00NTUsNyArNDYzLDcgQEAKIAlpbnQJdmVyb2ZmczsKIAl1aW50OF90CXZlcnNpb25bTkFORF9NQVhfQ0hJUFNdOwogCWludAlsZW47Ci0JaW50IAltYXhibG9ja3M7CisJaW50CW1heGJsb2NrczsKIAlpbnQJcmVzZXJ2ZWRfYmxvY2tfY29kZTsKIAl1aW50OF90CSpwYXR0ZXJuOwogfTsKQEAgLTQ5NCwxNCArNTAyLDE0IEBACiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHRvIHNjYW4gZm9yIGEgYmJ0ICovCiAjZGVmaW5lIE5BTkRfQkJUX1NDQU5fTUFYQkxPQ0tTCTQKIAotZXh0ZXJuIGludCBuYW5kX3NjYW5fYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCk7Ci1leHRlcm4gaW50IG5hbmRfdXBkYXRlX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKTsKLWV4dGVybiBpbnQgbmFuZF9kZWZhdWx0X2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotZXh0ZXJuIGludCBuYW5kX2lzYmFkX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBpbnQgYWxsb3diYnQpOwotZXh0ZXJuIGludCBuYW5kX2VyYXNlX25hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsIGludCBhbGxvd2JidCk7Ci1leHRlcm4gaW50IG5hbmRfZG9fcmVhZF9lY2MgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYsIHVfY2hhciAqIG9vYl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgbmFuZF9zY2FuX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCk7CitleHRlcm4gaW50IG5hbmRfdXBkYXRlX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMpOworZXh0ZXJuIGludCBuYW5kX2RlZmF1bHRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKK2V4dGVybiBpbnQgbmFuZF9pc2JhZF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBpbnQgYWxsb3diYnQpOworZXh0ZXJuIGludCBuYW5kX2VyYXNlX25hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciwKKwkJCSAgIGludCBhbGxvd2JidCk7CitleHRlcm4gaW50IG5hbmRfZG9fcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCQlzaXplX3QgKiByZXRsZW4sIHVpbnQ4X3QgKiBidWYpOwogCiAvKgogKiBDb25zdGFudHMgZm9yIG9vYiBjb25maWd1cmF0aW9uCkBAIC01MDksNCArNTE3LDUzIEBACiAjZGVmaW5lIE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TCQk1CiAjZGVmaW5lIE5BTkRfTEFSR0VfQkFEQkxPQ0tfUE9TCQkwCiAKKy8qKgorICogc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcCAtIGNoaXAgbGV2ZWwgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIEBucl9jaGlwczoJCW1heC4gbnVtYmVyIG9mIGNoaXBzIHRvIHNjYW4gZm9yCisgKiBAY2hpcF9vZmZzOgkJY2hpcCBudW1iZXIgb2Zmc2V0CisgKiBAbnJfcGFydGl0aW9uczoJbnVtYmVyIG9mIHBhcnRpdGlvbnMgcG9pbnRlZCB0byBieSBwYXJ0aXRpb25zIChvciB6ZXJvKQorICogQHBhcnRpdGlvbnM6CQltdGQgcGFydGl0aW9uIGxpc3QKKyAqIEBjaGlwX2RlbGF5OgkJUi9CIGRlbGF5IHZhbHVlIGluIHVzCisgKiBAb3B0aW9uczoJCU9wdGlvbiBmbGFncywgZS5nLiAxNmJpdCBidXN3aWR0aAorICogQGVjY2xheW91dDoJCWVjYyBsYXlvdXQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwcml2OgkJaGFyZHdhcmUgY29udHJvbGxlciBzcGVjaWZpYyBzZXR0aW5ncworICovCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwIHsKKwlpbnQJCQlucl9jaGlwczsKKwlpbnQJCQljaGlwX29mZnNldDsKKwlpbnQJCQlucl9wYXJ0aXRpb25zOworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0aXRpb25zOworCXN0cnVjdCBuYW5kX2VjY2xheW91dAkqZWNjbGF5b3V0OworCWludAkJCWNoaXBfZGVsYXk7CisJdW5zaWduZWQgaW50CQlvcHRpb25zOworCXZvaWQJCQkqcHJpdjsKK307CisKKy8qKgorICogc3RydWN0IHBsYXRmb3JtX25hbmRfY3RybCAtIGNvbnRyb2xsZXIgbGV2ZWwgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIEBod2NvbnRyb2w6CQlwbGF0Zm9ybSBzcGVjaWZpYyBoYXJkd2FyZSBjb250cm9sIHN0cnVjdHVyZQorICogQGRldl9yZWFkeToJCXBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uIHRvIHJlYWQgcmVhZHkvYnVzeSBwaW4KKyAqIEBzZWxlY3RfY2hpcDoJcGxhdGZvcm0gc3BlY2lmaWMgY2hpcCBzZWxlY3QgZnVuY3Rpb24KKyAqIEBwcml2X2RhdGE6CQlwcml2YXRlIGRhdGEgdG8gdHJhbnNwb3J0IGRyaXZlciBzcGVjaWZpYyBzZXR0aW5ncworICoKKyAqIEFsbCBmaWVsZHMgYXJlIG9wdGlvbmFsIGFuZCBkZXBlbmQgb24gdGhlIGhhcmR3YXJlIGRyaXZlciByZXF1aXJlbWVudHMKKyAqLworc3RydWN0IHBsYXRmb3JtX25hbmRfY3RybCB7CisJdm9pZAkJKCpod2NvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKTsKKwlpbnQJCSgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZAkJKCpzZWxlY3RfY2hpcCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKKwl2b2lkCQkqcHJpdjsKK307CisKKy8qIFNvbWUgaGVscGVycyB0byBhY2Nlc3MgdGhlIGRhdGEgc3RydWN0dXJlcyAqLworc3RhdGljIGlubGluZQorc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcCAqZ2V0X3BsYXRmb3JtX25hbmRjaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlyZXR1cm4gY2hpcC0+cHJpdjsKK30KKwogI2VuZGlmIC8qIF9fTElOVVhfTVREX05BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTU4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uZGZjLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2xpbnV4L210ZC9uZGZjLmgKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEluZm86CisgKiAgIENvbnRhaW5zIGRlZmluZXMsIGRhdGFzdHJ1Y3R1cmVzIGZvciBuZGZjIG5hbmQgY29udHJvbGxlcgorICoKKyAqLworI2lmbmRlZiBfX0xJTlVYX01URF9OREZDX0gKKyNkZWZpbmUgX19MSU5VWF9NVERfTkRGQ19ICisKKy8qIE5ERkMgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTkRGQ19DTUQJCTB4MDAKKyNkZWZpbmUgTkRGQ19BTEUJCTB4MDQKKyNkZWZpbmUgTkRGQ19EQVRBCQkweDA4CisjZGVmaW5lIE5ERkNfRUNDCQkweDEwCisjZGVmaW5lIE5ERkNfQkNGRzAJCTB4MzAKKyNkZWZpbmUgTkRGQ19CQ0ZHMQkJMHgzNAorI2RlZmluZSBOREZDX0JDRkcyCQkweDM4CisjZGVmaW5lIE5ERkNfQkNGRzMJCTB4M2MKKyNkZWZpbmUgTkRGQ19DQ1IJCTB4NDAKKyNkZWZpbmUgTkRGQ19TVEFUCQkweDQ0CisjZGVmaW5lIE5ERkNfSFdDVEwJCTB4NDgKKyNkZWZpbmUgTkRGQ19SRVZJRAkJMHg1MAorCisjZGVmaW5lIE5ERkNfU1RBVF9JU19SRUFEWQkweDAxMDAwMDAwCisKKyNkZWZpbmUgTkRGQ19DQ1JfUkVTRVRfQ0UJMHg4MDAwMDAwMCAvKiBDRSBSZXNldCAqLworI2RlZmluZSBOREZDX0NDUl9SRVNFVF9FQ0MJMHg0MDAwMDAwMCAvKiBFQ0MgUmVzZXQgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUklFCQkweDIwMDAwMDAwIC8qIEludGVycnVwdCBFbmFibGUgb24gRGV2aWNlIFJkeSAqLworI2RlZmluZSBOREZDX0NDUl9SRU4JCTB4MTAwMDAwMDAgLyogRW5hYmxlIHdhaXQgZm9yIFJkeSBpbiBMaW5lYXJSICovCisjZGVmaW5lIE5ERkNfQ0NSX1JPTUVOCQkweDA4MDAwMDAwIC8qIEVuYWJsZSBST00gSW4gTGluZWFyUiAqLworI2RlZmluZSBOREZDX0NDUl9BUkUJCTB4MDQwMDAwMDAgLyogQXV0by1SZWFkIEVuYWJsZSAqLworI2RlZmluZSBOREZDX0NDUl9CUyh4KQkJKCgoeCkgJiAweDMpIDw8IDI0KSAvKiBTZWxlY3QgQmFuayBvbiBDRVt4XSAqLworI2RlZmluZSBOREZDX0NDUl9CU19NQVNLCTB4MDMwMDAwMDAgLyogU2VsZWN0IEJhbmsgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJBQzAJCTB4MDAwMDAwMDAgLyogMyBBZGRyLCAxIENvbCAyIFJvdyA1MTJiIHBhZ2UgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJBQzEJCTB4MDAwMDEwMDAgLyogNCBBZGRyLCAxIENvbCAzIFJvdyA1MTJiIHBhZ2UgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJBQzIJCTB4MDAwMDIwMDAgLyogNCBBZGRyLCAyIENvbCAyIFJvdyAySyBwYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMzCQkweDAwMDAzMDAwIC8qIDUgQWRkciwgMiBDb2wgMyBSb3cgMksgcGFnZSAqLworI2RlZmluZSBOREZDX0NDUl9BUkFDX01BU0sJMHgwMDAwMzAwMCAvKiBBdXRvLVJlYWQgbW9kZSBBZGRyIEN5Y2xlcyAqLworI2RlZmluZSBOREZDX0NDUl9SUEcJCTB4MDAwMEMwMDAgLyogQXV0by1SZWFkIFBhZ2UgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfRUJDQwkJMHgwMDAwMDAwNCAvKiBFQkMgQ29uZmlndXJhdGlvbiBDb21wbGV0ZWQgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfREhDCQkweDAwMDAwMDAyIC8qIERpcmVjdCBIYXJkd2FyZSBDb250cm9sIEVuYWJsZSAqLworCisjZGVmaW5lIE5ERkNfQnhDRkdfRU4JCTB4ODAwMDAwMDAgLyogQmFuayBFbmFibGUgKi8KKyNkZWZpbmUgTkRGQ19CeENGR19DRUQJCTB4NDAwMDAwMDAgLyogbkNFIFN0eWxlICovCisjZGVmaW5lIE5ERkNfQnhDRkdfU1pfTUFTSwkweDA4MDAwMDAwIC8qIEJhbmsgU2l6ZSAqLworI2RlZmluZSBOREZDX0J4Q0ZHX1NaXzhCSVQJMHgwMDAwMDAwMCAvKiA4Yml0ICovCisjZGVmaW5lIE5ERkNfQnhDRkdfU1pfMTZCSVQJMHgwODAwMDAwMCAvKiAxNmJpdCAqLworCisjZGVmaW5lIE5ERkNfTUFYX0JBTktTCQk0CisKK3N0cnVjdCBuZGZjX2NvbnRyb2xsZXJfc2V0dGluZ3MgeworCXVpbnQzMl90CWNjcl9zZXR0aW5nczsKKwl1aW50NjRfdAluZGZjX2VycG47Cit9OworCitzdHJ1Y3QgbmRmY19jaGlwX3NldHRpbmdzIHsKKwl1aW50MzJfdAliYW5rX3NldHRpbmdzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmgKaW5kZXggZDM1ZDJjMi4uYmNmMmZiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25mdGwuaApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOwkJLyogbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyAqLwogICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYm9vdF9ibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGUgYmlvcyAqLwogICAgICAgICBzdHJ1Y3QgZXJhc2VfaW5mbyBpbnN0cjsKLQlzdHJ1Y3QgbmFuZF9vb2JpbmZvIG9vYmluZm87CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9vYmluZm87CiB9OwogCiBpbnQgTkZUTF9tb3VudChzdHJ1Y3QgTkZUTHJlY29yZCAqcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKaW5kZXggNzQxOWI1Zi4uOWNlOWE0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaApAQCAtMzUsNiArMzUsOCBAQAogCUZMX1NZTkNJTkcsCiAJRkxfVU5MT0NLSU5HLAogCUZMX0xPQ0tJTkcsCisJRkxfUkVTRVRJTkcsCisJRkxfT1RQSU5HLAogCUZMX1BNX1NVU1BFTkRFRCwKIH0gb25lbmFuZF9zdGF0ZV90OwogCkBAIC03NSw3ICs3Nyw3IEBACiAgKiBAcGFyYW0gY2hpcF9sb2NrCVtJTlRFUk5dIHNwaW5sb2NrIHVzZWQgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3R1cmUgYW5kIHRoZSBjaGlwCiAgKiBAcGFyYW0gd3EJCVtJTlRFUk5dIHdhaXQgcXVldWUgdG8gc2xlZXAgb24gaWYgYSBPbmVOQU5EIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcwogICogQHBhcmFtIHN0YXRlCQlbSU5URVJOXSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgT25lTkFORCBkZXZpY2UKLSAqIEBwYXJhbSBhdXRvb29iCVtSRVBMQUNFQUJMRV0gdGhlIGRlZmF1bHQgKGF1dG8pcGxhY2VtZW50IHNjaGVtZQorICogQHBhcmFtIGVjY2xheW91dAlbUkVQTEFDRUFCTEVdIHRoZSBkZWZhdWx0IGVjYyBwbGFjZW1lbnQgc2NoZW1lCiAgKiBAcGFyYW0gYmJtCQlbUkVQTEFDRUFCTEVdIHBvaW50ZXIgdG8gQmFkIEJsb2NrIE1hbmFnZW1lbnQKICAqIEBwYXJhbSBwcml2CQlbT1BUSU9OQUxdIHBvaW50ZXIgdG8gcHJpdmF0ZSBjaGlwIGRhdGUKICAqLwpAQCAtMTExLDkgKzExMyw5IEBACiAJb25lbmFuZF9zdGF0ZV90CQlzdGF0ZTsKIAl1bnNpZ25lZCBjaGFyCQkqcGFnZV9idWY7CiAKLQlzdHJ1Y3QgbmFuZF9vb2JpbmZvCSphdXRvb29iOworCXN0cnVjdCBuYW5kX2VjY2xheW91dAkqZWNjbGF5b3V0OwogCi0Jdm9pZCAJCQkqYmJtOworCXZvaWQJCQkqYmJtOwogCiAJdm9pZAkJCSpwcml2OwogfTsKQEAgLTEzMCw2ICsxMzIsOSBAQAogI2RlZmluZSBPTkVOQU5EX1NFVF9TWVNfQ0ZHMSh2LCB0aGlzKQkJCQkJXAogCSh0aGlzLT53cml0ZV93b3JkKHYsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TWVNfQ0ZHMSkpCiAKKy8qIENoZWNrIGJ5dGUgYWNjZXNzIGluIE9uZU5BTkQgKi8KKyNkZWZpbmUgT05FTkFORF9DSEVDS19CWVRFX0FDQ0VTUyhhZGRyKQkJKGFkZHIgJiAweDEpCisKIC8qCiAgKiBPcHRpb25zIGJpdHMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAppbmRleCBkNzgzMmVmLi40YTcyODE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaApAQCAtMTEyLDYgKzExMiw3IEBACiAjZGVmaW5lIE9ORU5BTkRfQ01EX0xPQ0tfVElHSFQJCSgweDJDKQogI2RlZmluZSBPTkVOQU5EX0NNRF9FUkFTRQkJKDB4OTQpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1JFU0VUCQkoMHhGMCkKKyNkZWZpbmUgT05FTkFORF9DTURfT1RQX0FDQ0VTUwkJKDB4NjUpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1JFQURJRAkJKDB4OTApCiAKIC8qIE5PVEU6IFRob3NlIGFyZSBub3QgKlJFQUwqIGNvbW1hbmRzICovCkBAIC0xNTIsNiArMTUzLDggQEAKICNkZWZpbmUgT05FTkFORF9DVFJMX0VSQVNFCQkoMSA8PCAxMSkKICNkZWZpbmUgT05FTkFORF9DVFJMX0VSUk9SCQkoMSA8PCAxMCkKICNkZWZpbmUgT05FTkFORF9DVFJMX1JTVEIJCSgxIDw8IDcpCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9PVFBfTAkJKDEgPDwgNikKKyNkZWZpbmUgT05FTkFORF9DVFJMX09UUF9CTAkJKDEgPDwgNSkKIAogLyoKICAqIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgRjI0MWggKFIpCkBAIC0xNzcsNCArMTgwLDkgQEAKICNkZWZpbmUgT05FTkFORF9FQ0NfMkJJVAkJKDEgPDwgMSkKICNkZWZpbmUgT05FTkFORF9FQ0NfMkJJVF9BTEwJCSgweEFBQUEpCiAKKy8qCisgKiBPbmUtVGltZSBQcm9ncmFtbWFibGUgKE9UUCkKKyAqLworI2RlZmluZSBPTkVOQU5EX09UUF9MT0NLX09GRlNFVAkJKDE0KQorCiAjZW5kaWYJLyogX19PTkVOQU5EX1JFR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmggYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKaW5kZXggYjAzZjUxMi4uZGE2YjNkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaApAQCAtNDEsNyArNDEsNyBAQAogCXVfaW50MzJfdCBzaXplOwkJCS8qIHBhcnRpdGlvbiBzaXplICovCiAJdV9pbnQzMl90IG9mZnNldDsJCS8qIG9mZnNldCB3aXRoaW4gdGhlIG1hc3RlciBNVEQgc3BhY2UgKi8KIAl1X2ludDMyX3QgbWFza19mbGFnczsJCS8qIG1hc3RlciBNVEQgZmxhZ3MgdG8gbWFzayBvdXQgZm9yIHRoaXMgcGFydGl0aW9uICovCi0Jc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsOwkvKiBvdXQgb2YgYmFuZCBsYXlvdXQgZm9yIHRoaXMgcGFydGl0aW9uIChOQU5EIG9ubHkpKi8KKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsJLyogb3V0IG9mIGJhbmQgbGF5b3V0IGZvciB0aGlzIHBhcnRpdGlvbiAoTkFORCBvbmx5KSovCiAJc3RydWN0IG10ZF9pbmZvICoqbXRkcDsJCS8qIHBvaW50ZXIgdG8gc3RvcmUgdGhlIE1URCBvYmplY3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaAppbmRleCBjN2I4YmNkLi44NjgzMWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oCkBAIC0xNSwzMyArMTUsMjYgQEAKICAqLwogCiAjaWZuZGVmIF9fTElOVVhfTVREX1BIWVNNQVBfXwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkKKyNkZWZpbmUgX19MSU5VWF9NVERfUEhZU01BUF9fCiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLS8qCi0gKiBUaGUgbWFwX2luZm8gZm9yIHBoeXNtYXAuICBCb2FyZCBjYW4gb3ZlcnJpZGUgc2l6ZSwgYnVzd2lkdGgsIHBoeXMsCi0gKiAoKnNldF92cHApKCksIGV0YyBpbiB0aGVpciBpbml0aWFsIHNldHVwIHJvdXRpbmUuCi0gKi8KLWV4dGVybiBzdHJ1Y3QgbWFwX2luZm8gcGh5c21hcF9tYXA7CitzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHsKKwl1bnNpZ25lZCBpbnQJCXdpZHRoOworCXZvaWQJCQkoKnNldF92cHApKHN0cnVjdCBtYXBfaW5mbyAqLCBpbnQpOworCXVuc2lnbmVkIGludAkJbnJfcGFydHM7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOworfTsKIAogLyoKICAqIEJvYXJkIG5lZWRzIHRvIHNwZWNpZnkgdGhlIGV4YWN0IG1hcHBpbmcgZHVyaW5nIHRoZWlyIHNldHVwIHRpbWUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwaHlzbWFwX2NvbmZpZ3VyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGJhbmt3aWR0aCwgdm9pZCAoKnNldF92cHApKHN0cnVjdCBtYXBfaW5mbyAqLCBpbnQpICkKLXsKLQlwaHlzbWFwX21hcC5waHlzID0gYWRkcjsKLQlwaHlzbWFwX21hcC5zaXplID0gc2l6ZTsKLQlwaHlzbWFwX21hcC5iYW5rd2lkdGggPSBiYW5rd2lkdGg7Ci0JcGh5c21hcF9tYXAuc2V0X3ZwcCA9IHNldF92cHA7Ci19Cit2b2lkIHBoeXNtYXBfY29uZmlndXJlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQlpbnQgYmFua3dpZHRoLCB2b2lkICgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCkgKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX01URF9QQVJUSVRJT05TKQorI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCiAvKgogICogTWFjaGluZXMgdGhhdCB3aXNoIHRvIGRvIGZsYXNoIHBhcnRpdGlvbiBtYXkgd2FudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4KQEAgLTU1LDcgKzQ4LDUgQEAKIHZvaWQgcGh5c21hcF9zZXRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsIGludCBudW1fcGFydHMpOwogCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTVREX1BBUlRJVElPTlMpICovCi0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTVREKSAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9NVERfUEhZU01BUF9fICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oIGIvaW5jbHVkZS9saW51eC9tdGQveGlwLmgKaW5kZXggMjIwZDUwYi4uZTlkNDBiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQveGlwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQveGlwLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX19MSU5VWF9NVERfWElQX0hfXwogI2RlZmluZSBfX0xJTlVYX01URF9YSVBfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19NVERfWElQCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmJkLmggYi9pbmNsdWRlL2xpbnV4L25iZC5oCmluZGV4IGE2Y2U0MDkuLjFkN2NkZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9uYmQuaApAQCAtNzcsMTEgKzc3LDExIEBACiAgKiBzZXJ2ZXIuIEFsbCBkYXRhIGFyZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCiAgKi8KIHN0cnVjdCBuYmRfcmVxdWVzdCB7Ci0JdTMyIG1hZ2ljOwotCXUzMiB0eXBlOwkvKiA9PSBSRUFEIHx8ID09IFdSSVRFIAkqLworCV9fdTMyIG1hZ2ljOworCV9fdTMyIHR5cGU7CS8qID09IFJFQUQgfHwgPT0gV1JJVEUgCSovCiAJY2hhciBoYW5kbGVbOF07Ci0JdTY0IGZyb207Ci0JdTMyIGxlbjsKKwlfX3U2NCBmcm9tOworCV9fdTMyIGxlbjsKIH0KICNpZmRlZiBfX0dOVUNfXwogCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQpAQCAtOTMsOCArOTMsOCBAQAogICogaXQgaGFzIGNvbXBsZXRlZCBhbiBJL08gcmVxdWVzdCAob3IgYW4gZXJyb3Igb2NjdXJzKS4KICAqLwogc3RydWN0IG5iZF9yZXBseSB7Ci0JdTMyIG1hZ2ljOwotCXUzMiBlcnJvcjsJCS8qIDAgPSBvaywgZWxzZSBlcnJvcgkqLworCV9fdTMyIG1hZ2ljOworCV9fdTMyIGVycm9yOwkJLyogMCA9IG9rLCBlbHNlIGVycm9yCSovCiAJY2hhciBoYW5kbGVbOF07CQkvKiBoYW5kbGUgeW91IGdvdCBmcm9tIHJlcXVlc3QJKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmNwX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCmluZGV4IDk2ZGMyMzcuLmIyMDhmMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaApAQCAtMTIsOCArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L25jcF9mc19pLmg+Ci0jaW5jbHVkZSA8bGludXgvbmNwX2ZzX3NiLmg+CiAjaW5jbHVkZSA8bGludXgvaXB4Lmg+CiAjaW5jbHVkZSA8bGludXgvbmNwX25vLmg+CiAKQEAgLTE0Niw3ICsxNDQsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbmNwX2ZzX2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uY3BfZnNfc2IuaD4KIAogLyogdW5kZWYgYmVjYXVzZSBwdWJsaWMgZGVmaW5lIGluIHVtc2Rvc19mcy5oIChuY3BfZnMuaCBpc24ndCBwdWJsaWMpICovCiAjdW5kZWYgUFJJTlRLCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA4NGE0OTBlLi4zODVlNjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTE4LDkgKzE4LDcgQEAKICNpZm5kZWYgX0xJTlVYX05FVF9ICiAjZGVmaW5lIF9MSU5VWF9ORVRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4KIAogc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwpAQCAtNTcsNiArNTUsNyBAQAogI2RlZmluZSBfX1NPX0FDQ0VQVENPTgkoMSA8PCAxNikJLyogcGVyZm9ybWVkIGEgbGlzdGVuCQkqLwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogCiAjZGVmaW5lIFNPQ0tfQVNZTkNfTk9TUEFDRQkwCiAjZGVmaW5lIFNPQ0tfQVNZTkNfV0FJVERBVEEJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggZjQxNjliYi4uNWU4ZTJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAKIHN0cnVjdCBkaXZlcnRfYmxrOwogc3RydWN0IHZsYW5fZ3JvdXA7CkBAIC0zMTEsNiArMzExLDkgQEAKICNkZWZpbmUgTkVUSUZfRl9MTFRYCQk0MDk2CS8qIExvY2tMZXNzIFRYICovCiAjZGVmaW5lIE5FVElGX0ZfVUZPICAgICAgICAgICAgIDgxOTIgICAgLyogQ2FuIG9mZmxvYWQgVURQIExhcmdlIFNlbmQqLwogCisjZGVmaW5lIE5FVElGX0ZfR0VOX0NTVU0JKE5FVElGX0ZfTk9fQ1NVTSB8IE5FVElGX0ZfSFdfQ1NVTSkKKyNkZWZpbmUgTkVUSUZfRl9BTExfQ1NVTQkoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9HRU5fQ1NVTSkKKwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXh0X3NjaGVkOwogCiAJLyogSW50ZXJmYWNlIGluZGV4LiBVbmlxdWUgZGV2aWNlIGlkZW50aWZpZXIJKi8KQEAgLTQwNiw3ICs0MDksNyBAQAogICogT25lIHBhcnQgaXMgbW9zdGx5IHVzZWQgb24geG1pdCBwYXRoIChkZXZpY2UpCiAgKi8KIAkvKiBoYXJkX3N0YXJ0X3htaXQgc3luY2hyb25pemVyICovCi0Jc3BpbmxvY2tfdAkJeG1pdF9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJc3BpbmxvY2tfdAkJX3htaXRfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCS8qIGNwdSBpZCBvZiBwcm9jZXNzb3IgZW50ZXJlZCB0byBoYXJkX3N0YXJ0X3htaXQgb3IgLTEsCiAJICAgaWYgbm9ib2R5IGVudGVyZWQgdGhlcmUuCiAJICovCkBAIC01OTMsNiArNTk2LDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZgkJKmNvbXBsZXRpb25fcXVldWU7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZQliYWNrbG9nX2RldjsJLyogU29ycnkuIDgpICovCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwlzdHJ1Y3QgZG1hX2NoYW4JCSpuZXRfZG1hOworI2VuZGlmCiB9OwogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHNvZnRuZXRfZGF0YSxzb2Z0bmV0X2RhdGEpOwpAQCAtODg5LDExICs4OTUsNDMgQEAKIAljbGVhcl9iaXQoX19MSU5LX1NUQVRFX1JYX1NDSEVELCAmZGV2LT5zdGF0ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF9sb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrKCZkZXYtPl94bWl0X2xvY2spOworCWRldi0+eG1pdF9sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfdHhfbG9ja19iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNwaW5fbG9ja19iaCgmZGV2LT5feG1pdF9sb2NrKTsKKwlkZXYtPnhtaXRfbG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV0aWZfdHhfdHJ5bG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBlcnIgPSBzcGluX3RyeWxvY2soJmRldi0+X3htaXRfbG9jayk7CisJaWYgKCFlcnIpCisJCWRldi0+eG1pdF9sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl90eF91bmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkZXYtPnhtaXRfbG9ja19vd25lciA9IC0xOworCXNwaW5fdW5sb2NrKCZkZXYtPl94bWl0X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfdHhfdW5sb2NrX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT54bWl0X2xvY2tfb3duZXIgPSAtMTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5feG1pdF9sb2NrKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3R4X2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiB9CiAKIC8qIFRoZXNlIGZ1bmN0aW9ucyBsaXZlIGVsc2V3aGVyZSAoZHJpdmVycy9uZXQvbmV0X2luaXQuYywgYnV0IHJlbGF0ZWQpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAppbmRleCBiMzFhOWJjLi4xMDE2OGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKQEAgLTQwLDcgKzQwLDYgQEAKICNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAogZXh0ZXJuIHZvaWQgbmV0ZmlsdGVyX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKaW5kZXggM2ZmODhjOC4uZDJlNGJkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaApAQCAtNjksNiArNjksMTAgQEAKIAkvKiBDb25uZWN0aW9uIGlzIGR5aW5nIChyZW1vdmVkIGZyb20gbGlzdHMpLCBjYW4gbm90IGJlIHVuc2V0LiAqLwogCUlQU19EWUlOR19CSVQgPSA5LAogCUlQU19EWUlORyA9ICgxIDw8IElQU19EWUlOR19CSVQpLAorCisJLyogQ29ubmVjdGlvbiBoYXMgZml4ZWQgdGltZW91dC4gKi8KKwlJUFNfRklYRURfVElNRU9VVF9CSVQgPSAxMCwKKwlJUFNfRklYRURfVElNRU9VVCA9ICgxIDw8IElQU19GSVhFRF9USU1FT1VUX0JJVCksCiB9OwogCiAvKiBDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50IGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaAppbmRleCA2NjhlYzk0Li5iNTg4M2NjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCkBAIC0yNywxMyArMjcsMTUgQEAKIAlDVEFfU1RBVFVTLAogCUNUQV9QUk9UT0lORk8sCiAJQ1RBX0hFTFAsCi0JQ1RBX05BVCwKKwlDVEFfTkFUX1NSQywKKyNkZWZpbmUgQ1RBX05BVAlDVEFfTkFUX1NSQwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwogCUNUQV9USU1FT1VULAogCUNUQV9NQVJLLAogCUNUQV9DT1VOVEVSU19PUklHLAogCUNUQV9DT1VOVEVSU19SRVBMWSwKIAlDVEFfVVNFLAogCUNUQV9JRCwKKwlDVEFfTkFUX0RTVCwKIAlfX0NUQV9NQVgKIH07CiAjZGVmaW5lIENUQV9NQVggKF9fQ1RBX01BWCAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmJkNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKKworZW51bSB7CisJQ09OTlNFQ01BUktfU0FWRSA9IDEsCisJQ09OTlNFQ01BUktfUkVTVE9SRSwKK307CisKK3N0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyB7CisJdV9pbnQ4X3QgbW9kZTsKK307CisKKyNlbmRpZiAvKl9YVF9DT05OU0VDTUFSS19IX3RhcmdldCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2ZiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfWFRfU0VDTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfU0VDTUFSS19IX3RhcmdldAorCisvKgorICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHZhcmlvdXMgc2VjdXJpdHkgc3Vic3lzdGVtcyAoYnV0IG5vdAorICogYXQgdGhlIHNhbWUgdGltZSkuCisgKgorICogJ21vZGUnIHJlZmVycyB0byB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgc3Vic3lzdGVtIHdoaWNoIHRoZQorICogcGFja2V0cyBhcmUgYmVpbmcgbWFya2VkIGZvci4KKyAqLworI2RlZmluZSBTRUNNQVJLX01PREVfU0VMCTB4MDEJCS8qIFNFTGludXggKi8KKyNkZWZpbmUgU0VDTUFSS19TRUxDVFhfTUFYCTI1NgorCitzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfc2VsaW51eF9pbmZvIHsKKwl1X2ludDMyX3Qgc2Vsc2lkOworCWNoYXIgc2VsY3R4W1NFQ01BUktfU0VMQ1RYX01BWF07Cit9OworCitzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyB7CisJdV9pbnQ4X3QgbW9kZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gc2VsOworCX0gdTsKK307CisKKyNlbmRpZiAvKl9YVF9TRUNNQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCmluZGV4IDM0ZjYzY2YuLjRjMmQ5OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC00Miw3ICs0Miw3IEBACiAJCX0gdTsKIAogCQkvKiBUaGUgcHJvdG9jb2wuICovCi0JCXUxNiBwcm90b251bTsKKwkJX191MTYgcHJvdG9udW07CiAJfSBkc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Q3ZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9YVF9RVU9UQV9ICisjZGVmaW5lIF9YVF9RVU9UQV9ICisKK2VudW0geHRfcXVvdGFfZmxhZ3MgeworCVhUX1FVT1RBX0lOVkVSVAkJPSAweDEsCit9OworI2RlZmluZSBYVF9RVU9UQV9NQVNLCQkweDEKKworc3RydWN0IHh0X3F1b3RhX2luZm8geworCXVfaW50MzJfdAkJZmxhZ3M7CisJdV9pbnQzMl90CQlwYWQ7CisJYWxpZ25lZF91NjQJCXF1b3RhOworCXN0cnVjdCB4dF9xdW90YV9pbmZvCSptYXN0ZXI7Cit9OworCisjZW5kaWYgLyogX1hUX1FVT1RBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0NGU5OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX1hUX1NUQVRJU1RJQ19ICisjZGVmaW5lIF9YVF9TVEFUSVNUSUNfSAorCitlbnVtIHh0X3N0YXRpc3RpY19tb2RlIHsKKwlYVF9TVEFUSVNUSUNfTU9ERV9SQU5ET00sCisJWFRfU1RBVElTVElDX01PREVfTlRILAorCV9fWFRfU1RBVElTVElDX01PREVfTUFYCit9OworI2RlZmluZSBYVF9TVEFUSVNUSUNfTU9ERV9NQVggKF9fWFRfU1RBVElTVElDX01PREVfTUFYIC0gMSkKKworZW51bSB4dF9zdGF0aXN0aWNfZmxhZ3MgeworCVhUX1NUQVRJU1RJQ19JTlZFUlQJCT0gMHgxLAorfTsKKyNkZWZpbmUgWFRfU1RBVElTVElDX01BU0sJCTB4MQorCitzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8geworCXVfaW50MTZfdAkJCW1vZGU7CisJdV9pbnQxNl90CQkJZmxhZ3M7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdV9pbnQzMl90CXByb2JhYmlsaXR5OworCQl9IHJhbmRvbTsKKwkJc3RydWN0IHsKKwkJCXVfaW50MzJfdAlldmVyeTsKKwkJCXVfaW50MzJfdAlwYWNrZXQ7CisJCQl1X2ludDMyX3QJY291bnQ7CisJCX0gbnRoOworCX0gdTsKKwlzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8JKm1hc3RlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCisjZW5kaWYgLyogX1hUX1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oCmluZGV4IGEzZjg5NzcuLjkyYmM2ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oCkBAIC01LDcgKzUsNiBAQAogICogKEMpMjAwMiBSdXN0eSBSdXNzZWxsIElCTSAtLSBUaGlzIGNvZGUgaXMgR1BMLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KIAogLyogVGhlcmUgaXMgbm8gUEZfQVJQLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaAppbmRleCBhNzViODRiLi44Nzc2NDAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApAQCAtNCw3ICs0LDYgQEAKIC8qIGJyaWRnZS1zcGVjaWZpYyBkZWZpbmVzIGZvciBuZXRmaWx0ZXIuIAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IDg1MzAxYzUuLmNlMDJjOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTUsNyArNSw2IEBACiAgKiAoQykxOTk4IFJ1c3R5IFJ1c3NlbGwgLS0gVGhpcyBjb2RlIGlzIEdQTC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAKIC8qIG9ubHkgZm9yIHVzZXJzcGFjZSBjb21wYXRpYmlsaXR5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAppbmRleCBkNTRkN2IyLi41MWRiZWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtMTIxLDYgKzEyMCwxMCBAQAogCXVfaW50MzJfdCBtYXJrOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NFQ01BUksKKwl1X2ludDMyX3Qgc2VjbWFyazsKKyNlbmRpZgorCiAJLyogVHJhdmVyc2VkIG9mdGVuLCBzbyBob3BlZnVsbHkgaW4gZGlmZmVyZW50IGNhY2hlbGluZSB0byB0b3AgKi8KIAkvKiBUaGVzZSBhcmUgbXkgdHVwbGVzOyBvcmlnaW5hbCBhbmQgcmVwbHkgKi8KIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggdHVwbGVoYXNoW0lQX0NUX0RJUl9NQVhdOwpAQCAtMTU0LDYgKzE1Nyw3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCiAjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKKwl1X2ludDMyX3Qgc2F2ZWRfaXA7CiAJLyogVGhpcyBpcyB0aGUgb3JpZ2luYWwgcGVyLXByb3RvIHBhcnQsIHVzZWQgdG8gbWFwIHRoZQogCSAqIGV4cGVjdGVkIGNvbm5lY3Rpb24gdGhlIHdheSB0aGUgcmVjaXBpZW50IGV4cGVjdHMuICovCiAJdW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvIHNhdmVkX3Byb3RvOwpAQCAtMjkzLDYgKzI5Nyw3IEBACiB9CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXBfY29ubnRyYWNrX2h0YWJsZV9zaXplOworZXh0ZXJuIGludCBpcF9jb25udHJhY2tfY2hlY2tzdW07CiAgCiAjZGVmaW5lIENPTk5UUkFDS19TVEFUX0lOQyhjb3VudCkgKF9fZ2V0X2NwdV92YXIoaXBfY29ubnRyYWNrX3N0YXQpLmNvdW50KyspCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaAppbmRleCBlYWNlODZiLi4zY2JmZjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCkBAIC03MSw2ICs3MSwxMyBAQAogCQkJICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCiAJCQkgICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKIAkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOworZXh0ZXJuIGludCAoKm5hdF9jYWxsZm9yd2FyZGluZ19ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSAgICAgICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCQkgICAgICAgdV9pbnQxNl90IHBvcnQsCisJCQkJICAgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogZXhwKTsKIGV4dGVybiBpbnQgKCpuYXRfcTkzMV9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAogCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKIAkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmgKaW5kZXggY2M5OGY3YS4uM2Q0YTc3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCkBAIC0xLDQgKzEsNCBAQAotLyogR2VuZXJhdGVkIGJ5IEppbmcgTWluIFpoYW8ncyBBU04uMSBwYXJzZXIsIE1hciAxNSAyMDA2CisvKiBHZW5lcmF0ZWQgYnkgSmluZyBNaW4gWmhhbydzIEFTTi4xIHBhcnNlciwgQXByIDIwIDIwMDYKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICoKQEAgLTQxMiw2ICs0MTIsNyBAQAogCQllRmFjaWxpdHlfVVVJRV9kZXN0aW5hdGlvbkluZm8gPSAoMSA8PCAxNCksCiAJCWVGYWNpbGl0eV9VVUlFX2gyNDVTZWN1cml0eU1vZGUgPSAoMSA8PCAxMyksCiAJfSBvcHRpb25zOworCVRyYW5zcG9ydEFkZHJlc3MgYWx0ZXJuYXRpdmVBZGRyZXNzOwogCUZhY2lsaXR5UmVhc29uIHJlYXNvbjsKIAlUcmFuc3BvcnRBZGRyZXNzIGgyNDVBZGRyZXNzOwogCUZhY2lsaXR5X1VVSUVfZmFzdFN0YXJ0IGZhc3RTdGFydDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3NpcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzZGFkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3NpcC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX19JUF9DT05OVFJBQ0tfU0lQX0hfXworI2RlZmluZSBfX0lQX0NPTk5UUkFDS19TSVBfSF9fCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNJUF9QT1JUCTUwNjAKKyNkZWZpbmUgU0lQX1RJTUVPVVQJMzYwMAorCisjZGVmaW5lIFBPU19WSUEJCTAKKyNkZWZpbmUgUE9TX0NPTlRBQ1QJMQorI2RlZmluZSBQT1NfQ09OVEVOVAkyCisjZGVmaW5lIFBPU19NRURJQQkzCisjZGVmaW5lIFBPU19PV05FUgk0CisjZGVmaW5lIFBPU19DT05ORUNUSU9OCTUKKyNkZWZpbmUgUE9TX1JFUV9IRUFERVIJNgorI2RlZmluZSBQT1NfU0RQX0hFQURFUgk3CisKK3N0cnVjdCBzaXBfaGVhZGVyX25mbyB7CisJY29uc3QgY2hhcgkqbG5hbWU7CisJY29uc3QgY2hhcgkqc25hbWU7CisJY29uc3QgY2hhcgkqbG5fc3RyOworCXNpemVfdAkJbG5sZW47CisJc2l6ZV90CQlzbmxlbjsKKwlzaXplX3QJCWxuX3N0cmxlbjsKKwlpbnQJCSgqbWF0Y2hfbGVuKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCAoKmlwX25hdF9zaXBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgKCppcF9uYXRfc2RwX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJICAgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmRwdHIpOworCitleHRlcm4gaW50IGN0X3NpcF9nZXRfaW5mbyhjb25zdCBjaGFyICpkcHRyLCBzaXplX3QgZGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsCisJCQkgICB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLAorCQkJICAgc3RydWN0IHNpcF9oZWFkZXJfbmZvICpobmZvKTsKK2V4dGVybiBpbnQgY3Rfc2lwX2xubGVuKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmxpbWl0KTsKK2V4dGVybiBjb25zdCBjaGFyICpjdF9zaXBfc2VhcmNoKGNvbnN0IGNoYXIgKm5lZWRsZSwgY29uc3QgY2hhciAqaGF5c3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmVlZGxlX2xlbiwgc2l6ZV90IGhheXN0YWNrX2xlbik7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fSVBfQ09OTlRSQUNLX1NJUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaAppbmRleCAzNjA0MjlmLi41ZDkyY2YwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2xpc3RoZWxwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oCkBAIC0xLDYgKzEsNSBAQAogI2lmbmRlZiBfTElTVEhFTFBfSAogI2RlZmluZSBfTElTVEhFTFBfSAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyogSGVhZGVyIHRvIGRvIG1vcmUgY29tcHJlaGVuc2l2ZSBqb2IgdGhhbiBsaW51eC9saXN0Lmg7IGFzc3VtZSBsaXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mcy5oIGIvaW5jbHVkZS9saW51eC9uZnMuaAppbmRleCBjYTJmZmE2Li41NGFmOTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzLmgKQEAgLTcsOSArNyw2IEBACiAjaWZuZGVmIF9MSU5VWF9ORlNfSAogI2RlZmluZSBfTElOVVhfTkZTX0gKIAotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCiAjZGVmaW5lIE5GU19QUk9HUkFNCTEwMDAwMwogI2RlZmluZSBORlNfUE9SVAkyMDQ5CiAjZGVmaW5lIE5GU19NQVhEQVRBCTgxOTIKQEAgLTEyOSw3ICsxMjYsMTAgQEAKIAlORkZJRk8gPSA4CiB9OwogCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKwogLyoKICAqIFRoaXMgaXMgdGhlIGtlcm5lbCBORlMgY2xpZW50IGZpbGUgaGFuZGxlIHJlcHJlc2VudGF0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzNC5oIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKaW5kZXggMGMxYzMwNi4uMTA1OWU2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKQEAgLTE0LDcgKzE0LDYgQEAKICNkZWZpbmUgX0xJTlVYX05GUzRfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNkZWZpbmUgTkZTNF9WRVJJRklFUl9TSVpFCTgKICNkZWZpbmUgTkZTNF9GSFNJWkUJCTEyOApAQCAtOTcsNiArOTYsOSBAQAogCU5GUzRfQUNMX1dIT19FVkVSWU9ORSwKIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCiBzdHJ1Y3QgbmZzNF9hY2UgewogCXVpbnQzMl90CXR5cGU7CiAJdWludDMyX3QJZmxhZzsKQEAgLTM0NSw4ICszNDcsNiBAQAogI2RlZmluZSBORlM0X01JTk9SX1ZFUlNJT04gMAogI2RlZmluZSBORlM0X0RFQlVHIDEKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogLyogSW5kZXggb2YgcHJlZGVmaW5lZCBMaW51eCBjbGllbnQgb3BlcmF0aW9ucyAqLwogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IGM3MTIyN2QuLjdlMDc5ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtOSwyNiArOSw2IEBACiAjaWZuZGVmIF9MSU5VWF9ORlNfRlNfSAogI2RlZmluZSBfTElOVVhfTkZTX0ZTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZnNfZnNfc2IuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9kZWJ1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9hdXRoLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25mcy5oPgotI2luY2x1ZGUgPGxpbnV4L25mczIuaD4KLSNpbmNsdWRlIDxsaW51eC9uZnMzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmZzNC5oPgotI2luY2x1ZGUgPGxpbnV4L25mc194ZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KIAogLyoKICAqIEVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgbmZzIGNsaWVudC4KQEAgLTYzLDYgKzQzLDI1IEBACiAjZGVmaW5lIEZMVVNIX05PQ09NTUlUCQkzMgkvKiBEb24ndCBzZW5kIHRoZSBORlN2My92NCBDT01NSVQgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8bGludXgvbmZzX2ZzX3NiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYXV0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMyLmg+CisjaW5jbHVkZSA8bGludXgvbmZzMy5oPgorI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfeGRyLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAKIC8qCiAgKiBORlN2My92NCBBY2Nlc3MgbW9kZSBjYWNoZSBlbnRyeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKaW5kZXggZWM3YzJlOC4uMmRjYWQyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIExJTlVYX05GU0RfTkZTRF9ICiAjZGVmaW5lIExJTlVYX05GU0RfTkZTRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RpcmVudC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaAppbmRleCAwNzk4Yjc3Li5mOWVkY2QyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaApAQCAtMTYsNyArMTYsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICMgaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjIGluY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2Qvc3lzY2FsbC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL3N5c2NhbGwuaAppbmRleCA3ODFlZmJmLi5kYWUwZmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2Qvc3lzY2FsbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2lmZGVmIF9fS0VSTkVMX18KLSMgaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjIGluY2x1ZGUgPGxpbnV4L2luLmg+CiAjZW5kaWYgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L251bWEuaCBiL2luY2x1ZGUvbGludXgvbnVtYS5oCmluZGV4IGU0ODFmZWIuLmEzMWE3MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnVtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvbnVtYS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfTlVNQV9ICiAjZGVmaW5lIF9MSU5VWF9OVU1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX05PREVTX1NISUZUCiAjZGVmaW5lIE5PREVTX1NISUZUICAgICBDT05GSUdfTk9ERVNfU0hJRlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFycG9ydC5oIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKaW5kZXggMDA4ZDczNi4uZDQyNzM3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKQEAgLTk2LDcgKzk2LDYgQEAKIC8qIFRoZSByZXN0IGlzIGZvciB0aGUga2VybmVsIG9ubHkgKi8KICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKaW5kZXggNDg3N2UzNS4uOTM2ZWY4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaApAQCAtNTAsNyArNTAsNyBAQAogZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpOwogZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9vc2Nfc3VwcG9ydF9zZXQodTMyIGZsYWdzKTsKICNlbHNlCi0jaWYgIWRlZmluZWQoYWNwaV9zdGF0dXMpCisjaWYgIWRlZmluZWQoQUVfRVJST1IpCiB0eXBlZGVmIHUzMiAJCWFjcGlfc3RhdHVzOwogI2RlZmluZSBBRV9FUlJPUiAgICAgIAkoYWNwaV9zdGF0dXMpICgweDAwMDEpCiAjZW5kaWYgICAgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAzYTZhNGUzLi42YzRiYzc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE3LDggKzE3LDYgQEAKICNpZm5kZWYgTElOVVhfUENJX0gKICNkZWZpbmUgTElOVVhfUENJX0gKIAotI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgotCiAvKiBJbmNsdWRlIHRoZSBwY2kgcmVnaXN0ZXIgZGVmaW5lcyAqLwogI2luY2x1ZGUgPGxpbnV4L3BjaV9yZWdzLmg+CiAKQEAgLTQ2LDggKzQ0LDkgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTQ0Miw2ICs0NDEsNyBAQAogc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX3Nsb3QgKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbik7CiBpbnQgcGNpX2ZpbmRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CiBpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBwb3MsIGludCBjYXApOworaW50IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKTsKIHN0cnVjdCBwY2lfYnVzICogcGNpX2ZpbmRfbmV4dF9idXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmZyb20pOwogCiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKQEAgLTY2Miw2ICs2NjIsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHBjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApIHtyZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBwb3N0LCBpbnQgY2FwKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCkge3JldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuIE5VTEw7IH0KIAogLyogUG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHJvdXRpbmVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGQ2ZmUwNDguLmJjZmU5ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC05MzUsNiArOTM1LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfREpJTk5fSVRPTwkweDExNTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfUjc1MwkJMHgxMTUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX09MSVRFQwkweDExODcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfUENJMjAwU1lOCTB4MzE5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDUwCQkweDkwNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfOTA4MAkJMHg5MDgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0dURUtfU0VSSUFMMgkweGEwMDEKQEAgLTExODIsNiArMTE4MywxNCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfMTEwMCAgICAgICAgIDB4MDM0RQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTQgICAgICAgICAgICAgIDB4MDM3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTUgICAgICAgICAgICAgIDB4MDM3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTYgICAgICAgICAgICAgIDB4MDNFNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcgICAgICAgICAgICAgIDB4MDNFNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTggICAgICAgICAgICAgIDB4MDNFRQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTkgICAgICAgICAgICAgIDB4MDNFRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjAgICAgICAgICAgICAgIDB4MDQ1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEgICAgICAgICAgICAgIDB4MDQ1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjIgICAgICAgICAgICAgIDB4MDQ1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMgICAgICAgICAgICAgIDB4MDQ1MwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU1TCQkweDEwZTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTVNfVFQxMjgJCTB4OTEyOApAQCAtMTIzMSw2ICsxMjQwLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM4MF8wCTB4MDIwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjM4XzAJMHgwMjM4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BUODgwCQkweDAyNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQQkweDAzMDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMAkweDAyNTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wCTB4MDI2OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9LOFQ4MDBQUk9fMAkweDAyODIKQEAgLTE4MjYsNiArMTgzNiw3IEBACiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQU1TVU5HCQkweDE0NGQKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX01ZUklDT00JCTB4MTRjMQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVElUQU4JCTB4MTREMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzAxMEwJMHg4MDAxCkBAIC0xODg2LDYgKzE4OTcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxRgkweDE2N2UKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4N00JMHgxNjkzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODIJMHgxNjk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODYJMHgxNjlhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODcJMHgxNjliCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODgJMHgxNjljCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODkJMHgxNjlkCkBAIC0yMDQyLDYgKzIwNTQsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgwOTYwX1JQCTB4MTk2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCCTB4MWEyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCCTB4MWEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVQJMHgxYTM4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wCTB4MjQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMQkweDI0MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzMJMHgyNDEzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKaW5kZXggNjgyNTI1NS4uNjZiNWRlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaApAQCAtNiw3ICs2LDYgQEAKICAqIFdBUk5JTkc6IHRoZXNlIHRoaW5ncyBhcmUgSFVHRS4gIDQga2J5dGVzIHBlciBjb3VudGVyIG9uIDMyLXdheSBQNC4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IGJhYzBmYjMuLmQ1ZGQ0NzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0xNTksNyArMTU5LDcgQEAKIHN0cnVjdCBzYWRiX3hfa21wcml2YXRlIHsKIAl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2xlbjsKIAl1aW50MTZfdAlzYWRiX3hfa21wcml2YXRlX2V4dHR5cGU7Ci0JdV9pbnQzMl90CXNhZGJfeF9rbXByaXZhdGVfcmVzZXJ2ZWQ7CisJdWludDMyX3QJc2FkYl94X2ttcHJpdmF0ZV9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbXByaXZhdGUpID09IDggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDY2YmU1ODkuLjY1OGMxYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+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+Ci0jaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogLyoKICAqIFRhc2sgc3RhdGUgYml0bWFzay4gTk9URSEgVGhlc2UgYml0cyBhcmUgYWxzbwpAQCAtMTU2LDIwICsxNzAsNiBAQAogLyogVGFzayBjb21tYW5kIG5hbWUgbGVuZ3RoICovCiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTYKIAotLyoKLSAqIFNjaGVkdWxpbmcgcG9saWNpZXMKLSAqLwotI2RlZmluZSBTQ0hFRF9OT1JNQUwJCTAKLSNkZWZpbmUgU0NIRURfRklGTwkJMQotI2RlZmluZSBTQ0hFRF9SUgkJMgotI2RlZmluZSBTQ0hFRF9CQVRDSAkJMwotCi1zdHJ1Y3Qgc2NoZWRfcGFyYW0gewotCWludCBzY2hlZF9wcmlvcml0eTsKLX07Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAvKgpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJYXRvbWljX3QgcHJvY2Vzc2VzOwkvKiBIb3cgbWFueSBwcm9jZXNzZXMgZG9lcyB0aGlzIHVzZXIgaGF2ZT8gKi8KIAlhdG9taWNfdCBmaWxlczsJCS8qIEhvdyBtYW55IG9wZW4gZmlsZXMgZG9lcyB0aGlzIHVzZXIgaGF2ZT8gKi8KIAlhdG9taWNfdCBzaWdwZW5kaW5nOwkvKiBIb3cgbWFueSBwZW5kaW5nIHNpZ25hbHMgZG9lcyB0aGlzIHVzZXIgaGF2ZT8gKi8KLSNpZmRlZiBDT05GSUdfSU5PVElGWQorI2lmZGVmIENPTkZJR19JTk9USUZZX1VTRVIKIAlhdG9taWNfdCBpbm90aWZ5X3dhdGNoZXM7IC8qIEhvdyBtYW55IGlub3RpZnkgd2F0Y2hlcyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLwogCWF0b21pY190IGlub3RpZnlfZGV2czsJLyogSG93IG1hbnkgaW5vdGlmeSBkZXZzIGRvZXMgdGhpcyB1c2VyIGhhdmUgb3BlbmVkPyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaCBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCmluZGV4IGNkMjc3M2IuLjNlOGIxY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfU0VDQ09NUF9ICiAjZGVmaW5lIF9MSU5VWF9TRUNDT01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NFQ0NPTVAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDFiYWI0OGYuLjRkZmIxYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTgwNSwzMSArODA1LDM3IEBACiAgKgl1c2VkIGJ5IHRoZSBYRlJNIHN5c3RlbS4KICAqCUBzZWNfY3R4IGNvbnRhaW5zIHRoZSBzZWN1cml0eSBjb250ZXh0IGluZm9ybWF0aW9uIGJlaW5nIHByb3ZpZGVkIGJ5CiAgKgl0aGUgdXNlci1sZXZlbCBwb2xpY3kgdXBkYXRlIHByb2dyYW0gKGUuZy4sIHNldGtleSkuCi0gKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgeHAtPnNlbGVjdG9yLnNlY3VyaXR5IGZpZWxkLgorICoJQWxsb2NhdGUgYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlIHhwLT5zZWN1cml0eSBmaWVsZC4KICAqCVRoZSBzZWN1cml0eSBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gdGhlIHhmcm1fcG9saWN5IGlzCiAgKglhbGxvY2F0ZWQuCiAgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKG1lbW9yeSB0byBhbGxvY2F0ZSwgbGVnYWwgY29udGV4dCkKICAqIEB4ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eToKICAqCUBvbGQgY29udGFpbnMgYW4gZXhpc3RpbmcgeGZybV9wb2xpY3kgaW4gdGhlIFNQRC4KICAqCUBuZXcgY29udGFpbnMgYSBuZXcgeGZybV9wb2xpY3kgYmVpbmcgY2xvbmVkIGZyb20gb2xkLgotICoJQWxsb2NhdGUgYSBzZWN1cml0eSBzdHJ1Y3R1cmUgdG8gdGhlIG5ldy0+c2VsZWN0b3Iuc2VjdXJpdHkgZmllbGQKLSAqCXRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG9sZC0+c2VsZWN0b3Iuc2VjdXJpdHkgZmllbGQuCisgKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgbmV3LT5zZWN1cml0eSBmaWVsZAorICoJdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb2xkLT5zZWN1cml0eSBmaWVsZC4KICAqCVJldHVybiAwIGlmIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCAobWVtb3J5IHRvIGFsbG9jYXRlKS4KICAqIEB4ZnJtX3BvbGljeV9mcmVlX3NlY3VyaXR5OgogICoJQHhwIGNvbnRhaW5zIHRoZSB4ZnJtX3BvbGljeQotICoJRGVhbGxvY2F0ZSB4cC0+c2VsZWN0b3Iuc2VjdXJpdHkuCisgKglEZWFsbG9jYXRlIHhwLT5zZWN1cml0eS4KKyAqIEB4ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHk6CisgKglAeHAgY29udGFpbnMgdGhlIHhmcm1fcG9saWN5LgorICoJQXV0aG9yaXplIGRlbGV0aW9uIG9mIHhwLT5zZWN1cml0eS4KICAqIEB4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5OgogICoJQHggY29udGFpbnMgdGhlIHhmcm1fc3RhdGUgYmVpbmcgYWRkZWQgdG8gdGhlIFNlY3VyaXR5IEFzc29jaWF0aW9uCiAgKglEYXRhYmFzZSBieSB0aGUgWEZSTSBzeXN0ZW0uCiAgKglAc2VjX2N0eCBjb250YWlucyB0aGUgc2VjdXJpdHkgY29udGV4dCBpbmZvcm1hdGlvbiBiZWluZyBwcm92aWRlZCBieQogICoJdGhlIHVzZXItbGV2ZWwgU0EgZ2VuZXJhdGlvbiBwcm9ncmFtIChlLmcuLCBzZXRrZXkgb3IgcmFjb29uKS4KLSAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSB4LT5zZWwuc2VjdXJpdHkgZmllbGQuICBUaGUKKyAqCUFsbG9jYXRlIGEgc2VjdXJpdHkgc3RydWN0dXJlIHRvIHRoZSB4LT5zZWN1cml0eSBmaWVsZC4gIFRoZQogICoJc2VjdXJpdHkgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCB3aGVuIHRoZSB4ZnJtX3N0YXRlIGlzCiAgKglhbGxvY2F0ZWQuCiAgKglSZXR1cm4gMCBpZiBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKG1lbW9yeSB0byBhbGxvY2F0ZSwgbGVnYWwgY29udGV4dCkuCiAgKiBAeGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5OgogICoJQHggY29udGFpbnMgdGhlIHhmcm1fc3RhdGUuCi0gKglEZWFsbG9jYXRlIHg+c2VsLnNlY3VyaXR5LgorICoJRGVhbGxvY2F0ZSB4LT5zZWN1cml0eS4KKyAqIEB4ZnJtX3N0YXRlX2RlbGV0ZV9zZWN1cml0eToKKyAqCUB4IGNvbnRhaW5zIHRoZSB4ZnJtX3N0YXRlLgorICoJQXV0aG9yaXplIGRlbGV0aW9uIG9mIHgtPnNlY3VyaXR5LgogICogQHhmcm1fcG9saWN5X2xvb2t1cDoKICAqCUB4cCBjb250YWlucyB0aGUgeGZybV9wb2xpY3kgZm9yIHdoaWNoIHRoZSBhY2Nlc3MgY29udHJvbCBpcyBiZWluZwogICoJY2hlY2tlZC4KQEAgLTEyOTgsOCArMTMwNCwxMCBAQAogCWludCAoKnhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKIAlpbnQgKCp4ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldyk7CiAJdm9pZCAoKnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKKwlpbnQgKCp4ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKIAlpbnQgKCp4ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCk7CiAJdm9pZCAoKnhmcm1fc3RhdGVfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKKwlpbnQgKCp4ZnJtX3N0YXRlX2RlbGV0ZV9zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIAlpbnQgKCp4ZnJtX3BvbGljeV9sb29rdXApKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHUzMiBza19zaWQsIHU4IGRpcik7CiAjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSAqLwogCkBAIC0yOTM0LDExICsyOTQyLDIxIEBACiAJc2VjdXJpdHlfb3BzLT54ZnJtX3BvbGljeV9mcmVlX3NlY3VyaXR5KHhwKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9wb2xpY3lfZGVsZXRlX3NlY3VyaXR5KHhwKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KQogewogCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkoeCwgc2VjX2N0eCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fc3RhdGVfZGVsZXRlX3NlY3VyaXR5KHgpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfeGZybV9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewogCXNlY3VyaXR5X29wcy0+eGZybV9zdGF0ZV9mcmVlX3NlY3VyaXR5KHgpOwpAQCAtMjk2Myw2ICsyOTgxLDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCiB7CiAJcmV0dXJuIDA7CkBAIC0yOTcyLDYgKzI5OTUsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB1MzIgc2tfc2lkLCB1OCBkaXIpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXguaCBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCmluZGV4IDQwNDdiY2QuLmFhZDRlMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCkBAIC0xMTgsNiArMTE4LDI3IEBACiAgKi8KIHZvaWQgc2VsaW51eF9nZXRfdGFza19zaWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHUzMiAqc2lkKTsKIAorLyoqCisgKiAgICAgc2VsaW51eF9zdHJpbmdfdG9fc2lkIC0gbWFwIGEgc2VjdXJpdHkgY29udGV4dCBzdHJpbmcgdG8gYSBzZWN1cml0eSBJRAorICogICAgIEBzdHI6IHRoZSBzZWN1cml0eSBjb250ZXh0IHN0cmluZyB0byBiZSBtYXBwZWQKKyAqICAgICBAc2lkOiBJRCB2YWx1ZSByZXR1cm5lZCB2aWEgdGhpcy4KKyAqCisgKiAgICAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIHdpdGggdGhlIFNJRCBzdG9yZWQgaW4gc2lkLiAgQSB2YWx1ZQorICogICAgIG9mIHplcm8gZm9yIHNpZCBpbmRpY2F0ZXMgbm8gU0lEIGNvdWxkIGJlIGRldGVybWluZWQgKGJ1dCBubyBlcnJvcgorICogICAgIG9jY3VycmVkKS4KKyAqLworaW50IHNlbGludXhfc3RyaW5nX3RvX3NpZChjaGFyICpzdHIsIHUzMiAqc2lkKTsKKworLyoqCisgKiAgICAgc2VsaW51eF9yZWxhYmVsX3BhY2tldF9wZXJtaXNzaW9uIC0gY2hlY2sgcGVybWlzc2lvbiB0byByZWxhYmVsIGEgcGFja2V0CisgKiAgICAgQHNpZDogSUQgdmFsdWUgdG8gYmUgYXBwbGllZCB0byBuZXR3b3JrIHBhY2tldCAodmlhIFNFQ01BUkssIG1vc3QgbGlrZWx5KQorICoKKyAqICAgICBSZXR1cm5zIDAgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGxhYmVsIHBhY2tldHMgd2l0aCB0aGUKKyAqICAgICBzdXBwbGllZCBzZWN1cml0eSBJRC4gIE5vdGUgdGhhdCBpdCBpcyBpbXBsaWNpdCB0aGF0IHRoZSBwYWNrZXQgaXMgYWx3YXlzCisgKiAgICAgYmVpbmcgcmVsYWJlbGVkIGZyb20gdGhlIGRlZmF1bHQgdW5sYWJsZWQgdmFsdWUsIGFuZCB0aGF0IHRoZSBhY2Nlc3MKKyAqICAgICBjb250cm9sIGRlY2lzaW9uIGlzIG1hZGUgaW4gdGhlIEFWQy4KKyAqLworaW50IHNlbGludXhfcmVsYWJlbF9wYWNrZXRfcGVybWlzc2lvbih1MzIgc2lkKTsKIAogI2Vsc2UKIApAQCAtMTcyLDYgKzE5MywxNyBAQAogCSpzaWQgPSAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X3N0cmluZ190b19zaWQoY29uc3QgY2hhciAqc3RyLCB1MzIgKnNpZCkKK3sKKyAgICAgICAqc2lkID0gMDsKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9yZWxhYmVsX3BhY2tldF9wZXJtaXNzaW9uKHUzMiBzaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX1NFTElOVVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZW0uaCBiL2luY2x1ZGUvbGludXgvc2VtLmgKaW5kZXggM2MxZjExMi4uOWFhZmZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfTElOVVhfU0VNX0gKIAogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogLyogc2Vtb3AgZmxhZ3MgKi8KICNkZWZpbmUgU0VNX1VORE8gICAgICAgIDB4MTAwMCAgLyogdW5kbyB0aGUgb3BlcmF0aW9uIG9uIGV4aXQgKi8KQEAgLTc4LDYgKzc3LDcgQEAKICNkZWZpbmUgU0VNVVNaICAyMAkJLyogc2l6ZW9mIHN0cnVjdCBzZW1fdW5kbyAqLwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IHRhc2tfc3RydWN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaCBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCmluZGV4IDVhMDk1NTcuLjdiYzVjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCkBAIC0yNiw3ICsyNiw2IEBACiAgKiBieSBLZWl0aCBPd2VucyBhbmQgQW5kcmVhIEFyY2FuZ2VsaQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxQLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaAppbmRleCAyYjllNmI5Li5lODExYTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaApAQCAtMTksNyArMTksNiBAQAogICogRm9yIGRlZmluaXRpb25zIG9mIHRoZSBmbGFncyBmaWVsZCwgc2VlIHR0eS5oCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCBiZDE0ODU4Li45NGI5Mjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0xMzIsNyArMTMyLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCmluZGV4IDcwNzM5ZjUuLjFlNGNlNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaApAQCAtMSwxMiArMSwxMiBAQAogI2lmbmRlZiBfTElOVVhfU0lHTkFMX0gKICNkZWZpbmUgX0xJTlVYX1NJR05BTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogLyoKICAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGY4ZjIzNDcuLjY2Zjg4MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfTElOVVhfU0tCVUZGX0gKICNkZWZpbmUgX0xJTlVYX1NLQlVGRl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTI5LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC90ZXh0c2VhcmNoLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAKICNkZWZpbmUgSEFWRV9BTExPQ19TS0IJCS8qIEZvciB0aGUgZHJpdmVycyB0byBrbm93ICovCiAjZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQgkvKiBEaXR0byA4KQkJICAgKi8KQEAgLTIwOSw2ICsyMDksNyBAQAogICoJQG5mX2JyaWRnZTogU2F2ZWQgZGF0YSBhYm91dCBhIGJyaWRnZWQgZnJhbWUgLSBzZWUgYnJfbmV0ZmlsdGVyLmMKICAqCUB0Y19pbmRleDogVHJhZmZpYyBjb250cm9sIGluZGV4CiAgKglAdGNfdmVyZDogdHJhZmZpYyBjb250cm9sIHZlcmRpY3QKKyAqCUBzZWNtYXJrOiBzZWN1cml0eSBtYXJraW5nCiAgKi8KIAogc3RydWN0IHNrX2J1ZmYgewpAQCAtMjg1LDYgKzI4NiwxMiBAQAogCV9fdTE2CQkJdGNfdmVyZDsJLyogdHJhZmZpYyBjb250cm9sIHZlcmRpY3QgKi8KICNlbmRpZgogI2VuZGlmCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwlkbWFfY29va2llX3QJCWRtYV9jb29raWU7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkVUV09SS19TRUNNQVJLCisJX191MzIJCQlzZWNtYXJrOworI2VuZGlmCiAKIAogCS8qIFRoZXNlIGVsZW1lbnRzIG11c3QgYmUgYXQgdGhlIGVuZCwgc2VlIGFsbG9jX3NrYigpIGZvciBkZXRhaWxzLiAgKi8KQEAgLTk2NywxNSArOTc0LDE2IEBACiAjZGVmaW5lIE5FVF9TS0JfUEFECTE2CiAjZW5kaWYKIAotZXh0ZXJuIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbiwgaW50IHJlYWxsb2MpOworZXh0ZXJuIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaWYgKCFza2ItPmRhdGFfbGVuKSB7Ci0JCXNrYi0+bGVuICA9IGxlbjsKLQkJc2tiLT50YWlsID0gc2tiLT5kYXRhICsgbGVuOwotCX0gZWxzZQotCQlfX19wc2tiX3RyaW0oc2tiLCBsZW4sIDApOworCWlmICh1bmxpa2VseShza2ItPmRhdGFfbGVuKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCXNrYi0+bGVuICA9IGxlbjsKKwlza2ItPnRhaWwgPSBza2ItPmRhdGEgKyBsZW47CiB9CiAKIC8qKgpAQCAtOTg1LDYgKzk5Myw3IEBACiAgKgogICoJQ3V0IHRoZSBsZW5ndGggb2YgYSBidWZmZXIgZG93biBieSByZW1vdmluZyBkYXRhIGZyb20gdGhlIHRhaWwuIElmCiAgKgl0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXIgdGhlIGxlbmd0aCBzcGVjaWZpZWQgaXQgaXMgbm90IG1vZGlmaWVkLgorICoJVGhlIHNrYiBtdXN0IGJlIGxpbmVhci4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCiB7CkBAIC05OTUsMTIgKzEwMDQsMTAgQEAKIAogc3RhdGljIGlubGluZSBpbnQgX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpZiAoIXNrYi0+ZGF0YV9sZW4pIHsKLQkJc2tiLT5sZW4gID0gbGVuOwotCQlza2ItPnRhaWwgPSBza2ItPmRhdGErbGVuOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIF9fX3Bza2JfdHJpbShza2IsIGxlbiwgMSk7CisJaWYgKHNrYi0+ZGF0YV9sZW4pCisJCXJldHVybiBfX19wc2tiX3RyaW0oc2tiLCBsZW4pOworCV9fc2tiX3RyaW0oc2tiLCBsZW4pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKQEAgLTExNjEsMTggKzExNjgsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgX19za2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIF9fcHNrYl9wdWxsX3RhaWwoc2tiLCBza2ItPmRhdGFfbGVuKSA/IDAgOiAtRU5PTUVNOworfQorCiAvKioKICAqCXNrYl9saW5lYXJpemUgLSBjb252ZXJ0IHBhZ2VkIHNrYiB0byBsaW5lYXIgb25lCiAgKglAc2tiOiBidWZmZXIgdG8gbGluYXJpemUKLSAqCUBnZnA6IGFsbG9jYXRpb24gbW9kZQogICoKICAqCUlmIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5IC1FTk9NRU0gaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB6ZXJvCiAgKglpcyByZXR1cm5lZCBhbmQgdGhlIG9sZCBza2IgZGF0YSByZWxlYXNlZC4KICAqLwotZXh0ZXJuIGludCBfX3NrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKTsKLXN0YXRpYyBpbmxpbmUgaW50IHNrYl9saW5lYXJpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKQorc3RhdGljIGlubGluZSBpbnQgc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXJldHVybiBfX3NrYl9saW5lYXJpemUoc2tiLCBnZnApOworCXJldHVybiBza2JfaXNfbm9ubGluZWFyKHNrYikgPyBfX3NrYl9saW5lYXJpemUoc2tiKSA6IDA7Cit9CisKKy8qKgorICoJc2tiX2xpbmVhcml6ZV9jb3cgLSBtYWtlIHN1cmUgc2tiIGlzIGxpbmVhciBhbmQgd3JpdGFibGUKKyAqCUBza2I6IGJ1ZmZlciB0byBwcm9jZXNzCisgKgorICoJSWYgdGhlcmUgaXMgbm8gZnJlZSBtZW1vcnkgLUVOT01FTSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHplcm8KKyAqCWlzIHJldHVybmVkIGFuZCB0aGUgb2xkIHNrYiBkYXRhIHJlbGVhc2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBza2JfbGluZWFyaXplX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2JfaXNfbm9ubGluZWFyKHNrYikgfHwgc2tiX2Nsb25lZChza2IpID8KKwkgICAgICAgX19za2JfbGluZWFyaXplKHNrYikgOiAwOwogfQogCiAvKioKQEAgLTEzOTYsNSArMTQxOSwyMyBAQAogc3RhdGljIGlubGluZSB2b2lkIG5mX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpIHt9CiAjZW5kaWYgLyogQ09ORklHX05FVEZJTFRFUiAqLwogCisjaWZkZWYgQ09ORklHX05FVFdPUktfU0VDTUFSSworc3RhdGljIGlubGluZSB2b2lkIHNrYl9jb3B5X3NlY21hcmsoc3RydWN0IHNrX2J1ZmYgKnRvLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSkKK3sKKwl0by0+c2VjbWFyayA9IGZyb20tPnNlY21hcms7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfaW5pdF9zZWNtYXJrKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiLT5zZWNtYXJrID0gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2NvcHlfc2VjbWFyayhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKQoreyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfaW5pdF9zZWNtYXJrKHN0cnVjdCBza19idWZmICpza2IpCit7IH0KKyNlbmRpZgorCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogI2VuZGlmCS8qIF9MSU5VWF9TS0JVRkZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAyZDk4NWQ1Li45ZGM5MzE2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTExLDcgKzExLDYgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qga21lbV9jYWNoZSBrbWVtX2NhY2hlX3Q7CiAKLSNpbmNsdWRlCTxsaW51eC9jb25maWcuaD4JLyoga21hbGxvY19zaXplcy5oIG5lZWRzIENPTkZJR18gb3B0aW9ucyAqLwogI2luY2x1ZGUJPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUJPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlCTxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbWJfZnMuaCBiL2luY2x1ZGUvbGludXgvc21iX2ZzLmgKaW5kZXggNjIxYTNkMy4uMzY3ZDZjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbWJfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oCkBAIC0xMCw4ICsxMCw2IEBACiAjZGVmaW5lIF9MSU5VWF9TTUJfRlNfSAogCiAjaW5jbHVkZSA8bGludXgvc21iLmg+Ci0jaW5jbHVkZSA8bGludXgvc21iX2ZzX2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zbWJfZnNfc2IuaD4KIAogLyoKICAqIGlvY3RsIGNvbW1hbmRzCkBAIC0yNCw2ICsyMiw4IEBACiAKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zbWJfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYl9mc19zYi5oPgogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCBlMmZhM2FiLi5jOTNjM2ZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTYsNyArNiw2IEBACiAgKgkJQWxhbiBDb3guIDxhbGFuQHJlZGhhdC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBleHRlcm4gdm9pZCBjcHVfaWRsZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oCmluZGV4IGZhMWZmM2IuLmNmNzE1YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21wX2xvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTElOVVhfU01QTE9DS19ICiAjZGVmaW5lIF9fTElOVVhfU01QTE9DS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZmRlZiBDT05GSUdfTE9DS19LRVJORUwKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCA5YWIyZGRkLi4zNjE0MDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTE4LDggKzE4LDYgQEAKIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgIWRlZmluZWQoX19HTElCQ19fKSB8fCAoX19HTElCQ19fIDwgMikKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkJLyogZm9yIENPTkZJR19DT01QQVQgKi8KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgkJCS8qIGFyY2gtZGVwZW5kZW50IGRlZmluZXMJKi8KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CQkvKiB0aGUgU0lPQ3h4eCBJL08gY29udHJvbHMJKi8KICNpbmNsdWRlIDxsaW51eC91aW8uaD4JCQkvKiBpb3ZlYyBzdXBwb3J0CQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCmluZGV4IDc5OWJlNjcuLmFlMjNiZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICAqICBsaW51eC9zcGlubG9jay5oOiAgICAgYnVpbGRzIHRoZSBmaW5hbCBzcGluXyooKSBBUElzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oIGIvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaAppbmRleCAxNTFhODAzZS4uNWJmYzU1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oCkBAIC00LDcgKzQsNiBAQAogICAgdmVyeSBoZWF2eSBsb2NrLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIGdyYWJiaW5nIGV2ZXJ5IHNwaW5sb2NrCiAgICAoYW5kIG1vcmUpLiAgU28gdGhlICJyZWFkIiBzaWRlIHRvIHN1Y2ggYSBsb2NrIGlzIGFueXRoaW5nIHdoaWNoCiAgICBkaWFibGVzIHByZWVlbXB0LiAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCmluZGV4IGJlNDc3MmUuLmE2ZGUzMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKQEAgLTExLDcgKzExLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9tc2dfcHJvdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCmluZGV4IDFhNDJkOTAuLmU0NzI5YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaApAQCAtOSwxOSArOSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfREVCVUdfSF8KICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19ERUJVR19IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0vKgotICogRW5hYmxlIFJQQyBkZWJ1Z2dpbmcvcHJvZmlsaW5nLgotICovCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotI2RlZmluZSAgUlBDX0RFQlVHCi0jZW5kaWYKLS8qICNkZWZpbmUgIFJQQ19QUk9GSUxFICovCi0KIC8qCiAgKiBSUEMgZGVidWcgZmFjaWxpdGllcwogICovCkBAIC00MSw2ICsyOCwxNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworLyoKKyAqIEVuYWJsZSBSUEMgZGVidWdnaW5nL3Byb2ZpbGluZy4KKyAqLworI2lmZGVmIENPTkZJR19TWVNDVEwKKyNkZWZpbmUgIFJQQ19ERUJVRworI2VuZGlmCisvKiAjZGVmaW5lICBSUENfUFJPRklMRSAqLworCiAvKgogICogRGVidWdnaW5nIG1hY3JvcyBldGMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3RhdHMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N0YXRzLmgKaW5kZXggZDkzYzI0Yi4uNWZhMGYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3RhdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdGF0cy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfTElOVVhfU1VOUlBDX1NUQVRTX0gKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19TVEFUU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKIHN0cnVjdCBycGNfc3RhdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCmluZGV4IDM3YzFjNzYuLjk2ZTMxYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC02LDcgKzYsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggZjAzYzI0Ny4uYWNhOWJmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TV0FQX0gKICNkZWZpbmUgX0xJTlVYX1NXQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggNjBkNDllNS4uYmQ2N2E0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNTQsNyArNTQsNiBAQAogc3RydWN0IGNvbXBhdF90aW1ldmFsOwogc3RydWN0IHJvYnVzdF9saXN0X2hlYWQ7CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Fpb19hYmkuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCA3NmVhZWZmLi5jZWU5NDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTMxMyw2ICszMTMsNyBAQAogCU5FVF9ORl9DT05OVFJBQ0tfRlJBRzZfVElNRU9VVD0yOSwKIAlORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0xPV19USFJFU0g9MzAsCiAJTkVUX05GX0NPTk5UUkFDS19GUkFHNl9ISUdIX1RIUkVTSD0zMSwKKwlORVRfTkZfQ09OTlRSQUNLX0NIRUNLU1VNPTMyLAogfTsKIAogLyogL3Byb2Mvc3lzL25ldC9pcHY0ICovCkBAIC00MDMsNiArNDA0LDggQEAKICAJTkVUX1RDUF9NVFVfUFJPQklORz0xMTMsCiAJTkVUX1RDUF9CQVNFX01TUz0xMTQsCiAJTkVUX0lQVjRfVENQX1dPUktBUk9VTkRfU0lHTkVEX1dJTkRPV1M9MTE1LAorCU5FVF9UQ1BfRE1BX0NPUFlCUkVBSz0xMTYsCisJTkVUX1RDUF9TTE9XX1NUQVJUX0FGVEVSX0lETEU9MTE3LAogfTsKIAogZW51bSB7CkBAIC00OTEsNiArNDk0LDcgQEAKICAJTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9SRUNEPTI1LAogIAlORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX0FDS19TRU5UPTI2LAogCU5FVF9JUFY0X05GX0NPTk5UUkFDS19DT1VOVD0yNywKKwlORVRfSVBWNF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU09MjgsCiB9OwogIAogLyogL3Byb2Mvc3lzL25ldC9pcHY2ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKaW5kZXggZWE4MTliOC4uNDgxMmZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNycS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtMTEsNyArMTEsNiBAQAogICoJYmFzZWQgdXBvbiBkaXNjdXNpb25zIGluIGlyYzovL2lyYy5vcGVucHJvamVjdHMubmV0LyNrZXJuZWxuZXdiaWVzCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3QgcHRfcmVnczsKIHN0cnVjdCB0dHlfc3RydWN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggNTQyZDM5NS4uNDIwYTY4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIF9MSU5VWF9UQ1BfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIHN0cnVjdCB0Y3BoZHIgewpAQCAtMTU5LDcgKzE2MCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgpAQCAtMjMzLDYgKzIzMywxMyBAQAogCQlzdHJ1Y3QgaW92ZWMJCSppb3Y7CiAJCWludAkJCW1lbW9yeTsKIAkJaW50CQkJbGVuOworI2lmZGVmIENPTkZJR19ORVRfRE1BCisJCS8qIG1lbWJlcnMgZm9yIGFzeW5jIGNvcHkgKi8KKwkJc3RydWN0IGRtYV9jaGFuCQkqZG1hX2NoYW47CisJCWludAkJCXdha2V1cDsKKwkJc3RydWN0IGRtYV9waW5uZWRfbGlzdAkqcGlubmVkX2xpc3Q7CisJCWRtYV9jb29raWVfdAkJZG1hX2Nvb2tpZTsKKyNlbmRpZgogCX0gdWNvcHk7CiAKIAlfX3UzMglzbmRfd2wxOwkvKiBTZXF1ZW5jZSBmb3Igd2luZG93IHVwZGF0ZQkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIGIvaW5jbHVkZS9saW51eC90aHJlYWRzLmgKaW5kZXggZTY0NmJjZC4uMzhkMWE1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aHJlYWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC90aHJlYWRzLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9USFJFQURTX0gKICNkZWZpbmUgX0xJTlVYX1RIUkVBRFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGUgZGVmYXVsdCBsaW1pdCBmb3IgdGhlIG5yIG9mIHRocmVhZHMgaXMgbm93IGluCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKaW5kZXggMGE0ODViZS4uYzk4MjMwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX1RJTUVSX0gKICNkZWZpbmUgX0xJTlVYX1RJTUVSX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IDAzOTE0YjcuLjM0ZDNjY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTUzLDcgKzUzLDYgQEAKICNpZm5kZWYgX0xJTlVYX1RJTUVYX0gKICNkZWZpbmUgX0xJTlVYX1RJTUVYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCBmMTNmNDlhLi5lODk4ZWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5LmgKQEAgLTE2LDcgKzE2LDYgQEAKIAkJICAgY29uc29sZXMgMTYgYW5kIGhpZ2hlciAoc2luY2UgaXQgcmV0dXJucyBhIHNob3J0KSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKaW5kZXggMTA0NmM3YS4uYTVlNDZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0xJTlVYX1RZUEVTX0gKIAogI2lmZGVmCV9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBCSVRTX1RPX0xPTkdTKGJpdHMpIFwKIAkoKChiaXRzKStCSVRTX1BFUl9MT05HLTEpL0JJVFNfUEVSX0xPTkcpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaAppbmRleCA4NWE1NTY1Li5iZGQzOWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdWRwLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQCTIgLyogZHJhZnQtaWV0Zi1pcHNlYy11ZHAtZW5jYXBzLTA2ICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oCmluZGV4IDg0M2FlYWEuLjg2YjViNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC91ZnNfZnMuaApAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdW5pc3RkLmggYi9pbmNsdWRlL2xpbnV4L3VuaXN0ZC5oCmluZGV4IDEwZWQ5ODMuLmMxOGM2MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9saW51eC91bmlzdGQuaApAQCAtMSw3ICsxLDkgQEAKICNpZm5kZWYgX0xJTlVYX1VOSVNURF9IXwogI2RlZmluZSBfTElOVVhfVU5JU1REX0hfCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gaW50IGVycm5vOworI2VuZGlmCiAKIC8qCiAgKiBJbmNsdWRlIG1hY2hpbmUgc3BlY2lmaWMgc3lzY2FsbFggbWFjcm9zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCBlMzRlNWUzLi4xZjQ5MmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+ICAgICAgICAvKiBmb3IgLUVOT0RFViAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIGZvciBtZGVsYXkoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBmb3IgaW5faW50ZXJydXB0KCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCmluZGV4IGIyZDA4OTguLjYwODQ4N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfVVNVQUxfSAogI2RlZmluZSBfX0xJTlVYX1VTQl9VU1VBTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogV2Ugc2hvdWxkIGRvIHRoaXMgZm9yIGNsZWFubGluZXNzLi4uIEJ1dCBvdGhlciB1c2JfZm9vLmggZG8gbm90IGRvIHRoaXMuICovCiAvKiAjaW5jbHVkZSA8bGludXgvdXNiLmg+ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAppbmRleCA4ODU5ZjBiLi43YjdhYWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogCWNoYXIgcG9ydCBbMTI3XTsJLyogZS5nLiBwb3J0IDMgY29ubmVjdHMgdG8gZGV2aWNlIDI3ICovCiB9OwogCisjaWZkZWYgX19LRVJORUxfXwogI2lmZGVmIENPTkZJR19DT01QQVQKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIHN0cnVjdCB1c2JkZXZmc191cmIzMiB7CkBAIC0xNDcsNiArMTQ4LDcgQEAKIAljb21wYXRfY2FkZHJfdCBkYXRhOwogfTsKICNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2RlZmluZSBVU0JERVZGU19DT05UUk9MICAgICAgICAgICBfSU9XUignVScsIDAsIHN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIpCiAjZGVmaW5lIFVTQkRFVkZTX0JVTEsgICAgICAgICAgICAgIF9JT1dSKCdVJywgMiwgc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnRfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oCmluZGV4IDFmN2JhMzYuLjA1N2RiN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnRfYnVmZmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC92dF9idWZmZXIuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfTElOVVhfVlRfQlVGRkVSX0hfCiAjZGVmaW5lIF9MSU5VWF9WVF9CVUZGRVJfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpIHx8IGRlZmluZWQoQ09ORklHX01EQV9DT05TT0xFKQogI2luY2x1ZGUgPGFzbS92Z2EuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKaW5kZXggNTMwYWUzZi4uOTQwZDAyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKQEAgLTYsNyArNiw2IEBACiAgKiB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCBieSB0aGUgdnQgcGFja2FnZQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92dC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CkBAIC03MywxMSArNzIsNiBAQAogaW50IHZ0X3dhaXRhY3RpdmUoaW50IHZ0KTsKIHZvaWQgY2hhbmdlX2NvbnNvbGUoc3RydWN0IHZjX2RhdGEgKm5ld192Yyk7CiB2b2lkIHJlc2V0X3ZjKHN0cnVjdCB2Y19kYXRhICp2Yyk7Ci0jaWZkZWYgQ09ORklHX1ZUCi1pbnQgaXNfY29uc29sZV9zdXNwZW5kX3NhZmUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXNfY29uc29sZV9zdXNwZW5kX3NhZmUodm9pZCkgeyByZXR1cm4gMTsgfQotI2VuZGlmCiAKIC8qCiAgKiB2Y19zY3JlZW4uYyBzaGFyZXMgdGhpcyB0ZW1wb3JhcnkgYnVmZmVyIHdpdGggdGhlIGNvbnNvbGUgd3JpdGUgY29kZSBzbyB0aGF0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhaXQuaCBiL2luY2x1ZGUvbGludXgvd2FpdC5oCmluZGV4IGQyODUxODIuLjU0NGU4NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2FpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvd2FpdC5oCkBAIC0xOSw3ICsxOSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmggYi9pbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oCmluZGV4IDFiNmI3NmEuLjJjZDA1MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC93YW5yb3V0ZXIuaApAQCAtNDQsOCArNDQsNiBAQAogKiBKYW4gMDIsIDE5OTcJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24gKGJhc2VkIG9uIHdhbnBpcGUuaCkuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ICAgICAgIC8qIFN1cHBvcnQgZm9yIFNNUCBMb2NraW5nICovCi0KICNpZm5kZWYJX1JPVVRFUl9ICiAjZGVmaW5lCV9ST1VURVJfSAogCkBAIC00NTcsNiArNDU1LDggQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogc3VwcG9ydCBmb3IgZGV2aWNlIGRyaXZlcnMgKi8KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CS8qIHByb2MgZmlsZXN5c3RlbSBwcmFnbWF0aWNzICovCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CS8qIHN1cHBvcnQgZm9yIG5ldHdvcmsgZHJpdmVycyAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ICAgICAvKiBTdXBwb3J0IGZvciBTTVAgTG9ja2luZyAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFdBTiBkZXZpY2UgZGF0YSBzcGFjZS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94ZnJtLmggYi9pbmNsdWRlL2xpbnV4L3hmcm0uaAppbmRleCA2YjQyY2M0Li40NmExNWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hmcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3hmcm0uaApAQCAtMTE4LDYgKzExOCwxMCBAQAogCVhGUk1fU0hBUkVfVU5JUVVFCS8qIFVzZSBvbmNlICovCiB9OwogCisjZGVmaW5lIFhGUk1fTU9ERV9UUkFOU1BPUlQgMAorI2RlZmluZSBYRlJNX01PREVfVFVOTkVMIDEKKyNkZWZpbmUgWEZSTV9NT0RFX01BWCAyCisKIC8qIE5ldGxpbmsgY29uZmlndXJhdGlvbiBtZXNzYWdlcy4gICovCiBlbnVtIHsKIAlYRlJNX01TR19CQVNFID0gMHgxMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaCBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaAppbmRleCBiNTk5NGVhLi4zMTMyOWZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9tdGQtYWJpLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCkBAIC03LDggKzcsOSBAQAogI2lmbmRlZiBfX01URF9BQklfSF9fCiAjZGVmaW5lIF9fTVREX0FCSV9IX18KIAotI2lmbmRlZiBfX0tFUk5FTF9fIC8qIFVyZ2guIFRoZSB3aG9sZSBwb2ludCBvZiBzcGxpdHRpbmcgdGhpcyBvdXQgaW50bwotCQkgICAgc2VwYXJhdGUgZmlsZXMgd2FzIHRvIGF2b2lkICNpZmRlZiBfX0tFUk5FTF9fICovCisjaWZuZGVmIF9fS0VSTkVMX18gCisvKiBVcmdoLiBUaGUgd2hvbGUgcG9pbnQgb2Ygc3BsaXR0aW5nIHRoaXMgb3V0IGludG8KKyAgIHNlcGFyYXRlIGZpbGVzIHdhcyB0byBhdm9pZCAjaWZkZWYgX19LRVJORUxfXyAqLwogI2RlZmluZSBfX3VzZXIKICNlbmRpZgogCkBAIC0yOCwyOCArMjksMTcgQEAKICNkZWZpbmUgTVREX1JPTQkJCTIKICNkZWZpbmUgTVREX05PUkZMQVNICQkzCiAjZGVmaW5lIE1URF9OQU5ERkxBU0gJCTQKLSNkZWZpbmUgTVREX1BFUk9NCQk1CiAjZGVmaW5lIE1URF9EQVRBRkxBU0gJCTYKLSNkZWZpbmUgTVREX09USEVSCQkxNAotI2RlZmluZSBNVERfVU5LTk9XTgkJMTUKIAotI2RlZmluZSBNVERfQ0xFQVJfQklUUwkJMSAgICAgICAvLyBCaXRzIGNhbiBiZSBjbGVhcmVkIChmbGFzaCkKLSNkZWZpbmUgTVREX1NFVF9CSVRTCQkyICAgICAgIC8vIEJpdHMgY2FuIGJlIHNldAotI2RlZmluZSBNVERfRVJBU0VBQkxFCQk0ICAgICAgIC8vIEhhcyBhbiBlcmFzZSBmdW5jdGlvbgotI2RlZmluZSBNVERfV1JJVEVCX1dSSVRFQUJMRQk4ICAgICAgIC8vIERpcmVjdCBJTyBpcyBwb3NzaWJsZQotI2RlZmluZSBNVERfVk9MQVRJTEUJCTE2ICAgICAgLy8gU2V0IGZvciBSQU1zCi0jZGVmaW5lIE1URF9YSVAJCQkzMgkvLyBlWGVjdXRlLUluLVBsYWNlIHBvc3NpYmxlCi0jZGVmaW5lIE1URF9PT0IJCQk2NAkvLyBPdXQtb2YtYmFuZCBkYXRhIChOQU5EIGZsYXNoKQotI2RlZmluZSBNVERfRUNDCQkJMTI4CS8vIERldmljZSBjYXBhYmxlIG9mIGF1dG9tYXRpYyBFQ0MKLSNkZWZpbmUgTVREX05PX1ZJUlRCTE9DS1MJMjU2CS8vIFZpcnR1YWwgYmxvY2tzIG5vdCBhbGxvd2VkCi0jZGVmaW5lIE1URF9QUk9HUkFNX1JFR0lPTlMJNTEyCS8vIENvbmZpZ3VyYWJsZSBQcm9ncmFtbWluZyBSZWdpb25zCisjZGVmaW5lIE1URF9XUklURUFCTEUJCTB4NDAwCS8qIERldmljZSBpcyB3cml0ZWFibGUgKi8KKyNkZWZpbmUgTVREX0JJVF9XUklURUFCTEUJMHg4MDAJLyogU2luZ2xlIGJpdHMgY2FuIGJlIGZsaXBwZWQgKi8KKyNkZWZpbmUgTVREX05PX0VSQVNFCQkweDEwMDAJLyogTm8gZXJhc2UgbmVjZXNzYXJ5ICovCiAKIC8vIFNvbWUgY29tbW9uIGRldmljZXMgLyBjb21iaW5hdGlvbnMgb2YgY2FwYWJpbGl0aWVzCiAjZGVmaW5lIE1URF9DQVBfUk9NCQkwCi0jZGVmaW5lIE1URF9DQVBfUkFNCQkoTVREX0NMRUFSX0JJVFN8TVREX1NFVF9CSVRTfE1URF9XUklURUJfV1JJVEVBQkxFKQotI2RlZmluZSBNVERfQ0FQX05PUkZMQVNIICAgICAgICAoTVREX0NMRUFSX0JJVFN8TVREX0VSQVNFQUJMRSkKLSNkZWZpbmUgTVREX0NBUF9OQU5ERkxBU0ggICAgICAgKE1URF9DTEVBUl9CSVRTfE1URF9FUkFTRUFCTEV8TVREX09PQikKLSNkZWZpbmUgTVREX1dSSVRFQUJMRQkJKE1URF9DTEVBUl9CSVRTfE1URF9TRVRfQklUUykKKyNkZWZpbmUgTVREX0NBUF9SQU0JCShNVERfV1JJVEVBQkxFIHwgTVREX0JJVF9XUklURUFCTEUgfCBNVERfTk9fRVJBU0UpCisjZGVmaW5lIE1URF9DQVBfTk9SRkxBU0gJKE1URF9XUklURUFCTEUgfCBNVERfQklUX1dSSVRFQUJMRSkKKyNkZWZpbmUgTVREX0NBUF9OQU5ERkxBU0gJKE1URF9XUklURUFCTEUpCiAKIAogLy8gVHlwZXMgb2YgYXV0b21hdGljIEVDQy9DaGVja3N1bSBhdmFpbGFibGUKQEAgLTc0LDcgKzY0LDcgQEAKIAl1aW50MzJfdCBmbGFnczsKIAl1aW50MzJfdCBzaXplOwkgLy8gVG90YWwgc2l6ZSBvZiB0aGUgTVRECiAJdWludDMyX3QgZXJhc2VzaXplOwotCXVpbnQzMl90IG9vYmJsb2NrOyAgLy8gU2l6ZSBvZiBPT0IgYmxvY2tzIChlLmcuIDUxMikKKwl1aW50MzJfdCB3cml0ZXNpemU7CiAJdWludDMyX3Qgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQogCXVpbnQzMl90IGVjY3R5cGU7CiAJdWludDMyX3QgZWNjc2l6ZTsKQEAgLTk0LDEyICs4NCwxMiBAQAogCXVpbnQzMl90IGxvY2tlZDsKIH07CiAKLSNkZWZpbmUgTUVNR0VUSU5GTyAgICAgICAgICAgICAgX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQotI2RlZmluZSBNRU1FUkFTRSAgICAgICAgICAgICAgICBfSU9XKCdNJywgMiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKLSNkZWZpbmUgTUVNV1JJVEVPT0IgICAgICAgICAgICAgX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCi0jZGVmaW5lIE1FTVJFQURPT0IgICAgICAgICAgICAgIF9JT1dSKCdNJywgNCwgc3RydWN0IG10ZF9vb2JfYnVmKQotI2RlZmluZSBNRU1MT0NLICAgICAgICAgICAgICAgICBfSU9XKCdNJywgNSwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKLSNkZWZpbmUgTUVNVU5MT0NLICAgICAgICAgICAgICAgX0lPVygnTScsIDYsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTUdFVElORk8JCV9JT1IoJ00nLCAxLCBzdHJ1Y3QgbXRkX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNRVJBU0UJCV9JT1coJ00nLCAyLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorI2RlZmluZSBNRU1XUklURU9PQgkJX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCisjZGVmaW5lIE1FTVJFQURPT0IJCV9JT1dSKCdNJywgNCwgc3RydWN0IG10ZF9vb2JfYnVmKQorI2RlZmluZSBNRU1MT0NLCQkJX0lPVygnTScsIDUsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTVVOTE9DSwkJX0lPVygnTScsIDYsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTUdFVFJFR0lPTkNPVU5UCV9JT1IoJ00nLCA3LCBpbnQpCiAjZGVmaW5lIE1FTUdFVFJFR0lPTklORk8JX0lPV1IoJ00nLCA4LCBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlcikKICNkZWZpbmUgTUVNU0VUT09CU0VMCQlfSU9XKCdNJywgOSwgc3RydWN0IG5hbmRfb29iaW5mbykKQEAgLTEwOSw4ICs5OSwxNSBAQAogI2RlZmluZSBPVFBTRUxFQ1QJCV9JT1IoJ00nLCAxMywgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05DT1VOVAlfSU9XKCdNJywgMTQsIGludCkKICNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTwlfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKLSNkZWZpbmUgT1RQTE9DSwkJX0lPUignTScsIDE2LCBzdHJ1Y3Qgb3RwX2luZm8pCisjZGVmaW5lIE9UUExPQ0sJCQlfSU9SKCdNJywgMTYsIHN0cnVjdCBvdHBfaW5mbykKKyNkZWZpbmUgRUNDR0VUTEFZT1VUCQlfSU9SKCdNJywgMTcsIHN0cnVjdCBuYW5kX2VjY2xheW91dCkKKyNkZWZpbmUgRUNDR0VUU1RBVFMJCV9JT1IoJ00nLCAxOCwgc3RydWN0IG10ZF9lY2Nfc3RhdHMpCisjZGVmaW5lIE1UREZJTEVNT0RFCQlfSU8oJ00nLCAxOSkKIAorLyoKKyAqIE9ic29sZXRlIGxlZ2FjeSBpbnRlcmZhY2UuIEtlZXAgaXQgaW4gb3JkZXIgbm90IHRvIGJyZWFrIHVzZXJzcGFjZQorICogaW50ZXJmYWNlcworICovCiBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKIAl1aW50MzJfdCB1c2VlY2M7CiAJdWludDMyX3QgZWNjYnl0ZXM7CkBAIC0xMTgsNCArMTE1LDQ2IEBACiAJdWludDMyX3QgZWNjcG9zWzMyXTsKIH07CiAKK3N0cnVjdCBuYW5kX29vYmZyZWUgeworCXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCBsZW5ndGg7Cit9OworCisjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTCTgKKy8qCisgKiBFQ0MgbGF5b3V0IGNvbnRyb2wgc3RydWN0dXJlLiBFeHBvcnRlZCB0byB1c2Vyc3BhY2UgZm9yCisgKiBkaWFnbm9zaXMgYW5kIHRvIGFsbG93IGNyZWF0aW9uIG9mIHJhdyBpbWFnZXMKKyAqLworc3RydWN0IG5hbmRfZWNjbGF5b3V0IHsKKwl1aW50MzJfdCBlY2NieXRlczsKKwl1aW50MzJfdCBlY2Nwb3NbNjRdOworCXVpbnQzMl90IG9vYmF2YWlsOworCXN0cnVjdCBuYW5kX29vYmZyZWUgb29iZnJlZVtNVERfTUFYX09PQkZSRUVfRU5UUklFU107Cit9OworCisvKioKKyAqIHN0cnVjdCBtdGRfZWNjX3N0YXRzIC0gZXJyb3IgY29ycmVjdGlvbiBzdGF0dXMKKyAqCisgKiBAY29ycmVjdGVkOgludW1iZXIgb2YgY29ycmVjdGVkIGJpdHMKKyAqIEBmYWlsZWQ6CW51bWJlciBvZiB1bmNvcnJlY3RhYmxlIGVycm9ycworICogQGJhZGJsb2NrczoJbnVtYmVyIG9mIGJhZCBibG9ja3MgaW4gdGhpcyBwYXJ0aXRpb24KKyAqIEBiYnRibG9ja3M6CW51bWJlciBvZiBibG9ja3MgcmVzZXJ2ZWQgZm9yIGJhZCBibG9jayB0YWJsZXMKKyAqLworc3RydWN0IG10ZF9lY2Nfc3RhdHMgeworCXVpbnQzMl90IGNvcnJlY3RlZDsKKwl1aW50MzJfdCBmYWlsZWQ7CisJdWludDMyX3QgYmFkYmxvY2tzOworCXVpbnQzMl90IGJidGJsb2NrczsKK307CisKKy8qCisgKiBSZWFkL3dyaXRlIGZpbGUgbW9kZXMgZm9yIGFjY2VzcyB0byBNVEQKKyAqLworZW51bSBtdGRfZmlsZV9tb2RlcyB7CisJTVREX01PREVfTk9STUFMID0gTVREX09UUF9PRkYsCisJTVREX01PREVfT1RQX0ZBQ1RPUlkgPSBNVERfT1RQX0ZBQ1RPUlksCisJTVREX01PREVfT1RQX1VTRVIgPSBNVERfT1RQX1VTRVIsCisJTVREX01PREVfUkFXLAorfTsKKwogI2VuZGlmIC8qIF9fTVREX0FCSV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC11c2VyLmggYi9pbmNsdWRlL210ZC9tdGQtdXNlci5oCmluZGV4IDFjMTNmYzcuLjcxM2YzNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL210ZC11c2VyLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLXVzZXIuaApAQCAtMTYsNSArMTYsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIGVyYXNlX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIgcmVnaW9uX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYmluZm9fdDsKK3R5cGVkZWYgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfZWNjbGF5b3V0X3Q7CiAKICNlbmRpZiAvKiBfX01URF9VU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaCBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKaW5kZXggNzUwZTI1MC4uM2Q3MTI1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAorKysgYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCkBAIC00NSw3ICs0NSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvaWZfaW5ldDYuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCmluZGV4IDQyN2RhYzkuLjc5NWY4MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaAorKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTElOVVhfTkVUX0FGVU5JWF9ICiAjZGVmaW5lIF9fTElOVVhfTkVUX0FGVU5JWF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC91bi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9heDI1LmggYi9pbmNsdWRlL25ldC9heDI1LmgKaW5kZXggNWJkOTk3NC4uN2NkNTI4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXgyNS5oCisrKyBiL2luY2x1ZGUvbmV0L2F4MjUuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX0FYMjVfSAogI2RlZmluZSBfQVgyNV9IIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYXgyNS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQvY29tcGF0LmgKaW5kZXggODY2MmI4Zi4uOTg1OWI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9uZXQvY29tcGF0LmgKQEAgLTEsNyArMSw4IEBACiAjaWZuZGVmIE5FVF9DT01QQVRfSAogI2RlZmluZSBORVRfQ09NUEFUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCitzdHJ1Y3Qgc29jazsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkKIApAQCAtMjMsNyArMjQsNiBAQAogCWNvbXBhdF9pbnRfdAljbXNnX3R5cGU7CiB9OwogCi1zdHJ1Y3Qgc29jazsKIGV4dGVybiBpbnQgY29tcGF0X3NvY2tfZ2V0X3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKik7CiAKICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdC5oIGIvaW5jbHVkZS9uZXQvZHN0LmgKaW5kZXggNTE2MWU4OS4uMzZkNTRmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHN0LmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0LmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9ORVRfRFNUX0gKICNkZWZpbmUgX05FVF9EU1RfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ljbXAuaCBiL2luY2x1ZGUvbmV0L2ljbXAuaAppbmRleCBlN2MzZjIwLi4wNWY4ZmY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pY21wLmgKKysrIGIvaW5jbHVkZS9uZXQvaWNtcC5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9JQ01QX0gKICNkZWZpbmUJX0lDTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcC5oPgogCiAjaW5jbHVkZSA8bmV0L2luZXRfc29jay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAppbmRleCBkNTkyNmJmLi5kNTE0Nzc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBBUlJBWV9TSVpFICovCiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KIAotI2RlZmluZSBJRUVFODAyMTFfVkVSU0lPTiAiZ2l0LTEuMS43IgorI2RlZmluZSBJRUVFODAyMTFfVkVSU0lPTiAiZ2l0LTEuMS4xMyIKIAogI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4JCTIzMDQKIC8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KQEAgLTEwNCw2ICsxMDQsOSBAQAogI2RlZmluZSBJRUVFODAyMTFfU0NUTF9GUkFHCQkweDAwMEYKICNkZWZpbmUgSUVFRTgwMjExX1NDVExfU0VRCQkweEZGRjAKIAorLyogUU9TIGNvbnRyb2wgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1FDVExfVElECQkweDAwMEYKKwogLyogZGVidWcgbWFjcm9zICovCiAKICNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCkBAIC0xMDc1LDYgKzEwNzgsNyBAQAogCiAJaW50ICgqaGFuZGxlX21hbmFnZW1lbnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmssIHUxNiB0eXBlKTsKKwlpbnQgKCppc19xb3NfYWN0aXZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIAkvKiBUeXBpY2FsIFNUQSBtZXRob2RzICovCiAJaW50ICgqaGFuZGxlX2F1dGgpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKQEAgLTEyNDMsNyArMTI0Nyw4IEBACiBleHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogZXh0ZXJuIGludCBpZWVlODAyMTFfdHhfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZnJhbWUsIGludCBsZW4pOworCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmZyYW1lLCBpbnQgaGRyX2xlbiwKKwkJCSAgICAgIGludCB0b3RhbF9sZW4sIGludCBlbmNyeXB0X21wZHUpOwogCiAvKiBpZWVlODAyMTFfcnguYyAqLwogZXh0ZXJuIGludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKaW5kZXggMDUyZWQ1OS4uN2E0ODNhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaApAQCAtODYsNiArODYsOSBAQAogCQogCS8qIEJTU0lEIHdlJ3JlIHRyeWluZyB0byBhc3NvY2lhdGUgdG8gKi8KIAljaGFyIGJzc2lkW0VUSF9BTEVOXTsKKworCS8qIFJhdGVzIHN1cHBvcnRlZCBieSB0aGUgbmV0d29yayAqLworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyBzdXBwb3J0ZWRfcmF0ZXM7CiAJCiAJLyogc29tZSBmbGFncy4KIAkgKiBzdGF0aWNfZXNzaWQgaXMgdmFsaWQgaWYgdGhlIGVzc2lkIGlzIGNvbnN0YW50LApAQCAtMTMyLDIzICsxMzUsMjYgQEAKIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgewogCS8qIFRoZSBCaXQtUmF0ZSB0byBiZSB1c2VkIGZvciBtdWx0aWNhc3QgZnJhbWVzLiAqLwogCXU4IG1jYXN0X3JhdGU7Ci0JLyogVGhlIEJpdC1SYXRlIHRvIGJlIHVzZWQgZm9yIG11bHRpY2FzdCBmYWxsYmFjawotCSAqIChJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGZhbGxiYWNrIGFuZCBoYXJkd2FyZS1yZXRyeSkKLQkgKi8KLQl1OCBtY2FzdF9mYWxsYmFjazsKKworCS8qIFRoZSBCaXQtUmF0ZSB0byBiZSB1c2VkIGZvciBtdWx0aWNhc3QgbWFuYWdlbWVudCBmcmFtZXMuICovCisJdTggbWd0X21jYXN0X3JhdGU7CisKIAkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgYW55IG90aGVyIChub3JtYWwpIGRhdGEgcGFja2V0LiAqLwogCXU4IGRlZmF1bHRfcmF0ZTsKIAkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgZGVmYXVsdCBmYWxsYmFjawogCSAqIChJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGZhbGxiYWNrIGFuZCBoYXJkd2FyZS1yZXRyeSkKIAkgKi8KIAl1OCBkZWZhdWx0X2ZhbGxiYWNrOworCisJLyogVGhpcyBpcyB0aGUgcmF0ZSB0aGF0IHRoZSB1c2VyIGFza2VkIGZvciAqLworCXU4IHVzZXJfcmF0ZTsKIH07CiAKIC8qIEJpdHMgZm9yIHR4cmF0ZXNfY2hhbmdlIGNhbGxiYWNrLiAqLwogI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUCQkoMSA8PCAwKSAvKiBkZWZhdWx0X3JhdGUgKi8KICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSwkoMSA8PCAxKSAvKiBkZWZhdWx0X2ZhbGxiYWNrICovCiAjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01DQVNUCQkoMSA8PCAyKSAvKiBtY2FzdF9yYXRlICovCi0jZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01DQVNUX0ZCQUNLCQkoMSA8PCAzKSAvKiBtY2FzdF9mYWxsYmFjayAqLworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19NR1RfTUNBU1QJCSgxIDw8IDMpIC8qIG1ndF9tY2FzdF9yYXRlICovCiAKIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSB7CiAJLyogODAyLjExIHN0cnVjdHVyZSBmb3IgZGF0YSBzdHVmZiAqLwpAQCAtMjUwLDYgKzI1NiwyOCBAQAogICogTm90ZSB0aGF0IHRoZSByYXRlcyBuZWVkIHRvIGJlIHNvcnRlZC4gKi8KIGV4dGVybiB2b2lkIGllZWU4MDIxMXNvZnRtYWNfc2V0X3JhdGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNvdW50LCB1OCAqcmF0ZXMpOwogCisvKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYWR2aXNlcyB5b3UgdGhlIHJhdGUgYXQgd2hpY2ggYSBmcmFtZSBzaG91bGQgYmUKKyAqIHRyYW5zbWl0dGVkIGF0LiAqLworc3RhdGljIGlubGluZSB1OCBpZWVlODAyMTFzb2Z0bWFjX3N1Z2dlc3RfdHhyYXRlKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCQkJCQkJIGludCBpc19tdWx0aWNhc3QsCisJCQkJCQkgaW50IGlzX21ndCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzICp0eHJhdGVzID0gJm1hYy0+dHhyYXRlczsKKworCWlmICghbWFjLT5hc3NvY2lhdGVkKQorCQlyZXR1cm4gdHhyYXRlcy0+bWd0X21jYXN0X3JhdGU7CisKKwkvKiBXZSBhcmUgYXNzb2NpYXRlZCwgc2VuZGluZyB1bmljYXN0IGZyYW1lICovCisJaWYgKCFpc19tdWx0aWNhc3QpCisJCXJldHVybiB0eHJhdGVzLT5kZWZhdWx0X3JhdGU7CisKKwkvKiBXZSBhcmUgYXNzb2NpYXRlZCwgc2VuZGluZyBtdWx0aWNhc3QgZnJhbWUgKi8KKwlpZiAoaXNfbWd0KQorCQlyZXR1cm4gdHhyYXRlcy0+bWd0X21jYXN0X3JhdGU7CisJZWxzZQorCQlyZXR1cm4gdHhyYXRlcy0+bWNhc3RfcmF0ZTsKK30KKwogLyogU3RhcnQgdGhlIFNvZnRNQUMuIENhbGwgdGhpcyBhZnRlciB5b3UgaW5pdGlhbGl6ZWQgdGhlIGRldmljZQogICogYW5kIGl0IGlzIHJlYWR5IHRvIHJ1bi4KICAqLwpAQCAtMjgyLDcgKzMxMCw3IEBACiAgKgktIGNvbnRleHQgc2V0IHRvIHRoZSBjb250ZXh0IGRhdGEgeW91IHdhbnQgcGFzc2VkCiAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIDAsIG9yIGFuIGVycm9yLgogICovCi10eXBlZGVmIHZvaWQgKCpub3RpZnlfZnVuY3Rpb25fcHRyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpjb250ZXh0KTsKK3R5cGVkZWYgdm9pZCAoKm5vdGlmeV9mdW5jdGlvbl9wdHIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBldmVudF90eXBlLCB2b2lkICpjb250ZXh0KTsKIAogI2RlZmluZSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeShkZXYsIGV2ZW50LCBmdW4sIGNvbnRleHQpIGllZWU4MDIxMXNvZnRtYWNfbm90aWZ5X2dmcChkZXYsIGV2ZW50LCBmdW4sIGNvbnRleHQsIEdGUF9LRVJORUwpOwogI2RlZmluZSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9hdG9taWMoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0KSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9nZnAoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0LCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWNfd3guaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWNfd3guaAppbmRleCAzZTBiZTQ1Li40ZWUzYWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjX3d4LmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hY193eC5oCkBAIC05MSw0ICs5MSw5IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKIAkJCSAgICAgIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfc2V0X21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCSAgICAgY2hhciAqZXh0cmEpOwogI2VuZGlmIC8qIF9JRUVFODAyMTFTT0ZUTUFDX1dYICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKaW5kZXggNTlmMGM4My4uYmM2YTcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfSU5FVDZfSEFTSFRBQkxFU19ICiAjZGVmaW5lIF9JTkVUNl9IQVNIVEFCTEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAppbmRleCAxMzVkODBmLi45OGUwYmIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfSU5FVF9IQVNIVEFCTEVTX0gKICNkZWZpbmUgX0lORVRfSEFTSFRBQkxFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggODgzZWI1Mi4uMWY0YTlhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpZm5kZWYgX0lORVRfU09DS19ICiAjZGVmaW5lIF9JTkVUX1NPQ0tfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAppbmRleCBlODM3Zjk4Li42MDBjYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfSU5FVF9USU1FV0FJVF9TT0NLXwogI2RlZmluZSBfSU5FVF9USU1FV0FJVF9TT0NLXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCAzZDJlNWNhLi45OGY5MDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgX0lQX0gKICNkZWZpbmUgX0lQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgpAQCAtMTQ3LDcgKzE0Niw2IEBACiBzdHJ1Y3QgaXB2NF9jb25maWcKIHsKIAlpbnQJbG9nX21hcnRpYW5zOwotCWludAlhdXRvY29uZmlnOwogCWludAlub19wbXR1X2Rpc2M7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9maWIuaCBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCmluZGV4IGUwMDBmYTIuLmEwOTVkMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIF9ORVRfSVBfRklCX0gKICNkZWZpbmUgX05FVF9JUF9GSUJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaCBiL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oCmluZGV4IDc3MjI1NzMuLmFjNzQ3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfTkVUX0lQX01QX0FMR19ICiAjZGVmaW5lIF9ORVRfSVBfTVBfQUxHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwX21wX2FsZy5oPgogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA3ZDI2NzRmLi4zYjU3YjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTI0OCw3ICsyNDgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPiAgICAgICAgICAgICAgICAgLyogZm9yIHN0cnVjdCBsaXN0X2hlYWQgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPiAgICAgICAgICAgICAvKiBmb3Igc3RydWN0IHJ3bG9ja190ICovCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPiAgICAgICAgICAgICAgICAgLyogZm9yIHN0cnVjdCBhdG9taWNfdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCmluZGV4IDRhYmVkYjguLmE4ZmRmNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9pcHY2LmgKQEAgLTEwNCw3ICsxMDQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogLyogc3lzY3RscyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaAppbmRleCAxODgwZTQ2Li4xY2IwNjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBORVRfSVJEQV9ICiAjZGVmaW5lIE5FVF9JUkRBX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgkJLyogc3RydWN0IHNrX2J1ZmYgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgkJCS8qIHNhX2ZhbWlseV90IGluIDxsaW51eC9pcmRhLmg+ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmgKaW5kZXggOTJjODI4MC4uMDU3NWM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaApAQCAtMzksNyArMzksNiBAQAogI2lmbmRlZiBJUkRBX0RFVklDRV9ICiAjZGVmaW5lIElSREFfREVWSUNFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmgKaW5kZXggMjEyN2NhZS4uZTc3ZWI4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaApAQCAtMjcsNyArMjcsNiBAQAogI2lmbmRlZiBJUkxBUF9ICiAjZGVmaW5lIElSTEFQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKaW5kZXggYzBjODk1ZC4uMTFlY2ZhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaApAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAvKiBmb3IgSFogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmgKaW5kZXggZWIzYWQxNS4uYzQ2M2Y4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZnJhbWUuaApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBJUk1MUF9GUkFNRV9ICiAjZGVmaW5lIElSTUxQX0ZSQU1FX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvZGlzY292ZXJ5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oIGIvaW5jbHVkZS9uZXQvaXJkYS9xb3MuaAppbmRleCA5YWUzZDZiLi5jYzU3N2RjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvcW9zLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpZm5kZWYgSVJEQV9RT1NfSAogI2RlZmluZSBJUkRBX1FPU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL3BhcmFtZXRlcnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19pZi5oIGIvaW5jbHVkZS9uZXQvbGxjX2lmLmgKaW5kZXggMDkwZWFhMC4uYzYwODgxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX2lmLmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX2lmLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2xsYy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2xsYy5oPgogCiAjZGVmaW5lIExMQ19EQVRBVU5JVF9QUklNCTEKQEAgLTYxLDggKzYyLDYgQEAKICNkZWZpbmUgTExDX1NUQVRVU19DT05GTElDVAk3IC8qIGRpc2Nvbm5lY3QgY29ubiAqLwogI2RlZmluZSBMTENfU1RBVFVTX1JFU0VUX0RPTkUJOCAvKiAgKi8KIAotZXh0ZXJuIHU4IGxsY19tYWNfbnVsbF92YXJbSUZIV0FERFJMRU5dOwotCiAvKioKICAqICAgICAgbGxjX21hY19udWxsIC0gZGV0ZXJtaW5lcyBpZiBhIGFkZHJlc3MgaXMgYSBudWxsIG1hYyBhZGRyZXNzCiAgKiAgICAgIEBtYWM6IE1hYyBhZGRyZXNzIHRvIHRlc3QgaWYgbnVsbC4KQEAgLTcwLDE2ICs2OSwyMCBAQAogICogICAgICBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gYWRkcmVzcyBpcyBhIG51bGwgbWFjIGFkZHJlc3MuICBSZXR1cm5zIDAgaWYgdGhlCiAgKiAgICAgIGFkZHJlc3MgaXMgbm90IGEgbnVsbCBtYWMsIDEgaWYgdGhlIGFkZHJlc3MgaXMgYSBudWxsIG1hYy4KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IGxsY19tYWNfbnVsbCh1OCAqbWFjKQorc3RhdGljIGlubGluZSBpbnQgbGxjX21hY19udWxsKGNvbnN0IHU4ICptYWMpCiB7Ci0JcmV0dXJuICFtZW1jbXAobWFjLCBsbGNfbWFjX251bGxfdmFyLCBJRkhXQUREUkxFTik7CisJcmV0dXJuIGlzX3plcm9fZXRoZXJfYWRkcihtYWMpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgbGxjX2FkZHJhbnkoc3RydWN0IGxsY19hZGRyICphZGRyKQorc3RhdGljIGlubGluZSBpbnQgbGxjX2FkZHJhbnkoY29uc3Qgc3RydWN0IGxsY19hZGRyICphZGRyKQogewogCXJldHVybiBsbGNfbWFjX251bGwoYWRkci0+bWFjKSAmJiAhYWRkci0+bHNhcDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbGxjX21hY19tdWx0aWNhc3QoY29uc3QgdTggKm1hYykKK3sKKwlyZXR1cm4gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWFjKTsKK30KIC8qKgogICoJbGxjX21hY19tYXRjaCAtIGRldGVybWluZXMgaWYgdHdvIG1hYyBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lCiAgKglAbWFjMTogRmlyc3QgbWFjIGFkZHJlc3MgdG8gY29tcGFyZS4KQEAgLTg5LDkgKzkyLDkgQEAKICAqCWlzIG5vdCBhIGNvbXBsZXRlIG1hdGNoIHVwIHRvIGxlbiwgMSBpZiBhIGNvbXBsZXRlIG1hdGNoIHVwIHRvIGxlbiBpcwogICoJZm91bmQuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBsbGNfbWFjX21hdGNoKHU4ICptYWMxLCB1OCAqbWFjMikKK3N0YXRpYyBpbmxpbmUgaW50IGxsY19tYWNfbWF0Y2goY29uc3QgdTggKm1hYzEsIGNvbnN0IHU4ICptYWMyKQogewotCXJldHVybiAhbWVtY21wKG1hYzEsIG1hYzIsIElGSFdBRERSTEVOKTsKKwlyZXR1cm4gIWNvbXBhcmVfZXRoZXJfYWRkcihtYWMxLCBtYWMyKTsKIH0KIAogZXh0ZXJuIGludCBsbGNfZXN0YWJsaXNoX2Nvbm5lY3Rpb24oc3RydWN0IHNvY2sgKnNrLCB1OCAqbG1hYywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25kaXNjLmggYi9pbmNsdWRlL25ldC9uZGlzYy5oCmluZGV4IDkxZmEyNzEuLmQzOTE1ZGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRkbWEuaCBiL2luY2x1ZGUvbmV0L25ldGRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NzYwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRkbWEuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDQgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworI2lmbmRlZiBORVRETUFfSAorI2RlZmluZSBORVRETUFfSAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19ORVRfRE1BCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9jaGFuICpnZXRfc29mdG5ldF9kbWEodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJcmN1X3JlYWRfbG9jaygpOworCWNoYW4gPSByY3VfZGVyZWZlcmVuY2UoX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEubmV0X2RtYSkpOworCWlmIChjaGFuKQorCQlkbWFfY2hhbl9nZXQoY2hhbik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGNoYW47Cit9CisKK2ludCBkbWFfc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc3RydWN0IGRtYV9jaGFuKiBjaGFuLAorCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBzdHJ1Y3QgaW92ZWMgKnRvLAorCQlzaXplX3QgbGVuLCBzdHJ1Y3QgZG1hX3Bpbm5lZF9saXN0ICpwaW5uZWRfbGlzdCk7CisKKyNlbmRpZiAvKiBDT05GSUdfTkVUX0RNQSAqLworI2VuZGlmIC8qIE5FVERNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggOTE2MDEzYy4uMWZiZDgxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0xMTQsNiArMTEzLDEwIEBACiAJdV9pbnQzMl90IG1hcms7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSworCXVfaW50MzJfdCBzZWNtYXJrOworI2VuZGlmCisKIAkvKiBTdG9yYWdlIHJlc2VydmVkIGZvciBvdGhlciBtb2R1bGVzOiAqLwogCXVuaW9uIG5mX2Nvbm50cmFja19wcm90byBwcm90bzsKIApAQCAtMjg1LDYgKzI4OCw3IEBACiB9CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworZXh0ZXJuIGludCBuZl9jb25udHJhY2tfY2hlY2tzdW07CiAKICNkZWZpbmUgTkZfQ1RfU1RBVF9JTkMoY291bnQpIChfX2dldF9jcHVfdmFyKG5mX2Nvbm50cmFja19zdGF0KS5jb3VudCsrKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21wYXQuaAppbmRleCAzY2FjMTlmLi5mMWIxNDgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0LmgKQEAgLTIwLDYgKzIwLDE5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLICovCiAKKyNpZmRlZiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NFQ01BUksKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90ICpuZl9jdF9nZXRfc2VjbWFyayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICB1X2ludDMyX3QgKmN0aW5mbykKK3sKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCA9IGlwX2Nvbm50cmFja19nZXQoc2tiLCBjdGluZm8pOworCisJaWYgKGN0KQorCQlyZXR1cm4gJmN0LT5zZWNtYXJrOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0lQX05GX0NPTk5UUkFDS19TRUNNQVJLICovCisKICNpZmRlZiBDT05GSUdfSVBfTkZfQ1RfQUNDVAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfY29ubnRyYWNrX2NvdW50ZXIgKgogbmZfY3RfZ2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCkBAIC03MCw2ICs4MywxOSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyAqLwogCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdCAqbmZfY3RfZ2V0X3NlY21hcmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgdV9pbnQzMl90ICpjdGluZm8pCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgY3RpbmZvKTsKKworCWlmIChjdCkKKwkJcmV0dXJuICZjdC0+c2VjbWFyazsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyAqLworCiAjaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyICoKIG5mX2N0X2dldF9jb3VudGVycyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2FjdC5oIGIvaW5jbHVkZS9uZXQvcGt0X2FjdC5oCmluZGV4IGIyMjVkODQuLmNmNWU0ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9hY3QuaAorKysgYi9pbmNsdWRlL25ldC9wa3RfYWN0LmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaCBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKaW5kZXggNmRjNTk3MC4uYmNhZWUzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaAorKysgYi9pbmNsdWRlL25ldC9wcm90b2NvbC5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaWZuZGVmIF9QUk9UT0NPTF9ICiAjZGVmaW5lIF9QUk9UT0NPTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmF3LmggYi9pbmNsdWRlL25ldC9yYXcuaAppbmRleCBlNjdiMjhhLi5lNGFmNTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yYXcuaAorKysgYi9pbmNsdWRlL25ldC9yYXcuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfUkFXX0gKICNkZWZpbmUgX1JBV19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogCkBAIC0zNiw3ICszNSw3IEBACiAKIAogZXh0ZXJuIHN0cnVjdCBzb2NrICpfX3Jhd192NF9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBudW0sCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgcmFkZHIsIHVuc2lnbmVkIGxvbmcgbGFkZHIsCisJCQkJICAgIF9fYmUzMiByYWRkciwgX19iZTMyIGxhZGRyLAogCQkJCSAgICBpbnQgZGlmKTsKIAogZXh0ZXJuIGludCByYXdfdjRfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsIGludCBoYXNoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlZC5oIGIvaW5jbHVkZS9uZXQvcmVkLmgKaW5kZXggMmVkNDM1OC4uNWNjZGJiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcmVkLmgKKysrIGIvaW5jbHVkZS9uZXQvcmVkLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTkVUX1NDSEVEX1JFRF9ICiAjZGVmaW5lIF9fTkVUX1NDSEVEX1JFRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9lY24uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9pbmNsdWRlL25ldC9yb3V0ZS5oCmluZGV4IDk4YzkxNWEuLmM0YTA2ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfUk9VVEVfSAogI2RlZmluZSBfUk9VVEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9pbmV0cGVlci5oPgogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCA3YjZlYzk5Li5iMGU5MTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTkVUX1NDSEVEX0dFTkVSSUNfSAogI2RlZmluZSBfX05FVF9TQ0hFRF9HRU5FUklDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggYWE2MDMzYy4uMjM3ZjgyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTYzLDcgKzYzLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIFRFU1RfRlJBTUUKICN1bmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMjU1LDcgKzI1NCw3IEBACiAjZGVmaW5lIFNDVFBfREVCVUdfUFJJTlRLX0lQQUREUih3aGF0ZXZlci4uLikKICNkZWZpbmUgU0NUUF9FTkFCTEVfREVCVUcKICNkZWZpbmUgU0NUUF9ESVNBQkxFX0RFQlVHCi0jZGVmaW5lIFNDVFBfQVNTRVJUKGV4cHIsIHN0ciwgZnVuYykKKyNkZWZpbmUgU0NUUF9BU1NFUlQoZXhwciwgc3RyLCBmdW5jKSBCVUdfT04oIShleHByKSkKIAogI2VuZGlmIC8qIFNDVFBfREVCVUcgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCA3ZjRmZWExLi41ZjY5MTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtNTU1LDcgKzU1NSw4IEBACiAJaW50CQkoKnRvX2FkZHJfcGFyYW0pIChjb25zdCB1bmlvbiBzY3RwX2FkZHIgKiwKIAkJCQkJICB1bmlvbiBzY3RwX2FkZHJfcGFyYW0gKik7IAogCWludAkJKCphZGRyX3ZhbGlkKQkodW5pb24gc2N0cF9hZGRyICosCi0JCQkJCSBzdHJ1Y3Qgc2N0cF9zb2NrICopOworCQkJCQkgc3RydWN0IHNjdHBfc29jayAqLAorCQkJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKik7CiAJc2N0cF9zY29wZV90CSgqc2NvcGUpICh1bmlvbiBzY3RwX2FkZHIgKik7CiAJdm9pZAkJKCppbmFkZHJfYW55KQkodW5pb24gc2N0cF9hZGRyICosIHVuc2lnbmVkIHNob3J0KTsKIAlpbnQJCSgqaXNfYW55KQkoY29uc3QgdW5pb24gc2N0cF9hZGRyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGM5ZmFkNmYuLmQxMGRmZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTQwLDcgKzQwLDYgQEAKICNpZm5kZWYgX1NPQ0tfSAogI2RlZmluZSBfU09DS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgpAQCAtMTMyLDYgKzEzMSw3IEBACiAgICoJQHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHMKICAgKglAc2tfd21lbV9hbGxvYzogdHJhbnNtaXQgcXVldWUgYnl0ZXMgY29tbWl0dGVkCiAgICoJQHNrX3dyaXRlX3F1ZXVlOiBQYWNrZXQgc2VuZGluZyBxdWV1ZQorICAqCUBza19hc3luY193YWl0X3F1ZXVlOiBETUEgY29waWVkIHBhY2tldHMKICAgKglAc2tfb21lbV9hbGxvYzogIm8iIGlzICJvcHRpb24iIG9yICJvdGhlciIKICAgKglAc2tfd21lbV9xdWV1ZWQ6IHBlcnNpc3RlbnQgcXVldWUgc2l6ZQogICAqCUBza19mb3J3YXJkX2FsbG9jOiBzcGFjZSBhbGxvY2F0ZWQgZm9yd2FyZApAQCAtMjA1LDYgKzIwNSw3IEBACiAJYXRvbWljX3QJCXNrX29tZW1fYWxsb2M7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlza19yZWNlaXZlX3F1ZXVlOwogCXN0cnVjdCBza19idWZmX2hlYWQJc2tfd3JpdGVfcXVldWU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlza19hc3luY193YWl0X3F1ZXVlOwogCWludAkJCXNrX3dtZW1fcXVldWVkOwogCWludAkJCXNrX2ZvcndhcmRfYWxsb2M7CiAJZ2ZwX3QJCQlza19hbGxvY2F0aW9uOwpAQCAtODcxLDEwICs4NzIsNyBAQAogCQlpZiAoZmlsdGVyKSB7CiAJCQl1bnNpZ25lZCBpbnQgcGt0X2xlbiA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLAogCQkJCQkJCSAgICAgZmlsdGVyLT5sZW4pOwotCQkJaWYgKCFwa3RfbGVuKQotCQkJCWVyciA9IC1FUEVSTTsKLQkJCWVsc2UKLQkJCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOworCQkJZXJyID0gcGt0X2xlbiA/IHBza2JfdHJpbShza2IsIHBrdF9sZW4pIDogLUVQRVJNOwogCQl9CiAKIAkJaWYgKG5lZWRsb2NrKQpAQCAtMTI3MSwxMSArMTI2OSwyMiBAQAogICogVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBvciB3aXRoIHRoZSBzb2NrZXQKICAqIGxvY2tlZCBzbyB0aGF0IHRoZSBza19idWZmIHF1ZXVlIG9wZXJhdGlvbiBpcyBvay4KICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2tfZWF0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCisjaWZkZWYgQ09ORklHX05FVF9ETUEKK3N0YXRpYyBpbmxpbmUgdm9pZCBza19lYXRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGNvcGllZF9lYXJseSkKK3sKKwlfX3NrYl91bmxpbmsoc2tiLCAmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCWlmICghY29waWVkX2Vhcmx5KQorCQlfX2tmcmVlX3NrYihza2IpOworCWVsc2UKKwkJX19za2JfcXVldWVfdGFpbCgmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUsIHNrYik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNrX2VhdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY29waWVkX2Vhcmx5KQogewogCV9fc2tiX3VubGluayhza2IsICZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJX19rZnJlZV9za2Ioc2tiKTsKIH0KKyNlbmRpZgogCiBleHRlcm4gdm9pZCBzb2NrX2VuYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgc29ja19nZXRfdGltZXN0YW1wKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggM2M5ODlkYi4uNWY0ZWI1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTIxLDEzICsyMSwxMyBAQAogI2RlZmluZSBUQ1BfREVCVUcgMQogI2RlZmluZSBGQVNUUkVUUkFOU19ERUJVRyAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAKICNpbmNsdWRlIDxuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD4KICNpbmNsdWRlIDxuZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg+CkBAIC0yMTgsNiArMjE4LDcgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF90d19yZXVzZTsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9mcnRvOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX2xvd19sYXRlbmN5OworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2RtYV9jb3B5YnJlYWs7CiBleHRlcm4gaW50IHN5c2N0bF90Y3Bfbm9tZXRyaWNzX3NhdmU7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfbW9kZXJhdGVfcmN2YnVmOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcjsKQEAgLTIyNSw2ICsyMjYsNyBAQAogZXh0ZXJuIGludCBzeXNjdGxfdGNwX210dV9wcm9iaW5nOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX2Jhc2VfbXNzOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX3dvcmthcm91bmRfc2lnbmVkX3dpbmRvd3M7CitleHRlcm4gaW50IHN5c2N0bF90Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlOwogCiBleHRlcm4gYXRvbWljX3QgdGNwX21lbW9yeV9hbGxvY2F0ZWQ7CiBleHRlcm4gYXRvbWljX3QgdGNwX3NvY2tldHNfYWxsb2NhdGVkOwpAQCAtMjkzLDYgKzI5NSw4IEBACiAKIGV4dGVybiB2b2lkCQkJdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc3RydWN0IHNvY2sgKnNrKTsKIAorZXh0ZXJuIHZvaWQJCQl0Y3BfY2xlYW51cF9yYnVmKHN0cnVjdCBzb2NrICpzaywgaW50IGNvcGllZCk7CisKIGV4dGVybiBpbnQJCQl0Y3BfdHdza191bmlxdWUoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJc3RydWN0IHNvY2sgKnNrdHcsIHZvaWQgKnR3cCk7CiAKQEAgLTYyOCw3ICs2MzIsNyBAQAogCS8qIHJldHVybiBzbG93IHN0YXJ0IHRocmVzaG9sZCAocmVxdWlyZWQpICovCiAJdTMyICgqc3N0aHJlc2gpKHN0cnVjdCBzb2NrICpzayk7CiAJLyogbG93ZXIgYm91bmQgZm9yIGNvbmdlc3Rpb24gd2luZG93IChvcHRpb25hbCkgKi8KLQl1MzIgKCptaW5fY3duZCkoc3RydWN0IHNvY2sgKnNrKTsKKwl1MzIgKCptaW5fY3duZCkoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTsKIAkvKiBkbyBuZXcgY3duZCBjYWxjdWxhdGlvbiAocmVxdWlyZWQpICovCiAJdm9pZCAoKmNvbmdfYXZvaWQpKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywKIAkJCSAgIHUzMiBydHQsIHUzMiBpbl9mbGlnaHQsIGludCBnb29kX2Fjayk7CkBAIC02NjMsNyArNjY3LDcgQEAKIGV4dGVybiB1MzIgdGNwX3Jlbm9fc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiB2b2lkIHRjcF9yZW5vX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLAogCQkJCXUzMiBydHQsIHUzMiBpbl9mbGlnaHQsIGludCBmbGFnKTsKLWV4dGVybiB1MzIgdGNwX3Jlbm9fbWluX2N3bmQoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB1MzIgdGNwX3Jlbm9fbWluX2N3bmQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHRjcF9yZW5vOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3NldF9jYV9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHU4IGNhX3N0YXRlKQpAQCAtODE3LDYgKzgyMSwxMiBAQAogCXRwLT51Y29weS5sZW4gPSAwOwogCXRwLT51Y29weS5tZW1vcnkgPSAwOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnRwLT51Y29weS5wcmVxdWV1ZSk7CisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwl0cC0+dWNvcHkuZG1hX2NoYW4gPSBOVUxMOworCXRwLT51Y29weS53YWtldXAgPSAwOworCXRwLT51Y29weS5waW5uZWRfbGlzdCA9IE5VTEw7CisJdHAtPnVjb3B5LmRtYV9jb29raWUgPSAwOworI2VuZGlmCiB9CiAKIC8qIFBhY2tldCBpcyBhZGRlZCB0byBWSi1zdHlsZSBwcmVxdWV1ZSBmb3IgcHJvY2Vzc2luZyBpbiBwcm9jZXNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKaW5kZXggYWZhNTA4ZC4uOWM1ZWU5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPG5ldC9pcDZfZmliLmg+CiAKICNkZWZpbmUgWEZSTV9BTElHTjgobGVuKQkoKChsZW4pICsgNykgJiB+NykKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX1hGUk1fTU9ERShmYW1pbHksIGVuY2FwKSBcCisJTU9EVUxFX0FMSUFTKCJ4ZnJtLW1vZGUtIiBfX3N0cmluZ2lmeShmYW1pbHkpICItIiBfX3N0cmluZ2lmeShlbmNhcCkpCiAKIGV4dGVybiBzdHJ1Y3Qgc29jayAqeGZybV9ubDsKIGV4dGVybiB1MzIgc3lzY3RsX3hmcm1fYWV2ZW50X2V0aW1lOwpAQCAtMTY0LDYgKzE2Niw3IEBACiAJLyogUmVmZXJlbmNlIHRvIGRhdGEgY29tbW9uIHRvIGFsbCB0aGUgaW5zdGFuY2VzIG9mIHRoaXMKIAkgKiB0cmFuc2Zvcm1lci4gKi8KIAlzdHJ1Y3QgeGZybV90eXBlCSp0eXBlOworCXN0cnVjdCB4ZnJtX21vZGUJKm1vZGU7CiAKIAkvKiBTZWN1cml0eSBjb250ZXh0ICovCiAJc3RydWN0IHhmcm1fc2VjX2N0eAkqc2VjdXJpdHk7CkBAIC0yMDQsOCArMjA3LDggQEAKIHN0cnVjdCB4ZnJtX2RzdDsKIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gewogCXVuc2lnbmVkIHNob3J0CQlmYW1pbHk7Ci0Jcndsb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IHhmcm1fdHlwZV9tYXAJKnR5cGVfbWFwOworCXN0cnVjdCB4ZnJtX3R5cGUJKnR5cGVfbWFwW0lQUFJPVE9fTUFYXTsKKwlzdHJ1Y3QgeGZybV9tb2RlCSptb2RlX21hcFtYRlJNX01PREVfTUFYXTsKIAlzdHJ1Y3QgZHN0X29wcwkJKmRzdF9vcHM7CiAJdm9pZAkJCSgqZ2FyYmFnZV9jb2xsZWN0KSh2b2lkKTsKIAlpbnQJCQkoKmRzdF9sb29rdXApKHN0cnVjdCB4ZnJtX2RzdCAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCk7CkBAIC0yMzIsNyArMjM1LDYgQEAKIAogc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvIHsKIAl1bnNpZ25lZCBzaG9ydAkJZmFtaWx5OwotCXJ3bG9ja190CQlsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJKnN0YXRlX2J5ZHN0OwogCXN0cnVjdCBsaXN0X2hlYWQJKnN0YXRlX2J5c3BpOwogCWludAkJCSgqaW5pdF9mbGFncykoc3RydWN0IHhmcm1fc3RhdGUgKngpOwpAQCAtMjY0LDE2ICsyNjYsMjQgQEAKIAl1MzIJCQkoKmdldF9tYXhfc2l6ZSkoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50IHNpemUpOwogfTsKIAotc3RydWN0IHhmcm1fdHlwZV9tYXAgewotCXJ3bG9ja190CQlsb2NrOwotCXN0cnVjdCB4ZnJtX3R5cGUJKm1hcFsyNTZdOwotfTsKLQogZXh0ZXJuIGludCB4ZnJtX3JlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBzdHJ1Y3QgeGZybV90eXBlICp4ZnJtX2dldF90eXBlKHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIHZvaWQgeGZybV9wdXRfdHlwZShzdHJ1Y3QgeGZybV90eXBlICp0eXBlKTsKIAorc3RydWN0IHhmcm1fbW9kZSB7CisJaW50ICgqaW5wdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICpza2IpOworCisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJdW5zaWduZWQgaW50IGVuY2FwOworfTsKKworZXh0ZXJuIGludCB4ZnJtX3JlZ2lzdGVyX21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSwgaW50IGZhbWlseSk7CitleHRlcm4gaW50IHhmcm1fdW5yZWdpc3Rlcl9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUsIGludCBmYW1pbHkpOworZXh0ZXJuIHN0cnVjdCB4ZnJtX21vZGUgKnhmcm1fZ2V0X21vZGUodW5zaWduZWQgaW50IGVuY2FwLCBpbnQgZmFtaWx5KTsKK2V4dGVybiB2b2lkIHhmcm1fcHV0X21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSk7CisKIHN0cnVjdCB4ZnJtX3RtcGwKIHsKIC8qIGlkIGluIHRlbXBsYXRlIGlzIGludGVycHJldGVkIGFzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggNWUwYTAxYS4uZWRlNjM5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TU19ICiAjZGVmaW5lIF9MSU5VWF9TU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiB0YXNrX3N0cnVjdCwgY29tcGxldGlvbiAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfYWRkci5oIGIvaW5jbHVkZS9yZG1hL2liX2FkZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2I1YmE4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFZvbHRhaXJlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZXM6CisgKgorICogMSkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiQ29tbW9uIFB1YmxpYyBMaWNlbnNlIDEuMCIgYSBjb3B5IG9mIHdoaWNoIGlzCisgKiAgICBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2NwbC5waHAuCisgKgorICogMikgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiVGhlIEJTRCBMaWNlbnNlIiBhIGNvcHkgb2Ygd2hpY2ggaXMKKyAqICAgIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwLgorICoKKyAqIDMpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiIgYQorICogICAgY29weSBvZiB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocC4KKyAqCisgKiBMaWNlbnNlZSBoYXMgdGhlIHJpZ2h0IHRvIGNob29zZSBvbmUgb2YgdGhlIGFib3ZlIGxpY2Vuc2VzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYW5kIG9uZSBvZiB0aGUgbGljZW5zZSBub3RpY2VzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgb25lIG9mIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqLworCisjaWYgIWRlZmluZWQoSUJfQUREUl9IKQorI2RlZmluZSBJQl9BRERSX0gKKworI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorCitzdHJ1Y3QgcmRtYV9kZXZfYWRkciB7CisJdW5zaWduZWQgY2hhciBzcmNfZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIGRzdF9kZXZfYWRkcltNQVhfQUREUl9MRU5dOworCXVuc2lnbmVkIGNoYXIgYnJvYWRjYXN0W01BWF9BRERSX0xFTl07CisJZW51bSBpYl9ub2RlX3R5cGUgZGV2X3R5cGU7Cit9OworCisvKioKKyAqIHJkbWFfdHJhbnNsYXRlX2lwIC0gVHJhbnNsYXRlIGEgbG9jYWwgSVAgYWRkcmVzcyB0byBhbiBSRE1BIGhhcmR3YXJlCisgKiAgIGFkZHJlc3MuCisgKi8KK2ludCByZG1hX3RyYW5zbGF0ZV9pcChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcik7CisKKy8qKgorICogcmRtYV9yZXNvbHZlX2lwIC0gUmVzb2x2ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQIGFkZHJlc3NlcyB0bworICogICBSRE1BIGhhcmR3YXJlIGFkZHJlc3Nlcy4KKyAqIEBzcmNfYWRkcjogQW4gb3B0aW9uYWwgc291cmNlIGFkZHJlc3MgdG8gdXNlIGluIHRoZSByZXNvbHV0aW9uLiAgSWYgYQorICogICBzb3VyY2UgYWRkcmVzcyBpcyBub3QgcHJvdmlkZWQsIGEgdXNhYmxlIGFkZHJlc3Mgd2lsbCBiZSByZXR1cm5lZCB2aWEKKyAqICAgdGhlIGNhbGxiYWNrLgorICogQGRzdF9hZGRyOiBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyB0byByZXNvbHZlLgorICogQGFkZHI6IEEgcmVmZXJlbmNlIHRvIGEgZGF0YSBsb2NhdGlvbiB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgcmVzb2x2ZWQKKyAqICAgYWRkcmVzc2VzLiAgVGhlIGRhdGEgbG9jYXRpb24gbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGNhbGxiYWNrIGhhcworICogICBiZWVuIGludm9rZWQuCisgKiBAdGltZW91dF9tczogQW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGFkZHJlc3MgcmVzb2x1dGlvbiB0byBjb21wbGV0ZS4KKyAqIEBjYWxsYmFjazogQ2FsbCBpbnZva2VkIG9uY2UgYWRkcmVzcyByZXNvbHV0aW9uIGhhcyBjb21wbGV0ZWQsIHRpbWVkIG91dCwKKyAqICAgb3IgYmVlbiBjYW5jZWxlZC4gIEEgc3RhdHVzIG9mIDAgaW5kaWNhdGVzIHN1Y2Nlc3MuCisgKiBAY29udGV4dDogVXNlci1zcGVjaWZpZWQgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGwuCisgKi8KK2ludCByZG1hX3Jlc29sdmVfaXAoc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwKKwkJICAgIHN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyLCBpbnQgdGltZW91dF9tcywKKwkJICAgIHZvaWQgKCpjYWxsYmFjaykoaW50IHN0YXR1cywgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKKwkJCQkgICAgIHN0cnVjdCByZG1hX2Rldl9hZGRyICphZGRyLCB2b2lkICpjb250ZXh0KSwKKwkJICAgIHZvaWQgKmNvbnRleHQpOworCit2b2lkIHJkbWFfYWRkcl9jYW5jZWwoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmFkZHIpOworCitzdGF0aWMgaW5saW5lIGludCBpcF9hZGRyX3NpemUoc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXJldHVybiBhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgPworCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgOiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaWJfYWRkcl9nZXRfcGtleShzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIpCit7CisJcmV0dXJuICgodTE2KWRldl9hZGRyLT5icm9hZGNhc3RbOF0gPDwgOCkgfCAodTE2KWRldl9hZGRyLT5icm9hZGNhc3RbOV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9hZGRyX3NldF9wa2V5KHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciwgdTE2IHBrZXkpCit7CisJZGV2X2FkZHItPmJyb2FkY2FzdFs4XSA9IHBrZXkgPj4gODsKKwlkZXZfYWRkci0+YnJvYWRjYXN0WzldID0gKHVuc2lnbmVkIGNoYXIpIHBrZXk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5pb24gaWJfZ2lkICppYl9hZGRyX2dldF9zZ2lkKHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcikKK3sKKwlyZXR1cm4gCSh1bmlvbiBpYl9naWQgKikgKGRldl9hZGRyLT5zcmNfZGV2X2FkZHIgKyA0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGliX2FkZHJfc2V0X3NnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAorCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3sKKwltZW1jcHkoZGV2X2FkZHItPnNyY19kZXZfYWRkciArIDQsIGdpZCwgc2l6ZW9mICpnaWQpOworfQorCitzdGF0aWMgaW5saW5lIHVuaW9uIGliX2dpZCAqaWJfYWRkcl9nZXRfZGdpZChzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIpCit7CisJcmV0dXJuIAkodW5pb24gaWJfZ2lkICopIChkZXZfYWRkci0+ZHN0X2Rldl9hZGRyICsgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9hZGRyX3NldF9kZ2lkKHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciwKKwkJCQkgICAgdW5pb24gaWJfZ2lkICpnaWQpCit7CisJbWVtY3B5KGRldl9hZGRyLT5kc3RfZGV2X2FkZHIgKyA0LCBnaWQsIHNpemVvZiAqZ2lkKTsKK30KKworI2VuZGlmIC8qIElCX0FERFJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2NhY2hlLmggYi9pbmNsdWRlL3JkbWEvaWJfY2FjaGUuaAppbmRleCA1YmY5ODM0Li5mMTc5ZDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfY2FjaGUuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfY2FjaGUuaApAQCAtMTAyLDQgKzEwMiwxNyBAQAogCQkJdTE2ICAgICAgICAgICAgICAgICAgcGtleSwKIAkJCXUxNiAgICAgICAgICAgICAgICAgKmluZGV4KTsKIAorLyoqCisgKiBpYl9nZXRfY2FjaGVkX2xtYyAtIFJldHVybnMgYSBjYWNoZWQgbG1jIHRhYmxlIGVudHJ5CisgKiBAZGV2aWNlOiBUaGUgZGV2aWNlIHRvIHF1ZXJ5LgorICogQHBvcnRfbnVtOiBUaGUgcG9ydCBudW1iZXIgb2YgdGhlIGRldmljZSB0byBxdWVyeS4KKyAqIEBsbWM6IFRoZSBsbWMgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgcG9ydCBmb3IgdGhhdCBkZXZpY2UuCisgKgorICogaWJfZ2V0X2NhY2hlZF9sbWMoKSBmZXRjaGVzIHRoZSBzcGVjaWZpZWQgbG1jIHRhYmxlIGVudHJ5IHN0b3JlZCBpbgorICogdGhlIGxvY2FsIHNvZnR3YXJlIGNhY2hlLgorICovCitpbnQgaWJfZ2V0X2NhY2hlZF9sbWMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkgICAgICB1OCAgICAgICAgICAgICAgICBwb3J0X251bSwKKwkJICAgICAgdTggICAgICAgICAgICAgICAgKmxtYyk7CisKICNlbmRpZiAvKiBfSUJfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2NtLmggYi9pbmNsdWRlL3JkbWEvaWJfY20uaAppbmRleCAwYTlmY2Q1Li5jOWI0NzM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfY20uaApAQCAtMzIsNyArMzIsNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKgotICogJElkOiBpYl9jbS5oIDI3MzAgMjAwNS0wNi0yOCAxNjo0MzowM1ogc2Vhbi5oZWZ0eSAkCisgKiAkSWQ6IGliX2NtLmggNDMxMSAyMDA1LTEyLTA1IDE4OjQyOjAxWiBzZWFuLmhlZnR5ICQKICAqLwogI2lmICFkZWZpbmVkKElCX0NNX0gpCiAjZGVmaW5lIElCX0NNX0gKQEAgLTEwMiw3ICsxMDIsOCBAQAogCUlCX0NNX0FQUl9JTkZPX0xFTkdUSAkJID0gNzIsCiAJSUJfQ01fU0lEUl9SRVFfUFJJVkFURV9EQVRBX1NJWkUgPSAyMTYsCiAJSUJfQ01fU0lEUl9SRVBfUFJJVkFURV9EQVRBX1NJWkUgPSAxMzYsCi0JSUJfQ01fU0lEUl9SRVBfSU5GT19MRU5HVEgJID0gNzIKKwlJQl9DTV9TSURSX1JFUF9JTkZPX0xFTkdUSAkgPSA3MiwKKwlJQl9DTV9DT01QQVJFX1NJWkUJCSA9IDY0CiB9OwogCiBzdHJ1Y3QgaWJfY21faWQ7CkBAIC0yMzgsNyArMjM5LDYgQEAKIAl1MzIJCQlxcG47CiAJdm9pZAkJCSppbmZvOwogCXU4CQkJaW5mb19sZW47Ci0KIH07CiAKIHN0cnVjdCBpYl9jbV9ldmVudCB7CkBAIC0zMTcsNiArMzE3LDE1IEBACiAKICNkZWZpbmUgSUJfU0VSVklDRV9JRF9BR05fTUFTSwlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4RkYwMDAwMDAwMDAwMDAwMFVMTCkKICNkZWZpbmUgSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQgX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAyMDAwMDAwMDAwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lECV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAxMDAwMDAwVUxMKQorI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGMDAwMDAwVUxMKQorI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRAlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDAwMDAwMDAwMDAxMDAwMFVMTCkKKyNkZWZpbmUgSUJfU0RQX1NFUlZJQ0VfSURfTUFTSwlfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4RkZGRkZGRkZGRkZGMDAwMFVMTCkKKworc3RydWN0IGliX2NtX2NvbXBhcmVfZGF0YSB7CisJdTggIGRhdGFbSUJfQ01fQ09NUEFSRV9TSVpFXTsKKwl1OCAgbWFza1tJQl9DTV9DT01QQVJFX1NJWkVdOworfTsKIAogLyoqCiAgKiBpYl9jbV9saXN0ZW4gLSBJbml0aWF0ZXMgbGlzdGVuaW5nIG9uIHRoZSBzcGVjaWZpZWQgc2VydmljZSBJRCBmb3IKQEAgLTMzMCwxMCArMzM5LDEyIEBACiAgKiAgIHJhbmdlIG9mIHNlcnZpY2UgSURzLiAgSWYgc2V0IHRvIDAsIHRoZSBzZXJ2aWNlIElEIGlzIG1hdGNoZWQKICAqICAgZXhhY3RseS4gIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgJXNlcnZpY2VfaWQgaXMgc2V0IHRvCiAgKiAgIElCX0NNX0FTU0lHTl9TRVJWSUNFX0lELgorICogQGNvbXBhcmVfZGF0YTogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuICBJdCBzcGVjaWZpZXMgZGF0YSB0aGF0IG11c3QKKyAqICAgYXBwZWFyIGluIHRoZSBwcml2YXRlIGRhdGEgb2YgYSBjb25uZWN0aW9uIHJlcXVlc3QgZm9yIHRoZSBzcGVjaWZpZWQKKyAqICAgbGlzdGVuIHJlcXVlc3QuCiAgKi8KLWludCBpYl9jbV9saXN0ZW4oc3RydWN0IGliX2NtX2lkICpjbV9pZCwKLQkJIF9fYmU2NCBzZXJ2aWNlX2lkLAotCQkgX19iZTY0IHNlcnZpY2VfbWFzayk7CitpbnQgaWJfY21fbGlzdGVuKHN0cnVjdCBpYl9jbV9pZCAqY21faWQsIF9fYmU2NCBzZXJ2aWNlX2lkLCBfX2JlNjQgc2VydmljZV9tYXNrLAorCQkgc3RydWN0IGliX2NtX2NvbXBhcmVfZGF0YSAqY29tcGFyZV9kYXRhKTsKIAogc3RydWN0IGliX2NtX3JlcV9wYXJhbSB7CiAJc3RydWN0IGliX3NhX3BhdGhfcmVjCSpwcmltYXJ5X3BhdGg7CkBAIC01MzUsNyArNTQ2LDYgQEAKIAljb25zdCB2b2lkCQkqcHJpdmF0ZV9kYXRhOwogCXU4CQkJcHJpdmF0ZV9kYXRhX2xlbjsKIAl1OAkJCW1heF9jbV9yZXRyaWVzOwotCXUxNgkJCXBrZXk7CiB9OwogCiAvKioKQEAgLTU1OSw3ICs1NjksNyBAQAogfTsKIAogLyoqCi0gKiBpYl9zZW5kX2NtX3NpZHJfcmVwIC0gU2VuZHMgYSBzZXJ2aWNlIElEIHJlc29sdXRpb24gcmVxdWVzdCB0byB0aGUKKyAqIGliX3NlbmRfY21fc2lkcl9yZXAgLSBTZW5kcyBhIHNlcnZpY2UgSUQgcmVzb2x1dGlvbiByZXBseSB0byB0aGUKICAqICAgcmVtb3RlIG5vZGUuCiAgKiBAY21faWQ6IENvbW11bmljYXRpb24gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIHJlY2VpdmVkIHNlcnZpY2UgSUQKICAqICAgcmVzb2x1dGlvbiByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX21hcnNoYWxsLmggYi9pbmNsdWRlL3JkbWEvaWJfbWFyc2hhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJmNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yZG1hL2liX21hcnNoYWxsLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWYgIWRlZmluZWQoSUJfVVNFUl9NQVJTSEFMTF9IKQorI2RlZmluZSBJQl9VU0VSX01BUlNIQUxMX0gKKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3NhLmg+CisjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3NhLmg+CisKK3ZvaWQgaWJfY29weV9xcF9hdHRyX3RvX3VzZXIoc3RydWN0IGliX3V2ZXJic19xcF9hdHRyICpkc3QsCisJCQkgICAgIHN0cnVjdCBpYl9xcF9hdHRyICpzcmMpOworCit2b2lkIGliX2NvcHlfcGF0aF9yZWNfdG9fdXNlcihzdHJ1Y3QgaWJfdXNlcl9wYXRoX3JlYyAqZHN0LAorCQkJICAgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpzcmMpOworCit2b2lkIGliX2NvcHlfcGF0aF9yZWNfZnJvbV91c2VyKHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqZHN0LAorCQkJCXN0cnVjdCBpYl91c2VyX3BhdGhfcmVjICpzcmMpOworCisjZW5kaWYgLyogSUJfVVNFUl9NQVJTSEFMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfc2EuaCBiL2luY2x1ZGUvcmRtYS9pYl9zYS5oCmluZGV4IGFkNjNjMjEuLmM5OWU0NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9zYS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9zYS5oCkBAIC0zNzAsNSArMzcwLDEyIEBACiAJCQkJCWNvbnRleHQsIHF1ZXJ5KTsKIH0KIAorLyoqCisgKiBpYl9pbml0X2FoX2Zyb21fcGF0aCAtIEluaXRpYWxpemUgYWRkcmVzcyBoYW5kbGUgYXR0cmlidXRlcyBiYXNlZCBvbiBhbiBTQQorICogICBwYXRoIHJlY29yZC4KKyAqLworaW50IGliX2luaXRfYWhfZnJvbV9wYXRoKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCisJCQkgc3RydWN0IGliX3NhX3BhdGhfcmVjICpyZWMsCisJCQkgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpOwogCiAjZW5kaWYgLyogSUJfU0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3NtaS5oIGIvaW5jbHVkZS9yZG1hL2liX3NtaS5oCmluZGV4IDg3ZjYwNzMuLmYyOWFmMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9zbWkuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfc21pLmgKQEAgLTg1LDYgKzg1LDQyIEBACiAjZGVmaW5lIElCX1NNUF9BVFRSX0xFRF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMzEpCiAjZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9NQVNLCQkJX19jb25zdGFudF9odG9ucygweEZGMDApCiAKK3N0cnVjdCBpYl9wb3J0X2luZm8geworCV9fYmU2NCBta2V5OworCV9fYmU2NCBnaWRfcHJlZml4OworCV9fYmUxNiBsaWQ7CisJX19iZTE2IHNtX2xpZDsKKwlfX2JlMzIgY2FwX21hc2s7CisJX19iZTE2IGRpYWdfY29kZTsKKwlfX2JlMTYgbWtleV9sZWFzZV9wZXJpb2Q7CisJdTggbG9jYWxfcG9ydF9udW07CisJdTggbGlua193aWR0aF9lbmFibGVkOworCXU4IGxpbmtfd2lkdGhfc3VwcG9ydGVkOworCXU4IGxpbmtfd2lkdGhfYWN0aXZlOworCXU4IGxpbmtzcGVlZF9wb3J0c3RhdGU7CQkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCBwb3J0cGh5c3N0YXRlX2xpbmtkb3duOwkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCBta2V5cHJvdF9yZXN2X2xtYzsJCQkvKiAyIGJpdHMsIDMsIDMgKi8KKwl1OCBsaW5rc3BlZWRhY3RpdmVfZW5hYmxlZDsJCS8qIDQgYml0cywgNCBiaXRzICovCisJdTggbmVpZ2hib3JtdHVfbWFzdGVyc21zbDsJCS8qIDQgYml0cywgNCBiaXRzICovCisJdTggdmxjYXBfaW5pdHR5cGU7CQkJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwl1OCB2bF9oaWdoX2xpbWl0OworCXU4IHZsX2FyYl9oaWdoX2NhcDsKKwl1OCB2bF9hcmJfbG93X2NhcDsKKwl1OCBpbml0dHlwZXJlcGx5X210dWNhcDsJCS8qIDQgYml0cywgNCBiaXRzICovCisJdTggdmxzdGFsbGNudF9ob3FsaWZlOwkJCS8qIDMgYml0cywgNSBiaXRzICovCisJdTggb3BlcmF0aW9uYWx2bF9wZWlfcGVvX2ZwaV9mcG87CS8qIDQgYml0cywgMSwgMSwgMSwgMSAqLworCV9fYmUxNiBta2V5X3Zpb2xhdGlvbnM7CisJX19iZTE2IHBrZXlfdmlvbGF0aW9uczsKKwlfX2JlMTYgcWtleV92aW9sYXRpb25zOworCXU4IGd1aWRfY2FwOworCXU4IGNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG87CQkvKiAxIGJpdCwgMiBiaXRzLCA1ICovCisJdTggcmVzdl9yZXNwdGltZXZhbHVlOwkJCS8qIDMgYml0cywgNSBiaXRzICovCisJdTggbG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9yczsJLyogNCBiaXRzLCA0IGJpdHMgKi8KKwlfX2JlMTYgbWF4X2NyZWRpdF9oaW50OworCXU4IHJlc3Y7CisJdTggbGlua19yb3VuZHRyaXBfbGF0ZW5jeVszXTsKK307CisKIHN0YXRpYyBpbmxpbmUgdTgKIGliX2dldF9zbXBfZGlyZWN0aW9uKHN0cnVjdCBpYl9zbXAgKnNtcCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX2NtLmggYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl9jbS5oCmluZGV4IDE5YmUxMTYuLjA2NmMyMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfY20uaApAQCAtMzAsMTMgKzMwLDEzIEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgKiBTT0ZUV0FSRS4KICAqCi0gKiAkSWQ6IGliX3VzZXJfY20uaCAyNTc2IDIwMDUtMDYtMDkgMTc6MDA6MzBaIGxpYm9yICQKKyAqICRJZDogaWJfdXNlcl9jbS5oIDQwMTkgMjAwNS0xMS0xMSAwMDozMzowOVogc2Vhbi5oZWZ0eSAkCiAgKi8KIAogI2lmbmRlZiBJQl9VU0VSX0NNX0gKICNkZWZpbmUgSUJfVVNFUl9DTV9ICiAKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl9zYS5oPgogCiAjZGVmaW5lIElCX1VTRVJfQ01fQUJJX1ZFUlNJT04gNAogCkBAIC0xMTAsNTggKzExMCw2IEBACiAJX191MzIgcXBfc3RhdGU7CiB9OwogCi1zdHJ1Y3QgaWJfdWNtX2FoX2F0dHIgewotCV9fdTgJZ3JoX2RnaWRbMTZdOwotCV9fdTMyCWdyaF9mbG93X2xhYmVsOwotCV9fdTE2CWRsaWQ7Ci0JX191MTYJcmVzZXJ2ZWQ7Ci0JX191OAlncmhfc2dpZF9pbmRleDsKLQlfX3U4CWdyaF9ob3BfbGltaXQ7Ci0JX191OAlncmhfdHJhZmZpY19jbGFzczsKLQlfX3U4CXNsOwotCV9fdTgJc3JjX3BhdGhfYml0czsKLQlfX3U4CXN0YXRpY19yYXRlOwotCV9fdTgJaXNfZ2xvYmFsOwotCV9fdTgJcG9ydF9udW07Ci19OwotCi1zdHJ1Y3QgaWJfdWNtX2luaXRfcXBfYXR0cl9yZXNwIHsKLQlfX3UzMglxcF9hdHRyX21hc2s7Ci0JX191MzIJcXBfc3RhdGU7Ci0JX191MzIJY3VyX3FwX3N0YXRlOwotCV9fdTMyCXBhdGhfbXR1OwotCV9fdTMyCXBhdGhfbWlnX3N0YXRlOwotCV9fdTMyCXFrZXk7Ci0JX191MzIJcnFfcHNuOwotCV9fdTMyCXNxX3BzbjsKLQlfX3UzMglkZXN0X3FwX251bTsKLQlfX3UzMglxcF9hY2Nlc3NfZmxhZ3M7Ci0KLQlzdHJ1Y3QgaWJfdWNtX2FoX2F0dHIJYWhfYXR0cjsKLQlzdHJ1Y3QgaWJfdWNtX2FoX2F0dHIJYWx0X2FoX2F0dHI7Ci0KLQkvKiBpYl9xcF9jYXAgKi8KLQlfX3UzMgltYXhfc2VuZF93cjsKLQlfX3UzMgltYXhfcmVjdl93cjsKLQlfX3UzMgltYXhfc2VuZF9zZ2U7Ci0JX191MzIJbWF4X3JlY3Zfc2dlOwotCV9fdTMyCW1heF9pbmxpbmVfZGF0YTsKLQotCV9fdTE2CXBrZXlfaW5kZXg7Ci0JX191MTYJYWx0X3BrZXlfaW5kZXg7Ci0JX191OAllbl9zcWRfYXN5bmNfbm90aWZ5OwotCV9fdTgJc3FfZHJhaW5pbmc7Ci0JX191OAltYXhfcmRfYXRvbWljOwotCV9fdTgJbWF4X2Rlc3RfcmRfYXRvbWljOwotCV9fdTgJbWluX3Jucl90aW1lcjsKLQlfX3U4CXBvcnRfbnVtOwotCV9fdTgJdGltZW91dDsKLQlfX3U4CXJldHJ5X2NudDsKLQlfX3U4CXJucl9yZXRyeTsKLQlfX3U4CWFsdF9wb3J0X251bTsKLQlfX3U4CWFsdF90aW1lb3V0OwotfTsKLQogc3RydWN0IGliX3VjbV9saXN0ZW4gewogCV9fYmU2NCBzZXJ2aWNlX2lkOwogCV9fYmU2NCBzZXJ2aWNlX21hc2s7CkBAIC0xODAsMjggKzEyOCw2IEBACiAJX191OCAgcmVzZXJ2ZWRbM107CiB9OwogCi1zdHJ1Y3QgaWJfdWNtX3BhdGhfcmVjIHsKLQlfX3U4ICBkZ2lkWzE2XTsKLQlfX3U4ICBzZ2lkWzE2XTsKLQlfX2JlMTYgZGxpZDsKLQlfX2JlMTYgc2xpZDsKLQlfX3UzMiByYXdfdHJhZmZpYzsKLQlfX2JlMzIgZmxvd19sYWJlbDsKLQlfX3UzMiByZXZlcnNpYmxlOwotCV9fdTMyIG10dTsKLQlfX2JlMTYgcGtleTsKLQlfX3U4ICBob3BfbGltaXQ7Ci0JX191OCAgdHJhZmZpY19jbGFzczsKLQlfX3U4ICBudW1iX3BhdGg7Ci0JX191OCAgc2w7Ci0JX191OCAgbXR1X3NlbGVjdG9yOwotCV9fdTggIHJhdGVfc2VsZWN0b3I7Ci0JX191OCAgcmF0ZTsKLQlfX3U4ICBwYWNrZXRfbGlmZV90aW1lX3NlbGVjdG9yOwotCV9fdTggIHBhY2tldF9saWZlX3RpbWU7Ci0JX191OCAgcHJlZmVyZW5jZTsKLX07Ci0KIHN0cnVjdCBpYl91Y21fcmVxIHsKIAlfX3UzMiBpZDsKIAlfX3UzMiBxcG47CkBAIC0yNzQsNyArMjAwLDcgQEAKIAlfX2JlNjQgc2lkOwogCV9fdTY0IGRhdGE7CiAJX191NjQgcGF0aDsKLQlfX3UxNiBwa2V5OworCV9fdTE2IHJlc2VydmVkX3BrZXk7CiAJX191OCAgbGVuOwogCV9fdTggIG1heF9jbV9yZXRyaWVzOwogCV9fdTggIHJlc2VydmVkWzRdOwpAQCAtMzA0LDggKzIzMCw4IEBACiB9OwogCiBzdHJ1Y3QgaWJfdWNtX3JlcV9ldmVudF9yZXNwIHsKLQlzdHJ1Y3QgaWJfdWNtX3BhdGhfcmVjIHByaW1hcnlfcGF0aDsKLQlzdHJ1Y3QgaWJfdWNtX3BhdGhfcmVjIGFsdGVybmF0ZV9wYXRoOworCXN0cnVjdCBpYl91c2VyX3BhdGhfcmVjIHByaW1hcnlfcGF0aDsKKwlzdHJ1Y3QgaWJfdXNlcl9wYXRoX3JlYyBhbHRlcm5hdGVfcGF0aDsKIAlfX2JlNjQgICAgICAgICAgICAgICAgIHJlbW90ZV9jYV9ndWlkOwogCV9fdTMyICAgICAgICAgICAgICAgICAgcmVtb3RlX3FrZXk7CiAJX191MzIgICAgICAgICAgICAgICAgICByZW1vdGVfcXBuOwpAQCAtMzQ5LDcgKzI3NSw3IEBACiB9OwogCiBzdHJ1Y3QgaWJfdWNtX2xhcF9ldmVudF9yZXNwIHsKLQlzdHJ1Y3QgaWJfdWNtX3BhdGhfcmVjIHBhdGg7CisJc3RydWN0IGliX3VzZXJfcGF0aF9yZWMgcGF0aDsKIH07CiAKIHN0cnVjdCBpYl91Y21fYXByX2V2ZW50X3Jlc3AgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfc2EuaCBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5MTIwMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3NhLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElCX1VTRVJfU0FfSAorI2RlZmluZSBJQl9VU0VSX1NBX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBpYl91c2VyX3BhdGhfcmVjIHsKKwlfX3U4CWRnaWRbMTZdOworCV9fdTgJc2dpZFsxNl07CisJX19iZTE2CWRsaWQ7CisJX19iZTE2CXNsaWQ7CisJX191MzIJcmF3X3RyYWZmaWM7CisJX19iZTMyCWZsb3dfbGFiZWw7CisJX191MzIJcmV2ZXJzaWJsZTsKKwlfX3UzMgltdHU7CisJX19iZTE2CXBrZXk7CisJX191OAlob3BfbGltaXQ7CisJX191OAl0cmFmZmljX2NsYXNzOworCV9fdTgJbnVtYl9wYXRoOworCV9fdTgJc2w7CisJX191OAltdHVfc2VsZWN0b3I7CisJX191OAlyYXRlX3NlbGVjdG9yOworCV9fdTgJcmF0ZTsKKwlfX3U4CXBhY2tldF9saWZlX3RpbWVfc2VsZWN0b3I7CisJX191OAlwYWNrZXRfbGlmZV90aW1lOworCV9fdTgJcHJlZmVyZW5jZTsKK307CisKKyNlbmRpZiAvKiBJQl9VU0VSX1NBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCmluZGV4IDMzOGVkNDMuLjdiNTM3MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaApAQCAtMzIsNyArMzIsNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKgotICogJElkOiBpYl91c2VyX3ZlcmJzLmggMjcwOCAyMDA1LTA2LTI0IDE3OjI3OjIxWiByb2xhbmQgJAorICogJElkOiBpYl91c2VyX3ZlcmJzLmggNDAxOSAyMDA1LTExLTExIDAwOjMzOjA5WiBzZWFuLmhlZnR5ICQKICAqLwogCiAjaWZuZGVmIElCX1VTRVJfVkVSQlNfSApAQCAtMzIzLDYgKzMyMyw2NCBAQAogCV9fdTMyIGFzeW5jX2V2ZW50c19yZXBvcnRlZDsKIH07CiAKK3N0cnVjdCBpYl91dmVyYnNfZ2xvYmFsX3JvdXRlIHsKKwlfX3U4ICBkZ2lkWzE2XTsKKwlfX3UzMiBmbG93X2xhYmVsOworCV9fdTggIHNnaWRfaW5kZXg7CisJX191OCAgaG9wX2xpbWl0OworCV9fdTggIHRyYWZmaWNfY2xhc3M7CisJX191OCAgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgeworCXN0cnVjdCBpYl91dmVyYnNfZ2xvYmFsX3JvdXRlIGdyaDsKKwlfX3UxNiBkbGlkOworCV9fdTggIHNsOworCV9fdTggIHNyY19wYXRoX2JpdHM7CisJX191OCAgc3RhdGljX3JhdGU7CisJX191OCAgaXNfZ2xvYmFsOworCV9fdTggIHBvcnRfbnVtOworCV9fdTggIHJlc2VydmVkOworfTsKKworc3RydWN0IGliX3V2ZXJic19xcF9hdHRyIHsKKwlfX3UzMglxcF9hdHRyX21hc2s7CisJX191MzIJcXBfc3RhdGU7CisJX191MzIJY3VyX3FwX3N0YXRlOworCV9fdTMyCXBhdGhfbXR1OworCV9fdTMyCXBhdGhfbWlnX3N0YXRlOworCV9fdTMyCXFrZXk7CisJX191MzIJcnFfcHNuOworCV9fdTMyCXNxX3BzbjsKKwlfX3UzMglkZXN0X3FwX251bTsKKwlfX3UzMglxcF9hY2Nlc3NfZmxhZ3M7CisKKwlzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYWhfYXR0cjsKKwlzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYWx0X2FoX2F0dHI7CisKKwkvKiBpYl9xcF9jYXAgKi8KKwlfX3UzMgltYXhfc2VuZF93cjsKKwlfX3UzMgltYXhfcmVjdl93cjsKKwlfX3UzMgltYXhfc2VuZF9zZ2U7CisJX191MzIJbWF4X3JlY3Zfc2dlOworCV9fdTMyCW1heF9pbmxpbmVfZGF0YTsKKworCV9fdTE2CXBrZXlfaW5kZXg7CisJX191MTYJYWx0X3BrZXlfaW5kZXg7CisJX191OAllbl9zcWRfYXN5bmNfbm90aWZ5OworCV9fdTgJc3FfZHJhaW5pbmc7CisJX191OAltYXhfcmRfYXRvbWljOworCV9fdTgJbWF4X2Rlc3RfcmRfYXRvbWljOworCV9fdTgJbWluX3Jucl90aW1lcjsKKwlfX3U4CXBvcnRfbnVtOworCV9fdTgJdGltZW91dDsKKwlfX3U4CXJldHJ5X2NudDsKKwlfX3U4CXJucl9yZXRyeTsKKwlfX3U4CWFsdF9wb3J0X251bTsKKwlfX3U4CWFsdF90aW1lb3V0OworCV9fdTgJcmVzZXJ2ZWRbNV07Cit9OworCiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcCB7CiAJX191NjQgcmVzcG9uc2U7CiAJX191NjQgdXNlcl9oYW5kbGU7CkBAIC01NDEsMjYgKzU5OSw2IEBACiAJX191MzIgYmFkX3dyOwogfTsKIAotc3RydWN0IGliX3V2ZXJic19nbG9iYWxfcm91dGUgewotCV9fdTggIGRnaWRbMTZdOwotCV9fdTMyIGZsb3dfbGFiZWw7Ci0JX191OCAgc2dpZF9pbmRleDsKLQlfX3U4ICBob3BfbGltaXQ7Ci0JX191OCAgdHJhZmZpY19jbGFzczsKLQlfX3U4ICByZXNlcnZlZDsKLX07Ci0KLXN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciB7Ci0Jc3RydWN0IGliX3V2ZXJic19nbG9iYWxfcm91dGUgZ3JoOwotCV9fdTE2IGRsaWQ7Ci0JX191OCAgc2w7Ci0JX191OCAgc3JjX3BhdGhfYml0czsKLQlfX3U4ICBzdGF0aWNfcmF0ZTsKLQlfX3U4ICBpc19nbG9iYWw7Ci0JX191OCAgcG9ydF9udW07Ci0JX191OCAgcmVzZXJ2ZWQ7Ci19OwotCiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9haCB7CiAJX191NjQgcmVzcG9uc2U7CiAJX191NjQgdXNlcl9oYW5kbGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCmluZGV4IDZiYmYxYjMuLmVlMWYzYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCkBAIC0yNjAsNyArMjYwLDggQEAKIAlJQl9FVkVOVF9TTV9DSEFOR0UsCiAJSUJfRVZFTlRfU1JRX0VSUiwKIAlJQl9FVkVOVF9TUlFfTElNSVRfUkVBQ0hFRCwKLQlJQl9FVkVOVF9RUF9MQVNUX1dRRV9SRUFDSEVECisJSUJfRVZFTlRfUVBfTEFTVF9XUUVfUkVBQ0hFRCwKKwlJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUgogfTsKIAogc3RydWN0IGliX2V2ZW50IHsKQEAgLTY5Niw4ICs2OTcsMTIgQEAKIHN0cnVjdCBpYl91b2JqZWN0IHsKIAl1NjQJCQl1c2VyX2hhbmRsZTsJLyogaGFuZGxlIGdpdmVuIHRvIHVzIGJ5IHVzZXJzcGFjZSAqLwogCXN0cnVjdCBpYl91Y29udGV4dCAgICAgKmNvbnRleHQ7CS8qIGFzc29jaWF0ZWQgdXNlciBjb250ZXh0ICovCisJdm9pZAkJICAgICAgICpvYmplY3Q7CQkvKiBjb250YWluaW5nIG9iamVjdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsJCS8qIGxpbmsgdG8gY29udGV4dCdzIGxpc3QgKi8KIAl1MzIJCQlpZDsJCS8qIGluZGV4IGludG8ga2VybmVsIGlkciAqLworCXN0cnVjdCBrcmVmCQlyZWY7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQltdXRleDsJCS8qIHByb3RlY3RzIC5saXZlICovCisJaW50CQkJbGl2ZTsKIH07CiAKIHN0cnVjdCBpYl91bWVtIHsKQEAgLTgyNyw2ICs4MzIsNyBAQAogCXN0cnVjdCBpYl9ldmVudF9oYW5kbGVyIGV2ZW50X2hhbmRsZXI7CiAJc3RydWN0IGliX3BrZXlfY2FjaGUgICoqcGtleV9jYWNoZTsKIAlzdHJ1Y3QgaWJfZ2lkX2NhY2hlICAgKipnaWRfY2FjaGU7CisJdTggICAgICAgICAgICAgICAgICAgICAqbG1jX2NhY2hlOwogfTsKIAogc3RydWN0IGliX2RldmljZSB7CkBAIC0xMDg2LDYgKzEwOTIsMjAgQEAKIHN0cnVjdCBpYl9haCAqaWJfY3JlYXRlX2FoKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKTsKIAogLyoqCisgKiBpYl9pbml0X2FoX2Zyb21fd2MgLSBJbml0aWFsaXplcyBhZGRyZXNzIGhhbmRsZSBhdHRyaWJ1dGVzIGZyb20gYQorICogICB3b3JrIGNvbXBsZXRpb24uCisgKiBAZGV2aWNlOiBEZXZpY2Ugb24gd2hpY2ggdGhlIHJlY2VpdmVkIG1lc3NhZ2UgYXJyaXZlZC4KKyAqIEBwb3J0X251bTogUG9ydCBvbiB3aGljaCB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBhcnJpdmVkLgorICogQHdjOiBXb3JrIGNvbXBsZXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSByZWNlaXZlZCBtZXNzYWdlLgorICogQGdyaDogUmVmZXJlbmNlcyB0aGUgcmVjZWl2ZWQgZ2xvYmFsIHJvdXRlIGhlYWRlci4gIFRoaXMgcGFyYW1ldGVyIGlzCisgKiAgIGlnbm9yZWQgdW5sZXNzIHRoZSB3b3JrIGNvbXBsZXRpb24gaW5kaWNhdGVzIHRoYXQgdGhlIEdSSCBpcyB2YWxpZC4KKyAqIEBhaF9hdHRyOiBSZXR1cm5lZCBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBhZGRyZXNzCisgKiAgIGhhbmRsZSBmb3IgcmVwbHlpbmcgdG8gdGhlIG1lc3NhZ2UuCisgKi8KK2ludCBpYl9pbml0X2FoX2Zyb21fd2Moc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwgc3RydWN0IGliX3djICp3YywKKwkJICAgICAgIHN0cnVjdCBpYl9ncmggKmdyaCwgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpOworCisvKioKICAqIGliX2NyZWF0ZV9haF9mcm9tX3djIC0gQ3JlYXRlcyBhbiBhZGRyZXNzIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggdGhlCiAgKiAgIHNlbmRlciBvZiB0aGUgc3BlY2lmaWVkIHdvcmsgY29tcGxldGlvbi4KICAqIEBwZDogVGhlIHByb3RlY3Rpb24gZG9tYWluIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWRkcmVzcyBoYW5kbGUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oIGIvaW5jbHVkZS9yZG1hL3JkbWFfY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDJjNjNkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yZG1hL3JkbWFfY20uaApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBWb2x0YWlyZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIFNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzOgorICoKKyAqIDEpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkNvbW1vbiBQdWJsaWMgTGljZW5zZSAxLjAiIGEgY29weSBvZiB3aGljaCBpcworICogICAgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9jcGwucGhwLgorICoKKyAqIDIpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIlRoZSBCU0QgTGljZW5zZSIgYSBjb3B5IG9mIHdoaWNoIGlzCisgKiAgICBhdmFpbGFibGUgZnJvbSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSwgc2VlCisgKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocC4KKyAqCisgKiAzKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIiIGEKKyAqICAgIGNvcHkgb2Ygd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHAuCisgKgorICogTGljZW5zZWUgaGFzIHRoZSByaWdodCB0byBjaG9vc2Ugb25lIG9mIHRoZSBhYm92ZSBsaWNlbnNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCBvbmUgb2YgdGhlIGxpY2Vuc2Ugbm90aWNlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIG9uZSBvZiB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFJETUFfQ01fSCkKKyNkZWZpbmUgUkRNQV9DTV9ICisKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxyZG1hL2liX2FkZHIuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3NhLmg+CisKKy8qCisgKiBVcG9uIHJlY2VpdmluZyBhIGRldmljZSByZW1vdmFsIGV2ZW50LCB1c2VycyBtdXN0IGRlc3Ryb3kgdGhlIGFzc29jaWF0ZWQKKyAqIFJETUEgaWRlbnRpZmllciBhbmQgcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFsbG9jYXRlZCB3aXRoIHRoZSBkZXZpY2UuCisgKi8KK2VudW0gcmRtYV9jbV9ldmVudF90eXBlIHsKKwlSRE1BX0NNX0VWRU5UX0FERFJfUkVTT0xWRUQsCisJUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SLAorCVJETUFfQ01fRVZFTlRfUk9VVEVfUkVTT0xWRUQsCisJUkRNQV9DTV9FVkVOVF9ST1VURV9FUlJPUiwKKwlSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVCwKKwlSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVTUE9OU0UsCisJUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SLAorCVJETUFfQ01fRVZFTlRfVU5SRUFDSEFCTEUsCisJUkRNQV9DTV9FVkVOVF9SRUpFQ1RFRCwKKwlSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVELAorCVJETUFfQ01fRVZFTlRfRElTQ09OTkVDVEVELAorCVJETUFfQ01fRVZFTlRfREVWSUNFX1JFTU9WQUwsCit9OworCitlbnVtIHJkbWFfcG9ydF9zcGFjZSB7CisJUkRNQV9QU19TRFAgID0gMHgwMDAxLAorCVJETUFfUFNfVENQICA9IDB4MDEwNiwKKwlSRE1BX1BTX1VEUCAgPSAweDAxMTEsCisJUkRNQV9QU19TQ1RQID0gMHgwMTgzCit9OworCitzdHJ1Y3QgcmRtYV9hZGRyIHsKKwlzdHJ1Y3Qgc29ja2FkZHIgc3JjX2FkZHI7CisJdTgJCXNyY19wYWRbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpIC0KKwkJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyKV07CisJc3RydWN0IHNvY2thZGRyIGRzdF9hZGRyOworCXU4CQlkc3RfcGFkW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSAtCisJCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcildOworCXN0cnVjdCByZG1hX2Rldl9hZGRyIGRldl9hZGRyOworfTsKKworc3RydWN0IHJkbWFfcm91dGUgeworCXN0cnVjdCByZG1hX2FkZHIgYWRkcjsKKwlzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnBhdGhfcmVjOworCWludCBudW1fcGF0aHM7Cit9OworCitzdHJ1Y3QgcmRtYV9jbV9ldmVudCB7CisJZW51bSByZG1hX2NtX2V2ZW50X3R5cGUJIGV2ZW50OworCWludAkJCSBzdGF0dXM7CisJdm9pZAkJCSpwcml2YXRlX2RhdGE7CisJdTgJCQkgcHJpdmF0ZV9kYXRhX2xlbjsKK307CisKK3N0cnVjdCByZG1hX2NtX2lkOworCisvKioKKyAqIHJkbWFfY21fZXZlbnRfaGFuZGxlciAtIENhbGxiYWNrIHVzZWQgdG8gcmVwb3J0IHVzZXIgZXZlbnRzLgorICoKKyAqIE5vdGVzOiBVc2VycyBtYXkgbm90IGNhbGwgcmRtYV9kZXN0cm95X2lkIGZyb20gdGhpcyBjYWxsYmFjayB0byBkZXN0cm95CisgKiAgIHRoZSBwYXNzZWQgaW4gaWQsIG9yIGEgY29ycmVzcG9uZGluZyBsaXN0ZW4gaWQuICBSZXR1cm5pbmcgYQorICogICBub24temVybyB2YWx1ZSBmcm9tIHRoZSBjYWxsYmFjayB3aWxsIGRlc3Ryb3kgdGhlIHBhc3NlZCBpbiBpZC4KKyAqLwordHlwZWRlZiBpbnQgKCpyZG1hX2NtX2V2ZW50X2hhbmRsZXIpKHN0cnVjdCByZG1hX2NtX2lkICppZCwKKwkJCQkgICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisKK3N0cnVjdCByZG1hX2NtX2lkIHsKKwlzdHJ1Y3QgaWJfZGV2aWNlCSpkZXZpY2U7CisJdm9pZAkJCSpjb250ZXh0OworCXN0cnVjdCBpYl9xcAkJKnFwOworCXJkbWFfY21fZXZlbnRfaGFuZGxlcgkgZXZlbnRfaGFuZGxlcjsKKwlzdHJ1Y3QgcmRtYV9yb3V0ZQkgcm91dGU7CisJZW51bSByZG1hX3BvcnRfc3BhY2UJIHBzOworCXU4CQkJIHBvcnRfbnVtOworfTsKKworLyoqCisgKiByZG1hX2NyZWF0ZV9pZCAtIENyZWF0ZSBhbiBSRE1BIGlkZW50aWZpZXIuCisgKgorICogQGV2ZW50X2hhbmRsZXI6IFVzZXIgY2FsbGJhY2sgaW52b2tlZCB0byByZXBvcnQgZXZlbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICAgcmV0dXJuZWQgcmRtYV9pZC4KKyAqIEBjb250ZXh0OiBVc2VyIHNwZWNpZmllZCBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaWQuCisgKiBAcHM6IFJETUEgcG9ydCBzcGFjZS4KKyAqLworc3RydWN0IHJkbWFfY21faWQgKnJkbWFfY3JlYXRlX2lkKHJkbWFfY21fZXZlbnRfaGFuZGxlciBldmVudF9oYW5kbGVyLAorCQkJCSAgdm9pZCAqY29udGV4dCwgZW51bSByZG1hX3BvcnRfc3BhY2UgcHMpOworCit2b2lkIHJkbWFfZGVzdHJveV9pZChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpOworCisvKioKKyAqIHJkbWFfYmluZF9hZGRyIC0gQmluZCBhbiBSRE1BIGlkZW50aWZpZXIgdG8gYSBzb3VyY2UgYWRkcmVzcyBhbmQKKyAqICAgYXNzb2NpYXRlZCBSRE1BIGRldmljZSwgaWYgbmVlZGVkLgorICoKKyAqIEBpZDogUkRNQSBpZGVudGlmaWVyLgorICogQGFkZHI6IExvY2FsIGFkZHJlc3MgaW5mb3JtYXRpb24uICBXaWxkY2FyZCB2YWx1ZXMgYXJlIHBlcm1pdHRlZC4KKyAqCisgKiBUaGlzIGFzc29jaWF0ZXMgYSBzb3VyY2UgYWRkcmVzcyB3aXRoIHRoZSBSRE1BIGlkZW50aWZpZXIgYmVmb3JlIGNhbGxpbmcKKyAqIHJkbWFfbGlzdGVuLiAgSWYgYSBzcGVjaWZpYyBsb2NhbCBhZGRyZXNzIGlzIGdpdmVuLCB0aGUgUkRNQSBpZGVudGlmaWVyIHdpbGwKKyAqIGJlIGJvdW5kIHRvIGEgbG9jYWwgUkRNQSBkZXZpY2UuCisgKi8KK2ludCByZG1hX2JpbmRfYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7CisKKy8qKgorICogcmRtYV9yZXNvbHZlX2FkZHIgLSBSZXNvbHZlIGRlc3RpbmF0aW9uIGFuZCBvcHRpb25hbCBzb3VyY2UgYWRkcmVzc2VzCisgKiAgIGZyb20gSVAgYWRkcmVzc2VzIHRvIGFuIFJETUEgYWRkcmVzcy4gIElmIHN1Y2Nlc3NmdWwsIHRoZSBzcGVjaWZpZWQKKyAqICAgcmRtYV9jbV9pZCB3aWxsIGJlIGJvdW5kIHRvIGEgbG9jYWwgZGV2aWNlLgorICoKKyAqIEBpZDogUkRNQSBpZGVudGlmaWVyLgorICogQHNyY19hZGRyOiBTb3VyY2UgYWRkcmVzcyBpbmZvcm1hdGlvbi4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLgorICogQGRzdF9hZGRyOiBEZXN0aW5hdGlvbiBhZGRyZXNzIGluZm9ybWF0aW9uLgorICogQHRpbWVvdXRfbXM6IFRpbWUgdG8gd2FpdCBmb3IgcmVzb2x1dGlvbiB0byBjb21wbGV0ZS4KKyAqLworaW50IHJkbWFfcmVzb2x2ZV9hZGRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwKKwkJICAgICAgc3RydWN0IHNvY2thZGRyICpkc3RfYWRkciwgaW50IHRpbWVvdXRfbXMpOworCisvKioKKyAqIHJkbWFfcmVzb2x2ZV9yb3V0ZSAtIFJlc29sdmUgdGhlIFJETUEgYWRkcmVzcyBib3VuZCB0byB0aGUgUkRNQSBpZGVudGlmaWVyCisgKiAgIGludG8gcm91dGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24uCisgKgorICogVGhpcyBpcyBjYWxsZWQgb24gdGhlIGNsaWVudCBzaWRlIG9mIGEgY29ubmVjdGlvbi4KKyAqIFVzZXJzIG11c3QgaGF2ZSBmaXJzdCBjYWxsZWQgcmRtYV9yZXNvbHZlX2FkZHIgdG8gcmVzb2x2ZSBhIGRzdF9hZGRyCisgKiBpbnRvIGFuIFJETUEgYWRkcmVzcyBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCisgKi8KK2ludCByZG1hX3Jlc29sdmVfcm91dGUoc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgdGltZW91dF9tcyk7CisKKy8qKgorICogcmRtYV9jcmVhdGVfcXAgLSBBbGxvY2F0ZSBhIFFQIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCB0aGUgc3BlY2lmaWVkIFJETUEKKyAqIGlkZW50aWZpZXIuCisgKgorICogUVBzIGFsbG9jYXRlZCB0byBhbiByZG1hX2NtX2lkIHdpbGwgYXV0b21hdGljYWxseSBiZSB0cmFuc2l0aW9uZWQgYnkgdGhlIENNQQorICogdGhyb3VnaCB0aGVpciBzdGF0ZXMuCisgKi8KK2ludCByZG1hX2NyZWF0ZV9xcChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBpYl9wZCAqcGQsCisJCSAgIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cik7CisKKy8qKgorICogcmRtYV9kZXN0cm95X3FwIC0gRGVhbGxvY2F0ZSB0aGUgUVAgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgUkRNQQorICogaWRlbnRpZmllci4KKyAqCisgKiBVc2VycyBtdXN0IGRlc3Ryb3kgYW55IFFQIGFzc29jaWF0ZWQgd2l0aCBhbiBSRE1BIGlkZW50aWZpZXIgYmVmb3JlCisgKiBkZXN0cm95aW5nIHRoZSBSRE1BIElELgorICovCit2b2lkIHJkbWFfZGVzdHJveV9xcChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpOworCisvKioKKyAqIHJkbWFfaW5pdF9xcF9hdHRyIC0gSW5pdGlhbGl6ZXMgdGhlIFFQIGF0dHJpYnV0ZXMgZm9yIHVzZSBpbiB0cmFuc2l0aW9uaW5nCisgKiAgIHRvIGEgc3BlY2lmaWVkIFFQIHN0YXRlLgorICogQGlkOiBDb21tdW5pY2F0aW9uIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBRUCBhdHRyaWJ1dGVzIHRvCisgKiAgIGluaXRpYWxpemUuCisgKiBAcXBfYXR0cjogT24gaW5wdXQsIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBRUCBzdGF0ZS4gIE9uIG91dHB1dCwgdGhlCisgKiAgIG1hbmRhdG9yeSBhbmQgZGVzaXJlZCBvcHRpb25hbCBhdHRyaWJ1dGVzIHdpbGwgYmUgc2V0IGluIG9yZGVyIHRvCisgKiAgIG1vZGlmeSB0aGUgUVAgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZS4KKyAqIEBxcF9hdHRyX21hc2s6IFRoZSBRUCBhdHRyaWJ1dGUgbWFzayB0aGF0IG1heSBiZSB1c2VkIHRvIHRyYW5zaXRpb24gdGhlCisgKiAgIFFQIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUuCisgKgorICogVXNlcnMgbXVzdCBzZXQgdGhlIEBxcF9hdHRyLT5xcF9zdGF0ZSB0byB0aGUgZGVzaXJlZCBRUCBzdGF0ZS4gIFRoaXMgY2FsbAorICogd2lsbCBzZXQgYWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgZm9yIHRoZSBnaXZlbiB0cmFuc2l0aW9uLCBhbG9uZyB3aXRoCisgKiBrbm93biBvcHRpb25hbCBhdHRyaWJ1dGVzLiAgVXNlcnMgbWF5IG92ZXJyaWRlIHRoZSBhdHRyaWJ1dGVzIHJldHVybmVkIGZyb20KKyAqIHRoaXMgY2FsbCBiZWZvcmUgY2FsbGluZyBpYl9tb2RpZnlfcXAuCisgKgorICogVXNlcnMgdGhhdCB3aXNoIHRvIGhhdmUgdGhlaXIgUVAgYXV0b21hdGljYWxseSB0cmFuc2l0aW9uZWQgdGhyb3VnaCBpdHMKKyAqIHN0YXRlcyBjYW4gYXNzb2NpYXRlIGEgUVAgd2l0aCB0aGUgcmRtYV9jbV9pZCBieSBjYWxsaW5nIHJkbWFfY3JlYXRlX3FwKCkuCisgKi8KK2ludCByZG1hX2luaXRfcXBfYXR0cihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLAorCQkgICAgICAgaW50ICpxcF9hdHRyX21hc2spOworCitzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIHsKKwljb25zdCB2b2lkICpwcml2YXRlX2RhdGE7CisJdTggcHJpdmF0ZV9kYXRhX2xlbjsKKwl1OCByZXNwb25kZXJfcmVzb3VyY2VzOworCXU4IGluaXRpYXRvcl9kZXB0aDsKKwl1OCBmbG93X2NvbnRyb2w7CisJdTggcmV0cnlfY291bnQ7CQkvKiBpZ25vcmVkIHdoZW4gYWNjZXB0aW5nICovCisJdTggcm5yX3JldHJ5X2NvdW50OworCS8qIEZpZWxkcyBiZWxvdyBpZ25vcmVkIGlmIGEgUVAgaXMgY3JlYXRlZCBvbiB0aGUgcmRtYV9jbV9pZC4gKi8KKwl1OCBzcnE7CisJdTMyIHFwX251bTsKKwllbnVtIGliX3FwX3R5cGUgcXBfdHlwZTsKK307CisKKy8qKgorICogcmRtYV9jb25uZWN0IC0gSW5pdGlhdGUgYW4gYWN0aXZlIGNvbm5lY3Rpb24gcmVxdWVzdC4KKyAqCisgKiBVc2VycyBtdXN0IGhhdmUgcmVzb2x2ZWQgYSByb3V0ZSBmb3IgdGhlIHJkbWFfY21faWQgdG8gY29ubmVjdCB3aXRoCisgKiBieSBoYXZpbmcgY2FsbGVkIHJkbWFfcmVzb2x2ZV9yb3V0ZSBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCisgKi8KK2ludCByZG1hX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtKTsKKworLyoqCisgKiByZG1hX2xpc3RlbiAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBwYXNzaXZlIHNpZGUgdG8KKyAqICAgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3RzLgorICoKKyAqIFVzZXJzIG11c3QgaGF2ZSBib3VuZCB0aGUgcmRtYV9jbV9pZCB0byBhIGxvY2FsIGFkZHJlc3MgYnkgY2FsbGluZworICogcmRtYV9iaW5kX2FkZHIgYmVmb3JlIGNhbGxpbmcgdGhpcyByb3V0aW5lLgorICovCitpbnQgcmRtYV9saXN0ZW4oc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgYmFja2xvZyk7CisKKy8qKgorICogcmRtYV9hY2NlcHQgLSBDYWxsZWQgdG8gYWNjZXB0IGEgY29ubmVjdGlvbiByZXF1ZXN0IG9yIHJlc3BvbnNlLgorICogQGlkOiBDb25uZWN0aW9uIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LgorICogQGNvbm5fcGFyYW06IEluZm9ybWF0aW9uIG5lZWRlZCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24uICBUaGlzIG11c3QgYmUKKyAqICAgcHJvdmlkZWQgaWYgYWNjZXB0aW5nIGEgY29ubmVjdGlvbiByZXF1ZXN0LiAgSWYgYWNjZXB0aW5nIGEgY29ubmVjdGlvbgorICogICByZXNwb25zZSwgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBOVUxMLgorICoKKyAqIFR5cGljYWxseSwgdGhpcyByb3V0aW5lIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBsaXN0ZW5lciB0byBhY2NlcHQgYSBjb25uZWN0aW9uCisgKiByZXF1ZXN0LiAgSXQgbXVzdCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgYWN0aXZlIHNpZGUgb2YgYSBjb25uZWN0aW9uIGlmIHRoZQorICogdXNlciBpcyBwZXJmb3JtaW5nIHRoZWlyIG93biBRUCB0cmFuc2l0aW9ucy4KKyAqLworaW50IHJkbWFfYWNjZXB0KHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSk7CisKKy8qKgorICogcmRtYV9yZWplY3QgLSBDYWxsZWQgdG8gcmVqZWN0IGEgY29ubmVjdGlvbiByZXF1ZXN0IG9yIHJlc3BvbnNlLgorICovCitpbnQgcmRtYV9yZWplY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBjb25zdCB2b2lkICpwcml2YXRlX2RhdGEsCisJCXU4IHByaXZhdGVfZGF0YV9sZW4pOworCisvKioKKyAqIHJkbWFfZGlzY29ubmVjdCAtIFRoaXMgZnVuY3Rpb24gZGlzY29ubmVjdHMgdGhlIGFzc29jaWF0ZWQgUVAgYW5kCisgKiAgIHRyYW5zaXRpb25zIGl0IGludG8gdGhlIGVycm9yIHN0YXRlLgorICovCitpbnQgcmRtYV9kaXNjb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICppZCk7CisKKyNlbmRpZiAvKiBSRE1BX0NNX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL3JkbWFfY21faWIuaCBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtX2liLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjM2FmMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtX2liLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBTb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciBvbmUgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlczoKKyAqCisgKiAxKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJDb21tb24gUHVibGljIExpY2Vuc2UgMS4wIiBhIGNvcHkgb2Ygd2hpY2ggaXMKKyAqICAgIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvY3BsLnBocC4KKyAqCisgKiAyKSB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJUaGUgQlNEIExpY2Vuc2UiIGEgY29weSBvZiB3aGljaCBpcworICogICAgYXZhaWxhYmxlIGZyb20gdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUsIHNlZQorICogICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAuCisgKgorICogMykgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIiBhCisgKiAgICBjb3B5IG9mIHdoaWNoIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBzZWUKKyAqICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwLgorICoKKyAqIExpY2Vuc2VlIGhhcyB0aGUgcmlnaHQgdG8gY2hvb3NlIG9uZSBvZiB0aGUgYWJvdmUgbGljZW5zZXMuCisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgb25lIG9mIHRoZSBsaWNlbnNlIG5vdGljZXMuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCBvbmUgb2YgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICovCisKKyNpZiAhZGVmaW5lZChSRE1BX0NNX0lCX0gpCisjZGVmaW5lIFJETUFfQ01fSUJfSAorCisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisKKy8qKgorICogcmRtYV9zZXRfaWJfcGF0aHMgLSBNYW51YWxseSBzZXRzIHRoZSBwYXRoIHJlY29yZHMgdXNlZCB0byBlc3RhYmxpc2ggYQorICogICBjb25uZWN0aW9uLgorICogQGlkOiBDb25uZWN0aW9uIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LgorICogQHBhdGhfcmVjOiBSZWZlcmVuY2UgdG8gdGhlIHBhdGggcmVjb3JkCisgKgorICogVGhpcyBjYWxsIHBlcm1pdHMgYSB1c2VyIHRvIHNwZWNpZnkgcm91dGluZyBpbmZvcm1hdGlvbiBmb3IgcmRtYV9jbV9pZCdzCisgKiBib3VuZCB0byBJbmZpbmliYW5kIGRldmljZXMuICBJdCBpcyBjYWxsZWQgb24gdGhlIGNsaWVudCBzaWRlIG9mIGEKKyAqIGNvbm5lY3Rpb24gYW5kIHJlcGxhY2VzIHRoZSBjYWxsIHRvIHJkbWFfcmVzb2x2ZV9yb3V0ZS4KKyAqLworaW50IHJkbWFfc2V0X2liX3BhdGhzKHN0cnVjdCByZG1hX2NtX2lkICppZCwKKwkJICAgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpwYXRoX3JlYywgaW50IG51bV9wYXRocyk7CisKKyNlbmRpZiAvKiBSRE1BX0NNX0lCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKaW5kZXggNTYyNjIyNS4uNmQyOGIwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpZm5kZWYgU0NTSV9UUkFOU1BPUlRfRkNfSAogI2RlZmluZSBTQ1NJX1RSQU5TUE9SVF9GQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKaW5kZXggNWUxZDYxOS4uMzAyNjgwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBTQ1NJX1RSQU5TUE9SVF9TUElfSAogI2RlZmluZSBTQ1NJX1RSQU5TUE9SVF9TUElfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhbnNwb3J0X2NsYXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3NycC5oIGIvaW5jbHVkZS9zY3NpL3NycC5oCmluZGV4IDYzN2Y3N2UuLmFkMTc4ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zcnAuaAorKysgYi9pbmNsdWRlL3Njc2kvc3JwLmgKQEAgLTg3LDYgKzg3LDExIEBACiAJU1JQX0xPR0lOX1JFSl9DSEFOTkVMX0xJTUlUX1JFQUNIRUQJCT0gMHgwMDAxMDAwNgogfTsKIAorZW51bSB7CisJU1JQX1JFVjEwX0lCX0lPX0NMQVNTCT0gMHhmZjAwLAorCVNSUF9SRVYxNkFfSUJfSU9fQ0xBU1MJPSAweDAxMDAKK307CisKIHN0cnVjdCBzcnBfZGlyZWN0X2J1ZiB7CiAJX19iZTY0CXZhOwogCV9fYmUzMglrZXk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2RyaXZlci5oIGIvaW5jbHVkZS9zb3VuZC9kcml2ZXIuaAppbmRleCA4OWM2YTczLi4zYzUyMmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvc291bmQvZHJpdmVyLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIG51bWJlciBvZiBzdXBwb3J0ZWQgc291bmRjYXJkcyAqLwogI2lmZGVmIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaGRzcC5oIGIvaW5jbHVkZS9zb3VuZC9oZHNwLmgKaW5kZXggMjVlMTk1MS4uZGVjNmIxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9oZHNwLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9oZHNwLmgKQEAgLTMwLDEzICszMCwxMyBAQAogfTsKIAogc3RydWN0IGhkc3BfcGVha19ybXMgewotCXUzMiBpbnB1dF9wZWFrc1syNl07Ci0JdTMyIHBsYXliYWNrX3BlYWtzWzI2XTsKLQl1MzIgb3V0cHV0X3BlYWtzWzI4XTsKLQl1NjQgaW5wdXRfcm1zWzI2XTsKLQl1NjQgcGxheWJhY2tfcm1zWzI2XTsKKwlfX3UzMiBpbnB1dF9wZWFrc1syNl07CisJX191MzIgcGxheWJhY2tfcGVha3NbMjZdOworCV9fdTMyIG91dHB1dF9wZWFrc1syOF07CisJX191NjQgaW5wdXRfcm1zWzI2XTsKKwlfX3U2NCBwbGF5YmFja19ybXNbMjZdOwogCS8qIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIEg5Nnh4IGNhcmRzICovCi0JdTY0IG91dHB1dF9ybXNbMjZdOworCV9fdTY0IG91dHB1dF9ybXNbMjZdOwogfTsKIAogI2RlZmluZSBTTkRSVl9IRFNQX0lPQ1RMX0dFVF9QRUFLX1JNUyBfSU9SKCdIJywgMHg0MCwgc3RydWN0IGhkc3BfcGVha19ybXMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2VkaWQuaCBiL2luY2x1ZGUvdmlkZW8vZWRpZC5oCmluZGV4IGI5MTNmMTkuLmY2YTQyZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vZWRpZC5oCisrKyBiL2luY2x1ZGUvdmlkZW8vZWRpZC5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2CiBzdHJ1Y3QgZWRpZF9pbmZvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vdmdhLmggYi9pbmNsdWRlL3ZpZGVvL3ZnYS5oCmluZGV4IDcwMGQ2YzguLmI0OWE1MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vdmdhLmgKKysrIGIvaW5jbHVkZS92aWRlby92Z2EuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX2xpbnV4X3ZpZGVvX3ZnYV9oX18KICNkZWZpbmUgX19saW51eF92aWRlb192Z2FfaF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2lmbmRlZiBDT05GSUdfQU1JR0EKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCAzYjM2YTFkLi5kZjg2NGEzIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0xODIsNyArMTgyLDggQEAKIAloZWxwCiAJICBFbmFibGUgbG93LW92ZXJoZWFkIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIGluZnJhc3RydWN0dXJlIHRoYXQKIAkgIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb3Igd2l0aCBhbm90aGVyIGtlcm5lbCBzdWJzeXN0ZW0sCi0JICBzdWNoIGFzIFNFTGludXguCisJICBzdWNoIGFzIFNFTGludXguICBUbyB1c2UgYXVkaXQncyBmaWxlc3lzdGVtIHdhdGNoIGZlYXR1cmUsIHBsZWFzZQorCSAgZW5zdXJlIHRoYXQgSU5PVElGWSBpcyBjb25maWd1cmVkLgogCiBjb25maWcgSUtDT05GSUcKIAlib29sICJLZXJuZWwgLmNvbmZpZyBzdXBwb3J0IgpAQCAtMzg5LDkgKzM5MCw2IEBACiAJZGVmYXVsdCAhU0xBQgogCWJvb2wKIAotY29uZmlnIE9CU09MRVRFX0lOVEVSTU9EVUxFCi0JdHJpc3RhdGUKLQogbWVudSAiTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQiCiAKIGNvbmZpZyBNT0RVTEVTCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCBmNGI3YjlkLi4yMWIzYjhmIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5jCisrKyBiL2luaXQvZG9fbW91bnRzLmMKQEAgLTQwOSw2ICs0MDksMTAgQEAKIAogCWlmIChzYXZlZF9yb290X25hbWVbMF0pIHsKIAkJcm9vdF9kZXZpY2VfbmFtZSA9IHNhdmVkX3Jvb3RfbmFtZTsKKwkJaWYgKCFzdHJuY21wKHJvb3RfZGV2aWNlX25hbWUsICJtdGQiLCAzKSkgeworCQkJbW91bnRfYmxvY2tfcm9vdChyb290X2RldmljZV9uYW1lLCByb290X21vdW50ZmxhZ3MpOworCQkJZ290byBvdXQ7CisJCX0KIAkJUk9PVF9ERVYgPSBuYW1lX3RvX2Rldl90KHJvb3RfZGV2aWNlX25hbWUpOwogCQlpZiAoc3RybmNtcChyb290X2RldmljZV9uYW1lLCAiL2Rldi8iLCA1KSA9PSAwKQogCQkJcm9vdF9kZXZpY2VfbmFtZSArPSA1OwpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDQxZWNiZDQuLjE1MTE3MTQgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTgsNiArOCw4IEBACiAgKiBMb2NrbGVzcyByZWNlaXZlICYgc2VuZCwgZmQgYmFzZWQgbm90aWZ5OgogICogCQkJICAgIE1hbmZyZWQgU3ByYXVsCSAgICAobWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tKQogICoKKyAqIEF1ZGl0OiAgICAgICAgICAgICAgICAgICBHZW9yZ2UgV2lsc29uICAgICAgICAgICAobHRjZ2N3QHVzLmlibS5jb20pCisgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KIApAQCAtMjQsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApAQCAtNjU3LDYgKzY2MCwxMCBAQAogCWNoYXIgKm5hbWU7CiAJaW50IGZkLCBlcnJvcjsKIAorCWVycm9yID0gYXVkaXRfbXFfb3BlbihvZmxhZywgbW9kZSwgdV9hdHRyKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIGVycm9yOworCiAJaWYgKElTX0VSUihuYW1lID0gZ2V0bmFtZSh1X25hbWUpKSkKIAkJcmV0dXJuIFBUUl9FUlIobmFtZSk7CiAKQEAgLTgxNCw2ICs4MjEsMTAgQEAKIAlsb25nIHRpbWVvdXQ7CiAJaW50IHJldDsKIAorCXJldCA9IGF1ZGl0X21xX3RpbWVkc2VuZChtcWRlcywgbXNnX2xlbiwgbXNnX3ByaW8sIHVfYWJzX3RpbWVvdXQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwogCWlmICh1bmxpa2VseShtc2dfcHJpbyA+PSAodW5zaWduZWQgbG9uZykgTVFfUFJJT19NQVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODk2LDYgKzkwNywxMCBAQAogCXN0cnVjdCBtcXVldWVfaW5vZGVfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgZXh0X3dhaXRfcXVldWUgd2FpdDsKIAorCXJldCA9IGF1ZGl0X21xX3RpbWVkcmVjZWl2ZShtcWRlcywgbXNnX2xlbiwgdV9tc2dfcHJpbywgdV9hYnNfdGltZW91dCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJdGltZW91dCA9IHByZXBhcmVfdGltZW91dCh1X2Fic190aW1lb3V0KTsKIAogCXJldCA9IC1FQkFERjsKQEAgLTk3NSw2ICs5OTAsMTAgQEAKIAlzdHJ1Y3QgbXF1ZXVlX2lub2RlX2luZm8gKmluZm87CiAJc3RydWN0IHNrX2J1ZmYgKm5jOwogCisJcmV0ID0gYXVkaXRfbXFfbm90aWZ5KG1xZGVzLCB1X25vdGlmaWNhdGlvbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJbmMgPSBOVUxMOwogCXNvY2sgPSBOVUxMOwogCWlmICh1X25vdGlmaWNhdGlvbiAhPSBOVUxMKSB7CkBAIC0xMTE1LDYgKzExMzQsOSBAQAogCW9tcXN0YXQgPSBpbmZvLT5hdHRyOwogCW9tcXN0YXQubXFfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlpZiAodV9tcXN0YXQpIHsKKwkJcmV0ID0gYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRlcywgJm1xc3RhdCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gb3V0OwogCQlpZiAobXFzdGF0Lm1xX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCWZpbHAtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvaXBjL21zZy5jIGIvaXBjL21zZy5jCmluZGV4IDdkMTM0MGMuLjAwZjAxNWEgMTAwNjQ0Ci0tLSBhL2lwYy9tc2cuYworKysgYi9pcGMvbXNnLmMKQEAgLTQ1NCw2ICs0NTQsMTEgQEAKIAllcnIgPSBhdWRpdF9pcGNfb2JqKGlwY3ApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9ja191cDsKKwlpZiAoY21kPT1JUENfU0VUKSB7CisJCWVyciA9IGF1ZGl0X2lwY19zZXRfcGVybShzZXRidWYucWJ5dGVzLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF91bmxvY2tfdXA7CisJfQogCiAJZXJyID0gLUVQRVJNOwogCWlmIChjdXJyZW50LT5ldWlkICE9IGlwY3AtPmN1aWQgJiYgCkBAIC00NjgsMTAgKzQ3Myw2IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIElQQ19TRVQ6CiAJewotCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oc2V0YnVmLnFieXRlcywgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfdW5sb2NrX3VwOwotCiAJCWVyciA9IC1FUEVSTTsKIAkJaWYgKHNldGJ1Zi5xYnl0ZXMgPiBtc2dfY3RsbW5iICYmICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOwpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IDc5MTlmOGUuLmZjZTBiYzggMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTgyOCw2ICs4MjgsMTEgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwlpZiAoY21kID09IElQQ19TRVQpIHsKKwkJZXJyID0gYXVkaXRfaXBjX3NldF9wZXJtKDAsIHNldGJ1Zi51aWQsIHNldGJ1Zi5naWQsIHNldGJ1Zi5tb2RlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAJaWYgKGN1cnJlbnQtPmV1aWQgIT0gaXBjcC0+Y3VpZCAmJiAKIAkgICAgY3VycmVudC0+ZXVpZCAhPSBpcGNwLT51aWQgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkgICAgCWVycj0tRVBFUk07CkBAIC04NDQsOSArODQ5LDYgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJUENfU0VUOgotCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsIGlwY3ApOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfdW5sb2NrOwogCQlpcGNwLT51aWQgPSBzZXRidWYudWlkOwogCQlpcGNwLT5naWQgPSBzZXRidWYuZ2lkOwogCQlpcGNwLT5tb2RlID0gKGlwY3AtPm1vZGUgJiB+U19JUldYVUdPKQpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDgwOTg5NjguLjRmMTMzZDIgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTY0Myw3ICs2NDMsNyBAQAogCQllcnIgPSBhdWRpdF9pcGNfb2JqKCYoc2hwLT5zaG1fcGVybSkpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOwotCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUsICYoc2hwLT5zaG1fcGVybSkpOworCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrX3VwOwogCQllcnI9LUVQRVJNOwpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDU4OTA4ZjkuLmY2ZWYwMGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTIwLDcgKzIwLDYgQEAKIG9iai0kKENPTkZJR19ERUJVR19TUElOTE9DSykgKz0gc3BpbmxvY2subwogb2JqLSQoQ09ORklHX1VJRDE2KSArPSB1aWQxNi5vCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8KLW9iai0kKENPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRSkgKz0gaW50ZXJtb2R1bGUubwogb2JqLSQoQ09ORklHX0tBTExTWU1TKSArPSBrYWxsc3ltcy5vCiBvYmotJChDT05GSUdfUE0pICs9IHBvd2VyLwogb2JqLSQoQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QpICs9IGFjY3QubwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCBkZjU3YjQ5Li43ZGZhYzcwIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgogCiAjaW5jbHVkZSAiYXVkaXQuaCIKIApAQCAtODksNiArOTAsNyBAQAogLyogVGhlIGlkZW50aXR5IG9mIHRoZSB1c2VyIHNodXR0aW5nIGRvd24gdGhlIGF1ZGl0IHN5c3RlbS4gKi8KIHVpZF90CQlhdWRpdF9zaWdfdWlkID0gLTE7CiBwaWRfdAkJYXVkaXRfc2lnX3BpZCA9IC0xOwordTMyCQlhdWRpdF9zaWdfc2lkID0gMDsKIAogLyogUmVjb3JkcyBjYW4gYmUgbG9zdCBpbiBzZXZlcmFsIHdheXM6CiAgICAwKSBbc3VwcHJlc3NlZCBpbiBhdWRpdF9hbGxvY10KQEAgLTEwMiw2ICsxMDQsMTIgQEAKIC8qIFRoZSBuZXRsaW5rIHNvY2tldC4gKi8KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqYXVkaXRfc29jazsKIAorLyogSW5vdGlmeSBoYW5kbGUuICovCitzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmF1ZGl0X2loOworCisvKiBIYXNoIGZvciBpbm9kZS1iYXNlZCBydWxlcyAqLworc3RydWN0IGxpc3RfaGVhZCBhdWRpdF9pbm9kZV9oYXNoW0FVRElUX0lOT0RFX0JVQ0tFVFNdOworCiAvKiBUaGUgYXVkaXRfZnJlZWxpc3QgaXMgYSBsaXN0IG9mIHByZS1hbGxvY2F0ZWQgYXVkaXQgYnVmZmVycyAoaWYgbW9yZQogICogdGhhbiBBVURJVF9NQVhGUkVFIGFyZSBpbiB1c2UsIHRoZSBhdWRpdCBidWZmZXIgaXMgZnJlZWQgaW5zdGVhZCBvZgogICogYmVpbmcgcGxhY2VkIG9uIHRoZSBmcmVlbGlzdCkuICovCkBAIC0xMTQsMTAgKzEyMiw4IEBACiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa2F1ZGl0ZF93YWl0KTsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhdWRpdF9iYWNrbG9nX3dhaXQpOwogCi0vKiBUaGUgbmV0bGluayBzb2NrZXQgaXMgb25seSB0byBiZSByZWFkIGJ5IDEgQ1BVLCB3aGljaCBsZXRzIHVzIGFzc3VtZQotICogdGhhdCBsaXN0IGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIG5ldmVyIGhhcHBlbiBzaW11bHRhbmVvdXNseSBpbgotICogYXVkaXRzYy5jICovCi1ERUZJTkVfTVVURVgoYXVkaXRfbmV0bGlua19tdXRleCk7CisvKiBTZXJpYWxpemUgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UuICovCitzdGF0aWMgREVGSU5FX01VVEVYKGF1ZGl0X2NtZF9tdXRleCk7CiAKIC8qIEFVRElUX0JVRlNJWiBpcyB0aGUgc2l6ZSBvZiB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvciBmb3JtYXR0aW5nCiAgKiBhdWRpdCByZWNvcmRzLiAgU2luY2UgcHJpbnRrIHVzZXMgYSAxMDI0IGJ5dGUgYnVmZmVyLCB0aGlzIGJ1ZmZlcgpAQCAtMjUwLDcgKzI1Niw3IEBACiAJCQkiYXVkaXRfcmF0ZV9saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCiAJCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCk7CiAJYXVkaXRfcmF0ZV9saW1pdCA9IGxpbWl0OwotCXJldHVybiBvbGQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoaW50IGxpbWl0LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKQEAgLTI3Myw3ICsyNzksNyBAQAogCQkJImF1ZGl0X2JhY2tsb2dfbGltaXQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAogCQkJbGltaXQsIG9sZCwgbG9naW51aWQpOwogCWF1ZGl0X2JhY2tsb2dfbGltaXQgPSBsaW1pdDsKLQlyZXR1cm4gb2xkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF1ZGl0X3NldF9lbmFibGVkKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQsIHUzMiBzaWQpCkBAIC0yOTksNyArMzA1LDcgQEAKIAkJCSJhdWRpdF9lbmFibGVkPSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKIAkJCXN0YXRlLCBvbGQsIGxvZ2ludWlkKTsKIAlhdWRpdF9lbmFibGVkID0gc3RhdGU7Ci0JcmV0dXJuIG9sZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdWRpdF9zZXRfZmFpbHVyZShpbnQgc3RhdGUsIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQpAQCAtMzI3LDcgKzMzMyw3IEBACiAJCQkiYXVkaXRfZmFpbHVyZT0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCiAJCQlzdGF0ZSwgb2xkLCBsb2dpbnVpZCk7CiAJYXVkaXRfZmFpbHVyZSA9IHN0YXRlOwotCXJldHVybiBvbGQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQga2F1ZGl0ZF90aHJlYWQodm9pZCAqZHVtbXkpCkBAIC0zNjMsOSArMzY5LDUyIEBACiAJCQlyZW1vdmVfd2FpdF9xdWV1ZSgma2F1ZGl0ZF93YWl0LCAmd2FpdCk7CiAJCX0KIAl9Cit9CisKK2ludCBhdWRpdF9zZW5kX2xpc3Qodm9pZCAqX2Rlc3QpCit7CisJc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCAqZGVzdCA9IF9kZXN0OworCWludCBwaWQgPSBkZXN0LT5waWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qIHdhaXQgZm9yIHBhcmVudCB0byBmaW5pc2ggYW5kIHNlbmQgYW4gQUNLICovCisJbXV0ZXhfbG9jaygmYXVkaXRfY21kX211dGV4KTsKKwltdXRleF91bmxvY2soJmF1ZGl0X2NtZF9tdXRleCk7CisKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmRlc3QtPnEpKSAhPSBOVUxMKQorCQluZXRsaW5rX3VuaWNhc3QoYXVkaXRfc29jaywgc2tiLCBwaWQsIDApOworCisJa2ZyZWUoZGVzdCk7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IHNrX2J1ZmYgKmF1ZGl0X21ha2VfcmVwbHkoaW50IHBpZCwgaW50IHNlcSwgaW50IHR5cGUsIGludCBkb25lLAorCQkJCSBpbnQgbXVsdGksIHZvaWQgKnBheWxvYWQsIGludCBzaXplKQoreworCXN0cnVjdCBza19idWZmCSpza2I7CisJc3RydWN0IG5sbXNnaGRyCSpubGg7CisJaW50CQlsZW4gPSBOTE1TR19TUEFDRShzaXplKTsKKwl2b2lkCQkqZGF0YTsKKwlpbnQJCWZsYWdzID0gbXVsdGkgPyBOTE1fRl9NVUxUSSA6IDA7CisJaW50CQl0ICAgICA9IGRvbmUgID8gTkxNU0dfRE9ORSAgOiB0eXBlOworCisJc2tiID0gYWxsb2Nfc2tiKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybiBOVUxMOworCisJbmxoCQkgPSBOTE1TR19QVVQoc2tiLCBwaWQsIHNlcSwgdCwgc2l6ZSk7CisJbmxoLT5ubG1zZ19mbGFncyA9IGZsYWdzOworCWRhdGEJCSA9IE5MTVNHX0RBVEEobmxoKTsKKwltZW1jcHkoZGF0YSwgcGF5bG9hZCwgc2l6ZSk7CisJcmV0dXJuIHNrYjsKKworbmxtc2dfZmFpbHVyZToJCQkvKiBVc2VkIGJ5IE5MTVNHX1BVVCAqLworCWlmIChza2IpCisJCWtmcmVlX3NrYihza2IpOworCXJldHVybiBOVUxMOworfQorCiAvKioKICAqIGF1ZGl0X3NlbmRfcmVwbHkgLSBzZW5kIGFuIGF1ZGl0IHJlcGx5IG1lc3NhZ2UgdmlhIG5ldGxpbmsKICAqIEBwaWQ6IHByb2Nlc3MgaWQgdG8gc2VuZCByZXBseSB0bwpAQCAtMzgzLDI5ICs0MzIsMTMgQEAKIAkJICAgICAgdm9pZCAqcGF5bG9hZCwgaW50IHNpemUpCiB7CiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKLQlzdHJ1Y3Qgbmxtc2doZHIJKm5saDsKLQlpbnQJCWxlbiA9IE5MTVNHX1NQQUNFKHNpemUpOwotCXZvaWQJCSpkYXRhOwotCWludAkJZmxhZ3MgPSBtdWx0aSA/IE5MTV9GX01VTFRJIDogMDsKLQlpbnQJCXQgICAgID0gZG9uZSAgPyBOTE1TR19ET05FICA6IHR5cGU7Ci0KLQlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCB0eXBlLCBkb25lLCBtdWx0aSwgcGF5bG9hZCwgc2l6ZSk7CiAJaWYgKCFza2IpCiAJCXJldHVybjsKLQotCW5saAkJID0gTkxNU0dfUFVUKHNrYiwgcGlkLCBzZXEsIHQsIHNpemUpOwotCW5saC0+bmxtc2dfZmxhZ3MgPSBmbGFnczsKLQlkYXRhCQkgPSBOTE1TR19EQVRBKG5saCk7Ci0JbWVtY3B5KGRhdGEsIHBheWxvYWQsIHNpemUpOwotCiAJLyogSWdub3JlIGZhaWx1cmUuIEl0J2xsIG9ubHkgaGFwcGVuIGlmIHRoZSBzZW5kZXIgZ29lcyBhd2F5LAogCSAgIGJlY2F1c2Ugb3VyIHRpbWVvdXQgaXMgc2V0IHRvIGluZmluaXRlLiAqLwogCW5ldGxpbmtfdW5pY2FzdChhdWRpdF9zb2NrLCBza2IsIHBpZCwgMCk7CiAJcmV0dXJuOwotCi1ubG1zZ19mYWlsdXJlOgkJCS8qIFVzZWQgYnkgTkxNU0dfUFVUICovCi0JaWYgKHNrYikKLQkJa2ZyZWVfc2tiKHNrYik7CiB9CiAKIC8qCkBAIC00NTEsNyArNDg0LDkgQEAKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyCSphYjsKIAl1MTYJCQltc2dfdHlwZSA9IG5saC0+bmxtc2dfdHlwZTsKIAl1aWRfdAkJCWxvZ2ludWlkOyAvKiBsb2dpbnVpZCBvZiBzZW5kZXIgKi8KLQlzdHJ1Y3QgYXVkaXRfc2lnX2luZm8gICBzaWdfZGF0YTsKKwlzdHJ1Y3QgYXVkaXRfc2lnX2luZm8gICAqc2lnX2RhdGE7CisJY2hhcgkJCSpjdHg7CisJdTMyCQkJbGVuOwogCiAJZXJyID0gYXVkaXRfbmV0bGlua19vayhORVRMSU5LX0NCKHNrYikuZWZmX2NhcCwgbXNnX3R5cGUpOwogCWlmIChlcnIpCkBAIC01MDMsMTIgKzUzOCw5IEBACiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX1BJRCkgewogCQkJaW50IG9sZCAgID0gYXVkaXRfcGlkOwogCQkJaWYgKHNpZCkgewotCQkJCWNoYXIgKmN0eCA9IE5VTEw7Ci0JCQkJdTMyIGxlbjsKLQkJCQlpbnQgcmM7Ci0JCQkJaWYgKChyYyA9IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKAorCQkJCWlmICgoZXJyID0gc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCiAJCQkJCQlzaWQsICZjdHgsICZsZW4pKSkKLQkJCQkJcmV0dXJuIHJjOworCQkJCQlyZXR1cm4gZXJyOwogCQkJCWVsc2UKIAkJCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsCiAJCQkJCQlBVURJVF9DT05GSUdfQ0hBTkdFLApAQCAtNTIzLDEwICs1NTUsMTAgQEAKIAkJCWF1ZGl0X3BpZCA9IHN0YXR1c19nZXQtPnBpZDsKIAkJfQogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19SQVRFX0xJTUlUKQotCQkJYXVkaXRfc2V0X3JhdGVfbGltaXQoc3RhdHVzX2dldC0+cmF0ZV9saW1pdCwKKwkJCWVyciA9IGF1ZGl0X3NldF9yYXRlX2xpbWl0KHN0YXR1c19nZXQtPnJhdGVfbGltaXQsCiAJCQkJCQkJIGxvZ2ludWlkLCBzaWQpOwogCQlpZiAoc3RhdHVzX2dldC0+bWFzayAmIEFVRElUX1NUQVRVU19CQUNLTE9HX0xJTUlUKQotCQkJYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoc3RhdHVzX2dldC0+YmFja2xvZ19saW1pdCwKKwkJCWVyciA9IGF1ZGl0X3NldF9iYWNrbG9nX2xpbWl0KHN0YXR1c19nZXQtPmJhY2tsb2dfbGltaXQsCiAJCQkJCQkJbG9naW51aWQsIHNpZCk7CiAJCWJyZWFrOwogCWNhc2UgQVVESVRfVVNFUjoKQEAgLTU0NCw4ICs1NzYsNiBAQAogCQkJCQkJICJ1c2VyIHBpZD0lZCB1aWQ9JXUgYXVpZD0ldSIsCiAJCQkJCQkgcGlkLCB1aWQsIGxvZ2ludWlkKTsKIAkJCQlpZiAoc2lkKSB7Ci0JCQkJCWNoYXIgKmN0eCA9IE5VTEw7Ci0JCQkJCXUzMiBsZW47CiAJCQkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKIAkJCQkJCQlzaWQsICZjdHgsICZsZW4pKSB7CiAJCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKQEAgLTU4NCwxMCArNjE0LDIxIEBACiAJCQkJCSAgIGxvZ2ludWlkLCBzaWQpOwogCQlicmVhazsKIAljYXNlIEFVRElUX1NJR05BTF9JTkZPOgotCQlzaWdfZGF0YS51aWQgPSBhdWRpdF9zaWdfdWlkOwotCQlzaWdfZGF0YS5waWQgPSBhdWRpdF9zaWdfcGlkOworCQllcnIgPSBzZWxpbnV4X2N0eGlkX3RvX3N0cmluZyhhdWRpdF9zaWdfc2lkLCAmY3R4LCAmbGVuKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCXNpZ19kYXRhID0ga21hbGxvYyhzaXplb2YoKnNpZ19kYXRhKSArIGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2lnX2RhdGEpIHsKKwkJCWtmcmVlKGN0eCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzaWdfZGF0YS0+dWlkID0gYXVkaXRfc2lnX3VpZDsKKwkJc2lnX2RhdGEtPnBpZCA9IGF1ZGl0X3NpZ19waWQ7CisJCW1lbWNweShzaWdfZGF0YS0+Y3R4LCBjdHgsIGxlbik7CisJCWtmcmVlKGN0eCk7CiAJCWF1ZGl0X3NlbmRfcmVwbHkoTkVUTElOS19DQihza2IpLnBpZCwgc2VxLCBBVURJVF9TSUdOQUxfSU5GTywgCi0JCQkJMCwgMCwgJnNpZ19kYXRhLCBzaXplb2Yoc2lnX2RhdGEpKTsKKwkJCQkwLCAwLCBzaWdfZGF0YSwgc2l6ZW9mKCpzaWdfZGF0YSkgKyBsZW4pOworCQlrZnJlZShzaWdfZGF0YSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FSU5WQUw7CkBAIC02MjksMjAgKzY3MCwzMCBAQAogCXN0cnVjdCBza19idWZmICAqc2tiOwogCXVuc2lnbmVkIGludCBxbGVuOwogCi0JbXV0ZXhfbG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7CisJbXV0ZXhfbG9jaygmYXVkaXRfY21kX211dGV4KTsKIAogCWZvciAocWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsgcWxlbjsgcWxlbi0tKSB7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJCWF1ZGl0X3JlY2VpdmVfc2tiKHNrYik7CiAJCWtmcmVlX3NrYihza2IpOwogCX0KLQltdXRleF91bmxvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYXVkaXRfY21kX211dGV4KTsKIH0KIAorI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zIGF1ZGl0X2lub3RpZnlfb3BzID0geworCS5oYW5kbGVfZXZlbnQJPSBhdWRpdF9oYW5kbGVfaWV2ZW50LAorCS5kZXN0cm95X3dhdGNoCT0gYXVkaXRfZnJlZV9wYXJlbnQsCit9OworI2VuZGlmCiAKIC8qIEluaXRpYWxpemUgYXVkaXQgc3VwcG9ydCBhdCBib290IHRpbWUuICovCiBzdGF0aWMgaW50IF9faW5pdCBhdWRpdF9pbml0KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAorCWludCBpOworI2VuZGlmCisKIAlwcmludGsoS0VSTl9JTkZPICJhdWRpdDogaW5pdGlhbGl6aW5nIG5ldGxpbmsgc29ja2V0ICglcylcbiIsCiAJICAgICAgIGF1ZGl0X2RlZmF1bHQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKIAlhdWRpdF9zb2NrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfQVVESVQsIDAsIGF1ZGl0X3JlY2VpdmUsCkBAIC02NjEsNiArNzEyLDE2IEBACiAJc2VsaW51eF9hdWRpdF9zZXRfY2FsbGJhY2soJnNlbGludXhfYXVkaXRfcnVsZV91cGRhdGUpOwogCiAJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0tFUk5FTCwgImluaXRpYWxpemVkIik7CisKKyNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCisJYXVkaXRfaWggPSBpbm90aWZ5X2luaXQoJmF1ZGl0X2lub3RpZnlfb3BzKTsKKwlpZiAoSVNfRVJSKGF1ZGl0X2loKSkKKwkJYXVkaXRfcGFuaWMoImNhbm5vdCBpbml0aWFsaXplIGlub3RpZnkgaGFuZGxlIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVVESVRfSU5PREVfQlVDS0VUUzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmYXVkaXRfaW5vZGVfaGFzaFtpXSk7CisjZW5kaWYKKwogCXJldHVybiAwOwogfQogX19pbml0Y2FsbChhdWRpdF9pbml0KTsKQEAgLTY5MCwxMCArNzUxLDEyIEBACiAJCWtmcmVlX3NrYihhYi0+c2tiKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhdWRpdF9mcmVlbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKCsrYXVkaXRfZnJlZWxpc3RfY291bnQgPiBBVURJVF9NQVhGUkVFKQorCWlmIChhdWRpdF9mcmVlbGlzdF9jb3VudCA+IEFVRElUX01BWEZSRUUpCiAJCWtmcmVlKGFiKTsKLQllbHNlCisJZWxzZSB7CisJCWF1ZGl0X2ZyZWVsaXN0X2NvdW50Kys7CiAJCWxpc3RfYWRkKCZhYi0+bGlzdCwgJmF1ZGl0X2ZyZWVsaXN0KTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVkaXRfZnJlZWxpc3RfbG9jaywgZmxhZ3MpOwogfQogCkBAIC05ODgsMjggKzEwNTEsNzYgQEAKIAlza2JfcHV0KHNrYiwgbGVuIDw8IDEpOyAvKiBuZXcgc3RyaW5nIGlzIHR3aWNlIHRoZSBvbGQgc3RyaW5nICovCiB9CiAKKy8qCisgKiBGb3JtYXQgYSBzdHJpbmcgb2Ygbm8gbW9yZSB0aGFuIHNsZW4gY2hhcmFjdGVycyBpbnRvIHRoZSBhdWRpdCBidWZmZXIsCisgKiBlbmNsb3NlZCBpbiBxdW90ZSBtYXJrcy4KKyAqLworc3RhdGljIHZvaWQgYXVkaXRfbG9nX25fc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBzaXplX3Qgc2xlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJaW50IGF2YWlsLCBuZXdfbGVuOworCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJQlVHX09OKCFhYi0+c2tiKTsKKwlza2IgPSBhYi0+c2tiOworCWF2YWlsID0gc2tiX3RhaWxyb29tKHNrYik7CisJbmV3X2xlbiA9IHNsZW4gKyAzOwkvKiBlbmNsb3NpbmcgcXVvdGVzICsgbnVsbCB0ZXJtaW5hdG9yICovCisJaWYgKG5ld19sZW4gPiBhdmFpbCkgeworCQlhdmFpbCA9IGF1ZGl0X2V4cGFuZChhYiwgbmV3X2xlbik7CisJCWlmICghYXZhaWwpCisJCQlyZXR1cm47CisJfQorCXB0ciA9IHNrYi0+dGFpbDsKKwkqcHRyKysgPSAnIic7CisJbWVtY3B5KHB0ciwgc3RyaW5nLCBzbGVuKTsKKwlwdHIgKz0gc2xlbjsKKwkqcHRyKysgPSAnIic7CisJKnB0ciA9IDA7CisJc2tiX3B1dChza2IsIHNsZW4gKyAyKTsJLyogZG9uJ3QgaW5jbHVkZSBudWxsIHRlcm1pbmF0b3IgKi8KK30KKwogLyoqCi0gKiBhdWRpdF9sb2dfdW5zdHJ1c3RlZHN0cmluZyAtIGxvZyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIHJhbmRvbSBjaGFyYWN0ZXJzCisgKiBhdWRpdF9sb2dfbl91bnN0cnVzdGVkc3RyaW5nIC0gbG9nIGEgc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gcmFuZG9tIGNoYXJhY3RlcnMKICAqIEBhYjogYXVkaXRfYnVmZmVyCisgKiBAbGVuOiBsZW50aCBvZiBzdHJpbmcgKG5vdCBpbmNsdWRpbmcgdHJhaWxpbmcgbnVsbCkKICAqIEBzdHJpbmc6IHN0cmluZyB0byBiZSBsb2dnZWQKICAqCiAgKiBUaGlzIGNvZGUgd2lsbCBlc2NhcGUgYSBzdHJpbmcgdGhhdCBpcyBwYXNzZWQgdG8gaXQgaWYgdGhlIHN0cmluZwogICogY29udGFpbnMgYSBjb250cm9sIGNoYXJhY3RlciwgdW5wcmludGFibGUgY2hhcmFjdGVyLCBkb3VibGUgcXVvdGUgbWFyaywKICAqIG9yIGEgc3BhY2UuIFVuZXNjYXBlZCBzdHJpbmdzIHdpbGwgc3RhcnQgYW5kIGVuZCB3aXRoIGEgZG91YmxlIHF1b3RlIG1hcmsuCiAgKiBTdHJpbmdzIHRoYXQgYXJlIGVzY2FwZWQgYXJlIHByaW50ZWQgaW4gaGV4ICgyIGRpZ2l0cyBwZXIgY2hhcikuCisgKgorICogVGhlIGNhbGxlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgdG8gbG9nLCB3aGljaCBtYXkKKyAqIG9yIG1heSBub3QgYmUgdGhlIGVudGlyZSBzdHJpbmcuCiAgKi8KLXZvaWQgYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgY29uc3QgY2hhciAqc3RyaW5nKQorY29uc3QgY2hhciAqYXVkaXRfbG9nX25fdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBzaXplX3QgbGVuLAorCQkJCQljb25zdCBjaGFyICpzdHJpbmcpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHN0cmluZzsKIAogCXdoaWxlICgqcCkgewogCQlpZiAoKnAgPT0gJyInIHx8ICpwIDwgMHgyMSB8fCAqcCA+IDB4N2YpIHsKLQkJCWF1ZGl0X2xvZ19oZXgoYWIsIHN0cmluZywgc3RybGVuKHN0cmluZykpOwotCQkJcmV0dXJuOworCQkJYXVkaXRfbG9nX2hleChhYiwgc3RyaW5nLCBsZW4pOworCQkJcmV0dXJuIHN0cmluZyArIGxlbiArIDE7CiAJCX0KIAkJcCsrOwogCX0KLQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiXCIlc1wiIiwgc3RyaW5nKTsKKwlhdWRpdF9sb2dfbl9zdHJpbmcoYWIsIGxlbiwgc3RyaW5nKTsKKwlyZXR1cm4gcCArIDE7Cit9CisKKy8qKgorICogYXVkaXRfbG9nX3Vuc3RydXN0ZWRzdHJpbmcgLSBsb2cgYSBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiByYW5kb20gY2hhcmFjdGVycworICogQGFiOiBhdWRpdF9idWZmZXIKKyAqIEBzdHJpbmc6IHN0cmluZyB0byBiZSBsb2dnZWQKKyAqCisgKiBTYW1lIGFzIGF1ZGl0X2xvZ19uX3Vuc3RydXN0ZWRzdHJpbmcoKSwgZXhjZXB0IHRoYXQgc3RybGVuIGlzIHVzZWQgdG8KKyAqIGRldGVybWluZSBzdHJpbmcgbGVuZ3RoLgorICovCitjb25zdCBjaGFyICphdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIGF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhhYiwgc3RybGVuKHN0cmluZyksIHN0cmluZyk7CiB9CiAKIC8qIFRoaXMgaXMgYSBoZWxwZXItZnVuY3Rpb24gdG8gcHJpbnQgdGhlIGVzY2FwZWQgZF9wYXRoICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuaCBiL2tlcm5lbC9hdWRpdC5oCmluZGV4IDZmNzMzOTIuLjgzMjNlNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5oCisrKyBiL2tlcm5lbC9hdWRpdC5oCkBAIC0xOSw5ICsxOSw5IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAvKiAwID0gbm8gY2hlY2tpbmcKICAgIDEgPSBwdXRfY291bnQgY2hlY2tpbmcKQEAgLTUzLDYgKzUzLDE4IEBACiB9OwogCiAvKiBSdWxlIGxpc3RzICovCitzdHJ1Y3QgYXVkaXRfcGFyZW50OworCitzdHJ1Y3QgYXVkaXRfd2F0Y2ggeworCWF0b21pY190CQljb3VudDsJLyogcmVmZXJlbmNlIGNvdW50ICovCisJY2hhcgkJCSpwYXRoOwkvKiBpbnNlcnRpb24gcGF0aCAqLworCWRldl90CQkJZGV2OwkvKiBhc3NvY2lhdGVkIHN1cGVyYmxvY2sgZGV2aWNlICovCisJdW5zaWduZWQgbG9uZwkJaW5vOwkvKiBhc3NvY2lhdGVkIGlub2RlIG51bWJlciAqLworCXN0cnVjdCBhdWRpdF9wYXJlbnQJKnBhcmVudDsgLyogYXNzb2NpYXRlZCBwYXJlbnQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXdsaXN0OwkvKiBlbnRyeSBpbiBwYXJlbnQtPndhdGNoZXMgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcnVsZXM7CS8qIGFzc29jaWF0ZWQgcnVsZXMgKi8KK307CisKIHN0cnVjdCBhdWRpdF9maWVsZCB7CiAJdTMyCQkJCXR5cGU7CiAJdTMyCQkJCXZhbDsKQEAgLTcwLDYgKzgyLDkgQEAKIAl1MzIJCQlidWZsZW47IC8qIGZvciBkYXRhIGFsbG9jIG9uIGxpc3QgcnVsZXMgKi8KIAl1MzIJCQlmaWVsZF9jb3VudDsKIAlzdHJ1Y3QgYXVkaXRfZmllbGQJKmZpZWxkczsKKwlzdHJ1Y3QgYXVkaXRfZmllbGQJKmlub2RlX2Y7IC8qIHF1aWNrIGFjY2VzcyB0byBhbiBpbm9kZSBmaWVsZCAqLworCXN0cnVjdCBhdWRpdF93YXRjaAkqd2F0Y2g7CS8qIGFzc29jaWF0ZWQgd2F0Y2ggKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJsaXN0OwkvKiBlbnRyeSBpbiBhdWRpdF93YXRjaC5ydWxlcyBsaXN0ICovCiB9OwogCiBzdHJ1Y3QgYXVkaXRfZW50cnkgewpAQCAtNzgsMTUgKzkzLDUzIEBACiAJc3RydWN0IGF1ZGl0X2tydWxlCXJ1bGU7CiB9OwogCi0KIGV4dGVybiBpbnQgYXVkaXRfcGlkOwotZXh0ZXJuIGludCBhdWRpdF9jb21wYXJhdG9yKGNvbnN0IHUzMiBsZWZ0LCBjb25zdCB1MzIgb3AsIGNvbnN0IHUzMiByaWdodCk7CiAKKyNkZWZpbmUgQVVESVRfSU5PREVfQlVDS0VUUwkzMgorZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYXVkaXRfaW5vZGVfaGFzaFtBVURJVF9JTk9ERV9CVUNLRVRTXTsKKworc3RhdGljIGlubGluZSBpbnQgYXVkaXRfaGFzaF9pbm8odTMyIGlubykKK3sKKwlyZXR1cm4gKGlubyAmIChBVURJVF9JTk9ERV9CVUNLRVRTLTEpKTsKK30KKworZXh0ZXJuIGludCBhdWRpdF9jb21wYXJhdG9yKGNvbnN0IHUzMiBsZWZ0LCBjb25zdCB1MzIgb3AsIGNvbnN0IHUzMiByaWdodCk7CitleHRlcm4gaW50IGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChjb25zdCBjaGFyICpkbmFtZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgaW50ICpkaXJsZW4pOworZXh0ZXJuIHN0cnVjdCBza19idWZmICoJICAgIGF1ZGl0X21ha2VfcmVwbHkoaW50IHBpZCwgaW50IHNlcSwgaW50IHR5cGUsCisJCQkJCSAgICAgaW50IGRvbmUsIGludCBtdWx0aSwKKwkJCQkJICAgICB2b2lkICpwYXlsb2FkLCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X3NlbmRfcmVwbHkoaW50IHBpZCwgaW50IHNlcSwgaW50IHR5cGUsCiAJCQkJCSAgICAgaW50IGRvbmUsIGludCBtdWx0aSwKIAkJCQkJICAgICB2b2lkICpwYXlsb2FkLCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19sb3N0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9wYW5pYyhjb25zdCBjaGFyICptZXNzYWdlKTsKLWV4dGVybiBzdHJ1Y3QgbXV0ZXggYXVkaXRfbmV0bGlua19tdXRleDsKIAorc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCB7CisJaW50IHBpZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHE7Cit9OworCitpbnQgYXVkaXRfc2VuZF9saXN0KHZvaWQgKik7CisKK3N0cnVjdCBpbm90aWZ5X3dhdGNoOworZXh0ZXJuIHZvaWQgYXVkaXRfZnJlZV9wYXJlbnQoc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7CitleHRlcm4gdm9pZCBhdWRpdF9oYW5kbGVfaWV2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICosIHUzMiwgdTMyLCB1MzIsCisJCQkJY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IHNlbGludXhfYXVkaXRfcnVsZV91cGRhdGUodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCitleHRlcm4gdm9pZCBfX2F1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KQoreworCWlmICh1bmxpa2VseShhdWRpdF9waWQgJiYgdC0+dGdpZCA9PSBhdWRpdF9waWQpKQorCQlfX2F1ZGl0X3NpZ25hbF9pbmZvKHNpZywgdCk7Cit9CitleHRlcm4gZW51bSBhdWRpdF9zdGF0ZSBhdWRpdF9maWx0ZXJfaW5vZGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqLAorCQkJCQkgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKik7CitleHRlcm4gdm9pZCBhdWRpdF9zZXRfYXVkaXRhYmxlKHN0cnVjdCBhdWRpdF9jb250ZXh0ICopOworI2Vsc2UKKyNkZWZpbmUgYXVkaXRfc2lnbmFsX2luZm8ocyx0KQorI2RlZmluZSBhdWRpdF9maWx0ZXJfaW5vZGVzKHQsYykgQVVESVRfRElTQUJMRUQKKyNkZWZpbmUgYXVkaXRfc2V0X2F1ZGl0YWJsZShjKQorI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCmluZGV4IDdjMTM0OTAuLjRjOTlkMmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdGZpbHRlci5jCisrKyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCkBAIC0yMiwxMyArMjIsNTkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgImF1ZGl0LmgiCiAKLS8qIFRoZXJlIGFyZSB0aHJlZSBsaXN0cyBvZiBydWxlcyAtLSBvbmUgdG8gc2VhcmNoIGF0IHRhc2sgY3JlYXRpb24KLSAqIHRpbWUsIG9uZSB0byBzZWFyY2ggYXQgc3lzY2FsbCBlbnRyeSB0aW1lLCBhbmQgYW5vdGhlciB0byBzZWFyY2ggYXQKLSAqIHN5c2NhbGwgZXhpdCB0aW1lLiAqLworLyoKKyAqIExvY2tpbmcgbW9kZWw6CisgKgorICogYXVkaXRfZmlsdGVyX211dGV4OgorICogCQlTeW5jaHJvbml6ZXMgd3JpdGVzIGFuZCBibG9ja2luZyByZWFkcyBvZiBhdWRpdCdzIGZpbHRlcmxpc3QKKyAqIAkJZGF0YS4gIFJjdSBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBmaWx0ZXJsaXN0IGFuZCBhY2Nlc3MKKyAqIAkJY29udGVudHMgb2Ygc3RydWN0cyBhdWRpdF9lbnRyeSwgYXVkaXRfd2F0Y2ggYW5kIG9wYXF1ZQorICogCQlzZWxpbnV4IHJ1bGVzIGR1cmluZyBmaWx0ZXJpbmcuICBJZiBtb2RpZmllZCwgdGhlc2Ugc3RydWN0dXJlcworICogCQltdXN0IGJlIGNvcGllZCBhbmQgcmVwbGFjZSB0aGVpciBjb3VudGVycGFydHMgaW4gdGhlIGZpbHRlcmxpc3QuCisgKiAJCUFuIGF1ZGl0X3BhcmVudCBzdHJ1Y3QgaXMgbm90IGFjY2Vzc2VkIGR1cmluZyBmaWx0ZXJpbmcsIHNvIG1heQorICogCQliZSB3cml0dGVuIGRpcmVjdGx5IHByb3ZpZGVkIGF1ZGl0X2ZpbHRlcl9tdXRleCBpcyBoZWxkLgorICovCisKKy8qCisgKiBSZWZlcmVuY2UgY291bnRpbmc6CisgKgorICogYXVkaXRfcGFyZW50OiBsaWZldGltZSBpcyBmcm9tIGF1ZGl0X2luaXRfcGFyZW50KCkgdG8gcmVjZWlwdCBvZiBhbiBJTl9JR05PUkVECisgKiAJZXZlbnQuICBFYWNoIGF1ZGl0X3dhdGNoIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0cyBhc3NvY2lhdGVkIHBhcmVudC4KKyAqCisgKiBhdWRpdF93YXRjaDogaWYgYWRkZWQgdG8gbGlzdHMsIGxpZmV0aW1lIGlzIGZyb20gYXVkaXRfaW5pdF93YXRjaCgpIHRvCisgKiAJYXVkaXRfcmVtb3ZlX3dhdGNoKCkuICBBZGRpdGlvbmFsbHksIGFuIGF1ZGl0X3dhdGNoIG1heSBleGlzdAorICogCXRlbXBvcmFyaWx5IHRvIGFzc2lzdCBpbiBzZWFyY2hpbmcgZXhpc3RpbmcgZmlsdGVyIGRhdGEuICBFYWNoCisgKiAJYXVkaXRfa3J1bGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gaXRzIGFzc29jaWF0ZWQgd2F0Y2guCisgKi8KKworc3RydWN0IGF1ZGl0X3BhcmVudCB7CisJc3RydWN0IGxpc3RfaGVhZAlpbGlzdDsJLyogZW50cnkgaW4gaW5vdGlmeSByZWdpc3RyYXRpb24gbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJd2F0Y2hlczsgLyogYXNzb2NpYXRlZCB3YXRjaGVzICovCisJc3RydWN0IGlub3RpZnlfd2F0Y2gJd2RhdGE7CS8qIGlub3RpZnkgd2F0Y2ggZGF0YSAqLworCXVuc2lnbmVkCQlmbGFnczsJLyogc3RhdHVzIGZsYWdzICovCit9OworCisvKgorICogYXVkaXRfcGFyZW50IHN0YXR1cyBmbGFnczoKKyAqCisgKiBBVURJVF9QQVJFTlRfSU5WQUxJRCAtIHNldCBhbnl0aW1lIHJ1bGVzL3dhdGNoZXMgYXJlIGF1dG8tcmVtb3ZlZCBkdWUgdG8KKyAqIGEgZmlsZXN5c3RlbSBldmVudCB0byBlbnN1cmUgd2UncmUgYWRkaW5nIGF1ZGl0IHdhdGNoZXMgdG8gYSB2YWxpZCBwYXJlbnQuCisgKiBUZWNobmljYWxseSBub3QgbmVlZGVkIGZvciBJTl9ERUxFVEVfU0VMRiBvciBJTl9VTk1PVU5UIGV2ZW50cywgYXMgd2UgY2Fubm90CisgKiByZWNlaXZlIHRoZW0gd2hpbGUgd2UgaGF2ZSBuYW1laWRhdGEsIGJ1dCBtdXN0IGJlIHVzZWQgZm9yIElOX01PVkVfU0VMRiB3aGljaAorICogd2UgY2FuIHJlY2VpdmUgd2hpbGUgaG9sZGluZyBuYW1laWRhdGEuCisgKi8KKyNkZWZpbmUgQVVESVRfUEFSRU5UX0lOVkFMSUQJMHgwMDEKKworLyogQXVkaXQgZmlsdGVyIGxpc3RzLCBkZWZpbmVkIGluIDxsaW51eC9hdWRpdC5oPiAqLwogc3RydWN0IGxpc3RfaGVhZCBhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9OUl9GSUxURVJTXSA9IHsKIAlMSVNUX0hFQURfSU5JVChhdWRpdF9maWx0ZXJfbGlzdFswXSksCiAJTElTVF9IRUFEX0lOSVQoYXVkaXRfZmlsdGVyX2xpc3RbMV0pLApAQCAtNDEsOSArODcsNTMgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIERFRklORV9NVVRFWChhdWRpdF9maWx0ZXJfbXV0ZXgpOworCisvKiBJbm90aWZ5IGhhbmRsZSAqLworZXh0ZXJuIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqYXVkaXRfaWg7CisKKy8qIElub3RpZnkgZXZlbnRzIHdlIGNhcmUgYWJvdXQuICovCisjZGVmaW5lIEFVRElUX0lOX1dBVENIIElOX01PVkV8SU5fQ1JFQVRFfElOX0RFTEVURXxJTl9ERUxFVEVfU0VMRnxJTl9NT1ZFX1NFTEYKKwordm9pZCBhdWRpdF9mcmVlX3BhcmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqaV93YXRjaCkKK3sKKwlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQ7CisKKwlwYXJlbnQgPSBjb250YWluZXJfb2YoaV93YXRjaCwgc3RydWN0IGF1ZGl0X3BhcmVudCwgd2RhdGEpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnBhcmVudC0+d2F0Y2hlcykpOworCWtmcmVlKHBhcmVudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9nZXRfd2F0Y2goc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKK3sKKwlhdG9taWNfaW5jKCZ3YXRjaC0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBhdWRpdF9wdXRfd2F0Y2goc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmd2F0Y2gtPmNvdW50KSkgeworCQlXQVJOX09OKHdhdGNoLT5wYXJlbnQpOworCQlXQVJOX09OKCFsaXN0X2VtcHR5KCZ3YXRjaC0+cnVsZXMpKTsKKwkJa2ZyZWUod2F0Y2gtPnBhdGgpOworCQlrZnJlZSh3YXRjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdWRpdF9yZW1vdmVfd2F0Y2goc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKK3sKKwlsaXN0X2RlbCgmd2F0Y2gtPndsaXN0KTsKKwlwdXRfaW5vdGlmeV93YXRjaCgmd2F0Y2gtPnBhcmVudC0+d2RhdGEpOworCXdhdGNoLT5wYXJlbnQgPSBOVUxMOworCWF1ZGl0X3B1dF93YXRjaCh3YXRjaCk7IC8qIG1hdGNoIGluaXRpYWwgZ2V0ICovCit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9mcmVlX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplKQogewogCWludCBpOworCisJLyogc29tZSBydWxlcyBkb24ndCBoYXZlIGFzc29jaWF0ZWQgd2F0Y2hlcyAqLworCWlmIChlLT5ydWxlLndhdGNoKQorCQlhdWRpdF9wdXRfd2F0Y2goZS0+cnVsZS53YXRjaCk7CiAJaWYgKGUtPnJ1bGUuZmllbGRzKQogCQlmb3IgKGkgPSAwOyBpIDwgZS0+cnVsZS5maWVsZF9jb3VudDsgaSsrKSB7CiAJCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmZS0+cnVsZS5maWVsZHNbaV07CkBAIC02MCw2ICsxNTAsNTAgQEAKIAlhdWRpdF9mcmVlX3J1bGUoZSk7CiB9CiAKKy8qIEluaXRpYWxpemUgYSBwYXJlbnQgd2F0Y2ggZW50cnkuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X3BhcmVudCAqYXVkaXRfaW5pdF9wYXJlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmRwKQoreworCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKKwlzMzIgd2Q7CisKKwlwYXJlbnQgPSBremFsbG9jKHNpemVvZigqcGFyZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFwYXJlbnQpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCUlOSVRfTElTVF9IRUFEKCZwYXJlbnQtPndhdGNoZXMpOworCXBhcmVudC0+ZmxhZ3MgPSAwOworCisJaW5vdGlmeV9pbml0X3dhdGNoKCZwYXJlbnQtPndkYXRhKTsKKwkvKiBncmFiIGEgcmVmIHNvIGlub3RpZnkgd2F0Y2ggaGFuZ3MgYXJvdW5kIHVudGlsIHdlIHRha2UgYXVkaXRfZmlsdGVyX211dGV4ICovCisJZ2V0X2lub3RpZnlfd2F0Y2goJnBhcmVudC0+d2RhdGEpOworCXdkID0gaW5vdGlmeV9hZGRfd2F0Y2goYXVkaXRfaWgsICZwYXJlbnQtPndkYXRhLCBuZHAtPmRlbnRyeS0+ZF9pbm9kZSwKKwkJCSAgICAgICBBVURJVF9JTl9XQVRDSCk7CisJaWYgKHdkIDwgMCkgeworCQlhdWRpdF9mcmVlX3BhcmVudCgmcGFyZW50LT53ZGF0YSk7CisJCXJldHVybiBFUlJfUFRSKHdkKTsKKwl9CisKKwlyZXR1cm4gcGFyZW50OworfQorCisvKiBJbml0aWFsaXplIGEgd2F0Y2ggZW50cnkuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X3dhdGNoICphdWRpdF9pbml0X3dhdGNoKGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaDsKKworCXdhdGNoID0ga3phbGxvYyhzaXplb2YoKndhdGNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCF3YXRjaCkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJndhdGNoLT5ydWxlcyk7CisJYXRvbWljX3NldCgmd2F0Y2gtPmNvdW50LCAxKTsKKwl3YXRjaC0+cGF0aCA9IHBhdGg7CisJd2F0Y2gtPmRldiA9IChkZXZfdCktMTsKKwl3YXRjaC0+aW5vID0gKHVuc2lnbmVkIGxvbmcpLTE7CisKKwlyZXR1cm4gd2F0Y2g7Cit9CisKIC8qIEluaXRpYWxpemUgYW4gYXVkaXQgZmlsdGVybGlzdCBlbnRyeS4gKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9pbml0X2VudHJ5KHUzMiBmaWVsZF9jb3VudCkKIHsKQEAgLTEwNyw2ICsyNDEsNDMgQEAKIAlyZXR1cm4gc3RyOwogfQogCisvKiBUcmFuc2xhdGUgYW4gaW5vZGUgZmllbGQgdG8ga2VybmVsIHJlc3ByZXNlbnRhdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X3RvX2lub2RlKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsCisJCQkJIHN0cnVjdCBhdWRpdF9maWVsZCAqZikKK3sKKwlpZiAoa3J1bGUtPmxpc3RuciAhPSBBVURJVF9GSUxURVJfRVhJVCB8fAorCSAgICBrcnVsZS0+d2F0Y2ggfHwga3J1bGUtPmlub2RlX2YpCisJCXJldHVybiAtRUlOVkFMOworCisJa3J1bGUtPmlub2RlX2YgPSBmOworCXJldHVybiAwOworfQorCisvKiBUcmFuc2xhdGUgYSB3YXRjaCBzdHJpbmcgdG8ga2VybmVsIHJlc3ByZXNlbnRhdGlvbi4gKi8KK3N0YXRpYyBpbnQgYXVkaXRfdG9fd2F0Y2goc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSwgY2hhciAqcGF0aCwgaW50IGxlbiwKKwkJCSAgdTMyIG9wKQoreworCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2g7CisKKwlpZiAoIWF1ZGl0X2loKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAocGF0aFswXSAhPSAnLycgfHwgcGF0aFtsZW4tMV0gPT0gJy8nIHx8CisJICAgIGtydWxlLT5saXN0bnIgIT0gQVVESVRfRklMVEVSX0VYSVQgfHwKKwkgICAgb3AgJiB+QVVESVRfRVFVQUwgfHwKKwkgICAga3J1bGUtPmlub2RlX2YgfHwga3J1bGUtPndhdGNoKSAvKiAxIGlub2RlICMgcGVyIHJ1bGUsIGZvciBoYXNoICovCisJCXJldHVybiAtRUlOVkFMOworCisJd2F0Y2ggPSBhdWRpdF9pbml0X3dhdGNoKHBhdGgpOworCWlmICh1bmxpa2VseShJU19FUlIod2F0Y2gpKSkKKwkJcmV0dXJuIFBUUl9FUlIod2F0Y2gpOworCisJYXVkaXRfZ2V0X3dhdGNoKHdhdGNoKTsKKwlrcnVsZS0+d2F0Y2ggPSB3YXRjaDsKKworCXJldHVybiAwOworfQorCiAvKiBDb21tb24gdXNlci1zcGFjZSB0byBrZXJuZWwgcnVsZSB0cmFuc2xhdGlvbi4gKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF90b19lbnRyeV9jb21tb24oc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUpCiB7CkBAIC0xMjgsOCArMjk5LDExIEBACiAjZW5kaWYKIAkJOwogCX0KLQlpZiAocnVsZS0+YWN0aW9uICE9IEFVRElUX05FVkVSICYmIHJ1bGUtPmFjdGlvbiAhPSBBVURJVF9QT1NTSUJMRSAmJgotCSAgICBydWxlLT5hY3Rpb24gIT0gQVVESVRfQUxXQVlTKQorCWlmICh1bmxpa2VseShydWxlLT5hY3Rpb24gPT0gQVVESVRfUE9TU0lCTEUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVVESVRfUE9TU0lCTEUgaXMgZGVwcmVjYXRlZFxuIik7CisJCWdvdG8gZXhpdF9lcnI7CisJfQorCWlmIChydWxlLT5hY3Rpb24gIT0gQVVESVRfTkVWRVIgJiYgcnVsZS0+YWN0aW9uICE9IEFVRElUX0FMV0FZUykKIAkJZ290byBleGl0X2VycjsKIAlpZiAocnVsZS0+ZmllbGRfY291bnQgPiBBVURJVF9NQVhfRklFTERTKQogCQlnb3RvIGV4aXRfZXJyOwpAQCAtMTU4LDYgKzMzMiw3IEBACiBzdGF0aWMgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9ydWxlX3RvX2VudHJ5KHN0cnVjdCBhdWRpdF9ydWxlICpydWxlKQogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGF1ZGl0X2ZpZWxkICpmOwogCWludCBlcnIgPSAwOwogCWludCBpOwogCkBAIC0xNzIsMTQgKzM0NywzNyBAQAogCQlmLT50eXBlID0gcnVsZS0+ZmllbGRzW2ldICYgfihBVURJVF9ORUdBVEV8QVVESVRfT1BFUkFUT1JTKTsKIAkJZi0+dmFsID0gcnVsZS0+dmFsdWVzW2ldOwogCi0JCWlmIChmLT50eXBlICYgQVVESVRfVU5VU0VEX0JJVFMgfHwKLQkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfVVNFUiB8fAotCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9ST0xFIHx8Ci0JCSAgICBmLT50eXBlID09IEFVRElUX1NFX1RZUEUgfHwKLQkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfU0VOIHx8Ci0JCSAgICBmLT50eXBlID09IEFVRElUX1NFX0NMUikgewotCQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVJTlZBTDsKKwkJc3dpdGNoKGYtPnR5cGUpIHsKKwkJZGVmYXVsdDoKIAkJCWdvdG8gZXhpdF9mcmVlOworCQljYXNlIEFVRElUX1BJRDoKKwkJY2FzZSBBVURJVF9VSUQ6CisJCWNhc2UgQVVESVRfRVVJRDoKKwkJY2FzZSBBVURJVF9TVUlEOgorCQljYXNlIEFVRElUX0ZTVUlEOgorCQljYXNlIEFVRElUX0dJRDoKKwkJY2FzZSBBVURJVF9FR0lEOgorCQljYXNlIEFVRElUX1NHSUQ6CisJCWNhc2UgQVVESVRfRlNHSUQ6CisJCWNhc2UgQVVESVRfTE9HSU5VSUQ6CisJCWNhc2UgQVVESVRfUEVSUzoKKwkJY2FzZSBBVURJVF9BUkNIOgorCQljYXNlIEFVRElUX01TR1RZUEU6CisJCWNhc2UgQVVESVRfREVWTUFKT1I6CisJCWNhc2UgQVVESVRfREVWTUlOT1I6CisJCWNhc2UgQVVESVRfRVhJVDoKKwkJY2FzZSBBVURJVF9TVUNDRVNTOgorCQljYXNlIEFVRElUX0FSRzA6CisJCWNhc2UgQVVESVRfQVJHMToKKwkJY2FzZSBBVURJVF9BUkcyOgorCQljYXNlIEFVRElUX0FSRzM6CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9JTk9ERToKKwkJCWVyciA9IGF1ZGl0X3RvX2lub2RlKCZlbnRyeS0+cnVsZSwgZik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJYnJlYWs7CiAJCX0KIAogCQllbnRyeS0+cnVsZS52ZXJzX29wcyA9IChmLT5vcCAmIEFVRElUX09QRVJBVE9SUykgPyAyIDogMTsKQEAgLTE5Niw2ICszOTQsMTggQEAKIAkJfQogCX0KIAorCWYgPSBlbnRyeS0+cnVsZS5pbm9kZV9mOworCWlmIChmKSB7CisJCXN3aXRjaChmLT5vcCkgeworCQljYXNlIEFVRElUX05PVF9FUVVBTDoKKwkJCWVudHJ5LT5ydWxlLmlub2RlX2YgPSBOVUxMOworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCX0KKwogZXhpdF9ub2ZyZWU6CiAJcmV0dXJuIGVudHJ5OwogCkBAIC0yMTAsNiArNDIwLDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OworCXN0cnVjdCBhdWRpdF9maWVsZCAqZjsKIAl2b2lkICpidWZwOwogCXNpemVfdCByZW1haW4gPSBkYXRhc3ogLSBzaXplb2Yoc3RydWN0IGF1ZGl0X3J1bGVfZGF0YSk7CiAJaW50IGk7CkBAIC0yMzUsNiArNDQ2LDI5IEBACiAJCWYtPnNlX3N0ciA9IE5VTEw7CiAJCWYtPnNlX3J1bGUgPSBOVUxMOwogCQlzd2l0Y2goZi0+dHlwZSkgeworCQljYXNlIEFVRElUX1BJRDoKKwkJY2FzZSBBVURJVF9VSUQ6CisJCWNhc2UgQVVESVRfRVVJRDoKKwkJY2FzZSBBVURJVF9TVUlEOgorCQljYXNlIEFVRElUX0ZTVUlEOgorCQljYXNlIEFVRElUX0dJRDoKKwkJY2FzZSBBVURJVF9FR0lEOgorCQljYXNlIEFVRElUX1NHSUQ6CisJCWNhc2UgQVVESVRfRlNHSUQ6CisJCWNhc2UgQVVESVRfTE9HSU5VSUQ6CisJCWNhc2UgQVVESVRfUEVSUzoKKwkJY2FzZSBBVURJVF9BUkNIOgorCQljYXNlIEFVRElUX01TR1RZUEU6CisJCWNhc2UgQVVESVRfUFBJRDoKKwkJY2FzZSBBVURJVF9ERVZNQUpPUjoKKwkJY2FzZSBBVURJVF9ERVZNSU5PUjoKKwkJY2FzZSBBVURJVF9FWElUOgorCQljYXNlIEFVRElUX1NVQ0NFU1M6CisJCWNhc2UgQVVESVRfQVJHMDoKKwkJY2FzZSBBVURJVF9BUkcxOgorCQljYXNlIEFVRElUX0FSRzI6CisJCWNhc2UgQVVESVRfQVJHMzoKKwkJCWJyZWFrOwogCQljYXNlIEFVRElUX1NFX1VTRVI6CiAJCWNhc2UgQVVESVRfU0VfUk9MRToKIAkJY2FzZSBBVURJVF9TRV9UWVBFOgpAQCAtMjYwLDYgKzQ5NCwzNyBAQAogCQkJfSBlbHNlCiAJCQkJZi0+c2Vfc3RyID0gc3RyOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfV0FUQ0g6CisJCQlzdHIgPSBhdWRpdF91bnBhY2tfc3RyaW5nKCZidWZwLCAmcmVtYWluLCBmLT52YWwpOworCQkJaWYgKElTX0VSUihzdHIpKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJZW50cnktPnJ1bGUuYnVmbGVuICs9IGYtPnZhbDsKKworCQkJZXJyID0gYXVkaXRfdG9fd2F0Y2goJmVudHJ5LT5ydWxlLCBzdHIsIGYtPnZhbCwgZi0+b3ApOworCQkJaWYgKGVycikgeworCQkJCWtmcmVlKHN0cik7CisJCQkJZ290byBleGl0X2ZyZWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBBVURJVF9JTk9ERToKKwkJCWVyciA9IGF1ZGl0X3RvX2lub2RlKCZlbnRyeS0+cnVsZSwgZik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCX0KKworCWYgPSBlbnRyeS0+cnVsZS5pbm9kZV9mOworCWlmIChmKSB7CisJCXN3aXRjaChmLT5vcCkgeworCQljYXNlIEFVRElUX05PVF9FUVVBTDoKKwkJCWVudHJ5LT5ydWxlLmlub2RlX2YgPSBOVUxMOworCQljYXNlIEFVRElUX0VRVUFMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQogCX0KIApAQCAtMjkxLDcgKzU1Niw3IEBACiAKIAlydWxlID0ga21hbGxvYyhzaXplb2YoKnJ1bGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIXJ1bGUpKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KHJ1bGUsIDAsIHNpemVvZigqcnVsZSkpOwogCiAJcnVsZS0+ZmxhZ3MgPSBrcnVsZS0+ZmxhZ3MgfCBrcnVsZS0+bGlzdG5yOwpAQCAtMzIyLDcgKzU4Nyw3IEBACiAKIAlkYXRhID0ga21hbGxvYyhzaXplb2YoKmRhdGEpICsga3J1bGUtPmJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFkYXRhKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJldHVybiBOVUxMOwogCW1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKIAogCWRhdGEtPmZsYWdzID0ga3J1bGUtPmZsYWdzIHwga3J1bGUtPmxpc3RucjsKQEAgLTM0Myw2ICs2MDgsMTAgQEAKIAkJCWRhdGEtPmJ1ZmxlbiArPSBkYXRhLT52YWx1ZXNbaV0gPQogCQkJCWF1ZGl0X3BhY2tfc3RyaW5nKCZidWZwLCBmLT5zZV9zdHIpOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfV0FUQ0g6CisJCQlkYXRhLT5idWZsZW4gKz0gZGF0YS0+dmFsdWVzW2ldID0KKwkJCQlhdWRpdF9wYWNrX3N0cmluZygmYnVmcCwga3J1bGUtPndhdGNoLT5wYXRoKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGF0YS0+dmFsdWVzW2ldID0gZi0+dmFsOwogCQl9CkBAIC0zNzgsNiArNjQ3LDEwIEBACiAJCQlpZiAoc3RyY21wKGEtPmZpZWxkc1tpXS5zZV9zdHIsIGItPmZpZWxkc1tpXS5zZV9zdHIpKQogCQkJCXJldHVybiAxOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfV0FUQ0g6CisJCQlpZiAoc3RyY21wKGEtPndhdGNoLT5wYXRoLCBiLT53YXRjaC0+cGF0aCkpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChhLT5maWVsZHNbaV0udmFsICE9IGItPmZpZWxkc1tpXS52YWwpCiAJCQkJcmV0dXJuIDE7CkBAIC0zOTEsNiArNjY0LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIER1cGxpY2F0ZSB0aGUgZ2l2ZW4gYXVkaXQgd2F0Y2guICBUaGUgbmV3IHdhdGNoJ3MgcnVsZXMgbGlzdCBpcyBpbml0aWFsaXplZAorICogdG8gYW4gZW1wdHkgbGlzdCBhbmQgd2xpc3QgaXMgdW5kZWZpbmVkLiAqLworc3RhdGljIHN0cnVjdCBhdWRpdF93YXRjaCAqYXVkaXRfZHVwZV93YXRjaChzdHJ1Y3QgYXVkaXRfd2F0Y2ggKm9sZCkKK3sKKwljaGFyICpwYXRoOworCXN0cnVjdCBhdWRpdF93YXRjaCAqbmV3OworCisJcGF0aCA9IGtzdHJkdXAob2xkLT5wYXRoLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXBhdGgpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW5ldyA9IGF1ZGl0X2luaXRfd2F0Y2gocGF0aCk7CisJaWYgKHVubGlrZWx5KElTX0VSUihuZXcpKSkgeworCQlrZnJlZShwYXRoKTsKKwkJZ290byBvdXQ7CisJfQorCisJbmV3LT5kZXYgPSBvbGQtPmRldjsKKwluZXctPmlubyA9IG9sZC0+aW5vOworCWdldF9pbm90aWZ5X3dhdGNoKCZvbGQtPnBhcmVudC0+d2RhdGEpOworCW5ldy0+cGFyZW50ID0gb2xkLT5wYXJlbnQ7CisKK291dDoKKwlyZXR1cm4gbmV3OworfQorCiAvKiBEdXBsaWNhdGUgc2VsaW51eCBmaWVsZCBpbmZvcm1hdGlvbi4gIFRoZSBzZV9ydWxlIGlzIG9wYXF1ZSwgc28gbXVzdCBiZQogICogcmUtaW5pdGlhbGl6ZWQuICovCiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9kdXBlX3NlbGludXhfZmllbGQoc3RydWN0IGF1ZGl0X2ZpZWxkICpkZiwKQEAgLTQyMiw4ICs3MjEsMTEgQEAKIC8qIER1cGxpY2F0ZSBhbiBhdWRpdCBydWxlLiAgVGhpcyB3aWxsIGJlIGEgZGVlcCBjb3B5IHdpdGggdGhlIGV4Y2VwdGlvbgogICogb2YgdGhlIHdhdGNoIC0gdGhhdCBwb2ludGVyIGlzIGNhcnJpZWQgb3Zlci4gIFRoZSBzZWxpbnV4IHNwZWNpZmljIGZpZWxkcwogICogd2lsbCBiZSB1cGRhdGVkIGluIHRoZSBjb3B5LiAgVGhlIHBvaW50IGlzIHRvIGJlIGFibGUgdG8gcmVwbGFjZSB0aGUgb2xkCi0gKiBydWxlIHdpdGggdGhlIG5ldyBydWxlIGluIHRoZSBmaWx0ZXJsaXN0LCB0aGVuIGZyZWUgdGhlIG9sZCBydWxlLiAqLwotc3RhdGljIHN0cnVjdCBhdWRpdF9lbnRyeSAqYXVkaXRfZHVwZV9ydWxlKHN0cnVjdCBhdWRpdF9rcnVsZSAqb2xkKQorICogcnVsZSB3aXRoIHRoZSBuZXcgcnVsZSBpbiB0aGUgZmlsdGVybGlzdCwgdGhlbiBmcmVlIHRoZSBvbGQgcnVsZS4KKyAqIFRoZSBybGlzdCBlbGVtZW50IGlzIHVuZGVmaW5lZDsgbGlzdCBtYW5pcHVsYXRpb25zIGFyZSBoYW5kbGVkIGFwYXJ0IGZyb20KKyAqIHRoZSBpbml0aWFsIGNvcHkuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9kdXBlX3J1bGUoc3RydWN0IGF1ZGl0X2tydWxlICpvbGQsCisJCQkJCSAgIHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpCiB7CiAJdTMyIGZjb3VudCA9IG9sZC0+ZmllbGRfY291bnQ7CiAJc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeTsKQEAgLTQ0Miw2ICs3NDQsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBBVURJVF9CSVRNQVNLX1NJWkU7IGkrKykKIAkJbmV3LT5tYXNrW2ldID0gb2xkLT5tYXNrW2ldOwogCW5ldy0+YnVmbGVuID0gb2xkLT5idWZsZW47CisJbmV3LT5pbm9kZV9mID0gb2xkLT5pbm9kZV9mOworCW5ldy0+d2F0Y2ggPSBOVUxMOwogCW5ldy0+ZmllbGRfY291bnQgPSBvbGQtPmZpZWxkX2NvdW50OwogCW1lbWNweShuZXctPmZpZWxkcywgb2xkLT5maWVsZHMsIHNpemVvZihzdHJ1Y3QgYXVkaXRfZmllbGQpICogZmNvdW50KTsKIApAQCAtNDYzLDY4ICs3NjcsNDA5IEBACiAJCX0KIAl9CiAKKwlpZiAod2F0Y2gpIHsKKwkJYXVkaXRfZ2V0X3dhdGNoKHdhdGNoKTsKKwkJbmV3LT53YXRjaCA9IHdhdGNoOworCX0KKwogCXJldHVybiBlbnRyeTsKIH0KIAotLyogQWRkIHJ1bGUgdG8gZ2l2ZW4gZmlsdGVybGlzdCBpZiBub3QgYSBkdXBsaWNhdGUuICBQcm90ZWN0ZWQgYnkKLSAqIGF1ZGl0X25ldGxpbmtfbXV0ZXguICovCi1zdGF0aWMgaW5saW5lIGludCBhdWRpdF9hZGRfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LAotCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKKy8qIFVwZGF0ZSBpbm9kZSBpbmZvIGluIGF1ZGl0IHJ1bGVzIGJhc2VkIG9uIGZpbGVzeXN0ZW0gZXZlbnQuICovCitzdGF0aWMgdm9pZCBhdWRpdF91cGRhdGVfd2F0Y2goc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRuYW1lLCBkZXZfdCBkZXYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbm8sIHVuc2lnbmVkIGludmFsaWRhdGluZykKIHsKKwlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKm93YXRjaCwgKm53YXRjaCwgKm5leHR3OworCXN0cnVjdCBhdWRpdF9rcnVsZSAqciwgKm5leHRyOworCXN0cnVjdCBhdWRpdF9lbnRyeSAqb2VudHJ5LCAqbmVudHJ5OworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3dhdGNoLCBuZXh0dywgJnBhcmVudC0+d2F0Y2hlcywgd2xpc3QpIHsKKwkJaWYgKGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChkbmFtZSwgb3dhdGNoLT5wYXRoLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIElmIHRoZSB1cGRhdGUgaW52b2x2ZXMgaW52YWxpZGF0aW5nIHJ1bGVzLCBkbyB0aGUgaW5vZGUtYmFzZWQKKwkJICogZmlsdGVyaW5nIG5vdywgc28gd2UgZG9uJ3Qgb21pdCByZWNvcmRzLiAqLworCQlpZiAoaW52YWxpZGF0aW5nICYmCisJCSAgICBhdWRpdF9maWx0ZXJfaW5vZGVzKGN1cnJlbnQsIGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpID09IEFVRElUX1JFQ09SRF9DT05URVhUKQorCQkJYXVkaXRfc2V0X2F1ZGl0YWJsZShjdXJyZW50LT5hdWRpdF9jb250ZXh0KTsKKworCQlud2F0Y2ggPSBhdWRpdF9kdXBlX3dhdGNoKG93YXRjaCk7CisJCWlmICh1bmxpa2VseShJU19FUlIobndhdGNoKSkpIHsKKwkJCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwkJCWF1ZGl0X3BhbmljKCJlcnJvciB1cGRhdGluZyB3YXRjaCwgc2tpcHBpbmciKTsKKwkJCXJldHVybjsKKwkJfQorCQlud2F0Y2gtPmRldiA9IGRldjsKKwkJbndhdGNoLT5pbm8gPSBpbm87CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHIsIG5leHRyLCAmb3dhdGNoLT5ydWxlcywgcmxpc3QpIHsKKworCQkJb2VudHJ5ID0gY29udGFpbmVyX29mKHIsIHN0cnVjdCBhdWRpdF9lbnRyeSwgcnVsZSk7CisJCQlsaXN0X2RlbCgmb2VudHJ5LT5ydWxlLnJsaXN0KTsKKwkJCWxpc3RfZGVsX3JjdSgmb2VudHJ5LT5saXN0KTsKKworCQkJbmVudHJ5ID0gYXVkaXRfZHVwZV9ydWxlKCZvZW50cnktPnJ1bGUsIG53YXRjaCk7CisJCQlpZiAodW5saWtlbHkoSVNfRVJSKG5lbnRyeSkpKQorCQkJCWF1ZGl0X3BhbmljKCJlcnJvciB1cGRhdGluZyB3YXRjaCwgcmVtb3ZpbmciKTsKKwkJCWVsc2UgeworCQkJCWludCBoID0gYXVkaXRfaGFzaF9pbm8oKHUzMilpbm8pOworCQkJCWxpc3RfYWRkKCZuZW50cnktPnJ1bGUucmxpc3QsICZud2F0Y2gtPnJ1bGVzKTsKKwkJCQlsaXN0X2FkZF9yY3UoJm5lbnRyeS0+bGlzdCwgJmF1ZGl0X2lub2RlX2hhc2hbaF0pOworCQkJfQorCisJCQljYWxsX3JjdSgmb2VudHJ5LT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOworCQl9CisKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhdWRpdCB1cGRhdGVkIHJ1bGVzIHNwZWNpZnlpbmcgd2F0Y2g9Iik7CisJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIG93YXRjaC0+cGF0aCk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgd2l0aCBkZXY9JXUgaW5vPSVsdVxuIiwgZGV2LCBpbm8pOworCQlhdWRpdF9sb2dfZW5kKGFiKTsKKworCQlhdWRpdF9yZW1vdmVfd2F0Y2gob3dhdGNoKTsKKwkJZ290byBhZGRfd2F0Y2hfdG9fcGFyZW50OyAvKiBldmVudCBhcHBsaWVzIHRvIGEgc2luZ2xlIHdhdGNoICovCisJfQorCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlyZXR1cm47CisKK2FkZF93YXRjaF90b19wYXJlbnQ6CisJbGlzdF9hZGQoJm53YXRjaC0+d2xpc3QsICZwYXJlbnQtPndhdGNoZXMpOworCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlyZXR1cm47Cit9CisKKy8qIFJlbW92ZSBhbGwgd2F0Y2hlcyAmIHJ1bGVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcmVudCB0aGF0IGlzIGdvaW5nIGF3YXkuICovCitzdGF0aWMgdm9pZCBhdWRpdF9yZW1vdmVfcGFyZW50X3dhdGNoZXMoc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50KQoreworCXN0cnVjdCBhdWRpdF93YXRjaCAqdywgKm5leHR3OworCXN0cnVjdCBhdWRpdF9rcnVsZSAqciwgKm5leHRyOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKIAotCS8qIERvIG5vdCB1c2UgdGhlIF9yY3UgaXRlcmF0b3IgaGVyZSwgc2luY2UgdGhpcyBpcyB0aGUgb25seQotCSAqIGFkZGl0aW9uIHJvdXRpbmUuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7Ci0JCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKCZlbnRyeS0+cnVsZSwgJmUtPnJ1bGUpKQotCQkJcmV0dXJuIC1FRVhJU1Q7CisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlwYXJlbnQtPmZsYWdzIHw9IEFVRElUX1BBUkVOVF9JTlZBTElEOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCBuZXh0dywgJnBhcmVudC0+d2F0Y2hlcywgd2xpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHIsIG5leHRyLCAmdy0+cnVsZXMsIHJsaXN0KSB7CisJCQllID0gY29udGFpbmVyX29mKHIsIHN0cnVjdCBhdWRpdF9lbnRyeSwgcnVsZSk7CisJCQlsaXN0X2RlbCgmci0+cmxpc3QpOworCQkJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKKwkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOworCisJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSwKKwkJCQkgImF1ZGl0IGltcGxpY2l0bHkgcmVtb3ZlZCBydWxlIGZyb20gbGlzdD0lZFxuIiwKKwkJCQkgIEFVRElUX0ZJTFRFUl9FWElUKTsKKwkJfQorCQlhdWRpdF9yZW1vdmVfd2F0Y2godyk7CisJfQorCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKK30KKworLyogVW5yZWdpc3RlciBpbm90aWZ5IHdhdGNoZXMgZm9yIHBhcmVudHMgb24gaW5fbGlzdC4KKyAqIEdlbmVyYXRlcyBhbiBJTl9JR05PUkVEIGV2ZW50LiAqLworc3RhdGljIHZvaWQgYXVkaXRfaW5vdGlmeV91bnJlZ2lzdGVyKHN0cnVjdCBsaXN0X2hlYWQgKmluX2xpc3QpCit7CisJc3RydWN0IGF1ZGl0X3BhcmVudCAqcCwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgaW5fbGlzdCwgaWxpc3QpIHsKKwkJbGlzdF9kZWwoJnAtPmlsaXN0KTsKKwkJaW5vdGlmeV9ybV93YXRjaChhdWRpdF9paCwgJnAtPndkYXRhKTsKKwkJLyogdGhlIHB1dCBtYXRjaGluZyB0aGUgZ2V0IGluIGF1ZGl0X2RvX2RlbF9ydWxlKCkgKi8KKwkJcHV0X2lub3RpZnlfd2F0Y2goJnAtPndkYXRhKTsKKwl9Cit9CisKKy8qIEZpbmQgYW4gZXhpc3RpbmcgYXVkaXQgcnVsZS4KKyAqIENhbGxlciBtdXN0IGhvbGQgYXVkaXRfZmlsdGVyX211dGV4IHRvIHByZXZlbnQgc3RhbGUgcnVsZSBkYXRhLiAqLworc3RhdGljIHN0cnVjdCBhdWRpdF9lbnRyeSAqYXVkaXRfZmluZF9ydWxlKHN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksCisJCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGF1ZGl0X2VudHJ5ICplLCAqZm91bmQgPSBOVUxMOworCWludCBoOworCisJaWYgKGVudHJ5LT5ydWxlLndhdGNoKSB7CisJCS8qIHdlIGRvbid0IGtub3cgdGhlIGlub2RlIG51bWJlciwgc28gbXVzdCB3YWxrIGVudGlyZSBoYXNoICovCisJCWZvciAoaCA9IDA7IGggPCBBVURJVF9JTk9ERV9CVUNLRVRTOyBoKyspIHsKKwkJCWxpc3QgPSAmYXVkaXRfaW5vZGVfaGFzaFtoXTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbGlzdCwgbGlzdCkKKwkJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZSgmZW50cnktPnJ1bGUsICZlLT5ydWxlKSkgeworCQkJCQlmb3VuZCA9IGU7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJfQorCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZW50cnktPnJ1bGUuZmxhZ3MgJiBBVURJVF9GSUxURVJfUFJFUEVORCkgewotCQlsaXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LCBsaXN0KTsKLQl9IGVsc2UgewotCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbGlzdCwgbGlzdCkKKwkJaWYgKCFhdWRpdF9jb21wYXJlX3J1bGUoJmVudHJ5LT5ydWxlLCAmZS0+cnVsZSkpIHsKKwkJCWZvdW5kID0gZTsKKwkJCWdvdG8gb3V0OworCQl9CisKK291dDoKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qIEdldCBwYXRoIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgYWRkaW5nIHdhdGNoZXMuICovCitzdGF0aWMgaW50IGF1ZGl0X2dldF9uZChjaGFyICpwYXRoLCBzdHJ1Y3QgbmFtZWlkYXRhICoqbmRwLAorCQkJc3RydWN0IG5hbWVpZGF0YSAqKm5kdykKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhICpuZHBhcmVudCwgKm5kd2F0Y2g7CisJaW50IGVycjsKKworCW5kcGFyZW50ID0ga21hbGxvYyhzaXplb2YoKm5kcGFyZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFuZHBhcmVudCkpCisJCXJldHVybiAtRU5PTUVNOworCisJbmR3YXRjaCA9IGttYWxsb2Moc2l6ZW9mKCpuZHdhdGNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFuZHdhdGNoKSkgeworCQlrZnJlZShuZHBhcmVudCk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9QQVJFTlQsIG5kcGFyZW50KTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKG5kcGFyZW50KTsKKwkJa2ZyZWUobmR3YXRjaCk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgMCwgbmR3YXRjaCk7CisJaWYgKGVycikgeworCQlrZnJlZShuZHdhdGNoKTsKKwkJbmR3YXRjaCA9IE5VTEw7CisJfQorCisJKm5kcCA9IG5kcGFyZW50OworCSpuZHcgPSBuZHdhdGNoOworCiAJcmV0dXJuIDA7CiB9CiAKLS8qIFJlbW92ZSBhbiBleGlzdGluZyBydWxlIGZyb20gZmlsdGVybGlzdC4gIFByb3RlY3RlZCBieQotICogYXVkaXRfbmV0bGlua19tdXRleC4gKi8KKy8qIFJlbGVhc2UgcmVzb3VyY2VzIHVzZWQgZm9yIHdhdGNoIHBhdGggaW5mb3JtYXRpb24uICovCitzdGF0aWMgdm9pZCBhdWRpdF9wdXRfbmQoc3RydWN0IG5hbWVpZGF0YSAqbmRwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZHcpCit7CisJaWYgKG5kcCkgeworCQlwYXRoX3JlbGVhc2UobmRwKTsKKwkJa2ZyZWUobmRwKTsKKwl9CisJaWYgKG5kdykgeworCQlwYXRoX3JlbGVhc2UobmR3KTsKKwkJa2ZyZWUobmR3KTsKKwl9Cit9CisKKy8qIEFzc29jaWF0ZSB0aGUgZ2l2ZW4gcnVsZSB3aXRoIGFuIGV4aXN0aW5nIHBhcmVudCBpbm90aWZ5X3dhdGNoLgorICogQ2FsbGVyIG11c3QgaG9sZCBhdWRpdF9maWx0ZXJfbXV0ZXguICovCitzdGF0aWMgdm9pZCBhdWRpdF9hZGRfdG9fcGFyZW50KHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsCisJCQkJc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50KQoreworCXN0cnVjdCBhdWRpdF93YXRjaCAqdywgKndhdGNoID0ga3J1bGUtPndhdGNoOworCWludCB3YXRjaF9mb3VuZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwYXJlbnQtPndhdGNoZXMsIHdsaXN0KSB7CisJCWlmIChzdHJjbXAod2F0Y2gtPnBhdGgsIHctPnBhdGgpKQorCQkJY29udGludWU7CisKKwkJd2F0Y2hfZm91bmQgPSAxOworCisJCS8qIHB1dCBrcnVsZSdzIGFuZCBpbml0aWFsIHJlZnMgdG8gdGVtcG9yYXJ5IHdhdGNoICovCisJCWF1ZGl0X3B1dF93YXRjaCh3YXRjaCk7CisJCWF1ZGl0X3B1dF93YXRjaCh3YXRjaCk7CisKKwkJYXVkaXRfZ2V0X3dhdGNoKHcpOworCQlrcnVsZS0+d2F0Y2ggPSB3YXRjaCA9IHc7CisJCWJyZWFrOworCX0KKworCWlmICghd2F0Y2hfZm91bmQpIHsKKwkJZ2V0X2lub3RpZnlfd2F0Y2goJnBhcmVudC0+d2RhdGEpOworCQl3YXRjaC0+cGFyZW50ID0gcGFyZW50OworCisJCWxpc3RfYWRkKCZ3YXRjaC0+d2xpc3QsICZwYXJlbnQtPndhdGNoZXMpOworCX0KKwlsaXN0X2FkZCgma3J1bGUtPnJsaXN0LCAmd2F0Y2gtPnJ1bGVzKTsKK30KKworLyogRmluZCBhIG1hdGNoaW5nIHdhdGNoIGVudHJ5LCBvciBhZGQgdGhpcyBvbmUuCisgKiBDYWxsZXIgbXVzdCBob2xkIGF1ZGl0X2ZpbHRlcl9tdXRleC4gKi8KK3N0YXRpYyBpbnQgYXVkaXRfYWRkX3dhdGNoKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsIHN0cnVjdCBuYW1laWRhdGEgKm5kcCwKKwkJCSAgIHN0cnVjdCBuYW1laWRhdGEgKm5kdykKK3sKKwlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoID0ga3J1bGUtPndhdGNoOworCXN0cnVjdCBpbm90aWZ5X3dhdGNoICppX3dhdGNoOworCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIHVwZGF0ZSB3YXRjaCBmaWx0ZXIgZmllbGRzICovCisJaWYgKG5kdykgeworCQl3YXRjaC0+ZGV2ID0gbmR3LT5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfZGV2OworCQl3YXRjaC0+aW5vID0gbmR3LT5kZW50cnktPmRfaW5vZGUtPmlfaW5vOworCX0KKworCS8qIFRoZSBhdWRpdF9maWx0ZXJfbXV0ZXggbXVzdCBub3QgYmUgaGVsZCBkdXJpbmcgaW5vdGlmeSBjYWxscyBiZWNhdXNlCisJICogd2UgaG9sZCBpdCBkdXJpbmcgaW5vdGlmeSBldmVudCBjYWxsYmFjayBwcm9jZXNzaW5nLiAgSWYgYW4gZXhpc3RpbmcKKwkgKiBpbm90aWZ5IHdhdGNoIGlzIGZvdW5kLCBpbm90aWZ5X2ZpbmRfd2F0Y2goKSBncmFicyBhIHJlZmVyZW5jZSBiZWZvcmUKKwkgKiByZXR1cm5pbmcuCisJICovCisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCisJaWYgKGlub3RpZnlfZmluZF93YXRjaChhdWRpdF9paCwgbmRwLT5kZW50cnktPmRfaW5vZGUsICZpX3dhdGNoKSA8IDApIHsKKwkJcGFyZW50ID0gYXVkaXRfaW5pdF9wYXJlbnQobmRwKTsKKwkJaWYgKElTX0VSUihwYXJlbnQpKSB7CisJCQkvKiBjYWxsZXIgZXhwZWN0cyBtdXRleCBsb2NrZWQgKi8KKwkJCW11dGV4X2xvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJCQlyZXR1cm4gUFRSX0VSUihwYXJlbnQpOworCQl9CisJfSBlbHNlCisJCXBhcmVudCA9IGNvbnRhaW5lcl9vZihpX3dhdGNoLCBzdHJ1Y3QgYXVkaXRfcGFyZW50LCB3ZGF0YSk7CisKKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCisJLyogcGFyZW50IHdhcyBtb3ZlZCBiZWZvcmUgd2UgdG9vayBhdWRpdF9maWx0ZXJfbXV0ZXggKi8KKwlpZiAocGFyZW50LT5mbGFncyAmIEFVRElUX1BBUkVOVF9JTlZBTElEKQorCQlyZXQgPSAtRU5PRU5UOworCWVsc2UKKwkJYXVkaXRfYWRkX3RvX3BhcmVudChrcnVsZSwgcGFyZW50KTsKKworCS8qIG1hdGNoIGdldCBpbiBhdWRpdF9pbml0X3BhcmVudCBvciBpbm90aWZ5X2ZpbmRfd2F0Y2ggKi8KKwlwdXRfaW5vdGlmeV93YXRjaCgmcGFyZW50LT53ZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworLyogQWRkIHJ1bGUgdG8gZ2l2ZW4gZmlsdGVybGlzdCBpZiBub3QgYSBkdXBsaWNhdGUuICovCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9hZGRfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKKwlzdHJ1Y3QgYXVkaXRfZmllbGQgKmlub2RlX2YgPSBlbnRyeS0+cnVsZS5pbm9kZV9mOworCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2ggPSBlbnRyeS0+cnVsZS53YXRjaDsKKwlzdHJ1Y3QgbmFtZWlkYXRhICpuZHAsICpuZHc7CisJaW50IGgsIGVyciwgcHV0bmRfbmVlZGVkID0gMDsKKworCWlmIChpbm9kZV9mKSB7CisJCWggPSBhdWRpdF9oYXNoX2lubyhpbm9kZV9mLT52YWwpOworCQlsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CisJfQorCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwllID0gYXVkaXRfZmluZF9ydWxlKGVudHJ5LCBsaXN0KTsKKwltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJaWYgKGUpIHsKKwkJZXJyID0gLUVFWElTVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBBdm9pZCBjYWxsaW5nIHBhdGhfbG9va3VwIHVuZGVyIGF1ZGl0X2ZpbHRlcl9tdXRleC4gKi8KKwlpZiAod2F0Y2gpIHsKKwkJZXJyID0gYXVkaXRfZ2V0X25kKHdhdGNoLT5wYXRoLCAmbmRwLCAmbmR3KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CisJCXB1dG5kX25lZWRlZCA9IDE7CisJfQorCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlpZiAod2F0Y2gpIHsKKwkJLyogYXVkaXRfZmlsdGVyX211dGV4IGlzIGRyb3BwZWQgYW5kIHJlLXRha2VuIGR1cmluZyB0aGlzIGNhbGwgKi8KKwkJZXJyID0gYXVkaXRfYWRkX3dhdGNoKCZlbnRyeS0+cnVsZSwgbmRwLCBuZHcpOworCQlpZiAoZXJyKSB7CisJCQltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWggPSBhdWRpdF9oYXNoX2lubygodTMyKXdhdGNoLT5pbm8pOworCQlsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CisJfQorCisJaWYgKGVudHJ5LT5ydWxlLmZsYWdzICYgQVVESVRfRklMVEVSX1BSRVBFTkQpIHsKKwkJbGlzdF9hZGRfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CisJCWVudHJ5LT5ydWxlLmZsYWdzICY9IH5BVURJVF9GSUxURVJfUFJFUEVORDsKKwl9IGVsc2UgeworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsIGxpc3QpOworCX0KKwltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisKKwlpZiAocHV0bmRfbmVlZGVkKQorCQlhdWRpdF9wdXRfbmQobmRwLCBuZHcpOworCisgCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAocHV0bmRfbmVlZGVkKQorCQlhdWRpdF9wdXRfbmQobmRwLCBuZHcpOworCWlmICh3YXRjaCkKKwkJYXVkaXRfcHV0X3dhdGNoKHdhdGNoKTsgLyogdG1wIHdhdGNoLCBtYXRjaGVzIGluaXRpYWwgZ2V0ICovCisJcmV0dXJuIGVycjsKK30KKworLyogUmVtb3ZlIGFuIGV4aXN0aW5nIHJ1bGUgZnJvbSBmaWx0ZXJsaXN0LiAqLwogc3RhdGljIGlubGluZSBpbnQgYXVkaXRfZGVsX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwKIAkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgICplOworCXN0cnVjdCBhdWRpdF9maWVsZCAqaW5vZGVfZiA9IGVudHJ5LT5ydWxlLmlub2RlX2Y7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCwgKnRtcF93YXRjaCA9IGVudHJ5LT5ydWxlLndhdGNoOworCUxJU1RfSEVBRChpbm90aWZ5X2xpc3QpOworCWludCBoLCByZXQgPSAwOwogCi0JLyogRG8gbm90IHVzZSB0aGUgX3JjdSBpdGVyYXRvciBoZXJlLCBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5Ci0JICogZGVsZXRpb24gcm91dGluZS4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKLQkJaWYgKCFhdWRpdF9jb21wYXJlX3J1bGUoJmVudHJ5LT5ydWxlLCAmZS0+cnVsZSkpIHsKLQkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7Ci0JCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGVfcmN1KTsKLQkJCXJldHVybiAwOworCWlmIChpbm9kZV9mKSB7CisJCWggPSBhdWRpdF9oYXNoX2lubyhpbm9kZV9mLT52YWwpOworCQlsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CisJfQorCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwllID0gYXVkaXRfZmluZF9ydWxlKGVudHJ5LCBsaXN0KTsKKwlpZiAoIWUpIHsKKwkJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwl3YXRjaCA9IGUtPnJ1bGUud2F0Y2g7CisJaWYgKHdhdGNoKSB7CisJCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudCA9IHdhdGNoLT5wYXJlbnQ7CisKKwkJbGlzdF9kZWwoJmUtPnJ1bGUucmxpc3QpOworCisJCWlmIChsaXN0X2VtcHR5KCZ3YXRjaC0+cnVsZXMpKSB7CisJCQlhdWRpdF9yZW1vdmVfd2F0Y2god2F0Y2gpOworCisJCQlpZiAobGlzdF9lbXB0eSgmcGFyZW50LT53YXRjaGVzKSkgeworCQkJCS8qIFB1dCBwYXJlbnQgb24gdGhlIGlub3RpZnkgdW4tcmVnaXN0cmF0aW9uCisJCQkJICogbGlzdC4gIEdyYWIgYSByZWZlcmVuY2UgYmVmb3JlIHJlbGVhc2luZworCQkJCSAqIGF1ZGl0X2ZpbHRlcl9tdXRleCwgdG8gYmUgcmVsZWFzZWQgaW4KKwkJCQkgKiBhdWRpdF9pbm90aWZ5X3VucmVnaXN0ZXIoKS4gKi8KKwkJCQlsaXN0X2FkZCgmcGFyZW50LT5pbGlzdCwgJmlub3RpZnlfbGlzdCk7CisJCQkJZ2V0X2lub3RpZnlfd2F0Y2goJnBhcmVudC0+d2RhdGEpOworCQkJfQogCQl9CiAJfQotCXJldHVybiAtRU5PRU5UOwkJLyogTm8gbWF0Y2hpbmcgcnVsZSAqLworCisJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKKwljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGVfcmN1KTsKKworCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKworCWlmICghbGlzdF9lbXB0eSgmaW5vdGlmeV9saXN0KSkKKwkJYXVkaXRfaW5vdGlmeV91bnJlZ2lzdGVyKCZpbm90aWZ5X2xpc3QpOworCitvdXQ6CisJaWYgKHRtcF93YXRjaCkKKwkJYXVkaXRfcHV0X3dhdGNoKHRtcF93YXRjaCk7IC8qIG1hdGNoIGluaXRpYWwgZ2V0ICovCisKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBMaXN0IHJ1bGVzIHVzaW5nIHN0cnVjdCBhdWRpdF9ydWxlLiAgRXhpc3RzIGZvciBiYWNrd2FyZAogICogY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZS4gKi8KLXN0YXRpYyBpbnQgYXVkaXRfbGlzdCh2b2lkICpfZGVzdCkKK3N0YXRpYyB2b2lkIGF1ZGl0X2xpc3QoaW50IHBpZCwgaW50IHNlcSwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSkKIHsKLQlpbnQgcGlkLCBzZXE7Ci0JaW50ICpkZXN0ID0gX2Rlc3Q7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwogCWludCBpOwogCi0JcGlkID0gZGVzdFswXTsKLQlzZXEgPSBkZXN0WzFdOwotCWtmcmVlKGRlc3QpOwotCi0JbXV0ZXhfbG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7Ci0KLQkvKiBUaGUgKl9yY3UgaXRlcmF0b3JzIG5vdCBuZWVkZWQgaGVyZSBiZWNhdXNlIHdlIGFyZQotCSAgIGFsd2F5cyBjYWxsZWQgd2l0aCBhdWRpdF9uZXRsaW5rX211dGV4IGhlbGQuICovCisJLyogVGhpcyBpcyBhIGJsb2NraW5nIHJlYWQsIHNvIHVzZSBhdWRpdF9maWx0ZXJfbXV0ZXggaW5zdGVhZCBvZiByY3UKKwkgKiBpdGVyYXRvciB0byBzeW5jIHdpdGggbGlzdCB3cml0ZXJzLiAqLwogCWZvciAoaT0wOyBpPEFVRElUX05SX0ZJTFRFUlM7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYXVkaXRfZmlsdGVyX2xpc3RbaV0sIGxpc3QpIHsKIAkJCXN0cnVjdCBhdWRpdF9ydWxlICpydWxlOwpAQCAtNTMyLDMzICsxMTc3LDQxIEBACiAJCQlydWxlID0gYXVkaXRfa3J1bGVfdG9fcnVsZSgmZW50cnktPnJ1bGUpOwogCQkJaWYgKHVubGlrZWx5KCFydWxlKSkKIAkJCQlicmVhazsKLQkJCWF1ZGl0X3NlbmRfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDAsIDEsCisJCQlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAwLCAxLAogCQkJCQkgcnVsZSwgc2l6ZW9mKCpydWxlKSk7CisJCQlpZiAoc2tiKQorCQkJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CiAJCQlrZnJlZShydWxlKTsKIAkJfQogCX0KLQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNULCAxLCAxLCBOVUxMLCAwKTsKLQkKLQltdXRleF91bmxvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOwotCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBBVURJVF9JTk9ERV9CVUNLRVRTOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmF1ZGl0X2lub2RlX2hhc2hbaV0sIGxpc3QpIHsKKwkJCXN0cnVjdCBhdWRpdF9ydWxlICpydWxlOworCisJCQlydWxlID0gYXVkaXRfa3J1bGVfdG9fcnVsZSgmZW50cnktPnJ1bGUpOworCQkJaWYgKHVubGlrZWx5KCFydWxlKSkKKwkJCQlicmVhazsKKwkJCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDAsIDEsCisJCQkJCSBydWxlLCBzaXplb2YoKnJ1bGUpKTsKKwkJCWlmIChza2IpCisJCQkJc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTsKKwkJCWtmcmVlKHJ1bGUpOworCQl9CisJfQorCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDEsIDEsIE5VTEwsIDApOworCWlmIChza2IpCisJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CiB9CiAKIC8qIExpc3QgcnVsZXMgdXNpbmcgc3RydWN0IGF1ZGl0X3J1bGVfZGF0YS4gKi8KLXN0YXRpYyBpbnQgYXVkaXRfbGlzdF9ydWxlcyh2b2lkICpfZGVzdCkKK3N0YXRpYyB2b2lkIGF1ZGl0X2xpc3RfcnVsZXMoaW50IHBpZCwgaW50IHNlcSwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcSkKIHsKLQlpbnQgcGlkLCBzZXE7Ci0JaW50ICpkZXN0ID0gX2Rlc3Q7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CiAJaW50IGk7CiAKLQlwaWQgPSBkZXN0WzBdOwotCXNlcSA9IGRlc3RbMV07Ci0Ja2ZyZWUoZGVzdCk7Ci0KLQltdXRleF9sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKLQotCS8qIFRoZSAqX3JjdSBpdGVyYXRvcnMgbm90IG5lZWRlZCBoZXJlIGJlY2F1c2Ugd2UgYXJlCi0JICAgYWx3YXlzIGNhbGxlZCB3aXRoIGF1ZGl0X25ldGxpbmtfbXV0ZXggaGVsZC4gKi8KKwkvKiBUaGlzIGlzIGEgYmxvY2tpbmcgcmVhZCwgc28gdXNlIGF1ZGl0X2ZpbHRlcl9tdXRleCBpbnN0ZWFkIG9mIHJjdQorCSAqIGl0ZXJhdG9yIHRvIHN5bmMgd2l0aCBsaXN0IHdyaXRlcnMuICovCiAJZm9yIChpPTA7IGk8QVVESVRfTlJfRklMVEVSUzsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmF1ZGl0X2ZpbHRlcl9saXN0W2ldLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhICpkYXRhOwpAQCAtNTY2LDE1ICsxMjE5LDMwIEBACiAJCQlkYXRhID0gYXVkaXRfa3J1bGVfdG9fZGF0YSgmZS0+cnVsZSk7CiAJCQlpZiAodW5saWtlbHkoIWRhdGEpKQogCQkJCWJyZWFrOwotCQkJYXVkaXRfc2VuZF9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVF9SVUxFUywgMCwgMSwKLQkJCQkJIGRhdGEsIHNpemVvZigqZGF0YSkpOworCQkJc2tiID0gYXVkaXRfbWFrZV9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVF9SVUxFUywgMCwgMSwKKwkJCQkJIGRhdGEsIHNpemVvZigqZGF0YSkgKyBkYXRhLT5idWZsZW4pOworCQkJaWYgKHNrYikKKwkJCQlza2JfcXVldWVfdGFpbChxLCBza2IpOwogCQkJa2ZyZWUoZGF0YSk7CiAJCX0KIAl9Ci0JYXVkaXRfc2VuZF9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVF9SVUxFUywgMSwgMSwgTlVMTCwgMCk7CisJZm9yIChpPTA7IGk8IEFVRElUX0lOT0RFX0JVQ0tFVFM7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZhdWRpdF9pbm9kZV9oYXNoW2ldLCBsaXN0KSB7CisJCQlzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhICpkYXRhOwogCi0JbXV0ZXhfdW5sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKLQlyZXR1cm4gMDsKKwkJCWRhdGEgPSBhdWRpdF9rcnVsZV90b19kYXRhKCZlLT5ydWxlKTsKKwkJCWlmICh1bmxpa2VseSghZGF0YSkpCisJCQkJYnJlYWs7CisJCQlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNUX1JVTEVTLCAwLCAxLAorCQkJCQkgZGF0YSwgc2l6ZW9mKCpkYXRhKSArIGRhdGEtPmJ1Zmxlbik7CisJCQlpZiAoc2tiKQorCQkJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CisJCQlrZnJlZShkYXRhKTsKKwkJfQorCX0KKwlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNUX1JVTEVTLCAxLCAxLCBOVUxMLCAwKTsKKwlpZiAoc2tiKQorCQlza2JfcXVldWVfdGFpbChxLCBza2IpOwogfQogCiAvKioKQEAgLTU5Miw3ICsxMjYwLDcgQEAKIAkJCSBzaXplX3QgZGF0YXN6LCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlpbnQgKmRlc3Q7CisJc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCAqZGVzdDsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwogCkBAIC02MDUsMTggKzEyNzMsMjIgQEAKIAkJICogaGFwcGVuIGlmIHdlJ3JlIGFjdHVhbGx5IHJ1bm5pbmcgaW4gdGhlIGNvbnRleHQgb2YgYXVkaXRjdGwKIAkJICogdHJ5aW5nIHRvIF9zZW5kXyB0aGUgc3R1ZmYgKi8KIAkJIAotCQlkZXN0ID0ga21hbGxvYygyICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCQlkZXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1ZGl0X25ldGxpbmtfbGlzdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWRlc3QpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJZGVzdFswXSA9IHBpZDsKLQkJZGVzdFsxXSA9IHNlcTsKKwkJZGVzdC0+cGlkID0gcGlkOworCQlza2JfcXVldWVfaGVhZF9pbml0KCZkZXN0LT5xKTsKIAorCQltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCQlpZiAodHlwZSA9PSBBVURJVF9MSVNUKQotCQkJdHNrID0ga3RocmVhZF9ydW4oYXVkaXRfbGlzdCwgZGVzdCwgImF1ZGl0X2xpc3QiKTsKKwkJCWF1ZGl0X2xpc3QocGlkLCBzZXEsICZkZXN0LT5xKTsKIAkJZWxzZQotCQkJdHNrID0ga3RocmVhZF9ydW4oYXVkaXRfbGlzdF9ydWxlcywgZGVzdCwKLQkJCQkJICAiYXVkaXRfbGlzdF9ydWxlcyIpOworCQkJYXVkaXRfbGlzdF9ydWxlcyhwaWQsIHNlcSwgJmRlc3QtPnEpOworCQltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisKKwkJdHNrID0ga3RocmVhZF9ydW4oYXVkaXRfc2VuZF9saXN0LCBkZXN0LCAiYXVkaXRfc2VuZF9saXN0Iik7CiAJCWlmIChJU19FUlIodHNrKSkgeworCQkJc2tiX3F1ZXVlX3B1cmdlKCZkZXN0LT5xKTsKIAkJCWtmcmVlKGRlc3QpOwogCQkJZXJyID0gUFRSX0VSUih0c2spOwogCQl9CkBAIC02MzIsNiArMTMwNCw3IEBACiAKIAkJZXJyID0gYXVkaXRfYWRkX3J1bGUoZW50cnksCiAJCQkJICAgICAmYXVkaXRfZmlsdGVyX2xpc3RbZW50cnktPnJ1bGUubGlzdG5yXSk7CisKIAkJaWYgKHNpZCkgewogCQkJY2hhciAqY3R4ID0gTlVMTDsKIAkJCXUzMiBsZW47CkBAIC03MTIsNyArMTM4NSw0MyBAQAogCXJldHVybiAwOwogfQogCisvKiBDb21wYXJlIGdpdmVuIGRlbnRyeSBuYW1lIHdpdGggbGFzdCBjb21wb25lbnQgaW4gZ2l2ZW4gcGF0aCwKKyAqIHJldHVybiBvZiAwIGluZGljYXRlcyBhIG1hdGNoLiAqLworaW50IGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChjb25zdCBjaGFyICpkbmFtZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgaW50ICpkaXJsZW4pCit7CisJaW50IGRsZW4sIHBsZW47CisJY29uc3QgY2hhciAqcDsKIAorCWlmICghZG5hbWUgfHwgIXBhdGgpCisJCXJldHVybiAxOworCisJZGxlbiA9IHN0cmxlbihkbmFtZSk7CisJcGxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAocGxlbiA8IGRsZW4pCisJCXJldHVybiAxOworCisJLyogZGlzcmVnYXJkIHRyYWlsaW5nIHNsYXNoZXMgKi8KKwlwID0gcGF0aCArIHBsZW4gLSAxOworCXdoaWxlICgoKnAgPT0gJy8nKSAmJiAocCA+IHBhdGgpKQorCQlwLS07CisKKwkvKiBmaW5kIGxhc3QgcGF0aCBjb21wb25lbnQgKi8KKwlwID0gcCAtIGRsZW4gKyAxOworCWlmIChwIDwgcGF0aCkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAocCA+IHBhdGgpIHsKKwkJaWYgKCotLXAgIT0gJy8nKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXArKzsKKwl9CisKKwkvKiByZXR1cm4gbGVuZ3RoIG9mIHBhdGgncyBkaXJlY3RvcnkgY29tcG9uZW50ICovCisJaWYgKGRpcmxlbikKKwkJKmRpcmxlbiA9IHAgLSBwYXRoOworCXJldHVybiBzdHJuY21wKHAsIGRuYW1lLCBkbGVuKTsKK30KIAogc3RhdGljIGludCBhdWRpdF9maWx0ZXJfdXNlcl9ydWxlcyhzdHJ1Y3QgbmV0bGlua19za2JfcGFybXMgKmNiLAogCQkJCSAgIHN0cnVjdCBhdWRpdF9rcnVsZSAqcnVsZSwKQEAgLTc0NCw3ICsxNDUzLDYgQEAKIAl9CiAJc3dpdGNoIChydWxlLT5hY3Rpb24pIHsKIAljYXNlIEFVRElUX05FVkVSOiAgICAqc3RhdGUgPSBBVURJVF9ESVNBQkxFRDsJICAgIGJyZWFrOwotCWNhc2UgQVVESVRfUE9TU0lCTEU6ICpzdGF0ZSA9IEFVRElUX0JVSUxEX0NPTlRFWFQ7ICBicmVhazsKIAljYXNlIEFVRElUX0FMV0FZUzogICAqc3RhdGUgPSBBVURJVF9SRUNPUkRfQ09OVEVYVDsgYnJlYWs7CiAJfQogCXJldHVybiAxOwpAQCAtODI2LDMyICsxNTM0LDY1IEBACiBpbnQgc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSh2b2lkKQogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksICpuLCAqbmVudHJ5OworCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2g7CiAJaW50IGksIGVyciA9IDA7CiAKLQkvKiBhdWRpdF9uZXRsaW5rX211dGV4IHN5bmNocm9uaXplcyB0aGUgd3JpdGVycyAqLwotCW11dGV4X2xvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOworCS8qIGF1ZGl0X2ZpbHRlcl9tdXRleCBzeW5jaHJvbml6ZXMgdGhlIHdyaXRlcnMgKi8KKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCiAJZm9yIChpID0gMDsgaSA8IEFVRElUX05SX0ZJTFRFUlM7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG4sICZhdWRpdF9maWx0ZXJfbGlzdFtpXSwgbGlzdCkgewogCQkJaWYgKCFhdWRpdF9ydWxlX2hhc19zZWxpbnV4KCZlbnRyeS0+cnVsZSkpCiAJCQkJY29udGludWU7CiAKLQkJCW5lbnRyeSA9IGF1ZGl0X2R1cGVfcnVsZSgmZW50cnktPnJ1bGUpOworCQkJd2F0Y2ggPSBlbnRyeS0+cnVsZS53YXRjaDsKKwkJCW5lbnRyeSA9IGF1ZGl0X2R1cGVfcnVsZSgmZW50cnktPnJ1bGUsIHdhdGNoKTsKIAkJCWlmICh1bmxpa2VseShJU19FUlIobmVudHJ5KSkpIHsKIAkJCQkvKiBzYXZlIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZCBmb3IgdGhlCiAJCQkJICogcmV0dXJuIHZhbHVlICovCiAJCQkJaWYgKCFlcnIpCiAJCQkJCWVyciA9IFBUUl9FUlIobmVudHJ5KTsKIAkJCQlhdWRpdF9wYW5pYygiZXJyb3IgdXBkYXRpbmcgc2VsaW51eCBmaWx0ZXJzIik7CisJCQkJaWYgKHdhdGNoKQorCQkJCQlsaXN0X2RlbCgmZW50cnktPnJ1bGUucmxpc3QpOwogCQkJCWxpc3RfZGVsX3JjdSgmZW50cnktPmxpc3QpOwogCQkJfSBlbHNlIHsKKwkJCQlpZiAod2F0Y2gpIHsKKwkJCQkJbGlzdF9hZGQoJm5lbnRyeS0+cnVsZS5ybGlzdCwKKwkJCQkJCSAmd2F0Y2gtPnJ1bGVzKTsKKwkJCQkJbGlzdF9kZWwoJmVudHJ5LT5ydWxlLnJsaXN0KTsKKwkJCQl9CiAJCQkJbGlzdF9yZXBsYWNlX3JjdSgmZW50cnktPmxpc3QsICZuZW50cnktPmxpc3QpOwogCQkJfQogCQkJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOwogCQl9CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKKwltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQorCisvKiBVcGRhdGUgd2F0Y2ggZGF0YSBpbiBhdWRpdCBydWxlcyBiYXNlZCBvbiBpbm90aWZ5IGV2ZW50cy4gKi8KK3ZvaWQgYXVkaXRfaGFuZGxlX2lldmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqaV93YXRjaCwgdTMyIHdkLCB1MzIgbWFzaywKKwkJCSB1MzIgY29va2llLCBjb25zdCBjaGFyICpkbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQ7CisKKwlwYXJlbnQgPSBjb250YWluZXJfb2YoaV93YXRjaCwgc3RydWN0IGF1ZGl0X3BhcmVudCwgd2RhdGEpOworCisJaWYgKG1hc2sgJiAoSU5fQ1JFQVRFfElOX01PVkVEX1RPKSAmJiBpbm9kZSkKKwkJYXVkaXRfdXBkYXRlX3dhdGNoKHBhcmVudCwgZG5hbWUsIGlub2RlLT5pX3NiLT5zX2RldiwKKwkJCQkgICBpbm9kZS0+aV9pbm8sIDApOworCWVsc2UgaWYgKG1hc2sgJiAoSU5fREVMRVRFfElOX01PVkVEX0ZST00pKQorCQlhdWRpdF91cGRhdGVfd2F0Y2gocGFyZW50LCBkbmFtZSwgKGRldl90KS0xLCAodW5zaWduZWQgbG9uZyktMSwgMSk7CisJLyogaW5vdGlmeSBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgdGhlIHdhdGNoIGFuZCBzZW5kcyBJTl9JR05PUkVEICovCisJZWxzZSBpZiAobWFzayAmIChJTl9ERUxFVEVfU0VMRnxJTl9VTk1PVU5UKSkKKwkJYXVkaXRfcmVtb3ZlX3BhcmVudF93YXRjaGVzKHBhcmVudCk7CisJLyogaW5vdGlmeSBkb2VzIG5vdCByZW1vdmUgdGhlIHdhdGNoLCBzbyByZW1vdmUgaXQgbWFudWFsbHkgKi8KKwllbHNlIGlmKG1hc2sgJiBJTl9NT1ZFX1NFTEYpIHsKKwkJYXVkaXRfcmVtb3ZlX3BhcmVudF93YXRjaGVzKHBhcmVudCk7CisJCWlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChhdWRpdF9paCwgaV93YXRjaCk7CisJfSBlbHNlIGlmIChtYXNrICYgSU5fSUdOT1JFRCkKKwkJcHV0X2lub3RpZnlfd2F0Y2goaV93YXRjaCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCAxYzAzYTRlLi5iMDk3Y2NiIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDMtMjAwNCBSZWQgSGF0IEluYy4sIER1cmhhbSwgTm9ydGggQ2Fyb2xpbmEuCiAgKiBDb3B5cmlnaHQgMjAwNSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0IChDKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbgogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjksNiArMjksOSBAQAogICogdGhpcyBmaWxlIC0tIHNlZSBlbnRyeS5TKSBpcyBiYXNlZCBvbiBhIEdQTCdkIHBhdGNoIHdyaXR0ZW4gYnkKICAqIG9raXJAc3VzZS5kZSBhbmQgQ29weXJpZ2h0IDIwMDMgU3VTRSBMaW51eCBBRy4KICAqCisgKiBQT1NJWCBtZXNzYWdlIHF1ZXVlIHN1cHBvcnQgYWRkZWQgYnkgR2VvcmdlIFdpbHNvbiA8bHRjZ2N3QHVzLmlibS5jb20+LAorICogMjAwNi4KKyAqCiAgKiBUaGUgc3VwcG9ydCBvZiBhZGRpdGlvbmFsIGZpbHRlciBydWxlcyBjb21wYXJlcyAoPiwgPCwgPj0sIDw9KSB3YXMKICAqIGFkZGVkIGJ5IER1c3RpbiBLaXJrbGFuZCA8ZHVzdGluLmtpcmtsYW5kQHVzLmlibS5jb20+LCAyMDA1LgogICoKQEAgLTQ5LDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L21xdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC01OSw2ICs2Myw4IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KIAogI2luY2x1ZGUgImF1ZGl0LmgiCiAKQEAgLTc2LDYgKzgyLDkgQEAKICAqIHBhdGhfbG9va3VwLiAqLwogI2RlZmluZSBBVURJVF9OQU1FU19SRVNFUlZFRCA3CiAKKy8qIEluZGljYXRlcyB0aGF0IGF1ZGl0IHNob3VsZCBsb2cgdGhlIGZ1bGwgcGF0aG5hbWUuICovCisjZGVmaW5lIEFVRElUX05BTUVfRlVMTCAtMQorCiAvKiBXaGVuIGZzL25hbWVpLmM6Z2V0bmFtZSgpIGlzIGNhbGxlZCwgd2Ugc3RvcmUgdGhlIHBvaW50ZXIgaW4gbmFtZSBhbmQKICAqIHdlIGRvbid0IGxldCBwdXRuYW1lKCkgZnJlZSBpdCAoaW5zdGVhZCB3ZSBmcmVlIGFsbCBvZiB0aGUgc2F2ZWQKICAqIHBvaW50ZXJzIGF0IHN5c2NhbGwgZXhpdCB0aW1lKS4KQEAgLTgzLDggKzkyLDkgQEAKICAqIEZ1cnRoZXIsIGluIGZzL25hbWVpLmM6cGF0aF9sb29rdXAoKSB3ZSBzdG9yZSB0aGUgaW5vZGUgYW5kIGRldmljZS4gKi8KIHN0cnVjdCBhdWRpdF9uYW1lcyB7CiAJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCW5hbWVfbGVuOwkvKiBudW1iZXIgb2YgbmFtZSdzIGNoYXJhY3RlcnMgdG8gbG9nICovCisJdW5zaWduZWQJbmFtZV9wdXQ7CS8qIGNhbGwgX19wdXRuYW1lKCkgZm9yIHRoaXMgbmFtZSAqLwogCXVuc2lnbmVkIGxvbmcJaW5vOwotCXVuc2lnbmVkIGxvbmcJcGlubzsKIAlkZXZfdAkJZGV2OwogCXVtb2RlX3QJCW1vZGU7CiAJdWlkX3QJCXVpZDsKQEAgLTEwMCw2ICsxMTAsMzMgQEAKIAogI2RlZmluZSBBVURJVF9BVVhfSVBDUEVSTQkwCiAKK3N0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9vcGVuIHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwlpbnQJCQlvZmxhZzsKKwltb2RlX3QJCQltb2RlOworCXN0cnVjdCBtcV9hdHRyCQlhdHRyOworfTsKKworc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX3NlbmRyZWN2IHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwltcWRfdAkJCW1xZGVzOworCXNpemVfdAkJCW1zZ19sZW47CisJdW5zaWduZWQgaW50CQltc2dfcHJpbzsKKwlzdHJ1Y3QgdGltZXNwZWMJCWFic190aW1lb3V0OworfTsKKworc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX25vdGlmeSB7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhCWQ7CisJbXFkX3QJCQltcWRlczsKKwlzdHJ1Y3Qgc2lnZXZlbnQgCW5vdGlmaWNhdGlvbjsKK307CisKK3N0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9nZXRzZXRhdHRyIHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwltcWRfdAkJCW1xZGVzOworCXN0cnVjdCBtcV9hdHRyIAkJbXFzdGF0OworfTsKKwogc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCB7CiAJc3RydWN0IGF1ZGl0X2F1eF9kYXRhCWQ7CiAJc3RydWN0IGlwY19wZXJtCQlwOwpAQCAtMTEwLDYgKzE0NywxMyBAQAogCXUzMgkJCW9zaWQ7CiB9OwogCitzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfZXhlY3ZlIHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwlpbnQgYXJnYzsKKwlpbnQgZW52YzsKKwljaGFyIG1lbVswXTsKK307CisKIHN0cnVjdCBhdWRpdF9hdXhfZGF0YV9zb2NrZXRjYWxsIHsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKIAlpbnQJCQluYXJnczsKQEAgLTE0OCw3ICsxOTIsNyBAQAogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YSAqYXV4OwogCiAJCQkJLyogU2F2ZSB0aGluZ3MgdG8gcHJpbnQgYWJvdXQgdGFza19zdHJ1Y3QgKi8KLQlwaWRfdAkJICAgIHBpZDsKKwlwaWRfdAkJICAgIHBpZCwgcHBpZDsKIAl1aWRfdAkJICAgIHVpZCwgZXVpZCwgc3VpZCwgZnN1aWQ7CiAJZ2lkX3QJCSAgICBnaWQsIGVnaWQsIHNnaWQsIGZzZ2lkOwogCXVuc2lnbmVkIGxvbmcJICAgIHBlcnNvbmFsaXR5OwpAQCAtMTYwLDEyICsyMDQsMTMgQEAKICNlbmRpZgogfTsKIAotCisvKiBEZXRlcm1pbmUgaWYgYW55IGNvbnRleHQgbmFtZSBkYXRhIG1hdGNoZXMgYSBydWxlJ3Mgd2F0Y2ggZGF0YSAqLwogLyogQ29tcGFyZSBhIHRhc2tfc3RydWN0IHdpdGggYW4gYXVkaXRfcnVsZS4gIFJldHVybiAxIG9uIG1hdGNoLCAwCiAgKiBvdGhlcndpc2UuICovCiBzdGF0aWMgaW50IGF1ZGl0X2ZpbHRlcl9ydWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCSAgICAgIHN0cnVjdCBhdWRpdF9rcnVsZSAqcnVsZSwKIAkJCSAgICAgIHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3QgYXVkaXRfbmFtZXMgKm5hbWUsCiAJCQkgICAgICBlbnVtIGF1ZGl0X3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQgaSwgaiwgbmVlZF9zaWQgPSAxOwpAQCAtMTc5LDYgKzIyNCwxMCBAQAogCQljYXNlIEFVRElUX1BJRDoKIAkJCXJlc3VsdCA9IGF1ZGl0X2NvbXBhcmF0b3IodHNrLT5waWQsIGYtPm9wLCBmLT52YWwpOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfUFBJRDoKKwkJCWlmIChjdHgpCisJCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcihjdHgtPnBwaWQsIGYtPm9wLCBmLT52YWwpOworCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfVUlEOgogCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcih0c2stPnVpZCwgZi0+b3AsIGYtPnZhbCk7CiAJCQlicmVhazsKQEAgLTIyNCw3ICsyNzMsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0RFVk1BSk9SOgotCQkJaWYgKGN0eCkgeworCQkJaWYgKG5hbWUpCisJCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcihNQUpPUihuYW1lLT5kZXYpLAorCQkJCQkJCSAgZi0+b3AsIGYtPnZhbCk7CisJCQllbHNlIGlmIChjdHgpIHsKIAkJCQlmb3IgKGogPSAwOyBqIDwgY3R4LT5uYW1lX2NvdW50OyBqKyspIHsKIAkJCQkJaWYgKGF1ZGl0X2NvbXBhcmF0b3IoTUFKT1IoY3R4LT5uYW1lc1tqXS5kZXYpLAlmLT5vcCwgZi0+dmFsKSkgewogCQkJCQkJKytyZXN1bHQ7CkBAIC0yMzQsNyArMjg2LDEwIEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9ERVZNSU5PUjoKLQkJCWlmIChjdHgpIHsKKwkJCWlmIChuYW1lKQorCQkJCXJlc3VsdCA9IGF1ZGl0X2NvbXBhcmF0b3IoTUlOT1IobmFtZS0+ZGV2KSwKKwkJCQkJCQkgIGYtPm9wLCBmLT52YWwpOworCQkJZWxzZSBpZiAoY3R4KSB7CiAJCQkJZm9yIChqID0gMDsgaiA8IGN0eC0+bmFtZV9jb3VudDsgaisrKSB7CiAJCQkJCWlmIChhdWRpdF9jb21wYXJhdG9yKE1JTk9SKGN0eC0+bmFtZXNbal0uZGV2KSwgZi0+b3AsIGYtPnZhbCkpIHsKIAkJCQkJCSsrcmVzdWx0OwpAQCAtMjQ0LDE2ICsyOTksMjIgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0lOT0RFOgotCQkJaWYgKGN0eCkgeworCQkJaWYgKG5hbWUpCisJCQkJcmVzdWx0ID0gKG5hbWUtPmlubyA9PSBmLT52YWwpOworCQkJZWxzZSBpZiAoY3R4KSB7CiAJCQkJZm9yIChqID0gMDsgaiA8IGN0eC0+bmFtZV9jb3VudDsgaisrKSB7Ci0JCQkJCWlmIChhdWRpdF9jb21wYXJhdG9yKGN0eC0+bmFtZXNbal0uaW5vLCBmLT5vcCwgZi0+dmFsKSB8fAotCQkJCQkgICAgYXVkaXRfY29tcGFyYXRvcihjdHgtPm5hbWVzW2pdLnBpbm8sIGYtPm9wLCBmLT52YWwpKSB7CisJCQkJCWlmIChhdWRpdF9jb21wYXJhdG9yKGN0eC0+bmFtZXNbal0uaW5vLCBmLT5vcCwgZi0+dmFsKSkgewogCQkJCQkJKytyZXN1bHQ7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIEFVRElUX1dBVENIOgorCQkJaWYgKG5hbWUgJiYgcnVsZS0+d2F0Y2gtPmlubyAhPSAodW5zaWduZWQgbG9uZyktMSkKKwkJCQlyZXN1bHQgPSAobmFtZS0+ZGV2ID09IHJ1bGUtPndhdGNoLT5kZXYgJiYKKwkJCQkJICBuYW1lLT5pbm8gPT0gcnVsZS0+d2F0Y2gtPmlubyk7CisJCQlicmVhazsKIAkJY2FzZSBBVURJVF9MT0dJTlVJRDoKIAkJCXJlc3VsdCA9IDA7CiAJCQlpZiAoY3R4KQpAQCAtMjk0LDcgKzM1NSw2IEBACiAJfQogCXN3aXRjaCAocnVsZS0+YWN0aW9uKSB7CiAJY2FzZSBBVURJVF9ORVZFUjogICAgKnN0YXRlID0gQVVESVRfRElTQUJMRUQ7CSAgICBicmVhazsKLQljYXNlIEFVRElUX1BPU1NJQkxFOiAqc3RhdGUgPSBBVURJVF9CVUlMRF9DT05URVhUOyAgYnJlYWs7CiAJY2FzZSBBVURJVF9BTFdBWVM6ICAgKnN0YXRlID0gQVVESVRfUkVDT1JEX0NPTlRFWFQ7IGJyZWFrOwogCX0KIAlyZXR1cm4gMTsKQEAgLTMxMSw3ICszNzEsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9GSUxURVJfVEFTS10sIGxpc3QpIHsKLQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CisJCWlmIChhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgTlVMTCwgTlVMTCwgJnN0YXRlKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gc3RhdGU7CiAJCX0KQEAgLTM0MSw4ICs0MDEsOSBAQAogCQlpbnQgYml0ICA9IEFVRElUX0JJVChjdHgtPm1ham9yKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBsaXN0LCBsaXN0KSB7Ci0JCQlpZiAoKGUtPnJ1bGUubWFza1t3b3JkXSAmIGJpdCkgPT0gYml0Ci0JCQkJCSYmIGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBjdHgsICZzdGF0ZSkpIHsKKwkJCWlmICgoZS0+cnVsZS5tYXNrW3dvcmRdICYgYml0KSA9PSBiaXQgJiYKKwkJCSAgICBhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgY3R4LCBOVUxMLAorCQkJCQkgICAgICAgJnN0YXRlKSkgewogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCXJldHVybiBzdGF0ZTsKIAkJCX0KQEAgLTM1Miw2ICs0MTMsNDkgQEAKIAlyZXR1cm4gQVVESVRfQlVJTERfQ09OVEVYVDsKIH0KIAorLyogQXQgc3lzY2FsbCBleGl0IHRpbWUsIHRoaXMgZmlsdGVyIGlzIGNhbGxlZCBpZiBhbnkgYXVkaXRfbmFtZXNbXSBoYXZlIGJlZW4KKyAqIGNvbGxlY3RlZCBkdXJpbmcgc3lzY2FsbCBwcm9jZXNzaW5nLiAgV2Ugb25seSBjaGVjayBydWxlcyBpbiBzdWJsaXN0cyBhdCBoYXNoCisgKiBidWNrZXRzIGFwcGxpY2FibGUgdG8gdGhlIGlub2RlIG51bWJlcnMgaW4gYXVkaXRfbmFtZXNbXS4KKyAqIFJlZ2FyZGluZyBhdWRpdF9zdGF0ZSwgc2FtZSBydWxlcyBhcHBseSBhcyBmb3IgYXVkaXRfZmlsdGVyX3N5c2NhbGwoKS4KKyAqLworZW51bSBhdWRpdF9zdGF0ZSBhdWRpdF9maWx0ZXJfaW5vZGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CisJZW51bSBhdWRpdF9zdGF0ZSBzdGF0ZTsKKworCWlmIChhdWRpdF9waWQgJiYgdHNrLT50Z2lkID09IGF1ZGl0X3BpZCkKKwkJcmV0dXJuIEFVRElUX0RJU0FCTEVEOworCisJcmN1X3JlYWRfbG9jaygpOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPm5hbWVfY291bnQ7IGkrKykgeworCQlpbnQgd29yZCA9IEFVRElUX1dPUkQoY3R4LT5tYWpvcik7CisJCWludCBiaXQgID0gQVVESVRfQklUKGN0eC0+bWFqb3IpOworCQlzdHJ1Y3QgYXVkaXRfbmFtZXMgKm4gPSAmY3R4LT5uYW1lc1tpXTsKKwkJaW50IGggPSBhdWRpdF9oYXNoX2lubygodTMyKW4tPmlubyk7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSAmYXVkaXRfaW5vZGVfaGFzaFtoXTsKKworCQlpZiAobGlzdF9lbXB0eShsaXN0KSkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIGxpc3QsIGxpc3QpIHsKKwkJCWlmICgoZS0+cnVsZS5tYXNrW3dvcmRdICYgYml0KSA9PSBiaXQgJiYKKwkJCSAgICBhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgY3R4LCBuLCAmc3RhdGUpKSB7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJcmV0dXJuIHN0YXRlOworCQkJfQorCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBBVURJVF9CVUlMRF9DT05URVhUOworfQorCit2b2lkIGF1ZGl0X3NldF9hdWRpdGFibGUoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCkKK3sKKwljdHgtPmF1ZGl0YWJsZSA9IDE7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmF1ZGl0X2dldF9jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCQkJICAgICAgaW50IHJldHVybl92YWxpZCwKIAkJCQkJCSAgICAgIGludCByZXR1cm5fY29kZSkKQEAgLTM2NSwxMiArNDY5LDIyIEBACiAKIAlpZiAoY29udGV4dC0+aW5fc3lzY2FsbCAmJiAhY29udGV4dC0+YXVkaXRhYmxlKSB7CiAJCWVudW0gYXVkaXRfc3RhdGUgc3RhdGU7CisKIAkJc3RhdGUgPSBhdWRpdF9maWx0ZXJfc3lzY2FsbCh0c2ssIGNvbnRleHQsICZhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9GSUxURVJfRVhJVF0pOworCQlpZiAoc3RhdGUgPT0gQVVESVRfUkVDT1JEX0NPTlRFWFQpIHsKKwkJCWNvbnRleHQtPmF1ZGl0YWJsZSA9IDE7CisJCQlnb3RvIGdldF9jb250ZXh0OworCQl9CisKKwkJc3RhdGUgPSBhdWRpdF9maWx0ZXJfaW5vZGVzKHRzaywgY29udGV4dCk7CiAJCWlmIChzdGF0ZSA9PSBBVURJVF9SRUNPUkRfQ09OVEVYVCkKIAkJCWNvbnRleHQtPmF1ZGl0YWJsZSA9IDE7CisKIAl9CiAKK2dldF9jb250ZXh0OgogCWNvbnRleHQtPnBpZCA9IHRzay0+cGlkOworCWNvbnRleHQtPnBwaWQgPSBzeXNfZ2V0cHBpZCgpOwkvKiBzaWMuICB0c2sgPT0gY3VycmVudCBpbiBhbGwgY2FzZXMgKi8KIAljb250ZXh0LT51aWQgPSB0c2stPnVpZDsKIAljb250ZXh0LT5naWQgPSB0c2stPmdpZDsKIAljb250ZXh0LT5ldWlkID0gdHNrLT5ldWlkOwpAQCAtNDEzLDcgKzUyNyw3IEBACiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBjb250ZXh0LT5uYW1lX2NvdW50OyBpKyspIHsKLQkJaWYgKGNvbnRleHQtPm5hbWVzW2ldLm5hbWUpCisJCWlmIChjb250ZXh0LT5uYW1lc1tpXS5uYW1lICYmIGNvbnRleHQtPm5hbWVzW2ldLm5hbWVfcHV0KQogCQkJX19wdXRuYW1lKGNvbnRleHQtPm5hbWVzW2ldLm5hbWUpOwogCX0KIAljb250ZXh0LT5uYW1lX2NvdW50ID0gMDsKQEAgLTYwNiw3ICs3MjAsNyBAQAogCQl0dHkgPSAiKG5vbmUpIjsKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLAogCQkgICIgYTA9JWx4IGExPSVseCBhMj0lbHggYTM9JWx4IGl0ZW1zPSVkIgotCQkgICIgcGlkPSVkIGF1aWQ9JXUgdWlkPSV1IGdpZD0ldSIKKwkJICAiIHBwaWQ9JWQgcGlkPSVkIGF1aWQ9JXUgdWlkPSV1IGdpZD0ldSIKIAkJICAiIGV1aWQ9JXUgc3VpZD0ldSBmc3VpZD0ldSIKIAkJICAiIGVnaWQ9JXUgc2dpZD0ldSBmc2dpZD0ldSB0dHk9JXMiLAogCQkgIGNvbnRleHQtPmFyZ3ZbMF0sCkBAIC02MTQsNiArNzI4LDcgQEAKIAkJICBjb250ZXh0LT5hcmd2WzJdLAogCQkgIGNvbnRleHQtPmFyZ3ZbM10sCiAJCSAgY29udGV4dC0+bmFtZV9jb3VudCwKKwkJICBjb250ZXh0LT5wcGlkLAogCQkgIGNvbnRleHQtPnBpZCwKIAkJICBjb250ZXh0LT5sb2dpbnVpZCwKIAkJICBjb250ZXh0LT51aWQsCkBAIC02MzAsMTEgKzc0NSw0OCBAQAogCQkJY29udGludWU7IC8qIGF1ZGl0X3BhbmljIGhhcyBiZWVuIGNhbGxlZCAqLwogCiAJCXN3aXRjaCAoYXV4LT50eXBlKSB7CisJCWNhc2UgQVVESVRfTVFfT1BFTjogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX29wZW4gKmF4aSA9ICh2b2lkICopYXV4OworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkib2ZsYWc9MHgleCBtb2RlPSUjbyBtcV9mbGFncz0weCVseCBtcV9tYXhtc2c9JWxkICIKKwkJCQkibXFfbXNnc2l6ZT0lbGQgbXFfY3VybXNncz0lbGQiLAorCQkJCWF4aS0+b2ZsYWcsIGF4aS0+bW9kZSwgYXhpLT5hdHRyLm1xX2ZsYWdzLAorCQkJCWF4aS0+YXR0ci5tcV9tYXhtc2csIGF4aS0+YXR0ci5tcV9tc2dzaXplLAorCQkJCWF4aS0+YXR0ci5tcV9jdXJtc2dzKTsKKwkJCWJyZWFrOyB9CisKKwkJY2FzZSBBVURJVF9NUV9TRU5EUkVDVjogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX3NlbmRyZWN2ICpheGkgPSAodm9pZCAqKWF1eDsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCisJCQkJIm1xZGVzPSVkIG1zZ19sZW49JXpkIG1zZ19wcmlvPSV1ICIKKwkJCQkiYWJzX3RpbWVvdXRfc2VjPSVsZCBhYnNfdGltZW91dF9uc2VjPSVsZCIsCisJCQkJYXhpLT5tcWRlcywgYXhpLT5tc2dfbGVuLCBheGktPm1zZ19wcmlvLAorCQkJCWF4aS0+YWJzX3RpbWVvdXQudHZfc2VjLCBheGktPmFic190aW1lb3V0LnR2X25zZWMpOworCQkJYnJlYWs7IH0KKworCQljYXNlIEFVRElUX01RX05PVElGWTogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX25vdGlmeSAqYXhpID0gKHZvaWQgKilhdXg7CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCSJtcWRlcz0lZCBzaWdldl9zaWdubz0lZCIsCisJCQkJYXhpLT5tcWRlcywKKwkJCQlheGktPm5vdGlmaWNhdGlvbi5zaWdldl9zaWdubyk7CisJCQlicmVhazsgfQorCisJCWNhc2UgQVVESVRfTVFfR0VUU0VUQVRUUjogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX2dldHNldGF0dHIgKmF4aSA9ICh2b2lkICopYXV4OworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkibXFkZXM9JWQgbXFfZmxhZ3M9MHglbHggbXFfbWF4bXNnPSVsZCBtcV9tc2dzaXplPSVsZCAiCisJCQkJIm1xX2N1cm1zZ3M9JWxkICIsCisJCQkJYXhpLT5tcWRlcywKKwkJCQlheGktPm1xc3RhdC5tcV9mbGFncywgYXhpLT5tcXN0YXQubXFfbWF4bXNnLAorCQkJCWF4aS0+bXFzdGF0Lm1xX21zZ3NpemUsIGF4aS0+bXFzdGF0Lm1xX2N1cm1zZ3MpOworCQkJYnJlYWs7IH0KKwogCQljYXNlIEFVRElUX0lQQzogewogCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKLQkJCQkgIiBxYnl0ZXM9JWx4IGl1aWQ9JXUgaWdpZD0ldSBtb2RlPSV4IiwKLQkJCQkgYXhpLT5xYnl0ZXMsIGF4aS0+dWlkLCBheGktPmdpZCwgYXhpLT5tb2RlKTsKKwkJCQkgIm91aWQ9JXUgb2dpZD0ldSBtb2RlPSV4IiwKKwkJCQkgYXhpLT51aWQsIGF4aS0+Z2lkLCBheGktPm1vZGUpOwogCQkJaWYgKGF4aS0+b3NpZCAhPSAwKSB7CiAJCQkJY2hhciAqY3R4ID0gTlVMTDsKIAkJCQl1MzIgbGVuOwpAQCAtNjUyLDE5ICs4MDQsMTggQEAKIAkJY2FzZSBBVURJVF9JUENfU0VUX1BFUk06IHsKIAkJCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4aSA9ICh2b2lkICopYXV4OwogCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKLQkJCQkiIG5ldyBxYnl0ZXM9JWx4IG5ldyBpdWlkPSV1IG5ldyBpZ2lkPSV1IG5ldyBtb2RlPSV4IiwKKwkJCQkicWJ5dGVzPSVseCBvdWlkPSV1IG9naWQ9JXUgbW9kZT0leCIsCiAJCQkJYXhpLT5xYnl0ZXMsIGF4aS0+dWlkLCBheGktPmdpZCwgYXhpLT5tb2RlKTsKLQkJCWlmIChheGktPm9zaWQgIT0gMCkgewotCQkJCWNoYXIgKmN0eCA9IE5VTEw7Ci0JCQkJdTMyIGxlbjsKLQkJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCi0JCQkJCQlheGktPm9zaWQsICZjdHgsICZsZW4pKSB7Ci0JCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3NpZD0ldSIsCi0JCQkJCQkJYXhpLT5vc2lkKTsKLQkJCQkJY2FsbF9wYW5pYyA9IDE7Ci0JCQkJfSBlbHNlCi0JCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwgY3R4KTsKLQkJCQlrZnJlZShjdHgpOworCQkJYnJlYWs7IH0KKworCQljYXNlIEFVRElUX0VYRUNWRTogeworCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2V4ZWN2ZSAqYXhpID0gKHZvaWQgKilhdXg7CisJCQlpbnQgaTsKKwkJCWNvbnN0IGNoYXIgKnA7CisJCQlmb3IgKGkgPSAwLCBwID0gYXhpLT5tZW07IGkgPCBheGktPmFyZ2M7IGkrKykgeworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhJWQ9IiwgaSk7CisJCQkJcCA9IGF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIHApOworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJcbiIpOwogCQkJfQogCQkJYnJlYWs7IH0KIApAQCAtNzAwLDggKzg1MSw3IEBACiAJCX0KIAl9CiAJZm9yIChpID0gMDsgaSA8IGNvbnRleHQtPm5hbWVfY291bnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGlubyAgPSBjb250ZXh0LT5uYW1lc1tpXS5pbm87Ci0JCXVuc2lnbmVkIGxvbmcgcGlubyA9IGNvbnRleHQtPm5hbWVzW2ldLnBpbm87CisJCXN0cnVjdCBhdWRpdF9uYW1lcyAqbiA9ICZjb250ZXh0LT5uYW1lc1tpXTsKIAogCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBHRlBfS0VSTkVMLCBBVURJVF9QQVRIKTsKIAkJaWYgKCFhYikKQEAgLTcwOSwzMyArODU5LDQ3IEBACiAKIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIml0ZW09JWQiLCBpKTsKIAotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7Ci0JCWlmIChjb250ZXh0LT5uYW1lc1tpXS5uYW1lKQotCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgY29udGV4dC0+bmFtZXNbaV0ubmFtZSk7Ci0JCWVsc2UKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIobnVsbCkiKTsKKwkJaWYgKG4tPm5hbWUpIHsKKwkJCXN3aXRjaChuLT5uYW1lX2xlbikgeworCQkJY2FzZSBBVURJVF9OQU1FX0ZVTEw6CisJCQkJLyogbG9nIHRoZSBmdWxsIHBhdGggKi8KKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7CisJCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgbi0+bmFtZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJLyogbmFtZSB3YXMgc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aCBhbmQgdGhlCisJCQkJICogZGlyZWN0b3J5IGNvbXBvbmVudCBpcyB0aGUgY3dkICovCisJCQkJYXVkaXRfbG9nX2RfcGF0aChhYiwgIiBuYW1lPSIsIGNvbnRleHQtPnB3ZCwKKwkJCQkJCSBjb250ZXh0LT5wd2RtbnQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBsb2cgdGhlIG5hbWUncyBkaXJlY3RvcnkgY29tcG9uZW50ICovCisJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSIpOworCQkJCWF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhhYiwgbi0+bmFtZV9sZW4sCisJCQkJCQkJICAgIG4tPm5hbWUpOworCQkJfQorCQl9IGVsc2UKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0obnVsbCkiKTsKIAotCQlpZiAocGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcGFyZW50PSVsdSIsICBwaW5vKTsKLQkJaWYgKGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgaW5vZGU9JWx1IiwgIGlubyk7Ci0JCWlmICgocGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkgfHwgKGlubyAhPSAodW5zaWduZWQgbG9uZyktMSkpCi0JCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGRldj0lMDJ4OiUwMnggbW9kZT0lI28iIAotCQkJCQkgIiBvdWlkPSV1IG9naWQ9JXUgcmRldj0lMDJ4OiUwMngiLCAKLQkJCQkJIE1BSk9SKGNvbnRleHQtPm5hbWVzW2ldLmRldiksIAotCQkJCQkgTUlOT1IoY29udGV4dC0+bmFtZXNbaV0uZGV2KSwgCi0JCQkJCSBjb250ZXh0LT5uYW1lc1tpXS5tb2RlLCAKLQkJCQkJIGNvbnRleHQtPm5hbWVzW2ldLnVpZCwgCi0JCQkJCSBjb250ZXh0LT5uYW1lc1tpXS5naWQsIAotCQkJCQkgTUFKT1IoY29udGV4dC0+bmFtZXNbaV0ucmRldiksIAotCQkJCQkgTUlOT1IoY29udGV4dC0+bmFtZXNbaV0ucmRldikpOwotCQlpZiAoY29udGV4dC0+bmFtZXNbaV0ub3NpZCAhPSAwKSB7CisJCWlmIChuLT5pbm8gIT0gKHVuc2lnbmVkIGxvbmcpLTEpIHsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgaW5vZGU9JWx1IgorCQkJCQkgIiBkZXY9JTAyeDolMDJ4IG1vZGU9JSNvIgorCQkJCQkgIiBvdWlkPSV1IG9naWQ9JXUgcmRldj0lMDJ4OiUwMngiLAorCQkJCQkgbi0+aW5vLAorCQkJCQkgTUFKT1Iobi0+ZGV2KSwKKwkJCQkJIE1JTk9SKG4tPmRldiksCisJCQkJCSBuLT5tb2RlLAorCQkJCQkgbi0+dWlkLAorCQkJCQkgbi0+Z2lkLAorCQkJCQkgTUFKT1Iobi0+cmRldiksCisJCQkJCSBNSU5PUihuLT5yZGV2KSk7CisJCX0KKwkJaWYgKG4tPm9zaWQgIT0gMCkgewogCQkJY2hhciAqY3R4ID0gTlVMTDsKIAkJCXUzMiBsZW47CiAJCQlpZiAoc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCi0JCQkJY29udGV4dC0+bmFtZXNbaV0ub3NpZCwgJmN0eCwgJmxlbikpIHsKLQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLAotCQkJCQkJY29udGV4dC0+bmFtZXNbaV0ub3NpZCk7CisJCQkJbi0+b3NpZCwgJmN0eCwgJmxlbikpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG9zaWQ9JXUiLCBuLT5vc2lkKTsKIAkJCQljYWxsX3BhbmljID0gMjsKIAkJCX0gZWxzZQogCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb2JqPSVzIiwgY3R4KTsKQEAgLTkwOCwxMSArMTA3MiwxMSBAQAogICogQWRkIGEgbmFtZSB0byB0aGUgbGlzdCBvZiBhdWRpdCBuYW1lcyBmb3IgdGhpcyBjb250ZXh0LgogICogQ2FsbGVkIGZyb20gZnMvbmFtZWkuYzpnZXRuYW1lKCkuCiAgKi8KLXZvaWQgYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKQordm9pZCBfX2F1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CiAKLQlpZiAoIWNvbnRleHQgfHwgSVNfRVJSKG5hbWUpIHx8ICFuYW1lKQorCWlmIChJU19FUlIobmFtZSkgfHwgIW5hbWUpCiAJCXJldHVybjsKIAogCWlmICghY29udGV4dC0+aW5fc3lzY2FsbCkgewpAQCAtOTI1LDYgKzEwODksOCBAQAogCX0KIAlCVUdfT04oY29udGV4dC0+bmFtZV9jb3VudCA+PSBBVURJVF9OQU1FUyk7CiAJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZSA9IG5hbWU7CisJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZV9sZW4gPSBBVURJVF9OQU1FX0ZVTEw7CisJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ubmFtZV9wdXQgPSAxOwogCWNvbnRleHQtPm5hbWVzW2NvbnRleHQtPm5hbWVfY291bnRdLmlubyAgPSAodW5zaWduZWQgbG9uZyktMTsKIAkrK2NvbnRleHQtPm5hbWVfY291bnQ7CiAJaWYgKCFjb250ZXh0LT5wd2QpIHsKQEAgLTk5MSwxMSArMTE1NywxMCBAQAogICogYXVkaXRfaW5vZGUgLSBzdG9yZSB0aGUgaW5vZGUgYW5kIGRldmljZSBmcm9tIGEgbG9va3VwCiAgKiBAbmFtZTogbmFtZSBiZWluZyBhdWRpdGVkCiAgKiBAaW5vZGU6IGlub2RlIGJlaW5nIGF1ZGl0ZWQKLSAqIEBmbGFnczogbG9va3VwIGZsYWdzIChhcyB1c2VkIGluIHBhdGhfbG9va3VwKCkpCiAgKgogICogQ2FsbGVkIGZyb20gZnMvbmFtZWkuYzpwYXRoX2xvb2t1cCgpLgogICovCi12b2lkIF9fYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgZmxhZ3MpCit2b2lkIF9fYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpbnQgaWR4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKQEAgLTEwMjEsMjAgKzExODYsMTMgQEAKIAkJKytjb250ZXh0LT5pbm9fY291bnQ7CiAjZW5kaWYKIAl9CisJY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gICA9IGlub2RlLT5pX2lubzsKIAljb250ZXh0LT5uYW1lc1tpZHhdLmRldgkgID0gaW5vZGUtPmlfc2ItPnNfZGV2OwogCWNvbnRleHQtPm5hbWVzW2lkeF0ubW9kZSAgPSBpbm9kZS0+aV9tb2RlOwogCWNvbnRleHQtPm5hbWVzW2lkeF0udWlkICAgPSBpbm9kZS0+aV91aWQ7CiAJY29udGV4dC0+bmFtZXNbaWR4XS5naWQgICA9IGlub2RlLT5pX2dpZDsKIAljb250ZXh0LT5uYW1lc1tpZHhdLnJkZXYgID0gaW5vZGUtPmlfcmRldjsKIAlhdWRpdF9pbm9kZV9jb250ZXh0KGlkeCwgaW5vZGUpOwotCWlmICgoZmxhZ3MgJiBMT09LVVBfUEFSRU5UKSAmJiAoc3RyY21wKG5hbWUsICIvIikgIT0gMCkgJiYgCi0JICAgIChzdHJjbXAobmFtZSwgIi4iKSAhPSAwKSkgewotCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gKHVuc2lnbmVkIGxvbmcpLTE7Ci0JCWNvbnRleHQtPm5hbWVzW2lkeF0ucGlubyAgPSBpbm9kZS0+aV9pbm87Ci0JfSBlbHNlIHsKLQkJY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gICA9IGlub2RlLT5pX2lubzsKLQkJY29udGV4dC0+bmFtZXNbaWR4XS5waW5vICA9ICh1bnNpZ25lZCBsb25nKS0xOwotCX0KIH0KIAogLyoqCkBAIC0xMDU2LDUxICsxMjE0LDQwIEBACiB7CiAJaW50IGlkeDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisJY29uc3QgY2hhciAqZm91bmRfbmFtZSA9IE5VTEw7CisJaW50IGRpcmxlbiA9IDA7CiAKIAlpZiAoIWNvbnRleHQtPmluX3N5c2NhbGwpCiAJCXJldHVybjsKIAogCS8qIGRldGVybWluZSBtYXRjaGluZyBwYXJlbnQgKi8KLQlpZiAoZG5hbWUpCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udGV4dC0+bmFtZV9jb3VudDsgaWR4KyspCi0JCQlpZiAoY29udGV4dC0+bmFtZXNbaWR4XS5waW5vID09IHBpbm8pIHsKLQkJCQljb25zdCBjaGFyICpuOwotCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBjb250ZXh0LT5uYW1lc1tpZHhdLm5hbWU7Ci0JCQkJaW50IGRsZW4gPSBzdHJsZW4oZG5hbWUpOwotCQkJCWludCBubGVuID0gbmFtZSA/IHN0cmxlbihuYW1lKSA6IDA7CisJaWYgKCFkbmFtZSkKKwkJZ290byB1cGRhdGVfY29udGV4dDsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbnRleHQtPm5hbWVfY291bnQ7IGlkeCsrKQorCQlpZiAoY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gPT0gcGlubykgeworCQkJY29uc3QgY2hhciAqbmFtZSA9IGNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZTsKIAotCQkJCWlmIChubGVuIDwgZGxlbikKLQkJCQkJY29udGludWU7Ci0JCQkJCi0JCQkJLyogZGlzcmVnYXJkIHRyYWlsaW5nIHNsYXNoZXMgKi8KLQkJCQluID0gbmFtZSArIG5sZW4gLSAxOwotCQkJCXdoaWxlICgoKm4gPT0gJy8nKSAmJiAobiA+IG5hbWUpKQotCQkJCQluLS07CisJCQlpZiAoIW5hbWUpCisJCQkJY29udGludWU7CiAKLQkJCQkvKiBmaW5kIGxhc3QgcGF0aCBjb21wb25lbnQgKi8KLQkJCQluID0gbiAtIGRsZW4gKyAxOwotCQkJCWlmIChuIDwgbmFtZSkKLQkJCQkJY29udGludWU7Ci0JCQkJZWxzZSBpZiAobiA+IG5hbWUpIHsKLQkJCQkJaWYgKCotLW4gIT0gJy8nKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWVsc2UKLQkJCQkJCW4rKzsKLQkJCQl9Ci0KLQkJCQlpZiAoc3RybmNtcChuLCBkbmFtZSwgZGxlbikgPT0gMCkKLQkJCQkJZ290byB1cGRhdGVfY29udGV4dDsKKwkJCWlmIChhdWRpdF9jb21wYXJlX2RuYW1lX3BhdGgoZG5hbWUsIG5hbWUsICZkaXJsZW4pID09IDApIHsKKwkJCQljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWVfbGVuID0gZGlybGVuOworCQkJCWZvdW5kX25hbWUgPSBuYW1lOworCQkJCWJyZWFrOwogCQkJfQorCQl9CiAKLQkvKiBjYXRjaC1hbGwgaW4gY2FzZSBtYXRjaCBub3QgZm91bmQgKi8KK3VwZGF0ZV9jb250ZXh0OgogCWlkeCA9IGNvbnRleHQtPm5hbWVfY291bnQrKzsKLQljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWUgID0gTlVMTDsKLQljb250ZXh0LT5uYW1lc1tpZHhdLnBpbm8gID0gcGlubzsKICNpZiBBVURJVF9ERUJVRwogCWNvbnRleHQtPmlub19jb3VudCsrOwogI2VuZGlmCisJLyogUmUtdXNlIHRoZSBuYW1lIGJlbG9uZ2luZyB0byB0aGUgc2xvdCBmb3IgYSBtYXRjaGluZyBwYXJlbnQgZGlyZWN0b3J5LgorCSAqIEFsbCBuYW1lcyBmb3IgdGhpcyBjb250ZXh0IGFyZSByZWxpbnF1aXNoZWQgaW4gYXVkaXRfZnJlZV9uYW1lcygpICovCisJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lID0gZm91bmRfbmFtZTsKKwljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWVfbGVuID0gQVVESVRfTkFNRV9GVUxMOworCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZV9wdXQgPSAwOwkvKiBkb24ndCBjYWxsIF9fcHV0bmFtZSgpICovCiAKLXVwZGF0ZV9jb250ZXh0OgogCWlmIChpbm9kZSkgewogCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gaW5vZGUtPmlfaW5vOwogCQljb250ZXh0LT5uYW1lc1tpZHhdLmRldgkgID0gaW5vZGUtPmlfc2ItPnNfZGV2OwpAQCAtMTEwOSw3ICsxMjU2LDggQEAKIAkJY29udGV4dC0+bmFtZXNbaWR4XS5naWQgICA9IGlub2RlLT5pX2dpZDsKIAkJY29udGV4dC0+bmFtZXNbaWR4XS5yZGV2ICA9IGlub2RlLT5pX3JkZXY7CiAJCWF1ZGl0X2lub2RlX2NvbnRleHQoaWR4LCBpbm9kZSk7Ci0JfQorCX0gZWxzZQorCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gKHVuc2lnbmVkIGxvbmcpLTE7CiB9CiAKIC8qKgpAQCAtMTE0MiwxOCArMTI5MCwyMyBAQAogICovCiBpbnQgYXVkaXRfc2V0X2xvZ2ludWlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdWlkX3QgbG9naW51aWQpCiB7Ci0JaWYgKHRhc2stPmF1ZGl0X2NvbnRleHQpIHsKLQkJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSB0YXNrLT5hdWRpdF9jb250ZXh0OwogCi0JCWFiID0gYXVkaXRfbG9nX3N0YXJ0KE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0xPR0lOKTsKLQkJaWYgKGFiKSB7Ci0JCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibG9naW4gcGlkPSVkIHVpZD0ldSAiCi0JCQkJIm9sZCBhdWlkPSV1IG5ldyBhdWlkPSV1IiwKLQkJCQl0YXNrLT5waWQsIHRhc2stPnVpZCwgCi0JCQkJdGFzay0+YXVkaXRfY29udGV4dC0+bG9naW51aWQsIGxvZ2ludWlkKTsKLQkJCWF1ZGl0X2xvZ19lbmQoYWIpOworCWlmIChjb250ZXh0KSB7CisJCS8qIE9ubHkgbG9nIGlmIGF1ZGl0IGlzIGVuYWJsZWQgKi8KKwkJaWYgKGNvbnRleHQtPmluX3N5c2NhbGwpIHsKKwkJCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOworCisJCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9MT0dJTik7CisJCQlpZiAoYWIpIHsKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibG9naW4gcGlkPSVkIHVpZD0ldSAiCisJCQkJCSJvbGQgYXVpZD0ldSBuZXcgYXVpZD0ldSIsCisJCQkJCXRhc2stPnBpZCwgdGFzay0+dWlkLAorCQkJCQljb250ZXh0LT5sb2dpbnVpZCwgbG9naW51aWQpOworCQkJCWF1ZGl0X2xvZ19lbmQoYWIpOworCQkJfQogCQl9Ci0JCXRhc2stPmF1ZGl0X2NvbnRleHQtPmxvZ2ludWlkID0gbG9naW51aWQ7CisJCWNvbnRleHQtPmxvZ2ludWlkID0gbG9naW51aWQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTE3MCwxOSArMTMyMywyMjAgQEAKIH0KIAogLyoqCisgKiBfX2F1ZGl0X21xX29wZW4gLSByZWNvcmQgYXVkaXQgZGF0YSBmb3IgYSBQT1NJWCBNUSBvcGVuCisgKiBAb2ZsYWc6IG9wZW4gZmxhZworICogQG1vZGU6IG1vZGUgYml0cworICogQHVfYXR0cjogcXVldWUgYXR0cmlidXRlcworICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBOVUxMIGNvbnRleHQgb3IgPCAwIG9uIGVycm9yLgorICovCitpbnQgX19hdWRpdF9tcV9vcGVuKGludCBvZmxhZywgbW9kZV90IG1vZGUsIHN0cnVjdCBtcV9hdHRyIF9fdXNlciAqdV9hdHRyKQoreworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9vcGVuICpheDsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSghY29udGV4dCkpCisJCXJldHVybiAwOworCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1X2F0dHIgIT0gTlVMTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmF4LT5hdHRyLCB1X2F0dHIsIHNpemVvZihheC0+YXR0cikpKSB7CisJCQlrZnJlZShheCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0gZWxzZQorCQltZW1zZXQoJmF4LT5hdHRyLCAwLCBzaXplb2YoYXgtPmF0dHIpKTsKKworCWF4LT5vZmxhZyA9IG9mbGFnOworCWF4LT5tb2RlID0gbW9kZTsKKworCWF4LT5kLnR5cGUgPSBBVURJVF9NUV9PUEVOOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX2F1ZGl0X21xX3RpbWVkc2VuZCAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBhIFBPU0lYIE1RIHRpbWVkIHNlbmQKKyAqIEBtcWRlczogTVEgZGVzY3JpcHRvcgorICogQG1zZ19sZW46IE1lc3NhZ2UgbGVuZ3RoCisgKiBAbXNnX3ByaW86IE1lc3NhZ2UgcHJpb3JpdHkKKyAqIEBhYnNfdGltZW91dDogTWVzc2FnZSB0aW1lb3V0IGluIGFic29sdXRlIHRpbWUKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworaW50IF9fYXVkaXRfbXFfdGltZWRzZW5kKG1xZF90IG1xZGVzLCBzaXplX3QgbXNnX2xlbiwgdW5zaWduZWQgaW50IG1zZ19wcmlvLAorCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdV9hYnNfdGltZW91dCkKK3sKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfc2VuZHJlY3YgKmF4OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKworCWlmICghYXVkaXRfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGlrZWx5KCFjb250ZXh0KSkKKwkJcmV0dXJuIDA7CisKKwlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCksIEdGUF9BVE9NSUMpOworCWlmICghYXgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVfYWJzX3RpbWVvdXQgIT0gTlVMTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmF4LT5hYnNfdGltZW91dCwgdV9hYnNfdGltZW91dCwgc2l6ZW9mKGF4LT5hYnNfdGltZW91dCkpKSB7CisJCQlrZnJlZShheCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0gZWxzZQorCQltZW1zZXQoJmF4LT5hYnNfdGltZW91dCwgMCwgc2l6ZW9mKGF4LT5hYnNfdGltZW91dCkpOworCisJYXgtPm1xZGVzID0gbXFkZXM7CisJYXgtPm1zZ19sZW4gPSBtc2dfbGVuOworCWF4LT5tc2dfcHJpbyA9IG1zZ19wcmlvOworCisJYXgtPmQudHlwZSA9IEFVRElUX01RX1NFTkRSRUNWOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX2F1ZGl0X21xX3RpbWVkcmVjZWl2ZSAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBhIFBPU0lYIE1RIHRpbWVkIHJlY2VpdmUKKyAqIEBtcWRlczogTVEgZGVzY3JpcHRvcgorICogQG1zZ19sZW46IE1lc3NhZ2UgbGVuZ3RoCisgKiBAbXNnX3ByaW86IE1lc3NhZ2UgcHJpb3JpdHkKKyAqIEBhYnNfdGltZW91dDogTWVzc2FnZSB0aW1lb3V0IGluIGFic29sdXRlIHRpbWUKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworaW50IF9fYXVkaXRfbXFfdGltZWRyZWNlaXZlKG1xZF90IG1xZGVzLCBzaXplX3QgbXNnX2xlbiwKKwkJCQl1bnNpZ25lZCBpbnQgX191c2VyICp1X21zZ19wcmlvLAorCQkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpCit7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX3NlbmRyZWN2ICpheDsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSghY29udGV4dCkpCisJCXJldHVybiAwOworCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1X21zZ19wcmlvICE9IE5VTEwpIHsKKwkJaWYgKGdldF91c2VyKGF4LT5tc2dfcHJpbywgdV9tc2dfcHJpbykpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCWF4LT5tc2dfcHJpbyA9IDA7CisKKwlpZiAodV9hYnNfdGltZW91dCAhPSBOVUxMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXgtPmFic190aW1lb3V0LCB1X2Fic190aW1lb3V0LCBzaXplb2YoYXgtPmFic190aW1lb3V0KSkpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCW1lbXNldCgmYXgtPmFic190aW1lb3V0LCAwLCBzaXplb2YoYXgtPmFic190aW1lb3V0KSk7CisKKwlheC0+bXFkZXMgPSBtcWRlczsKKwlheC0+bXNnX2xlbiA9IG1zZ19sZW47CisKKwlheC0+ZC50eXBlID0gQVVESVRfTVFfU0VORFJFQ1Y7CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOworfQorCisvKioKKyAqIF9fYXVkaXRfbXFfbm90aWZ5IC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgbm90aWZ5CisgKiBAbXFkZXM6IE1RIGRlc2NyaXB0b3IKKyAqIEB1X25vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uIGV2ZW50CisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCisgKi8KKworaW50IF9fYXVkaXRfbXFfbm90aWZ5KG1xZF90IG1xZGVzLCBjb25zdCBzdHJ1Y3Qgc2lnZXZlbnQgX191c2VyICp1X25vdGlmaWNhdGlvbikKK3sKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfbm90aWZ5ICpheDsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSghY29udGV4dCkpCisJCXJldHVybiAwOworCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh1X25vdGlmaWNhdGlvbiAhPSBOVUxMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXgtPm5vdGlmaWNhdGlvbiwgdV9ub3RpZmljYXRpb24sIHNpemVvZihheC0+bm90aWZpY2F0aW9uKSkpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCW1lbXNldCgmYXgtPm5vdGlmaWNhdGlvbiwgMCwgc2l6ZW9mKGF4LT5ub3RpZmljYXRpb24pKTsKKworCWF4LT5tcWRlcyA9IG1xZGVzOworCisJYXgtPmQudHlwZSA9IEFVRElUX01RX05PVElGWTsKKwlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OworCWNvbnRleHQtPmF1eCA9ICh2b2lkICopYXg7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX19hdWRpdF9tcV9nZXRzZXRhdHRyIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUKKyAqIEBtcWRlczogTVEgZGVzY3JpcHRvcgorICogQG1xc3RhdDogTVEgZmxhZ3MKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworaW50IF9fYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRfdCBtcWRlcywgc3RydWN0IG1xX2F0dHIgKm1xc3RhdCkKK3sKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfZ2V0c2V0YXR0ciAqYXg7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OworCisJaWYgKCFhdWRpdF9lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChsaWtlbHkoIWNvbnRleHQpKQorCQlyZXR1cm4gMDsKKworCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFheCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlheC0+bXFkZXMgPSBtcWRlczsKKwlheC0+bXFzdGF0ID0gKm1xc3RhdDsKKworCWF4LT5kLnR5cGUgPSBBVURJVF9NUV9HRVRTRVRBVFRSOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBhdWRpdF9pcGNfb2JqIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGlwYyBvYmplY3QKICAqIEBpcGNwOiBpcGMgcGVybWlzc2lvbnMKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KICAqLwotaW50IGF1ZGl0X2lwY19vYmooc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApCitpbnQgX19hdWRpdF9pcGNfb2JqKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQogewogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKIAotCWlmIChsaWtlbHkoIWNvbnRleHQpKQotCQlyZXR1cm4gMDsKLQogCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFheCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjA3LDE0ICsxNTYxLDExIEBACiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCiAgKi8KLWludCBhdWRpdF9pcGNfc2V0X3Blcm0odW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSwgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApCitpbnQgX19hdWRpdF9pcGNfc2V0X3Blcm0odW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfaXBjY3RsICpheDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CiAKLQlpZiAobGlrZWx5KCFjb250ZXh0KSkKLQkJcmV0dXJuIDA7Ci0KIAlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCksIEdGUF9BVE9NSUMpOwogCWlmICghYXgpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTIyMyw3ICsxNTc0LDYgQEAKIAlheC0+dWlkID0gdWlkOwogCWF4LT5naWQgPSBnaWQ7CiAJYXgtPm1vZGUgPSBtb2RlOwotCXNlbGludXhfZ2V0X2lwY19zaWQoaXBjcCwgJmF4LT5vc2lkKTsKIAogCWF4LT5kLnR5cGUgPSBBVURJVF9JUENfU0VUX1BFUk07CiAJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKQEAgLTEyMzEsNiArMTU4MSwzOSBAQAogCXJldHVybiAwOwogfQogCitpbnQgYXVkaXRfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9leGVjdmUgKmF4OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIHAsIG5leHQ7CisJdm9pZCAqdG87CisKKwlpZiAobGlrZWx5KCFhdWRpdF9lbmFibGVkIHx8ICFjb250ZXh0KSkKKwkJcmV0dXJuIDA7CisKKwlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCkgKyBQQUdFX1NJWkUgKiBNQVhfQVJHX1BBR0VTIC0gYnBybS0+cCwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWF4LT5hcmdjID0gYnBybS0+YXJnYzsKKwlheC0+ZW52YyA9IGJwcm0tPmVudmM7CisJZm9yIChwID0gYnBybS0+cCwgdG8gPSBheC0+bWVtOyBwIDwgTUFYX0FSR19QQUdFUypQQUdFX1NJWkU7IHAgPSBuZXh0KSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnBybS0+cGFnZVtwIC8gUEFHRV9TSVpFXTsKKwkJdm9pZCAqa2FkZHIgPSBrbWFwKHBhZ2UpOworCQluZXh0ID0gKHAgKyBQQUdFX1NJWkUpICYgfihQQUdFX1NJWkUgLSAxKTsKKwkJbWVtY3B5KHRvLCBrYWRkciArIChwICYgKFBBR0VfU0laRSAtIDEpKSwgbmV4dCAtIHApOworCQl0byArPSBuZXh0IC0gcDsKKwkJa3VubWFwKHBhZ2UpOworCX0KKworCWF4LT5kLnR5cGUgPSBBVURJVF9FWEVDVkU7CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOworfQorCisKIC8qKgogICogYXVkaXRfc29ja2V0Y2FsbCAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBzeXNfc29ja2V0Y2FsbAogICogQG5hcmdzOiBudW1iZXIgb2YgYXJncwpAQCAtMTMyNSwxOSArMTcwOCwyMCBAQAogICogSWYgdGhlIGF1ZGl0IHN1YnN5c3RlbSBpcyBiZWluZyB0ZXJtaW5hdGVkLCByZWNvcmQgdGhlIHRhc2sgKHBpZCkKICAqIGFuZCB1aWQgdGhhdCBpcyBkb2luZyB0aGF0LgogICovCi12b2lkIGF1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3ZvaWQgX19hdWRpdF9zaWduYWxfaW5mbyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7CiAJZXh0ZXJuIHBpZF90IGF1ZGl0X3NpZ19waWQ7CiAJZXh0ZXJuIHVpZF90IGF1ZGl0X3NpZ191aWQ7CisJZXh0ZXJuIHUzMiBhdWRpdF9zaWdfc2lkOwogCi0JaWYgKHVubGlrZWx5KGF1ZGl0X3BpZCAmJiB0LT50Z2lkID09IGF1ZGl0X3BpZCkpIHsKLQkJaWYgKHNpZyA9PSBTSUdURVJNIHx8IHNpZyA9PSBTSUdIVVApIHsKLQkJCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHggPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwotCQkJYXVkaXRfc2lnX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQkJCWlmIChjdHgpCi0JCQkJYXVkaXRfc2lnX3VpZCA9IGN0eC0+bG9naW51aWQ7Ci0JCQllbHNlCi0JCQkJYXVkaXRfc2lnX3VpZCA9IGN1cnJlbnQtPnVpZDsKLQkJfQorCWlmIChzaWcgPT0gU0lHVEVSTSB8fCBzaWcgPT0gU0lHSFVQIHx8IHNpZyA9PSBTSUdVU1IxKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwkJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCA9IHRzay0+YXVkaXRfY29udGV4dDsKKwkJYXVkaXRfc2lnX3BpZCA9IHRzay0+cGlkOworCQlpZiAoY3R4KQorCQkJYXVkaXRfc2lnX3VpZCA9IGN0eC0+bG9naW51aWQ7CisJCWVsc2UKKwkJCWF1ZGl0X3NpZ191aWQgPSB0c2stPnVpZDsKKwkJc2VsaW51eF9nZXRfdGFza19zaWQodHNrLCAmYXVkaXRfc2lnX3NpZCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggZTk1YjkzMi4uZTA2ZDBjMSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC04ODEsMTQgKzg4MSw2IEBACiAKIAl0c2stPmZsYWdzIHw9IFBGX0VYSVRJTkc7CiAKLQkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCB0cnkgdG8gcHJvY2VzcyBhbnkgdGltZXIgZmlyaW5ncwotCSAqIHdoaWxlIHdlIGFyZSBhbHJlYWR5IGV4aXRpbmcuCi0JICovCi0gCXRzay0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotIAl0c2stPml0X3Byb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQl0c2stPml0X3NjaGVkX2V4cGlyZXMgPSAwOwotCiAJaWYgKHVubGlrZWx5KGluX2F0b21pYygpKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAibm90ZTogJXNbJWRdIGV4aXRlZCB3aXRoIHByZWVtcHRfY291bnQgJWRcbiIsCiAJCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLApkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggYjdmMDM4OC4uMTgzMjQzMCAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlpZiAoYmFzZS0+Zmlyc3QgPT0gJnRpbWVyLT5ub2RlKQogCQliYXNlLT5maXJzdCA9IHJiX25leHQoJnRpbWVyLT5ub2RlKTsKIAlyYl9lcmFzZSgmdGltZXItPm5vZGUsICZiYXNlLT5hY3RpdmUpOwotCXRpbWVyLT5ub2RlLnJiX3BhcmVudCA9IEhSVElNRVJfSU5BQ1RJVkU7CisJcmJfc2V0X3BhcmVudCgmdGltZXItPm5vZGUsICZ0aW1lci0+bm9kZSk7CiB9CiAKIC8qCkBAIC00NTYsNiArNDU2LDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX3N0YXJ0KTsKIAogLyoqCiAgKiBocnRpbWVyX3RyeV90b19jYW5jZWwgLSB0cnkgdG8gZGVhY3RpdmF0ZSBhIHRpbWVyCkBAIC00ODQsNiArNDg1LDcgQEAKIAlyZXR1cm4gcmV0OwogCiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX3RyeV90b19jYW5jZWwpOwogCiAvKioKICAqIGhydGltZXJfY2FuY2VsIC0gY2FuY2VsIGEgdGltZXIgYW5kIHdhaXQgZm9yIHRoZSBoYW5kbGVyIHRvIGZpbmlzaC4KQEAgLTUwNCw2ICs1MDYsNyBAQAogCQljcHVfcmVsYXgoKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2NhbmNlbCk7CiAKIC8qKgogICogaHJ0aW1lcl9nZXRfcmVtYWluaW5nIC0gZ2V0IHJlbWFpbmluZyB0aW1lIGZvciB0aGUgdGltZXIKQEAgLTUyMiw2ICs1MjUsNyBAQAogCiAJcmV0dXJuIHJlbTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfZ2V0X3JlbWFpbmluZyk7CiAKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgogLyoqCkBAIC01NzgsOCArNTgyLDkgQEAKIAkJY2xvY2tfaWQgPSBDTE9DS19NT05PVE9OSUM7CiAKIAl0aW1lci0+YmFzZSA9ICZiYXNlc1tjbG9ja19pZF07Ci0JdGltZXItPm5vZGUucmJfcGFyZW50ID0gSFJUSU1FUl9JTkFDVElWRTsKKwlyYl9zZXRfcGFyZW50KCZ0aW1lci0+bm9kZSwgJnRpbWVyLT5ub2RlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfaW5pdCk7CiAKIC8qKgogICogaHJ0aW1lcl9nZXRfcmVzIC0gZ2V0IHRoZSB0aW1lciByZXNvbHV0aW9uIGZvciBhIGNsb2NrCkBAIC01OTksNiArNjA0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9nZXRfcmVzKTsKIAogLyoKICAqIEV4cGlyZSB0aGUgcGVyIGJhc2UgaHJ0aW1lci1xdWV1ZToKZGlmZiAtLWdpdCBhL2tlcm5lbC9pbnRlcm1vZHVsZS5jIGIva2VybmVsL2ludGVybW9kdWxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YjFlNWIuLjAwMDAwMDAKLS0tIGEva2VybmVsL2ludGVybW9kdWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyogRGVwcmVjYXRlZCwgZG8gbm90IHVzZS4gIE1vdmVkIGZyb20gbW9kdWxlLmMgdG8gaGVyZS4gLS1SUiAqLwotCi0vKiBXcml0dGVuIGJ5IEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IE9jdCAyMDAwICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotLyogaW50ZXJfbW9kdWxlIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGF2YWlsYWJsZSwgZXZlbiB3aGVuIHRoZSBrZXJuZWwgaXMKLSAqIGNvbXBpbGVkIHdpdGhvdXQgbW9kdWxlcy4gIENvbnN1bWVycyBvZiBpbnRlcl9tb2R1bGVfeHh4IHJvdXRpbmVzCi0gKiB3aWxsIGFsd2F5cyB3b3JrLCBldmVuIHdoZW4gYm90aCBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsLCB0aGlzCi0gKiBhcHByb2FjaCByZW1vdmVzIGxvdHMgb2YgI2lmZGVmcyBpbiBtYWlubGluZSBjb2RlLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGltZV9saXN0ID0gTElTVF9IRUFEX0lOSVQoaW1lX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhpbWVfbG9jayk7Ci1zdGF0aWMgaW50IGttYWxsb2NfZmFpbGVkOwotCi1zdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY29uc3QgY2hhciAqaW1fbmFtZTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQljb25zdCB2b2lkICp1c2VyZGF0YTsKLX07Ci0KLS8qKgotICogaW50ZXJfbW9kdWxlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBuZXcgc2V0IG9mIGludGVyIG1vZHVsZSBkYXRhLgotICogQGltX25hbWU6IGFuIGFyYml0cmFyeSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCi0gKiBAb3duZXI6IG1vZHVsZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoZSBkYXRhLCBhbHdheXMgdXNlIFRISVNfTU9EVUxFCi0gKiBAdXNlcmRhdGE6IHBvaW50ZXIgdG8gYXJiaXRyYXJ5IHVzZXJkYXRhIHRvIGJlIHJlZ2lzdGVyZWQKLSAqCi0gKiBEZXNjcmlwdGlvbjogQ2hlY2sgdGhhdCB0aGUgaW1fbmFtZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLAotICogY29tcGxhaW4gaWYgaXQgaGFzLiAgRm9yIG5ldyBkYXRhLCBhZGQgaXQgdG8gdGhlIGludGVyX21vZHVsZV9lbnRyeQotICogbGlzdC4KLSAqLwotdm9pZCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqaW1fbmFtZSwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IHZvaWQgKnVzZXJkYXRhKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQlzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWUsICppbWVfbmV3OwotCi0JaWYgKCEoaW1lX25ldyA9IGt6YWxsb2Moc2l6ZW9mKCppbWUpLCBHRlBfS0VSTkVMKSkpIHsKLQkJLyogT3ZlcmxvYWRlZCBrZXJuZWwsIG5vdCBmYXRhbCAqLwotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJBaWVlLCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXI6IGNhbm5vdCBrbWFsbG9jIGVudHJ5IGZvciAnJXMnXG4iLAotCQkJaW1fbmFtZSk7Ci0JCWttYWxsb2NfZmFpbGVkID0gMTsKLQkJcmV0dXJuOwotCX0KLQlpbWVfbmV3LT5pbV9uYW1lID0gaW1fbmFtZTsKLQlpbWVfbmV3LT5vd25lciA9IG93bmVyOwotCWltZV9uZXctPnVzZXJkYXRhID0gdXNlcmRhdGE7Ci0KLQlzcGluX2xvY2soJmltZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7Ci0JCWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKLQkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25hbWUpID09IDApIHsKLQkJCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Ci0JCQlrZnJlZShpbWVfbmV3KTsKLQkJCS8qIFByb2dyYW0gbG9naWMgZXJyb3IsIGZhdGFsICovCi0JCQlwcmludGsoS0VSTl9FUlIgImludGVyX21vZHVsZV9yZWdpc3RlcjogZHVwbGljYXRlIGltX25hbWUgJyVzJyIsIGltX25hbWUpOwotCQkJQlVHKCk7Ci0JCX0KLQl9Ci0JbGlzdF9hZGQoJihpbWVfbmV3LT5saXN0KSwgJmltZV9saXN0KTsKLQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotfQotCi0vKioKLSAqIGludGVyX21vZHVsZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIHNldCBvZiBpbnRlciBtb2R1bGUgZGF0YS4KLSAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBtdXN0IGJlIHVuaXF1ZQotICoKLSAqIERlc2NyaXB0aW9uOiBDaGVjayB0aGF0IHRoZSBpbV9uYW1lIGhhcyBiZWVuIHJlZ2lzdGVyZWQsIGNvbXBsYWluIGlmCi0gKiBpdCBoYXMgbm90LiAgRm9yIGV4aXN0aW5nIGRhdGEsIHJlbW92ZSBpdCBmcm9tIHRoZQotICogaW50ZXJfbW9kdWxlX2VudHJ5IGxpc3QuCi0gKi8KLXZvaWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqaW1fbmFtZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwotCi0Jc3Bpbl9sb2NrKCZpbWVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewotCQlpbWUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSwgbGlzdCk7Ci0JCWlmIChzdHJjbXAoaW1lLT5pbV9uYW1lLCBpbV9uYW1lKSA9PSAwKSB7Ci0JCQlsaXN0X2RlbCgmKGltZS0+bGlzdCkpOwotCQkJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQkJCWtmcmVlKGltZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQlpZiAoa21hbGxvY19mYWlsZWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXI6IG5vIGVudHJ5IGZvciAnJXMnLCAiCi0JCQkicHJvYmFibHkgY2F1c2VkIGJ5IHByZXZpb3VzIGttYWxsb2MgZmFpbHVyZVxuIiwKLQkJCWltX25hbWUpOwotCQlyZXR1cm47Ci0JfQotCWVsc2UgewotCQkvKiBQcm9ncmFtIGxvZ2ljIGVycm9yLCBmYXRhbCAqLwotCQlwcmludGsoS0VSTl9FUlIgImludGVyX21vZHVsZV91bnJlZ2lzdGVyOiBubyBlbnRyeSBmb3IgJyVzJyIsIGltX25hbWUpOwotCQlCVUcoKTsKLQl9Ci19Ci0KLS8qKgotICogaW50ZXJfbW9kdWxlX2dldCAtIHJldHVybiBhcmJpdHJhcnkgdXNlcmRhdGEgZnJvbSBhbm90aGVyIG1vZHVsZS4KLSAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBtdXN0IGJlIHVuaXF1ZQotICoKLSAqIERlc2NyaXB0aW9uOiBJZiB0aGUgaW1fbmFtZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCwgcmV0dXJuIE5VTEwuCi0gKiBUcnkgdG8gaW5jcmVtZW50IHRoZSB1c2UgY291bnQgb24gdGhlIG93bmluZyBtb2R1bGUsIGlmIHRoYXQgZmFpbHMKLSAqIHRoZW4gcmV0dXJuIE5VTEwuICBPdGhlcndpc2UgcmV0dXJuIHRoZSB1c2VyZGF0YS4KLSAqLwotc3RhdGljIGNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXQoY29uc3QgY2hhciAqaW1fbmFtZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwotCWNvbnN0IHZvaWQgKnJlc3VsdCA9IE5VTEw7Ci0KLQlzcGluX2xvY2soJmltZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7Ci0JCWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKLQkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25hbWUpID09IDApIHsKLQkJCWlmICh0cnlfbW9kdWxlX2dldChpbWUtPm93bmVyKSkKLQkJCQlyZXN1bHQgPSBpbWUtPnVzZXJkYXRhOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQlyZXR1cm4ocmVzdWx0KTsKLX0KLQotLyoqCi0gKiBpbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3QgLSBpbSBnZXQgd2l0aCBhdXRvbWF0aWMgcmVxdWVzdF9tb2R1bGUuCi0gKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKLSAqIEBtb2RuYW1lOiBtb2R1bGUgdGhhdCBpcyBleHBlY3RlZCB0byByZWdpc3RlciBpbV9uYW1lCi0gKgotICogRGVzY3JpcHRpb246IElmIGludGVyX21vZHVsZV9nZXQgZmFpbHMsIGRvIHJlcXVlc3RfbW9kdWxlIHRoZW4gcmV0cnkuCi0gKi8KLWNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXRfcmVxdWVzdChjb25zdCBjaGFyICppbV9uYW1lLCBjb25zdCBjaGFyICptb2RuYW1lKQotewotCWNvbnN0IHZvaWQgKnJlc3VsdCA9IGludGVyX21vZHVsZV9nZXQoaW1fbmFtZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJcmVxdWVzdF9tb2R1bGUoIiVzIiwgbW9kbmFtZSk7Ci0JCXJlc3VsdCA9IGludGVyX21vZHVsZV9nZXQoaW1fbmFtZSk7Ci0JfQotCXJldHVybihyZXN1bHQpOwotfQotCi0vKioKLSAqIGludGVyX21vZHVsZV9wdXQgLSByZWxlYXNlIHVzZSBvZiBkYXRhIGZyb20gYW5vdGhlciBtb2R1bGUuCi0gKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKLSAqCi0gKiBEZXNjcmlwdGlvbjogSWYgdGhlIGltX25hbWUgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQsIGNvbXBsYWluLAotICogb3RoZXJ3aXNlIGRlY3JlbWVudCB0aGUgdXNlIGNvdW50IG9uIHRoZSBvd25pbmcgbW9kdWxlLgotICovCi12b2lkIGludGVyX21vZHVsZV9wdXQoY29uc3QgY2hhciAqaW1fbmFtZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwotCi0Jc3Bpbl9sb2NrKCZpbWVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewotCQlpbWUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSwgbGlzdCk7Ci0JCWlmIChzdHJjbXAoaW1lLT5pbV9uYW1lLCBpbV9uYW1lKSA9PSAwKSB7Ci0JCQlpZiAoaW1lLT5vd25lcikKLQkJCQltb2R1bGVfcHV0KGltZS0+b3duZXIpOwotCQkJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotCXByaW50ayhLRVJOX0VSUiAiaW50ZXJfbW9kdWxlX3B1dDogbm8gZW50cnkgZm9yICclcyciLCBpbV9uYW1lKTsKLQlCVUcoKTsKLX0KLQotRVhQT1JUX1NZTUJPTChpbnRlcl9tb2R1bGVfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChpbnRlcl9tb2R1bGVfdW5yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGludGVyX21vZHVsZV9nZXRfcmVxdWVzdCk7Ci1FWFBPUlRfU1lNQk9MKGludGVyX21vZHVsZV9wdXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IDUyMGY2YzUuLmQzOGQ5ZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtNTU1LDkgKzU1NSw2IEBACiAJc3RydWN0IGNwdV90aW1lcl9saXN0ICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChDUFVDTE9DS19QRVJUSFJFQUQodGltZXItPml0X2Nsb2NrKQkmJiAocC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkKLQkJcmV0dXJuOwotCiAJaGVhZCA9IChDUFVDTE9DS19QRVJUSFJFQUQodGltZXItPml0X2Nsb2NrKSA/CiAJCXAtPmNwdV90aW1lcnMgOiBwLT5zaWduYWwtPmNwdV90aW1lcnMpOwogCWhlYWQgKz0gQ1BVQ0xPQ0tfV0hJQ0godGltZXItPml0X2Nsb2NrKTsKQEAgLTExNzMsNiArMTE3MCw5IEBACiAJCX0KIAkJdCA9IHRzazsKIAkJZG8geworCQkJaWYgKHVubGlrZWx5KHQtPmZsYWdzICYgUEZfRVhJVElORykpCisJCQkJY29udGludWU7CisKIAkJCXRpY2tzID0gY3B1dGltZV9hZGQoY3B1dGltZV9hZGQodC0+dXRpbWUsIHQtPnN0aW1lKSwKIAkJCQkJICAgIHByb2ZfbGVmdCk7CiAJCQlpZiAoIWNwdXRpbWVfZXEocHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCkBAIC0xMTkzLDExICsxMTkzLDcgQEAKIAkJCQkJICAgICAgdC0+aXRfc2NoZWRfZXhwaXJlcyA+IHNjaGVkKSkgewogCQkJCXQtPml0X3NjaGVkX2V4cGlyZXMgPSBzY2hlZDsKIAkJCX0KLQotCQkJZG8gewotCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJCX0gd2hpbGUgKHVubGlrZWx5KHQtPmZsYWdzICYgUEZfRVhJVElORykpOwotCQl9IHdoaWxlICh0ICE9IHRzayk7CisJCX0gd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IHRzayk7CiAJfQogfQogCkBAIC0xMjg5LDMwICsxMjg1LDMwIEBACiAKICN1bmRlZglVTkVYUElSRUQKIAotCUJVR19PTih0c2stPmV4aXRfc3RhdGUpOwotCiAJLyoKIAkgKiBEb3VibGUtY2hlY2sgd2l0aCBsb2NrcyBoZWxkLgogCSAqLwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0Jc3Bpbl9sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCWlmIChsaWtlbHkodHNrLT5zaWduYWwgIT0gTlVMTCkpIHsKKwkJc3Bpbl9sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCi0JLyoKLQkgKiBIZXJlIHdlIHRha2Ugb2ZmIHRzay0+Y3B1X3RpbWVyc1tOXSBhbmQgdHNrLT5zaWduYWwtPmNwdV90aW1lcnNbTl0KLQkgKiBhbGwgdGhlIHRpbWVycyB0aGF0IGFyZSBmaXJpbmcsIGFuZCBwdXQgdGhlbSBvbiB0aGUgZmlyaW5nIGxpc3QuCi0JICovCi0JY2hlY2tfdGhyZWFkX3RpbWVycyh0c2ssICZmaXJpbmcpOwotCWNoZWNrX3Byb2Nlc3NfdGltZXJzKHRzaywgJmZpcmluZyk7CisJCS8qCisJCSAqIEhlcmUgd2UgdGFrZSBvZmYgdHNrLT5jcHVfdGltZXJzW05dIGFuZCB0c2stPnNpZ25hbC0+Y3B1X3RpbWVyc1tOXQorCQkgKiBhbGwgdGhlIHRpbWVycyB0aGF0IGFyZSBmaXJpbmcsIGFuZCBwdXQgdGhlbSBvbiB0aGUgZmlyaW5nIGxpc3QuCisJCSAqLworCQljaGVja190aHJlYWRfdGltZXJzKHRzaywgJmZpcmluZyk7CisJCWNoZWNrX3Byb2Nlc3NfdGltZXJzKHRzaywgJmZpcmluZyk7CiAKLQkvKgotCSAqIFdlIG11c3QgcmVsZWFzZSB0aGVzZSBsb2NrcyBiZWZvcmUgdGFraW5nIGFueSB0aW1lcidzIGxvY2suCi0JICogVGhlcmUgaXMgYSBwb3RlbnRpYWwgcmFjZSB3aXRoIHRpbWVyIGRlbGV0aW9uIGhlcmUsIGFzIHRoZQotCSAqIHNpZ2xvY2sgbm93IHByb3RlY3RzIG91ciBwcml2YXRlIGZpcmluZyBsaXN0LiAgV2UgaGF2ZSBzZXQKLQkgKiB0aGUgZmlyaW5nIGZsYWcgaW4gZWFjaCB0aW1lciwgc28gdGhhdCBhIGRlbGV0aW9uIGF0dGVtcHQKLQkgKiB0aGF0IGdldHMgdGhlIHRpbWVyIGxvY2sgYmVmb3JlIHdlIGRvIHdpbGwgZ2l2ZSBpdCB1cCBhbmQKLQkgKiBzcGluIHVudGlsIHdlJ3ZlIHRha2VuIGNhcmUgb2YgdGhhdCB0aW1lciBiZWxvdy4KLQkgKi8KLQlzcGluX3VubG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJLyoKKwkJICogV2UgbXVzdCByZWxlYXNlIHRoZXNlIGxvY2tzIGJlZm9yZSB0YWtpbmcgYW55IHRpbWVyJ3MgbG9jay4KKwkJICogVGhlcmUgaXMgYSBwb3RlbnRpYWwgcmFjZSB3aXRoIHRpbWVyIGRlbGV0aW9uIGhlcmUsIGFzIHRoZQorCQkgKiBzaWdsb2NrIG5vdyBwcm90ZWN0cyBvdXIgcHJpdmF0ZSBmaXJpbmcgbGlzdC4gIFdlIGhhdmUgc2V0CisJCSAqIHRoZSBmaXJpbmcgZmxhZyBpbiBlYWNoIHRpbWVyLCBzbyB0aGF0IGEgZGVsZXRpb24gYXR0ZW1wdAorCQkgKiB0aGF0IGdldHMgdGhlIHRpbWVyIGxvY2sgYmVmb3JlIHdlIGRvIHdpbGwgZ2l2ZSBpdCB1cCBhbmQKKwkJICogc3BpbiB1bnRpbCB3ZSd2ZSB0YWtlbiBjYXJlIG9mIHRoYXQgdGltZXIgYmVsb3cuCisJCSAqLworCQlzcGluX3VubG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGE2ZDllZjQuLjBhOTA3ZjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtODYsNiArODYsNyBAQAogCQkJZ290byBUaGF3OwogCX0KIAorCXN1c3BlbmRfY29uc29sZSgpOwogCWlmICgoZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX1NVU1BFTkQpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gc3VzcGVuZFxuIik7CiAJCWdvdG8gRmluaXNoOwpAQCAtMTMzLDYgKzEzNCw3IEBACiBzdGF0aWMgdm9pZCBzdXNwZW5kX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7CiAJZGV2aWNlX3Jlc3VtZSgpOworCXJlc3VtZV9jb25zb2xlKCk7CiAJdGhhd19wcm9jZXNzZXMoKTsKIAllbmFibGVfbm9uYm9vdF9jcHVzKCk7CiAJaWYgKHBtX29wcyAmJiBwbV9vcHMtPmZpbmlzaCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBjMDU2ZjMzLi4xOWE5NTU2IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC02Nyw2ICs2Nyw3IEBACiAgKiBkcml2ZXIgc3lzdGVtLgogICovCiBzdGF0aWMgREVDTEFSRV9NVVRFWChjb25zb2xlX3NlbSk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChzZWNvbmRhcnlfY29uc29sZV9zZW0pOwogc3RydWN0IGNvbnNvbGUgKmNvbnNvbGVfZHJpdmVyczsKIC8qCiAgKiBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgbWVzcyB0aGF0IGlzIHRoZSBWVCBjb2RlIGJ5CkBAIC03Niw3ICs3Nyw3IEBACiAgKiBwYXRoIGluIHRoZSBjb25zb2xlIGNvZGUgd2hlcmUgd2UgZW5kIHVwIGluIHBsYWNlcyBJIHdhbnQKICAqIGxvY2tlZCB3aXRob3V0IHRoZSBjb25zb2xlIHNlbXBhaG9yZSBoZWxkCiAgKi8KLXN0YXRpYyBpbnQgY29uc29sZV9sb2NrZWQ7CitzdGF0aWMgaW50IGNvbnNvbGVfbG9ja2VkLCBjb25zb2xlX3N1c3BlbmRlZDsKIAogLyoKICAqIGxvZ2J1Zl9sb2NrIHByb3RlY3RzIGxvZ19idWYsIGxvZ19zdGFydCwgbG9nX2VuZCwgY29uX3N0YXJ0IGFuZCBsb2dnZWRfY2hhcnMKQEAgLTY5OCw2ICs2OTksMjMgQEAKIH0KIAogLyoqCisgKiBzdXNwZW5kX2NvbnNvbGUgLSBzdXNwZW5kIHRoZSBjb25zb2xlIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgZGlzYWJsZXMgcHJpbnRrKCkgd2hpbGUgd2UgZ28gaW50byBzdXNwZW5kIHN0YXRlcworICovCit2b2lkIHN1c3BlbmRfY29uc29sZSh2b2lkKQoreworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3N1c3BlbmRlZCA9IDE7Cit9CisKK3ZvaWQgcmVzdW1lX2NvbnNvbGUodm9pZCkKK3sKKwljb25zb2xlX3N1c3BlbmRlZCA9IDA7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworfQorCisvKioKICAqIGFjcXVpcmVfY29uc29sZV9zZW0gLSBsb2NrIHRoZSBjb25zb2xlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KICAqCiAgKiBBY3F1aXJlcyBhIHNlbWFwaG9yZSB3aGljaCBndWFyYW50ZWVzIHRoYXQgdGhlIGNhbGxlciBoYXMKQEAgLTcwOCw2ICs3MjYsMTAgQEAKIHZvaWQgYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKQogewogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisJaWYgKGNvbnNvbGVfc3VzcGVuZGVkKSB7CisJCWRvd24oJnNlY29uZGFyeV9jb25zb2xlX3NlbSk7CisJCXJldHVybjsKKwl9CiAJZG93bigmY29uc29sZV9zZW0pOwogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDE7CkBAIC03NTAsNiArNzcyLDEwIEBACiAJdW5zaWduZWQgbG9uZyBfY29uX3N0YXJ0LCBfbG9nX2VuZDsKIAl1bnNpZ25lZCBsb25nIHdha2Vfa2xvZ2QgPSAwOwogCisJaWYgKGNvbnNvbGVfc3VzcGVuZGVkKSB7CisJCXVwKCZzZWNvbmRhcnlfY29uc29sZV9zZW0pOworCQlyZXR1cm47CisJfQogCWZvciAoIDsgOyApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CiAJCXdha2Vfa2xvZ2QgfD0gbG9nX3N0YXJ0IC0gbG9nX2VuZDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCBlNWY4YWVhLi4xYjNjOTIxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0yMywxMiArMjMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+CisjaW5jbHVkZSAiYXVkaXQuaCIJLyogYXVkaXRfc2lnbmFsX2luZm8oKSAqLwogCiAvKgogICogU0xBQiBjYWNoZXMgZm9yIHNpZ25hbCBiaXRzLgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGU4MjcyNmYuLjBkNjU2ZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwogZXh0ZXJuIGN0bF90YWJsZSBwdHlfdGFibGVbXTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19JTk9USUZZCisjaWZkZWYgQ09ORklHX0lOT1RJRllfVVNFUgogZXh0ZXJuIGN0bF90YWJsZSBpbm90aWZ5X3RhYmxlW107CiAjZW5kaWYKIApAQCAtMTAyOCw3ICsxMDI4LDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAogCX0sCi0jaWZkZWYgQ09ORklHX0lOT1RJRlkKKyNpZmRlZiBDT05GSUdfSU5PVElGWV9VU0VSCiAJewogCQkuY3RsX25hbWUJPSBGU19JTk9USUZZLAogCQkucHJvY25hbWUJPSAiaW5vdGlmeSIsCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCAyMTE2NjQyLi40YjFlYjc0IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQlhdG9taWNfc2V0KCZuZXctPnByb2Nlc3NlcywgMCk7CiAJCWF0b21pY19zZXQoJm5ldy0+ZmlsZXMsIDApOwogCQlhdG9taWNfc2V0KCZuZXctPnNpZ3BlbmRpbmcsIDApOwotI2lmZGVmIENPTkZJR19JTk9USUZZCisjaWZkZWYgQ09ORklHX0lOT1RJRllfVVNFUgogCQlhdG9taWNfc2V0KCZuZXctPmlub3RpZnlfd2F0Y2hlcywgMCk7CiAJCWF0b21pY19zZXQoJm5ldy0+aW5vdGlmeV9kZXZzLCAwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3JidHJlZS5jIGIvbGliL3JidHJlZS5jCmluZGV4IDE0Yjc5MWEuLjFlNTViYTEgMTAwNjQ0Ci0tLSBhL2xpYi9yYnRyZWUuYworKysgYi9saWIvcmJ0cmVlLmMKQEAgLTI2LDYwICsyNiw2NiBAQAogc3RhdGljIHZvaWQgX19yYl9yb3RhdGVfbGVmdChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7CiAJc3RydWN0IHJiX25vZGUgKnJpZ2h0ID0gbm9kZS0+cmJfcmlnaHQ7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKIAogCWlmICgobm9kZS0+cmJfcmlnaHQgPSByaWdodC0+cmJfbGVmdCkpCi0JCXJpZ2h0LT5yYl9sZWZ0LT5yYl9wYXJlbnQgPSBub2RlOworCQlyYl9zZXRfcGFyZW50KHJpZ2h0LT5yYl9sZWZ0LCBub2RlKTsKIAlyaWdodC0+cmJfbGVmdCA9IG5vZGU7CiAKLQlpZiAoKHJpZ2h0LT5yYl9wYXJlbnQgPSBub2RlLT5yYl9wYXJlbnQpKQorCXJiX3NldF9wYXJlbnQocmlnaHQsIHBhcmVudCk7CisKKwlpZiAocGFyZW50KQogCXsKLQkJaWYgKG5vZGUgPT0gbm9kZS0+cmJfcGFyZW50LT5yYl9sZWZ0KQotCQkJbm9kZS0+cmJfcGFyZW50LT5yYl9sZWZ0ID0gcmlnaHQ7CisJCWlmIChub2RlID09IHBhcmVudC0+cmJfbGVmdCkKKwkJCXBhcmVudC0+cmJfbGVmdCA9IHJpZ2h0OwogCQllbHNlCi0JCQlub2RlLT5yYl9wYXJlbnQtPnJiX3JpZ2h0ID0gcmlnaHQ7CisJCQlwYXJlbnQtPnJiX3JpZ2h0ID0gcmlnaHQ7CiAJfQogCWVsc2UKIAkJcm9vdC0+cmJfbm9kZSA9IHJpZ2h0OwotCW5vZGUtPnJiX3BhcmVudCA9IHJpZ2h0OworCXJiX3NldF9wYXJlbnQobm9kZSwgcmlnaHQpOwogfQogCiBzdGF0aWMgdm9pZCBfX3JiX3JvdGF0ZV9yaWdodChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7CiAJc3RydWN0IHJiX25vZGUgKmxlZnQgPSBub2RlLT5yYl9sZWZ0OworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CiAKIAlpZiAoKG5vZGUtPnJiX2xlZnQgPSBsZWZ0LT5yYl9yaWdodCkpCi0JCWxlZnQtPnJiX3JpZ2h0LT5yYl9wYXJlbnQgPSBub2RlOworCQlyYl9zZXRfcGFyZW50KGxlZnQtPnJiX3JpZ2h0LCBub2RlKTsKIAlsZWZ0LT5yYl9yaWdodCA9IG5vZGU7CiAKLQlpZiAoKGxlZnQtPnJiX3BhcmVudCA9IG5vZGUtPnJiX3BhcmVudCkpCisJcmJfc2V0X3BhcmVudChsZWZ0LCBwYXJlbnQpOworCisJaWYgKHBhcmVudCkKIAl7Ci0JCWlmIChub2RlID09IG5vZGUtPnJiX3BhcmVudC0+cmJfcmlnaHQpCi0JCQlub2RlLT5yYl9wYXJlbnQtPnJiX3JpZ2h0ID0gbGVmdDsKKwkJaWYgKG5vZGUgPT0gcGFyZW50LT5yYl9yaWdodCkKKwkJCXBhcmVudC0+cmJfcmlnaHQgPSBsZWZ0OwogCQllbHNlCi0JCQlub2RlLT5yYl9wYXJlbnQtPnJiX2xlZnQgPSBsZWZ0OworCQkJcGFyZW50LT5yYl9sZWZ0ID0gbGVmdDsKIAl9CiAJZWxzZQogCQlyb290LT5yYl9ub2RlID0gbGVmdDsKLQlub2RlLT5yYl9wYXJlbnQgPSBsZWZ0OworCXJiX3NldF9wYXJlbnQobm9kZSwgbGVmdCk7CiB9CiAKIHZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50LCAqZ3BhcmVudDsKIAotCXdoaWxlICgocGFyZW50ID0gbm9kZS0+cmJfcGFyZW50KSAmJiBwYXJlbnQtPnJiX2NvbG9yID09IFJCX1JFRCkKKwl3aGlsZSAoKHBhcmVudCA9IHJiX3BhcmVudChub2RlKSkgJiYgcmJfaXNfcmVkKHBhcmVudCkpCiAJewotCQlncGFyZW50ID0gcGFyZW50LT5yYl9wYXJlbnQ7CisJCWdwYXJlbnQgPSByYl9wYXJlbnQocGFyZW50KTsKIAogCQlpZiAocGFyZW50ID09IGdwYXJlbnQtPnJiX2xlZnQpCiAJCXsKIAkJCXsKIAkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqdW5jbGUgPSBncGFyZW50LT5yYl9yaWdodDsKLQkJCQlpZiAodW5jbGUgJiYgdW5jbGUtPnJiX2NvbG9yID09IFJCX1JFRCkKKwkJCQlpZiAodW5jbGUgJiYgcmJfaXNfcmVkKHVuY2xlKSkKIAkJCQl7Ci0JCQkJCXVuY2xlLT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJCWdwYXJlbnQtPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCQlyYl9zZXRfYmxhY2sodW5jbGUpOworCQkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKKwkJCQkJcmJfc2V0X3JlZChncGFyZW50KTsKIAkJCQkJbm9kZSA9IGdwYXJlbnQ7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KQEAgLTk0LDE3ICsxMDAsMTcgQEAKIAkJCQlub2RlID0gdG1wOwogCQkJfQogCi0JCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQlncGFyZW50LT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCXJiX3NldF9ibGFjayhwYXJlbnQpOworCQkJcmJfc2V0X3JlZChncGFyZW50KTsKIAkJCV9fcmJfcm90YXRlX3JpZ2h0KGdwYXJlbnQsIHJvb3QpOwogCQl9IGVsc2UgewogCQkJewogCQkJCXJlZ2lzdGVyIHN0cnVjdCByYl9ub2RlICp1bmNsZSA9IGdwYXJlbnQtPnJiX2xlZnQ7Ci0JCQkJaWYgKHVuY2xlICYmIHVuY2xlLT5yYl9jb2xvciA9PSBSQl9SRUQpCisJCQkJaWYgKHVuY2xlICYmIHJiX2lzX3JlZCh1bmNsZSkpCiAJCQkJewotCQkJCQl1bmNsZS0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCQkJcGFyZW50LT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCQlncGFyZW50LT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQkJcmJfc2V0X2JsYWNrKHVuY2xlKTsKKwkJCQkJcmJfc2V0X2JsYWNrKHBhcmVudCk7CisJCQkJCXJiX3NldF9yZWQoZ3BhcmVudCk7CiAJCQkJCW5vZGUgPSBncGFyZW50OwogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC0xMTksMTMgKzEyNSwxMyBAQAogCQkJCW5vZGUgPSB0bXA7CiAJCQl9CiAKLQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCWdwYXJlbnQtPnJiX2NvbG9yID0gUkJfUkVEOworCQkJcmJfc2V0X2JsYWNrKHBhcmVudCk7CisJCQlyYl9zZXRfcmVkKGdwYXJlbnQpOwogCQkJX19yYl9yb3RhdGVfbGVmdChncGFyZW50LCByb290KTsKIAkJfQogCX0KIAotCXJvb3QtPnJiX25vZGUtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJcmJfc2V0X2JsYWNrKHJvb3QtPnJiX25vZGUpOwogfQogRVhQT1JUX1NZTUJPTChyYl9pbnNlcnRfY29sb3IpOwogCkBAIC0xMzQsNDMgKzE0MCw0MCBAQAogewogCXN0cnVjdCByYl9ub2RlICpvdGhlcjsKIAotCXdoaWxlICgoIW5vZGUgfHwgbm9kZS0+cmJfY29sb3IgPT0gUkJfQkxBQ0spICYmIG5vZGUgIT0gcm9vdC0+cmJfbm9kZSkKKwl3aGlsZSAoKCFub2RlIHx8IHJiX2lzX2JsYWNrKG5vZGUpKSAmJiBub2RlICE9IHJvb3QtPnJiX25vZGUpCiAJewogCQlpZiAocGFyZW50LT5yYl9sZWZ0ID09IG5vZGUpCiAJCXsKIAkJCW90aGVyID0gcGFyZW50LT5yYl9yaWdodDsKLQkJCWlmIChvdGhlci0+cmJfY29sb3IgPT0gUkJfUkVEKQorCQkJaWYgKHJiX2lzX3JlZChvdGhlcikpCiAJCQl7Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJcGFyZW50LT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQlyYl9zZXRfYmxhY2sob3RoZXIpOworCQkJCXJiX3NldF9yZWQocGFyZW50KTsKIAkJCQlfX3JiX3JvdGF0ZV9sZWZ0KHBhcmVudCwgcm9vdCk7CiAJCQkJb3RoZXIgPSBwYXJlbnQtPnJiX3JpZ2h0OwogCQkJfQotCQkJaWYgKCghb3RoZXItPnJiX2xlZnQgfHwKLQkJCSAgICAgb3RoZXItPnJiX2xlZnQtPnJiX2NvbG9yID09IFJCX0JMQUNLKQotCQkJICAgICYmICghb3RoZXItPnJiX3JpZ2h0IHx8Ci0JCQkJb3RoZXItPnJiX3JpZ2h0LT5yYl9jb2xvciA9PSBSQl9CTEFDSykpCisJCQlpZiAoKCFvdGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpICYmCisJCQkgICAgKCFvdGhlci0+cmJfcmlnaHQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkpCiAJCQl7Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCXJiX3NldF9yZWQob3RoZXIpOwogCQkJCW5vZGUgPSBwYXJlbnQ7Ci0JCQkJcGFyZW50ID0gbm9kZS0+cmJfcGFyZW50OworCQkJCXBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlpZiAoIW90aGVyLT5yYl9yaWdodCB8fAotCQkJCSAgICBvdGhlci0+cmJfcmlnaHQtPnJiX2NvbG9yID09IFJCX0JMQUNLKQorCQkJCWlmICghb3RoZXItPnJiX3JpZ2h0IHx8IHJiX2lzX2JsYWNrKG90aGVyLT5yYl9yaWdodCkpCiAJCQkJewotCQkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqb19sZWZ0OworCQkJCQlzdHJ1Y3QgcmJfbm9kZSAqb19sZWZ0OwogCQkJCQlpZiAoKG9fbGVmdCA9IG90aGVyLT5yYl9sZWZ0KSkKLQkJCQkJCW9fbGVmdC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCQkJcmJfc2V0X2JsYWNrKG9fbGVmdCk7CisJCQkJCXJiX3NldF9yZWQob3RoZXIpOwogCQkJCQlfX3JiX3JvdGF0ZV9yaWdodChvdGhlciwgcm9vdCk7CiAJCQkJCW90aGVyID0gcGFyZW50LT5yYl9yaWdodDsKIAkJCQl9Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gcGFyZW50LT5yYl9jb2xvcjsKLQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJCQkJcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKKwkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKIAkJCQlpZiAob3RoZXItPnJiX3JpZ2h0KQotCQkJCQlvdGhlci0+cmJfcmlnaHQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfcmlnaHQpOwogCQkJCV9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsKIAkJCQlub2RlID0gcm9vdC0+cmJfbm9kZTsKIAkJCQlicmVhazsKQEAgLTE3OSwzOCArMTgyLDM1IEBACiAJCWVsc2UKIAkJewogCQkJb3RoZXIgPSBwYXJlbnQtPnJiX2xlZnQ7Ci0JCQlpZiAob3RoZXItPnJiX2NvbG9yID09IFJCX1JFRCkKKwkJCWlmIChyYl9pc19yZWQob3RoZXIpKQogCQkJewotCQkJCW90aGVyLT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9SRUQ7CisJCQkJcmJfc2V0X2JsYWNrKG90aGVyKTsKKwkJCQlyYl9zZXRfcmVkKHBhcmVudCk7CiAJCQkJX19yYl9yb3RhdGVfcmlnaHQocGFyZW50LCByb290KTsKIAkJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKIAkJCX0KLQkJCWlmICgoIW90aGVyLT5yYl9sZWZ0IHx8Ci0JCQkgICAgIG90aGVyLT5yYl9sZWZ0LT5yYl9jb2xvciA9PSBSQl9CTEFDSykKLQkJCSAgICAmJiAoIW90aGVyLT5yYl9yaWdodCB8fAotCQkJCW90aGVyLT5yYl9yaWdodC0+cmJfY29sb3IgPT0gUkJfQkxBQ0spKQorCQkJaWYgKCghb3RoZXItPnJiX2xlZnQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKSAmJgorCQkJICAgICghb3RoZXItPnJiX3JpZ2h0IHx8IHJiX2lzX2JsYWNrKG90aGVyLT5yYl9yaWdodCkpKQogCQkJewotCQkJCW90aGVyLT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQlyYl9zZXRfcmVkKG90aGVyKTsKIAkJCQlub2RlID0gcGFyZW50OwotCQkJCXBhcmVudCA9IG5vZGUtPnJiX3BhcmVudDsKKwkJCQlwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJaWYgKCFvdGhlci0+cmJfbGVmdCB8fAotCQkJCSAgICBvdGhlci0+cmJfbGVmdC0+cmJfY29sb3IgPT0gUkJfQkxBQ0spCisJCQkJaWYgKCFvdGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpCiAJCQkJewogCQkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqb19yaWdodDsKIAkJCQkJaWYgKChvX3JpZ2h0ID0gb3RoZXItPnJiX3JpZ2h0KSkKLQkJCQkJCW9fcmlnaHQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJCW90aGVyLT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQkJCXJiX3NldF9ibGFjayhvX3JpZ2h0KTsKKwkJCQkJcmJfc2V0X3JlZChvdGhlcik7CiAJCQkJCV9fcmJfcm90YXRlX2xlZnQob3RoZXIsIHJvb3QpOwogCQkJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKIAkJCQl9Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gcGFyZW50LT5yYl9jb2xvcjsKLQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJCQkJcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKKwkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKIAkJCQlpZiAob3RoZXItPnJiX2xlZnQpCi0JCQkJCW90aGVyLT5yYl9sZWZ0LT5yYl9jb2xvciA9IFJCX0JMQUNLOworCQkJCQlyYl9zZXRfYmxhY2sob3RoZXItPnJiX2xlZnQpOwogCQkJCV9fcmJfcm90YXRlX3JpZ2h0KHBhcmVudCwgcm9vdCk7CiAJCQkJbm9kZSA9IHJvb3QtPnJiX25vZGU7CiAJCQkJYnJlYWs7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJfQogCX0KIAlpZiAobm9kZSkKLQkJbm9kZS0+cmJfY29sb3IgPSBSQl9CTEFDSzsKKwkJcmJfc2V0X2JsYWNrKG5vZGUpOwogfQogCiB2b2lkIHJiX2VyYXNlKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKQEAgLTIzOCw0OCArMjM4LDQxIEBACiAJCXdoaWxlICgobGVmdCA9IG5vZGUtPnJiX2xlZnQpICE9IE5VTEwpCiAJCQlub2RlID0gbGVmdDsKIAkJY2hpbGQgPSBub2RlLT5yYl9yaWdodDsKLQkJcGFyZW50ID0gbm9kZS0+cmJfcGFyZW50OwotCQljb2xvciA9IG5vZGUtPnJiX2NvbG9yOworCQlwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisJCWNvbG9yID0gcmJfY29sb3Iobm9kZSk7CiAKIAkJaWYgKGNoaWxkKQotCQkJY2hpbGQtPnJiX3BhcmVudCA9IHBhcmVudDsKLQkJaWYgKHBhcmVudCkKLQkJewotCQkJaWYgKHBhcmVudC0+cmJfbGVmdCA9PSBub2RlKQotCQkJCXBhcmVudC0+cmJfbGVmdCA9IGNoaWxkOwotCQkJZWxzZQotCQkJCXBhcmVudC0+cmJfcmlnaHQgPSBjaGlsZDsKLQkJfQotCQllbHNlCi0JCQlyb290LT5yYl9ub2RlID0gY2hpbGQ7Ci0KLQkJaWYgKG5vZGUtPnJiX3BhcmVudCA9PSBvbGQpCisJCQlyYl9zZXRfcGFyZW50KGNoaWxkLCBwYXJlbnQpOworCQlpZiAocGFyZW50ID09IG9sZCkgeworCQkJcGFyZW50LT5yYl9yaWdodCA9IGNoaWxkOwogCQkJcGFyZW50ID0gbm9kZTsKLQkJbm9kZS0+cmJfcGFyZW50ID0gb2xkLT5yYl9wYXJlbnQ7Ci0JCW5vZGUtPnJiX2NvbG9yID0gb2xkLT5yYl9jb2xvcjsKKwkJfSBlbHNlCisJCQlwYXJlbnQtPnJiX2xlZnQgPSBjaGlsZDsKKworCQlub2RlLT5yYl9wYXJlbnRfY29sb3IgPSBvbGQtPnJiX3BhcmVudF9jb2xvcjsKIAkJbm9kZS0+cmJfcmlnaHQgPSBvbGQtPnJiX3JpZ2h0OwogCQlub2RlLT5yYl9sZWZ0ID0gb2xkLT5yYl9sZWZ0OwogCi0JCWlmIChvbGQtPnJiX3BhcmVudCkKKwkJaWYgKHJiX3BhcmVudChvbGQpKQogCQl7Ci0JCQlpZiAob2xkLT5yYl9wYXJlbnQtPnJiX2xlZnQgPT0gb2xkKQotCQkJCW9sZC0+cmJfcGFyZW50LT5yYl9sZWZ0ID0gbm9kZTsKKwkJCWlmIChyYl9wYXJlbnQob2xkKS0+cmJfbGVmdCA9PSBvbGQpCisJCQkJcmJfcGFyZW50KG9sZCktPnJiX2xlZnQgPSBub2RlOwogCQkJZWxzZQotCQkJCW9sZC0+cmJfcGFyZW50LT5yYl9yaWdodCA9IG5vZGU7CisJCQkJcmJfcGFyZW50KG9sZCktPnJiX3JpZ2h0ID0gbm9kZTsKIAkJfSBlbHNlCiAJCQlyb290LT5yYl9ub2RlID0gbm9kZTsKIAotCQlvbGQtPnJiX2xlZnQtPnJiX3BhcmVudCA9IG5vZGU7CisJCXJiX3NldF9wYXJlbnQob2xkLT5yYl9sZWZ0LCBub2RlKTsKIAkJaWYgKG9sZC0+cmJfcmlnaHQpCi0JCQlvbGQtPnJiX3JpZ2h0LT5yYl9wYXJlbnQgPSBub2RlOworCQkJcmJfc2V0X3BhcmVudChvbGQtPnJiX3JpZ2h0LCBub2RlKTsKIAkJZ290byBjb2xvcjsKIAl9CiAKLQlwYXJlbnQgPSBub2RlLT5yYl9wYXJlbnQ7Ci0JY29sb3IgPSBub2RlLT5yYl9jb2xvcjsKKwlwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisJY29sb3IgPSByYl9jb2xvcihub2RlKTsKIAogCWlmIChjaGlsZCkKLQkJY2hpbGQtPnJiX3BhcmVudCA9IHBhcmVudDsKKwkJcmJfc2V0X3BhcmVudChjaGlsZCwgcGFyZW50KTsKIAlpZiAocGFyZW50KQogCXsKIAkJaWYgKHBhcmVudC0+cmJfbGVmdCA9PSBub2RlKQpAQCAtMzI3LDYgKzMyMCw4IEBACiAKIHN0cnVjdCByYl9ub2RlICpyYl9uZXh0KHN0cnVjdCByYl9ub2RlICpub2RlKQogeworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CisKIAkvKiBJZiB3ZSBoYXZlIGEgcmlnaHQtaGFuZCBjaGlsZCwgZ28gZG93biBhbmQgdGhlbiBsZWZ0IGFzIGZhcgogCSAgIGFzIHdlIGNhbi4gKi8KIAlpZiAobm9kZS0+cmJfcmlnaHQpIHsKQEAgLTM0MiwxNSArMzM3LDE3IEBACiAJICAgYW5jZXN0b3IgaXMgYSByaWdodC1oYW5kIGNoaWxkIG9mIGl0cyBwYXJlbnQsIGtlZXAgZ29pbmcKIAkgICB1cC4gRmlyc3QgdGltZSBpdCdzIGEgbGVmdC1oYW5kIGNoaWxkIG9mIGl0cyBwYXJlbnQsIHNhaWQKIAkgICBwYXJlbnQgaXMgb3VyICduZXh0JyBub2RlLiAqLwotCXdoaWxlIChub2RlLT5yYl9wYXJlbnQgJiYgbm9kZSA9PSBub2RlLT5yYl9wYXJlbnQtPnJiX3JpZ2h0KQotCQlub2RlID0gbm9kZS0+cmJfcGFyZW50OworCXdoaWxlICgocGFyZW50ID0gcmJfcGFyZW50KG5vZGUpKSAmJiBub2RlID09IHBhcmVudC0+cmJfcmlnaHQpCisJCW5vZGUgPSBwYXJlbnQ7CiAKLQlyZXR1cm4gbm9kZS0+cmJfcGFyZW50OworCXJldHVybiBwYXJlbnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJiX25leHQpOwogCiBzdHJ1Y3QgcmJfbm9kZSAqcmJfcHJldihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSkKIHsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OworCiAJLyogSWYgd2UgaGF2ZSBhIGxlZnQtaGFuZCBjaGlsZCwgZ28gZG93biBhbmQgdGhlbiByaWdodCBhcyBmYXIKIAkgICBhcyB3ZSBjYW4uICovCiAJaWYgKG5vZGUtPnJiX2xlZnQpIHsKQEAgLTM2MiwxNyArMzU5LDE3IEBACiAKIAkvKiBObyBsZWZ0LWhhbmQgY2hpbGRyZW4uIEdvIHVwIHRpbGwgd2UgZmluZCBhbiBhbmNlc3RvciB3aGljaAogCSAgIGlzIGEgcmlnaHQtaGFuZCBjaGlsZCBvZiBpdHMgcGFyZW50ICovCi0Jd2hpbGUgKG5vZGUtPnJiX3BhcmVudCAmJiBub2RlID09IG5vZGUtPnJiX3BhcmVudC0+cmJfbGVmdCkKLQkJbm9kZSA9IG5vZGUtPnJiX3BhcmVudDsKKwl3aGlsZSAoKHBhcmVudCA9IHJiX3BhcmVudChub2RlKSkgJiYgbm9kZSA9PSBwYXJlbnQtPnJiX2xlZnQpCisJCW5vZGUgPSBwYXJlbnQ7CiAKLQlyZXR1cm4gbm9kZS0+cmJfcGFyZW50OworCXJldHVybiBwYXJlbnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJiX3ByZXYpOwogCiB2b2lkIHJiX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqdmljdGltLCBzdHJ1Y3QgcmJfbm9kZSAqbmV3LAogCQkgICAgIHN0cnVjdCByYl9yb290ICpyb290KQogewotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSB2aWN0aW0tPnJiX3BhcmVudDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gcmJfcGFyZW50KHZpY3RpbSk7CiAKIAkvKiBTZXQgdGhlIHN1cnJvdW5kaW5nIG5vZGVzIHRvIHBvaW50IHRvIHRoZSByZXBsYWNlbWVudCAqLwogCWlmIChwYXJlbnQpIHsKQEAgLTM4NCw5ICszODEsOSBAQAogCQlyb290LT5yYl9ub2RlID0gbmV3OwogCX0KIAlpZiAodmljdGltLT5yYl9sZWZ0KQotCQl2aWN0aW0tPnJiX2xlZnQtPnJiX3BhcmVudCA9IG5ldzsKKwkJcmJfc2V0X3BhcmVudCh2aWN0aW0tPnJiX2xlZnQsIG5ldyk7CiAJaWYgKHZpY3RpbS0+cmJfcmlnaHQpCi0JCXZpY3RpbS0+cmJfcmlnaHQtPnJiX3BhcmVudCA9IG5ldzsKKwkJcmJfc2V0X3BhcmVudCh2aWN0aW0tPnJiX3JpZ2h0LCBuZXcpOwogCiAJLyogQ29weSB0aGUgcG9pbnRlcnMvY29sb3VyIGZyb20gdGhlIHZpY3RpbSB0byB0aGUgcmVwbGFjZW1lbnQgKi8KIAkqbmV3ID0gKnZpY3RpbTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDFhZTJiMmMuLjcwZGY1YzAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtOTEsOCArOTEsOCBAQAogCWlmIChzdGFydF9wZm4gPCB6b25lLT56b25lX3N0YXJ0X3BmbikKIAkJem9uZS0+em9uZV9zdGFydF9wZm4gPSBzdGFydF9wZm47CiAKLQlpZiAoZW5kX3BmbiA+IG9sZF96b25lX2VuZF9wZm4pCi0JCXpvbmUtPnNwYW5uZWRfcGFnZXMgPSBlbmRfcGZuIC0gem9uZS0+em9uZV9zdGFydF9wZm47CisJem9uZS0+c3Bhbm5lZF9wYWdlcyA9IG1heChvbGRfem9uZV9lbmRfcGZuLCBlbmRfcGZuKSAtCisJCQkJem9uZS0+em9uZV9zdGFydF9wZm47CiAKIAl6b25lX3NwYW5fd3JpdGV1bmxvY2soem9uZSk7CiB9CkBAIC0xMDYsOCArMTA2LDggQEAKIAlpZiAoc3RhcnRfcGZuIDwgcGdkYXQtPm5vZGVfc3RhcnRfcGZuKQogCQlwZ2RhdC0+bm9kZV9zdGFydF9wZm4gPSBzdGFydF9wZm47CiAKLQlpZiAoZW5kX3BmbiA+IG9sZF9wZ2RhdF9lbmRfcGZuKQotCQlwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzID0gZW5kX3BmbiAtIHBnZGF0LT5ub2RlX3N0YXJ0X3BmbjsKKwlwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzID0gbWF4KG9sZF9wZ2RhdF9lbmRfcGZuLCBlbmRfcGZuKSAtCisJCQkJCXBnZGF0LT5ub2RlX3N0YXJ0X3BmbjsKIH0KIAogaW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDRjNWU2OGUuLjFlNDNjOGEgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMTc4MCw2ICsxNzgwLDcgQEAKIAlpZiAoIXNpbXBsZV9lbXB0eShkZW50cnkpKQogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAorCWRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluay0tOwogCWRpci0+aV9ubGluay0tOwogCXJldHVybiBzaG1lbV91bmxpbmsoZGlyLCBkZW50cnkpOwogfQpAQCAtMjEwMiw2ICsyMTAzLDcgQEAKIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJc2ItPnNfbWFnaWMgPSBUTVBGU19NQUdJQzsKIAlzYi0+c19vcCA9ICZzaG1lbV9vcHM7CisJc2ItPnNfdGltZV9ncmFuID0gMTsKIAogCWlub2RlID0gc2htZW1fZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgbW9kZSwgMCk7CiAJaWYgKCFpbm9kZSkKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBkMzFhMDZiLi5mMWI2NDRlIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0yMDcsMTEgKzIwNyw2IEBACiAjZGVmaW5lCUJVRkNUTF9BQ1RJVkUJKCgoa21lbV9idWZjdGxfdCkofjBVKSktMikKICNkZWZpbmUJU0xBQl9MSU1JVAkoKChrbWVtX2J1ZmN0bF90KSh+MFUpKS0zKQogCi0vKiBNYXggbnVtYmVyIG9mIG9ianMtcGVyLXNsYWIgZm9yIGNhY2hlcyB3aGljaCB1c2Ugb2ZmLXNsYWIgc2xhYnMuCi0gKiBOZWVkZWQgdG8gYXZvaWQgYSBwb3NzaWJsZSBsb29waW5nIGNvbmRpdGlvbiBpbiBjYWNoZV9ncm93KCkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9mZnNsYWJfbGltaXQ7Ci0KIC8qCiAgKiBzdHJ1Y3Qgc2xhYgogICoKQEAgLTEzNTYsMTIgKzEzNTEsNiBAQAogCQkJCQlOVUxMLCBOVUxMKTsKIAkJfQogCi0JCS8qIEluYyBvZmYtc2xhYiBidWZjdGwgbGltaXQgdW50aWwgdGhlIGNlaWxpbmcgaXMgaGl0LiAqLwotCQlpZiAoIShPRkZfU0xBQihzaXplcy0+Y3NfY2FjaGVwKSkpIHsKLQkJCW9mZnNsYWJfbGltaXQgPSBzaXplcy0+Y3Nfc2l6ZSAtIHNpemVvZihzdHJ1Y3Qgc2xhYik7Ci0JCQlvZmZzbGFiX2xpbWl0IC89IHNpemVvZihrbWVtX2J1ZmN0bF90KTsKLQkJfQotCiAJCXNpemVzLT5jc19kbWFjYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lcy0+bmFtZV9kbWEsCiAJCQkJCXNpemVzLT5jc19zaXplLAogCQkJCQlBUkNIX0tNQUxMT0NfTUlOQUxJR04sCkBAIC0xNzgwLDYgKzE3NjksNyBAQAogc3RhdGljIHNpemVfdCBjYWxjdWxhdGVfc2xhYl9vcmRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAogCQkJc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwl1bnNpZ25lZCBsb25nIG9mZnNsYWJfbGltaXQ7CiAJc2l6ZV90IGxlZnRfb3ZlciA9IDA7CiAJaW50IGdmcG9yZGVyOwogCkBAIC0xNzkxLDkgKzE3ODEsMTggQEAKIAkJaWYgKCFudW0pCiAJCQljb250aW51ZTsKIAotCQkvKiBNb3JlIHRoYW4gb2Zmc2xhYl9saW1pdCBvYmplY3RzIHdpbGwgY2F1c2UgcHJvYmxlbXMgKi8KLQkJaWYgKChmbGFncyAmIENGTEdTX09GRl9TTEFCKSAmJiBudW0gPiBvZmZzbGFiX2xpbWl0KQotCQkJYnJlYWs7CisJCWlmIChmbGFncyAmIENGTEdTX09GRl9TTEFCKSB7CisJCQkvKgorCQkJICogTWF4IG51bWJlciBvZiBvYmpzLXBlci1zbGFiIGZvciBjYWNoZXMgd2hpY2gKKwkJCSAqIHVzZSBvZmYtc2xhYiBzbGFicy4gTmVlZGVkIHRvIGF2b2lkIGEgcG9zc2libGUKKwkJCSAqIGxvb3BpbmcgY29uZGl0aW9uIGluIGNhY2hlX2dyb3coKS4KKwkJCSAqLworCQkJb2Zmc2xhYl9saW1pdCA9IHNpemUgLSBzaXplb2Yoc3RydWN0IHNsYWIpOworCQkJb2Zmc2xhYl9saW1pdCAvPSBzaXplb2Yoa21lbV9idWZjdGxfdCk7CisKKyAJCQlpZiAobnVtID4gb2Zmc2xhYl9saW1pdCkKKwkJCQlicmVhazsKKwkJfQogCiAJCS8qIEZvdW5kIHNvbWV0aGluZyBhY2NlcHRhYmxlIC0gc2F2ZSBpdCBhd2F5ICovCiAJCWNhY2hlcC0+bnVtID0gbnVtOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA0NjQ5YTYzLi40NDBhNzMzIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIGxvb3BfYWdhaW46CiAJdG90YWxfc2Nhbm5lZCA9IDA7CiAJbnJfcmVjbGFpbWVkID0gMDsKLQlzYy5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9tb2RlLAorCXNjLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGU7CiAJc2MubnJfbWFwcGVkID0gcmVhZF9wYWdlX3N0YXRlKG5yX21hcHBlZCk7CiAKIAlpbmNfcGFnZV9zdGF0ZShwYWdlb3V0cnVuKTsKZGlmZiAtLWdpdCBhL25ldC9LY29uZmlnIGIvbmV0L0tjb25maWcKaW5kZXggNDE5M2NkYy4uYzZjZWM1YSAxMDA2NDQKLS0tIGEvbmV0L0tjb25maWcKKysrIGIvbmV0L0tjb25maWcKQEAgLTY2LDYgKzY2LDEzIEBACiAKIGVuZGlmICMgaWYgSU5FVAogCitjb25maWcgTkVUV09SS19TRUNNQVJLCisJYm9vbCAiU2VjdXJpdHkgTWFya2luZyIKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc2VjdXJpdHkgbWFya2luZyBvZiBuZXR3b3JrIHBhY2tldHMsIHNpbWlsYXIKKwkgIHRvIG5mbWFyaywgYnV0IGRlc2lnbmF0ZWQgZm9yIHNlY3VyaXR5IHB1cnBvc2VzLgorCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KKwogbWVudWNvbmZpZyBORVRGSUxURVIKIAlib29sICJOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgKHJlcGxhY2VzIGlwY2hhaW5zKSIKIAktLS1oZWxwLS0tCkBAIC0yMTUsNiArMjIyLDIxIEBACiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGt0Z2VuLgogCitjb25maWcgTkVUX1RDUFBST0JFCisJdHJpc3RhdGUgIlRDUCBjb25uZWN0aW9uIHByb2JpbmciCisJZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTCAmJiBQUk9DX0ZTICYmIEtQUk9CRVMKKwktLS1oZWxwLS0tCisJVGhpcyBtb2R1bGUgYWxsb3dzIGZvciBjYXB0dXJpbmcgdGhlIGNoYW5nZXMgdG8gVENQIGNvbm5lY3Rpb24KKwlzdGF0ZSBpbiByZXNwb25zZSB0byBpbmNvbWluZyBwYWNrZXRzLiBJdCBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcKKwlUQ1AgY29uZ2VzdGlvbiBhdm9pZGFuY2UgbW9kdWxlcy4gSWYgeW91IGRvbid0IHVuZGVyc3RhbmQKKwl3aGF0IHdhcyBqdXN0IHNhaWQsIHlvdSBkb24ndCBuZWVkIGl0OiBzYXkgTi4KKworCURvY3VtZW50YXRpb24gb24gaG93IHRvIHVzZSB0aGUgcGFja2V0IGdlbmVyYXRvciBjYW4gYmUgZm91bmQKKwlhdCBodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9UY3BQcm9iZQorCisJVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0Y3BfcHJvYmUuCisKIGVuZG1lbnUKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCA3MmQ4NTI5Li5mOTJmOWM5IDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtOTgsNyArOTgsNyBAQAogCQlwcmludGsoS0VSTl9DUklUICIhY2xpcF92Y2MtPmVudHJ5IChjbGlwX3ZjYyAlcClcbiIsIGNsaXBfdmNjKTsKIAkJcmV0dXJuOwogCX0KLQlzcGluX2xvY2tfYmgoJmVudHJ5LT5uZWlnaC0+ZGV2LT54bWl0X2xvY2spOwkvKiBibG9jayBjbGlwX3N0YXJ0X3htaXQoKSAqLworCW5ldGlmX3R4X2xvY2tfYmgoZW50cnktPm5laWdoLT5kZXYpOwkvKiBibG9jayBjbGlwX3N0YXJ0X3htaXQoKSAqLwogCWVudHJ5LT5uZWlnaC0+dXNlZCA9IGppZmZpZXM7CiAJZm9yICh3YWxrID0gJmVudHJ5LT52Y2NzOyAqd2Fsazsgd2FsayA9ICYoKndhbGspLT5uZXh0KQogCQlpZiAoKndhbGsgPT0gY2xpcF92Y2MpIHsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXByaW50ayhLRVJOX0NSSVQgIkFUTUFSUDogdW5saW5rX2NsaXBfdmNjIGZhaWxlZCAoZW50cnkgJXAsIHZjYyAiCiAJICAgICAgICIweCVwKVxuIiwgZW50cnksIGNsaXBfdmNjKTsKICAgICAgIG91dDoKLQlzcGluX3VubG9ja19iaCgmZW50cnktPm5laWdoLT5kZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGVudHJ5LT5uZWlnaC0+ZGV2KTsKIH0KIAogLyogVGhlIG5laWdoYm91ciBlbnRyeSBuLT5sb2NrIGlzIGhlbGQuICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL01ha2VmaWxlIGIvbmV0L2JyaWRnZS9NYWtlZmlsZQppbmRleCA1OTU1NmU0Li5mNDQ0YzEyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL01ha2VmaWxlCisrKyBiL25ldC9icmlkZ2UvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAKIGJyaWRnZS15CTo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcCiAJCQlicl9pb2N0bC5vIGJyX25vdGlmeS5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXAotCQkJYnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8KKwkJCWJyX3N0cF9pZi5vIGJyX3N0cF90aW1lci5vIGJyX25ldGxpbmsubwogCiBicmlkZ2UtJChDT05GSUdfU1lTRlMpICs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIubwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyLmMgYi9uZXQvYnJpZGdlL2JyLmMKaW5kZXggMTJkYTIxYS4uNjU0NDAxYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9ici5jCisrKyBiL25ldC9icmlkZ2UvYnIuYwpAQCAtMzAsMzYgKzMwLDQ2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCiAJYnJfc3RwX3NhcCA9IGxsY19zYXBfb3BlbihMTENfU0FQX0JTUEFOLCBicl9zdHBfcmN2KTsKIAlpZiAoIWJyX3N0cF9zYXApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJicmlkZ2U6IGNhbid0IHJlZ2lzdGVyIHNhcCBmb3IgU1RQXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FQUREUklOVVNFOwogCX0KIAogCWJyX2ZkYl9pbml0KCk7CiAKLSNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgotCWlmIChicl9uZXRmaWx0ZXJfaW5pdCgpKQotCQlyZXR1cm4gMTsKLSNlbmRpZgorCWVyciA9IGJyX25ldGZpbHRlcl9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0MTsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYnJfZGV2aWNlX25vdGlmaWVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQyOworCisJYnJfbmV0bGlua19pbml0KCk7CiAJYnJpb2N0bF9zZXQoYnJfaW9jdGxfZGV2aWNlbGVzc19zdHViKTsKIAlicl9oYW5kbGVfZnJhbWVfaG9vayA9IGJyX2hhbmRsZV9mcmFtZTsKIAogCWJyX2ZkYl9nZXRfaG9vayA9IGJyX2ZkYl9nZXQ7CiAJYnJfZmRiX3B1dF9ob29rID0gYnJfZmRiX3B1dDsKIAotCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYnJfZGV2aWNlX25vdGlmaWVyKTsKLQogCXJldHVybiAwOworCitlcnJfb3V0MjoKKwlicl9uZXRmaWx0ZXJfZmluaSgpOworZXJyX291dDE6CisJbGxjX3NhcF9wdXQoYnJfc3RwX3NhcCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJyX2RlaW5pdCh2b2lkKQogewogCXJjdV9hc3NpZ25fcG9pbnRlcihicl9zdHBfc2FwLT5yY3ZfZnVuYywgTlVMTCk7CiAKLSNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgorCWJyX25ldGxpbmtfZmluaSgpOwogCWJyX25ldGZpbHRlcl9maW5pKCk7Ci0jZW5kaWYKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYnJfZGV2aWNlX25vdGlmaWVyKTsKIAlicmlvY3RsX3NldChOVUxMKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKaW5kZXggMGM4OGEyYS4uMmFmZGM3YyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYworKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCkBAIC0xNDUsOSArMTQ1LDkgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGRhdGEpCi0JCWJyLT5mZWF0dXJlX21hc2sgfD0gTkVUSUZfRl9JUF9DU1VNOworCQlici0+ZmVhdHVyZV9tYXNrIHw9IE5FVElGX0ZfTk9fQ1NVTTsKIAllbHNlCi0JCWJyLT5mZWF0dXJlX21hc2sgJj0gfk5FVElGX0ZfSVBfQ1NVTTsKKwkJYnItPmZlYXR1cmVfbWFzayAmPSB+TkVUSUZfRl9BTExfQ1NVTTsKIAogCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7CiAJcmV0dXJuIDA7CkBAIC0xODUsNSArMTg1LDUgQEAKIAlkZXYtPnByaXZfZmxhZ3MgPSBJRkZfRUJSSURHRTsKIAogIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QKLSAJCXwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0lQX0NTVU07CisgCQl8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9OT19DU1VNOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwppbmRleCA1NmYzYWE0Li4wZGNhMDI3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYwpAQCAtMjAsMTQgKzIwLDExIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKIAorLyogRG9uJ3QgZm9yd2FyZCBwYWNrZXRzIHRvIG9yaWdpbmF0aW5nIHBvcnQgb3IgZm9yd2FyZGluZyBkaWFzYWJsZWQgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNob3VsZF9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIAogCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChza2ItPmRldiA9PSBwLT5kZXYgfHwKLQkgICAgcC0+c3RhdGUgIT0gQlJfU1RBVEVfRk9SV0FSRElORykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gKHNrYi0+ZGV2ICE9IHAtPmRldiAmJiBwLT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBwYWNrZXRfbGVuZ3RoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCkBAIC01NSwxMCArNTIsOSBAQAogCiBpbnQgYnJfZm9yd2FyZF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfUE9TVF9ST1VUSU5HLCBza2IsIE5VTEwsIHNrYi0+ZGV2LAotCQkJYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdCk7CisJcmV0dXJuIE5GX0hPT0soUEZfQlJJREdFLCBORl9CUl9QT1NUX1JPVVRJTkcsIHNrYiwgTlVMTCwgc2tiLT5kZXYsCisJCSAgICAgICBicl9kZXZfcXVldWVfcHVzaF94bWl0KTsKIAotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2JyX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sIHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggYWQxYzdhZi4uZmRlYzc3MyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMzAwLDI1ICszMDAsMjAgQEAKIAlydG5sX2xvY2soKTsKIAlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkgewogCQlyZXQgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnIxOworCQlpZiAocmV0IDwgMCkgeworCQkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJaWYgKHJldCkKLQkJZ290byBlcnIyOworCQlnb3RvIG91dDsKIAogCXJldCA9IGJyX3N5c2ZzX2FkZGJyKGRldik7CiAJaWYgKHJldCkKLQkJZ290byBlcnIzOwotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIDA7Ci0KLSBlcnIzOgotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0gZXJyMjoKLQlmcmVlX25ldGRldihkZXYpOwotIGVycjE6CisJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7Cisgb3V0OgogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3NywxMiArMzcyLDE3IEBACiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzLCBjaGVja3N1bTsKIAotCWZlYXR1cmVzID0gYnItPmZlYXR1cmVfbWFzayAmfiBORVRJRl9GX0lQX0NTVU07Ci0JY2hlY2tzdW0gPSBici0+ZmVhdHVyZV9tYXNrICYgTkVUSUZfRl9JUF9DU1VNOworCWNoZWNrc3VtID0gYnItPmZlYXR1cmVfbWFzayAmIE5FVElGX0ZfQUxMX0NTVU0gPyBORVRJRl9GX05PX0NTVU0gOiAwOworCWZlYXR1cmVzID0gYnItPmZlYXR1cmVfbWFzayAmIH5ORVRJRl9GX0FMTF9DU1VNOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmYnItPnBvcnRfbGlzdCwgbGlzdCkgewotCQlpZiAoIShwLT5kZXYtPmZlYXR1cmVzIAotCQkgICAgICAmIChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9OT19DU1VNfE5FVElGX0ZfSFdfQ1NVTSkpKQorCQlpZiAoY2hlY2tzdW0gJiBORVRJRl9GX05PX0NTVU0gJiYKKwkJICAgICEocC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkpCisJCQljaGVja3N1bSBePSBORVRJRl9GX05PX0NTVU0gfCBORVRJRl9GX0hXX0NTVU07CisJCWlmIChjaGVja3N1bSAmIE5FVElGX0ZfSFdfQ1NVTSAmJgorCQkgICAgIShwLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19DU1VNKSkKKwkJCWNoZWNrc3VtIF49IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfSVBfQ1NVTTsKKwkJaWYgKCEocC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkpCiAJCQljaGVja3N1bSA9IDA7CiAJCWZlYXR1cmVzICY9IHAtPmRldi0+ZmVhdHVyZXM7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggM2RhOTI2NC4uM2U0MWY5ZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC00MDcsMTIgKzQwNyw4IEBACiAJaWYgKHBrdF9sZW4gfHwgaGRyLT5uZXh0aGRyICE9IE5FWFRIRFJfSE9QKSB7CiAJCWlmIChwa3RfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSA+IHNrYi0+bGVuKQogCQkJZ290byBpbmhkcl9lcnJvcjsKLQkJaWYgKHBrdF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIDwgc2tiLT5sZW4pIHsKLQkJCWlmIChfX3Bza2JfdHJpbShza2IsIHBrdF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKLQkJCQlnb3RvIGluaGRyX2Vycm9yOwotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKQotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJfQorCQlpZiAocHNrYl90cmltX3Jjc3VtKHNrYiwgcGt0X2xlbiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKQorCQkJZ290byBpbmhkcl9lcnJvcjsKIAl9CiAJaWYgKGhkci0+bmV4dGhkciA9PSBORVhUSERSX0hPUCAmJiBjaGVja19oYmhfbGVuKHNrYikpCiAJCWdvdG8gaW5oZHJfZXJyb3I7CkBAIC00OTUsMTEgKzQ5MSw3IEBACiAJaWYgKHNrYi0+bGVuIDwgbGVuIHx8IGxlbiA8IDQgKiBpcGgtPmlobCkKIAkJZ290byBpbmhkcl9lcnJvcjsKIAotCWlmIChza2ItPmxlbiA+IGxlbikgewotCQlfX3Bza2JfdHJpbShza2IsIGxlbik7Ci0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQl9CisJcHNrYl90cmltX3Jjc3VtKHNrYiwgbGVuKTsKIAogCW5mX2JyaWRnZV9wdXQoc2tiLT5uZl9icmlkZ2UpOwogCWlmICghbmZfYnJpZGdlX2FsbG9jKHNrYikpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MWQ3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqCUJyaWRnZSBuZXRsaW5rIGNvbnRyb2wgaW50ZXJmYWNlCisgKgorICoJQXV0aG9yczoKKyAqCVN0ZXBoZW4gSGVtbWluZ2VyCQk8c2hlbW1pbmdlckBvc2RsLm9yZz4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlICJicl9wcml2YXRlLmgiCisKKy8qCisgKiBDcmVhdGUgb25lIG5ldGxpbmsgbWVzc2FnZSBmb3Igb25lIGludGVyZmFjZQorICogQ29udGFpbnMgcG9ydCBhbmQgbWFzdGVyIGluZm8gYXMgd2VsbCBhcyBjYXJyaWVyIGFuZCBicmlkZ2Ugc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgYnJfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKKwkJCSAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcG9ydC0+YnI7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnQtPmRldjsKKwlzdHJ1Y3QgaWZpbmZvbXNnICpyOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXVuc2lnbmVkIGNoYXIgKmIgPSBza2ItPnRhaWw7CisJdTMyIG10dSA9IGRldi0+bXR1OworCXU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IGRldi0+b3BlcnN0YXRlIDogSUZfT1BFUl9ET1dOOworCXU4IHBvcnRzdGF0ZSA9IHBvcnQtPnN0YXRlOworCisJcHJfZGVidWcoImJyX2ZpbGxfaW5mbyBldmVudCAlZCBwb3J0ICVzIG1hc3RlciAlc1xuIiwKKwkJIGV2ZW50LCBkZXYtPm5hbWUsIGJyLT5kZXYtPm5hbWUpOworCisJbmxoID0gTkxNU0dfTkVXKHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKnIpLCBmbGFncyk7CisJciA9IE5MTVNHX0RBVEEobmxoKTsKKwlyLT5pZmlfZmFtaWx5ID0gQUZfQlJJREdFOworCXItPl9faWZpX3BhZCA9IDA7CisJci0+aWZpX3R5cGUgPSBkZXYtPnR5cGU7CisJci0+aWZpX2luZGV4ID0gZGV2LT5pZmluZGV4OworCXItPmlmaV9mbGFncyA9IGRldl9nZXRfZmxhZ3MoZGV2KTsKKwlyLT5pZmlfY2hhbmdlID0gMDsKKworCVJUQV9QVVQoc2tiLCBJRkxBX0lGTkFNRSwgc3RybGVuKGRldi0+bmFtZSkrMSwgZGV2LT5uYW1lKTsKKworCVJUQV9QVVQoc2tiLCBJRkxBX01BU1RFUiwgc2l6ZW9mKGludCksICZici0+ZGV2LT5pZmluZGV4KTsKKworCWlmIChkZXYtPmFkZHJfbGVuKQorCQlSVEFfUFVUKHNrYiwgSUZMQV9BRERSRVNTLCBkZXYtPmFkZHJfbGVuLCBkZXYtPmRldl9hZGRyKTsKKworCVJUQV9QVVQoc2tiLCBJRkxBX01UVSwgc2l6ZW9mKG10dSksICZtdHUpOworCWlmIChkZXYtPmlmaW5kZXggIT0gZGV2LT5pZmxpbmspCisJCVJUQV9QVVQoc2tiLCBJRkxBX0xJTkssIHNpemVvZihpbnQpLCAmZGV2LT5pZmxpbmspOworCisKKwlSVEFfUFVUKHNrYiwgSUZMQV9PUEVSU1RBVEUsIHNpemVvZihvcGVyc3RhdGUpLCAmb3BlcnN0YXRlKTsKKworCWlmIChldmVudCA9PSBSVE1fTkVXTElOSykKKwkJUlRBX1BVVChza2IsIElGTEFfUFJPVElORk8sIHNpemVvZihwb3J0c3RhdGUpLCAmcG9ydHN0YXRlKTsKKworCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKKworCXJldHVybiBza2ItPmxlbjsKKworbmxtc2dfZmFpbHVyZToKK3J0YXR0cl9mYWlsdXJlOgorCisJc2tiX3RyaW0oc2tiLCBiIC0gc2tiLT5kYXRhKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIE5vdGlmeSBsaXN0ZW5lcnMgb2YgYSBjaGFuZ2UgaW4gcG9ydCBpbmZvcm1hdGlvbgorICovCit2b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlwcl9kZWJ1ZygiYnJpZGdlIG5vdGlmeSBldmVudD0lZFxuIiwgZXZlbnQpOworCXNrYiA9IGFsbG9jX3NrYihOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IGlmaW5mb21zZykgKyAxMjgpLAorCQkJR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgY3VycmVudC0+cGlkLCAwLCBldmVudCwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfa2ZyZWU7CisKKwlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gUlROTEdSUF9MSU5LOworCW5ldGxpbmtfYnJvYWRjYXN0KHJ0bmwsIHNrYiwgMCwgUlROTEdSUF9MSU5LLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CisKK2Vycl9rZnJlZToKKwlrZnJlZV9za2Ioc2tiKTsKK2Vycl9vdXQ6CisJbmV0bGlua19zZXRfZXJyKHJ0bmwsIDAsIFJUTkxHUlBfTElOSywgZXJyKTsKK30KKworLyoKKyAqIER1bXAgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHBvcnRzLCBpbiByZXNwb25zZSB0byBHRVRMSU5LCisgKi8KK3N0YXRpYyBpbnQgYnJfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGlkeDsKKwlpbnQgc19pZHggPSBjYi0+YXJnc1swXTsKKwlpbnQgZXJyID0gMDsKKworCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7CisJZm9yIChkZXYgPSBkZXZfYmFzZSwgaWR4ID0gMDsgZGV2OyBkZXYgPSBkZXYtPm5leHQpIHsKKwkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGRldi0+YnJfcG9ydDsKKworCQkvKiBub3QgYSBicmlkZ2UgcG9ydCAqLworCQlpZiAoIXApCisJCQljb250aW51ZTsKKworCQlpZiAoaWR4IDwgc19pZHgpCisJCQljb250aW51ZTsKKworCQllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHAsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCSAgICAgY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXTElOSywgTkxNX0ZfTVVMVEkpOworCQlpZiAoZXJyIDw9IDApCisJCQlicmVhazsKKwkJKytpZHg7CisJfQorCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKKworCWNiLT5hcmdzWzBdID0gaWR4OworCisJcmV0dXJuIHNrYi0+bGVuOworfQorCisvKgorICogQ2hhbmdlIHN0YXRlIG9mIHBvcnQgKGllIGZyb20gZm9yd2FyZGluZyB0byBibG9ja2luZyBldGMpCisgKiBVc2VkIGJ5IHNwYW5uaW5nIHRyZWUgaW4gdXNlciBzcGFjZS4KKyAqLworc3RhdGljIGludCBicl9ydG1fc2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcnRhdHRyICAqKnJ0YSA9IGFyZzsKKwlzdHJ1Y3QgaWZpbmZvbXNnICppZm0gPSBOTE1TR19EQVRBKG5saCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOworCXU4IG5ld19zdGF0ZTsKKworCWlmIChpZm0tPmlmaV9mYW1pbHkgIT0gQUZfQlJJREdFKQorCQlyZXR1cm4gLUVQRk5PU1VQUE9SVDsKKworCS8qIE11c3QgcGFzcyB2YWxpZCBzdGF0ZSBhcyBQUk9USU5GTyAqLworCWlmIChydGFbSUZMQV9QUk9USU5GTy0xXSkgeworCQl1OCAqcHN0YXRlID0gUlRBX0RBVEEocnRhW0lGTEFfUFJPVElORk8tMV0pOworCQluZXdfc3RhdGUgPSAqcHN0YXRlOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuZXdfc3RhdGUgPiBCUl9TVEFURV9CTE9DS0lORykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGaW5kIGJyaWRnZSBwb3J0ICovCisJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGlmbS0+aWZpX2luZGV4KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwID0gZGV2LT5icl9wb3J0OworCWlmICghcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBpZiBrZXJuZWwgU1RQIGlzIHJ1bm5pbmcsIGRvbid0IGFsbG93IGNoYW5nZXMgKi8KKwlpZiAocC0+YnItPnN0cF9lbmFibGVkKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRU5FVERPV047CisKKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSAmJiBuZXdfc3RhdGUgIT0gQlJfU1RBVEVfRElTQUJMRUQpCisJCXJldHVybiAtRU5FVERPV047CisKKwlwLT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwlicl9sb2dfc3RhdGUocCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBydG5ldGxpbmtfbGluayBicmlkZ2VfcnRuZXRsaW5rX3RhYmxlW1JUTV9OUl9NU0dUWVBFU10gPSB7CisJW1JUTV9HRVRMSU5LIC0gUlRNX0JBU0VdID0geyAuZHVtcGl0CT0gYnJfZHVtcF9pZmluZm8sIH0sCisJW1JUTV9TRVRMSU5LIC0gUlRNX0JBU0VdID0geyAuZG9pdCAgICAgID0gYnJfcnRtX3NldGxpbmssIH0sCit9OworCit2b2lkIF9faW5pdCBicl9uZXRsaW5rX2luaXQodm9pZCkKK3sKKwlydG5ldGxpbmtfbGlua3NbUEZfQlJJREdFXSA9IGJyaWRnZV9ydG5ldGxpbmtfdGFibGU7Cit9CisKK3ZvaWQgX19leGl0IGJyX25ldGxpbmtfZmluaSh2b2lkKQoreworCXJ0bmV0bGlua19saW5rc1tQRl9CUklER0VdID0gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9ub3RpZnkuYyBiL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKaW5kZXggYTQzYTljMS4uMjAyNzg0OSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9ub3RpZnkuYworKysgYi9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgogCkBAIC00OSw2ICs1MCw3IEBACiAKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCQlicl9mZGJfY2hhbmdlYWRkcihwLCBkZXYtPmRldl9hZGRyKTsKKwkJYnJfaWZpbmZvX25vdGlmeShSVE1fTkVXTElOSywgcCk7CiAJCWJyX3N0cF9yZWNhbGN1bGF0ZV9icmlkZ2VfaWQoYnIpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCA4NmVjZWE3Li5jNDkxZmIyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtMjksNyArMjksNyBAQAogCiAjZGVmaW5lIEJSX1BPUlRfREVCT1VOQ0UgKEhaLzEwKQogCi0jZGVmaW5lIEJSX1ZFUlNJT04JIjIuMSIKKyNkZWZpbmUgQlJfVkVSU0lPTgkiMi4yIgogCiB0eXBlZGVmIHN0cnVjdCBicmlkZ2VfaWQgYnJpZGdlX2lkOwogdHlwZWRlZiBzdHJ1Y3QgbWFjX2FkZHIgbWFjX2FkZHI7CkBAIC0xOTIsOCArMTkyLDEzIEBACiBleHRlcm4gaW50IGJyX2lvY3RsX2RldmljZWxlc3Nfc3R1Yih1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKIAogLyogYnJfbmV0ZmlsdGVyLmMgKi8KKyNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogZXh0ZXJuIGludCBicl9uZXRmaWx0ZXJfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGJyX25ldGZpbHRlcl9maW5pKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgYnJfbmV0ZmlsdGVyX2luaXQoKQkoMCkKKyNkZWZpbmUgYnJfbmV0ZmlsdGVyX2ZpbmkoKQlkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgogCiAvKiBicl9zdHAuYyAqLwogZXh0ZXJuIHZvaWQgYnJfbG9nX3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwpAQCAtMjMyLDYgKzIzNywxMSBAQAogZXh0ZXJuIHZvaWQgKCpicl9mZGJfcHV0X2hvb2spKHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZW50KTsKIAogCisvKiBicl9uZXRsaW5rLmMgKi8KK2V4dGVybiB2b2lkIGJyX25ldGxpbmtfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGJyX25ldGxpbmtfZmluaSh2b2lkKTsKK2V4dGVybiB2b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTsKKwogI2lmZGVmIENPTkZJR19TWVNGUwogLyogYnJfc3lzZnNfaWYuYyAqLwogZXh0ZXJuIHN0cnVjdCBzeXNmc19vcHMgYnJwb3J0X3N5c2ZzX29wczsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCmluZGV4IDIzZGVhMTQuLjE0Y2QwMjUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHBfaWYuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KIAogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJicl9wcml2YXRlX3N0cC5oIgpAQCAtODYsNiArODcsNyBAQAogdm9pZCBicl9zdHBfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCkKIHsKIAlicl9pbml0X3BvcnQocCk7CisJYnJfaWZpbmZvX25vdGlmeShSVE1fTkVXTElOSywgcCk7CiAJYnJfcG9ydF9zdGF0ZV9zZWxlY3Rpb24ocC0+YnIpOwogfQogCkBAIC05OSw2ICsxMDEsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBwb3J0ICVpKCVzKSBlbnRlcmluZyAlcyBzdGF0ZVxuIiwKIAkgICAgICAgYnItPmRldi0+bmFtZSwgcC0+cG9ydF9ubywgcC0+ZGV2LT5uYW1lLCAiZGlzYWJsZWQiKTsKIAorCWJyX2lmaW5mb19ub3RpZnkoUlRNX0RFTExJTkssIHApOworCiAJd2Fzcm9vdCA9IGJyX2lzX3Jvb3RfYnJpZGdlKGJyKTsKIAlicl9iZWNvbWVfZGVzaWduYXRlZF9wb3J0KHApOwogCXAtPnN0YXRlID0gQlJfU1RBVEVfRElTQUJMRUQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCmluZGV4IDc5ZmUxMmMuLmU5YmQyNDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKyBiL25ldC9jb3JlL01ha2VmaWxlCkBAIC0xNiwzICsxNiw0IEBACiBvYmotJChDT05GSUdfTkVUX1BLVEdFTikgKz0gcGt0Z2VuLm8KIG9iai0kKENPTkZJR19XSVJFTEVTU19FWFQpICs9IHdpcmVsZXNzLm8KIG9iai0kKENPTkZJR19ORVRQT0xMKSArPSBuZXRwb2xsLm8KK29iai0kKENPTkZJR19ORVRfRE1BKSArPSB1c2VyX2RtYS5vCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDJkY2U2NzMuLmFiMzlmZTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMTUsNiArMTE1LDcgQEAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KIAogLyoKICAqCVRoZSBsaXN0IG9mIHBhY2tldCB0eXBlcyB3ZSB3aWxsIHJlY2VpdmUgKGFzIG9wcG9zZWQgdG8gZGlzY2FyZCkKQEAgLTEyNyw3ICsxMjgsNyBAQAogICogICAgICAgICAgICAgc3VyZSB3aGljaCBzaG91bGQgZ28gZmlyc3QsIGJ1dCBJIGJldCBpdCB3b24ndCBtYWtlIG11Y2gKICAqICAgICAgICAgICAgIGRpZmZlcmVuY2UgaWYgd2UgYXJlIHJ1bm5pbmcgVkxBTnMuICBUaGUgZ29vZCBuZXdzIGlzIHRoYXQKICAqICAgICAgICAgICAgIHRoaXMgcHJvdG9jb2wgd29uJ3QgYmUgaW4gdGhlIGxpc3QgdW5sZXNzIGNvbXBpbGVkIGluLCBzbwotICogICAgICAgICAgICAgdGhlIGF2ZXJhZ2UgdXNlciAody9vdXQgVkxBTnMpIHdpbGwgbm90IGJlIGFkdmVyc2x5IGFmZmVjdGVkLgorICogICAgICAgICAgICAgdGhlIGF2ZXJhZ2UgdXNlciAody9vdXQgVkxBTnMpIHdpbGwgbm90IGJlIGFkdmVyc2VseSBhZmZlY3RlZC4KICAqICAgICAgICAgICAgIC0tQkxHCiAgKgogICoJCTA4MDAJSVAKQEAgLTE0OCw4ICsxNDksMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHB0eXBlX2Jhc2VbMTZdOwkvKiAxNiB3YXkgaGFzaGVkIGxpc3QgKi8KIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHB0eXBlX2FsbDsJCS8qIFRhcHMgKi8KIAorI2lmZGVmIENPTkZJR19ORVRfRE1BCitzdGF0aWMgc3RydWN0IGRtYV9jbGllbnQgKm5ldF9kbWFfY2xpZW50Oworc3RhdGljIHVuc2lnbmVkIGludCBuZXRfZG1hX2NvdW50Oworc3RhdGljIHNwaW5sb2NrX3QgbmV0X2RtYV9ldmVudF9sb2NrOworI2VuZGlmCisKIC8qCi0gKiBUaGUgQGRldl9iYXNlIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IEBkZXZfYmFzZV9sb2NrIGFuZCB0aGUgcnRsbgorICogVGhlIEBkZXZfYmFzZSBsaXN0IGlzIHByb3RlY3RlZCBieSBAZGV2X2Jhc2VfbG9jayBhbmQgdGhlIHJ0bmwKICAqIHNlbWFwaG9yZS4KICAqCiAgKiBQdXJlIHJlYWRlcnMgaG9sZCBkZXZfYmFzZV9sb2NrIGZvciByZWFkaW5nLgpAQCAtNjQxLDEwICs2NDgsMTIgQEAKICAqCUBuYW1lOiBuYW1lIGZvcm1hdCBzdHJpbmcKICAqCiAgKglQYXNzZWQgYSBmb3JtYXQgc3RyaW5nIC0gZWcgImx0JWQiIGl0IHdpbGwgdHJ5IGFuZCBmaW5kIGEgc3VpdGFibGUKLSAqCWlkLiBOb3QgZWZmaWNpZW50IGZvciBtYW55IGRldmljZXMsIG5vdCBjYWxsZWQgYSBsb3QuIFRoZSBjYWxsZXIKLSAqCW11c3QgaG9sZCB0aGUgZGV2X2Jhc2Ugb3IgcnRubCBsb2NrIHdoaWxlIGFsbG9jYXRpbmcgdGhlIG5hbWUgYW5kCi0gKglhZGRpbmcgdGhlIGRldmljZSBpbiBvcmRlciB0byBhdm9pZCBkdXBsaWNhdGVzLiBSZXR1cm5zIHRoZSBudW1iZXIKLSAqCW9mIHRoZSB1bml0IGFzc2lnbmVkIG9yIGEgbmVnYXRpdmUgZXJybm8gY29kZS4KKyAqCWlkLiBJdCBzY2FucyBsaXN0IG9mIGRldmljZXMgdG8gYnVpbGQgdXAgYSBmcmVlIG1hcCwgdGhlbiBjaG9vc2VzCisgKgl0aGUgZmlyc3QgZW1wdHkgc2xvdC4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGRldl9iYXNlIG9yIHJ0bmwgbG9jaworICoJd2hpbGUgYWxsb2NhdGluZyB0aGUgbmFtZSBhbmQgYWRkaW5nIHRoZSBkZXZpY2UgaW4gb3JkZXIgdG8gYXZvaWQKKyAqCWR1cGxpY2F0ZXMuCisgKglMaW1pdGVkIHRvIGJpdHNfcGVyX2J5dGUgKiBwYWdlIHNpemUgZGV2aWNlcyAoaWUgMzJLIG9uIG1vc3QgcGxhdGZvcm1zKS4KKyAqCVJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgdW5pdCBhc3NpZ25lZCBvciBhIG5lZ2F0aXZlIGVycm5vIGNvZGUuCiAgKi8KIAogaW50IGRldl9hbGxvY19uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC03NDQsNyArNzUzLDcgQEAKIH0KIAogLyoqCi0gKgluZXRkZXZfZmVhdHVyZXNfY2hhbmdlIC0gZGV2aWNlIGNoYW5nZXMgZmF0dXJlcworICoJbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZSAtIGRldmljZSBjaGFuZ2VzIGZlYXR1cmVzCiAgKglAZGV2OiBkZXZpY2UgdG8gY2F1c2Ugbm90aWZpY2F0aW9uCiAgKgogICoJQ2FsbGVkIHRvIGluZGljYXRlIGEgZGV2aWNlIGhhcyBjaGFuZ2VkIGZlYXR1cmVzLgpAQCAtMTIxMyw3NSArMTIyMiwxNSBAQAogI2RlZmluZSBpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpCSgwKQogI2VuZGlmCiAKLS8qIEtlZXAgaGVhZCB0aGUgc2FtZTogcmVwbGFjZSBkYXRhICovCi1pbnQgX19za2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKQotewotCXVuc2lnbmVkIGludCBzaXplOwotCXU4ICpkYXRhOwotCWxvbmcgb2Zmc2V0OwotCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKm5pbmZvOwotCWludCBoZWFkZXJsZW4gPSBza2ItPmRhdGEgLSBza2ItPmhlYWQ7Ci0JaW50IGV4cGFuZCA9IChza2ItPnRhaWwgKyBza2ItPmRhdGFfbGVuKSAtIHNrYi0+ZW5kOwotCi0JaWYgKHNrYl9zaGFyZWQoc2tiKSkKLQkJQlVHKCk7Ci0KLQlpZiAoZXhwYW5kIDw9IDApCi0JCWV4cGFuZCA9IDA7Ci0KLQlzaXplID0gc2tiLT5lbmQgLSBza2ItPmhlYWQgKyBleHBhbmQ7Ci0Jc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemUpOwotCWRhdGEgPSBrbWFsbG9jKHNpemUgKyBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyksIGdmcF9tYXNrKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogQ29weSBlbnRpcmUgdGhpbmcgKi8KLQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIC1oZWFkZXJsZW4sIGRhdGEsIGhlYWRlcmxlbiArIHNrYi0+bGVuKSkKLQkJQlVHKCk7Ci0KLQkvKiBTZXQgdXAgc2hpbmZvICovCi0JbmluZm8gPSAoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyopKGRhdGEgKyBzaXplKTsKLQlhdG9taWNfc2V0KCZuaW5mby0+ZGF0YXJlZiwgMSk7Ci0JbmluZm8tPnRzb19zaXplID0gc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZTsKLQluaW5mby0+dHNvX3NlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPnRzb19zZWdzOwotCW5pbmZvLT5ucl9mcmFncyA9IDA7Ci0JbmluZm8tPmZyYWdfbGlzdCA9IE5VTEw7Ci0KLQkvKiBPZmZzZXQgYmV0d2VlbiB0aGUgdHdvIGluIGJ5dGVzICovCi0Jb2Zmc2V0ID0gZGF0YSAtIHNrYi0+aGVhZDsKLQotCS8qIEZyZWUgb2xkIGRhdGEuICovCi0Jc2tiX3JlbGVhc2VfZGF0YShza2IpOwotCi0Jc2tiLT5oZWFkID0gZGF0YTsKLQlza2ItPmVuZCAgPSBkYXRhICsgc2l6ZTsKLQotCS8qIFNldCB1cCBuZXcgcG9pbnRlcnMgKi8KLQlza2ItPmgucmF3ICAgKz0gb2Zmc2V0OwotCXNrYi0+bmgucmF3ICArPSBvZmZzZXQ7Ci0Jc2tiLT5tYWMucmF3ICs9IG9mZnNldDsKLQlza2ItPnRhaWwgICAgKz0gb2Zmc2V0OwotCXNrYi0+ZGF0YSAgICArPSBvZmZzZXQ7Ci0KLQkvKiBXZSBhcmUgbm8gbG9uZ2VyIGEgY2xvbmUsIGV2ZW4gaWYgd2Ugd2VyZS4gKi8KLQlza2ItPmNsb25lZCAgICA9IDA7Ci0KLQlza2ItPnRhaWwgICAgICs9IHNrYi0+ZGF0YV9sZW47Ci0Jc2tiLT5kYXRhX2xlbiAgPSAwOwotCXJldHVybiAwOwotfQotCiAjZGVmaW5lIEhBUkRfVFhfTE9DSyhkZXYsIGNwdSkgewkJCVwKIAlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xMVFgpID09IDApIHsJXAotCQlzcGluX2xvY2soJmRldi0+eG1pdF9sb2NrKTsJCVwKLQkJZGV2LT54bWl0X2xvY2tfb3duZXIgPSBjcHU7CQlcCisJCW5ldGlmX3R4X2xvY2soZGV2KTsJCQlcCiAJfQkJCQkJCVwKIH0KIAogI2RlZmluZSBIQVJEX1RYX1VOTE9DSyhkZXYpIHsJCQkJXAogCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTExUWCkgPT0gMCkgewlcCi0JCWRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7CQlcCi0JCXNwaW5fdW5sb2NrKCZkZXYtPnhtaXRfbG9jayk7CQlcCisJCW5ldGlmX3R4X3VubG9jayhkZXYpOwkJCVwKIAl9CQkJCQkJXAogfQogCkBAIC0xMzE5LDcgKzEyNjgsNyBAQAogCiAJaWYgKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0ICYmCiAJICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRlJBR0xJU1QpICYmCi0JICAgIF9fc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpKQorCSAgICBfX3NrYl9saW5lYXJpemUoc2tiKSkKIAkJZ290byBvdXRfa2ZyZWVfc2tiOwogCiAJLyogRnJhZ21lbnRlZCBza2IgaXMgbGluZWFyaXplZCBpZiBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBTRywKQEAgLTEzMjgsMTQgKzEyNzcsMTQgQEAKIAkgKi8KIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJgogCSAgICAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykgfHwgaWxsZWdhbF9oaWdoZG1hKGRldiwgc2tiKSkgJiYKLQkgICAgX19za2JfbGluZWFyaXplKHNrYiwgR0ZQX0FUT01JQykpCisJICAgIF9fc2tiX2xpbmVhcml6ZShza2IpKQogCQlnb3RvIG91dF9rZnJlZV9za2I7CiAKIAkvKiBJZiBwYWNrZXQgaXMgbm90IGNoZWNrc3VtbWVkIGFuZCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydAogCSAqIGNoZWNrc3VtbWluZyBmb3IgdGhpcyBwcm90b2NvbCwgY29tcGxldGUgY2hlY2tzdW1taW5nIGhlcmUuCiAJICovCiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXICYmCi0JICAgICghKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9OT19DU1VNKSkgJiYKKwkgICAgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR0VOX0NTVU0pICYmCiAJICAgICAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSB8fAogCSAgICAgIHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSkpCiAJICAgICAgCWlmIChza2JfY2hlY2tzdW1faGVscChza2IsIDApKQpAQCAtMTM4MCw4ICsxMzI5LDggQEAKIAkvKiBUaGUgZGV2aWNlIGhhcyBubyBxdWV1ZS4gQ29tbW9uIGNhc2UgZm9yIHNvZnR3YXJlIGRldmljZXM6CiAJICAgbG9vcGJhY2ssIGFsbCB0aGUgc29ydHMgb2YgdHVubmVscy4uLgogCi0JICAgUmVhbGx5LCBpdCBpcyB1bmxpa2VseSB0aGF0IHhtaXRfbG9jayBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSBoZXJlLgotCSAgIChmLmUuIGxvb3BiYWNrIGFuZCBJUCB0dW5uZWxzIGFyZSBjbGVhbiBpZ25vcmluZyBzdGF0aXN0aWNzCisJICAgUmVhbGx5LCBpdCBpcyB1bmxpa2VseSB0aGF0IG5ldGlmX3R4X2xvY2sgcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkKKwkgICBoZXJlLiAgKGYuZS4gbG9vcGJhY2sgYW5kIElQIHR1bm5lbHMgYXJlIGNsZWFuIGlnbm9yaW5nIHN0YXRpc3RpY3MKIAkgICBjb3VudGVycy4pCiAJICAgSG93ZXZlciwgaXQgaXMgcG9zc2libGUsIHRoYXQgdGhleSByZWx5IG9uIHByb3RlY3Rpb24KIAkgICBtYWRlIGJ5IHVzIGhlcmUuCkBAIC0xODQ0LDYgKzE3OTMsMTkgQEAKIAkJfQogCX0KIG91dDoKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCS8qCisJICogVGhlcmUgbWF5IG5vdCBiZSBhbnkgbW9yZSBza19idWZmcyBjb21pbmcgcmlnaHQgbm93LCBzbyBwdXNoCisJICogYW55IHBlbmRpbmcgRE1BIGNvcGllcyB0byBoYXJkd2FyZQorCSAqLworCWlmIChuZXRfZG1hX2NsaWVudCkgeworCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2hhbiwgJm5ldF9kbWFfY2xpZW50LT5jaGFubmVscywgY2xpZW50X25vZGUpCisJCQlkbWFfYXN5bmNfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKyNlbmRpZgogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlyZXR1cm47CiAKQEAgLTIxOTYsNyArMjE1OCw3IEBACiAgKglAZGV2OiBkZXZpY2UKICAqCUBpbmM6IG1vZGlmaWVyCiAgKgotICoJQWRkIG9yIHJlbW92ZSBwcm9tc2ljdWl0eSBmcm9tIGEgZGV2aWNlLiBXaGlsZSB0aGUgY291bnQgaW4gdGhlIGRldmljZQorICoJQWRkIG9yIHJlbW92ZSBwcm9taXNjdWl0eSBmcm9tIGEgZGV2aWNlLiBXaGlsZSB0aGUgY291bnQgaW4gdGhlIGRldmljZQogICoJcmVtYWlucyBhYm92ZSB6ZXJvIHRoZSBpbnRlcmZhY2UgcmVtYWlucyBwcm9taXNjdW91cy4gT25jZSBpdCBoaXRzIHplcm8KICAqCXRoZSBkZXZpY2UgcmV2ZXJ0cyBiYWNrIHRvIG5vcm1hbCBmaWx0ZXJpbmcgb3BlcmF0aW9uLiBBIG5lZ2F0aXZlIGluYwogICoJdmFsdWUgaXMgdXNlZCB0byBkcm9wIHByb21pc2N1aXR5IG9uIHRoZSBkZXZpY2UuCkBAIC0yNzgzLDcgKzI3NDUsNyBAQAogCUJVR19PTihkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5JTklUSUFMSVpFRCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmZGV2LT54bWl0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXYtPl94bWl0X2xvY2spOwogCWRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+aW5ncmVzc19sb2NrKTsKQEAgLTI4MjcsOSArMjc4OSw3IEBACiAKIAkvKiBGaXggaWxsZWdhbCBTRytDU1VNIGNvbWJpbmF0aW9ucy4gKi8KIAlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJgotCSAgICAhKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNIHwKLQkJCSAgICAgICBORVRJRl9GX05PX0NTVU0gfAotCQkJICAgICAgIE5FVElGX0ZfSFdfQ1NVTSkpKSB7CisJICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKSB7CiAJCXByaW50aygiJXM6IERyb3BwaW5nIE5FVElGX0ZfU0cgc2luY2Ugbm8gY2hlY2tzdW0gZmVhdHVyZS5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwpAQCAtMzEyMiw3ICszMDgyLDcgQEAKIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfU1lTRlMKLQkvKiAgQ29tcGF0aWFibGl0eSB3aXRoIGVycm9yIGhhbmRsaW5nIGluIGRyaXZlcnMgKi8KKwkvKiAgQ29tcGF0aWJpbGl0eSB3aXRoIGVycm9yIGhhbmRsaW5nIGluIGRyaXZlcnMgKi8KIAlpZiAoZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1VOSU5JVElBTElaRUQpIHsKIAkJa2ZyZWUoKGNoYXIgKilkZXYgLSBkZXYtPnBhZGRlZCk7CiAJCXJldHVybjsKQEAgLTMyOTgsNiArMzI1OCw4OCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKy8qKgorICogbmV0X2RtYV9yZWJhbGFuY2UgLQorICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGFsbG9jYXRlZCB0byB0aGUgbmV0X2RtYV9jbGllbnQKKyAqIGNoYW5nZXMuICBUaGUgbmV0X2RtYV9jbGllbnQgdHJpZXMgdG8gaGF2ZSBvbmUgRE1BIGNoYW5uZWwgcGVyIENQVS4KKyAqLworc3RhdGljIHZvaWQgbmV0X2RtYV9yZWJhbGFuY2Uodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1LCBpLCBuOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKworCWxvY2tfY3B1X2hvdHBsdWcoKTsKKworCWlmIChuZXRfZG1hX2NvdW50ID09IDApIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCQlyY3VfYXNzaWduX3BvaW50ZXIocGVyX2NwdShzb2Z0bmV0X2RhdGEubmV0X2RtYSwgY3B1KSwgTlVMTCk7CisJCXVubG9ja19jcHVfaG90cGx1ZygpOworCQlyZXR1cm47CisJfQorCisJaSA9IDA7CisJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZuZXRfZG1hX2NsaWVudC0+Y2hhbm5lbHMsIGNsaWVudF9ub2RlKSB7CisJCW4gPSAoKG51bV9vbmxpbmVfY3B1cygpIC8gbmV0X2RtYV9jb3VudCkKKwkJICAgKyAoaSA8IChudW1fb25saW5lX2NwdXMoKSAlIG5ldF9kbWFfY291bnQpID8gMSA6IDApKTsKKworCQl3aGlsZShuKSB7CisJCQlwZXJfY3B1KHNvZnRuZXRfZGF0YS5uZXRfZG1hLCBjcHUpID0gY2hhbjsKKwkJCWNwdSA9IG5leHRfY3B1KGNwdSwgY3B1X29ubGluZV9tYXApOworCQkJbi0tOworCQl9CisJCWkrKzsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKK30KKworLyoqCisgKiBuZXRkZXZfZG1hX2V2ZW50IC0gZXZlbnQgY2FsbGJhY2sgZm9yIHRoZSBuZXRfZG1hX2NsaWVudAorICogQGNsaWVudDogc2hvdWxkIGFsd2F5cyBiZSBuZXRfZG1hX2NsaWVudAorICogQGNoYW46CisgKiBAZXZlbnQ6CisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9kbWFfZXZlbnQoc3RydWN0IGRtYV9jbGllbnQgKmNsaWVudCwgc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCWVudW0gZG1hX2V2ZW50IGV2ZW50KQoreworCXNwaW5fbG9jaygmbmV0X2RtYV9ldmVudF9sb2NrKTsKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBETUFfUkVTT1VSQ0VfQURERUQ6CisJCW5ldF9kbWFfY291bnQrKzsKKwkJbmV0X2RtYV9yZWJhbGFuY2UoKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfUkVTT1VSQ0VfUkVNT1ZFRDoKKwkJbmV0X2RtYV9jb3VudC0tOworCQluZXRfZG1hX3JlYmFsYW5jZSgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJm5ldF9kbWFfZXZlbnRfbG9jayk7Cit9CisKKy8qKgorICogbmV0ZGV2X2RtYV9yZWdpc2VyIC0gcmVnaXN0ZXIgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFzIGEgRE1BIGNsaWVudAorICovCitzdGF0aWMgaW50IF9faW5pdCBuZXRkZXZfZG1hX3JlZ2lzdGVyKHZvaWQpCit7CisJc3Bpbl9sb2NrX2luaXQoJm5ldF9kbWFfZXZlbnRfbG9jayk7CisJbmV0X2RtYV9jbGllbnQgPSBkbWFfYXN5bmNfY2xpZW50X3JlZ2lzdGVyKG5ldGRldl9kbWFfZXZlbnQpOworCWlmIChuZXRfZG1hX2NsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRtYV9hc3luY19jbGllbnRfY2hhbl9yZXF1ZXN0KG5ldF9kbWFfY2xpZW50LCBudW1fb25saW5lX2NwdXMoKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCitzdGF0aWMgaW50IF9faW5pdCBuZXRkZXZfZG1hX3JlZ2lzdGVyKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KKyNlbmRpZiAvKiBDT05GSUdfTkVUX0RNQSAqLwogCiAvKgogICoJSW5pdGlhbGl6ZSB0aGUgREVWIG1vZHVsZS4gQXQgYm9vdCB0aW1lIHRoaXMgd2Fsa3MgdGhlIGRldmljZSBsaXN0IGFuZApAQCAtMzM1MSw2ICszMzkzLDggQEAKIAkJYXRvbWljX3NldCgmcXVldWUtPmJhY2tsb2dfZGV2LnJlZmNudCwgMSk7CiAJfQogCisJbmV0ZGV2X2RtYV9yZWdpc3RlcigpOworCiAJZGV2X2Jvb3RfcGhhc2UgPSAwOwogCiAJb3Blbl9zb2Z0aXJxKE5FVF9UWF9TT0ZUSVJRLCBuZXRfdHhfYWN0aW9uLCBOVUxMKTsKQEAgLTMzNjksNyArMzQxMyw2IEBACiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9pbmRleCk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9uYW1lKTsKIEVYUE9SVF9TWU1CT0woX19kZXZfcmVtb3ZlX3BhY2spOwotRVhQT1JUX1NZTUJPTChfX3NrYl9saW5lYXJpemUpOwogRVhQT1JUX1NZTUJPTChkZXZfdmFsaWRfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKGRldl9hZGRfcGFjayk7CiBFWFBPUlRfU1lNQk9MKGRldl9hbGxvY19uYW1lKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9tY2FzdC5jIGIvbmV0L2NvcmUvZGV2X21jYXN0LmMKaW5kZXggMDVkNjA4NTAuLmM1N2Q4ODcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldl9tY2FzdC5jCisrKyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCkBAIC02Miw3ICs2Miw3IEBACiAgKglEZXZpY2UgbWMgbGlzdHMgYXJlIGNoYW5nZWQgYnkgYmggYXQgbGVhc3QgaWYgSVB2NiBpcyBlbmFibGVkLAogICoJc28gdGhhdCBpdCBtdXN0IGJlIGJoIHByb3RlY3RlZC4KICAqCi0gKglXZSBibG9jayBhY2Nlc3NlcyB0byBkZXZpY2UgbWMgZmlsdGVycyB3aXRoIGRldi0+eG1pdF9sb2NrLgorICoJV2UgYmxvY2sgYWNjZXNzZXMgdG8gZGV2aWNlIG1jIGZpbHRlcnMgd2l0aCBuZXRpZl90eF9sb2NrLgogICovCiAKIC8qCkBAIC05Myw5ICs5Myw5IEBACiAKIHZvaWQgZGV2X21jX3VwbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAlfX2Rldl9tY191cGxvYWQoZGV2KTsKLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogfQogCiAvKgpAQCAtMTA3LDcgKzEwNyw3IEBACiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGRldl9tY19saXN0ICpkbWksICoqZG1pcDsKIAotCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAogCWZvciAoZG1pcCA9ICZkZXYtPm1jX2xpc3Q7IChkbWkgPSAqZG1pcCkgIT0gTlVMTDsgZG1pcCA9ICZkbWktPm5leHQpIHsKIAkJLyoKQEAgLTEzOSwxMyArMTM5LDEzIEBACiAJCQkgKi8KIAkJCV9fZGV2X21jX3VwbG9hZChkZXYpOwogCQkJCi0JCQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCQkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAllcnIgPSAtRU5PRU5UOwogZG9uZToKLQlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJZG1pMSA9IGttYWxsb2Moc2l6ZW9mKCpkbWkpLCBHRlBfQVRPTUlDKTsKIAotCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAlmb3IgKGRtaSA9IGRldi0+bWNfbGlzdDsgZG1pICE9IE5VTEw7IGRtaSA9IGRtaS0+bmV4dCkgewogCQlpZiAobWVtY21wKGRtaS0+ZG1pX2FkZHIsIGFkZHIsIGRtaS0+ZG1pX2FkZHJsZW4pID09IDAgJiYKIAkJICAgIGRtaS0+ZG1pX2FkZHJsZW4gPT0gYWxlbikgewpAQCAtMTc2LDcgKzE3Niw3IEBACiAJfQogCiAJaWYgKChkbWkgPSBkbWkxKSA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtY3B5KGRtaS0+ZG1pX2FkZHIsIGFkZHIsIGFsZW4pOwpAQCAtMTg5LDExICsxODksMTEgQEAKIAogCV9fZGV2X21jX3VwbG9hZChkZXYpOwogCQotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJcmV0dXJuIDA7CiAKIGRvbmU6Ci0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAlrZnJlZShkbWkxKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjA0LDcgKzIwNCw3IEBACiAKIHZvaWQgZGV2X21jX2Rpc2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCiAJd2hpbGUgKGRldi0+bWNfbGlzdCAhPSBOVUxMKSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqdG1wID0gZGV2LT5tY19saXN0OwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJfQogCWRldi0+bWNfY291bnQgPSAwOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC0yNTAsNyArMjUwLDcgQEAKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHY7CiAKLQlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJZm9yIChtID0gZGV2LT5tY19saXN0OyBtOyBtID0gbS0+bmV4dCkgewogCQlpbnQgaTsKIApAQCAtMjYyLDcgKzI2Miw3IEBACiAKIAkJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IGU2Zjc2MTAuLjMzY2U3ZWQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogdTMyIGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9IV19DU1VNKSkgIT0gMDsKKwlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0FMTF9DU1VNKSAhPSAwOwogfQogCiBpbnQgZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKQEAgLTU1MSw5ICs1NTEsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChlZGF0YS5kYXRhICYmIAotCSAgICAhKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNIHwKLQkJCSAgICAgICBORVRJRl9GX05PX0NTVU0gfAotCQkJICAgICAgIE5FVElGX0ZfSFdfQ1NVTSkpKQorCSAgICAhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0FMTF9DU1VNKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gX19ldGh0b29sX3NldF9zZyhkZXYsIGVkYXRhLmRhdGEpOwpAQCAtNTkxLDcgKzU4OSw3IEBACiAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfdWZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKIHsKLQlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YSA9IHsgRVRIVE9PTF9HVFNPIH07CisJc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGEgPSB7IEVUSFRPT0xfR1VGTyB9OwogCiAJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfdWZvKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC02MDAsNiArNTk4LDcgQEAKIAkJIHJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQorCiBzdGF0aWMgaW50IGV0aHRvb2xfc2V0X3VmbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGE7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggZThlMDVjZS4uOWNiNzgxOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtMjczLDI0ICsyNzMsMjEgQEAKIAogCWRvIHsKIAkJbnBpbmZvLT50cmllcy0tOwotCQlzcGluX2xvY2soJm5wLT5kZXYtPnhtaXRfbG9jayk7Ci0JCW5wLT5kZXYtPnhtaXRfbG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJbmV0aWZfdHhfbG9jayhucC0+ZGV2KTsKIAogCQkvKgogCQkgKiBuZXR3b3JrIGRyaXZlcnMgZG8gbm90IGV4cGVjdCB0byBiZSBjYWxsZWQgaWYgdGhlIHF1ZXVlIGlzCiAJCSAqIHN0b3BwZWQuCiAJCSAqLwogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChucC0+ZGV2KSkgewotCQkJbnAtPmRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7Ci0JCQlzcGluX3VubG9jaygmbnAtPmRldi0+eG1pdF9sb2NrKTsKKwkJCW5ldGlmX3R4X3VubG9jayhucC0+ZGV2KTsKIAkJCW5ldHBvbGxfcG9sbChucCk7CiAJCQl1ZGVsYXkoNTApOwogCQkJY29udGludWU7CiAJCX0KIAogCQlzdGF0dXMgPSBucC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBucC0+ZGV2KTsKLQkJbnAtPmRldi0+eG1pdF9sb2NrX293bmVyID0gLTE7Ci0JCXNwaW5fdW5sb2NrKCZucC0+ZGV2LT54bWl0X2xvY2spOworCQluZXRpZl90eF91bmxvY2sobnAtPmRldik7CiAKIAkJLyogc3VjY2VzcyAqLwogCQlpZighc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGMyM2U5YzAuLjY3ZWQxNGQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yODk3LDcgKzI4OTcsNyBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2JoKCZvZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgob2Rldik7CiAJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKG9kZXYpKSB7CiAKIAkJYXRvbWljX2luYygmKHBrdF9kZXYtPnNrYi0+dXNlcnMpKTsKQEAgLTI5NDIsNyArMjk0Miw3IEBACiAJCXBrdF9kZXYtPm5leHRfdHhfbnMgPSAwOwogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZvZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X3VubG9ja19iaChvZGV2KTsKIAogCS8qIElmIHBrdF9kZXYtPmNvdW50IGlzIHplcm8sIHRoZW4gcnVuIGZvcmV2ZXIgKi8KIAlpZiAoKHBrdF9kZXYtPmNvdW50ICE9IDApICYmIChwa3RfZGV2LT5zb2ZhciA+PSBwa3RfZGV2LT5jb3VudCkpIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggZmIzNzcwZi4uYmI3MjEwZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCW4tPnRjX3ZlcmQgPSBDTFJfVENfTVVOR0VEKG4tPnRjX3ZlcmQpOwogCUMoaW5wdXRfZGV2KTsKICNlbmRpZgotCisJc2tiX2NvcHlfc2VjbWFyayhuLCBza2IpOwogI2VuZGlmCiAJQyh0cnVlc2l6ZSk7CiAJYXRvbWljX3NldCgmbi0+dXNlcnMsIDEpOwpAQCAtNTI2LDYgKzUyNiw3IEBACiAjZW5kaWYKIAluZXctPnRjX2luZGV4CT0gb2xkLT50Y19pbmRleDsKICNlbmRpZgorCXNrYl9jb3B5X3NlY21hcmsobmV3LCBvbGQpOwogCWF0b21pY19zZXQoJm5ldy0+dXNlcnMsIDEpOwogCXNrYl9zaGluZm8obmV3KS0+dHNvX3NpemUgPSBza2Jfc2hpbmZvKG9sZCktPnRzb19zaXplOwogCXNrYl9zaGluZm8obmV3KS0+dHNvX3NlZ3MgPSBza2Jfc2hpbmZvKG9sZCktPnRzb19zZWdzOwpAQCAtODAwLDEyICs4MDEsMTAgQEAKIAlyZXR1cm4gbnNrYjsKIH0JCiAgCi0vKiBUcmltcyBza2IgdG8gbGVuZ3RoIGxlbi4gSXQgY2FuIGNoYW5nZSBza2IgcG9pbnRlcnMsIGlmICJyZWFsbG9jIiBpcyAxLgotICogSWYgcmVhbGxvYz09MCBhbmQgdHJpbW1pbmcgaXMgaW1wb3NzaWJsZSB3aXRob3V0IGNoYW5nZSBvZiBkYXRhLAotICogaXQgaXMgQlVHKCkuCisvKiBUcmltcyBza2IgdG8gbGVuZ3RoIGxlbi4gSXQgY2FuIGNoYW5nZSBza2IgcG9pbnRlcnMuCiAgKi8KIAotaW50IF9fX3Bza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgcmVhbGxvYykKK2ludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgb2Zmc2V0ID0gc2tiX2hlYWRsZW4oc2tiKTsKIAlpbnQgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKQEAgLTgxNSw3ICs4MTQsNiBAQAogCQlpbnQgZW5kID0gb2Zmc2V0ICsgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplOwogCQlpZiAoZW5kID4gbGVuKSB7CiAJCQlpZiAoc2tiX2Nsb25lZChza2IpKSB7Ci0JCQkJQlVHX09OKCFyZWFsbG9jKTsKIAkJCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCBlZDJhZmRiLi41ZDgyMGMzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC04MzIsNiArODMyLDkgQEAKIAkJYXRvbWljX3NldCgmbmV3c2stPnNrX29tZW1fYWxsb2MsIDApOwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZuZXdzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm5ld3NrLT5za193cml0ZV9xdWV1ZSk7CisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbmV3c2stPnNrX2FzeW5jX3dhaXRfcXVldWUpOworI2VuZGlmCiAKIAkJcndsb2NrX2luaXQoJm5ld3NrLT5za19kc3RfbG9jayk7CiAJCXJ3bG9ja19pbml0KCZuZXdzay0+c2tfY2FsbGJhY2tfbG9jayk7CkBAIC0xMzgzLDYgKzEzODYsOSBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZzay0+c2tfd3JpdGVfcXVldWUpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNrLT5za19lcnJvcl9xdWV1ZSk7CisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwlza2JfcXVldWVfaGVhZF9pbml0KCZzay0+c2tfYXN5bmNfd2FpdF9xdWV1ZSk7CisjZW5kaWYKIAogCXNrLT5za19zZW5kX2hlYWQJPQlOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS91c2VyX2RtYS5jIGIvbmV0L2NvcmUvdXNlcl9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2M5OGRiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvdXNlcl9kbWEuYwpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodChjKSAyMDA0IC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIGJhc2VkIG9uIG5ldC9jb3JlL2RhdGFncmFtLmMgYW5kIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKy8qCisgKiBUaGlzIGNvZGUgYWxsb3dzIHRoZSBuZXQgc3RhY2sgdG8gbWFrZSB1c2Ugb2YgYSBETUEgZW5naW5lIGZvcgorICogc2tiIHRvIGlvdmVjIGNvcGllcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+IC8qIGZvciBCVUdfVFJBUCAqLworI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2RlZmluZSBORVRfRE1BX0RFRkFVTFRfQ09QWUJSRUFLIDQwOTYKKworaW50IHN5c2N0bF90Y3BfZG1hX2NvcHlicmVhayA9IE5FVF9ETUFfREVGQVVMVF9DT1BZQlJFQUs7CisKKy8qKgorICoJZG1hX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjIC0gQ29weSBhIGRhdGFncmFtIHRvIGFuIGlvdmVjLgorICoJQHNrYiAtIGJ1ZmZlciB0byBjb3B5CisgKglAb2Zmc2V0IC0gb2Zmc2V0IGluIHRoZSBidWZmZXIgdG8gc3RhcnQgY29weWluZyBmcm9tCisgKglAaW92ZWMgLSBpbyB2ZWN0b3IgdG8gY29weSB0bworICoJQGxlbiAtIGFtb3VudCBvZiBkYXRhIHRvIGNvcHkgZnJvbSBidWZmZXIgdG8gaW92ZWMKKyAqCUBwaW5uZWRfbGlzdCAtIGxvY2tlZCBpb3ZlYyBidWZmZXIgZGF0YQorICoKKyAqCU5vdGU6IHRoZSBpb3ZlYyBpcyBtb2RpZmllZCBkdXJpbmcgdGhlIGNvcHkuCisgKi8KK2ludCBkbWFfc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgc3RydWN0IGlvdmVjICp0bywKKwkJCXNpemVfdCBsZW4sIHN0cnVjdCBkbWFfcGlubmVkX2xpc3QgKnBpbm5lZF9saXN0KQoreworCWludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7CisJaW50IGksIGNvcHkgPSBzdGFydCAtIG9mZnNldDsKKwlkbWFfY29va2llX3QgY29va2llID0gMDsKKworCS8qIENvcHkgaGVhZGVyLiAqLworCWlmIChjb3B5ID4gMCkgeworCQlpZiAoY29weSA+IGxlbikKKwkJCWNvcHkgPSBsZW47CisJCWNvb2tpZSA9IGRtYV9tZW1jcHlfdG9faW92ZWMoY2hhbiwgdG8sIHBpbm5lZF9saXN0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5kYXRhICsgb2Zmc2V0LCBjb3B5KTsKKwkJaWYgKGNvb2tpZSA8IDApCisJCQlnb3RvIGZhdWx0OworCQlsZW4gLT0gY29weTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBlbmQ7CisJCW9mZnNldCArPSBjb3B5OworCX0KKworCS8qIENvcHkgcGFnZWQgYXBwZW5kaXguIEhtbS4uLiB3aHkgZG9lcyB0aGlzIGxvb2sgc28gY29tcGxpY2F0ZWQ/ICovCisJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQlpbnQgZW5kOworCisJCUJVR19UUkFQKHN0YXJ0IDw9IG9mZnNldCArIGxlbik7CisKKwkJZW5kID0gc3RhcnQgKyBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CisJCWNvcHkgPSBlbmQgLSBvZmZzZXQ7CisJCWlmICgoY29weSA9IGVuZCAtIG9mZnNldCkgPiAwKSB7CisJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZyYWctPnBhZ2U7CisKKwkJCWlmIChjb3B5ID4gbGVuKQorCQkJCWNvcHkgPSBsZW47CisKKwkJCWNvb2tpZSA9IGRtYV9tZW1jcHlfcGdfdG9faW92ZWMoY2hhbiwgdG8sIHBpbm5lZF9saXN0LCBwYWdlLAorCQkJCQlmcmFnLT5wYWdlX29mZnNldCArIG9mZnNldCAtIHN0YXJ0LCBjb3B5KTsKKwkJCWlmIChjb29raWUgPCAwKQorCQkJCWdvdG8gZmF1bHQ7CisJCQlsZW4gLT0gY29weTsKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlnb3RvIGVuZDsKKwkJCW9mZnNldCArPSBjb3B5OworCQl9CisJCXN0YXJ0ID0gZW5kOworCX0KKworCWlmIChza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OworCisJCWZvciAoOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQkJaW50IGVuZDsKKworCQkJQlVHX1RSQVAoc3RhcnQgPD0gb2Zmc2V0ICsgbGVuKTsKKworCQkJZW5kID0gc3RhcnQgKyBsaXN0LT5sZW47CisJCQljb3B5ID0gZW5kIC0gb2Zmc2V0OworCQkJaWYgKGNvcHkgPiAwKSB7CisJCQkJaWYgKGNvcHkgPiBsZW4pCisJCQkJCWNvcHkgPSBsZW47CisJCQkJY29va2llID0gZG1hX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjKGNoYW4sIGxpc3QsCisJCQkJICAgICAgICAgICAgICAgIG9mZnNldCAtIHN0YXJ0LCB0bywgY29weSwKKwkJCQkgICAgICAgICAgICAgICAgcGlubmVkX2xpc3QpOworCQkJCWlmIChjb29raWUgPCAwKQorCQkJCQlnb3RvIGZhdWx0OworCQkJCWxlbiAtPSBjb3B5OworCQkJCWlmIChsZW4gPT0gMCkKKwkJCQkJZ290byBlbmQ7CisJCQkJb2Zmc2V0ICs9IGNvcHk7CisJCQl9CisJCQlzdGFydCA9IGVuZDsKKwkJfQorCX0KKworZW5kOgorCWlmICghbGVuKSB7CisJCXNrYi0+ZG1hX2Nvb2tpZSA9IGNvb2tpZTsKKwkJcmV0dXJuIGNvb2tpZTsKKwl9CisKK2ZhdWx0OgorIAlyZXR1cm4gLUVGQVVMVDsKK30KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2Fja3ZlYy5jIGIvbmV0L2RjY3AvYWNrdmVjLmMKaW5kZXggYjU5ODFlNS4uOGMyMTFjNSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvYWNrdmVjLmMKKysrIGIvbmV0L2RjY3AvYWNrdmVjLmMKQEAgLTQ1Miw2ICs0NTIsNyBAQAogCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQogCQkJCQkgICAgICBhdnItPmRjY3BhdnJfYWNrX2Fja25vKTsKIAkJCQlkY2NwX2Fja3ZlY190aHJvd19yZWNvcmQoYXYsIGF2cik7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKgogCQkJICogSWYgaXQgd2Fzbid0IHJlY2VpdmVkLCBjb250aW51ZSBzY2FubmluZy4uLiB3ZSBtaWdodApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggMmUwZWU4My4uNTMxN2ZkMyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC03MTksNyArNzE5LDcgQEAKIAkJfQogCQlkY2NwX3ByX2RlYnVnKCJwYWNrZXRfdHlwZT0lc1xuIiwKIAkJCSAgICAgIGRjY3BfcGFja2V0X25hbWUoZGgtPmRjY3BoX3R5cGUpKTsKLQkJc2tfZWF0X3NrYihzaywgc2tiKTsKKwkJc2tfZWF0X3NrYihzaywgc2tiLCAwKTsKIHZlcmlmeV9zb2NrX3N0YXR1czoKIAkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkgewogCQkJbGVuID0gMDsKQEAgLTc3Myw3ICs3NzMsNyBAQAogCQl9CiAJZm91bmRfZmluX29rOgogCQlpZiAoIShmbGFncyAmIE1TR19QRUVLKSkKLQkJCXNrX2VhdF9za2Ioc2ssIHNrYik7CisJCQlza19lYXRfc2tiKHNrLCBza2IsIDApOwogCQlicmVhazsKIAl9IHdoaWxlICgxKTsKIG91dDoKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMgYi9uZXQvZGVjbmV0L2RuX25zcF9pbi5jCmluZGV4IDU0NzUyM2IuLmEyYmE5ZGIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMKKysrIGIvbmV0L2RlY25ldC9kbl9uc3BfaW4uYwpAQCAtODAxLDggKzgwMSw3IEBACiAJCSAqIFdlIGxpbmVhcml6ZSBldmVyeXRoaW5nIGV4Y2VwdCBkYXRhIHNlZ21lbnRzIGhlcmUuCiAJCSAqLwogCQlpZiAoY2ItPm5zcF9mbGFncyAmIH4weDYwKSB7Ci0JCQlpZiAodW5saWtlbHkoc2tiX2lzX25vbmxpbmVhcihza2IpKSAmJgotCQkJICAgIHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKQorCQkJaWYgKHVubGlrZWx5KHNrYl9saW5lYXJpemUoc2tiKSkpCiAJCQkJZ290byBmcmVlX291dDsKIAkJfQogCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggZTE3MmNmOS4uNWFiZjcwNSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtNjI5LDggKzYyOSw3IEBACiAJCQlwYWRsZW4pOwogCiAgICAgICAgIGlmIChmbGFncyAmIEROX1JUX1BLVF9DTlRMKSB7Ci0JCWlmICh1bmxpa2VseShza2JfaXNfbm9ubGluZWFyKHNrYikpICYmCi0JCSAgICBza2JfbGluZWFyaXplKHNrYiwgR0ZQX0FUT01JQykgIT0gMCkKKwkJaWYgKHVubGlrZWx5KHNrYl9saW5lYXJpemUoc2tiKSkpCiAJCQlnb3RvIGR1bXBfaXQ7CiAKICAgICAgICAgICAgICAgICBzd2l0Y2goZmxhZ3MgJiBETl9SVF9DTlRMX01TSykgewpkaWZmIC0tZ2l0IGEvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvbmV0L2V0aGVybmV0L01ha2VmaWxlCmluZGV4IDY5Yjc0YTkuLjdjZWYxZDggMTAwNjQ0Ci0tLSBhL25ldC9ldGhlcm5ldC9NYWtlZmlsZQorKysgYi9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKQEAgLTMsNiArMyw1IEBACiAjCiAKIG9iai15CQkJCQkrPSBldGgubwotb2JqLSQoQ09ORklHX1NZU0NUTCkJCQkrPSBzeXNjdGxfbmV0X2V0aGVyLm8KIG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19JUFgpKQkJKz0gcGUyLm8KIG9iai0kKHN1YnN0IG0seSwkKENPTkZJR19BVEFMSykpCSs9IHBlMi5vCmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvc3lzY3RsX25ldF9ldGhlci5jIGIvbmV0L2V0aGVybmV0L3N5c2N0bF9uZXRfZXRoZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiMzlmYy4uMDAwMDAwMAotLS0gYS9uZXQvZXRoZXJuZXQvc3lzY3RsX25ldF9ldGhlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogLSotIGxpbnV4LWMgLSotCi0gKiBzeXNjdGxfbmV0X2V0aGVyLmM6IHN5c2N0bCBpbnRlcmZhY2UgdG8gbmV0IEV0aGVybmV0IHN1YnN5c3RlbS4KLSAqCi0gKiBCZWd1biBBcHJpbCAxLCAxOTk2LCBNaWtlIFNoYXZlci4KLSAqIEFkZGVkIC9wcm9jL3N5cy9uZXQvZXRoZXIgZGlyZWN0b3J5IGVudHJ5IChlbXB0eSA9KSApLiBbTVNdCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLQotY3RsX3RhYmxlIGV0aGVyX3RhYmxlW10gPSB7Ci0JezB9Ci19OwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDkzZGVmOTQuLjNmYTVkZjIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTUwMSw4ICs1MDEsMTEgQEAKIHN0YXRpYyB2b2lkIG1pY2hhZWxfbWljX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqIGhkcikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyMTE7CisJdTE2IHN0eXBlOwogCiAJaGRyMTEgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKilza2ItPmRhdGE7CisJc3R5cGUgID0gV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUoaGRyMTEtPmZyYW1lX2N0bCkpOworCiAJc3dpdGNoIChsZTE2X3RvX2NwdShoZHIxMS0+ZnJhbWVfY3RsKSAmCiAJCShJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKSkgewogCWNhc2UgSUVFRTgwMjExX0ZDVExfVE9EUzoKQEAgLTUyMyw3ICs1MjYsMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JaGRyWzEyXSA9IDA7CQkvKiBwcmlvcml0eSAqLworCWlmIChzdHlwZSAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkgeworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqcW9zaGRyID0KKwkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKXNrYi0+ZGF0YTsKKwkJaGRyWzEyXSA9IGxlMTZfdG9fY3B1KHFvc2hkci0+cW9zX2N0bCkgJiBJRUVFODAyMTFfUUNUTF9USUQ7CisJfSBlbHNlCisJCWhkclsxMl0gPSAwOwkJLyogcHJpb3JpdHkgKi8KKwogCWhkclsxM10gPSBoZHJbMTRdID0gaGRyWzE1XSA9IDA7CS8qIHJlc2VydmVkICovCiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDYwNGI3YjAuLjJiZjU2N2YgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMzY5LDcgKzM2OSw2IEBACiAKIAkvKiBQdXQgdGhpcyBjb2RlIGhlcmUgc28gdGhhdCB3ZSBhdm9pZCBkdXBsaWNhdGluZyBpdCBpbiBhbGwKIAkgKiBSeCBwYXRocy4gLSBKZWFuIElJICovCi0jaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAogI2lmZGVmIElXX1dJUkVMRVNTX1NQWQkJLyogZGVmaW5lZCBpbiBpd19oYW5kbGVyLmggKi8KIAkvKiBJZiBzcHkgbW9uaXRvcmluZyBvbiAqLwogCWlmIChpZWVlLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgewpAQCAtMzk4LDcgKzM5Nyw2IEBACiAJCXdpcmVsZXNzX3NweV91cGRhdGUoaWVlZS0+ZGV2LCBoZHItPmFkZHIyLCAmd3N0YXRzKTsKIAl9CiAjZW5kaWYJCQkJLyogSVdfV0lSRUxFU1NfU1BZICovCi0jZW5kaWYJCQkJLyogQ09ORklHX1dJUkVMRVNTX0VYVCAqLwogCiAjaWZkZWYgTk9UX1lFVAogCWhvc3RhcF91cGRhdGVfcnhfc3RhdHMobG9jYWwtPmFwLCBoZHIsIHJ4X3N0YXRzKTsKQEAgLTE2OTIsOCArMTY5MCw4IEBACiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdQogCQkJCQkJICAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkpKTsKIAotCQlJRUVFODAyMTFfV0FSTklORygiJXM6IElFRUU4MDIxMV9SRUFTU09DX1JFUSByZWNlaXZlZFxuIiwKLQkJCQkgIGllZWUtPmRldi0+bmFtZSk7CisJCUlFRUU4MDIxMV9ERUJVR19NR01UKCIlczogSUVFRTgwMjExX1JFQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAorCQkJCSAgICAgaWVlZS0+ZGV2LT5uYW1lKTsKIAkJaWYgKGllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QgIT0gTlVMTCkKIAkJCWllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QoaWVlZS0+ZGV2LAogCQkJCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKQpAQCAtMTcwNSw4ICsxNzAzLDggQEAKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1CiAJCQkJCQkgICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOwogCi0JCUlFRUU4MDIxMV9XQVJOSU5HKCIlczogSUVFRTgwMjExX0FTU09DX1JFUSByZWNlaXZlZFxuIiwKLQkJCQkgIGllZWUtPmRldi0+bmFtZSk7CisJCUlFRUU4MDIxMV9ERUJVR19NR01UKCIlczogSUVFRTgwMjExX0FTU09DX1JFUSByZWNlaXZlZFxuIiwKKwkJCQkgICAgIGllZWUtPmRldi0+bmFtZSk7CiAJCWlmIChpZWVlLT5oYW5kbGVfYXNzb2NfcmVxdWVzdCAhPSBOVUxMKQogCQkJaWVlZS0+aGFuZGxlX2Fzc29jX3JlcXVlc3QoaWVlZS0+ZGV2KTsKIAkJYnJlYWs7CkBAIC0xNzIyLDEwICsxNzIwLDEwIEBACiAJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJyZWNlaXZlZCBVTktOT1dOICglZClcbiIsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdQogCQkJCQkJICAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkpKTsKLQkJSUVFRTgwMjExX1dBUk5JTkcoIiVzOiBVbmtub3duIG1hbmFnZW1lbnQgcGFja2V0OiAlZFxuIiwKLQkJCQkgIGllZWUtPmRldi0+bmFtZSwKLQkJCQkgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1Ci0JCQkJCQkgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOworCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiJXM6IFVua25vd24gbWFuYWdlbWVudCBwYWNrZXQ6ICVkXG4iLAorCQkJCSAgICAgaWVlZS0+ZGV2LT5uYW1lLAorCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKKwkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCmluZGV4IDhiNDMzMmYuLjZhNWRlMWIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtMjIwLDEzICsyMjAsNDMgQEAKIAlyZXR1cm4gdHhiOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBldGhoZHIgKmV0aDsKKwlzdHJ1Y3QgaXBoZHIgKmlwOworCisJZXRoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisJaWYgKGV0aC0+aF9wcm90byAhPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSkKKwkJcmV0dXJuIDA7CisKKwlpcCA9IHNrYi0+bmguaXBoOworCXN3aXRjaCAoaXAtPnRvcyAmIDB4ZmMpIHsKKwljYXNlIDB4MjA6CisJCXJldHVybiAyOworCWNhc2UgMHg0MDoKKwkJcmV0dXJuIDE7CisJY2FzZSAweDYwOgorCQlyZXR1cm4gMzsKKwljYXNlIDB4ODA6CisJCXJldHVybiA0OworCWNhc2UgMHhhMDoKKwkJcmV0dXJuIDU7CisJY2FzZSAweGMwOgorCQlyZXR1cm4gNjsKKwljYXNlIDB4ZTA6CisJCXJldHVybiA3OworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogLyogSW5jb21pbmcgc2tiIGlzIGNvbnZlcnRlZCB0byBhIHR4YiB3aGljaCBjb25zaXN0cyBvZgogICogYSBibG9jayBvZiA4MDIuMTEgZnJhZ21lbnQgcGFja2V0cyAoc3RvcmVkIGFzIHNrYnMpICovCiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmZyYWdfaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICpmcmFnX2hkcjsKIAlpbnQgaSwgYnl0ZXNfcGVyX2ZyYWcsIG5yX2ZyYWdzLCBieXRlc19sYXN0X2ZyYWcsIGZyYWdfc2l6ZSwKIAkgICAgcnRzX3JlcXVpcmVkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMzQsOSArMjY0LDEwIEBACiAJaW50IGV0aGVyX3R5cGUsIGVuY3J5cHQsIGhvc3RfZW5jcnlwdCwgaG9zdF9lbmNyeXB0X21zZHUsIGhvc3RfYnVpbGRfaXY7CiAJaW50IGJ5dGVzLCBmYywgaGRyX2xlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWc7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyID0gewkvKiBFbnN1cmUgemVybyBpbml0aWFsaXplZCAqLworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zIGhlYWRlciA9IHsvKiBFbnN1cmUgemVybyBpbml0aWFsaXplZCAqLwogCQkuZHVyYXRpb25faWQgPSAwLAotCQkuc2VxX2N0bCA9IDAKKwkJLnNlcV9jdGwgPSAwLAorCQkucW9zX2N0bCA9IDAKIAl9OwogCXU4IGRlc3RbRVRIX0FMRU5dLCBzcmNbRVRIX0FMRU5dOwogCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7CkBAIC0yODIsMTIgKzMxMyw2IEBACiAJbWVtY3B5KGRlc3QsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCW1lbWNweShzcmMsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7CiAKLQkvKiBBZHZhbmNlIHRoZSBTS0IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkICovCi0Jc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCi0JLyogRGV0ZXJtaW5lIHRvdGFsIGFtb3VudCBvZiBzdG9yYWdlIHJlcXVpcmVkIGZvciBUWEIgcGFja2V0cyAqLwotCWJ5dGVzID0gc2tiLT5sZW4gKyBTTkFQX1NJWkUgKyBzaXplb2YodTE2KTsKLQogCWlmIChob3N0X2VuY3J5cHQgfHwgaG9zdF9idWlsZF9pdikKIAkJZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9EQVRBIHwKIAkJICAgIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRDsKQEAgLTMwNiw5ICszMzEsMjMgQEAKIAkJbWVtY3B5KGhlYWRlci5hZGRyMiwgc3JjLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZWFkZXIuYWRkcjMsIGllZWUtPmJzc2lkLCBFVEhfQUxFTik7CiAJfQotCWhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CiAJaGRyX2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CiAKKwlpZiAoaWVlZS0+aXNfcW9zX2FjdGl2ZSAmJiBpZWVlLT5pc19xb3NfYWN0aXZlKGRldiwgc2tiKSkgeworCQlmYyB8PSBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEE7CisJCWhkcl9sZW4gKz0gMjsKKworCQlza2ItPnByaW9yaXR5ID0gaWVlZTgwMjExX2NsYXNzaWZ5KHNrYik7CisJCWhlYWRlci5xb3NfY3RsIHw9IHNrYi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUUNUTF9USUQ7CisJfQorCWhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisKKwkvKiBBZHZhbmNlIHRoZSBTS0IgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkICovCisJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCisJLyogRGV0ZXJtaW5lIHRvdGFsIGFtb3VudCBvZiBzdG9yYWdlIHJlcXVpcmVkIGZvciBUWEIgcGFja2V0cyAqLworCWJ5dGVzID0gc2tiLT5sZW4gKyBTTkFQX1NJWkUgKyBzaXplb2YodTE2KTsKKwogCS8qIEVuY3J5cHQgbXNkdSBmaXJzdCBvbiB0aGUgd2hvbGUgZGF0YSBwYWNrZXQuICovCiAJaWYgKChob3N0X2VuY3J5cHQgfHwgaG9zdF9lbmNyeXB0X21zZHUpICYmCiAJICAgIGNyeXB0ICYmIGNyeXB0LT5vcHMgJiYgY3J5cHQtPm9wcy0+ZW5jcnlwdF9tc2R1KSB7CkBAIC00MDIsNyArNDQxLDcgQEAKIAlpZiAocnRzX3JlcXVpcmVkKSB7CiAJCXNrYl9mcmFnID0gdHhiLT5mcmFnbWVudHNbMF07CiAJCWZyYWdfaGRyID0KLQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYl9wdXQoc2tiX2ZyYWcsIGhkcl9sZW4pOworCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICopc2tiX3B1dChza2JfZnJhZywgaGRyX2xlbik7CiAKIAkJLyoKIAkJICogU2V0IGhlYWRlciBmcmFtZV9jdGwgdG8gdGhlIFJUUy4KQEAgLTQzMyw3ICs0NzIsNyBAQAogCQkJCSAgICBjcnlwdC0+b3BzLT5leHRyYV9tcGR1X3ByZWZpeF9sZW4pOwogCiAJCWZyYWdfaGRyID0KLQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYl9wdXQoc2tiX2ZyYWcsIGhkcl9sZW4pOworCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICopc2tiX3B1dChza2JfZnJhZywgaGRyX2xlbik7CiAJCW1lbWNweShmcmFnX2hkciwgJmhlYWRlciwgaGRyX2xlbik7CiAKIAkJLyogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgZnJhZ21lbnQsIHRoZW4gYWRkIHRoZSBNT1JFRlJBR1MKQEAgLTUxNiw3ICs1NTUsOCBAQAogLyogSW5jb21pbmcgODAyLjExIHN0cnVjdXJlIGlzIGNvbnZlcnRlZCB0byBhIFRYQgogICogYSBibG9jayBvZiA4MDIuMTEgZnJhZ21lbnQgcGFja2V0cyAoc3RvcmVkIGFzIHNrYnMpICovCiBpbnQgaWVlZTgwMjExX3R4X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmZyYW1lLCBpbnQgbGVuKQorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmZyYW1lLCBpbnQgaGRyX2xlbiwgaW50IHRvdGFsX2xlbiwKKwkJICAgICAgIGludCBlbmNyeXB0X21wZHUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUyNiw2ICs1NjYsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIAorCWlmIChlbmNyeXB0X21wZHUgJiYgIWllZWUtPnNlYy5lbmNyeXB0KQorCQllbmNyeXB0X21wZHUgPSAwOworCiAJLyogSWYgdGhlcmUgaXMgbm8gZHJpdmVyIGhhbmRsZXIgdG8gdGFrZSB0aGUgVFhCLCBkb250JyBib3RoZXIKIAkgKiBjcmVhdGluZyBpdC4uLiAqLwogCWlmICghaWVlZS0+aGFyZF9zdGFydF94bWl0KSB7CkBAIC01MzMsMzIgKzU3Niw0MSBAQAogCQlnb3RvIHN1Y2Nlc3M7CiAJfQogCi0JaWYgKHVubGlrZWx5KGxlbiA8IDI0KSkgeworCWlmICh1bmxpa2VseSh0b3RhbF9sZW4gPCAyNCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHNrYiB0b28gc21hbGwgKCVkKS5cbiIsCi0JCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGxlbik7CisJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIHRvdGFsX2xlbik7CiAJCWdvdG8gc3VjY2VzczsKIAl9CiAKKwlpZiAoZW5jcnlwdF9tcGR1KQorCQlmcmFtZS0+ZnJhbWVfY3RsIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CisKIAkvKiBXaGVuIHdlIGFsbG9jYXRlIHRoZSBUWEIgd2UgYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgcmVzZXJ2ZQogCSAqIGFuZCBmdWxsIGZyYWdtZW50IGJ5dGVzIChieXRlc19wZXJfZnJhZyBkb2Vzbid0IGluY2x1ZGUgcHJlZml4LAogCSAqIHBvc3RmaXgsIGhlYWRlciwgRkNTLCBldGMuKSAqLwotCXR4YiA9IGllZWU4MDIxMV9hbGxvY190eGIoMSwgbGVuLCBpZWVlLT50eF9oZWFkcm9vbSwgR0ZQX0FUT01JQyk7CisJdHhiID0gaWVlZTgwMjExX2FsbG9jX3R4YigxLCB0b3RhbF9sZW4sIGllZWUtPnR4X2hlYWRyb29tLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIXR4YikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBUWEJcbiIsCiAJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAJdHhiLT5lbmNyeXB0ZWQgPSAwOwotCXR4Yi0+cGF5bG9hZF9zaXplID0gbGVuOworCXR4Yi0+cGF5bG9hZF9zaXplID0gdG90YWxfbGVuOwogCiAJc2tiX2ZyYWcgPSB0eGItPmZyYWdtZW50c1swXTsKIAotCW1lbWNweShza2JfcHV0KHNrYl9mcmFnLCBsZW4pLCBmcmFtZSwgbGVuKTsKKwltZW1jcHkoc2tiX3B1dChza2JfZnJhZywgdG90YWxfbGVuKSwgZnJhbWUsIHRvdGFsX2xlbik7CiAKIAlpZiAoaWVlZS0+Y29uZmlnICYKIAkgICAgKENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgfCBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTKSkKIAkJc2tiX3B1dChza2JfZnJhZywgNCk7CiAKKwkvKiBUbyBhdm9pZCBvdmVyY29tcGxpY2F0aW5nIHRoaW5ncywgd2UgZG8gdGhlIGNvcm5lci1jYXNlIGZyYW1lCisJICogZW5jcnlwdGlvbiBpbiBzb2Z0d2FyZS4gVGhlIG9ubHkgcmVhbCBzaXR1YXRpb24gd2hlcmUgZW5jcnlwdGlvbiBpcworCSAqIG5lZWRlZCBoZXJlIGlzIGR1cmluZyBzb2Z0d2FyZS1iYXNlZCBzaGFyZWQga2V5IGF1dGhlbnRpY2F0aW9uLiAqLworCWlmIChlbmNyeXB0X21wZHUpCisJCWllZWU4MDIxMV9lbmNyeXB0X2ZyYWdtZW50KGllZWUsIHNrYl9mcmFnLCBoZHJfbGVuKTsKKwogICAgICAgc3VjY2VzczoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IGI4ODVmZDEuLmE3OGM0ZjggMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtNTAsNyArNTAsOCBAQAogCWNoYXIgKnA7CiAJc3RydWN0IGl3X2V2ZW50IGl3ZTsKIAlpbnQgaSwgajsKLQl1OCBtYXhfcmF0ZSwgcmF0ZTsKKwljaGFyICpjdXJyZW50X3ZhbDsJLyogRm9yIHJhdGVzICovCisJdTggcmF0ZTsKIAogCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0FQOwpAQCAtMTA3LDkgKzEwOCwxMyBAQAogCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIG5ldHdvcmstPnNzaWQpOwogCiAJLyogQWRkIGJhc2ljIGFuZCBleHRlbmRlZCByYXRlcyAqLwotCW1heF9yYXRlID0gMDsKLQlwID0gY3VzdG9tOwotCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4gLSAocCAtIGN1c3RvbSksICIgUmF0ZXMgKE1iL3MpOiAiKTsKKwkvKiBSYXRlIDogc3R1ZmZpbmcgbXVsdGlwbGUgdmFsdWVzIGluIGEgc2luZ2xlIGV2ZW50IHJlcXVpcmUgYSBiaXQKKwkgKiBtb3JlIG9mIG1hZ2ljIC0gSmVhbiBJSSAqLworCWN1cnJlbnRfdmFsID0gc3RhcnQgKyBJV19FVl9MQ1BfTEVOOworCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG5ldHdvcmstPnJhdGVzX2xlbjspIHsKIAkJaWYgKGogPCBuZXR3b3JrLT5yYXRlc19leF9sZW4gJiYKIAkJICAgICgobmV0d29yay0+cmF0ZXNfZXhbal0gJiAweDdGKSA8CkBAIC0xMTcsMjggKzEyMiwyMSBAQAogCQkJcmF0ZSA9IG5ldHdvcmstPnJhdGVzX2V4W2orK10gJiAweDdGOwogCQllbHNlCiAJCQlyYXRlID0gbmV0d29yay0+cmF0ZXNbaSsrXSAmIDB4N0Y7Ci0JCWlmIChyYXRlID4gbWF4X3JhdGUpCi0JCQltYXhfcmF0ZSA9IHJhdGU7Ci0JCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4gLSAocCAtIGN1c3RvbSksCi0JCQkgICAgICAiJWQlcyAiLCByYXRlID4+IDEsIChyYXRlICYgMSkgPyAiLjUiIDogIiIpOworCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLworCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChyYXRlICYgMHg3ZikgKiA1MDAwMDApOworCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCisJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoc3RhcnQsIGN1cnJlbnRfdmFsLCBzdG9wLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwogCX0KIAlmb3IgKDsgaiA8IG5ldHdvcmstPnJhdGVzX2V4X2xlbjsgaisrKSB7CiAJCXJhdGUgPSBuZXR3b3JrLT5yYXRlc19leFtqXSAmIDB4N0Y7Ci0JCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4gLSAocCAtIGN1c3RvbSksCi0JCQkgICAgICAiJWQlcyAiLCByYXRlID4+IDEsIChyYXRlICYgMSkgPyAiLjUiIDogIiIpOwotCQlpZiAocmF0ZSA+IG1heF9yYXRlKQotCQkJbWF4X3JhdGUgPSByYXRlOworCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLworCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChyYXRlICYgMHg3ZikgKiA1MDAwMDApOworCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCisJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoc3RhcnQsIGN1cnJlbnRfdmFsLCBzdG9wLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwogCX0KLQotCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0JaXdlLnUuYml0cmF0ZS52YWx1ZSA9IG1heF9yYXRlICogNTAwMDAwOwotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOworCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSByYXRlICovCisJaWYoKGN1cnJlbnRfdmFsIC0gc3RhcnQpID4gSVdfRVZfTENQX0xFTikKKwkJc3RhcnQgPSBjdXJyZW50X3ZhbDsKIAogCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KIAlpd2UuY21kID0gSVdFVlFVQUw7CkBAIC01MDUsNyArNTAzLDcgQEAKIAlsZW4gPSBzZWMtPmtleV9zaXplc1trZXldOwogCW1lbWNweShrZXlidWYsIHNlYy0+a2V5c1trZXldLCBsZW4pOwogCi0JZXJxLT5sZW5ndGggPSAobGVuID49IDAgPyBsZW4gOiAwKTsKKwllcnEtPmxlbmd0aCA9IGxlbjsKIAllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwogCiAJaWYgKGllZWUtPm9wZW5fd2VwKQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWcgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZwppbmRleCBmMmEyN2NjLi4yODExNjUxIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAl0cmlzdGF0ZSAiU29mdHdhcmUgTUFDIGFkZC1vbiB0byB0aGUgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayIKIAlkZXBlbmRzIG9uIElFRUU4MDIxMSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCisJc2VsZWN0IElFRUU4MDIxMV9DUllQVF9XRVAKIAktLS1oZWxwLS0tCiAJVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgc29mdHdhcmUgTUFDIGFkZG9uCiAJZm9yIHRoZSBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrLgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKaW5kZXggNTdlYTlmNi4uNWU5YTkwNiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCkBAIC04Miw1MSArODIsNTIgQEAKIAlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfVElNRU9VVCwgTlVMTCk7CiB9CiAKLS8qIFNlbmRzIG91dCBhIGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgdG8gdGhlIGRlc2lyZWQgQVAgKi8KLXN0YXRpYyB2b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1MTYgcmVhc29uKQordm9pZAoraWVlZTgwMjExc29mdG1hY19kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCWlmIChtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZykKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbWFjLT5hc3NvY2luZm8udGltZW91dCk7CisKKwluZXRpZl9jYXJyaWVyX29mZihtYWMtPmRldik7CisKKwltYWMtPmFzc29jaWF0ZWQgPSAwOworCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKKwltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7CisJaWVlZTgwMjExc29mdG1hY19pbml0X3R4cmF0ZXMobWFjKTsKKwlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfRElTQVNTT0NJQVRFRCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIFNlbmRzIG91dCBhIGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgdG8gdGhlIGRlc2lyZWQgQVAgKi8KK3ZvaWQKK2llZWU4MDIxMXNvZnRtYWNfc2VuZF9kaXNhc3NvY19yZXEoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHUxNiByZWFzb24pCit7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqZm91bmQ7CiAKIAlpZiAobWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgJiYgbWFjLT5hc3NvY2lhdGVkKSB7CiAJCWZvdW5kID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChtYWMsIG1hYy0+YXNzb2NpbmZvLmJzc2lkKTsKIAkJaWYgKGZvdW5kKQogCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIGZvdW5kLCBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MsIHJlYXNvbik7Ci0JfSBlbHNlIGlmIChtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZykgewotCQljYW5jZWxfZGVsYXllZF93b3JrKCZtYWMtPmFzc29jaW5mby50aW1lb3V0KTsKIAl9CiAKLQkvKiBDaGFuZ2Ugb3VyIHN0YXRlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCS8qIERvIE5PVCBjbGVhciBic3N2YWxpZCBhcyB0aGF0IHdpbGwgYnJlYWsgaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrISAqLwotCW1hYy0+YXNzb2NpYXRlZCA9IDA7Ci0JbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOwotCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVELCBOVUxMKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKG1hYyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiB3ZV9zdXBwb3J0X2FsbF9iYXNpY19yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggKmZyb20sIHU4IGZyb21fbGVuKQogewotCWludCBpZHgsIHNlYXJjaCwgZm91bmQ7Ci0JdTggcmF0ZSwgc2VhcmNoX3JhdGU7CisJaW50IGlkeDsKKwl1OCByYXRlOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCAoZnJvbV9sZW4pOyBpZHgrKykgewogCQlyYXRlID0gKGZyb20pW2lkeF07CiAJCWlmICghKHJhdGUgJiBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSkKIAkJCWNvbnRpbnVlOwotCQlmb3VuZCA9IDA7CiAJCXJhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7Ci0JCWZvciAoc2VhcmNoID0gMDsgc2VhcmNoIDwgbWFjLT5yYXRlc2luZm8uY291bnQ7IHNlYXJjaCsrKSB7Ci0JCQlzZWFyY2hfcmF0ZSA9IG1hYy0+cmF0ZXNpbmZvLnJhdGVzW3NlYXJjaF07Ci0JCQlzZWFyY2hfcmF0ZSAmPSB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSzsKLQkJCWlmIChyYXRlID09IHNlYXJjaF9yYXRlKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICghZm91bmQpCisJCWlmICghaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm9fcmF0ZV9zdXBwb3J0ZWQoJm1hYy0+cmF0ZXNpbmZvLCByYXRlKSkKIAkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTE2MywxMiArMTY0LDI4IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1pZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpjb250ZXh0KQoraWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZXZlbnRfdHlwZSwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKCh2b2lkKiltYWMpOwogfQogCitzdGF0aWMgdm9pZAoraWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZXZlbnRfdHlwZSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisKKwlzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKKwljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSEVOVElDQVRFRDoKKwkJaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKCh2b2lkKiltYWMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9GQUlMRUQ6CisJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhfVElNRU9VVDoKKwkJaWVlZTgwMjExc29mdG1hY19kaXNhc3NvYyhtYWMpOworCQlicmVhazsKKwl9Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGhhbmRsZSB1c2Vyc3BhY2UgcmVxdWVzdHMgKGFzeW5jaHJvbm91c2x5KSAqLwogdm9pZAogaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKHZvaWQgKmQpCkBAIC0xNzYsMTQgKzE5MywxOCBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqKWQ7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqZm91bmQgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0ID0gTlVMTCwgKmJlc3QgPSBOVUxMOworCWludCBic3N2YWxpZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCisJLyogaWVlZTgwMjExX2Rpc2Fzc29jIG1pZ2h0IGNsZWFyIHRoaXMgKi8KKwlic3N2YWxpZCA9IG1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkOworCiAJLyogbWVoICovCiAJaWYgKG1hYy0+YXNzb2NpYXRlZCkKLQkJaWVlZTgwMjExc29mdG1hY19kaXNhc3NvYyhtYWMsIFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCk7CisJCWllZWU4MDIxMXNvZnRtYWNfc2VuZF9kaXNhc3NvY19yZXEobWFjLCBXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQpOwogCiAJLyogdHJ5IHRvIGZpbmQgdGhlIHJlcXVlc3RlZCBuZXR3b3JrIGluIG91ciBsaXN0LCBpZiB3ZSBmb3VuZCBvbmUgYWxyZWFkeSAqLwotCWlmIChtYWMtPmFzc29jaW5mby5ic3N2YWxpZCB8fCBtYWMtPmFzc29jaW5mby5ic3NmaXhlZCkKKwlpZiAoYnNzdmFsaWQgfHwgbWFjLT5hc3NvY2luZm8uYnNzZml4ZWQpCiAJCWZvdW5kID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChtYWMsIG1hYy0+YXNzb2NpbmZvLmJzc2lkKTsJCiAJCiAJLyogU2VhcmNoIHRoZSBpZWVlODAyMTEgbmV0d29ya3MgZm9yIHRoaXMgbmV0d29yayBpZiB3ZSBkaWRuJ3QgZmluZCBpdCBieSBic3NpZCwKQEAgLTI0NCw3ICsyNjUsNyBAQAogCQkJICogTWF5YmUgd2UgY2FuIGhvcGUgdG8gaGF2ZSBtb3JlIG1lbW9yeSBhZnRlciBzY2FubmluZyBmaW5pc2hlcyA7KQogCQkJICovCiAJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFzc29jaWF0ZTogU2Nhbm5pbmcgZm9yIG5ldHdvcmtzIGZpcnN0LlxuIik7Ci0JCQlpZWVlODAyMTFzb2Z0bWFjX25vdGlmeShtYWMtPmRldiwgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVELCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeSwgTlVMTCk7CisJCQlpZWVlODAyMTFzb2Z0bWFjX25vdGlmeShtYWMtPmRldiwgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVELCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeV9zY2FuLCBOVUxMKTsKIAkJCWlmIChpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X3NjYW4obWFjKSkKIAkJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFzc29jaWF0ZTogZmFpbGVkIHRvIGluaXRpYXRlIHNjYW4uIElzIGRldmljZSB1cD9cbiIpOwogCQkJcmV0dXJuOwpAQCAtMjc5LDcgKzMwMCw3IEBACiAJCSAqIG90aGVyd2lzZSBhZGRpbmcgdGhlIG5vdGlmaWNhdGlvbiB3b3VsZCBiZSByYWN5LiAqLwogCQlpZiAoIWllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXEobWFjLCBmb3VuZCkpIHsKIAkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiY2Fubm90IGFzc29jaWF0ZSB3aXRob3V0IGJlaW5nIGF1dGhlbnRpY2F0ZWQsIHJlcXVlc3RlZCBhdXRoZW50aWNhdGlvblxuIik7Ci0JCQlpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9pbnRlcm5hbChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQU5ZLCBmb3VuZCwgaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnksIE5VTEwsIEdGUF9LRVJORUwpOworCQkJaWVlZTgwMjExc29mdG1hY19ub3RpZnlfaW50ZXJuYWwobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FOWSwgZm91bmQsIGllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfbm90aWZ5X2F1dGgsIE5VTEwsIEdGUF9LRVJORUwpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrbChLRVJOX1dBUk5JTkcgUEZYICJOb3QgYXV0aGVudGljYXRlZCwgYnV0IHJlcXVlc3RpbmcgYXV0aGVudGljYXRpb24gZmFpbGVkLiBHaXZpbmcgdXAgdG8gYXNzb2NpYXRlXG4iKTsKIAkJCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURV9GQUlMRUQsIGZvdW5kKTsKQEAgLTI5Nyw2ICszMTgsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCkKIHsKIAltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7CisJbWFjLT5hc3NvY2luZm8uc3VwcG9ydGVkX3JhdGVzID0gbmV0LT5zdXBwb3J0ZWRfcmF0ZXM7CisJaWVlZTgwMjExc29mdG1hY19yZWNhbGNfdHhyYXRlcyhtYWMpOworCiAJbWFjLT5hc3NvY2lhdGVkID0gMTsKIAlpZiAobWFjLT5zZXRfYnNzaWRfZmlsdGVyKQogCQltYWMtPnNldF9ic3NpZF9maWx0ZXIobWFjLT5kZXYsIG5ldC0+YnNzaWQpOwpAQCAtMzgwLDcgKzQwNCw2IEBACiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKmRpc2Fzc29jKQogewogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHVubGlrZWx5KCFtYWMtPnJ1bm5pbmcpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM5MiwxNCArNDE1LDExIEBACiAJCXJldHVybiAwOwogCiAJZHByaW50ayhLRVJOX0lORk8gUEZYICJnb3QgZGlzYXNzb2MgZnJhbWVcbiIpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwotCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKLQltYWMtPmFzc29jaWF0ZWQgPSAwOwotCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHNfbG9ja2VkKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9ESVNBU1NPQ0lBVEVELCBOVUxMKTsKKwlpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKG1hYyk7CisKKwkvKiB0cnkgdG8gcmVhc3NvY2lhdGUgKi8KIAlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMKaW5kZXggMDZlMzMyNi4uOTBiODQ4NCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJcHJpbnRrbChLRVJOX1dBUk5JTkcgUEZYICJBdXRoZW50aWNhdGlvbiB0aW1lZCBvdXQgd2l0aCAiTUFDX0ZNVCJcbiIsIE1BQ19BUkcobmV0LT5ic3NpZCkpOwogCS8qIFJlbW92ZSB0aGlzIGl0ZW0gZnJvbSB0aGUgcXVldWUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJbmV0LT5hdXRoZW50aWNhdGluZyA9IDA7CiAJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhfVElNRU9VVCwgbmV0KTsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZhdXRoLT53b3JrKTsgLyoganVzdCB0byBtYWtlIHN1cmUuLi4gKi8KIAlsaXN0X2RlbCgmYXV0aC0+bGlzdCk7CkBAIC0yMTIsMTMgKzIxMywxMyBAQAogCQkJYXEtPnN0YXRlID0gSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9SRVNQT05TRTsgCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAotCQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgY2hhbm5lbCBmb3IgdGhpcyBuZXR3b3JrICovCi0JCQltYWMtPnNldF9jaGFubmVsKG1hYy0+ZGV2LCBuZXQtPmNoYW5uZWwpOwotCQkJCi0JCQkvKiBTZW5kIG91ciByZXNwb25zZSAoSG93IHRvIGVuY3J5cHQ/KSAqLworCQkJLyogU2VuZCBvdXIgcmVzcG9uc2UgKi8KIAkJCWllZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUobWFjLCBhcS0+bmV0LCBJRUVFODAyMTFfU1RZUEVfQVVUSCwgYXEtPnN0YXRlKTsKLQkJCWJyZWFrOworCQkJcmV0dXJuIDA7CiAJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9QQVNTOgorCQkJa2ZyZWUobmV0LT5jaGFsbGVuZ2UpOworCQkJbmV0LT5jaGFsbGVuZ2UgPSBOVUxMOworCQkJbmV0LT5jaGFsbGVuZ2VfbGVuID0gMDsKIAkJCS8qIENoZWNrIHRoZSBzdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UgKi8KIAkJCXN3aXRjaChhdXRoLT5zdGF0dXMpIHsKIAkJCWNhc2UgV0xBTl9TVEFUVVNfU1VDQ0VTUzoKQEAgLTIyOSw2ICsyMzAsNyBAQAogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCQkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJTaGFyZWQgS2V5IEF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlZCB3aXRoICJNQUNfRk1UIlxuIiwgCiAJCQkJCU1BQ19BUkcobmV0LT5ic3NpZCkpOworCQkJCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhFTlRJQ0FURUQsIG5ldCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJTaGFyZWQgS2V5IEF1dGhlbnRpY2F0aW9uIHdpdGggIk1BQ19GTVQiIGZhaWxlZCwgZXJyb3IgY29kZTogJWlcbiIsIApAQCAtMjc5LDYgKzI4MSw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wdHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIGRlYXV0aGVudGljYXRpb24gaW1wbGllcyBkaXNhc3NvY2lhdGlvbiAqLworCWllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2MobWFjKTsKKwogCS8qIExvY2sgYW5kIHJlc2V0IHN0YXR1cyBmbGFncyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAluZXQtPmF1dGhlbnRpY2F0aW5nID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jCmluZGV4IDhjYzhmM2YuLmYzNGZhMmUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2V2ZW50LmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYwpAQCAtMzgsNyArMzgsOCBAQAogICogVGhlIGV2ZW50IGNvbnRleHQgaXMgcHJpdmF0ZSBhbmQgY2FuIG9ubHkgYmUgdXNlZCBmcm9tCiAgKiB3aXRoaW4gdGhpcyBtb2R1bGUuIEl0cyBtZWFuaW5nIHZhcmllcyB3aXRoIHRoZSBldmVudAogICogdHlwZToKLSAqICBTQ0FOX0ZJTklTSEVEOglubyBzcGVjaWFsIG1lYW5pbmcKKyAqICBTQ0FOX0ZJTklTSEVELAorICogIERJU0FTU09DSUFURUQ6CU5VTEwKICAqICBBU1NPQ0lBVEVELAogICogIEFTU09DSUFURV9GQUlMRUQsCiAgKiAgQVNTT0NJQVRFX1RJTUVPVVQsCkBAIC01OSwxNSArNjAsMTUgQEAKICAqLwogCiBzdGF0aWMgY2hhciAqZXZlbnRfZGVzY3JpcHRpb25zW0lFRUU4MDIxMVNPRlRNQUNfRVZFTlRfTEFTVCsxXSA9IHsKLQkic2NhbiBmaW5pc2hlZCIsCi0JImFzc29jaWF0ZWQiLAorCU5VTEwsIC8qIHNjYW4gZmluaXNoZWQgKi8KKwlOVUxMLCAvKiBhc3NvY2lhdGVkICovCiAJImFzc29jaWF0aW5nIGZhaWxlZCIsCiAJImFzc29jaWF0aW5nIHRpbWVkIG91dCIsCiAJImF1dGhlbnRpY2F0ZWQiLAogCSJhdXRoZW50aWNhdGluZyBmYWlsZWQiLAogCSJhdXRoZW50aWNhdGluZyB0aW1lZCBvdXQiLAogCSJhc3NvY2lhdGluZyBmYWlsZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBuZXR3b3JrIHdhcyBmb3VuZCIsCi0JImRpc2Fzc29jaWF0ZWQiLAorCU5VTEwsIC8qIGRpc2Fzc29jaWF0ZWQgKi8KIH07CiAKIApAQCAtNzcsNyArNzgsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50IGV2ZW50ID0gKihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ldmVudCopIGQ7CiAJa2ZyZWUoZCk7CiAJCi0JZXZlbnQuZnVuKGV2ZW50Lm1hYy0+ZGV2LCBldmVudC5jb250ZXh0KTsKKwlldmVudC5mdW4oZXZlbnQubWFjLT5kZXYsIGV2ZW50LmV2ZW50X3R5cGUsIGV2ZW50LmNvbnRleHQpOwogfQogCiBpbnQKQEAgLTEzNiwzMCArMTM3LDI0IEBACiAJCWludCB3ZV9ldmVudDsKIAkJY2hhciAqbXNnID0gTlVMTDsKIAorCQltZW1zZXQoJndycXUsICdcMCcsIHNpemVvZiAodW5pb24gaXdyZXFfZGF0YSkpOworCiAJCXN3aXRjaChldmVudCkgewogCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFRDoKIAkJCW5ldHdvcmsgPSAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKWV2ZW50X2N0eDsKLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKIAkJCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJm5ldHdvcmstPmJzc2lkWzBdLCBFVEhfQUxFTik7Ci0JCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJd2VfZXZlbnQgPSBTSU9DR0lXQVA7Ci0JCQlicmVhazsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfRElTQVNTT0NJQVRFRDoKLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKLQkJCW1lbXNldCgmd3JxdSwgJ1wwJywgc2l6ZW9mICh1bmlvbiBpd3JlcV9kYXRhKSk7CiAJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCQkJd2VfZXZlbnQgPSBTSU9DR0lXQVA7CiAJCQlicmVhazsKIAkJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX1NDQU5fRklOSVNIRUQ6Ci0JCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKLQkJCXdycXUuZGF0YS5mbGFncyA9IDA7Ci0JCQltZW1zZXQoJndycXUsICdcMCcsIHNpemVvZiAodW5pb24gaXdyZXFfZGF0YSkpOwogCQkJd2VfZXZlbnQgPSBTSU9DR0lXU0NBTjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbXNnID0gZXZlbnRfZGVzY3JpcHRpb25zW2V2ZW50XTsKKwkJCWlmICghbXNnKQorCQkJCW1zZyA9ICJTT0ZUTUFDIEVWRU5UIEJVRyI7CiAJCQl3cnF1LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CiAJCQl3ZV9ldmVudCA9IElXRVZDVVNUT007CiAJCQlicmVhazsKQEAgLTE3Miw2ICsxNjcsOSBAQAogCQkJaWYgKChldmVudHB0ci0+ZXZlbnRfdHlwZSA9PSBldmVudCB8fCBldmVudHB0ci0+ZXZlbnRfdHlwZSA9PSAtMSkKIAkJCQkmJiAoZXZlbnRwdHItPmV2ZW50X2NvbnRleHQgPT0gTlVMTCB8fCBldmVudHB0ci0+ZXZlbnRfY29udGV4dCA9PSBldmVudF9jdHgpKSB7CiAJCQkJbGlzdF9kZWwoJmV2ZW50cHRyLT5saXN0KTsKKwkJCQkvKiBVc2VyIG1heSBoYXZlIHN1YnNjcmliZWQgdG8gQU5ZIGV2ZW50LCBzbworCQkJCSAqIHdlIHRlbGwgdGhlbSB3aGljaCBldmVudCB0cmlnZ2VyZWQgaXQuICovCisJCQkJZXZlbnRwdHItPmV2ZW50X3R5cGUgPSBldmVudDsKIAkJCQlzY2hlZHVsZV93b3JrKCZldmVudHB0ci0+d29yayk7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCmluZGV4IGNjNmNkNTYuLjA5NTQxNjEgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYwpAQCAtMTQ5LDYgKzE0OSw1NiBAQAogCSAqIHNob3VsZG4ndCB0aGUgc2VxdWVuY2UgbnVtYmVyIGJlIGluIGllZWU4MDIxMT8gKi8KIH0KIAorc3RhdGljIHUxNgoraWVlZTgwMjExc29mdG1hY19jYXBhYmlsaXRpZXMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQoreworCXUxNiBjYXBhYmlsaXR5ID0gMDsKKworCS8qIEVTUyBhbmQgSUJTUyBiaXRzIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IG1vZGUgKi8KKwlzd2l0Y2ggKG1hYy0+aWVlZS0+aXdfbW9kZSkgeworCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJY2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9FU1MpOworCQlicmVhazsKKwljYXNlIElXX01PREVfQURIT0M6CisJCWNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9BVVRPOgorCQljYXBhYmlsaXR5ID0gbmV0LT5jYXBhYmlsaXRpZXMgJgorCQkJKFdMQU5fQ0FQQUJJTElUWV9FU1N8V0xBTl9DQVBBQklMSVRZX0lCU1MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBibGVoLiB3ZSBkb24ndCBldmVyIGdvIHRvIHRoZXNlIG1vZGVzICovCisJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgaXdfbW9kZSFcbiIpOworCQlicmVhazsKKwl9CisKKwkvKiBDRiBQb2xsYWJsZSAvIENGIFBvbGwgUmVxdWVzdCAqLworCS8qIE5lZWRzIHRvIGJlIGltcGxlbWVudGVkLCBmb3Igbm93LCB0aGUgMCdzID09IG5vdCBzdXBwb3J0ZWQgKi8KKworCS8qIFByaXZhY3kgQml0ICovCisJY2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNlYy5sZXZlbCA/CisJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSA6IDA7CisKKwkvKiBTaG9ydCBQcmVhbWJsZSAqLworCS8qIEFsd2F5cyBzdXBwb3J0ZWQ6IHdlIHByb2JhYmx5IHdvbid0IGV2ZXIgYmUgcG93ZXJpbmcgZGV2aWNlcyB3aGljaAorCSAqIGRvbnQgc3VwcG9ydCB0aGlzLi4uICovCisJY2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CisKKwkvKiBQQkNDICovCisJLyogTm90IHdpZGVseSB1c2VkICovCisKKwkvKiBDaGFubmVsIEFnaWxpdHkgKi8KKwkvKiBOb3Qgd2lkZWx5IHVzZWQgKi8KKworCS8qIFNob3J0IFNsb3QgKi8KKwkvKiBXaWxsIGJlIGltcGxlbWVudGVkIGxhdGVyICovCisKKwkvKiBEU1NTLU9GRE0gKi8KKwkvKiBOb3Qgd2lkZWx5IHVzZWQgKi8KKworCXJldHVybiBjYXBhYmlsaXR5OworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENyZWF0ZSBNYW5hZ2VtZW50IHBhY2tldHMKQEAgLTE3OSwyNyArMjI5LDYgQEAKIAkJcmV0dXJuIDA7CiAJaWVlZTgwMjExc29mdG1hY19oZHJfM2FkZHIobWFjLCAmKCgqcGt0KS0+aGVhZGVyKSwgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSwgbmV0LT5ic3NpZCwgbmV0LT5ic3NpZCk7CiAKLQkvKiBGaWxsIGluIGNhcGFiaWxpdHkgSW5mbyAqLwotCXN3aXRjaCAobWFjLT5pZWVlLT5pd19tb2RlKSB7Ci0JY2FzZSBJV19NT0RFX0lORlJBOgotCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfRVNTKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0FESE9DOgotCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfSUJTUyk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9BVVRPOgotCQkoKnBrdCktPmNhcGFiaWxpdHkgPSBuZXQtPmNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTfFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogYmxlaC4gd2UgZG9uJ3QgZXZlciBnbyB0byB0aGVzZSBtb2RlcyAqLwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJpbnZhbGlkIGl3X21vZGUhXG4iKTsKLQkJYnJlYWs7Ci0JfQotCS8qIE5lZWQgdG8gYWRkIHRoaXMKLQkoKnBrdCktPmNhcGFiaWxpdHkgfD0gbWFjLT5pZWVlLT5zaG9ydF9zbG90ID8gCi0JCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKSA6IDA7Ci0JICovCi0JKCpwa3QpLT5jYXBhYmlsaXR5IHw9IG1hYy0+aWVlZS0+c2VjLmxldmVsID8gY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIDogMDsKIAkvKiBGaWxsIGluIExpc3RlbiBJbnRlcnZhbCAoPykgKi8KIAkoKnBrdCktPmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KDEwKTsKIAkKQEAgLTIzOSwxNyArMjY4LDkgQEAKIAkJcmV0dXJuIDA7CiAJaWVlZTgwMjExc29mdG1hY19oZHJfM2FkZHIobWFjLCAmKCgqcGt0KS0+aGVhZGVyKSwgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKIAotCS8qIEZpbGwgaW4gY2FwYWJpbGl0eSBJbmZvICovCi0JKCpwa3QpLT5jYXBhYmlsaXR5ID0gbWFjLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSID8gCi0JCQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0VTUykgOgotCQkJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKLQkvKgotCSgqcGt0KS0+Y2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNob3J0X3Nsb3QgPyAKLQkJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpIDogMDsKLQkgKi8KLQkoKnBrdCktPmNhcGFiaWxpdHkgfD0gbWFjLT5pZWVlLT5zZWMubGV2ZWwgPwotCQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIDogMDsKLQkJCisJLyogRmlsbCBpbiB0aGUgY2FwYWJpbGl0aWVzICovCisJKCpwa3QpLT5jYXBhYmlsaXR5ID0gaWVlZTgwMjExc29mdG1hY19jYXBhYmlsaXRpZXMobWFjLCBuZXQpOworCiAJLyogRmlsbCBpbiBMaXN0ZW4gSW50ZXJ2YWwgKD8pICovCiAJKCpwa3QpLT5saXN0ZW5faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNigxMCk7CiAJLyogRmlsbCBpbiB0aGUgY3VycmVudCBBUCBNQUMgKi8KQEAgLTI2OCwyNiArMjg5LDI3IEBACiBzdGF0aWMgdTMyCiBpZWVlODAyMTFzb2Z0bWFjX2F1dGgoc3RydWN0IGllZWU4MDIxMV9hdXRoICoqcGt0LCAKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0LAotCXUxNiB0cmFuc2FjdGlvbiwgdTE2IHN0YXR1cykKKwl1MTYgdHJhbnNhY3Rpb24sIHUxNiBzdGF0dXMsIGludCAqZW5jcnlwdF9tcGR1KQogewogCXU4ICpkYXRhOworCWludCBhdXRoX21vZGUgPSBtYWMtPmllZWUtPnNlYy5hdXRoX21vZGU7CisJaW50IGlzX3NoYXJlZF9yZXNwb25zZSA9IChhdXRoX21vZGUgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKKwkJJiYgdHJhbnNhY3Rpb24gPT0gSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9SRVNQT05TRSk7CisKIAkvKiBBbGxvY2F0ZSBQYWNrZXQgKi8KIAkoKnBrdCkgPSAoc3RydWN0IGllZWU4MDIxMV9hdXRoICopaWVlZTgwMjExc29mdG1hY19hbGxvY19tZ3QoCiAJCTIgKwkJLyogQXV0aCBBbGdvcml0aG0gKi8KIAkJMiArCQkvKiBBdXRoIFRyYW5zYWN0aW9uIFNlcSAqLwogCQkyICsJCS8qIFN0YXR1cyBDb2RlICovCiAJCSAvKiBDaGFsbGVuZ2UgVGV4dCBJRSAqLwotCQltYWMtPmllZWUtPm9wZW5fd2VwID8gMCA6IAotCQkxICsgMSArIFdMQU5fQVVUSF9DSEFMTEVOR0VfTEVOCi0JKTsJCisJCWlzX3NoYXJlZF9yZXNwb25zZSA/IDAgOiAxICsgMSArIG5ldC0+Y2hhbGxlbmdlX2xlbgorCSk7CiAJaWYgKHVubGlrZWx5KCgqcGt0KSA9PSBOVUxMKSkKIAkJcmV0dXJuIDA7CiAJaWVlZTgwMjExc29mdG1hY19oZHJfM2FkZHIobWFjLCAmKCgqcGt0KS0+aGVhZGVyKSwgSUVFRTgwMjExX1NUWVBFX0FVVEgsIG5ldC0+YnNzaWQsIG5ldC0+YnNzaWQpOwogCQkKIAkvKiBBbGdvcml0aG0gKi8KLQkoKnBrdCktPmFsZ29yaXRobSA9IG1hYy0+aWVlZS0+b3Blbl93ZXAgPyAKLQkJY3B1X3RvX2xlMTYoV0xBTl9BVVRIX09QRU4pIDoKLQkJY3B1X3RvX2xlMTYoV0xBTl9BVVRIX1NIQVJFRF9LRVkpOworCSgqcGt0KS0+YWxnb3JpdGhtID0gY3B1X3RvX2xlMTYoYXV0aF9tb2RlKTsKIAkvKiBUcmFuc2FjdGlvbiAqLwogCSgqcGt0KS0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7CiAJLyogU3RhdHVzICovCkBAIC0yOTUsMTggKzMxNywyMCBAQAogCQogCWRhdGEgPSAodTggKikoKnBrdCktPmluZm9fZWxlbWVudDsKIAkvKiBDaGFsbGVuZ2UgVGV4dCAqLwotCWlmKCFtYWMtPmllZWUtPm9wZW5fd2VwKXsKKwlpZiAoaXNfc2hhcmVkX3Jlc3BvbnNlKSB7CiAJCSpkYXRhID0gTUZJRV9UWVBFX0NIQUxMRU5HRTsKIAkJZGF0YSsrOwogCQkKIAkJLyogQ29weSB0aGUgY2hhbGxlbmdlIGluICovCi0JCS8vICpkYXRhID0gY2hhbGxlbmdlIGxlbmd0aAotCQkvLyBkYXRhICs9IHNpemVvZih1MTYpOwotCQkvLyBtZW1jcHkoZGF0YSwgY2hhbGxlbmdlLCBjaGFsbGVuZ2UgbGVuZ3RoKTsKLQkJLy8gZGF0YSArPSBjaGFsbGVuZ2UgbGVuZ3RoOwotCQkKLQkJLyogQWRkIHRoZSBmdWxsIHNpemUgdG8gdGhlIHBhY2tldCBsZW5ndGggKi8KLQl9CisJCSpkYXRhID0gbmV0LT5jaGFsbGVuZ2VfbGVuOworCQlkYXRhKys7CisJCW1lbWNweShkYXRhLCBuZXQtPmNoYWxsZW5nZSwgbmV0LT5jaGFsbGVuZ2VfbGVuKTsKKwkJZGF0YSArPSBuZXQtPmNoYWxsZW5nZV9sZW47CisKKwkJLyogTWFrZSBzdXJlIHRoaXMgZnJhbWUgZ2V0cyBlbmNyeXB0ZWQgd2l0aCB0aGUgc2hhcmVkIGtleSAqLworCQkqZW5jcnlwdF9tcGR1ID0gMTsKKwl9IGVsc2UKKwkJKmVuY3J5cHRfbXBkdSA9IDA7CiAKIAkvKiBSZXR1cm4gdGhlIHBhY2tldCBzaXplICovCiAJcmV0dXJuIChkYXRhIC0gKHU4ICopKCpwa3QpKTsKQEAgLTM5Niw2ICs0MjAsNyBAQAogewogCXZvaWQgKnBrdCA9IE5VTEw7CiAJdTMyIHBrdF9zaXplID0gMDsKKwlpbnQgZW5jcnlwdF9tcGR1ID0gMDsKIAogCXN3aXRjaCh0eXBlKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROgpAQCAtNDA1LDcgKzQzMCw3IEBACiAJCXBrdF9zaXplID0gaWVlZTgwMjExc29mdG1hY19yZWFzc29jX3JlcSgoc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgKiopKCZwa3QpLCBtYWMsIChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICopcHRyYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX2F1dGgoKHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqKikoJnBrdCksIG1hYywgKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKilwdHJhcmcsICh1MTYpKGFyZyAmIDB4RkZGRiksICh1MTYpIChhcmcgPj4gMTYpKTsKKwkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX2F1dGgoKHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqKikoJnBrdCksIG1hYywgKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKilwdHJhcmcsICh1MTYpKGFyZyAmIDB4RkZGRiksICh1MTYpIChhcmcgPj4gMTYpLCAmZW5jcnlwdF9tcGR1KTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgpAQCAtNDM0LDUyICs0NTksOCBAQAogCSAqIG9yIGdldCByaWQgb2YgaXQgYWxsdG9nZXRoZXI/CiAJICogRG9lcyB0aGlzIHdvcmsgZm9yIHlvdSBub3c/CiAJICovCi0JaWVlZTgwMjExX3R4X2ZyYW1lKG1hYy0+aWVlZSwgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcGt0LCBwa3Rfc2l6ZSk7Ci0KLQlrZnJlZShwa3QpOwotCXJldHVybiAwOwotfQotCi0KLS8qIENyZWF0ZSBhbiBydHMvY3RzIGZyYW1lICovCi1zdGF0aWMgdTMyCi1pZWVlODAyMTFzb2Z0bWFjX3J0c19jdHMoc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgKipwa3QsCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCwgCi0JdTMyIHR5cGUpCi17Ci0JLyogQWxsb2NhdGUgUGFja2V0ICovCi0JKCpwa3QpID0ga21hbGxvYyhJRUVFODAyMTFfMkFERFJfTEVOLCBHRlBfQVRPTUlDKTsJCi0JbWVtc2V0KCpwa3QsIDAsIElFRUU4MDIxMV8yQUREUl9MRU4pOwotCWlmKCgqcGt0KSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlpZWVlODAyMTFzb2Z0bWFjX2hkcl8yYWRkcihtYWMsICgqcGt0KSwgdHlwZSwgbmV0LT5ic3NpZCk7Ci0JcmV0dXJuIElFRUU4MDIxMV8yQUREUl9MRU47Ci19Ci0KLQotLyogU2VuZHMgYSBjb250cm9sIHBhY2tldCAqLwotc3RhdGljIGludAotaWVlZTgwMjExc29mdG1hY19zZW5kX2N0bF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsIHUzMiB0eXBlLCB1MzIgYXJnKQotewotCXZvaWQgKnBrdCA9IE5VTEw7Ci0JdTMyIHBrdF9zaXplID0gMDsKLQkKLQlzd2l0Y2godHlwZSkgewotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JUUzoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9DVFM6Ci0JCXBrdF9zaXplID0gaWVlZTgwMjExc29mdG1hY19ydHNfY3RzKChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqKikoJnBrdCksIG1hYywgbmV0LCB0eXBlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiVW5zdXBwb3J0ZWQgQ29udHJvbCBGcmFtZSB0eXBlOiAlaVxuIiwgdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmKHBrdF9zaXplID09IDApCi0JCXJldHVybiAtRU5PTUVNOwotCQotCS8qIFNlbmQgdGhlIHBhY2tldCB0byB0aGUgaWVlZTgwMjExIGxheWVyIGZvciB0eCAqLwotCWllZWU4MDIxMV90eF9mcmFtZShtYWMtPmllZWUsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBwa3QsIHBrdF9zaXplKTsKKwlpZWVlODAyMTFfdHhfZnJhbWUobWFjLT5pZWVlLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwa3QsCisJCUlFRUU4MDIxMV8zQUREUl9MRU4sIHBrdF9zaXplLCBlbmNyeXB0X21wZHUpOwogCiAJa2ZyZWUocGt0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKaW5kZXggNjI1MmJlMi4uNGIyZTU3ZCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgImllZWU4MDIxMXNvZnRtYWNfcHJpdi5oIgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExc29mdG1hYyhpbnQgc2l6ZW9mX3ByaXYpCiB7CkBAIC02MSwxNCArNjIsNiBAQAogCXNvZnRtYWMtPndhaXRfZm9yX3NjYW4gPSBpZWVlODAyMTFzb2Z0bWFjX3dhaXRfZm9yX3NjYW5faW1wbGVtZW50YXRpb247CiAJc29mdG1hYy0+c3RvcF9zY2FuID0gaWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW5faW1wbGVtZW50YXRpb247CiAKLQkvL1RPRE86IFRoZSBtY2FzdCByYXRlIGhhcyB0byBiZSBhc3NpZ25lZCBkeW5hbWljYWxseSBzb21ld2hlcmUgKGluIHNjYW5uaW5nLCBhc3NvY2lhdGlvbi4gTm90IHN1cmUuLi4pCi0JLy8gICAgICBJdCBoYXMgdG8gYmUgc2V0IHRvIHRoZSBoaWdoZXN0IHJhdGUgYWxsIHN0YXRpb25zIGluIHRoZSBjdXJyZW50IG5ldHdvcmsgY2FuIGhhbmRsZS4KLQlzb2Z0bWFjLT50eHJhdGVzLm1jYXN0X3JhdGUgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCXNvZnRtYWMtPnR4cmF0ZXMubWNhc3RfZmFsbGJhY2sgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCS8qIFRoaXMgaXMgcmVhc3NpZ25lZCBpbiBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0IHRvIHNhbmUgdmFsdWVzLiAqLwotCXNvZnRtYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKLQlzb2Z0bWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2sgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCiAJLyogdG8gc3RhcnQgd2l0aCwgd2UgY2FuJ3Qgc2VuZCBhbnl0aGluZyAuLi4gKi8KIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQpAQCAtMTcwLDE1ICsxNjMsODIgQEAKIAl9CiB9CiAKLXZvaWQgaWVlZTgwMjExc29mdG1hY19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvX3JhdGVfc3VwcG9ydGVkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyAqcmksIHU4IHJhdGUpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWludCBzZWFyY2g7CisJdTggc2VhcmNoX3JhdGU7CisKKwlmb3IgKHNlYXJjaCA9IDA7IHNlYXJjaCA8IHJpLT5jb3VudDsgc2VhcmNoKyspIHsKKwkJc2VhcmNoX3JhdGUgPSByaS0+cmF0ZXNbc2VhcmNoXTsKKwkJc2VhcmNoX3JhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7CisJCWlmIChyYXRlID09IHNlYXJjaF9yYXRlKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEZpbmRzIHRoZSBoaWdoZXN0IHJhdGUgd2hpY2ggaXM6CisgKiAgMS4gUHJlc2VudCBpbiByaSAob3B0aW9uYWxseSBhIGJhc2ljIHJhdGUpCisgKiAgMi4gU3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKKyAqICAzLiBMZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHVzZXItZGVmaW5lZCByYXRlCisgKi8KK3N0YXRpYyB1OCBoaWdoZXN0X3N1cHBvcnRlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyAqcmksIGludCBiYXNpY19vbmx5KQoreworCXU4IHVzZXJfcmF0ZSA9IG1hYy0+dHhyYXRlcy51c2VyX3JhdGU7CisJaW50IGk7CisKKwlpZiAocmktPmNvdW50ID09IDApIHsKKwkJZHByaW50ayhLRVJOX0VSUiBQRlggImVtcHR5IHJhdGVzaW5mbz9cbiIpOworCQlyZXR1cm4gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwl9CisKKwlmb3IgKGkgPSByaS0+Y291bnQgLSAxOyBpID49IDA7IGktLSkgeworCQl1OCByYXRlID0gcmktPnJhdGVzW2ldOworCQlpZiAoYmFzaWNfb25seSAmJiAhKHJhdGUgJiBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSkKKwkJCWNvbnRpbnVlOworCQlyYXRlICY9IH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLOworCQlpZiAocmF0ZSA+IHVzZXJfcmF0ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm9fcmF0ZV9zdXBwb3J0ZWQoJm1hYy0+cmF0ZXNpbmZvLCByYXRlKSkKKwkJCXJldHVybiByYXRlOworCX0KKworCS8qIElmIHdlIGhhdmVuJ3QgZm91bmQgYSBzdWl0YWJsZSByYXRlIGJ5IG5vdywganVzdCB0cnVzdCB0aGUgdXNlciAqLworCXJldHVybiB1c2VyX3JhdGU7Cit9CisKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19yZWNhbGNfdHhyYXRlcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzICp0eHJhdGVzID0gJm1hYy0+dHhyYXRlczsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzIG9sZHJhdGVzOworCXUzMiBjaGFuZ2UgPSAwOworCisJaWYgKG1hYy0+dHhyYXRlc19jaGFuZ2UpCisJCW9sZHJhdGVzID0gbWFjLT50eHJhdGVzOworCisJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7CisJdHhyYXRlcy0+ZGVmYXVsdF9yYXRlID0gaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZShtYWMsICZtYWMtPmFzc29jaW5mby5zdXBwb3J0ZWRfcmF0ZXMsIDApOworCisJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFRfRkJBQ0s7CisJdHhyYXRlcy0+ZGVmYXVsdF9mYWxsYmFjayA9IGxvd2VyX3JhdGUobWFjLCB0eHJhdGVzLT5kZWZhdWx0X3JhdGUpOworCisJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01DQVNUOworCXR4cmF0ZXMtPm1jYXN0X3JhdGUgPSBoaWdoZXN0X3N1cHBvcnRlZF9yYXRlKG1hYywgJm1hYy0+YXNzb2NpbmZvLnN1cHBvcnRlZF9yYXRlcywgMSk7CisKKwlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKKwkJbWFjLT50eHJhdGVzX2NoYW5nZShtYWMtPmRldiwgY2hhbmdlLCAmb2xkcmF0ZXMpOworCit9CisKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19pbml0X3R4cmF0ZXMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpCit7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBtYWMtPmllZWU7CiAJdTMyIGNoYW5nZSA9IDA7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyAqdHhyYXRlcyA9ICZtYWMtPnR4cmF0ZXM7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyBvbGRyYXRlczsKIAotCWllZWU4MDIxMXNvZnRtYWNfc3RhcnRfY2hlY2tfcmF0ZXMobWFjKTsKLQogCS8qIFRPRE86IFdlIG5lZWQgc29tZSBraW5kIG9mIHN0YXRlIG1hY2hpbmUgdG8gbG93ZXIgdGhlIGRlZmF1bHQgcmF0ZXMKIAkgKiAgICAgICBpZiB3ZSBsb29zZSB0b28gbWFueSBwYWNrZXRzLgogCSAqLwpAQCAtMTkzLDIyICsyNTMsMzcgQEAKIAkgICBtb3JlIHJlbGlhYmxlLiBOb3RlIHNpbWlsYXIgbG9naWMgaW4KIAkgICBpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9yYXRlKCkgKi8JIAogCWlmIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OKSB7Ci0JCW1hYy0+dHhyYXRlcy5kZWZhdWx0X3JhdGUgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjsKLQkJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7Ci0JCW1hYy0+dHhyYXRlcy5kZWZhdWx0X2ZhbGxiYWNrID0gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQkJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFRfRkJBQ0s7CisJCXR4cmF0ZXMtPnVzZXJfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COwogCX0gZWxzZSBpZiAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pIHsKLQkJbWFjLT50eHJhdGVzLmRlZmF1bHRfcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKLQkJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7Ci0JCW1hYy0+dHhyYXRlcy5kZWZhdWx0X2ZhbGxiYWNrID0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1COwotCQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVF9GQkFDSzsKKwkJdHhyYXRlcy0+dXNlcl9yYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1COwogCX0gZWxzZQogCQlhc3NlcnQoMCk7CisKKwl0eHJhdGVzLT5kZWZhdWx0X3JhdGUgPSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COworCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUOworCisJdHhyYXRlcy0+ZGVmYXVsdF9mYWxsYmFjayA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7CisJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFRfRkJBQ0s7CisKKwl0eHJhdGVzLT5tY2FzdF9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUNBU1Q7CisKKwl0eHJhdGVzLT5tZ3RfbWNhc3RfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7CisJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01HVF9NQ0FTVDsKKwogCWlmIChtYWMtPnR4cmF0ZXNfY2hhbmdlKQotCQltYWMtPnR4cmF0ZXNfY2hhbmdlKGRldiwgY2hhbmdlLCAmb2xkcmF0ZXMpOworCQltYWMtPnR4cmF0ZXNfY2hhbmdlKG1hYy0+ZGV2LCBjaGFuZ2UsICZvbGRyYXRlcyk7CiAKIAltYWMtPnJ1bm5pbmcgPSAxOwogfQorCit2b2lkIGllZWU4MDIxMXNvZnRtYWNfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisKKwlpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X2NoZWNrX3JhdGVzKG1hYyk7CisJaWVlZTgwMjExc29mdG1hY19pbml0X3R4cmF0ZXMobWFjKTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc3RhcnQpOwogCiB2b2lkIGllZWU4MDIxMXNvZnRtYWNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfcHJpdi5oIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfcHJpdi5oCmluZGV4IDY1ZDk4MTYuLmZhMWY4ZTMgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3ByaXYuaAorKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmgKQEAgLTExNiw3ICsxMTYsMTAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqZXNzaWQpOwogCiAvKiBSYXRlcyByZWxhdGVkICovCitpbnQgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm9fcmF0ZV9zdXBwb3J0ZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyaSwgdTggcmF0ZSk7CiB1OCBpZWVlODAyMTFzb2Z0bWFjX2xvd2VyX3JhdGVfZGVsdGEoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4IHJhdGUsIGludCBkZWx0YSk7Cit2b2lkIGllZWU4MDIxMXNvZnRtYWNfaW5pdF90eHJhdGVzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKTsKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19yZWNhbGNfdHhyYXRlcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyk7CiBzdGF0aWMgaW5saW5lIHU4IGxvd2VyX3JhdGUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4IHJhdGUpIHsKIAlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19sb3dlcl9yYXRlX2RlbHRhKG1hYywgcmF0ZSwgMSk7CiB9CkBAIC0xNTAsNiArMTUzLDggQEAKIGludCBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9yZWFzc29jX3JlcShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKIAkJCQkgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0ICogcmVhc3NvYyk7CiB2b2lkIGllZWU4MDIxMXNvZnRtYWNfYXNzb2NfdGltZW91dCh2b2lkICpkKTsKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19zZW5kX2Rpc2Fzc29jX3JlcShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTE2IHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMXNvZnRtYWNfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpOwogCiAvKiBzb21lIGhlbHBlciBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9oYW5kbGVyc19jaGVja19zZWxmKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20pCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwppbmRleCAyN2VkYjJiLi4yMmFhNjE5IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKQEAgLTIxMSw4ICsyMTEsOCBAQAogCWlmIChpc19vZmRtICYmICEoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQltYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlID0gcmF0ZTsKLQltYWMtPnR4cmF0ZXMuZGVmYXVsdF9mYWxsYmFjayA9IGxvd2VyX3JhdGUobWFjLCByYXRlKTsKKwltYWMtPnR4cmF0ZXMudXNlcl9yYXRlID0gcmF0ZTsKKwlpZWVlODAyMTFzb2Z0bWFjX3JlY2FsY190eHJhdGVzKG1hYyk7CiAJZXJyID0gMDsKIAogb3V0X3VubG9jazoJCkBAIC00MzEsMyArNDMxLDM1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9nZW5pZSk7CiAKK2ludAoraWVlZTgwMjExc29mdG1hY193eF9zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKKwl1MTYgcmVhc29uID0gY3B1X3RvX2xlMTYobWxtZS0+cmVhc29uX2NvZGUpOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldDsKKworCWlmIChtZW1jbXAobWFjLT5hc3NvY2luZm8uYnNzaWQsIG1sbWUtPmFkZHIuc2FfZGF0YSwgRVRIX0FMRU4pKSB7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAid3hfc2V0X21sbWU6IHJlcXVlc3RlZCBvcGVyYXRpb24gb24gbmV0IHdlIGRvbid0IHVzZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAobWxtZS0+Y21kKSB7CisJY2FzZSBJV19NTE1FX0RFQVVUSDoKKwkJbmV0ID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZF9sb2NrZWQobWFjLCBtbG1lLT5hZGRyLnNhX2RhdGEpOworCQlpZiAoIW5ldCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJ3eF9zZXRfbWxtZTogd2Ugc2hvdWxkIGtub3cgdGhlIG5ldCBoZXJlLi4uXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldHVybiBpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9yZXEobWFjLCBuZXQsIHJlYXNvbik7CisJY2FzZSBJV19NTE1FX0RJU0FTU09DOgorCQlpZWVlODAyMTFzb2Z0bWFjX3NlbmRfZGlzYXNzb2NfcmVxKG1hYywgcmVhc29uKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X21sbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggZTQwZjc1My4uZGEzMzM5MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC00MTQsNiArNDE0LDI0IEBACiAJdHJpc3RhdGUKIAlkZWZhdWx0IG4KIAorY29uZmlnIElORVRfWEZSTV9NT0RFX1RSQU5TUE9SVAorCXRyaXN0YXRlICJJUDogSVBzZWMgdHJhbnNwb3J0IG1vZGUiCisJZGVmYXVsdCB5CisJc2VsZWN0IFhGUk0KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBJUHNlYyB0cmFuc3BvcnQgbW9kZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIElORVRfWEZSTV9NT0RFX1RVTk5FTAorCXRyaXN0YXRlICJJUDogSVBzZWMgdHVubmVsIG1vZGUiCisJZGVmYXVsdCB5CisJc2VsZWN0IFhGUk0KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBJUHNlYyB0dW5uZWwgbW9kZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIElORVRfRElBRwogCXRyaXN0YXRlICJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UiCiAJZGVmYXVsdCB5CkBAIC01MzIsNiArNTUwLDM4IEBACiAJcHJvcGVydGllcywgdGhvdWdoIGlzIGtub3duIHRvIGhhdmUgZmFpcm5lc3MgaXNzdWVzLgogCVNlZSBodHRwOi8vd3d3LWxjZS5lbmcuY2FtLmFjLnVrL35jdGsyMS9zY2FsYWJsZS8KIAorY29uZmlnIFRDUF9DT05HX0xQCisJdHJpc3RhdGUgIlRDUCBMb3cgUHJpb3JpdHkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJVENQIExvdyBQcmlvcml0eSAoVENQLUxQKSwgYSBkaXN0cmlidXRlZCBhbGdvcml0aG0gd2hvc2UgZ29hbCBpcworCXRvIHV0aWxpemEgb25seSB0aGUgZXhjZXNzIG5ldHdvcmsgYmFuZHdpZHRoIGFzIGNvbXBhcmVkIHRvIHRoZQorCWBgZmFpciBzaGFyZWBgIG9mIGJhbmR3aWR0aCBhcyB0YXJnZXRlZCBieSBUQ1AuCisJU2VlIGh0dHA6Ly93d3ctZWNlLnJpY2UuZWR1L25ldHdvcmtzL1RDUC1MUC8KKworY29uZmlnIFRDUF9DT05HX1ZFTk8KKwl0cmlzdGF0ZSAiVENQIFZlbm8iCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJVENQIFZlbm8gaXMgYSBzZW5kZXItc2lkZSBvbmx5IGVuaGFuY2VtZW50IG9mIFRDUCB0byBvYnRhaW4gYmV0dGVyCisJdGhyb3VnaHB1dCBvdmVyIHdpcmVsZXNzIG5ldHdvcmtzLiBUQ1AgVmVubyBtYWtlcyB1c2Ugb2Ygc3RhdGUKKwlkaXN0aW5ndWlzaGluZyB0byBjaXJjdW12ZW50IHRoZSBkaWZmaWN1bHQganVkZ21lbnQgb2YgdGhlIHBhY2tldCBsb3NzCisJdHlwZS4gVENQIFZlbm8gY3V0cyBkb3duIGxlc3MgY29uZ2VzdGlvbiB3aW5kb3cgaW4gcmVzcG9uc2UgdG8gcmFuZG9tCisJbG9zcyBwYWNrZXRzLgorCVNlZSBodHRwOi8vd3d3Lm50dS5lZHUuc2cvaG9tZTUvWkhPVTAwMjIvcGFwZXJzL0NQRnUwM2EucGRmCisKK2NvbmZpZyBUQ1BfQ09OR19DT01QT1VORAorCXRyaXN0YXRlICJUQ1AgQ29tcG91bmQiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJVENQIENvbXBvdW5kIGlzIGEgc2VuZGVyLXNpZGUgb25seSBjaGFuZ2UgdG8gVENQIHRoYXQgdXNlcworCWEgbWl4ZWQgUmVuby9WZWdhcyBhcHByb2FjaCB0byBjYWxjdWxhdGUgdGhlIGN3bmQuCisJRm9yIGZ1cnRoZXIgZGV0YWlscyBsb29rIGhlcmU6CisJICBmdHA6Ly9mdHAucmVzZWFyY2gubWljcm9zb2Z0LmNvbS9wdWIvdHIvVFItMjAwNS04Ni5wZGYKKwogZW5kbWVudQogCiBjb25maWcgVENQX0NPTkdfQklDCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9NYWtlZmlsZSBiL25ldC9pcHY0L01ha2VmaWxlCmluZGV4IDllZjUwYTAuLjM4YjgwMzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L01ha2VmaWxlCisrKyBiL25ldC9pcHY0L01ha2VmaWxlCkBAIC0yNCw2ICsyNCw4IEBACiBvYmotJChDT05GSUdfSU5FVF9JUENPTVApICs9IGlwY29tcC5vCiBvYmotJChDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCkgKz0geGZybTRfdHVubmVsLm8KIG9iai0kKENPTkZJR19JTkVUX1RVTk5FTCkgKz0gdHVubmVsNC5vCitvYmotJChDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUKSArPSB4ZnJtNF9tb2RlX3RyYW5zcG9ydC5vCitvYmotJChDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMKSArPSB4ZnJtNF9tb2RlX3R1bm5lbC5vCiBvYmotJChDT05GSUdfSVBfUE5QKSArPSBpcGNvbmZpZy5vCiBvYmotJChDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX1JSKSArPSBtdWx0aXBhdGhfcnIubwogb2JqLSQoQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9SQU5ET00pICs9IG11bHRpcGF0aF9yYW5kb20ubwpAQCAtMzQsNiArMzYsNyBAQAogb2JqLSQoQ09ORklHX0lORVRfRElBRykgKz0gaW5ldF9kaWFnLm8gCiBvYmotJChDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRCkgKz0gbXVsdGlwYXRoLm8KIG9iai0kKENPTkZJR19JTkVUX1RDUF9ESUFHKSArPSB0Y3BfZGlhZy5vCitvYmotJChDT05GSUdfTkVUX1RDUFBST0JFKSArPSB0Y3BfcHJvYmUubwogb2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgKz0gdGNwX2JpYy5vCiBvYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICs9IHRjcF9jdWJpYy5vCiBvYmotJChDT05GSUdfVENQX0NPTkdfV0VTVFdPT0QpICs9IHRjcF93ZXN0d29vZC5vCkBAIC00MSw3ICs0NCwxMCBAQAogb2JqLSQoQ09ORklHX1RDUF9DT05HX0hZQkxBKSArPSB0Y3BfaHlibGEubwogb2JqLSQoQ09ORklHX1RDUF9DT05HX0hUQ1ApICs9IHRjcF9odGNwLm8KIG9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgKz0gdGNwX3ZlZ2FzLm8KK29iai0kKENPTkZJR19UQ1BfQ09OR19WRU5PKSArPSB0Y3BfdmVuby5vCiBvYmotJChDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUpICs9IHRjcF9zY2FsYWJsZS5vCitvYmotJChDT05GSUdfVENQX0NPTkdfTFApICs9IHRjcF9scC5vCitvYmotJChDT05GSUdfVENQX0NPTkdfQ09NUE9VTkQpICs9IHRjcF9jb21wb3VuZC5vCiAKIG9iai0kKENPTkZJR19YRlJNKSArPSB4ZnJtNF9wb2xpY3kubyB4ZnJtNF9zdGF0ZS5vIHhmcm00X2lucHV0Lm8gXAogCQkgICAgICB4ZnJtNF9vdXRwdXQubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWg0LmMgYi9uZXQvaXB2NC9haDQuYwppbmRleCBlMmU0NzcxLi5jNzc4MjIzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9haDQuYworKysgYi9uZXQvaXB2NC9haDQuYwpAQCAtMTE5LDYgKzExOSw3IEBACiBzdGF0aWMgaW50IGFoX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBhaF9obGVuOworCWludCBpaGw7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX2F1dGhfaGRyICphaDsKIAlzdHJ1Y3QgYWhfZGF0YSAqYWhwOwpAQCAtMTQ5LDEzICsxNTAsMTQgQEAKIAlhaCA9IChzdHJ1Y3QgaXBfYXV0aF9oZHIqKXNrYi0+ZGF0YTsKIAlpcGggPSBza2ItPm5oLmlwaDsKIAotCW1lbWNweSh3b3JrX2J1ZiwgaXBoLCBpcGgtPmlobCo0KTsKKwlpaGwgPSBza2ItPmRhdGEgLSBza2ItPm5oLnJhdzsKKwltZW1jcHkod29ya19idWYsIGlwaCwgaWhsKTsKIAogCWlwaC0+dHRsID0gMDsKIAlpcGgtPnRvcyA9IDA7CiAJaXBoLT5mcmFnX29mZiA9IDA7CiAJaXBoLT5jaGVjayA9IDA7Ci0JaWYgKGlwaC0+aWhsICE9IDUpIHsKKwlpZiAoaWhsID4gc2l6ZW9mKCppcGgpKSB7CiAJCXUzMiBkdW1teTsKIAkJaWYgKGlwX2NsZWFyX211dGFibGVfb3B0aW9ucyhpcGgsICZkdW1teSkpCiAJCQlnb3RvIG91dDsKQEAgLTE2NCw3ICsxNjYsNyBAQAogCQl1OCBhdXRoX2RhdGFbTUFYX0FIX0FVVEhfTEVOXTsKIAkJCiAJCW1lbWNweShhdXRoX2RhdGEsIGFoLT5hdXRoX2RhdGEsIGFocC0+aWN2X3RydW5jX2xlbik7Ci0JCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gc2tiLT5uaC5yYXcpOworCQlza2JfcHVzaChza2IsIGlobCk7CiAJCWFocC0+aWN2KGFocCwgc2tiLCBhaC0+YXV0aF9kYXRhKTsKIAkJaWYgKG1lbWNtcChhaC0+YXV0aF9kYXRhLCBhdXRoX2RhdGEsIGFocC0+aWN2X3RydW5jX2xlbikpIHsKIAkJCXgtPnN0YXRzLmludGVncml0eV9mYWlsZWQrKzsKQEAgLTE3MiwxMSArMTc0LDggQEAKIAkJfQogCX0KIAkoKHN0cnVjdCBpcGhkciopd29ya19idWYpLT5wcm90b2NvbCA9IGFoLT5uZXh0aGRyOwotCXNrYi0+bmgucmF3ID0gc2tiX3B1bGwoc2tiLCBhaF9obGVuKTsKLQltZW1jcHkoc2tiLT5uaC5yYXcsIHdvcmtfYnVmLCBpcGgtPmlobCo0KTsKLQlza2ItPm5oLmlwaC0+dG90X2xlbiA9IGh0b25zKHNrYi0+bGVuKTsKLQlza2JfcHVsbChza2IsIHNrYi0+bmguaXBoLT5paGwqNCk7Ci0Jc2tiLT5oLnJhdyA9IHNrYi0+ZGF0YTsKKwlza2ItPmgucmF3ID0gbWVtY3B5KHNrYi0+bmgucmF3ICs9IGFoX2hsZW4sIHdvcmtfYnVmLCBpaGwpOworCV9fc2tiX3B1bGwoc2tiLCBhaF9obGVuICsgaWhsKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggOWQxODgxYy4uOWJiZGQ0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCisrKyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMTQzLDEwICsxNDMsOSBAQAogCWludCBhbGVuID0gZXNwLT5hdXRoLmljdl90cnVuY19sZW47CiAJaW50IGVsZW4gPSBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikgLSBlc3AtPmNvbmYuaXZsZW4gLSBhbGVuOwogCWludCBuZnJhZ3M7Ci0JaW50IGVuY2FwX2xlbiA9IDA7CisJaW50IGlobDsKIAl1OCBuZXh0aGRyWzJdOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JdTggd29ya2J1Zls2MF07CiAJaW50IHBhZGxlbjsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikpKQpAQCAtMTc3LDcgKzE3Niw2IEBACiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJZXNwaCA9IChzdHJ1Y3QgaXBfZXNwX2hkciopc2tiLT5kYXRhOwotCWlwaCA9IHNrYi0+bmguaXBoOwogCiAJLyogR2V0IGl2ZWMuIFRoaXMgY2FuIGJlIHdyb25nLCBjaGVjayBhZ2FpbnN0IGFub3RoZXIgaW1wbHMuICovCiAJaWYgKGVzcC0+Y29uZi5pdmxlbikKQEAgLTIwNCwxMiArMjAyLDEyIEBACiAKIAkvKiAuLi4gY2hlY2sgcGFkZGluZyBiaXRzIGhlcmUuIFNpbGx5LiA6LSkgKi8gCiAKKwlpcGggPSBza2ItPm5oLmlwaDsKKwlpaGwgPSBpcGgtPmlobCAqIDQ7CisKIAlpZiAoeC0+ZW5jYXApIHsKIAkJc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXAgPSB4LT5lbmNhcDsKLQkJc3RydWN0IHVkcGhkciAqdWg7Ci0KLQkJdWggPSAoc3RydWN0IHVkcGhkciAqKShpcGggKyAxKTsKLQkJZW5jYXBfbGVuID0gKHZvaWQqKWVzcGggLSAodm9pZCopdWg7CisJCXN0cnVjdCB1ZHBoZHIgKnVoID0gKHZvaWQgKikoc2tiLT5uaC5yYXcgKyBpaGwpOwogCiAJCS8qCiAJCSAqIDEpIGlmIHRoZSBOQVQtVCBwZWVyJ3MgSVAgb3IgcG9ydCBjaGFuZ2VkIHRoZW4KQEAgLTI0NiwxMSArMjQ0LDcgQEAKIAogCWlwaC0+cHJvdG9jb2wgPSBuZXh0aGRyWzFdOwogCXBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gYWxlbiAtIHBhZGxlbiAtIDIpOwotCW1lbWNweSh3b3JrYnVmLCBza2ItPm5oLnJhdywgaXBoLT5paGwqNCk7Ci0Jc2tiLT5oLnJhdyA9IHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSArIGVzcC0+Y29uZi5pdmxlbik7Ci0Jc2tiLT5uaC5yYXcgKz0gZW5jYXBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSArIGVzcC0+Y29uZi5pdmxlbjsKLQltZW1jcHkoc2tiLT5uaC5yYXcsIHdvcmtidWYsIGlwaC0+aWhsKjQpOwotCXNrYi0+bmguaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOworCXNrYi0+aC5yYXcgPSBfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCplc3BoKSArIGVzcC0+Y29uZi5pdmxlbikgLSBpaGw7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCBjZGRlOTYzLi4zMTM4N2FiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtNjY2LDMgKzY2Niw0IEBACiB9CiAKIEVYUE9SVF9TWU1CT0woaW5ldF9hZGRyX3R5cGUpOworRVhQT1JUX1NZTUJPTChpcF9kZXZfZmluZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMmEwNDU1OS4uMDE3OTAwMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtNzMwLDcgKzczMCw2IEBACiBzdGF0aWMgdm9pZCBpY21wX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7Ci0JdW5zaWduZWQgbG9uZyBpcDsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKQogCQlnb3RvIG91dF9lcnI7CkBAIC03NDIsNyArNzQxLDYgQEAKIAkJZ290byBvdXQ7CiAKIAlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwotCWlwID0gaXBoLT5kYWRkcjsKIAogCXN3aXRjaCAoc2tiLT5oLmljbXBoLT5jb2RlICYgNykgewogCWNhc2UgSUNNUF9SRURJUl9ORVQ6CkBAIC03NTIsNyArNzUwLDggQEAKIAkJICovCiAJY2FzZSBJQ01QX1JFRElSX0hPU1Q6CiAJY2FzZSBJQ01QX1JFRElSX0hPU1RUT1M6Ci0JCWlwX3J0X3JlZGlyZWN0KHNrYi0+bmguaXBoLT5zYWRkciwgaXAsIHNrYi0+aC5pY21waC0+dW4uZ2F0ZXdheSwKKwkJaXBfcnRfcmVkaXJlY3Qoc2tiLT5uaC5pcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJICAgICAgIHNrYi0+aC5pY21waC0+dW4uZ2F0ZXdheSwKIAkJCSAgICAgICBpcGgtPnNhZGRyLCBza2ItPmRldik7CiAJCWJyZWFrOwogICAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IGQ1MTIyMzkuLmFiNjgwYzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTIzNjEsNyArMjM2MSw3IEBACiAJCX0KIAogCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICJcdFx0XHRcdCUwOGxYICU1ZCAlZDolMDhsWFx0XHQlZFxuIiwKKwkJCSAgICJcdFx0XHRcdCUwOFggJTVkICVkOiUwOGxYXHRcdCVkXG4iLAogCQkJICAgaW0tPm11bHRpYWRkciwgaW0tPnVzZXJzLAogCQkJICAgaW0tPnRtX3J1bm5pbmcsIGltLT50bV9ydW5uaW5nID8KIAkJCSAgIGppZmZpZXNfdG9fY2xvY2tfdChpbS0+dGltZXIuZXhwaXJlcy1qaWZmaWVzKSA6IDAsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggMDkyM2FkZDEuLjlmMGJiNTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYworKysgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCiB0b29fbWFueV9ob3BzOgogICAgICAgICAvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovCisgICAgICAgIElQX0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAgICAgICAgIGljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGNmZjljM2EuLjg1MzhhYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC00MTAsNiArNDEwLDcgQEAKIAluZl9icmlkZ2VfZ2V0KHRvLT5uZl9icmlkZ2UpOwogI2VuZGlmCiAjZW5kaWYKKwlza2JfY29weV9zZWNtYXJrKHRvLCBmcm9tKTsKIH0KIAogLyoKQEAgLTgzOSw3ICs4NDAsNyBAQAogCSAqLwogCWlmICh0cmFuc2hkcmxlbiAmJgogCSAgICBsZW5ndGggKyBmcmFnaGVhZGVybGVuIDw9IG10dSAmJgotCSAgICBydC0+dS5kc3QuZGV2LT5mZWF0dXJlcyYoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfTk9fQ1NVTXxORVRJRl9GX0hXX0NTVU0pICYmCisJICAgIHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9BTExfQ1NVTSAmJgogCSAgICAhZXh0aGRybGVuKQogCQljc3VtbW9kZSA9IENIRUNLU1VNX0hXOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IDk1Mjc4YjIuLjNlZDhiNTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC00NSw3ICs0NSw2IEBACiBzdGF0aWMgaW50IGlwY29tcF9kZWNvbXByZXNzKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBlcnIsIHBsZW4sIGRsZW47Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwY29tcF9kYXRhICppcGNkID0geC0+ZGF0YTsKIAl1OCAqc3RhcnQsICpzY3JhdGNoOwogCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CkBAIC03NCw4ICs3Myw2IEBACiAJCQogCXNrYl9wdXQoc2tiLCBkbGVuIC0gcGxlbik7CiAJbWVtY3B5KHNrYi0+ZGF0YSwgc2NyYXRjaCwgZGxlbik7Ci0JaXBoID0gc2tiLT5uaC5pcGg7Ci0JaXBoLT50b3RfbGVuID0gaHRvbnMoZGxlbiArIGlwaC0+aWhsICogNCk7CiBvdXQ6CQogCXB1dF9jcHUoKTsKIAlyZXR1cm4gZXJyOwpAQCAtODMsMzQgKzgwLDIxIEBACiAKIHN0YXRpYyBpbnQgaXBjb21wX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXU4IG5leHRoZHI7Ci0JaW50IGVyciA9IDA7CisJaW50IGVyciA9IC1FTk9NRU07CiAJc3RydWN0IGlwaGRyICppcGg7Ci0JdW5pb24gewotCQlzdHJ1Y3QgaXBoZHIJaXBoOwotCQljaGFyIAkJYnVmWzYwXTsKLQl9IHRtcF9pcGg7CisJc3RydWN0IGlwX2NvbXBfaGRyICppcGNoOwogCi0KLQlpZiAoKHNrYl9pc19ub25saW5lYXIoc2tiKSB8fCBza2JfY2xvbmVkKHNrYikpICYmCi0JICAgIHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSB7Ci0JICAgIAllcnIgPSAtRU5PTUVNOworCWlmIChza2JfbGluZWFyaXplX2Nvdyhza2IpKQogCSAgICAJZ290byBvdXQ7Ci0JfQogCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJLyogUmVtb3ZlIGlwY29tcCBoZWFkZXIgYW5kIGRlY29tcHJlc3Mgb3JpZ2luYWwgcGF5bG9hZCAqLwkKIAlpcGggPSBza2ItPm5oLmlwaDsKLQltZW1jcHkoJnRtcF9pcGgsIGlwaCwgaXBoLT5paGwgKiA0KTsKLQluZXh0aGRyID0gKih1OCAqKXNrYi0+ZGF0YTsKLQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBfY29tcF9oZHIpKTsKLQlza2ItPm5oLnJhdyArPSBzaXplb2Yoc3RydWN0IGlwX2NvbXBfaGRyKTsKLQltZW1jcHkoc2tiLT5uaC5yYXcsICZ0bXBfaXBoLCB0bXBfaXBoLmlwaC5paGwgKiA0KTsKLQlpcGggPSBza2ItPm5oLmlwaDsKLQlpcGgtPnRvdF9sZW4gPSBodG9ucyhudG9ocyhpcGgtPnRvdF9sZW4pIC0gc2l6ZW9mKHN0cnVjdCBpcF9jb21wX2hkcikpOwotCWlwaC0+cHJvdG9jb2wgPSBuZXh0aGRyOwotCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJaXBjaCA9ICh2b2lkICopc2tiLT5kYXRhOworCWlwaC0+cHJvdG9jb2wgPSBpcGNoLT5uZXh0aGRyOworCXNrYi0+aC5yYXcgPSBza2ItPm5oLnJhdyArIHNpemVvZigqaXBjaCk7CisJX19za2JfcHVsbChza2IsIHNpemVvZigqaXBjaCkpOwogCWVyciA9IGlwY29tcF9kZWNvbXByZXNzKHgsIHNrYik7CiAKIG91dDoJCkBAIC0xNzEsMTAgKzE1NSw4IEBACiAJCWdvdG8gb3V0X29rOwogCX0KIAotCWlmICgoc2tiX2lzX25vbmxpbmVhcihza2IpIHx8IHNrYl9jbG9uZWQoc2tiKSkgJiYKLQkgICAgc2tiX2xpbmVhcml6ZShza2IsIEdGUF9BVE9NSUMpICE9IDApIHsKKwlpZiAoc2tiX2xpbmVhcml6ZV9jb3coc2tiKSkKIAkJZ290byBvdXRfb2s7Ci0JfQogCQogCWVyciA9IGlwY29tcF9jb21wcmVzcyh4LCBza2IpOwogCWlwaCA9IHNrYi0+bmguaXBoOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAzZDU2MGRlLi5lMWQ3ZjVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtNTUsNiArNTUsMTggQEAKIAkgIG9mIHBhY2tldHMsIGJ1dCB0aGlzIG1hcmsgdmFsdWUgaXMga2VwdCBpbiB0aGUgY29ubnRyYWNrIHNlc3Npb24KIAkgIGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcGFja2V0cy4KIAkKK2NvbmZpZyBJUF9ORl9DT05OVFJBQ0tfU0VDTUFSSworCWJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyAmJiBORVRXT1JLX1NFQ01BUksKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHNlY3VyaXR5IG1hcmtpbmdzIHRvIGJlIGFwcGxpZWQgdG8KKwkgIGNvbm5lY3Rpb25zLiAgVHlwaWNhbGx5IHRoZXkgYXJlIGNvcGllZCB0byBjb25uZWN0aW9ucyBmcm9tCisJICBwYWNrZXRzIHVzaW5nIHRoZSBDT05OU0VDTUFSSyB0YXJnZXQgYW5kIGNvcGllZCBiYWNrIGZyb20KKwkgIGNvbm5lY3Rpb25zIHRvIHBhY2tldHMgd2l0aCB0aGUgc2FtZSB0YXJnZXQsIHdpdGggdGhlIHBhY2tldHMKKwkgIGJlaW5nIG9yaWdpbmFsbHkgbGFiZWxlZCB2aWEgU0VDTUFSSy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCiBjb25maWcgSVBfTkZfQ09OTlRSQUNLX0VWRU5UUwogCWJvb2wgIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIElQX05GX0NPTk5UUkFDSwpAQCAtMTQyLDYgKzE1NCw4IEBACiBjb25maWcgSVBfTkZfQU1BTkRBCiAJdHJpc3RhdGUgIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSworCXNlbGVjdCBURVhUU0VBUkNICisJc2VsZWN0IFRFWFRTRUFSQ0hfS01QCiAJaGVscAogCSAgSWYgeW91IGFyZSBydW5uaW5nIHRoZSBBbWFuZGEgYmFja3VwIHBhY2thZ2UgPGh0dHA6Ly93d3cuYW1hbmRhLm9yZy8+CiAJICBvbiB0aGlzIG1hY2hpbmUgb3IgbWFjaGluZXMgdGhhdCB3aWxsIGJlIE1BU1FVRVJBREVEIHRocm91Z2ggdGhpcwpAQCAtMTcwLDggKzE4NCw4IEBACiAJICBEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0LiAgSWYgdW5zdXJlLCBzYXkgYE4nLgogCiBjb25maWcgSVBfTkZfSDMyMwotCXRyaXN0YXRlICAnSC4zMjMgcHJvdG9jb2wgc3VwcG9ydCcKLQlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSworCXRyaXN0YXRlICAnSC4zMjMgcHJvdG9jb2wgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKScKKwlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3QKIAkgIGltcG9ydGFudCBWb0lQIHByb3RvY29scywgaXQgaXMgd2lkZWx5IHVzZWQgYnkgdm9pY2UgaGFyZHdhcmUgYW5kCkBAIC0xODEsMTQgKzE5NSwyNiBAQAogCSAgV2l0aCB0aGlzIG1vZHVsZSB5b3UgY2FuIHN1cHBvcnQgSC4zMjMgb24gYSBjb25uZWN0aW9uIHRyYWNraW5nL05BVAogCSAgZmlyZXdhbGwuCiAKLQkgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdC1zdGFydCwgSC4yNDUgdHVubmVsbGluZywgUlRQL1JUQ1AKLQkgIGFuZCBULjEyMCBiYXNlZCBkYXRhIGFuZCBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIGF1ZGlvLCB2aWRlbywgRkFYLAotCSAgY2hhdCwgd2hpdGVib2FyZCwgZmlsZSB0cmFuc2ZlciwgZXRjLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlCi0JICBzZWUgaHR0cDovL25hdGgzMjMuc291cmNlZm9yZ2UubmV0Ly4KKwkgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdCBTdGFydCwgSC4yNDUgVHVubmVsbGluZywgQ2FsbAorCSAgRm9yd2FyZGluZywgUlRQL1JUQ1AgYW5kIFQuMTIwIGJhc2VkIGF1ZGlvLCB2aWRlbywgZmF4LCBjaGF0LAorCSAgd2hpdGVib2FyZCwgZmlsZSB0cmFuc2ZlciwgZXRjLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlCisJICB2aXNpdCBodHRwOi8vbmF0aDMyMy5zb3VyY2Vmb3JnZS5uZXQvLgogCiAJICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgJ00nIGhlcmUgYW5kIHJlYWQKIAkgIERvY3VtZW50YXRpb24vbW9kdWxlcy50eHQuICBJZiB1bnN1cmUsIHNheSAnTicuCiAKK2NvbmZpZyBJUF9ORl9TSVAKKwl0cmlzdGF0ZSAiU0lQIHByb3RvY29sIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBJUF9ORl9DT05OVFJBQ0sgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU0lQIGlzIGFuIGFwcGxpY2F0aW9uLWxheWVyIGNvbnRyb2wgcHJvdG9jb2wgdGhhdCBjYW4gZXN0YWJsaXNoLAorCSAgbW9kaWZ5LCBhbmQgdGVybWluYXRlIG11bHRpbWVkaWEgc2Vzc2lvbnMgKGNvbmZlcmVuY2VzKSBzdWNoIGFzCisJICBJbnRlcm5ldCB0ZWxlcGhvbnkgY2FsbHMuIFdpdGggdGhlIGlwX2Nvbm50cmFja19zaXAgYW5kCisJICB0aGUgaXBfbmF0X3NpcCBtb2R1bGVzIHlvdSBjYW4gc3VwcG9ydCB0aGUgcHJvdG9jb2wgb24gYSBjb25uZWN0aW9uCisJICB0cmFja2luZy9OQVRpbmcgZmlyZXdhbGwuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgSVBfTkZfUVVFVUUKIAl0cmlzdGF0ZSAiSVAgVXNlcnNwYWNlIHF1ZXVlaW5nIHZpYSBORVRMSU5LIChPQlNPTEVURSkiCiAJaGVscApAQCAtNTAxLDYgKzUyNywxMiBAQAogCWRlZmF1bHQgSVBfTkZfTkFUIGlmIElQX05GX0gzMjM9eQogCWRlZmF1bHQgbSBpZiBJUF9ORl9IMzIzPW0KIAorY29uZmlnIElQX05GX05BVF9TSVAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMhPW4gJiYgSVBfTkZfQ09OTlRSQUNLIT1uICYmIElQX05GX05BVCE9bgorCWRlZmF1bHQgSVBfTkZfTkFUIGlmIElQX05GX1NJUD15CisJZGVmYXVsdCBtIGlmIElQX05GX1NJUD1tCisKICMgbWFuZ2xlICsgc3BlY2lmaWMgdGFyZ2V0cwogY29uZmlnIElQX05GX01BTkdMRQogCXRyaXN0YXRlICJQYWNrZXQgbWFuZ2xpbmciCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggNDYxY2IxZS4uM2RlZDRhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMzEsNiArMzEsNyBAQAogb2JqLSQoQ09ORklHX0lQX05GX1RGVFApICs9IGlwX2Nvbm50cmFja190ZnRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9GVFApICs9IGlwX2Nvbm50cmFja19mdHAubwogb2JqLSQoQ09ORklHX0lQX05GX0lSQykgKz0gaXBfY29ubnRyYWNrX2lyYy5vCitvYmotJChDT05GSUdfSVBfTkZfU0lQKSArPSBpcF9jb25udHJhY2tfc2lwLm8KIG9iai0kKENPTkZJR19JUF9ORl9ORVRCSU9TX05TKSArPSBpcF9jb25udHJhY2tfbmV0Ymlvc19ucy5vCiAKICMgTkFUIGhlbHBlcnMgCkBAIC00MCw2ICs0MSw3IEBACiBvYmotJChDT05GSUdfSVBfTkZfTkFUX1RGVFApICs9IGlwX25hdF90ZnRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9OQVRfRlRQKSArPSBpcF9uYXRfZnRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9OQVRfSVJDKSArPSBpcF9uYXRfaXJjLm8KK29iai0kKENPTkZJR19JUF9ORl9OQVRfU0lQKSArPSBpcF9uYXRfc2lwLm8KIAogIyBnZW5lcmljIElQIHRhYmxlcyAKIG9iai0kKENPTkZJR19JUF9ORl9JUFRBQkxFUykgKz0gaXBfdGFibGVzLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IGE2MDRiMWMuLjBhN2JkN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtMTcsMzMgKzE3LDI5IEBACiAgKgl0aGlzIHZhbHVlLgogICoKICAqLwotCi0jaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdGV4dHNlYXJjaC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KLSNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KLSNpbmNsdWRlIDxuZXQvdWRwLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2FtYW5kYS5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IG1hc3Rlcl90aW1lb3V0ID0gMzAwOworc3RhdGljIGNoYXIgKnRzX2FsZ28gPSAia21wIjsKIAogTU9EVUxFX0FVVEhPUigiQnJpYW4gSi4gTXVycmVsbCA8bmV0ZmlsdGVyQGludGVybGlueC5iYy5jYT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQW1hbmRhIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBtb2R1bGVfcGFyYW0obWFzdGVyX3RpbWVvdXQsIHVpbnQsIDA2MDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXN0ZXJfdGltZW91dCwgInRpbWVvdXQgZm9yIHRoZSBtYXN0ZXIgY29ubmVjdGlvbiIpOwotCi1zdGF0aWMgY29uc3QgY2hhciAqY29ubnNbXSA9IHsgIkRBVEEgIiwgIk1FU0cgIiwgIklOREVYICIgfTsKLQotLyogVGhpcyBpcyBzbG93LCBidXQgaXQncyBzaW1wbGUuIC0tUlIgKi8KLXN0YXRpYyBjaGFyICphbWFuZGFfYnVmZmVyOwotc3RhdGljIERFRklORV9TUElOTE9DSyhhbWFuZGFfYnVmZmVyX2xvY2spOworbW9kdWxlX3BhcmFtKHRzX2FsZ28sIGNoYXJwLCAwNDAwKTsKK01PRFVMRV9QQVJNX0RFU0ModHNfYWxnbywgInRleHRzZWFyY2ggYWxnb3JpdGhtIHRvIHVzZSAoZGVmYXVsdCBrbXApIik7CiAKIHVuc2lnbmVkIGludCAoKmlwX25hdF9hbWFuZGFfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCQkJCSAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLApAQCAtNTIsMTIgKzQ4LDQ4IEBACiAJCQkJICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CiBFWFBPUlRfU1lNQk9MX0dQTChpcF9uYXRfYW1hbmRhX2hvb2spOwogCitlbnVtIGFtYW5kYV9zdHJpbmdzIHsKKwlTRUFSQ0hfQ09OTkVDVCwKKwlTRUFSQ0hfTkVXTElORSwKKwlTRUFSQ0hfREFUQSwKKwlTRUFSQ0hfTUVTRywKKwlTRUFSQ0hfSU5ERVgsCit9OworCitzdGF0aWMgc3RydWN0IHsKKwljaGFyCQkJKnN0cmluZzsKKwlzaXplX3QJCQlsZW47CisJc3RydWN0IHRzX2NvbmZpZwkqdHM7Cit9IHNlYXJjaFtdID0geworCVtTRUFSQ0hfQ09OTkVDVF0gPSB7CisJCS5zdHJpbmcJPSAiQ09OTkVDVCAiLAorCQkubGVuCT0gOCwKKwl9LAorCVtTRUFSQ0hfTkVXTElORV0gPSB7CisJCS5zdHJpbmcJPSAiXG4iLAorCQkubGVuCT0gMSwKKwl9LAorCVtTRUFSQ0hfREFUQV0gPSB7CisJCS5zdHJpbmcJPSAiREFUQSAiLAorCQkubGVuCT0gNSwKKwl9LAorCVtTRUFSQ0hfTUVTR10gPSB7CisJCS5zdHJpbmcJPSAiTUVTRyAiLAorCQkubGVuCT0gNSwKKwl9LAorCVtTRUFSQ0hfSU5ERVhdID0geworCQkuc3RyaW5nID0gIklOREVYICIsCisJCS5sZW4JPSA2LAorCX0sCit9OworCiBzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogICAgICAgICAgICAgICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKIHsKKwlzdHJ1Y3QgdHNfc3RhdGUgdHM7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKLQljaGFyICpkYXRhLCAqZGF0YV9saW1pdCwgKnRtcDsKLQl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgaTsKKwl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgc3RhcnQsIHN0b3AsIG9mZiwgaTsKKwljaGFyIHBidWZbc2l6ZW9mKCI2NTUzNSIpXSwgKnRtcDsKIAl1X2ludDE2X3QgcG9ydCwgbGVuOwogCWludCByZXQgPSBORl9BQ0NFUFQ7CiAKQEAgLTc3LDI5ICsxMDksMzQgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFtYW5kYV9idWZmZXJfbG9jayk7Ci0Jc2tiX2NvcHlfYml0cygqcHNrYiwgZGF0YW9mZiwgYW1hbmRhX2J1ZmZlciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZik7Ci0JZGF0YSA9IGFtYW5kYV9idWZmZXI7Ci0JZGF0YV9saW1pdCA9IGFtYW5kYV9idWZmZXIgKyAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmOwotCSpkYXRhX2xpbWl0ID0gJ1wwJzsKLQotCS8qIFNlYXJjaCBmb3IgdGhlIENPTk5FQ1Qgc3RyaW5nICovCi0JZGF0YSA9IHN0cnN0cihkYXRhLCAiQ09OTkVDVCAiKTsKLQlpZiAoIWRhdGEpCisJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisJc3RhcnQgPSBza2JfZmluZF90ZXh0KCpwc2tiLCBkYXRhb2ZmLCAoKnBza2IpLT5sZW4sCisJCQkgICAgICBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLnRzLCAmdHMpOworCWlmIChzdGFydCA9PSBVSU5UX01BWCkKIAkJZ290byBvdXQ7Ci0JZGF0YSArPSBzdHJsZW4oIkNPTk5FQ1QgIik7CisJc3RhcnQgKz0gZGF0YW9mZiArIHNlYXJjaFtTRUFSQ0hfQ09OTkVDVF0ubGVuOwogCi0JLyogT25seSBzZWFyY2ggZmlyc3QgbGluZS4gKi8JCi0JaWYgKCh0bXAgPSBzdHJjaHIoZGF0YSwgJ1xuJykpKQotCQkqdG1wID0gJ1wwJzsKKwltZW1zZXQoJnRzLCAwLCBzaXplb2YodHMpKTsKKwlzdG9wID0gc2tiX2ZpbmRfdGV4dCgqcHNrYiwgc3RhcnQsICgqcHNrYiktPmxlbiwKKwkJCSAgICAgc2VhcmNoW1NFQVJDSF9ORVdMSU5FXS50cywgJnRzKTsKKwlpZiAoc3RvcCA9PSBVSU5UX01BWCkKKwkJZ290byBvdXQ7CisJc3RvcCArPSBzdGFydDsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbm5zKTsgaSsrKSB7Ci0JCWNoYXIgKm1hdGNoID0gc3Ryc3RyKGRhdGEsIGNvbm5zW2ldKTsKLQkJaWYgKCFtYXRjaCkKKwlmb3IgKGkgPSBTRUFSQ0hfREFUQTsgaSA8PSBTRUFSQ0hfSU5ERVg7IGkrKykgeworCQltZW1zZXQoJnRzLCAwLCBzaXplb2YodHMpKTsKKwkJb2ZmID0gc2tiX2ZpbmRfdGV4dCgqcHNrYiwgc3RhcnQsIHN0b3AsIHNlYXJjaFtpXS50cywgJnRzKTsKKwkJaWYgKG9mZiA9PSBVSU5UX01BWCkKIAkJCWNvbnRpbnVlOwotCQl0bXAgPSBkYXRhID0gbWF0Y2ggKyBzdHJsZW4oY29ubnNbaV0pOwotCQlwb3J0ID0gc2ltcGxlX3N0cnRvdWwoZGF0YSwgJmRhdGEsIDEwKTsKLQkJbGVuID0gZGF0YSAtIHRtcDsKKwkJb2ZmICs9IHN0YXJ0ICsgc2VhcmNoW2ldLmxlbjsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpOworCQlpZiAoc2tiX2NvcHlfYml0cygqcHNrYiwgb2ZmLCBwYnVmLCBsZW4pKQorCQkJYnJlYWs7CisJCXBidWZbbGVuXSA9ICdcMCc7CisKKwkJcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKHBidWYsICZ0bXAsIDEwKTsKKwkJbGVuID0gdG1wIC0gcGJ1ZjsKIAkJaWYgKHBvcnQgPT0gMCB8fCBsZW4gPiA1KQogCQkJYnJlYWs7CiAKQEAgLTEyNSw4ICsxNjIsNyBAQAogCQlleHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSAweEZGRkY7CiAKIAkJaWYgKGlwX25hdF9hbWFuZGFfaG9vaykKLQkJCXJldCA9IGlwX25hdF9hbWFuZGFfaG9vayhwc2tiLCBjdGluZm8sCi0JCQkJCQkgdG1wIC0gYW1hbmRhX2J1ZmZlciwKKwkJCXJldCA9IGlwX25hdF9hbWFuZGFfaG9vayhwc2tiLCBjdGluZm8sIG9mZiAtIGRhdGFvZmYsCiAJCQkJCQkgbGVuLCBleHApOwogCQllbHNlIGlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQogCQkJcmV0ID0gTkZfRFJPUDsKQEAgLTEzNCwxMiArMTcwLDExIEBACiAJfQogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtYW5kYV9idWZmZXJfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyIGFtYW5kYV9oZWxwZXIgPSB7Ci0JLm1heF9leHBlY3RlZCA9IEFSUkFZX1NJWkUoY29ubnMpLAorCS5tYXhfZXhwZWN0ZWQgPSAzLAogCS50aW1lb3V0ID0gMTgwLAogCS5tZSA9IFRISVNfTU9EVUxFLAogCS5oZWxwID0gaGVscCwKQEAgLTE1NSwyNiArMTkwLDM2IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcF9jb25udHJhY2tfYW1hbmRhX2Zpbmkodm9pZCkKIHsKKwlpbnQgaTsKKwogCWlwX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmYW1hbmRhX2hlbHBlcik7Ci0Ja2ZyZWUoYW1hbmRhX2J1ZmZlcik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VhcmNoKTsgaSsrKQorCQl0ZXh0c2VhcmNoX2Rlc3Ryb3koc2VhcmNoW2ldLnRzKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaXBfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCi0JYW1hbmRhX2J1ZmZlciA9IGttYWxsb2MoNjU1MzYsIEdGUF9LRVJORUwpOwotCWlmICghYW1hbmRhX2J1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXQgPSBpcF9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbWFuZGFfaGVscGVyKTsKLQlpZiAocmV0IDwgMCkgewotCQlrZnJlZShhbWFuZGFfYnVmZmVyKTsKLQkJcmV0dXJuIHJldDsKKwlyZXQgPSAtRU5PTUVNOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlYXJjaCk7IGkrKykgeworCQlzZWFyY2hbaV0udHMgPSB0ZXh0c2VhcmNoX3ByZXBhcmUodHNfYWxnbywgc2VhcmNoW2ldLnN0cmluZywKKwkJCQkJCSAgc2VhcmNoW2ldLmxlbiwKKwkJCQkJCSAgR0ZQX0tFUk5FTCwgVFNfQVVUT0xPQUQpOworCQlpZiAoc2VhcmNoW2ldLnRzID09IE5VTEwpCisJCQlnb3RvIGVycjsKIAl9CisJcmV0ID0gaXBfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1hbmRhX2hlbHBlcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOwogCXJldHVybiAwOwogCi0KK2VycjoKKwlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHNlYXJjaFtpXS50cykKKwkJCXRleHRzZWFyY2hfZGVzdHJveShzZWFyY2hbaV0udHMpOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBtb2R1bGVfaW5pdChpcF9jb25udHJhY2tfYW1hbmRhX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwppbmRleCA5NzlhMmVhLi43ZTRjZjlhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwpAQCAtNzI0LDYgKzcyNCw5IEBACiAJCS8qIHRoaXMgaXMgdWdseSwgYnV0IHRoZXJlIGlzIG5vIG90aGVyIHBsYWNlIHdoZXJlIHRvIHB1dCBpdCAqLwogCQljb25udHJhY2stPm5hdC5tYXNxX2luZGV4ID0gZXhwLT5tYXN0ZXItPm5hdC5tYXNxX2luZGV4OwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TRUNNQVJLCisJCWNvbm50cmFjay0+c2VjbWFyayA9IGV4cC0+bWFzdGVyLT5zZWNtYXJrOworI2VuZGlmCiAJCW5mX2Nvbm50cmFja19nZXQoJmNvbm50cmFjay0+bWFzdGVyLT5jdF9nZW5lcmFsKTsKIAkJQ09OTlRSQUNLX1NUQVRfSU5DKGV4cGVjdF9uZXcpOwogCX0gZWxzZSB7CkBAIC0xMTMwLDYgKzExMzMsMTIgQEAKIAogCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKIAorCS8qIE9ubHkgdXBkYXRlIGlmIHRoaXMgaXMgbm90IGEgZml4ZWQgdGltZW91dCAqLworCWlmICh0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsICZjdC0+c3RhdHVzKSkgeworCQl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIElmIG5vdCBpbiBoYXNoIHRhYmxlLCB0aW1lciB3aWxsIG5vdCBiZSBhY3RpdmUgeWV0ICovCiAJaWYgKCFpc19jb25maXJtZWQoY3QpKSB7CiAJCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBleHRyYV9qaWZmaWVzOwpAQCAtMTMxOCw2ICsxMzI3LDcgQEAKIAkJCS50dXBsZS5kc3QudS50Y3AucG9ydDsKIAkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQogCQkJLnR1cGxlLmRzdC5pcDsKKwkJbWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpOwogCiAJCURFQlVHUCgiU09fT1JJR0lOQUxfRFNUOiAldS4ldS4ldS4ldSAldVxuIiwKIAkJICAgICAgIE5JUFFVQUQoc2luLnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi5zaW5fcG9ydCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMKaW5kZXggM2U1NDJiZi4uNGRjZjUyNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCkBAIC01NiwzNyArNTYsNDggQEAKIHN0YXRpYyBpbnQgdHJ5X2Vwc3ZfcmVzcG9uc2UoY29uc3QgY2hhciAqLCBzaXplX3QsIHVfaW50MzJfdCBbXSwgY2hhcik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnRwX3NlYXJjaCB7Ci0JZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKIAljb25zdCBjaGFyICpwYXR0ZXJuOwogCXNpemVfdCBwbGVuOwogCWNoYXIgc2tpcDsKIAljaGFyIHRlcm07CiAJZW51bSBpcF9jdF9mdHBfdHlwZSBmdHB0eXBlOwogCWludCAoKmdldG51bSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHVfaW50MzJfdFtdLCBjaGFyKTsKLX0gc2VhcmNoW10gPSB7Ci0JewotCQlJUF9DVF9ESVJfT1JJR0lOQUwsCi0JCSJQT1JUIiwJc2l6ZW9mKCJQT1JUIikgLSAxLCAnICcsICdccicsCi0JCUlQX0NUX0ZUUF9QT1JULAotCQl0cnlfcmZjOTU5LAorfSBzZWFyY2hbSVBfQ1RfRElSX01BWF1bMl0gPSB7CisJW0lQX0NUX0RJUl9PUklHSU5BTF0gPSB7CisJCXsKKwkJCS5wYXR0ZXJuCT0gICJQT1JUIiwKKwkJCS5wbGVuCQk9IHNpemVvZigiUE9SVCIpIC0gMSwKKwkJCS5za2lwCQk9ICcgJywKKwkJCS50ZXJtCQk9ICdccicsCisJCQkuZnRwdHlwZQk9IElQX0NUX0ZUUF9QT1JULAorCQkJLmdldG51bQkJPSB0cnlfcmZjOTU5LAorCQl9LAorCQl7CisJCQkucGF0dGVybgk9ICJFUFJUIiwKKwkJCS5wbGVuCQk9IHNpemVvZigiRVBSVCIpIC0gMSwKKwkJCS5za2lwCQk9ICcgJywKKwkJCS50ZXJtCQk9ICdccicsCisJCQkuZnRwdHlwZQk9IElQX0NUX0ZUUF9FUFJULAorCQkJLmdldG51bQkJPSB0cnlfZXBydCwKKwkJfSwKIAl9LAotCXsKLQkJSVBfQ1RfRElSX1JFUExZLAotCQkiMjI3ICIsCXNpemVvZigiMjI3ICIpIC0gMSwgJygnLCAnKScsCi0JCUlQX0NUX0ZUUF9QQVNWLAotCQl0cnlfcmZjOTU5LAotCX0sCi0JewotCQlJUF9DVF9ESVJfT1JJR0lOQUwsCi0JCSJFUFJUIiwgc2l6ZW9mKCJFUFJUIikgLSAxLCAnICcsICdccicsCi0JCUlQX0NUX0ZUUF9FUFJULAotCQl0cnlfZXBydCwKLQl9LAotCXsKLQkJSVBfQ1RfRElSX1JFUExZLAotCQkiMjI5ICIsIHNpemVvZigiMjI5ICIpIC0gMSwgJygnLCAnKScsCi0JCUlQX0NUX0ZUUF9FUFNWLAotCQl0cnlfZXBzdl9yZXNwb25zZSwKKwlbSVBfQ1RfRElSX1JFUExZXSA9IHsKKwkJeworCQkJLnBhdHRlcm4JPSAiMjI3ICIsCisJCQkucGxlbgkJPSBzaXplb2YoIjIyNyAiKSAtIDEsCisJCQkuc2tpcAkJPSAnKCcsCisJCQkudGVybQkJPSAnKScsCisJCQkuZnRwdHlwZQk9IElQX0NUX0ZUUF9QQVNWLAorCQkJLmdldG51bQkJPSB0cnlfcmZjOTU5LAorCQl9LAorCQl7CisJCQkucGF0dGVybgk9ICIyMjkgIiwKKwkJCS5wbGVuCQk9IHNpemVvZigiMjI5ICIpIC0gMSwKKwkJCS5za2lwCQk9ICcoJywKKwkJCS50ZXJtCQk9ICcpJywKKwkJCS5mdHB0eXBlCT0gSVBfQ1RfRlRQX0VQU1YsCisJCQkuZ2V0bnVtCQk9IHRyeV9lcHN2X3Jlc3BvbnNlLAorCQl9LAogCX0sCiB9OwogCkBAIC0zNDYsMTcgKzM1NywxNSBAQAogCWFycmF5WzJdID0gKG50b2hsKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXApID4+IDgpICYgMHhGRjsKIAlhcnJheVszXSA9IG50b2hsKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXApICYgMHhGRjsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlYXJjaCk7IGkrKykgewotCQlpZiAoc2VhcmNoW2ldLmRpciAhPSBkaXIpIGNvbnRpbnVlOwotCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VhcmNoW2Rpcl0pOyBpKyspIHsKIAkJZm91bmQgPSBmaW5kX3BhdHRlcm4oZmJfcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAotCQkJCSAgICAgc2VhcmNoW2ldLnBhdHRlcm4sCi0JCQkJICAgICBzZWFyY2hbaV0ucGxlbiwKLQkJCQkgICAgIHNlYXJjaFtpXS5za2lwLAotCQkJCSAgICAgc2VhcmNoW2ldLnRlcm0sCisJCQkJICAgICBzZWFyY2hbZGlyXVtpXS5wYXR0ZXJuLAorCQkJCSAgICAgc2VhcmNoW2Rpcl1baV0ucGxlbiwKKwkJCQkgICAgIHNlYXJjaFtkaXJdW2ldLnNraXAsCisJCQkJICAgICBzZWFyY2hbZGlyXVtpXS50ZXJtLAogCQkJCSAgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sCiAJCQkJICAgICBhcnJheSwKLQkJCQkgICAgIHNlYXJjaFtpXS5nZXRudW0pOworCQkJCSAgICAgc2VhcmNoW2Rpcl1baV0uZ2V0bnVtKTsKIAkJaWYgKGZvdW5kKSBicmVhazsKIAl9CiAJaWYgKGZvdW5kID09IC0xKSB7CkBAIC0zNjYsNyArMzc1LDcgQEAKIAkJICAgdGhpcyBjYXNlLiAqLwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKCJjb25udHJhY2tfZnRwOiBwYXJ0aWFsICVzICV1KyV1XG4iLAotCQkJICAgICAgIHNlYXJjaFtpXS5wYXR0ZXJuLAorCQkJICAgICAgIHNlYXJjaFtkaXJdW2ldLnBhdHRlcm4sCiAJCQkgICAgICAgbnRvaGwodGgtPnNlcSksIGRhdGFsZW4pOwogCQlyZXQgPSBORl9EUk9QOwogCQlnb3RvIG91dDsKQEAgLTQyNiw3ICs0MzUsNyBAQAogCS8qIE5vdywgTkFUIG1pZ2h0IHdhbnQgdG8gbWFuZ2xlIHRoZSBwYWNrZXQsIGFuZCByZWdpc3RlciB0aGUKIAkgKiAocG9zc2libHkgY2hhbmdlZCkgZXhwZWN0YXRpb24gaXRzZWxmLiAqLwogCWlmIChpcF9uYXRfZnRwX2hvb2spCi0JCXJldCA9IGlwX25hdF9mdHBfaG9vayhwc2tiLCBjdGluZm8sIHNlYXJjaFtpXS5mdHB0eXBlLAorCQlyZXQgPSBpcF9uYXRfZnRwX2hvb2socHNrYiwgY3RpbmZvLCBzZWFyY2hbZGlyXVtpXS5mdHB0eXBlLAogCQkJCSAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgZXhwLCAmc2VxKTsKIAllbHNlIHsKIAkJLyogQ2FuJ3QgZXhwZWN0IHRoaXM/ICBCZXN0IHRvIGRyb3AgcGFja2V0IG5vdy4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYwppbmRleCA1MThmNTgxLi4wNjY1Njc0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCkBAIC0zOCw2ICs0MCwxMiBAQAogbW9kdWxlX3BhcmFtKGdrcm91dGVkX29ubHksIGludCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGdrcm91dGVkX29ubHksICJvbmx5IGFjY2VwdCBjYWxscyBmcm9tIGdhdGVrZWVwZXIiKTsKIAorc3RhdGljIGludCBjYWxsZm9yd2FyZF9maWx0ZXIgPSAxOworbW9kdWxlX3BhcmFtKGNhbGxmb3J3YXJkX2ZpbHRlciwgYm9vbCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhbGxmb3J3YXJkX2ZpbHRlciwgIm9ubHkgY3JlYXRlIGNhbGwgZm9yd2FyZGluZyBleHBlY3RhdGlvbnMgIgorCQkgICAgICAgICAgICAgICAgICAgICAiaWYgYm90aCBlbmRwb2ludHMgYXJlIG9uIGRpZmZlcmVudCBzaWRlcyAiCisJCQkJICAgICAiKGRldGVybWluZWQgYnkgcm91dGluZyBpbmZvcm1hdGlvbikiKTsKKwogLyogSG9va3MgZm9yIE5BVCAqLwogaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKQEAgLTc3LDYgKzg1LDEyIEBACiAJCSAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKIAkJICAgICAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAogCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CitpbnQgKCpuYXRfY2FsbGZvcndhcmRpbmdfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCXVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQlUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgdV9pbnQxNl90IHBvcnQsCisJCQkJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOwogaW50ICgqbmF0X3E5MzFfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCiAJCSAgICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKIAkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCkBAIC02ODMsNiArNjk3LDkyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogRm9yd2FyZGluZyBkZWNsYXJhdGlvbiAqLwordm9pZCBpcF9jb25udHJhY2tfcTkzMV9leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAorCQkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZXhwZWN0X2NhbGxmb3J3YXJkaW5nKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldCA9IDA7CisJdV9pbnQzMl90IGlwOworCXVfaW50MTZfdCBwb3J0OworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBOVUxMOworCisJLyogUmVhZCBhbHRlcm5hdGl2ZUFkZHJlc3MgKi8KKwlpZiAoIWdldF9oMjI1X2FkZHIoKmRhdGEsIGFkZHIsICZpcCwgJnBvcnQpIHx8IHBvcnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiB0aGUgY2FsbGluZyBwYXJ0eSBpcyBvbiB0aGUgc2FtZSBzaWRlIG9mIHRoZSBmb3J3YXJkLXRvIHBhcnR5LAorCSAqIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgdGhlIHNlY29uZCBjYWxsICovCisJaWYgKGNhbGxmb3J3YXJkX2ZpbHRlcikgeworCQlzdHJ1Y3QgcnRhYmxlICpydDEsICpydDI7CisJCXN0cnVjdCBmbG93aSBmbDEgPSB7CisJCQkuZmw0X2RzdCA9IGlwLAorCQl9OworCQlzdHJ1Y3QgZmxvd2kgZmwyID0geworCQkJLmZsNF9kc3QgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcCwKKwkJfTsKKworCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmcnQxLCAmZmwxKSA9PSAwKSB7CisJCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmcnQyLCAmZmwyKSA9PSAwKSB7CisJCQkJaWYgKHJ0MS0+cnRfZ2F0ZXdheSA9PSBydDItPnJ0X2dhdGV3YXkgJiYKKwkJCQkgICAgcnQxLT51LmRzdC5kZXYgID09IHJ0Mi0+dS5kc3QuZGV2KQorCQkJCQlyZXQgPSAxOworCQkJCWRzdF9yZWxlYXNlKCZydDItPnUuZHN0KTsKKwkJCX0KKwkJCWRzdF9yZWxlYXNlKCZydDEtPnUuZHN0KTsKKwkJfQorCQlpZiAocmV0KSB7CisJCQlERUJVR1AoImlwX2N0X3E5MzE6IENhbGwgRm9yd2FyZGluZyBub3QgdHJhY2tlZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIENyZWF0ZSBleHBlY3QgZm9yIHRoZSBzZWNvbmQgY2FsbCBsZWcgKi8KKwlpZiAoKGV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJZXhwLT50dXBsZS5zcmMuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcDsKKwlleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gMDsKKwlleHAtPnR1cGxlLmRzdC5pcCA9IGlwOworCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhwb3J0KTsKKwlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOworCWV4cC0+bWFzay5zcmMuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5zcmMudS50Y3AucG9ydCA9IDA7CisJZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOworCWV4cC0+ZmxhZ3MgPSAwOworCisJaWYgKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXAgIT0KKwkgICAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXAgJiYgbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2spIHsKKwkJLyogTmVlZCBOQVQgKi8KKwkJcmV0ID0gbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgICAgYWRkciwgcG9ydCwgZXhwKTsKKwl9IGVsc2UgewkJLyogQ29ubnRyYWNrIG9ubHkgKi8KKwkJZXhwLT5leHBlY3RmbiA9IGlwX2Nvbm50cmFja19xOTMxX2V4cGVjdDsKKworCQlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgeworCQkJREVCVUdQKCJpcF9jdF9xOTMxOiBleHBlY3QgQ2FsbCBGb3J3YXJkaW5nICIKKwkJCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCQkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLnNyYy5pcCksCisJCQkgICAgICAgbnRvaHMoZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCksCisJCQkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLmRzdC5pcCksCisJCQkgICAgICAgbnRvaHMoZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCkpOworCQl9IGVsc2UKKwkJCXJldCA9IC0xOworCX0KKworCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcHJvY2Vzc19zZXR1cChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAogCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLApAQCAtODc4LDYgKzk3OCwxNSBAQAogCiAJREVCVUdQKCJpcF9jdF9xOTMxOiBGYWNpbGl0eVxuIik7CiAKKwlpZiAoZmFjaWxpdHktPnJlYXNvbi5jaG9pY2UgPT0gZUZhY2lsaXR5UmVhc29uX2NhbGxGb3J3YXJkZWQpIHsKKwkJaWYgKGZhY2lsaXR5LT5vcHRpb25zICYgZUZhY2lsaXR5X1VVSUVfYWx0ZXJuYXRpdmVBZGRyZXNzKQorCQkJcmV0dXJuIGV4cGVjdF9jYWxsZm9yd2FyZGluZyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCQkJICAgICBkYXRhb2ZmLAorCQkJCQkJICAgICAmZmFjaWxpdHktPgorCQkJCQkJICAgICBhbHRlcm5hdGl2ZUFkZHJlc3MpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoZmFjaWxpdHktPm9wdGlvbnMgJiBlRmFjaWxpdHlfVVVJRV9oMjQ1QWRkcmVzcykgewogCQlyZXQgPSBleHBlY3RfaDI0NShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAogCQkJCSAgJmZhY2lsaXR5LT5oMjQ1QWRkcmVzcyk7CkBAIC0xNjc3LDcgKzE3ODYsNiBAQAogCQlmaW5pKCk7CiAJCXJldHVybiByZXQ7CiAJfQotCiAJREVCVUdQKCJpcF9jdF9oMzIzOiBpbml0IHN1Y2Nlc3NcbiIpOwogCXJldHVybiAwOwogfQpAQCAtMTY5Niw2ICsxODA0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG5hdF9ydHBfcnRjcF9ob29rKTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5hdF90MTIwX2hvb2spOwogRVhQT1JUX1NZTUJPTF9HUEwobmF0X2gyNDVfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChuYXRfY2FsbGZvcndhcmRpbmdfaG9vayk7CiBFWFBPUlRfU1lNQk9MX0dQTChuYXRfcTkzMV9ob29rKTsKIAogTU9EVUxFX0FVVEhPUigiSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5jCmluZGV4IDAyMmM0N2IuLjRiMzU5NjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmMKQEAgLTEsNCArMSw0IEBACi0vKiBHZW5lcmF0ZWQgYnkgSmluZyBNaW4gWmhhbydzIEFTTi4xIHBhcnNlciwgTWFyIDE1IDIwMDYKKy8qIEdlbmVyYXRlZCBieSBKaW5nIE1pbiBaaGFvJ3MgQVNOLjEgcGFyc2VyLCBBcHIgMjAgMjAwNgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNiBKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgKgpAQCAtMTA2OSw4ICsxMDY5LDggQEAKIAogc3RhdGljIGZpZWxkX3QgX0ZhY2lsaXR5X1VVSUVbXSA9IHsJLyogU0VRVUVOQ0UgKi8KIAl7Rk5BTUUoInByb3RvY29sSWRlbnRpZmllciIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCi0Je0ZOQU1FKCJhbHRlcm5hdGl2ZUFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCi0JIF9UcmFuc3BvcnRBZGRyZXNzfSwKKwl7Rk5BTUUoImFsdGVybmF0aXZlQWRkcmVzcyIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihGYWNpbGl0eV9VVUlFLCBhbHRlcm5hdGl2ZUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sCiAJe0ZOQU1FKCJhbHRlcm5hdGl2ZUFsaWFzQWRkcmVzcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLAogCSBfRmFjaWxpdHlfVVVJRV9hbHRlcm5hdGl2ZUFsaWFzQWRkcmVzc30sCiAJe0ZOQU1FKCJjb25mZXJlbmNlSUQiKSBPQ1RTVFIsIEZJWEQsIDE2LCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYwppbmRleCA3ZDNiYTQzLi44Y2NmZTE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jCkBAIC00NjksOCArNDY5LDggQEAKIAkJCURFQlVHUCgiJXMgYnV0IG5vIHNlc3Npb25cbiIsIHBwdHBfbXNnX25hbWVbbXNnXSk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKLQkJICAgICYmIGluZm8tPnNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgeworCQlpZiAoaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9JTl9SRVAKKwkJICAgICYmIGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fQ09ORikgewogCQkJREVCVUdQKCIlcyBidXQgbmV2ZXIgc2VudCBJTl9DQUxMX1JFUExZXG4iLAogCQkJCXBwdHBfbXNnX25hbWVbbXNnXSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggMDFiZDdjYS4uMzM4OTFiYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTM5OSwzOCArMzk5LDU0IEBACiBzdGF0aWMgaW50IGN0bmV0bGlua19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlERUJVR1AoImVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKGNiLT5hcmdzWzFdKQorCQlpcF9jb25udHJhY2tfcHV0KChzdHJ1Y3QgaXBfY29ubnRyYWNrICopY2ItPmFyZ3NbMV0pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IGlwX2Nvbm50cmFjayAqY3QgPSBOVUxMOworCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCAqbGFzdDsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IGxpc3RfaGVhZCAqaTsKLQl1X2ludDMyX3QgKmlkID0gKHVfaW50MzJfdCAqKSAmY2ItPmFyZ3NbMV07CiAKIAlERUJVR1AoImVudGVyZWQgJXMsIGxhc3QgYnVja2V0PSVsdSBpZD0ldVxuIiwgX19GVU5DVElPTl9fLCAKIAkJCWNiLT5hcmdzWzBdLCAqaWQpOwogCiAJcmVhZF9sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7Ci0JZm9yICg7IGNiLT5hcmdzWzBdIDwgaXBfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBjYi0+YXJnc1swXSsrLCAqaWQgPSAwKSB7CisJZm9yICg7IGNiLT5hcmdzWzBdIDwgaXBfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBjYi0+YXJnc1swXSsrKSB7CityZXN0YXJ0OgorCQlsYXN0ID0gKHN0cnVjdCBpcF9jb25udHJhY2sgKiljYi0+YXJnc1sxXTsKIAkJbGlzdF9mb3JfZWFjaF9wcmV2KGksICZpcF9jb25udHJhY2tfaGFzaFtjYi0+YXJnc1swXV0pIHsKIAkJCWggPSAoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICopIGk7CiAJCQlpZiAoRElSRUNUSU9OKGgpICE9IElQX0NUX0RJUl9PUklHSU5BTCkKIAkJCQljb250aW51ZTsKIAkJCWN0ID0gdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKLQkJCWlmIChjdC0+aWQgPD0gKmlkKQotCQkJCWNvbnRpbnVlOworCQkJaWYgKGxhc3QgIT0gTlVMTCkgeworCQkJCWlmIChjdCA9PSBsYXN0KSB7CisJCQkJCWlwX2Nvbm50cmFja19wdXQobGFzdCk7CisJCQkJCWNiLT5hcmdzWzFdID0gMDsKKwkJCQkJbGFzdCA9IE5VTEw7CisJCQkJfSBlbHNlCisJCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKGN0bmV0bGlua19maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgCWNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCUlQQ1ROTF9NU0dfQ1RfTkVXLAotCQkJCQkJMSwgY3QpIDwgMCkKKwkJCQkJCTEsIGN0KSA8IDApIHsKKwkJCQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisJCQkJY2ItPmFyZ3NbMV0gPSAodW5zaWduZWQgbG9uZyljdDsKIAkJCQlnb3RvIG91dDsKLQkJCSppZCA9IGN0LT5pZDsKKwkJCX0KKwkJfQorCQlpZiAobGFzdCAhPSBOVUxMKSB7CisJCQlpcF9jb25udHJhY2tfcHV0KGxhc3QpOworCQkJY2ItPmFyZ3NbMV0gPSAwOworCQkJZ290byByZXN0YXJ0OwogCQl9CiAJfQotb3V0OgkKK291dDoKIAlyZWFkX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOwogCiAJREVCVUdQKCJsZWF2aW5nLCBsYXN0IGJ1Y2tldD0lbHUgaWQ9JXVcbiIsIGNiLT5hcmdzWzBdLCAqaWQpOwpAQCAtNjI5LDcgKzY0NSw3IEBACiB9OwogCiBzdGF0aWMgaW5saW5lIGludAotY3RuZXRsaW5rX3BhcnNlX25hdChzdHJ1Y3QgbmZhdHRyICpjZGFbXSwKK2N0bmV0bGlua19wYXJzZV9uYXQoc3RydWN0IG5mYXR0ciAqbmF0LAogCQkgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsIHN0cnVjdCBpcF9uYXRfcmFuZ2UgKnJhbmdlKQogewogCXN0cnVjdCBuZmF0dHIgKnRiW0NUQV9OQVRfTUFYXTsKQEAgLTYzOSw3ICs2NTUsNyBAQAogCiAJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YoKnJhbmdlKSk7CiAJCi0JbmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX05BVF9NQVgsIGNkYVtDVEFfTkFULTFdKTsKKwluZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfTkFUX01BWCwgbmF0KTsKIAogCWlmIChuZmF0dHJfYmFkX3NpemUodGIsIENUQV9OQVRfTUFYLCBjdGFfbWluX25hdCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODU0LDM5ICs4NzAsMzAgQEAKIAkJLyogQVNTVVJFRCBiaXQgY2FuIG9ubHkgYmUgc2V0ICovCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNkYVtDVEFfTkFULTFdKSB7CisJaWYgKGNkYVtDVEFfTkFUX1NSQy0xXSB8fCBjZGFbQ1RBX05BVF9EU1QtMV0pIHsKICNpZm5kZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZWxzZQotCQl1bnNpZ25lZCBpbnQgaG9va251bTsKIAkJc3RydWN0IGlwX25hdF9yYW5nZSByYW5nZTsKIAotCQlpZiAoY3RuZXRsaW5rX3BhcnNlX25hdChjZGEsIGN0LCAmcmFuZ2UpIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCURFQlVHUCgiTkFUOiAldS4ldS4ldS4ldS0ldS4ldS4ldS4ldToldS0ldVxuIiwgCi0JCSAgICAgICBOSVBRVUFEKHJhbmdlLm1pbl9pcCksIE5JUFFVQUQocmFuZ2UubWF4X2lwKSwKLQkJICAgICAgIGh0b25zKHJhbmdlLm1pbi5hbGwpLCBodG9ucyhyYW5nZS5tYXguYWxsKSk7Ci0JCQotCQkvKiBUaGlzIGlzIHRyaWNreSBidXQgaXQgd29ya3MuIGlwX25hdF9zZXR1cF9pbmZvIG5lZWRzIHRoZQotCQkgKiBob29rIG51bWJlciBhcyBwYXJhbWV0ZXIsIHNvIGxldCdzIGRvIHRoZSBjb3JyZWN0IAotCQkgKiBjb252ZXJzaW9uIGFuZCBydW4gYXdheSAqLwotCQlpZiAoc3RhdHVzICYgSVBTX1NSQ19OQVRfRE9ORSkKLQkJCWhvb2tudW0gPSBORl9JUF9QT1NUX1JPVVRJTkc7IC8qIElQX05BVF9NQU5JUF9TUkMgKi8KLQkJZWxzZSBpZiAoc3RhdHVzICYgSVBTX0RTVF9OQVRfRE9ORSkKLQkJCWhvb2tudW0gPSBORl9JUF9QUkVfUk9VVElORzsgIC8qIElQX05BVF9NQU5JUF9EU1QgKi8KLQkJZWxzZSAKLQkJCXJldHVybiAtRUlOVkFMOyAvKiBNaXNzaW5nIE5BVCBmbGFncyAqLwotCi0JCURFQlVHUCgiTkFUIHN0YXR1czogJWx1XG4iLCAKLQkJICAgICAgIHN0YXR1cyAmIChJUFNfTkFUX01BU0sgfCBJUFNfTkFUX0RPTkVfTUFTSykpOwotCQkKLQkJaWYgKGlwX25hdF9pbml0aWFsaXplZChjdCwgSE9PSzJNQU5JUChob29rbnVtKSkpCi0JCQlyZXR1cm4gLUVFWElTVDsKLQkJaXBfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgaG9va251bSk7Ci0KLSAgICAgICAgICAgICAgICBERUJVR1AoIk5BVCBzdGF0dXMgYWZ0ZXIgc2V0dXBfaW5mbzogJWx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICBjdC0+c3RhdHVzICYgKElQU19OQVRfTUFTSyB8IElQU19OQVRfRE9ORV9NQVNLKSk7CisJCWlmIChjZGFbQ1RBX05BVF9EU1QtMV0pIHsKKwkJCWlmIChjdG5ldGxpbmtfcGFyc2VfbmF0KGNkYVtDVEFfTkFUX0RTVC0xXSwgY3QsCisJCQkJCQkmcmFuZ2UpIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChpcF9uYXRfaW5pdGlhbGl6ZWQoY3QsCisJCQkJCSAgICAgICBIT09LMk1BTklQKE5GX0lQX1BSRV9ST1VUSU5HKSkpCisJCQkJcmV0dXJuIC1FRVhJU1Q7CisJCQlpcF9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBORl9JUF9QUkVfUk9VVElORyk7CisJCX0KKwkJaWYgKGNkYVtDVEFfTkFUX1NSQy0xXSkgeworCQkJaWYgKGN0bmV0bGlua19wYXJzZV9uYXQoY2RhW0NUQV9OQVRfU1JDLTFdLCBjdCwKKwkJCQkJCSZyYW5nZSkgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGlwX25hdF9pbml0aWFsaXplZChjdCwKKwkJCQkJICAgICAgIEhPT0syTUFOSVAoTkZfSVBfUE9TVF9ST1VUSU5HKSkpCisJCQkJcmV0dXJuIC1FRVhJU1Q7CisJCQlpcF9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBORl9JUF9QT1NUX1JPVVRJTkcpOworCQl9CiAjZW5kaWYKIAl9CiAKQEAgLTExMDYsNyArMTExMyw3IEBACiAJLyogaW1wbGljaXQgJ2Vsc2UnICovCiAKIAkvKiB3ZSBvbmx5IGFsbG93IG5hdCBjb25maWcgZm9yIG5ldyBjb25udHJhY2tzICovCi0JaWYgKGNkYVtDVEFfTkFULTFdKSB7CisJaWYgKGNkYVtDVEFfTkFUX1NSQy0xXSB8fCBjZGFbQ1RBX05BVF9EU1QtMV0pIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCmluZGV4IDU2Nzk0NzkuLjIxZWUxMjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19ncmUuYwpAQCAtNzcsMTAgKzc3LDEwIEBACiB9CiAKIC8qIGxvb2sgdXAgdGhlIHNvdXJjZSBrZXkgZm9yIGEgZ2l2ZW4gdHVwbGUgKi8KLXN0YXRpYyB1X2ludDMyX3QgZ3JlX2tleW1hcF9sb29rdXAoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdCkKK3N0YXRpYyBfX2JlMTYgZ3JlX2tleW1hcF9sb29rdXAoc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdCkKIHsKIAlzdHJ1Y3QgaXBfY3RfZ3JlX2tleW1hcCAqa207Ci0JdV9pbnQzMl90IGtleSA9IDA7CisJX19iZTE2IGtleSA9IDA7CiAKIAlyZWFkX2xvY2tfYmgoJmlwX2N0X2dyZV9sb2NrKTsKIAlrbSA9IExJU1RfRklORCgmZ3JlX2tleW1hcF9saXN0LCBncmVfa2V5X2NtcGZuLApAQCAtMTkwLDcgKzE5MCw3IEBACiAJCQkgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAlzdHJ1Y3QgZ3JlX2hkcl9wcHRwIF9wZ3JlaGRyLCAqcGdyZWhkcjsKLQl1X2ludDMyX3Qgc3Jja2V5OworCV9fYmUxNiBzcmNrZXk7CiAJc3RydWN0IGdyZV9oZHIgX2dyZWhkciwgKmdyZWhkcjsKIAogCS8qIGZpcnN0IG9ubHkgZGVsaW5lYXJpemUgb2xkIFJGQzE3MDEgR1JFIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCBkOGIxNGE5Li4yM2YxYzUwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJfQogCiAJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJaWYgKGlwX2Nvbm50cmFja19jaGVja3N1bSAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgc2tiLT5uaC5pcGgtPmlobCAqIDQsIDApKSB7CiAJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQogCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCAwNjJiMjUyLi5jNWMyY2U1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTg3MCw3ICs4NzAsNyBAQAogCSAqIGFuZCBtb3Jlb3ZlciByb290IG1pZ2h0IHNlbmQgcmF3IHBhY2tldHMuCiAJICovCiAJLyogRklYTUU6IFNvdXJjZSByb3V0ZSBJUCBvcHRpb24gcGFja2V0cyAtLVJSICovCi0JaWYgKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKKwlpZiAoaXBfY29ubnRyYWNrX2NoZWNrc3VtICYmIGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgJiYKIAkgICAgbmZfaXBfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBpcGgtPmlobCAqIDQsIElQUFJPVE9fVENQKSkgewogCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19UQ1ApKQogCQkJbmZfbG9nX3BhY2tldChQRl9JTkVULCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCA3MDg5OTg2Li45YjJjMTZiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdWRwLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCSAqIGJlY2F1c2UgdGhlIHNlbWFudGljIG9mIENIRUNLU1VNX0hXIGlzIGRpZmZlcmVudCB0aGVyZSAKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJaWYgKGlwX2Nvbm50cmFja19jaGVja3N1bSAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgaXBoLT5paGwgKiA0LCBJUFBST1RPX1VEUCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fVURQKSkKIAkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4N2NlMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qIFNJUCBleHRlbnNpb24gZm9yIElQIGNvbm5lY3Rpb24gdHJhY2tpbmcuCisgKgorICogKEMpIDIwMDUgYnkgQ2hyaXN0aWFuIEhlbnRzY2hlbCA8Y2hlbnRzY2hlbEBhcm5ldC5jb20uYXI+CisgKiBiYXNlZCBvbiBSUidzIGlwX2Nvbm50cmFja19mdHAuYyBhbmQgb3RoZXIgbW9kdWxlcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zaXAuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gSGVudHNjaGVsIDxjaGVudHNjaGVsQGFybmV0LmNvbS5hcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0lQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CisKKyNkZWZpbmUgTUFYX1BPUlRTCTgKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdOworc3RhdGljIGludCBwb3J0c19jOworbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsICZwb3J0c19jLCAwNDAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydHMsICJwb3J0IG51bWJlcnMgb2Ygc2lwIHNlcnZlcnMiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzaXBfdGltZW91dCA9IFNJUF9USU1FT1VUOworbW9kdWxlX3BhcmFtKHNpcF90aW1lb3V0LCB1aW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2lwX3RpbWVvdXQsICJ0aW1lb3V0IGZvciB0aGUgbWFzdGVyIFNJUCBzZXNzaW9uIik7CisKK3Vuc2lnbmVkIGludCAoKmlwX25hdF9zaXBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJCWNvbnN0IGNoYXIgKipkcHRyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlwX25hdF9zaXBfaG9vayk7CisKK3Vuc2lnbmVkIGludCAoKmlwX25hdF9zZHBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAsCisJCQkJY29uc3QgY2hhciAqZHB0cik7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9uYXRfc2RwX2hvb2spOworCitpbnQgY3Rfc2lwX2dldF9pbmZvKGNvbnN0IGNoYXIgKmRwdHIsIHNpemVfdCBkbGVuLAorCQkJCXVuc2lnbmVkIGludCAqbWF0Y2hvZmYsCisJCQkJdW5zaWduZWQgaW50ICptYXRjaGxlbiwKKwkJCQlzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gKmhuZm8pOworRVhQT1JUX1NZTUJPTF9HUEwoY3Rfc2lwX2dldF9pbmZvKTsKKworCitzdGF0aWMgaW50IGRpZ2l0c19sZW4oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpOworc3RhdGljIGludCBlcGFkZHJfbGVuKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KTsKK3N0YXRpYyBpbnQgc2twX2RpZ2l0c19sZW4oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpOworc3RhdGljIGludCBza3BfZXBhZGRyX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCk7CisKK3N0cnVjdCBzaXBfaGVhZGVyX25mbyBjdF9zaXBfaGRyc1tdID0geworCXsgCS8qIFZpYSBoZWFkZXIgKi8KKwkJLmxuYW1lCQk9ICJWaWE6IiwKKwkJLmxubGVuCQk9IHNpemVvZigiVmlhOiIpIC0gMSwKKwkJLnNuYW1lCQk9ICJcclxudjoiLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxudjoiKSAtIDEsIC8qIHJmYzMyNjEgIlxyXG4iICovCisJCS5sbl9zdHIJCT0gIlVEUCAiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJVRFAgIikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbiwKKwl9LAorCXsgCS8qIENvbnRhY3QgaGVhZGVyICovCisJCS5sbmFtZQkJPSAiQ29udGFjdDoiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJDb250YWN0OiIpIC0gMSwKKwkJLnNuYW1lCQk9ICJcclxubToiLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxubToiKSAtIDEsCisJCS5sbl9zdHIJCT0gInNpcDoiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAorCQkubWF0Y2hfbGVuCT0gc2twX2VwYWRkcl9sZW4KKwl9LAorCXsgCS8qIENvbnRlbnQgbGVuZ3RoIGhlYWRlciAqLworCQkubG5hbWUJCT0gIkNvbnRlbnQtTGVuZ3RoOiIsCisJCS5sbmxlbgkJPSBzaXplb2YoIkNvbnRlbnQtTGVuZ3RoOiIpIC0gMSwKKwkJLnNuYW1lCQk9ICJcclxubDoiLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxubDoiKSAtIDEsCisJCS5sbl9zdHIJCT0gIjoiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCI6IikgLSAxLAorCQkubWF0Y2hfbGVuCT0gc2twX2RpZ2l0c19sZW4KKwl9LAorCXsJLyogU0RQIG1lZGlhIGluZm8gKi8KKwkJLmxuYW1lCQk9ICJcbm09IiwKKwkJLmxubGVuCQk9IHNpemVvZigiXG5tPSIpIC0gMSwKKwkJLnNuYW1lCQk9ICJccm09IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJtPSIpIC0gMSwKKwkJLmxuX3N0cgkJPSAiYXVkaW8gIiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiYXVkaW8gIikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZGlnaXRzX2xlbgorCX0sCisJeyAJLyogU0RQIG93bmVyIGFkZHJlc3MqLworCQkubG5hbWUJCT0gIlxubz0iLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJcbm89IikgLSAxLAorCQkuc25hbWUJCT0gIlxybz0iLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJccm89IikgLSAxLAorCQkubG5fc3RyCQk9ICJJTiBJUDQgIiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiSU4gSVA0ICIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4KKwl9LAorCXsgCS8qIFNEUCBjb25uZWN0aW9uIGluZm8gKi8KKwkJLmxuYW1lCQk9ICJcbmM9IiwKKwkJLmxubGVuCQk9IHNpemVvZigiXG5jPSIpIC0gMSwKKwkJLnNuYW1lCQk9ICJccmM9IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJjPSIpIC0gMSwKKwkJLmxuX3N0cgkJPSAiSU4gSVA0ICIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoIklOIElQNCAiKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCisJfSwKKwl7IAkvKiBSZXF1ZXN0cyBoZWFkZXJzICovCisJCS5sbmFtZQkJPSAic2lwOiIsCisJCS5sbmxlbgkJPSBzaXplb2YoInNpcDoiKSAtIDEsCisJCS5zbmFtZQkJPSAic2lwOiIsCisJCS5zbmxlbgkJPSBzaXplb2YoInNpcDoiKSAtIDEsIC8qIHllcywgaSBrbm93Li4gOykgKi8KKwkJLmxuX3N0cgkJPSAiQCIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoIkAiKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCisJfSwKKwl7IAkvKiBTRFAgdmVyc2lvbiBoZWFkZXIgKi8KKwkJLmxuYW1lCQk9ICJcbnY9IiwKKwkJLmxubGVuCQk9IHNpemVvZigiXG52PSIpIC0gMSwKKwkJLnNuYW1lCQk9ICJccnY9IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJ2PSIpIC0gMSwKKwkJLmxuX3N0cgkJPSAiPSIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoIj0iKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBkaWdpdHNfbGVuCisJfQorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9oZHJzKTsKKworLyogZ2V0IGxpbmUgbGVuZ2h0IHVudGlsIGZpcnN0IENSIG9yIExGIHNlZW4uICovCitpbnQgY3Rfc2lwX2xubGVuKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmxpbWl0KQoreworCWNvbnN0IGNoYXIgKmsgPSBsaW5lOworCisJd2hpbGUgKChsaW5lIDw9IGxpbWl0KSAmJiAoKmxpbmUgPT0gJ1xyJyB8fCAqbGluZSA9PSAnXG4nKSkKKwkJbGluZSsrOworCisJd2hpbGUgKGxpbmUgPD0gbGltaXQpIHsKKwkJaWYgKCpsaW5lID09ICdccicgfHwgKmxpbmUgPT0gJ1xuJykKKwkJCWJyZWFrOworCQlsaW5lKys7CisJfQorCXJldHVybiBsaW5lIC0gazsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9sbmxlbik7CisKKy8qIExpbmVhciBzdHJpbmcgc2VhcmNoLCBjYXNlIHNlbnNpdGl2ZS4gKi8KK2NvbnN0IGNoYXIgKmN0X3NpcF9zZWFyY2goY29uc3QgY2hhciAqbmVlZGxlLCBjb25zdCBjaGFyICpoYXlzdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5lZWRsZV9sZW4sIHNpemVfdCBoYXlzdGFja19sZW4pCit7CisJY29uc3QgY2hhciAqbGltaXQgPSBoYXlzdGFjayArIChoYXlzdGFja19sZW4gLSBuZWVkbGVfbGVuKTsKKworCXdoaWxlIChoYXlzdGFjayA8PSBsaW1pdCkgeworCQlpZiAobWVtY21wKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCisJCQlyZXR1cm4gaGF5c3RhY2s7CisJCWhheXN0YWNrKys7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Rfc2lwX3NlYXJjaCk7CisKK3N0YXRpYyBpbnQgZGlnaXRzX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCkKK3sKKwlpbnQgbGVuID0gMDsKKwl3aGlsZSAoZHB0ciA8PSBsaW1pdCAmJiBpc2RpZ2l0KCpkcHRyKSkgeworCQlkcHRyKys7CisJCWxlbisrOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKiBnZXQgZGlnaXRzIGxlbmdodCwgc2tpcGluZyBibGFuayBzcGFjZXMuICovCitzdGF0aWMgaW50IHNrcF9kaWdpdHNfbGVuKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KQoreworCWZvciAoOyBkcHRyIDw9IGxpbWl0ICYmICpkcHRyID09ICcgJzsgZHB0cisrKQorCQkoKnNoaWZ0KSsrOworCisJcmV0dXJuIGRpZ2l0c19sZW4oZHB0ciwgbGltaXQsIHNoaWZ0KTsKK30KKworLyogU2ltcGxlIGlwYWRkciBwYXJzZXIuLiAqLworc3RhdGljIGludCBwYXJzZV9pcGFkZHIoY29uc3QgY2hhciAqY3AsCWNvbnN0IGNoYXIgKiplbmRwLAorCQkJdV9pbnQzMl90ICppcGFkZHIsIGNvbnN0IGNoYXIgKmxpbWl0KQoreworCXVuc2lnbmVkIGxvbmcgaW50IHZhbDsKKwlpbnQgaSwgZGlnaXQgPSAwOworCisJZm9yIChpID0gMCwgKmlwYWRkciA9IDA7IGNwIDw9IGxpbWl0ICYmIGkgPCA0OyBpKyspIHsKKwkJZGlnaXQgPSAwOworCQlpZiAoIWlzZGlnaXQoKmNwKSkKKwkJCWJyZWFrOworCisJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGNwLCAoY2hhciAqKikmY3AsIDEwKTsKKwkJaWYgKHZhbCA+IDB4RkYpCisJCQlyZXR1cm4gLTE7CisKKwkJKCh1X2ludDhfdCAqKWlwYWRkcilbaV0gPSB2YWw7CisJCWRpZ2l0ID0gMTsKKworCQlpZiAoKmNwICE9ICcuJykKKwkJCWJyZWFrOworCQljcCsrOworCX0KKwlpZiAoIWRpZ2l0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZW5kcCkKKwkJKmVuZHAgPSBjcDsKKworCXJldHVybiAwOworfQorCisvKiBza2lwIGlwIGFkZHJlc3MuIHJldHVybnMgaXQgbGVuZ2h0LiAqLworc3RhdGljIGludCBlcGFkZHJfbGVuKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KQoreworCWNvbnN0IGNoYXIgKmF1eCA9IGRwdHI7CisJdV9pbnQzMl90IGlwOworCisJaWYgKHBhcnNlX2lwYWRkcihkcHRyLCAmZHB0ciwgJmlwLCBsaW1pdCkgPCAwKSB7CisJCURFQlVHUCgiaXA6ICVzIHBhcnNlIGZhaWxlZC4hXG4iLCBkcHRyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogUG9ydCBudW1iZXIgKi8KKwlpZiAoKmRwdHIgPT0gJzonKSB7CisJCWRwdHIrKzsKKwkJZHB0ciArPSBkaWdpdHNfbGVuKGRwdHIsIGxpbWl0LCBzaGlmdCk7CisJfQorCXJldHVybiBkcHRyIC0gYXV4OworfQorCisvKiBnZXQgYWRkcmVzcyBsZW5ndGgsIHNraXBpbmcgdXNlciBpbmZvLiAqLworc3RhdGljIGludCBza3BfZXBhZGRyX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCkKK3sKKwlpbnQgcyA9ICpzaGlmdDsKKworCWZvciAoOyBkcHRyIDw9IGxpbWl0ICYmICpkcHRyICE9ICdAJzsgZHB0cisrKQorCQkoKnNoaWZ0KSsrOworCisJaWYgKCpkcHRyID09ICdAJykgeworCQlkcHRyKys7CisJCSgqc2hpZnQpKys7CisJfSBlbHNlCisJCSpzaGlmdCA9IHM7CisKKwlyZXR1cm4gZXBhZGRyX2xlbihkcHRyLCBsaW1pdCwgc2hpZnQpOworfQorCisvKiBSZXR1cm5zIDAgaWYgbm90IGZvdW5kLCAtMSBlcnJvciBwYXJzaW5nLiAqLworaW50IGN0X3NpcF9nZXRfaW5mbyhjb25zdCBjaGFyICpkcHRyLCBzaXplX3QgZGxlbiwKKwkJICAgIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsCisJCSAgICB1bnNpZ25lZCBpbnQgKm1hdGNobGVuLAorCQkgICAgc3RydWN0IHNpcF9oZWFkZXJfbmZvICpobmZvKQoreworCWNvbnN0IGNoYXIgKmxpbWl0LCAqYXV4LCAqayA9IGRwdHI7CisJaW50IHNoaWZ0ID0gMDsKKworCWxpbWl0ID0gZHB0ciArIChkbGVuIC0gaG5mby0+bG5sZW4pOworCisJd2hpbGUgKGRwdHIgPD0gbGltaXQpIHsKKwkJaWYgKChzdHJuY21wKGRwdHIsIGhuZm8tPmxuYW1lLCBobmZvLT5sbmxlbikgIT0gMCkgJiYKKwkJICAgIChzdHJuY21wKGRwdHIsIGhuZm8tPnNuYW1lLCBobmZvLT5zbmxlbikgIT0gMCkpIHsKKwkJCWRwdHIrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWF1eCA9IGN0X3NpcF9zZWFyY2goaG5mby0+bG5fc3RyLCBkcHRyLCBobmZvLT5sbl9zdHJsZW4sCisJCSAgICAgICAgICAgICAgICAgICAgY3Rfc2lwX2xubGVuKGRwdHIsIGxpbWl0KSk7CisJCWlmICghYXV4KSB7CisJCQlERUJVR1AoIiclcycgbm90IGZvdW5kIGluICclcycuXG4iLCBobmZvLT5sbl9zdHIsCisJCQkgICAgICAgaG5mby0+bG5hbWUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWF1eCArPSBobmZvLT5sbl9zdHJsZW47CisKKwkJKm1hdGNobGVuID0gaG5mby0+bWF0Y2hfbGVuKGF1eCwgbGltaXQsICZzaGlmdCk7CisJCWlmICghKm1hdGNobGVuKQorCQkJcmV0dXJuIC0xOworCisJCSptYXRjaG9mZiA9IChhdXggLSBrKSArIHNoaWZ0OworCisJCURFQlVHUCgiJXMgbWF0Y2ggc3VjY2VlZGVkISAtIGxlbjogJXVcbiIsIGhuZm8tPmxuYW1lLAorCQkgICAgICAgKm1hdGNobGVuKTsKKwkJcmV0dXJuIDE7CisJfQorCURFQlVHUCgiJXMgaGVhZGVyIG5vdCBmb3VuZC5cbiIsIGhuZm8tPmxuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICB1X2ludDMyX3QgaXBhZGRyLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICBjb25zdCBjaGFyICpkcHRyKQoreworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHA7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgcmV0OworCisJZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCk7CisJaWYgKGV4cCA9PSBOVUxMKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCWV4cC0+dHVwbGUuc3JjLmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJZXhwLT50dXBsZS5zcmMudS51ZHAucG9ydCA9IDA7CisJZXhwLT50dXBsZS5kc3QuaXAgPSBpcGFkZHI7CisJZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHBvcnQpOworCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisKKwlleHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suc3JjLnUudWRwLnBvcnQgPSAwOworCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5kc3QudS51ZHAucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKKworCWV4cC0+ZXhwZWN0Zm4gPSBOVUxMOworCWV4cC0+ZmxhZ3MgPSAwOworCisJaWYgKGlwX25hdF9zZHBfaG9vaykKKwkJcmV0ID0gaXBfbmF0X3NkcF9ob29rKHBza2IsIGN0aW5mbywgZXhwLCBkcHRyKTsKKwllbHNlIHsKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApICE9IDApCisJCQlyZXQgPSBORl9EUk9QOworCQllbHNlCisJCQlyZXQgPSBORl9BQ0NFUFQ7CisJfQorCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpcF9oZWxwKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJdW5zaWduZWQgaW50IGRhdGFvZmYsIGRhdGFsZW47CisJY29uc3QgY2hhciAqZHB0cjsKKwlpbnQgcmV0ID0gTkZfQUNDRVBUOworCWludCBtYXRjaG9mZiwgbWF0Y2hsZW47CisJdV9pbnQzMl90IGlwYWRkcjsKKwl1X2ludDE2X3QgcG9ydDsKKworCS8qIE5vIERhdGEgPyAqLworCWRhdGFvZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCWlmIChkYXRhb2ZmID49ICgqcHNrYiktPmxlbikgeworCQlERUJVR1AoInNrYi0+bGVuID0gJXVcbiIsICgqcHNrYiktPmxlbik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisgICAgICAgIH0KKworCWlwX2N0X3JlZnJlc2goY3QsICpwc2tiLCBzaXBfdGltZW91dCAqIEhaKTsKKworCWlmICghc2tiX2lzX25vbmxpbmVhcigqcHNrYikpCisJCWRwdHIgPSAoKnBza2IpLT5kYXRhICsgZGF0YW9mZjsKKwllbHNlIHsKKwkJREVCVUdQKCJDb3B5IG9mIHNrYnVmZiBub3Qgc3VwcG9ydGVkIHlldC5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaXBfbmF0X3NpcF9ob29rKSB7CisJCWlmICghaXBfbmF0X3NpcF9ob29rKHBza2IsIGN0aW5mbywgY3QsICZkcHRyKSkgeworCQkJcmV0ID0gTkZfRFJPUDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogQWZ0ZXIgdGhpcyBwb2ludCBOQVQsIGNvdWxkIGhhdmUgbWFuZ2xlZCBza2IsIHNvCisJICAgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBwYXlsb2FkIGxlbmdodC4gKi8KKwlkYXRhbGVuID0gKCpwc2tiKS0+bGVuIC0gZGF0YW9mZjsKKworCWlmIChkYXRhbGVuIDwgKHNpemVvZigiU0lQLzIuMCAyMDAiKSAtIDEpKQorCQlnb3RvIG91dDsKKworCS8qIFJUUCBpbmZvIG9ubHkgaW4gc29tZSBTRFAgcGt0cyAqLworCWlmIChtZW1jbXAoZHB0ciwgIklOVklURSIsIHNpemVvZigiSU5WSVRFIikgLSAxKSAhPSAwICYmCisJICAgIG1lbWNtcChkcHRyLCAiU0lQLzIuMCAyMDAiLCBzaXplb2YoIlNJUC8yLjAgMjAwIikgLSAxKSAhPSAwKSB7CisJCWdvdG8gb3V0OworCX0KKwkvKiBHZXQgaXAgYW5kIHBvcnQgYWRkcmVzcyBmcm9tIFNEUCBwYWNrZXQuICovCisJaWYgKGN0X3NpcF9nZXRfaW5mbyhkcHRyLCBkYXRhbGVuLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKKwkgICAgICAgICAgICAgICAgICAgICZjdF9zaXBfaGRyc1tQT1NfQ09OTkVDVElPTl0pID4gMCkgeworCisJCS8qIFdlJ2xsIGRyb3Agb25seSBpZiB0aGVyZSBhcmUgcGFyc2UgcHJvYmxlbXMuICovCisJCWlmIChwYXJzZV9pcGFkZHIoZHB0ciArIG1hdGNob2ZmLCBOVUxMLCAmaXBhZGRyLAorCQkgICAgICAgICAgICAgICAgIGRwdHIgKyBkYXRhbGVuKSA8IDApIHsKKwkJCXJldCA9IE5GX0RST1A7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoY3Rfc2lwX2dldF9pbmZvKGRwdHIsIGRhdGFsZW4sICZtYXRjaG9mZiwgJm1hdGNobGVuLAorCQkgICAgICAgICAgICAgICAgICAgICZjdF9zaXBfaGRyc1tQT1NfTUVESUFdKSA+IDApIHsKKworCQkJcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKGRwdHIgKyBtYXRjaG9mZiwgTlVMTCwgMTApOworCQkJaWYgKHBvcnQgPCAxMDI0KSB7CisJCQkJcmV0ID0gTkZfRFJPUDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXJldCA9IHNldF9leHBlY3RlZF9ydHAocHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJICAgICAgIGlwYWRkciwgcG9ydCwgZHB0cik7CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyIHNpcFtNQVhfUE9SVFNdOworc3RhdGljIGNoYXIgc2lwX25hbWVzW01BWF9QT1JUU11bMTBdOworCitzdGF0aWMgdm9pZCBmaW5pKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykgeworCQlERUJVR1AoInVucmVnaXN0ZXJpbmcgaGVscGVyIGZvciBwb3J0ICVkXG4iLCBwb3J0c1tpXSk7CisJCWlwX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcigmc2lwW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlpbnQgaSwgcmV0OworCWNoYXIgKnRtcG5hbWU7CisKKwlpZiAocG9ydHNfYyA9PSAwKQorCQlwb3J0c1twb3J0c19jKytdID0gU0lQX1BPUlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHNfYzsgaSsrKSB7CisJCS8qIENyZWF0ZSBoZWxwZXIgc3RydWN0dXJlICovCisJCW1lbXNldCgmc2lwW2ldLCAwLCBzaXplb2Yoc3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIpKTsKKworCQlzaXBbaV0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisJCXNpcFtpXS50dXBsZS5zcmMudS51ZHAucG9ydCA9IGh0b25zKHBvcnRzW2ldKTsKKwkJc2lwW2ldLm1hc2suc3JjLnUudWRwLnBvcnQgPSAweEZGRkY7CisJCXNpcFtpXS5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CisJCXNpcFtpXS5tYXhfZXhwZWN0ZWQgPSAxOworCQlzaXBbaV0udGltZW91dCA9IDMgKiA2MDsgLyogMyBtaW51dGVzICovCisJCXNpcFtpXS5tZSA9IFRISVNfTU9EVUxFOworCQlzaXBbaV0uaGVscCA9IHNpcF9oZWxwOworCisJCXRtcG5hbWUgPSAmc2lwX25hbWVzW2ldWzBdOworCQlpZiAocG9ydHNbaV0gPT0gU0lQX1BPUlQpCisJCQlzcHJpbnRmKHRtcG5hbWUsICJzaXAiKTsKKwkJZWxzZQorCQkJc3ByaW50Zih0bXBuYW1lLCAic2lwLSVkIiwgaSk7CisJCXNpcFtpXS5uYW1lID0gdG1wbmFtZTsKKworCQlERUJVR1AoInBvcnQgIyVkOiAlZFxuIiwgaSwgcG9ydHNbaV0pOworCisJCXJldCA9IGlwX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJnNpcFtpXSk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50aygiRVJST1IgcmVnaXN0ZXJpbmcgaGVscGVyIGZvciBwb3J0ICVkXG4iLAorCQkJCXBvcnRzW2ldKTsKKwkJCWZpbmkoKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDkyOWQ2MWYuLjg4NDQ1YWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0xODksNiArMTg5LDExIEBACiAJCXJldHVybiAtRU5PU1BDOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NFQ01BUksKKwlpZiAoc2VxX3ByaW50ZihzLCAic2VjbWFyaz0ldSAiLCBjb25udHJhY2stPnNlY21hcmspKQorCQlyZXR1cm4gLUVOT1NQQzsKKyNlbmRpZgorCiAJaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmNvbm50cmFjay0+Y3RfZ2VuZXJhbC51c2UpKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKQEAgLTQxNyw3ICs0MjIsNyBAQAogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBpcF9jb25udHJhY2tfZ2V0KCpwc2tiLCAmY3RpbmZvKTsKLQlpZiAoY3QgJiYgY3QtPmhlbHBlcikgeworCWlmIChjdCAmJiBjdC0+aGVscGVyICYmIGN0aW5mbyAhPSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKIAkJdW5zaWduZWQgaW50IHJldDsKIAkJcmV0ID0gY3QtPmhlbHBlci0+aGVscChwc2tiLCBjdCwgY3RpbmZvKTsKIAkJaWYgKHJldCAhPSBORl9BQ0NFUFQpCkBAIC01NjQsNiArNTY5LDggQEAKIHN0YXRpYyBpbnQgbG9nX2ludmFsaWRfcHJvdG9fbWluID0gMDsKIHN0YXRpYyBpbnQgbG9nX2ludmFsaWRfcHJvdG9fbWF4ID0gMjU1OwogCitpbnQgaXBfY29ubnRyYWNrX2NoZWNrc3VtID0gMTsKKwogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICppcF9jdF9zeXNjdGxfaGVhZGVyOwogCiBzdGF0aWMgY3RsX3RhYmxlIGlwX2N0X3N5c2N0bF90YWJsZVtdID0gewpAQCAtNTkyLDYgKzU5OSwxNCBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKIAl7CisJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19DSEVDS1NVTSwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja19jaGVja3N1bSIsCisJCS5kYXRhCQk9ICZpcF9jb25udHJhY2tfY2hlY2tzdW0sCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKIAkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5ULAogCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9zZW50IiwKIAkJLmRhdGEJCT0gJmlwX2N0X3RjcF90aW1lb3V0X3N5bl9zZW50LApAQCAtOTQ2LDYgKzk2MSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChpcF9jb25udHJhY2tfcHJvdG9fZmluZF9nZXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX3Byb3RvX3B1dCk7CiBFWFBPUlRfU1lNQk9MX0dQTChfX2lwX2Nvbm50cmFja19wcm90b19maW5kKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlwX2Nvbm50cmFja19jaGVja3N1bSk7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTkspIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOS19NT0RVTEUpCiBFWFBPUlRfU1lNQk9MX0dQTChpcF9jdF9wb3J0X3R1cGxlX3RvX25mYXR0cik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKaW5kZXggZDQ1NjYzZC4uNDE5Yjg3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwpAQCAtNDg3LDYgKzQ4Nyw4MCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGlwX25hdF9jYWxsZm9yd2FyZGluZ19leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAorCQkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpCit7CisJc3RydWN0IGlwX25hdF9yYW5nZSByYW5nZTsKKworCS8qIFRoaXMgbXVzdCBiZSBhIGZyZXNoIG9uZS4gKi8KKwlCVUdfT04obmV3LT5zdGF0dXMgJiBJUFNfTkFUX0RPTkVfTUFTSyk7CisKKwkvKiBDaGFuZ2Ugc3JjIHRvIHdoZXJlIG1hc3RlciBzZW5kcyB0byAqLworCXJhbmdlLmZsYWdzID0gSVBfTkFUX1JBTkdFX01BUF9JUFM7CisJcmFuZ2UubWluX2lwID0gcmFuZ2UubWF4X2lwID0gbmV3LT50dXBsZWhhc2hbIXRoaXMtPmRpcl0udHVwbGUuc3JjLmlwOworCisJLyogaG9vayBkb2Vzbid0IG1hdHRlciwgYnV0IGl0IGhhcyB0byBkbyBzb3VyY2UgbWFuaXAgKi8KKwlpcF9uYXRfc2V0dXBfaW5mbyhuZXcsICZyYW5nZSwgTkZfSVBfUE9TVF9ST1VUSU5HKTsKKworCS8qIEZvciBEU1QgbWFuaXAsIG1hcCBwb3J0IGhlcmUgdG8gd2hlcmUgaXQncyBleHBlY3RlZC4gKi8KKwlyYW5nZS5mbGFncyA9IChJUF9OQVRfUkFOR0VfTUFQX0lQUyB8IElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpOworCXJhbmdlLm1pbiA9IHJhbmdlLm1heCA9IHRoaXMtPnNhdmVkX3Byb3RvOworCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcCA9IHRoaXMtPnNhdmVkX2lwOworCisJLyogaG9vayBkb2Vzbid0IG1hdHRlciwgYnV0IGl0IGhhcyB0byBkbyBkZXN0aW5hdGlvbiBtYW5pcCAqLworCWlwX25hdF9zZXR1cF9pbmZvKG5ldywgJnJhbmdlLCBORl9JUF9QUkVfUk9VVElORyk7CisKKwlpcF9jb25udHJhY2tfcTkzMV9leHBlY3QobmV3LCB0aGlzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IG5hdF9jYWxsZm9yd2FyZGluZyhzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgdV9pbnQxNl90IHBvcnQsCisJCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJdV9pbnQxNl90IG5hdGVkX3BvcnQ7CisKKwkvKiBTZXQgZXhwZWN0YXRpb25zIGZvciBOQVQgKi8KKwlleHAtPnNhdmVkX2lwID0gZXhwLT50dXBsZS5kc3QuaXA7CisJZXhwLT50dXBsZS5kc3QuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcDsKKwlleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydDsKKwlleHAtPmV4cGVjdGZuID0gaXBfbmF0X2NhbGxmb3J3YXJkaW5nX2V4cGVjdDsKKwlleHAtPmRpciA9ICFkaXI7CisKKwkvKiBUcnkgdG8gZ2V0IHNhbWUgcG9ydDogaWYgbm90LCB0cnkgdG8gY2hhbmdlIGl0LiAqLworCWZvciAobmF0ZWRfcG9ydCA9IHBvcnQ7IG5hdGVkX3BvcnQgIT0gMDsgbmF0ZWRfcG9ydCsrKSB7CisJCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhuYXRlZF9wb3J0KTsKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAobmF0ZWRfcG9ydCA9PSAwKSB7CS8qIE5vIHBvcnQgYXZhaWxhYmxlICovCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoImlwX25hdF9xOTMxOiBvdXQgb2YgVENQIHBvcnRzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTW9kaWZ5IHNpZ25hbCAqLworCWlmICghc2V0X2gyMjVfYWRkcihwc2tiLCBkYXRhLCBkYXRhb2ZmLCBhZGRyLAorCQkJICAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXAsCisJCQkgICBuYXRlZF9wb3J0KSA9PSAwKSB7CisJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTdWNjZXNzICovCisJREVCVUdQKCJpcF9uYXRfcTkzMTogZXhwZWN0IENhbGwgRm9yd2FyZGluZyAiCisJICAgICAgICIldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLnNyYy5pcCksIG50b2hzKGV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuZHN0LmlwKSwgbnRvaHMoZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewogCUJVR19PTihzZXRfaDI0NV9hZGRyX2hvb2sgIT0gTlVMTCk7CkBAIC00OTYsNiArNTcwLDcgQEAKIAlCVUdfT04obmF0X3J0cF9ydGNwX2hvb2sgIT0gTlVMTCk7CiAJQlVHX09OKG5hdF90MTIwX2hvb2sgIT0gTlVMTCk7CiAJQlVHX09OKG5hdF9oMjQ1X2hvb2sgIT0gTlVMTCk7CisJQlVHX09OKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rICE9IE5VTEwpOwogCUJVR19PTihuYXRfcTkzMV9ob29rICE9IE5VTEwpOwogCiAJc2V0X2gyNDVfYWRkcl9ob29rID0gc2V0X2gyNDVfYWRkcjsKQEAgLTUwNSw2ICs1ODAsNyBAQAogCW5hdF9ydHBfcnRjcF9ob29rID0gbmF0X3J0cF9ydGNwOwogCW5hdF90MTIwX2hvb2sgPSBuYXRfdDEyMDsKIAluYXRfaDI0NV9ob29rID0gbmF0X2gyNDU7CisJbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2sgPSBuYXRfY2FsbGZvcndhcmRpbmc7CiAJbmF0X3E5MzFfaG9vayA9IG5hdF9xOTMxOwogCiAJREVCVUdQKCJpcF9uYXRfaDMyMzogaW5pdCBzdWNjZXNzXG4iKTsKQEAgLTUyMSw2ICs1OTcsNyBAQAogCW5hdF9ydHBfcnRjcF9ob29rID0gTlVMTDsKIAluYXRfdDEyMF9ob29rID0gTlVMTDsKIAluYXRfaDI0NV9ob29rID0gTlVMTDsKKwluYXRfY2FsbGZvcndhcmRpbmdfaG9vayA9IE5VTEw7CiAJbmF0X3E5MzFfaG9vayA9IE5VTEw7CiAJc3luY2hyb25pemVfbmV0KCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NpcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmZiYTYzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zaXAuYwpAQCAtMCwwICsxLDI0OSBAQAorLyogU0lQIGV4dGVuc2lvbiBmb3IgVURQIE5BVCBhbHRlcmF0aW9uLgorICoKKyAqIChDKSAyMDA1IGJ5IENocmlzdGlhbiBIZW50c2NoZWwgPGNoZW50c2NoZWxAYXJuZXQuY29tLmFyPgorICogYmFzZWQgb24gUlIncyBpcF9uYXRfZnRwLmMgYW5kIG90aGVyIG1vZHVsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2lwLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzdGlhbiBIZW50c2NoZWwgPGNoZW50c2NoZWxAYXJuZXQuY29tLmFyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTSVAgTkFUIGhlbHBlciIpOworCisjaWYgMAorI2RlZmluZSBERUJVR1AgcHJpbnRrCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKK2V4dGVybiBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gY3Rfc2lwX2hkcnNbXTsKKworc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfc2lwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkJICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHNpemVfdCBkbGVuLAorCQkJCSAgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZsZW4sCisJCQkJICAgICAgc3RydWN0IHNpcF9oZWFkZXJfbmZvICpobmZvKQoreworCXVuc2lnbmVkIGludCBtYXRjaGxlbiwgbWF0Y2hvZmY7CisKKwlpZiAoY3Rfc2lwX2dldF9pbmZvKCpkcHRyLCBkbGVuLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwgaG5mbykgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWlwX25hdF9tYW5nbGVfdWRwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgYnVmZmVyLCBidWZmbGVuKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBuZWVkIHRvIHJlbG9hZCB0aGlzLiBUaGFua3MgUGF0cmljay4gKi8KKwkqZHB0ciA9ICgqcHNrYiktPmRhdGEgKyAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zaXAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyKQoreworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJY2hhciBidWZmZXJbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm46bm5ubm4iKV07CisJdW5zaWduZWQgaW50IGJ1ZmZsZW4sIGRhdGFvZmY7CisJdV9pbnQzMl90IGlwOworCXVfaW50MTZfdCBwb3J0OworCisJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisKKwlpcCAgID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CisJcG9ydCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUudWRwLnBvcnQ7CisJYnVmZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUuJXUuJXUuJXU6JXUiLCBOSVBRVUFEKGlwKSwgbnRvaHMocG9ydCkpOworCisJLyogc2hvcnQgcGFja2V0ID8gKi8KKwlpZiAoKCgqcHNrYiktPmxlbiAtIGRhdGFvZmYpIDwgKHNpemVvZigiU0lQLzIuMCIpIC0gMSkpCisJCXJldHVybiAwOworCisJLyogQmFzaWMgcnVsZXM6IHJlcXVlc3RzIGFuZCByZXNwb25zZXMuICovCisJaWYgKG1lbWNtcCgqZHB0ciwgIlNJUC8yLjAiLCBzaXplb2YoIlNJUC8yLjAiKSAtIDEpID09IDApIHsKKwkJY29uc3QgY2hhciAqYXV4OworCisJCWlmICgoY3RpbmZvKSA8IElQX0NUX0lTX1JFUExZKSB7CisJCQltYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCBkcHRyLAorCQkJICAgICAgICAgICAgICAgICAgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkJCSAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwKKwkJCSAgICAgICAgICAgICAgICAgICZjdF9zaXBfaGRyc1tQT1NfQ09OVEFDVF0pOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsIGRwdHIsCisJCQkJICAgICAgICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX1ZJQV0pKQorCQkJcmV0dXJuIDA7CisKKwkJLyogVGhpcyBzZWFyY2ggc2hvdWxkIGlnbm9yZSBjYXNlLCBidXQgbGF0ZXIuLiAqLworCQlhdXggPSBjdF9zaXBfc2VhcmNoKCJDU2VxOiIsICpkcHRyLCBzaXplb2YoIkNTZXE6IikgLSAxLAorCQkgICAgICAgICAgICAgICAgICAgICgqcHNrYiktPmxlbiAtIGRhdGFvZmYpOworCQlpZiAoIWF1eCkKKwkJCXJldHVybiAwOworCisJCWlmICghY3Rfc2lwX3NlYXJjaCgiUkVHSVNURVIiLCBhdXgsIHNpemVvZigiUkVHSVNURVIiKSwKKwkJICAgIGN0X3NpcF9sbmxlbihhdXgsICpkcHRyICsgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZikpKQorCQkJcmV0dXJuIDE7CisKKwkJcmV0dXJuIG1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsIGRwdHIsCisJCQkJCSAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLAorCQkJCQkgJmN0X3NpcF9oZHJzW1BPU19DT05UQUNUXSk7CisJfQorCWlmICgoY3RpbmZvKSA8IElQX0NUX0lTX1JFUExZKSB7CisJCWlmICghbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwKKwkJCQkgICAgICAgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZsZW4sICZjdF9zaXBfaGRyc1tQT1NfVklBXSkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBNYW5nbGUgQ29udGFjdCBpZiBleGlzdHMgb25seS4gLSB3YXRjaCB1ZHBfbmF0X21hbmdsZSgpISAqLworCQltYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCBkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAorCQkgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZsZW4sICZjdF9zaXBfaGRyc1tQT1NfQ09OVEFDVF0pOworCQlyZXR1cm4gMTsKKwl9CisJLyogVGhpcyBtYW5nbGUgcmVxdWVzdHMgaGVhZGVycy4gKi8KKwlyZXR1cm4gbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgY3Rfc2lwX2xubGVuKCpkcHRyLAorCQkJCSAgICAgICAgICAgICAgKmRwdHIgKyAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX1JFUV9IRUFERVJdKTsKK30KKworc3RhdGljIGludCBtYW5nbGVfY29udGVudF9sZW4oc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRwdHIpCit7CisJdW5zaWduZWQgaW50IGRhdGFvZmYsIG1hdGNob2ZmLCBtYXRjaGxlbjsKKwljaGFyIGJ1ZmZlcltzaXplb2YoIjY1NTM2IildOworCWludCBidWZmbGVuOworCisJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisKKwkvKiBHZXQgYWN0dWFsIFNEUCBsZW5naHQgKi8KKwlpZiAoY3Rfc2lwX2dldF9pbmZvKGRwdHIsICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsICZtYXRjaG9mZiwKKwkgICAgICAgICAgICAgICAgICAgICZtYXRjaGxlbiwgJmN0X3NpcF9oZHJzW1BPU19TRFBfSEVBREVSXSkgPiAwKSB7CisKKwkJLyogc2luY2UgY3Rfc2lwX2dldF9pbmZvKCkgZ2l2ZSB1cyBhIHBvaW50ZXIgcGFzc2luZyAndj0nCisJCSAgIHdlIG5lZWQgdG8gYWRkIDIgYnl0ZXMgaW4gdGhpcyBjb3VudC4gKi8KKwkJaW50IGNfbGVuID0gKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiAtIG1hdGNob2ZmICsgMjsKKworCQkvKiBOb3csIHVwZGF0ZSBTRFAgbGVuZ2h0ICovCisJCWlmIChjdF9zaXBfZ2V0X2luZm8oZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwgJm1hdGNob2ZmLAorCQkgICAgICAgICAgICAgICAgICAgICZtYXRjaGxlbiwgJmN0X3NpcF9oZHJzW1BPU19DT05URU5UXSkgPiAwKSB7CisKKwkJCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgY19sZW4pOworCisJCQlyZXR1cm4gaXBfbmF0X21hbmdsZV91ZHBfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sCisJCQkJCQkJbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkJCQkJCWJ1ZmZlciwgYnVmZmxlbik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWFuZ2xlX3NkcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICAgICAgdV9pbnQzMl90IG5ld2lwLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkcHRyKQoreworCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLm5ubi5ubm4ubm5uIildOworCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBidWZmbGVuOworCisJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisKKwkvKiBNYW5nbGUgb3duZXIgYW5kIGNvbnRhY3QgaW5mby4gKi8KKwlidWZmbGVuID0gc3ByaW50ZihidWZmZXIsICIldS4ldS4ldS4ldSIsIE5JUFFVQUQobmV3aXApKTsKKwlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsICZkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAorCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX09XTkVSXSkpCisJCXJldHVybiAwOworCisJaWYgKCFtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCAmZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19DT05ORUNUSU9OXSkpCisJCXJldHVybiAwOworCisJLyogTWFuZ2xlIG1lZGlhIHBvcnQuICovCisJYnVmZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUiLCBwb3J0KTsKKwlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsICZkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAorCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX01FRElBXSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihwc2tiLCBjdGluZm8sIGN0LCBkcHRyKTsKK30KKworLyogU28sIHRoaXMgcGFja2V0IGhhcyBoaXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWF0Y2hpbmcgY29kZS4KKyAgIE1hbmdsZSBpdCwgYW5kIGNoYW5nZSB0aGUgZXhwZWN0YXRpb24gdG8gbWF0Y2ggdGhlIG5ldyB2ZXJzaW9uLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRwdHIpCit7CisJc3RydWN0IGlwX2Nvbm50cmFjayAqY3QgPSBleHAtPm1hc3RlcjsKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVfaW50MzJfdCBuZXdpcDsKKwl1X2ludDE2X3QgcG9ydDsKKworCURFQlVHUCgiaXBfbmF0X3NkcCgpOlxuIik7CisKKwkvKiBDb25uZWN0aW9uIHdpbGwgY29tZSBmcm9tIHJlcGx5ICovCisJbmV3aXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcDsKKworCWV4cC0+dHVwbGUuZHN0LmlwID0gbmV3aXA7CisJZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCA9IGV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQ7CisJZXhwLT5kaXIgPSAhZGlyOworCisJLyogV2hlbiB5b3Ugc2VlIHRoZSBwYWNrZXQsIHdlIG5lZWQgdG8gTkFUIGl0IHRoZSBzYW1lIGFzIHRoZQorCSAgIHRoaXMgb25lLiAqLworCWV4cC0+ZXhwZWN0Zm4gPSBpcF9uYXRfZm9sbG93X21hc3RlcjsKKworCS8qIFRyeSB0byBnZXQgc2FtZSBwb3J0OiBpZiBub3QsIHRyeSB0byBjaGFuZ2UgaXQuICovCisJZm9yIChwb3J0ID0gbnRvaHMoZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCk7IHBvcnQgIT0gMDsgcG9ydCsrKSB7CisJCWV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0KTsKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAocG9ydCA9PSAwKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCWlmICghbWFuZ2xlX3NkcChwc2tiLCBjdGluZm8sIGN0LCBuZXdpcCwgcG9ydCwgZHB0cikpIHsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKKwkJcmV0dXJuIE5GX0RST1A7CisJfQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJaXBfbmF0X3NpcF9ob29rID0gTlVMTDsKKwlpcF9uYXRfc2RwX2hvb2sgPSBOVUxMOworCS8qIE1ha2Ugc3VyZSBub29uZSBjYWxscyBpdCwgbWVhbndoaWxlLiAqLworCXN5bmNocm9uaXplX25ldCgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisJQlVHX09OKGlwX25hdF9zaXBfaG9vayk7CisJQlVHX09OKGlwX25hdF9zZHBfaG9vayk7CisJaXBfbmF0X3NpcF9ob29rID0gaXBfbmF0X3NpcDsKKwlpcF9uYXRfc2RwX2hvb2sgPSBpcF9uYXRfc2RwOworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYwppbmRleCBjMzMyNDQyLi5kMjBkNTU3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYwpAQCAtMTM0OCw0ICsxMzQ4LDQgQEAKIG1vZHVsZV9pbml0KGlwX25hdF9zbm1wX2Jhc2ljX2luaXQpOwogbW9kdWxlX2V4aXQoaXBfbmF0X3NubXBfYmFzaWNfZmluaSk7CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgMDYwMCk7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDYwMCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBhYWQ5ZDI4Li5kYmM4M2M1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTI0MSwyNSArMjQxLDE3IEBACiAJc3RydWN0IGlwaGRyICppcGggPSBza2ItPm5oLmlwaDsKIAl1bnNpZ25lZCBsb25nIGhhc2h2YWw7CiAJdV9pbnQxNl90IHNwb3J0LCBkcG9ydDsKLQlzdHJ1Y3QgdGNwaGRyICp0aDsKLQlzdHJ1Y3QgdWRwaGRyICp1aDsKLQlzdHJ1Y3QgaWNtcGhkciAqaWg7CisJdV9pbnQxNl90ICpwb3J0czsKIAogCXN3aXRjaCAoaXBoLT5wcm90b2NvbCkgewogCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCXRoID0gKHZvaWQgKilpcGgraXBoLT5paGwqNDsKLQkJc3BvcnQgPSBudG9ocyh0aC0+c291cmNlKTsKLQkJZHBvcnQgPSBudG9ocyh0aC0+ZGVzdCk7Ci0JCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6Ci0JCXVoID0gKHZvaWQgKilpcGgraXBoLT5paGwqNDsKLQkJc3BvcnQgPSBudG9ocyh1aC0+c291cmNlKTsKLQkJZHBvcnQgPSBudG9ocyh1aC0+ZGVzdCk7Ci0JCWJyZWFrOworCWNhc2UgSVBQUk9UT19TQ1RQOgorCWNhc2UgSVBQUk9UT19EQ0NQOgogCWNhc2UgSVBQUk9UT19JQ01QOgotCQlpaCA9ICh2b2lkICopaXBoK2lwaC0+aWhsKjQ7Ci0JCXNwb3J0ID0gbnRvaHMoaWgtPnVuLmVjaG8uaWQpOwotCQlkcG9ydCA9IChpaC0+dHlwZTw8OCl8aWgtPmNvZGU7CisJCXBvcnRzID0gKHZvaWQgKilpcGgraXBoLT5paGwqNDsKKwkJc3BvcnQgPSBwb3J0c1swXTsKKwkJZHBvcnQgPSBwb3J0c1sxXTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKaW5kZXggMGJiYTNjMi4uNDMxYTNjZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkvKiBUaGlzIHBhY2tldCB3aWxsIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgb3RoZXI6IGNsZWFyIG5mIGZpZWxkcyAqLwogCW5mX3Jlc2V0KG5za2IpOwogCW5za2ItPm5mbWFyayA9IDA7CisJc2tiX2luaXRfc2VjbWFyayhuc2tiKTsKIAogCXRjcGggPSAoc3RydWN0IHRjcGhkciAqKSgodV9pbnQzMl90Kiluc2tiLT5uaC5pcGggKyBuc2tiLT5uaC5pcGgtPmlobCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jCmluZGV4IDdjNjgzNmMuLjkyOTgwYWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYwpAQCAtMjgsOSArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC91ZHAuaD4KLSNpbmNsdWRlIDxsaW51eC9zY3RwLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtODMsNiArODAsNyBAQAogCS8qIHVzZWQgaW50ZXJuYWxseSAqLwogCXNwaW5sb2NrX3QgbG9jazsJCS8qIGxvY2sgZm9yIGxpc3RfaGVhZCAqLwogCXVfaW50MzJfdCBybmQ7CQkJLyogcmFuZG9tIHNlZWQgZm9yIGhhc2ggKi8KKwlpbnQgcm5kX2luaXRpYWxpemVkOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiB0aW1lciBmb3IgZ2MgKi8KIAlhdG9taWNfdCBjb3VudDsJCQkvKiBudW1iZXIgZW50cmllcyBpbiB0YWJsZSAqLwogCkBAIC0xMzcsOCArMTM1LDEwIEBACiAKIAkvKiBpbml0aWFsaXplIGhhc2ggd2l0aCByYW5kb20gdmFsIGF0IHRoZSB0aW1lIHdlIGFsbG9jYXRlCiAJICogdGhlIGZpcnN0IGhhc2h0YWJsZSBlbnRyeSAqLwotCWlmICghaHQtPnJuZCkKKwlpZiAoIWh0LT5ybmRfaW5pdGlhbGl6ZWQpIHsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmaHQtPnJuZCwgNCk7CisJCWh0LT5ybmRfaW5pdGlhbGl6ZWQgPSAxOworCX0KIAogCWlmIChodC0+Y2ZnLm1heCAmJgogCSAgICBhdG9taWNfcmVhZCgmaHQtPmNvdW50KSA+PSBodC0+Y2ZnLm1heCkgewpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAlhdG9taWNfc2V0KCZoaW5mby0+Y291bnQsIDApOwogCWF0b21pY19zZXQoJmhpbmZvLT51c2UsIDEpOwotCWhpbmZvLT5ybmQgPSAwOworCWhpbmZvLT5ybmRfaW5pdGlhbGl6ZWQgPSAwOwogCXNwaW5fbG9ja19pbml0KCZoaW5mby0+bG9jayk7CiAJaGluZm8tPnBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KG1pbmZvLT5uYW1lLCAwLCBoYXNobGltaXRfcHJvY2Rpcik7CiAJaWYgKCFoaW5mby0+cGRlKSB7CkBAIC0zODEsNDkgKzM4MSw2IEBACiAJCWRoLT5yYXRlaW5mby5jcmVkaXQgPSBkaC0+cmF0ZWluZm8uY3JlZGl0X2NhcDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ2V0X3BvcnRzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIAotCQkJICAgIHUxNiBwb3J0c1syXSkKLXsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB0Y3BoZHIgdGg7Ci0JCXN0cnVjdCB1ZHBoZHIgdWg7Ci0JCXNjdHBfc2N0cGhkcl90IHNjdHBoOwotCX0gaGRyX3UsICpwdHJfdTsKLQotCS8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovCi0JaWYgKG9mZnNldCkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBNdXN0IGJlIGJpZyBlbm91Z2ggdG8gcmVhZCBwb3J0cyAoYm90aCBVRFAgYW5kIFRDUCBoYXZlCi0JICAgdGhlbSBhdCB0aGUgc3RhcnQpLiAqLwotCXB0cl91ID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2tiLT5uaC5pcGgtPmlobCo0LCA4LCAmaGRyX3UpOyAKLQlpZiAoIXB0cl91KQotCQlyZXR1cm4gMTsKLQotCXN3aXRjaCAoc2tiLT5uaC5pcGgtPnByb3RvY29sKSB7Ci0JCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCQlwb3J0c1swXSA9IHB0cl91LT50aC5zb3VyY2U7Ci0JCQlwb3J0c1sxXSA9IHB0cl91LT50aC5kZXN0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBQUk9UT19VRFA6Ci0JCQlwb3J0c1swXSA9IHB0cl91LT51aC5zb3VyY2U7Ci0JCQlwb3J0c1sxXSA9IHB0cl91LT51aC5kZXN0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBQUk9UT19TQ1RQOgotCQkJcG9ydHNbMF0gPSBwdHJfdS0+c2N0cGguc291cmNlOwotCQkJcG9ydHNbMV0gPSBwdHJfdS0+c2N0cGguZGVzdDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogYWxsIG90aGVyIHByb3RvY29scyBkb24ndCBzdXBwcm90IHBlci1wb3J0IGhhc2gKLQkJCSAqIGJ1Y2tldHMgKi8KLQkJCXBvcnRzWzBdID0gcG9ydHNbMV0gPSAwOwotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIGludAogaGFzaGxpbWl0X21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKQEAgLTQ0OSw4ICs0MDYsMjIgQEAKIAkJZHN0LnNyY19pcCA9IHNrYi0+bmguaXBoLT5zYWRkcjsKIAlpZiAoaGluZm8tPmNmZy5tb2RlICYgSVBUX0hBU0hMSU1JVF9IQVNIX0RQVAogCSAgICB8fGhpbmZvLT5jZmcubW9kZSAmIElQVF9IQVNITElNSVRfSEFTSF9TUFQpIHsKLQkJdV9pbnQxNl90IHBvcnRzWzJdOwotCQlpZiAoZ2V0X3BvcnRzKHNrYiwgb2Zmc2V0LCBwb3J0cykpIHsKKwkJdV9pbnQxNl90IF9wb3J0c1syXSwgKnBvcnRzOworCisJCXN3aXRjaCAoc2tiLT5uaC5pcGgtPnByb3RvY29sKSB7CisJCWNhc2UgSVBQUk9UT19UQ1A6CisJCWNhc2UgSVBQUk9UT19VRFA6CisJCWNhc2UgSVBQUk9UT19TQ1RQOgorCQljYXNlIElQUFJPVE9fRENDUDoKKwkJCXBvcnRzID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2tiLT5uaC5pcGgtPmlobCo0LAorCQkJCQkJICAgc2l6ZW9mKF9wb3J0cyksICZfcG9ydHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlfcG9ydHNbMF0gPSBfcG9ydHNbMV0gPSAwOworCQkJcG9ydHMgPSBfcG9ydHM7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXBvcnRzKSB7CiAJCQkvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgCSAgY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqLwogCQkJKmhvdGRyb3AgPSAxOwpAQCAtNTYxLDcgKzUzMiw3IEBACiBoYXNobGltaXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8sCiAJCSAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKIHsKLQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICpyID0gKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKikgbWF0Y2hpbmZvOworCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKnIgPSBtYXRjaGluZm87CiAKIAlodGFibGVfcHV0KHItPmhpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCmluZGV4IGI4NDdlZTQuLjYxYTIxMzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYwpAQCAtMSwxMDA3ICsxLDQ5OSBAQAotLyogS2VybmVsIG1vZHVsZSB0byBjaGVjayBpZiB0aGUgc291cmNlIGFkZHJlc3MgaGFzIGJlZW4gc2VlbiByZWNlbnRseS4gKi8KLS8qIENvcHlyaWdodCAyMDAyLTIwMDMsIFN0ZXBoZW4gRnJvc3QsIDIuNS54IHBvcnQgYnkgbGFmb3JnZUBuZXRmaWx0ZXIub3JnICovCi0vKiBBdXRob3I6IFN0ZXBoZW4gRnJvc3QgPHNmcm9zdEBzbm93bWFuLm5ldD4gKi8KLS8qIFByb2plY3QgUGFnZTogaHR0cDovL3Nub3dtYW4ubmV0L3Byb2plY3RzL2lwdF9yZWNlbnQvICovCi0vKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMLCBWZXJzaW9uIDIgKi8KLS8qIFRoaXMgY29weXJpZ2h0IGRvZXMgbm90IGNvdmVyIHVzZXIgcHJvZ3JhbXMgdGhhdCB1c2Uga2VybmVsIHNlcnZpY2VzCi0gKiBieSBub3JtYWwgc3lzdGVtIGNhbGxzLiAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgaXMgYSByZXBsYWNlbWVudCBvZiB0aGUgb2xkIGlwdF9yZWNlbnQgbW9kdWxlLCB3aGljaCBjYXJyaWVkIHRoZQorICogZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2U6CisgKgorICogQXV0aG9yOiBTdGVwaGVuIEZyb3N0IDxzZnJvc3RAc25vd21hbi5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDAzLCBTdGVwaGVuIEZyb3N0LCAyLjUueCBwb3J0IGJ5IGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZworICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50Lmg+CiAKLSN1bmRlZiBERUJVRwotI2RlZmluZSBIQVNIX0xPRyA5CitNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSVAgdGFibGVzIHJlY2VudGx5IHNlZW4gbWF0Y2hpbmcgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qIERlZmF1bHRzLCB0aGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUgbW9kdWxlIGNvbW1hbmQtbGluZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbGlzdF90b3QgPSAxMDA7CiBzdGF0aWMgdW5zaWduZWQgaW50IGlwX3BrdF9saXN0X3RvdCA9IDIwOwogc3RhdGljIHVuc2lnbmVkIGludCBpcF9saXN0X2hhc2hfc2l6ZSA9IDA7CiBzdGF0aWMgdW5zaWduZWQgaW50IGlwX2xpc3RfcGVybXMgPSAwNjQ0OwotI2lmZGVmIERFQlVHCi1zdGF0aWMgaW50IGRlYnVnID0gMTsKLSNlbmRpZgotCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICIgIiBSRUNFTlRfVkVSICI6IFN0ZXBoZW4gRnJvc3QgPHNmcm9zdEBzbm93bWFuLm5ldD4uICBodHRwOi8vc25vd21hbi5uZXQvcHJvamVjdHMvaXB0X3JlY2VudC9cbiI7Ci0KLU1PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gRnJvc3QgPHNmcm9zdEBzbm93bWFuLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSVAgdGFibGVzIHJlY2VudGx5IHNlZW4gbWF0Y2hpbmcgbW9kdWxlICIgUkVDRU5UX1ZFUik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CiBtb2R1bGVfcGFyYW0oaXBfbGlzdF90b3QsIHVpbnQsIDA0MDApOwogbW9kdWxlX3BhcmFtKGlwX3BrdF9saXN0X3RvdCwgdWludCwgMDQwMCk7CiBtb2R1bGVfcGFyYW0oaXBfbGlzdF9oYXNoX3NpemUsIHVpbnQsIDA0MDApOwogbW9kdWxlX3BhcmFtKGlwX2xpc3RfcGVybXMsIHVpbnQsIDA0MDApOwotI2lmZGVmIERFQlVHCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2MDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiZW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQiKTsKLSNlbmRpZgotTU9EVUxFX1BBUk1fREVTQyhpcF9saXN0X3RvdCwibnVtYmVyIG9mIElQcyB0byByZW1lbWJlciBwZXIgbGlzdCIpOwotTU9EVUxFX1BBUk1fREVTQyhpcF9wa3RfbGlzdF90b3QsIm51bWJlciBvZiBwYWNrZXRzIHBlciBJUCB0byByZW1lbWJlciIpOwotTU9EVUxFX1BBUk1fREVTQyhpcF9saXN0X2hhc2hfc2l6ZSwic2l6ZSBvZiBoYXNoIHRhYmxlIHVzZWQgdG8gbG9vayB1cCBJUHMiKTsKLU1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF9wZXJtcywicGVybWlzc2lvbnMgb24gL3Byb2MvbmV0L2lwdF9yZWNlbnQvKiBmaWxlcyIpOworTU9EVUxFX1BBUk1fREVTQyhpcF9saXN0X3RvdCwgIm51bWJlciBvZiBJUHMgdG8gcmVtZW1iZXIgcGVyIGxpc3QiKTsKK01PRFVMRV9QQVJNX0RFU0MoaXBfcGt0X2xpc3RfdG90LCAibnVtYmVyIG9mIHBhY2tldHMgcGVyIElQIHRvIHJlbWVtYmVyIChtYXguIDI1NSkiKTsKK01PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF9oYXNoX3NpemUsICJzaXplIG9mIGhhc2ggdGFibGUgdXNlZCB0byBsb29rIHVwIElQcyIpOworTU9EVUxFX1BBUk1fREVTQyhpcF9saXN0X3Blcm1zLCAicGVybWlzc2lvbnMgb24gL3Byb2MvbmV0L2lwdF9yZWNlbnQvKiBmaWxlcyIpOwogCi0vKiBTdHJ1Y3R1cmUgb2Ygb3VyIGxpc3Qgb2YgcmVjZW50bHkgc2VlbiBhZGRyZXNzZXMuICovCi1zdHJ1Y3QgcmVjZW50X2lwX2xpc3QgewotCXVfaW50MzJfdCBhZGRyOwotCXVfaW50OF90ICB0dGw7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3NlZW47Ci0JdW5zaWduZWQgbG9uZyAqbGFzdF9wa3RzOwotCXVfaW50MzJfdCBvbGRlc3RfcGt0OwotCXVfaW50MzJfdCBoYXNoX2VudHJ5OwotCXVfaW50MzJfdCB0aW1lX3BvczsKKworc3RydWN0IHJlY2VudF9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQJbHJ1X2xpc3Q7CisJdV9pbnQzMl90CQlhZGRyOworCXVfaW50OF90CQl0dGw7CisJdV9pbnQ4X3QJCWluZGV4OworCXVfaW50MTZfdAkJbnN0YW1wczsKKwl1bnNpZ25lZCBsb25nCQlzdGFtcHNbMF07CiB9OwogCi1zdHJ1Y3QgdGltZV9pbmZvX2xpc3QgewotCXVfaW50MzJfdCBwb3NpdGlvbjsKLQl1X2ludDMyX3QgdGltZTsKLX07Ci0KLS8qIFN0cnVjdHVyZSBvZiBvdXIgbGlua2VkIGxpc3Qgb2YgdGFibGVzIG9mIHJlY2VudCBsaXN0cy4gKi8KLXN0cnVjdCByZWNlbnRfaXBfdGFibGVzIHsKLQljaGFyIG5hbWVbSVBUX1JFQ0VOVF9OQU1FX0xFTl07Ci0JaW50IGNvdW50OwotCWludCB0aW1lX3BvczsKLQlzdHJ1Y3QgcmVjZW50X2lwX2xpc3QgKnRhYmxlOwotCXN0cnVjdCByZWNlbnRfaXBfdGFibGVzICpuZXh0OwotCXNwaW5sb2NrX3QgbGlzdF9sb2NrOwotCWludCAqaGFzaF90YWJsZTsKLQlzdHJ1Y3QgdGltZV9pbmZvX2xpc3QgKnRpbWVfaW5mbzsKK3N0cnVjdCByZWNlbnRfdGFibGUgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwljaGFyCQkJbmFtZVtJUFRfUkVDRU5UX05BTUVfTEVOXTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc3RhdHVzX3Byb2M7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2M7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQJCXJlZmNudDsKKwl1bnNpZ25lZCBpbnQJCWVudHJpZXM7CisJc3RydWN0IGxpc3RfaGVhZAlscnVfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlwaGFzaFswXTsKIH07CiAKLS8qIE91ciBjdXJyZW50IGxpc3Qgb2YgYWRkcmVzc2VzIHdlIGhhdmUgcmVjZW50bHkgc2Vlbi4KLSAqIE9ubHkgYWRkZWQgdG8gb24gYSAtLXNldCwgYW5kIG9ubHkgdXBkYXRlZCBvbiAtLXNldCB8fCAtLXVwZGF0ZSAKLSAqLwotc3RhdGljIHN0cnVjdCByZWNlbnRfaXBfdGFibGVzICpyX3RhYmxlcyA9IE5VTEw7Ci0KLS8qIFdlIHByb3RlY3Qgcl9saXN0IHdpdGggdGhpcyBzcGlubG9jayBzbyB0d28gcHJvY2Vzc29ycyBhcmUgbm90IG1vZGlmeWluZwotICogdGhlIGxpc3QgYXQgdGhlIHNhbWUgdGltZS4gCi0gKi8KK3N0YXRpYyBMSVNUX0hFQUQodGFibGVzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVjZW50X2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChyZWNlbnRfbXV0ZXgpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLS8qIE91ciAvcHJvYy9uZXQvaXB0X3JlY2VudCBlbnRyeSAqLwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZXRfaXB0X3JlY2VudCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX2RpcjsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCXJlY2VudF9mb3BzOwogI2VuZGlmCiAKLS8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZvciBsYXRlci4gKi8KK3N0YXRpYyB1X2ludDMyX3QgaGFzaF9ybmQ7CitzdGF0aWMgaW50IGhhc2hfcm5kX2luaXR0ZWQ7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVjZW50X2VudHJ5X2hhc2godV9pbnQzMl90IGFkZHIpCit7CisJaWYgKCFoYXNoX3JuZF9pbml0dGVkKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoJmhhc2hfcm5kLCA0KTsKKwkJaGFzaF9ybmRfaW5pdHRlZCA9IDE7CisJfQorCXJldHVybiBqaGFzaF8xd29yZChhZGRyLCBoYXNoX3JuZCkgJiAoaXBfbGlzdF9oYXNoX3NpemUgLSAxKTsKK30KKworc3RhdGljIHN0cnVjdCByZWNlbnRfZW50cnkgKgorcmVjZW50X2VudHJ5X2xvb2t1cChjb25zdCBzdHJ1Y3QgcmVjZW50X3RhYmxlICp0YWJsZSwgdV9pbnQzMl90IGFkZHIsIHVfaW50OF90IHR0bCkKK3sKKwlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplOworCXVuc2lnbmVkIGludCBoOworCisJaCA9IHJlY2VudF9lbnRyeV9oYXNoKGFkZHIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnRhYmxlLT5pcGhhc2hbaF0sIGxpc3QpCisJCWlmIChlLT5hZGRyID09IGFkZHIgJiYgKHR0bCA9PSBlLT50dGwgfHwgIXR0bCB8fCAhZS0+dHRsKSkKKwkJCXJldHVybiBlOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZWNlbnRfZW50cnlfcmVtb3ZlKHN0cnVjdCByZWNlbnRfdGFibGUgKnQsIHN0cnVjdCByZWNlbnRfZW50cnkgKmUpCit7CisJbGlzdF9kZWwoJmUtPmxpc3QpOworCWxpc3RfZGVsKCZlLT5scnVfbGlzdCk7CisJa2ZyZWUoZSk7CisJdC0+ZW50cmllcy0tOworfQorCitzdGF0aWMgc3RydWN0IHJlY2VudF9lbnRyeSAqCityZWNlbnRfZW50cnlfaW5pdChzdHJ1Y3QgcmVjZW50X3RhYmxlICp0LCB1X2ludDMyX3QgYWRkciwgdV9pbnQ4X3QgdHRsKQoreworCXN0cnVjdCByZWNlbnRfZW50cnkgKmU7CisKKwlpZiAodC0+ZW50cmllcyA+PSBpcF9saXN0X3RvdCkgeworCQllID0gbGlzdF9lbnRyeSh0LT5scnVfbGlzdC5uZXh0LCBzdHJ1Y3QgcmVjZW50X2VudHJ5LCBscnVfbGlzdCk7CisJCXJlY2VudF9lbnRyeV9yZW1vdmUodCwgZSk7CisJfQorCWUgPSBrbWFsbG9jKHNpemVvZigqZSkgKyBzaXplb2YoZS0+c3RhbXBzWzBdKSAqIGlwX3BrdF9saXN0X3RvdCwKKwkJICAgIEdGUF9BVE9NSUMpOworCWlmIChlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWUtPmFkZHIgICAgICA9IGFkZHI7CisJZS0+dHRsICAgICAgID0gdHRsOworCWUtPnN0YW1wc1swXSA9IGppZmZpZXM7CisJZS0+bnN0YW1wcyAgID0gMTsKKwllLT5pbmRleCAgICAgPSAxOworCWxpc3RfYWRkX3RhaWwoJmUtPmxpc3QsICZ0LT5pcGhhc2hbcmVjZW50X2VudHJ5X2hhc2goYWRkcildKTsKKwlsaXN0X2FkZF90YWlsKCZlLT5scnVfbGlzdCwgJnQtPmxydV9saXN0KTsKKwl0LT5lbnRyaWVzKys7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2VudF9lbnRyeV91cGRhdGUoc3RydWN0IHJlY2VudF90YWJsZSAqdCwgc3RydWN0IHJlY2VudF9lbnRyeSAqZSkKK3sKKwllLT5zdGFtcHNbZS0+aW5kZXgrK10gPSBqaWZmaWVzOworCWlmIChlLT5pbmRleCA+IGUtPm5zdGFtcHMpCisJCWUtPm5zdGFtcHMgPSBlLT5pbmRleDsKKwllLT5pbmRleCAlPSBpcF9wa3RfbGlzdF90b3Q7CisJbGlzdF9tb3ZlX3RhaWwoJmUtPmxydV9saXN0LCAmdC0+bHJ1X2xpc3QpOworfQorCitzdGF0aWMgc3RydWN0IHJlY2VudF90YWJsZSAqcmVjZW50X3RhYmxlX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZWNlbnRfdGFibGUgKnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ0YWJsZXMsIGxpc3QpCisJCWlmICghc3RyY21wKHQtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIHQ7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2VudF90YWJsZV9mbHVzaChzdHJ1Y3QgcmVjZW50X3RhYmxlICp0KQoreworCXN0cnVjdCByZWNlbnRfZW50cnkgKmUsICpuZXh0OworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGlwX2xpc3RfaGFzaF9zaXplOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5leHQsICZ0LT5pcGhhc2hbaV0sIGxpc3QpCisJCQlyZWNlbnRfZW50cnlfcmVtb3ZlKHQsIGUpOworCX0KK30KKwogc3RhdGljIGludAotbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgaW50IG9mZnNldCwKLSAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgaW50ICpob3Rkcm9wKTsKLQotLyogRnVuY3Rpb24gdG8gaGFzaCBhIGdpdmVuIGFkZHJlc3MgaW50byB0aGUgaGFzaCB0YWJsZSBvZiB0YWJsZV9zaXplIHNpemUgKi8KLXN0YXRpYyBpbnQgaGFzaF9mdW5jKHVuc2lnbmVkIGludCBhZGRyLCBpbnQgdGFibGVfc2l6ZSkKK2lwdF9yZWNlbnRfbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKKwkJIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBwcm90b2ZmLCBpbnQgKmhvdGRyb3ApCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JdW5zaWduZWQgaW50IHZhbHVlID0gYWRkcjsKLQlkbyB7IHJlc3VsdCBePSB2YWx1ZTsgfSB3aGlsZSgodmFsdWUgPj49IEhBU0hfTE9HKSk7Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6ICVkID0gaGFzaF9mdW5jKCV1LCVkKVxuIiwKLQkJCSByZXN1bHQgJiAodGFibGVfc2l6ZSAtIDEpLAotCQkJIGFkZHIsCi0JCQkgdGFibGVfc2l6ZSk7Ci0jZW5kaWYKLQotCXJldHVybihyZXN1bHQgJiAodGFibGVfc2l6ZSAtIDEpKTsKLX0KLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB3aGljaCBwcm9kdWNlcyB0aGUgb3V0cHV0IGZvciBvdXIgL3Byb2Mgb3V0cHV0Ci0gKiBpbnRlcmZhY2Ugd2hpY2ggbGlzdHMgZWFjaCBJUCBhZGRyZXNzLCB0aGUgbGFzdCBzZWVuIHRpbWUgYW5kIHRoZSAKLSAqIG90aGVyIHJlY2VudCB0aW1lcyB0aGUgYWRkcmVzcyB3YXMgc2Vlbi4KLSAqLwotCi1zdGF0aWMgaW50IGlwX3JlY2VudF9nZXRfaW5mbyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgbGVuID0gMCwgY291bnQsIGxhc3RfbGVuID0gMCwgcGt0X2NvdW50OwotCW9mZl90IHBvcyA9IDA7Ci0Jb2ZmX3QgYmVnaW4gPSAwOwotCXN0cnVjdCByZWNlbnRfaXBfdGFibGVzICpjdXJyX3RhYmxlOwotCi0JY3Vycl90YWJsZSA9IChzdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcyopIGRhdGE7Ci0KLQlzcGluX2xvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0JZm9yKGNvdW50ID0gMDsgY291bnQgPCBpcF9saXN0X3RvdDsgY291bnQrKykgewotCQlpZighY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmFkZHIpIGNvbnRpbnVlOwotCQlsYXN0X2xlbiA9IGxlbjsKLQkJbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwic3JjPSV1LiV1LiV1LiV1ICIsTklQUVVBRChjdXJyX3RhYmxlLT50YWJsZVtjb3VudF0uYWRkcikpOwotCQlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCJ0dGw6ICV1ICIsY3Vycl90YWJsZS0+dGFibGVbY291bnRdLnR0bCk7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sImxhc3Rfc2VlbjogJWx1ICIsY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmxhc3Rfc2Vlbik7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sIm9sZGVzdF9wa3Q6ICV1ICIsY3Vycl90YWJsZS0+dGFibGVbY291bnRdLm9sZGVzdF9wa3QpOwotCQlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCJsYXN0X3BrdHM6ICVsdSIsY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmxhc3RfcGt0c1swXSk7Ci0JCWZvcihwa3RfY291bnQgPSAxOyBwa3RfY291bnQgPCBpcF9wa3RfbGlzdF90b3Q7IHBrdF9jb3VudCsrKSB7Ci0JCQlpZighY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmxhc3RfcGt0c1twa3RfY291bnRdKSBicmVhazsKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sIiwgJWx1IixjdXJyX3RhYmxlLT50YWJsZVtjb3VudF0ubGFzdF9wa3RzW3BrdF9jb3VudF0pOwotCQl9Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sIlxuIik7Ci0JCXBvcyA9IGJlZ2luICsgbGVuOwotCQlpZihwb3MgPCBvZmZzZXQpIHsgbGVuID0gMDsgYmVnaW4gPSBwb3M7IH0KLQkJaWYocG9zID4gb2Zmc2V0ICsgbGVuZ3RoKSB7IGxlbiA9IGxhc3RfbGVuOyBicmVhazsgfQotCX0KLQotCSpzdGFydCA9IGJ1ZmZlciArIChvZmZzZXQgLSBiZWdpbik7Ci0JbGVuIC09IChvZmZzZXQgLSBiZWdpbik7Ci0JaWYobGVuID4gbGVuZ3RoKSBsZW4gPSBsZW5ndGg7Ci0KLQlzcGluX3VubG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQlyZXR1cm4gbGVuOwotfQotCi0vKiBpcF9yZWNlbnRfY3RybCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHVzZXJzIHRvIG1vZGlmeSB0aGUgdGFibGUKLSAqIGRpcmVjdGx5LiAgVGhpcyBhbGxvd3MgYWRkaW5nIGVudHJpZXMsIHJlbW92aW5nIGVudHJpZXMsIGFuZAotICogZmx1c2hpbmcgdGhlIGVudGlyZSB0YWJsZS4KLSAqIFRoaXMgaXMgZG9uZSBieSBvcGVuaW5nIHVwIHRoZSBhcHByb3ByaWF0ZSB0YWJsZSBmb3Igd3JpdGluZyBhbmQKLSAqIHNlbmRpbmcgb25lIG9mOgotICogeHgueHgueHgueHggICAtLSBBZGQgZW50cnkgdG8gdGFibGUgd2l0aCBjdXJyZW50IHRpbWUKLSAqICt4eC54eC54eC54eCAgLS0gQWRkIGVudHJ5IHRvIHRhYmxlIHdpdGggY3VycmVudCB0aW1lCi0gKiAteHgueHgueHgueHggIC0tIFJlbW92ZSBlbnRyeSBmcm9tIHRhYmxlCi0gKiBjbGVhciAgICAgICAgIC0tIEZsdXNoIHRhYmxlLCByZW1vdmUgYWxsIGVudHJpZXMKLSAqLwotCi1zdGF0aWMgaW50IGlwX3JlY2VudF9jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqaW5wdXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqZGF0YSkKLXsKLQlzdGF0aWMgY29uc3QgdV9pbnQzMl90IG1heFs0XSA9IHsgMHhmZmZmZmZmZiwgMHhmZmZmZmYsIDB4ZmZmZiwgMHhmZiB9OwotCXVfaW50MzJfdCB2YWw7Ci0JaW50IGJhc2UsIHVzZWQgPSAwOwotCWNoYXIgYywgKmNwOwotCXVuaW9uIGlhZGRyIHsKLQkJdWludDhfdCBieXRlc1s0XTsKLQkJdWludDMyX3Qgd29yZDsKLQl9IHJlczsKLQl1aW50OF90ICpwcCA9IHJlcy5ieXRlczsKLQlpbnQgZGlnaXQ7Ci0KLQljaGFyIGJ1ZmZlclsyMF07Ci0JaW50IGxlbiwgY2hlY2tfc2V0ID0gMCwgY291bnQ7Ci0JdV9pbnQzMl90IGFkZHIgPSAwOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGlwdF9yZWNlbnRfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcyAqY3Vycl90YWJsZTsKLQotCWN1cnJfdGFibGUgPSAoc3RydWN0IHJlY2VudF9pcF90YWJsZXMqKSBkYXRhOwotCi0JaWYoc2l6ZSA+IDIwKSBsZW4gPSAyMDsgZWxzZSBsZW4gPSBzaXplOwotCi0JaWYoY29weV9mcm9tX3VzZXIoYnVmZmVyLGlucHV0LGxlbikpIHJldHVybiAtRUZBVUxUOwotCi0JaWYobGVuIDwgMjApIGJ1ZmZlcltsZW5dID0gJ1wwJzsKLQotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogaXBfcmVjZW50X2N0cmwgbGVuOiAlZCwgaW5wdXQ6IGAlLjIwcydcbiIsbGVuLGJ1ZmZlcik7Ci0jZW5kaWYKLQotCWNwID0gYnVmZmVyOwotCXdoaWxlKGlzc3BhY2UoKmNwKSkgeyBjcCsrOyB1c2VkKys7IGlmKHVzZWQgPj0gbGVuLTUpIHJldHVybiB1c2VkOyB9Ci0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgYXNrZWQgdG8gZmx1c2ggdGhlIGVudGlyZSB0YWJsZSAqLwotCWlmKCFtZW1jbXAoY3AsImNsZWFyIiw1KSkgewotCQl1c2VkICs9IDU7Ci0JCXNwaW5fbG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQkJY3Vycl90YWJsZS0+dGltZV9wb3MgPSAwOwotCQlmb3IoY291bnQgPSAwOyBjb3VudCA8IGlwX2xpc3RfaGFzaF9zaXplOyBjb3VudCsrKSB7Ci0JCQljdXJyX3RhYmxlLT5oYXNoX3RhYmxlW2NvdW50XSA9IC0xOwotCQl9Ci0JCWZvcihjb3VudCA9IDA7IGNvdW50IDwgaXBfbGlzdF90b3Q7IGNvdW50KyspIHsKLQkJCWN1cnJfdGFibGUtPnRhYmxlW2NvdW50XS5sYXN0X3NlZW4gPSAwOwotCQkJY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmFkZHIgPSAwOwotCQkJY3Vycl90YWJsZS0+dGFibGVbY291bnRdLnR0bCA9IDA7Ci0JCQltZW1zZXQoY3Vycl90YWJsZS0+dGFibGVbY291bnRdLmxhc3RfcGt0cywwLGlwX3BrdF9saXN0X3RvdCpzaXplb2YodW5zaWduZWQgbG9uZykpOwotCQkJY3Vycl90YWJsZS0+dGFibGVbY291bnRdLm9sZGVzdF9wa3QgPSAwOwotCQkJY3Vycl90YWJsZS0+dGFibGVbY291bnRdLnRpbWVfcG9zID0gMDsKLQkJCWN1cnJfdGFibGUtPnRpbWVfaW5mb1tjb3VudF0ucG9zaXRpb24gPSBjb3VudDsKLQkJCWN1cnJfdGFibGUtPnRpbWVfaW5mb1tjb3VudF0udGltZSA9IDA7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmN1cnJfdGFibGUtPmxpc3RfbG9jayk7Ci0JCXJldHVybiB1c2VkOwotCX0KLQotICAgICAgICBjaGVja19zZXQgPSBJUFRfUkVDRU5UX1NFVDsKLQlzd2l0Y2goKmNwKSB7Ci0JCWNhc2UgJysnOiBjaGVja19zZXQgPSBJUFRfUkVDRU5UX1NFVDsgY3ArKzsgdXNlZCsrOyBicmVhazsKLQkJY2FzZSAnLSc6IGNoZWNrX3NldCA9IElQVF9SRUNFTlRfUkVNT1ZFOyBjcCsrOyB1c2VkKys7IGJyZWFrOwotCQlkZWZhdWx0OiBpZighaXNkaWdpdCgqY3ApKSByZXR1cm4gKHVzZWQrMSk7IGJyZWFrOwotCX0KLQotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogaXBfcmVjZW50X2N0cmwgY3A6IGAlYycsIGNoZWNrX3NldDogJWRcbiIsKmNwLGNoZWNrX3NldCk7Ci0jZW5kaWYKLQkvKiBHZXQgYWRkciAoZWZmZWN0aXZlbHkgaW5ldF9hdG9uKCkpICovCi0JLyogU2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gbGliYywgYSBmdW5jdGlvbiBpbiB0aGUga2VybmVsIGZvciBkb2luZwotCSAqIHRoaXMgd291bGQsIG9mIGNvdXJzZSwgYmUgZ3JlYXRseSBwcmVmZXJyZWQsIGJ1dCBvdXIgb3B0aW9ucyBhcHBlYXIKLQkgKiB0byBiZSByYXRoZXIgbGltaXRlZCwgc28gd2Ugd2lsbCBqdXN0IGRvIGl0IG91cnNlbHZlcyBoZXJlLgotCSAqLwotCXJlcy53b3JkID0gMDsKLQotCWMgPSAqY3A7Ci0JZm9yKDs7KSB7Ci0JCWlmKCFpc2RpZ2l0KGMpKSByZXR1cm4gdXNlZDsKLQkJdmFsID0gMDsgYmFzZSA9IDEwOyBkaWdpdCA9IDA7Ci0JCWlmKGMgPT0gJzAnKSB7Ci0JCQljID0gKisrY3A7Ci0JCQlpZihjID09ICd4JyB8fCBjID09ICdYJykgYmFzZSA9IDE2LCBjID0gKisrY3A7Ci0JCQllbHNlIHsgYmFzZSA9IDg7IGRpZ2l0ID0gMTsgfQotCQl9Ci0JCWZvcig7OykgewotCQkJaWYoaXNhc2NpaShjKSAmJiBpc2RpZ2l0KGMpKSB7Ci0JCQkJaWYoYmFzZSA9PSA4ICYmIChjID09ICc4JyB8fCBjID09ICcwJykpIHJldHVybiB1c2VkOwotCQkJCXZhbCA9ICh2YWwgKiBiYXNlKSArIChjIC0gJzAnKTsKLQkJCQljID0gKisrY3A7Ci0JCQkJZGlnaXQgPSAxOwotCQkJfSBlbHNlIGlmKGJhc2UgPT0gMTYgJiYgaXNhc2NpaShjKSAmJiBpc3hkaWdpdChjKSkgewotCQkJCXZhbCA9ICh2YWwgPDwgNCkgfCAoYyArIDEwIC0gKGlzbG93ZXIoYykgPyAnYScgOiAnQScpKTsKLQkJCQljID0gKisrY3A7Ci0JCQkJZGlnaXQgPSAxOwotCQkJfSBlbHNlIGJyZWFrOwotCQl9Ci0JCWlmKGMgPT0gJy4nKSB7Ci0JCQlpZihwcCA+IHJlcy5ieXRlcyArIDIgfHwgdmFsID4gMHhmZikgcmV0dXJuIHVzZWQ7Ci0JCQkqcHArKyA9IHZhbDsKLQkJCWMgPSAqKytjcDsKLQkJfSBlbHNlIGJyZWFrOwotCX0KLQl1c2VkID0gY3AgLSBidWZmZXI7Ci0JaWYoYyAhPSAnXDAnICYmICghaXNhc2NpaShjKSB8fCAhaXNzcGFjZShjKSkpIHJldHVybiB1c2VkOwotCWlmKGMgPT0gJ1xuJykgdXNlZCsrOwotCWlmKCFkaWdpdCkgcmV0dXJuIHVzZWQ7Ci0KLQlpZih2YWwgPiBtYXhbcHAgLSByZXMuYnl0ZXNdKSByZXR1cm4gdXNlZDsKLQlhZGRyID0gcmVzLndvcmQgfCBodG9ubCh2YWwpOwotCi0JaWYoIWFkZHIgJiYgY2hlY2tfc2V0ID09IElQVF9SRUNFTlRfU0VUKSByZXR1cm4gdXNlZDsKLQotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogaXBfcmVjZW50X2N0cmwgYzogJWMsIGFkZHI6ICV1IHVzZWQ6ICVkXG4iLGMsYWRkcix1c2VkKTsKLSNlbmRpZgotCi0JLyogU2V0IHVwIGFuZCBqdXN0IGNhbGwgbWF0Y2ggKi8KLQlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwdF9yZWNlbnRfaW5mbyksR0ZQX0tFUk5FTCk7Ci0JaWYoIWluZm8pIHsgcmV0dXJuIC1FTk9NRU07IH0KLQlpbmZvLT5zZWNvbmRzID0gMDsKLQlpbmZvLT5oaXRfY291bnQgPSAwOwotCWluZm8tPmNoZWNrX3NldCA9IGNoZWNrX3NldDsKLQlpbmZvLT5pbnZlcnQgPSAwOwotCWluZm8tPnNpZGUgPSBJUFRfUkVDRU5UX1NPVVJDRTsKLQlzdHJuY3B5KGluZm8tPm5hbWUsY3Vycl90YWJsZS0+bmFtZSxJUFRfUkVDRU5UX05BTUVfTEVOKTsKLQlpbmZvLT5uYW1lW0lQVF9SRUNFTlRfTkFNRV9MRU4tMV0gPSAnXDAnOwotCi0Jc2tiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYpLEdGUF9LRVJORUwpOwotCWlmICghc2tiKSB7Ci0JCXVzZWQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2luZm87Ci0JfQotCXNrYi0+bmguaXBoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwaGRyKSxHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYi0+bmguaXBoKSB7Ci0JCXVzZWQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3NrYjsKLQl9Ci0KLQlza2ItPm5oLmlwaC0+c2FkZHIgPSBhZGRyOwotCXNrYi0+bmguaXBoLT5kYWRkciA9IDA7Ci0JLyogQ2xlYXIgdHRsIHNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaXQgKi8KLQlza2ItPm5oLmlwaC0+dHRsID0gMDsKLQltYXRjaChza2IsTlVMTCxOVUxMLE5VTEwsaW5mbywwLDAsTlVMTCk7Ci0KLQlrZnJlZShza2ItPm5oLmlwaCk7Ci1vdXRfZnJlZV9za2I6Ci0Ja2ZyZWUoc2tiKTsKLW91dF9mcmVlX2luZm86Ci0Ja2ZyZWUoaW5mbyk7Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IExlYXZpbmcgaXBfcmVjZW50X2N0cmwgYWRkcjogJXUgdXNlZDogJWRcbiIsYWRkcix1c2VkKTsKLSNlbmRpZgotCXJldHVybiB1c2VkOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLQotLyogJ21hdGNoJyBpcyBvdXIgcHJpbWFyeSBmdW5jdGlvbiwgY2FsbGVkIGJ5IHRoZSBrZXJuZWwgd2hlbmV2ZXIgYSBydWxlIGlzCi0gKiBoaXQgd2l0aCBvdXIgbW9kdWxlIGFzIGFuIG9wdGlvbiB0byBpdC4KLSAqIFdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGRlcGVuZHMgb24gd2hhdCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIG9mIGl0IGJ5Ci0gKiB0aGUgdXNlcjoKLSAqIC0tc2V0IC0tIEFkZCBvciB1cGRhdGUgbGFzdCBzZWVuIHRpbWUgb2YgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBwYWNrZXQKLSAqICAgLS0gbWF0Y2hpbmZvLT5jaGVja19zZXQgPT0gSVBUX1JFQ0VOVF9TRVQKLSAqIC0tcmNoZWNrIC0tIEp1c3QgY2hlY2sgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIGluIHRoZSBsaXN0Ci0gKiAgIC0tIG1hdGNoaW5mby0+Y2hlY2tfc2V0ID09IElQVF9SRUNFTlRfQ0hFQ0sKLSAqIC0tdXBkYXRlIC0tIElmIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyBpbiB0aGUgbGlzdCwgdXBkYXRlIGxhc3Rfc2VlbgotICogICAtLSBtYXRjaGluZm8tPmNoZWNrX3NldCA9PSBJUFRfUkVDRU5UX1VQREFURQotICogLS1yZW1vdmUgLS0gSWYgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIGluIHRoZSBsaXN0LCByZW1vdmUgaXQKLSAqICAgLS0gbWF0Y2hpbmZvLT5jaGVja19zZXQgPT0gSVBUX1JFQ0VOVF9SRU1PVkUKLSAqIC0tc2Vjb25kcyAtLSBPcHRpb24gdG8gLS1yY2hlY2svLS11cGRhdGUsIG9ubHkgbWF0Y2ggaWYgbGFzdF9zZWVuIHdpdGhpbiBzZWNvbmRzCi0gKiAgIC0tIG1hdGNoaW5mby0+c2Vjb25kcwotICogLS1oaXRjb3VudCAtLSBPcHRpb24gdG8gLS1yY2hlY2svLS11cGRhdGUsIG9ubHkgbWF0Y2ggaWYgc2VlbiBoaXRjb3VudCB0aW1lcwotICogICAtLSBtYXRjaGluZm8tPmhpdF9jb3VudAotICogLS1zZWNvbmRzIGFuZCAtLWhpdGNvdW50IGNhbiBiZSBjb21iaW5lZAotICovCi1zdGF0aWMgaW50Ci1tYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLSAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCi0gICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCi0gICAgICBpbnQgb2Zmc2V0LAotICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCi0gICAgICBpbnQgKmhvdGRyb3ApCi17Ci0JaW50IHBrdF9jb3VudCwgaGl0c19mb3VuZCwgYW5zOwotCXVuc2lnbmVkIGxvbmcgbm93OwogCWNvbnN0IHN0cnVjdCBpcHRfcmVjZW50X2luZm8gKmluZm8gPSBtYXRjaGluZm87Ci0JdV9pbnQzMl90IGFkZHIgPSAwLCB0aW1lX3RlbXA7Ci0JdV9pbnQ4X3QgdHRsID0gc2tiLT5uaC5pcGgtPnR0bDsKLQlpbnQgKmhhc2hfdGFibGU7Ci0JaW50IG9yaWdfaGFzaF9yZXN1bHQsIGhhc2hfcmVzdWx0LCB0ZW1wLCBsb2NhdGlvbiA9IDAsIHRpbWVfbG9jLCBlbmRfY29sbGlzaW9uX2NoYWluID0gLTE7Ci0Jc3RydWN0IHRpbWVfaW5mb19saXN0ICp0aW1lX2luZm87Ci0Jc3RydWN0IHJlY2VudF9pcF90YWJsZXMgKmN1cnJfdGFibGU7Ci0Jc3RydWN0IHJlY2VudF9pcF90YWJsZXMgKmxhc3RfdGFibGU7Ci0Jc3RydWN0IHJlY2VudF9pcF9saXN0ICpyX2xpc3Q7CisJc3RydWN0IHJlY2VudF90YWJsZSAqdDsKKwlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplOworCXVfaW50MzJfdCBhZGRyOworCXVfaW50OF90IHR0bDsKKwlpbnQgcmV0ID0gaW5mby0+aW52ZXJ0OwogCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpIGNhbGxlZFxuIik7Ci0jZW5kaWYKKwlpZiAoaW5mby0+c2lkZSA9PSBJUFRfUkVDRU5UX0RFU1QpCisJCWFkZHIgPSBza2ItPm5oLmlwaC0+ZGFkZHI7CisJZWxzZQorCQlhZGRyID0gc2tiLT5uaC5pcGgtPnNhZGRyOwogCi0JLyogRGVmYXVsdCBpcyBmYWxzZSBeIGluZm8tPmludmVydCAqLwotCWFucyA9IGluZm8tPmludmVydDsKKwl0dGwgPSBza2ItPm5oLmlwaC0+dHRsOworCS8qIHVzZSBUVEwgYXMgc2VlbiBiZWZvcmUgZm9yd2FyZGluZyAqLworCWlmIChvdXQgJiYgIXNrYi0+c2spCisJCXR0bCsrOwogCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBuYW1lID0gJyVzJ1xuIixpbmZvLT5uYW1lKTsKLSNlbmRpZgotCi0JLyogaWYgb3V0ICE9IE5VTEwgdGhlbiByb3V0aW5nIGhhcyBiZWVuIGRvbmUgYW5kIFRUTCBjaGFuZ2VkLgotCSAqIFdlIGNoYW5nZSBpdCBiYWNrIGhlcmUgaW50ZXJuYWxseSBmb3IgbWF0Y2ggd2hhdCBjYW1lIGluIGJlZm9yZSByb3V0aW5nLiAqLwotCWlmKG91dCkgdHRsKys7Ci0KLQkvKiBGaW5kIHRoZSByaWdodCB0YWJsZSAqLwogCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOwotCWN1cnJfdGFibGUgPSByX3RhYmxlczsKLQl3aGlsZSggKGxhc3RfdGFibGUgPSBjdXJyX3RhYmxlKSAmJiBzdHJuY21wKGluZm8tPm5hbWUsY3Vycl90YWJsZS0+bmFtZSxJUFRfUkVDRU5UX05BTUVfTEVOKSAmJiAoY3Vycl90YWJsZSA9IGN1cnJfdGFibGUtPm5leHQpICk7CisJdCA9IHJlY2VudF90YWJsZV9sb29rdXAoaW5mby0+bmFtZSk7CisJZSA9IHJlY2VudF9lbnRyeV9sb29rdXAodCwgYWRkciwKKwkJCQlpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1RUTCA/IHR0bCA6IDApOworCWlmIChlID09IE5VTEwpIHsKKwkJaWYgKCEoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9TRVQpKQorCQkJZ290byBvdXQ7CisJCWUgPSByZWNlbnRfZW50cnlfaW5pdCh0LCBhZGRyLCB0dGwpOworCQlpZiAoZSA9PSBOVUxMKQorCQkJKmhvdGRyb3AgPSAxOworCQlyZXQgXj0gMTsKKwkJZ290byBvdXQ7CisJfQogCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiB0YWJsZSBmb3VuZCgnJXMnKVxuIixpbmZvLT5uYW1lKTsKLSNlbmRpZgorCWlmIChpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1NFVCkKKwkJcmV0IF49IDE7CisJZWxzZSBpZiAoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9SRU1PVkUpIHsKKwkJcmVjZW50X2VudHJ5X3JlbW92ZSh0LCBlKTsKKwkJcmV0IF49IDE7CisJfSBlbHNlIGlmIChpbmZvLT5jaGVja19zZXQgJiAoSVBUX1JFQ0VOVF9DSEVDSyB8IElQVF9SRUNFTlRfVVBEQVRFKSkgeworCQl1bnNpZ25lZCBsb25nIHQgPSBqaWZmaWVzIC0gaW5mby0+c2Vjb25kcyAqIEhaOworCQl1bnNpZ25lZCBpbnQgaSwgaGl0cyA9IDA7CiAKKwkJZm9yIChpID0gMDsgaSA8IGUtPm5zdGFtcHM7IGkrKykgeworCQkJaWYgKGluZm8tPnNlY29uZHMgJiYgdGltZV9hZnRlcih0LCBlLT5zdGFtcHNbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCsraGl0cyA+PSBpbmZvLT5oaXRfY291bnQpIHsKKwkJCQlyZXQgXj0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1NFVCB8fAorCSAgICAoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9VUERBVEUgJiYgcmV0KSkgeworCQlyZWNlbnRfZW50cnlfdXBkYXRlKHQsIGUpOworCQllLT50dGwgPSB0dGw7CisJfQorb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0KLQkvKiBUYWJsZSB3aXRoIHRoaXMgbmFtZSBub3QgZm91bmQsIG1hdGNoIGltcG9zc2libGUgKi8KLQlpZighY3Vycl90YWJsZSkgeyByZXR1cm4gYW5zOyB9Ci0KLQkvKiBNYWtlIHN1cmUgbm8gb25lIGlzIGNoYW5naW5nIHRoZSBsaXN0IHdoaWxlIHdlIHdvcmsgd2l0aCBpdCAqLwotCXNwaW5fbG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQotCXJfbGlzdCA9IGN1cnJfdGFibGUtPnRhYmxlOwotCWlmKGluZm8tPnNpZGUgPT0gSVBUX1JFQ0VOVF9ERVNUKSBhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOyBlbHNlIGFkZHIgPSBza2ItPm5oLmlwaC0+c2FkZHI7Ci0KLQlpZighYWRkcikgeyAKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpIGFkZHJlc3MgKCV1KSBpbnZhbGlkLCBsZWF2aW5nLlxuIixhZGRyKTsKLSNlbmRpZgotCQlzcGluX3VubG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQkJcmV0dXJuIGFuczsKLQl9Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IGNoZWNraW5nIHRhYmxlLCBhZGRyOiAldSwgdHRsOiAldSwgb3JpZ190dGw6ICV1XG4iLGFkZHIsdHRsLHNrYi0+bmguaXBoLT50dGwpOwotI2VuZGlmCi0KLQkvKiBHZXQgamlmZmllcyBub3cgaW4gY2FzZSB0aGV5IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIGZvciBhIGxvY2sgKi8KLQlub3cgPSBqaWZmaWVzOwotCWhhc2hfdGFibGUgPSBjdXJyX3RhYmxlLT5oYXNoX3RhYmxlOwotCXRpbWVfaW5mbyA9IGN1cnJfdGFibGUtPnRpbWVfaW5mbzsKLQotCW9yaWdfaGFzaF9yZXN1bHQgPSBoYXNoX3Jlc3VsdCA9IGhhc2hfZnVuYyhhZGRyLGlwX2xpc3RfaGFzaF9zaXplKTsKLQkvKiBIYXNoIGVudHJ5IGF0IHRoaXMgcmVzdWx0IHVzZWQgKi8KLQkvKiBDaGVjayBmb3IgVFRMIG1hdGNoIGlmIHJlcXVlc3RlZC4gIElmIFRUTCBpcyB6ZXJvIHRoZW4gYSBtYXRjaCB3b3VsZCBuZXZlcgotCSAqIGhhcHBlbiwgc28gbWF0Y2ggcmVnYXJkbGVzcyBvZiBleGlzdGluZyBUVEwgaW4gdGhhdCBjYXNlLiAgWmVybyBtZWFucyB0aGUKLQkgKiBlbnRyeSB3YXMgYWRkZWQgdmlhIHRoZSAvcHJvYyBpbnRlcmZhY2UgYW55d2F5LCBzbyB3ZSB3aWxsIGp1c3QgdXNlIHRoZQotCSAqIGZpcnN0IFRUTCB3ZSBnZXQgZm9yIHRoYXQgSVAgYWRkcmVzcy4gKi8KLQlpZihpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1RUTCkgewotCQl3aGlsZShoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XSAhPSAtMSAmJiAhKHJfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0uYWRkciA9PSBhZGRyICYmCi0JCQkoIXJfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0udHRsIHx8IHJfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0udHRsID09IHR0bCkpKSB7Ci0JCQkvKiBDb2xsaXNpb24gaW4gaGFzaCB0YWJsZSAqLwotCQkJaGFzaF9yZXN1bHQgPSAoaGFzaF9yZXN1bHQgKyAxKSAlIGlwX2xpc3RfaGFzaF9zaXplOwotCQl9Ci0JfSBlbHNlIHsKLQkJd2hpbGUoaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0gIT0gLTEgJiYgcl9saXN0W2hhc2hfdGFibGVbaGFzaF9yZXN1bHRdXS5hZGRyICE9IGFkZHIpIHsKLQkJCS8qIENvbGxpc2lvbiBpbiBoYXNoIHRhYmxlICovCi0JCQloYXNoX3Jlc3VsdCA9IChoYXNoX3Jlc3VsdCArIDEpICUgaXBfbGlzdF9oYXNoX3NpemU7Ci0JCX0KLQl9Ci0KLQlpZihoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XSA9PSAtMSAmJiAhKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfU0VUKSkgewotCQkvKiBJUCBub3QgaW4gbGlzdCBhbmQgbm90IGFza2VkIHRvIFNFVCAqLwotCQlzcGluX3VubG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQkJcmV0dXJuIGFuczsKLQl9Ci0KLQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY29sbGlzaW9uLCBkbyBub3QgbmVlZCB0byBvbiBSRU1PVkUgKi8KLQlpZihvcmlnX2hhc2hfcmVzdWx0ICE9IGhhc2hfcmVzdWx0ICYmICEoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9SRU1PVkUpKSB7Ci0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogQ29sbGlzaW9uIGluIGhhc2ggdGFibGUuIChvcjogJWQsaHI6ICVkLG9hOiAldSxoYTogJXUpXG4iLAotCQkJCSBvcmlnX2hhc2hfcmVzdWx0LAotCQkJCSBoYXNoX3Jlc3VsdCwKLQkJCQkgcl9saXN0W2hhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF1dLmFkZHIsCi0JCQkJIGFkZHIpOwotI2VuZGlmCi0KLQkJLyogV2UgaGFkIGEgY29sbGlzaW9uLgotCQkgKiBvcmlnX2hhc2hfcmVzdWx0IGlzIHdoZXJlIHdlIHN0YXJ0ZWQsIGhhc2hfcmVzdWx0IGlzIHdoZXJlIHdlIGVuZGVkIHVwLgotCQkgKiBTbywgc3dhcCB0aGVtIGJlY2F1c2Ugd2UgYXJlIGxpa2VseSB0byBzZWUgdGhlIHNhbWUgZ3V5IGFnYWluIHNvb25lciAqLwotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSB7Ci0JCSAgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBDb2xsaXNpb247IGhhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF0gPSAlZFxuIixoYXNoX3RhYmxlW29yaWdfaGFzaF9yZXN1bHRdKTsKLQkJICBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IENvbGxpc2lvbjsgcl9saXN0W2hhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF1dLmhhc2hfZW50cnkgPSAlZFxuIiwKLQkJCQlyX2xpc3RbaGFzaF90YWJsZVtvcmlnX2hhc2hfcmVzdWx0XV0uaGFzaF9lbnRyeSk7Ci0JCX0KLSNlbmRpZgotCi0JCXJfbGlzdFtoYXNoX3RhYmxlW29yaWdfaGFzaF9yZXN1bHRdXS5oYXNoX2VudHJ5ID0gaGFzaF9yZXN1bHQ7Ci0KLQotCQl0ZW1wID0gaGFzaF90YWJsZVtvcmlnX2hhc2hfcmVzdWx0XTsKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBDb2xsaXNpb247IGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdID0gJWRcbiIsaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0pOwotI2VuZGlmCi0JCWhhc2hfdGFibGVbb3JpZ19oYXNoX3Jlc3VsdF0gPSBoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XTsKLQkJaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0gPSB0ZW1wOwotCQl0ZW1wID0gaGFzaF9yZXN1bHQ7Ci0JCWhhc2hfcmVzdWx0ID0gb3JpZ19oYXNoX3Jlc3VsdDsKLQkJb3JpZ19oYXNoX3Jlc3VsdCA9IHRlbXA7Ci0JCXRpbWVfaW5mb1tyX2xpc3RbaGFzaF90YWJsZVtvcmlnX2hhc2hfcmVzdWx0XV0udGltZV9wb3NdLnBvc2l0aW9uID0gaGFzaF90YWJsZVtvcmlnX2hhc2hfcmVzdWx0XTsKLQkJaWYoaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF0gIT0gLTEpIHsKLQkJCXJfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0uaGFzaF9lbnRyeSA9IGhhc2hfcmVzdWx0OwotCQkJdGltZV9pbmZvW3JfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0udGltZV9wb3NdLnBvc2l0aW9uID0gaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF07Ci0JCX0KLQotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IENvbGxpc2lvbiBoYW5kbGVkLlxuIik7Ci0jZW5kaWYKLQl9Ci0KLQlpZihoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XSA9PSAtMSkgewotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IE5ldyB0YWJsZSBlbnRyeS4gKGhyOiAlZCxoYTogJXUpXG4iLAotCQkJCSBoYXNoX3Jlc3VsdCwgYWRkcik7Ci0jZW5kaWYKLQotCQkvKiBOZXcgaXRlbSBmb3VuZCBhbmQgSVBUX1JFQ0VOVF9TRVQsIHNvIHdlIG5lZWQgdG8gYWRkIGl0ICovCi0JCWxvY2F0aW9uID0gdGltZV9pbmZvW2N1cnJfdGFibGUtPnRpbWVfcG9zXS5wb3NpdGlvbjsKLQkJaGFzaF90YWJsZVtyX2xpc3RbbG9jYXRpb25dLmhhc2hfZW50cnldID0gLTE7Ci0JCWhhc2hfdGFibGVbaGFzaF9yZXN1bHRdID0gbG9jYXRpb247Ci0JCW1lbXNldChyX2xpc3RbbG9jYXRpb25dLmxhc3RfcGt0cywwLGlwX3BrdF9saXN0X3RvdCpzaXplb2YodW5zaWduZWQgbG9uZykpOwotCQlyX2xpc3RbbG9jYXRpb25dLnRpbWVfcG9zID0gY3Vycl90YWJsZS0+dGltZV9wb3M7Ci0JCXJfbGlzdFtsb2NhdGlvbl0uYWRkciA9IGFkZHI7Ci0JCXJfbGlzdFtsb2NhdGlvbl0udHRsID0gdHRsOwotCQlyX2xpc3RbbG9jYXRpb25dLmxhc3Rfc2VlbiA9IG5vdzsKLQkJcl9saXN0W2xvY2F0aW9uXS5vbGRlc3RfcGt0ID0gMTsKLQkJcl9saXN0W2xvY2F0aW9uXS5sYXN0X3BrdHNbMF0gPSBub3c7Ci0JCXJfbGlzdFtsb2NhdGlvbl0uaGFzaF9lbnRyeSA9IGhhc2hfcmVzdWx0OwotCQl0aW1lX2luZm9bY3Vycl90YWJsZS0+dGltZV9wb3NdLnRpbWUgPSByX2xpc3RbbG9jYXRpb25dLmxhc3Rfc2VlbjsKLQkJY3Vycl90YWJsZS0+dGltZV9wb3MgPSAoY3Vycl90YWJsZS0+dGltZV9wb3MgKyAxKSAlIGlwX2xpc3RfdG90OwotCi0JCWFucyA9ICFpbmZvLT5pbnZlcnQ7Ci0JfSBlbHNlIHsKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBFeGlzdGluZyB0YWJsZSBlbnRyeS4gKGhyOiAlZCxoYTogJXUpXG4iLAotCQkJCSBoYXNoX3Jlc3VsdCwKLQkJCQkgYWRkcik7Ci0jZW5kaWYKLQotCQkvKiBFeGlzdGluZyBpdGVtIGZvdW5kICovCi0JCWxvY2F0aW9uID0gaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF07Ci0JCS8qIFdlIGhhdmUgYSBtYXRjaCBvbiBhZGRyZXNzLCBub3cgdG8gbWFrZSBzdXJlIGl0IG1lZXRzIGFsbCByZXF1aXJlbWVudHMgZm9yIGEKLQkJICogZnVsbCBtYXRjaC4gKi8KLQkJaWYoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9DSEVDSyB8fCBpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1VQREFURSkgewotCQkJaWYoIWluZm8tPnNlY29uZHMgJiYgIWluZm8tPmhpdF9jb3VudCkgYW5zID0gIWluZm8tPmludmVydDsgZWxzZSBhbnMgPSBpbmZvLT5pbnZlcnQ7Ci0JCQlpZihpbmZvLT5zZWNvbmRzICYmICFpbmZvLT5oaXRfY291bnQpIHsKLQkJCQlpZih0aW1lX2JlZm9yZV9lcShub3cscl9saXN0W2xvY2F0aW9uXS5sYXN0X3NlZW4raW5mby0+c2Vjb25kcypIWikpIGFucyA9ICFpbmZvLT5pbnZlcnQ7IGVsc2UgYW5zID0gaW5mby0+aW52ZXJ0OwotCQkJfQotCQkJaWYoaW5mby0+c2Vjb25kcyAmJiBpbmZvLT5oaXRfY291bnQpIHsKLQkJCQlmb3IocGt0X2NvdW50ID0gMCwgaGl0c19mb3VuZCA9IDA7IHBrdF9jb3VudCA8IGlwX3BrdF9saXN0X3RvdDsgcGt0X2NvdW50KyspIHsKLQkJCQkJaWYocl9saXN0W2xvY2F0aW9uXS5sYXN0X3BrdHNbcGt0X2NvdW50XSA9PSAwKSBicmVhazsKLQkJCQkJaWYodGltZV9iZWZvcmVfZXEobm93LHJfbGlzdFtsb2NhdGlvbl0ubGFzdF9wa3RzW3BrdF9jb3VudF0raW5mby0+c2Vjb25kcypIWikpIGhpdHNfZm91bmQrKzsKLQkJCQl9Ci0JCQkJaWYoaGl0c19mb3VuZCA+PSBpbmZvLT5oaXRfY291bnQpIGFucyA9ICFpbmZvLT5pbnZlcnQ7IGVsc2UgYW5zID0gaW5mby0+aW52ZXJ0OwotCQkJfQotCQkJaWYoaW5mby0+aGl0X2NvdW50ICYmICFpbmZvLT5zZWNvbmRzKSB7Ci0JCQkJZm9yKHBrdF9jb3VudCA9IDAsIGhpdHNfZm91bmQgPSAwOyBwa3RfY291bnQgPCBpcF9wa3RfbGlzdF90b3Q7IHBrdF9jb3VudCsrKSB7Ci0JCQkJCWlmKHJfbGlzdFtsb2NhdGlvbl0ubGFzdF9wa3RzW3BrdF9jb3VudF0gPT0gMCkgYnJlYWs7Ci0JCQkJCWhpdHNfZm91bmQrKzsKLQkJCQl9Ci0JCQkJaWYoaGl0c19mb3VuZCA+PSBpbmZvLT5oaXRfY291bnQpIGFucyA9ICFpbmZvLT5pbnZlcnQ7IGVsc2UgYW5zID0gaW5mby0+aW52ZXJ0OwotCQkJfQotCQl9Ci0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHsKLQkJCWlmKGFucykKLQkJCQlwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IG1hdGNoIGFkZHI6ICV1XG4iLGFkZHIpOwotCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogbm8gbWF0Y2ggYWRkcjogJXVcbiIsYWRkcik7Ci0JCX0KLSNlbmRpZgotCi0JCS8qIElmIGFuZCBvbmx5IGlmIHdlIGhhdmUgYmVlbiBhc2tlZCB0byBTRVQsIG9yIHRvIFVQREFURSAob24gbWF0Y2gpIGRvIHdlIGFkZCB0aGUKLQkJICogY3VycmVudCB0aW1lc3RhbXAgdG8gdGhlIGxhc3Rfc2Vlbi4gKi8KLQkJaWYoKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfU0VUICYmIChhbnMgPSAhaW5mby0+aW52ZXJ0KSkgfHwgKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfVVBEQVRFICYmIGFucykpIHsKLSNpZmRlZiBERUJVRwotCQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKTogU0VUIG9yIFVQREFURTsgdXBkYXRpbmcgdGltZSBpbmZvLlxuIik7Ci0jZW5kaWYKLQkJCS8qIEhhdmUgdG8gdXBkYXRlIG91ciB0aW1lIGluZm8gKi8KLQkJCXRpbWVfbG9jID0gcl9saXN0W2xvY2F0aW9uXS50aW1lX3BvczsKLQkJCXRpbWVfaW5mb1t0aW1lX2xvY10udGltZSA9IG5vdzsKLQkJCXRpbWVfaW5mb1t0aW1lX2xvY10ucG9zaXRpb24gPSBsb2NhdGlvbjsKLQkJCXdoaWxlKCh0aW1lX2luZm9bKHRpbWVfbG9jKzEpICUgaXBfbGlzdF90b3RdLnRpbWUgPCB0aW1lX2luZm9bdGltZV9sb2NdLnRpbWUpICYmICgodGltZV9sb2MrMSkgJSBpcF9saXN0X3RvdCkgIT0gY3Vycl90YWJsZS0+dGltZV9wb3MpIHsKLQkJCQl0aW1lX3RlbXAgPSB0aW1lX2luZm9bdGltZV9sb2NdLnRpbWU7Ci0JCQkJdGltZV9pbmZvW3RpbWVfbG9jXS50aW1lID0gdGltZV9pbmZvWyh0aW1lX2xvYysxKSVpcF9saXN0X3RvdF0udGltZTsKLQkJCQl0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS50aW1lID0gdGltZV90ZW1wOwotCQkJCXRpbWVfdGVtcCA9IHRpbWVfaW5mb1t0aW1lX2xvY10ucG9zaXRpb247Ci0JCQkJdGltZV9pbmZvW3RpbWVfbG9jXS5wb3NpdGlvbiA9IHRpbWVfaW5mb1sodGltZV9sb2MrMSklaXBfbGlzdF90b3RdLnBvc2l0aW9uOwotCQkJCXRpbWVfaW5mb1sodGltZV9sb2MrMSklaXBfbGlzdF90b3RdLnBvc2l0aW9uID0gdGltZV90ZW1wOwotCQkJCXJfbGlzdFt0aW1lX2luZm9bdGltZV9sb2NdLnBvc2l0aW9uXS50aW1lX3BvcyA9IHRpbWVfbG9jOwotCQkJCXJfbGlzdFt0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS5wb3NpdGlvbl0udGltZV9wb3MgPSAodGltZV9sb2MrMSklaXBfbGlzdF90b3Q7Ci0JCQkJdGltZV9sb2MgPSAodGltZV9sb2MrMSkgJSBpcF9saXN0X3RvdDsKLQkJCX0KLQkJCXJfbGlzdFtsb2NhdGlvbl0udGltZV9wb3MgPSB0aW1lX2xvYzsKLQkJCXJfbGlzdFtsb2NhdGlvbl0udHRsID0gdHRsOwotCQkJcl9saXN0W2xvY2F0aW9uXS5sYXN0X3BrdHNbcl9saXN0W2xvY2F0aW9uXS5vbGRlc3RfcGt0XSA9IG5vdzsKLQkJCXJfbGlzdFtsb2NhdGlvbl0ub2xkZXN0X3BrdCA9ICsrcl9saXN0W2xvY2F0aW9uXS5vbGRlc3RfcGt0ICUgaXBfcGt0X2xpc3RfdG90OwotCQkJcl9saXN0W2xvY2F0aW9uXS5sYXN0X3NlZW4gPSBub3c7Ci0JCX0KLQkJLyogSWYgd2UgaGF2ZSBiZWVuIGFza2VkIHRvIHJlbW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgbGlzdCwganVzdCBzZXQgaXQgdG8gMCAqLwotCQlpZihpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1JFTU9WRSkgewotI2lmZGVmIERFQlVHCi0JCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBSRU1PVkU7IGNsZWFyaW5nIGVudHJ5IChvcjogJWQsIGhyOiAlZCkuXG4iLG9yaWdfaGFzaF9yZXN1bHQsaGFzaF9yZXN1bHQpOwotI2VuZGlmCi0JCQkvKiBDaGVjayBpZiB0aGlzIGlzIHBhcnQgb2YgYSBjb2xsaXNpb24gY2hhaW4gKi8KLQkJCXdoaWxlKGhhc2hfdGFibGVbKG9yaWdfaGFzaF9yZXN1bHQrMSkgJSBpcF9saXN0X2hhc2hfc2l6ZV0gIT0gLTEpIHsKLQkJCQlvcmlnX2hhc2hfcmVzdWx0Kys7Ci0JCQkJaWYoaGFzaF9mdW5jKHJfbGlzdFtoYXNoX3RhYmxlW29yaWdfaGFzaF9yZXN1bHRdXS5hZGRyLGlwX2xpc3RfaGFzaF9zaXplKSA9PSBoYXNoX3Jlc3VsdCkgewotCQkJCQkvKiBGb3VuZCBjb2xsaXNpb24gY2hhaW4sIGhvdyBkZWVwIGRvZXMgdGhpcyByYWJiaXQgaG9sZSBnbz8gKi8KLSNpZmRlZiBERUJVRwotCQkJCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBtYXRjaCgpOiBSRU1PVkU7IGZvdW5kIGNvbGxpc2lvbiBjaGFpbi5cbiIpOwotI2VuZGlmCi0JCQkJCWVuZF9jb2xsaXNpb25fY2hhaW4gPSBvcmlnX2hhc2hfcmVzdWx0OwotCQkJCX0KLQkJCX0KLQkJCWlmKGVuZF9jb2xsaXNpb25fY2hhaW4gIT0gLTEpIHsKLSNpZmRlZiBERUJVRwotCQkJCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IG1hdGNoKCk6IFJFTU9WRTsgcGFydCBvZiBjb2xsaXNpb24gY2hhaW4sIG1vdmluZyB0byBlbmQuXG4iKTsKLSNlbmRpZgotCQkJCS8qIFBhcnQgb2YgYSBjb2xsaXNpb24gY2hhaW4sIHN3YXAgaXQgd2l0aCB0aGUgZW5kIG9mIHRoZSBjaGFpbgotCQkJCSAqIGJlZm9yZSByZW1vdmluZy4gKi8KLQkJCQlyX2xpc3RbaGFzaF90YWJsZVtlbmRfY29sbGlzaW9uX2NoYWluXV0uaGFzaF9lbnRyeSA9IGhhc2hfcmVzdWx0OwotCQkJCXRlbXAgPSBoYXNoX3RhYmxlW2VuZF9jb2xsaXNpb25fY2hhaW5dOwotCQkJCWhhc2hfdGFibGVbZW5kX2NvbGxpc2lvbl9jaGFpbl0gPSBoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XTsKLQkJCQloYXNoX3RhYmxlW2hhc2hfcmVzdWx0XSA9IHRlbXA7Ci0JCQkJdGltZV9pbmZvW3JfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0udGltZV9wb3NdLnBvc2l0aW9uID0gaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF07Ci0JCQkJaGFzaF9yZXN1bHQgPSBlbmRfY29sbGlzaW9uX2NoYWluOwotCQkJCXJfbGlzdFtoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XV0uaGFzaF9lbnRyeSA9IGhhc2hfcmVzdWx0OwotCQkJCXRpbWVfaW5mb1tyX2xpc3RbaGFzaF90YWJsZVtoYXNoX3Jlc3VsdF1dLnRpbWVfcG9zXS5wb3NpdGlvbiA9IGhhc2hfdGFibGVbaGFzaF9yZXN1bHRdOwotCQkJfQotCQkJbG9jYXRpb24gPSBoYXNoX3RhYmxlW2hhc2hfcmVzdWx0XTsKLQkJCWhhc2hfdGFibGVbcl9saXN0W2xvY2F0aW9uXS5oYXNoX2VudHJ5XSA9IC0xOwotCQkJdGltZV9sb2MgPSByX2xpc3RbbG9jYXRpb25dLnRpbWVfcG9zOwotCQkJdGltZV9pbmZvW3RpbWVfbG9jXS50aW1lID0gMDsKLQkJCXRpbWVfaW5mb1t0aW1lX2xvY10ucG9zaXRpb24gPSBsb2NhdGlvbjsKLQkJCXdoaWxlKCh0aW1lX2luZm9bKHRpbWVfbG9jKzEpICUgaXBfbGlzdF90b3RdLnRpbWUgPCB0aW1lX2luZm9bdGltZV9sb2NdLnRpbWUpICYmICgodGltZV9sb2MrMSkgJSBpcF9saXN0X3RvdCkgIT0gY3Vycl90YWJsZS0+dGltZV9wb3MpIHsKLQkJCQl0aW1lX3RlbXAgPSB0aW1lX2luZm9bdGltZV9sb2NdLnRpbWU7Ci0JCQkJdGltZV9pbmZvW3RpbWVfbG9jXS50aW1lID0gdGltZV9pbmZvWyh0aW1lX2xvYysxKSVpcF9saXN0X3RvdF0udGltZTsKLQkJCQl0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS50aW1lID0gdGltZV90ZW1wOwotCQkJCXRpbWVfdGVtcCA9IHRpbWVfaW5mb1t0aW1lX2xvY10ucG9zaXRpb247Ci0JCQkJdGltZV9pbmZvW3RpbWVfbG9jXS5wb3NpdGlvbiA9IHRpbWVfaW5mb1sodGltZV9sb2MrMSklaXBfbGlzdF90b3RdLnBvc2l0aW9uOwotCQkJCXRpbWVfaW5mb1sodGltZV9sb2MrMSklaXBfbGlzdF90b3RdLnBvc2l0aW9uID0gdGltZV90ZW1wOwotCQkJCXJfbGlzdFt0aW1lX2luZm9bdGltZV9sb2NdLnBvc2l0aW9uXS50aW1lX3BvcyA9IHRpbWVfbG9jOwotCQkJCXJfbGlzdFt0aW1lX2luZm9bKHRpbWVfbG9jKzEpJWlwX2xpc3RfdG90XS5wb3NpdGlvbl0udGltZV9wb3MgPSAodGltZV9sb2MrMSklaXBfbGlzdF90b3Q7Ci0JCQkJdGltZV9sb2MgPSAodGltZV9sb2MrMSkgJSBpcF9saXN0X3RvdDsKLQkJCX0KLQkJCXJfbGlzdFtsb2NhdGlvbl0udGltZV9wb3MgPSB0aW1lX2xvYzsKLQkJCXJfbGlzdFtsb2NhdGlvbl0ubGFzdF9zZWVuID0gMDsKLQkJCXJfbGlzdFtsb2NhdGlvbl0uYWRkciA9IDA7Ci0JCQlyX2xpc3RbbG9jYXRpb25dLnR0bCA9IDA7Ci0JCQltZW1zZXQocl9saXN0W2xvY2F0aW9uXS5sYXN0X3BrdHMsMCxpcF9wa3RfbGlzdF90b3Qqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJCXJfbGlzdFtsb2NhdGlvbl0ub2xkZXN0X3BrdCA9IDA7Ci0JCQlhbnMgPSAhaW5mby0+aW52ZXJ0OwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZjdXJyX3RhYmxlLT5saXN0X2xvY2spOwotCQlyZXR1cm4gYW5zOwotCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZjdXJyX3RhYmxlLT5saXN0X2xvY2spOwotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogbWF0Y2goKSBsZWZ0LlxuIik7Ci0jZW5kaWYKLQlyZXR1cm4gYW5zOworCXJldHVybiByZXQ7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIHJ1bGUgZ2l2ZW4gZHVyaW5nIHRoZSB1c2Vyc3BhY2UgaXB0YWJsZXMKLSAqIGNvbW1hbmQgaXMgY29ycmVjdC4KLSAqIElmIHRoZSBjb21tYW5kIGlzIHZhbGlkIHRoZW4gd2UgY2hlY2sgaWYgdGhlIHRhYmxlIG5hbWUgcmVmZXJyZWQgdG8gYnkgdGhlCi0gKiBydWxlIGV4aXN0cywgaWYgbm90IGl0IGlzIGNyZWF0ZWQuCi0gKi8KIHN0YXRpYyBpbnQKLWNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAotICAgICAgICAgICBjb25zdCB2b2lkICppcCwKLQkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotICAgICAgICAgICB2b2lkICptYXRjaGluZm8sCi0gICAgICAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0gICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCitpcHRfcmVjZW50X2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLCBjb25zdCB2b2lkICppcCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAorCQkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLCB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCWludCBmbGFnID0gMCwgYzsKLQl1bnNpZ25lZCBsb25nICpob2xkOwogCWNvbnN0IHN0cnVjdCBpcHRfcmVjZW50X2luZm8gKmluZm8gPSBtYXRjaGluZm87Ci0Jc3RydWN0IHJlY2VudF9pcF90YWJsZXMgKmN1cnJfdGFibGUsICpmaW5kX3RhYmxlLCAqbGFzdF90YWJsZTsKKwlzdHJ1Y3QgcmVjZW50X3RhYmxlICp0OworCXVuc2lnbmVkIGk7CisJaW50IHJldCA9IDA7CiAKLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnkoKSBlbnRlcmVkLlxuIik7Ci0jZW5kaWYKLQotCS8qIHNlY29uZHMgYW5kIGhpdF9jb3VudCBvbmx5IHZhbGlkIGZvciBDSEVDSy9VUERBVEUgKi8KLQlpZihpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1NFVCkgeyBmbGFnKys7IGlmKGluZm8tPnNlY29uZHMgfHwgaW5mby0+aGl0X2NvdW50KSByZXR1cm4gMDsgfQotCWlmKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfUkVNT1ZFKSB7IGZsYWcrKzsgaWYoaW5mby0+c2Vjb25kcyB8fCBpbmZvLT5oaXRfY291bnQpIHJldHVybiAwOyB9Ci0JaWYoaW5mby0+Y2hlY2tfc2V0ICYgSVBUX1JFQ0VOVF9DSEVDSykgZmxhZysrOwotCWlmKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfVVBEQVRFKSBmbGFnKys7Ci0KLQkvKiBPbmUgYW5kIG9ubHkgb25lIG9mIHRoZXNlIHNob3VsZCBldmVyIGJlIHNldCAqLwotCWlmKGZsYWcgIT0gMSkgcmV0dXJuIDA7Ci0KLQkvKiBOYW1lIG11c3QgYmUgc2V0IHRvIHNvbWV0aGluZyAqLwotCWlmKCFpbmZvLT5uYW1lIHx8ICFpbmZvLT5uYW1lWzBdKSByZXR1cm4gMDsKLQotCS8qIFRoaW5ncyBsb29rIGdvb2QsIGNyZWF0ZSBhIGxpc3QgZm9yIHRoaXMgaWYgaXQgZG9lcyBub3QgZXhpc3QgKi8KLQkvKiBMb2NrIHRoZSBsaW5rZWQgbGlzdCB3aGlsZSB3ZSBwbGF5IHdpdGggaXQgKi8KLQlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQotCS8qIExvb2sgZm9yIGFuIGVudHJ5IHdpdGggdGhpcyBuYW1lIGFscmVhZHkgY3JlYXRlZCAqLwotCS8qIEZpbmRzIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIHRoZSBlbnRyeSBiZWZvcmUgdGhlIGVuZCBpZiBjdXJyZW50IG5hbWUgZG9lcyBub3QgZXhpc3QgKi8KLQlmaW5kX3RhYmxlID0gcl90YWJsZXM7Ci0Jd2hpbGUoIChsYXN0X3RhYmxlID0gZmluZF90YWJsZSkgJiYgc3RybmNtcChpbmZvLT5uYW1lLGZpbmRfdGFibGUtPm5hbWUsSVBUX1JFQ0VOVF9OQU1FX0xFTikgJiYgKGZpbmRfdGFibGUgPSBmaW5kX3RhYmxlLT5uZXh0KSApOwotCi0JLyogSWYgYSB0YWJsZSBhbHJlYWR5IGV4aXN0cyBqdXN0IGluY3JlbWVudCB0aGUgY291bnQgb24gdGhhdCB0YWJsZSBhbmQgcmV0dXJuICovCi0JaWYoZmluZF90YWJsZSkgeyAKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB0YWJsZSBmb3VuZCAoJXMpLCBpbmNyZW1lbnRpbmcgY291bnQuXG4iLGluZm8tPm5hbWUpOwotI2VuZGlmCi0JCWZpbmRfdGFibGUtPmNvdW50Kys7Ci0JCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0JCXJldHVybiAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0KLQkvKiBUYWJsZSB3aXRoIHRoaXMgbmFtZSBub3QgZm91bmQgKi8KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBsaW5rZWQgbGlzdCBpdGVtICovCi0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogY2hlY2tlbnRyeTogbm8gdGFibGUgZm91bmQgKCVzKVxuIixpbmZvLT5uYW1lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiBBbGxvY2F0aW9uZyAlZCBmb3IgbGluay1saXN0IGVudHJ5LlxuIixzaXplb2Yoc3RydWN0IHJlY2VudF9pcF90YWJsZXMpKTsKLQl9Ci0jZW5kaWYKLQotCWN1cnJfdGFibGUgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcykpOwotCWlmKGN1cnJfdGFibGUgPT0gTlVMTCkgcmV0dXJuIDA7Ci0KLQlzcGluX2xvY2tfaW5pdCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQljdXJyX3RhYmxlLT5uZXh0ID0gTlVMTDsKLQljdXJyX3RhYmxlLT5jb3VudCA9IDE7Ci0JY3Vycl90YWJsZS0+dGltZV9wb3MgPSAwOwotCXN0cm5jcHkoY3Vycl90YWJsZS0+bmFtZSxpbmZvLT5uYW1lLElQVF9SRUNFTlRfTkFNRV9MRU4pOwotCWN1cnJfdGFibGUtPm5hbWVbSVBUX1JFQ0VOVF9OQU1FX0xFTi0xXSA9ICdcMCc7Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoaXMgdGFibGUgYW5kIHRoZSBsaXN0IG9mIHBhY2tldHMgaW4gZWFjaCBlbnRyeS4gKi8KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnk6IEFsbG9jYXRpbmcgJWQgZm9yIHRhYmxlICglcykuXG4iLAotCQkJc2l6ZW9mKHN0cnVjdCByZWNlbnRfaXBfbGlzdCkqaXBfbGlzdF90b3QsCi0JCQlpbmZvLT5uYW1lKTsKLSNlbmRpZgotCi0JY3Vycl90YWJsZS0+dGFibGUgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVjZW50X2lwX2xpc3QpKmlwX2xpc3RfdG90KTsKLQlpZihjdXJyX3RhYmxlLT50YWJsZSA9PSBOVUxMKSB7IHZmcmVlKGN1cnJfdGFibGUpOyByZXR1cm4gMDsgfQotCW1lbXNldChjdXJyX3RhYmxlLT50YWJsZSwwLHNpemVvZihzdHJ1Y3QgcmVjZW50X2lwX2xpc3QpKmlwX2xpc3RfdG90KTsKLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnk6IEFsbG9jYXRpbmcgJWQgZm9yIHBrdF9saXN0LlxuIiwKLQkJCXNpemVvZih1bnNpZ25lZCBsb25nKSppcF9wa3RfbGlzdF90b3QqaXBfbGlzdF90b3QpOwotI2VuZGlmCi0KLQlob2xkID0gdm1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykqaXBfcGt0X2xpc3RfdG90KmlwX2xpc3RfdG90KTsKLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnk6IEFmdGVyIHBrdF9saXN0IGFsbG9jYXRpb24uXG4iKTsKLSNlbmRpZgotCWlmKGhvbGQgPT0gTlVMTCkgeyAKLQkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB1bmFibGUgdG8gYWxsb2NhdGUgZm9yIHBrdF9saXN0LlxuIik7Ci0JCXZmcmVlKGN1cnJfdGFibGUtPnRhYmxlKTsgCi0JCXZmcmVlKGN1cnJfdGFibGUpOworCWlmIChod2VpZ2h0OChpbmZvLT5jaGVja19zZXQgJgorCQkgICAgIChJUFRfUkVDRU5UX1NFVCB8IElQVF9SRUNFTlRfUkVNT1ZFIHwKKwkJICAgICAgSVBUX1JFQ0VOVF9DSEVDSyB8IElQVF9SRUNFTlRfVVBEQVRFKSkgIT0gMSkKIAkJcmV0dXJuIDA7Ci0JfQotCWZvcihjID0gMDsgYyA8IGlwX2xpc3RfdG90OyBjKyspIHsKLQkJY3Vycl90YWJsZS0+dGFibGVbY10ubGFzdF9wa3RzID0gaG9sZCArIGMqaXBfcGt0X2xpc3RfdG90OwotCX0KLQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGhhc2ggdGFibGUgKi8KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnk6IEFsbG9jYXRpbmcgJWQgZm9yIGhhc2hfdGFibGUuXG4iLAotCQkJc2l6ZW9mKGludCkqaXBfbGlzdF9oYXNoX3NpemUpOwotI2VuZGlmCi0KLQljdXJyX3RhYmxlLT5oYXNoX3RhYmxlID0gdm1hbGxvYyhzaXplb2YoaW50KSppcF9saXN0X2hhc2hfc2l6ZSk7Ci0JaWYoIWN1cnJfdGFibGUtPmhhc2hfdGFibGUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB1bmFibGUgdG8gYWxsb2NhdGUgZm9yIGhhc2hfdGFibGUuXG4iKTsKLQkJdmZyZWUoaG9sZCk7Ci0JCXZmcmVlKGN1cnJfdGFibGUtPnRhYmxlKTsgCi0JCXZmcmVlKGN1cnJfdGFibGUpOworCWlmICgoaW5mby0+Y2hlY2tfc2V0ICYgKElQVF9SRUNFTlRfU0VUIHwgSVBUX1JFQ0VOVF9SRU1PVkUpKSAmJgorCSAgICAoaW5mby0+c2Vjb25kcyB8fCBpbmZvLT5oaXRfY291bnQpKQogCQlyZXR1cm4gMDsKLQl9Ci0KLQlmb3IoYyA9IDA7IGMgPCBpcF9saXN0X2hhc2hfc2l6ZTsgYysrKSB7Ci0JCWN1cnJfdGFibGUtPmhhc2hfdGFibGVbY10gPSAtMTsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0aW1lIGluZm8gKi8KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnk6IEFsbG9jYXRpbmcgJWQgZm9yIHRpbWVfaW5mby5cbiIsCi0JCQlzaXplb2Yoc3RydWN0IHRpbWVfaW5mb19saXN0KSppcF9saXN0X3RvdCk7Ci0jZW5kaWYKLQotCWN1cnJfdGFibGUtPnRpbWVfaW5mbyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW1lX2luZm9fbGlzdCkqaXBfbGlzdF90b3QpOwotCWlmKCFjdXJyX3RhYmxlLT50aW1lX2luZm8pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB1bmFibGUgdG8gYWxsb2NhdGUgZm9yIHRpbWVfaW5mby5cbiIpOwotCQl2ZnJlZShjdXJyX3RhYmxlLT5oYXNoX3RhYmxlKTsKLQkJdmZyZWUoaG9sZCk7Ci0JCXZmcmVlKGN1cnJfdGFibGUtPnRhYmxlKTsgCi0JCXZmcmVlKGN1cnJfdGFibGUpOworCWlmIChpbmZvLT5uYW1lWzBdID09ICdcMCcgfHwKKwkgICAgc3RybmxlbihpbmZvLT5uYW1lLCBJUFRfUkVDRU5UX05BTUVfTEVOKSA9PSBJUFRfUkVDRU5UX05BTUVfTEVOKQogCQlyZXR1cm4gMDsKLQl9Ci0JZm9yKGMgPSAwOyBjIDwgaXBfbGlzdF90b3Q7IGMrKykgewotCQljdXJyX3RhYmxlLT50aW1lX2luZm9bY10ucG9zaXRpb24gPSBjOwotCQljdXJyX3RhYmxlLT50aW1lX2luZm9bY10udGltZSA9IDA7CisKKwltdXRleF9sb2NrKCZyZWNlbnRfbXV0ZXgpOworCXQgPSByZWNlbnRfdGFibGVfbG9va3VwKGluZm8tPm5hbWUpOworCWlmICh0ICE9IE5VTEwpIHsKKwkJdC0+cmVmY250Kys7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OwogCX0KIAotCS8qIFB1dCB0aGUgbmV3IHRhYmxlIGluIHBsYWNlICovCi0Jc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0JZmluZF90YWJsZSA9IHJfdGFibGVzOwotCXdoaWxlKCAobGFzdF90YWJsZSA9IGZpbmRfdGFibGUpICYmIHN0cm5jbXAoaW5mby0+bmFtZSxmaW5kX3RhYmxlLT5uYW1lLElQVF9SRUNFTlRfTkFNRV9MRU4pICYmIChmaW5kX3RhYmxlID0gZmluZF90YWJsZS0+bmV4dCkgKTsKLQotCS8qIElmIGEgdGFibGUgYWxyZWFkeSBleGlzdHMganVzdCBpbmNyZW1lbnQgdGhlIGNvdW50IG9uIHRoYXQgdGFibGUgYW5kIHJldHVybiAqLwotCWlmKGZpbmRfdGFibGUpIHsgCi0JCWZpbmRfdGFibGUtPmNvdW50Kys7CQotCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnk6IHRhYmxlIGZvdW5kICglcyksIGNyZWF0ZWQgYnkgb3RoZXIgcHJvY2Vzcy5cbiIsaW5mby0+bmFtZSk7Ci0jZW5kaWYKLQkJdmZyZWUoY3Vycl90YWJsZS0+dGltZV9pbmZvKTsKLQkJdmZyZWUoY3Vycl90YWJsZS0+aGFzaF90YWJsZSk7Ci0JCXZmcmVlKGhvbGQpOwotCQl2ZnJlZShjdXJyX3RhYmxlLT50YWJsZSk7Ci0JCXZmcmVlKGN1cnJfdGFibGUpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYoIWxhc3RfdGFibGUpIHJfdGFibGVzID0gY3Vycl90YWJsZTsgZWxzZSBsYXN0X3RhYmxlLT5uZXh0ID0gY3Vycl90YWJsZTsKLQotCXNwaW5fdW5sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0KKwl0ID0ga3phbGxvYyhzaXplb2YoKnQpICsgc2l6ZW9mKHQtPmlwaGFzaFswXSkgKiBpcF9saXN0X2hhc2hfc2l6ZSwKKwkJICAgIEdGUF9LRVJORUwpOworCWlmICh0ID09IE5VTEwpCisJCWdvdG8gb3V0OworCXQtPnJlZmNudCA9IDE7CisJc3RyY3B5KHQtPm5hbWUsIGluZm8tPm5hbWUpOworCUlOSVRfTElTVF9IRUFEKCZ0LT5scnVfbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IGlwX2xpc3RfaGFzaF9zaXplOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZ0LT5pcGhhc2hbaV0pOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JLyogQ3JlYXRlIG91ciBwcm9jICdzdGF0dXMnIGVudHJ5LiAqLwotCWN1cnJfdGFibGUtPnN0YXR1c19wcm9jID0gY3JlYXRlX3Byb2NfZW50cnkoY3Vycl90YWJsZS0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcHJvY19uZXRfaXB0X3JlY2VudCk7Ci0JaWYgKCFjdXJyX3RhYmxlLT5zdGF0dXNfcHJvYykgewotCQl2ZnJlZShob2xkKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5OiB1bmFibGUgdG8gYWxsb2NhdGUgZm9yIC9wcm9jIGVudHJ5LlxuIik7Ci0JCS8qIERlc3Ryb3kgdGhlIGNyZWF0ZWQgdGFibGUgKi8KLQkJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0JCWxhc3RfdGFibGUgPSBOVUxMOwotCQljdXJyX3RhYmxlID0gcl90YWJsZXM7Ci0JCWlmKCFjdXJyX3RhYmxlKSB7Ci0jaWZkZWYgREVCVUcKLQkJCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGNoZWNrZW50cnkoKSBjcmVhdGVfcHJvYyBmYWlsZWQsIG5vIHRhYmxlcy5cbiIpOwotI2VuZGlmCi0JCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJd2hpbGUoIHN0cm5jbXAoaW5mby0+bmFtZSxjdXJyX3RhYmxlLT5uYW1lLElQVF9SRUNFTlRfTkFNRV9MRU4pICYmIChsYXN0X3RhYmxlID0gY3Vycl90YWJsZSkgJiYgKGN1cnJfdGFibGUgPSBjdXJyX3RhYmxlLT5uZXh0KSApOwotCQlpZighY3Vycl90YWJsZSkgewotI2lmZGVmIERFQlVHCi0JCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5KCkgY3JlYXRlX3Byb2MgZmFpbGVkLCB0YWJsZSBhbHJlYWR5IGRlc3Ryb3llZC5cbiIpOwotI2VuZGlmCi0JCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYobGFzdF90YWJsZSkgbGFzdF90YWJsZS0+bmV4dCA9IGN1cnJfdGFibGUtPm5leHQ7IGVsc2Ugcl90YWJsZXMgPSBjdXJyX3RhYmxlLT5uZXh0OwotCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCQl2ZnJlZShjdXJyX3RhYmxlLT50aW1lX2luZm8pOwotCQl2ZnJlZShjdXJyX3RhYmxlLT5oYXNoX3RhYmxlKTsKLQkJdmZyZWUoY3Vycl90YWJsZS0+dGFibGUpOwotCQl2ZnJlZShjdXJyX3RhYmxlKTsKLQkJcmV0dXJuIDA7CisJdC0+cHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHByb2NfZGlyKTsKKwlpZiAodC0+cHJvYyA9PSBOVUxMKSB7CisJCWtmcmVlKHQpOworCQlnb3RvIG91dDsKIAl9Ci0JCi0JY3Vycl90YWJsZS0+c3RhdHVzX3Byb2MtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY3Vycl90YWJsZS0+c3RhdHVzX3Byb2MtPmRhdGEgPSBjdXJyX3RhYmxlOwotCXdtYigpOwotCWN1cnJfdGFibGUtPnN0YXR1c19wcm9jLT5yZWFkX3Byb2MgPSBpcF9yZWNlbnRfZ2V0X2luZm87Ci0JY3Vycl90YWJsZS0+c3RhdHVzX3Byb2MtPndyaXRlX3Byb2MgPSBpcF9yZWNlbnRfY3RybDsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5KCkgbGVmdC5cbiIpOworCXQtPnByb2MtPnByb2NfZm9wcyA9ICZyZWNlbnRfZm9wczsKKwl0LT5wcm9jLT5kYXRhICAgICAgPSB0OwogI2VuZGlmCi0KLQlyZXR1cm4gMTsKKwlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ0LT5saXN0LCAmdGFibGVzKTsKKwlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOworCXJldCA9IDE7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZyZWNlbnRfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBldmVudCB0aGF0IGEgcnVsZSBtYXRjaGluZyB0aGlzIG1vZHVsZSBpcwotICogcmVtb3ZlZC4KLSAqIFdoZW4gdGhpcyBoYXBwZW5zIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG5vIG90aGVyIHJ1bGVzIG1hdGNoaW5nCi0gKiB0aGUgdGFibGUgZ2l2ZW4uICBJZiB0aGF0IGlzIHRoZSBjYXNlIHRoZW4gd2UgcmVtb3ZlIHRoZSB0YWJsZSBhbmQgY2xlYW4KLSAqIHVwIGl0cyBtZW1vcnkuCi0gKi8KIHN0YXRpYyB2b2lkCi1kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKK2lwdF9yZWNlbnRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8sCisJCSAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUpCiB7CiAJY29uc3Qgc3RydWN0IGlwdF9yZWNlbnRfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKLQlzdHJ1Y3QgcmVjZW50X2lwX3RhYmxlcyAqY3Vycl90YWJsZSwgKmxhc3RfdGFibGU7CisJc3RydWN0IHJlY2VudF90YWJsZSAqdDsKIAotI2lmZGVmIERFQlVHCi0JaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogZGVzdHJveSgpIGVudGVyZWQuXG4iKTsKLSNlbmRpZgotCi0JaWYobWF0Y2hzaXplICE9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9yZWNlbnRfaW5mbykpKSByZXR1cm47Ci0KLQkvKiBMb2NrIHRoZSBsaW5rZWQgbGlzdCB3aGlsZSB3ZSBwbGF5IHdpdGggaXQgKi8KLQlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQotCS8qIExvb2sgZm9yIGFuIGVudHJ5IHdpdGggdGhpcyBuYW1lIGFscmVhZHkgY3JlYXRlZCAqLwotCS8qIEZpbmRzIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIHRoZSBlbnRyeSBiZWZvcmUgdGhlIGVuZCBpZiBjdXJyZW50IG5hbWUgZG9lcyBub3QgZXhpc3QgKi8KLQlsYXN0X3RhYmxlID0gTlVMTDsKLQljdXJyX3RhYmxlID0gcl90YWJsZXM7Ci0JaWYoIWN1cnJfdGFibGUpIHsgCi0jaWZkZWYgREVCVUcKLQkJaWYoZGVidWcpIHByaW50ayhLRVJOX0lORk8gUkVDRU5UX05BTUUgIjogZGVzdHJveSgpIE5vIHRhYmxlcyBmb3VuZCwgbGVhdmluZy5cbiIpOwotI2VuZGlmCisJbXV0ZXhfbG9jaygmcmVjZW50X211dGV4KTsKKwl0ID0gcmVjZW50X3RhYmxlX2xvb2t1cChpbmZvLT5uYW1lKTsKKwlpZiAoLS10LT5yZWZjbnQgPT0gMCkgeworCQlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKKwkJbGlzdF9kZWwoJnQtPmxpc3QpOwogCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCQlyZXR1cm47Ci0JfQotCXdoaWxlKCBzdHJuY21wKGluZm8tPm5hbWUsY3Vycl90YWJsZS0+bmFtZSxJUFRfUkVDRU5UX05BTUVfTEVOKSAmJiAobGFzdF90YWJsZSA9IGN1cnJfdGFibGUpICYmIChjdXJyX3RhYmxlID0gY3Vycl90YWJsZS0+bmV4dCkgKTsKLQotCS8qIElmIGEgdGFibGUgZG9lcyBub3QgZXhpc3QgdGhlbiBkbyBub3RoaW5nIGFuZCByZXR1cm4gKi8KLQlpZighY3Vycl90YWJsZSkgeyAKLSNpZmRlZiBERUJVRwotCQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBkZXN0cm95KCkgdGFibGUgbm90IGZvdW5kLCBsZWF2aW5nLlxuIik7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQotCWN1cnJfdGFibGUtPmNvdW50LS07Ci0KLQkvKiBJZiBjb3VudCBpcyBzdGlsbCBub24temVybyB0aGVuIHRoZXJlIGFyZSBzdGlsbCBydWxlcyByZWZlcmVuY2VpbmcgaXQgc28gd2UgZG8gbm90aGluZyAqLwotCWlmKGN1cnJfdGFibGUtPmNvdW50KSB7IAotI2lmZGVmIERFQlVHCi0JCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGRlc3Ryb3koKSB0YWJsZSBmb3VuZCwgbm9uLXplcm8gY291bnQsIGxlYXZpbmcuXG4iKTsKLSNlbmRpZgotCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwotCQlyZXR1cm47Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBkZXN0cm95KCkgdGFibGUgZm91bmQsIHplcm8gY291bnQsIHJlbW92aW5nLlxuIik7Ci0jZW5kaWYKLQotCS8qIENvdW50IG11c3QgYmUgemVybyBzbyB3ZSByZW1vdmUgdGhpcyB0YWJsZSBmcm9tIHRoZSBsaXN0ICovCi0JaWYobGFzdF90YWJsZSkgbGFzdF90YWJsZS0+bmV4dCA9IGN1cnJfdGFibGUtPm5leHQ7IGVsc2Ugcl90YWJsZXMgPSBjdXJyX3RhYmxlLT5uZXh0OwotCi0Jc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKLQotCS8qIGxvY2sgdG8gbWFrZSBzdXJlIGFueSBsYXRlLXJ1bm5lcnMgc3RpbGwgdXNpbmcgdGhpcyBhZnRlciB3ZSByZW1vdmVkIGl0IGZyb20KLQkgKiB0aGUgbGlzdCBmaW5pc2ggdXAgdGhlbiByZW1vdmUgZXZlcnl0aGluZyAqLwotCXNwaW5fbG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQlzcGluX3VubG9ja19iaCgmY3Vycl90YWJsZS0+bGlzdF9sb2NrKTsKLQorCQlyZWNlbnRfdGFibGVfZmx1c2godCk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlpZihjdXJyX3RhYmxlLT5zdGF0dXNfcHJvYykgcmVtb3ZlX3Byb2NfZW50cnkoY3Vycl90YWJsZS0+bmFtZSxwcm9jX25ldF9pcHRfcmVjZW50KTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwotCXZmcmVlKGN1cnJfdGFibGUtPnRhYmxlWzBdLmxhc3RfcGt0cyk7Ci0JdmZyZWUoY3Vycl90YWJsZS0+dGFibGUpOwotCXZmcmVlKGN1cnJfdGFibGUtPmhhc2hfdGFibGUpOwotCXZmcmVlKGN1cnJfdGFibGUtPnRpbWVfaW5mbyk7Ci0JdmZyZWUoY3Vycl90YWJsZSk7Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGRlc3Ryb3koKSBsZWZ0LlxuIik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHByb2NfZGlyKTsKICNlbmRpZgotCi0JcmV0dXJuOworCQlrZnJlZSh0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyZWNlbnRfbXV0ZXgpOwogfQogCi0vKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2UgcGFzcyB0byBpcHRfcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgb3VyCi0gKiBtb2R1bGUgd2l0aCBpcHRhYmxlcy4KLSAqLworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdHJ1Y3QgcmVjZW50X2l0ZXJfc3RhdGUgeworCXN0cnVjdCByZWNlbnRfdGFibGUJKnRhYmxlOworCXVuc2lnbmVkIGludAkJYnVja2V0OworfTsKKworc3RhdGljIHZvaWQgKnJlY2VudF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCByZWNlbnRfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IHJlY2VudF90YWJsZSAqdCA9IHN0LT50YWJsZTsKKwlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplOworCWxvZmZfdCBwID0gKnBvczsKKworCXNwaW5fbG9ja19iaCgmcmVjZW50X2xvY2spOworCisJZm9yIChzdC0+YnVja2V0ID0gMDsgc3QtPmJ1Y2tldCA8IGlwX2xpc3RfaGFzaF9zaXplOyBzdC0+YnVja2V0KyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmdC0+aXBoYXNoW3N0LT5idWNrZXRdLCBsaXN0KSB7CisJCQlpZiAocC0tID09IDApCisJCQkJcmV0dXJuIGU7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpyZWNlbnRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCByZWNlbnRfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IHJlY2VudF90YWJsZSAqdCA9IHN0LT50YWJsZTsKKwlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplID0gdjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gZS0+bGlzdC5uZXh0OworCisJd2hpbGUgKGhlYWQgPT0gJnQtPmlwaGFzaFtzdC0+YnVja2V0XSkgeworCQlpZiAoKytzdC0+YnVja2V0ID49IGlwX2xpc3RfaGFzaF9zaXplKQorCQkJcmV0dXJuIE5VTEw7CisJCWhlYWQgPSB0LT5pcGhhc2hbc3QtPmJ1Y2tldF0ubmV4dDsKKwl9CisJKCpwb3MpKys7CisJcmV0dXJuIGxpc3RfZW50cnkoaGVhZCwgc3RydWN0IHJlY2VudF9lbnRyeSwgbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2VudF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKK30KKworc3RhdGljIGludCByZWNlbnRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IHJlY2VudF9lbnRyeSAqZSA9IHY7CisJdW5zaWduZWQgaW50IGk7CisKKwlpID0gKGUtPmluZGV4IC0gMSkgJSBpcF9wa3RfbGlzdF90b3Q7CisJc2VxX3ByaW50ZihzZXEsICJzcmM9JXUuJXUuJXUuJXUgdHRsOiAldSBsYXN0X3NlZW46ICVsdSBvbGRlc3RfcGt0OiAldSIsCisJCSAgIE5JUFFVQUQoZS0+YWRkciksIGUtPnR0bCwgZS0+c3RhbXBzW2ldLCBlLT5pbmRleCk7CisJZm9yIChpID0gMDsgaSA8IGUtPm5zdGFtcHM7IGkrKykKKwkJc2VxX3ByaW50ZihzZXEsICIlcyAlbHUiLCBpID8gIiwiIDogIiIsIGUtPnN0YW1wc1tpXSk7CisJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHJlY2VudF9zZXFfb3BzID0geworCS5zdGFydAkJPSByZWNlbnRfc2VxX3N0YXJ0LAorCS5uZXh0CQk9IHJlY2VudF9zZXFfbmV4dCwKKwkuc3RvcAkJPSByZWNlbnRfc2VxX3N0b3AsCisJLnNob3cJCT0gcmVjZW50X3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCByZWNlbnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoaW5vZGUpOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxOworCXN0cnVjdCByZWNlbnRfaXRlcl9zdGF0ZSAqc3Q7CisJaW50IHJldDsKKworCXN0ID0ga3phbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZyZWNlbnRfc2VxX29wcyk7CisJaWYgKHJldCkKKwkJa2ZyZWUoc3QpOworCXN0LT50YWJsZSAgICA9IHBkZS0+ZGF0YTsKKwlzZXEgICAgICAgICAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc2VxLT5wcml2YXRlID0gc3Q7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgcmVjZW50X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICppbnB1dCwKKwkJCQkgc2l6ZV90IHNpemUsIGxvZmZfdCAqbG9mZikKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHJlY2VudF90YWJsZSAqdCA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplOworCWNoYXIgYnVmW3NpemVvZigiKzI1NS4yNTUuMjU1LjI1NSIpXSwgKmMgPSBidWY7CisJdV9pbnQzMl90IGFkZHI7CisJaW50IGFkZDsKKworCWlmIChzaXplID4gc2l6ZW9mKGJ1ZikpCisJCXNpemUgPSBzaXplb2YoYnVmKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBpbnB1dCwgc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCXdoaWxlIChpc3NwYWNlKCpjKSkKKwkJYysrOworCisJaWYgKHNpemUgLSAoYyAtIGJ1ZikgPCA1KQorCQlyZXR1cm4gYyAtIGJ1ZjsKKwlpZiAoIXN0cm5jbXAoYywgImNsZWFyIiwgNSkpIHsKKwkJYyArPSA1OworCQlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKKwkJcmVjZW50X3RhYmxlX2ZsdXNoKHQpOworCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOworCQlyZXR1cm4gYyAtIGJ1ZjsKKwl9CisKKwlzd2l0Y2ggKCpjKSB7CisJY2FzZSAnLSc6CisJCWFkZCA9IDA7CisJCWMrKzsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CisJCWMrKzsKKwlkZWZhdWx0OgorCQlhZGQgPSAxOworCQlicmVhazsKKwl9CisJYWRkciA9IGluX2F0b24oYyk7CisKKwlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKKwllID0gcmVjZW50X2VudHJ5X2xvb2t1cCh0LCBhZGRyLCAwKTsKKwlpZiAoZSA9PSBOVUxMKSB7CisJCWlmIChhZGQpCisJCQlyZWNlbnRfZW50cnlfaW5pdCh0LCBhZGRyLCAwKTsKKwl9IGVsc2UgeworCQlpZiAoYWRkKQorCQkJcmVjZW50X2VudHJ5X3VwZGF0ZSh0LCBlKTsKKwkJZWxzZQorCQkJcmVjZW50X2VudHJ5X3JlbW92ZSh0LCBlKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVjZW50X2ZvcHMgPSB7CisJLm9wZW4JCT0gcmVjZW50X3NlcV9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS53cml0ZQkJPSByZWNlbnRfcHJvY193cml0ZSwKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCiBzdGF0aWMgc3RydWN0IGlwdF9tYXRjaCByZWNlbnRfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gInJlY2VudCIsCi0JLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaAkJPSBpcHRfcmVjZW50X21hdGNoLAogCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9yZWNlbnRfaW5mbyksCi0JLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAotCS5kZXN0cm95CT0gZGVzdHJveSwKLQkubWUJCT0gVEhJU19NT0RVTEUKKwkuY2hlY2tlbnRyeQk9IGlwdF9yZWNlbnRfY2hlY2tlbnRyeSwKKwkuZGVzdHJveQk9IGlwdF9yZWNlbnRfZGVzdHJveSwKKwkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi0vKiBLZXJuZWwgbW9kdWxlIGluaXRpYWxpemF0aW9uLiAqLwogc3RhdGljIGludCBfX2luaXQgaXB0X3JlY2VudF9pbml0KHZvaWQpCiB7Ci0JaW50IGVyciwgY291bnQ7CisJaW50IGVycjsKIAotCXByaW50ayh2ZXJzaW9uKTsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2NfbmV0X2lwdF9yZWNlbnQgPSBwcm9jX21rZGlyKCJpcHRfcmVjZW50Iixwcm9jX25ldCk7Ci0JaWYoIXByb2NfbmV0X2lwdF9yZWNlbnQpIHJldHVybiAtRU5PTUVNOwotI2VuZGlmCi0KLQlpZihpcF9saXN0X2hhc2hfc2l6ZSAmJiBpcF9saXN0X2hhc2hfc2l6ZSA8PSBpcF9saXN0X3RvdCkgewotCSAgcHJpbnRrKEtFUk5fV0FSTklORyBSRUNFTlRfTkFNRSAiOiBpcF9saXN0X2hhc2hfc2l6ZSB0b28gc21hbGwsIHJlc2V0dGluZyB0byBkZWZhdWx0LlxuIik7Ci0JICBpcF9saXN0X2hhc2hfc2l6ZSA9IDA7Ci0JfQotCi0JaWYoIWlwX2xpc3RfaGFzaF9zaXplKSB7Ci0JCWlwX2xpc3RfaGFzaF9zaXplID0gaXBfbGlzdF90b3QqMzsKLQkJY291bnQgPSAyKjI7Ci0JCXdoaWxlKGlwX2xpc3RfaGFzaF9zaXplID4gY291bnQpIGNvdW50ID0gY291bnQqMjsKLQkJaXBfbGlzdF9oYXNoX3NpemUgPSBjb3VudDsKLQl9Ci0KLSNpZmRlZiBERUJVRwotCWlmKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIFJFQ0VOVF9OQU1FICI6IGlwX2xpc3RfaGFzaF9zaXplOiAlZFxuIixpcF9saXN0X2hhc2hfc2l6ZSk7Ci0jZW5kaWYKKwlpZiAoIWlwX2xpc3RfdG90IHx8ICFpcF9wa3RfbGlzdF90b3QgfHwgaXBfcGt0X2xpc3RfdG90ID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpcF9saXN0X2hhc2hfc2l6ZSA9IDEgPDwgZmxzKGlwX2xpc3RfdG90KTsKIAogCWVyciA9IGlwdF9yZWdpc3Rlcl9tYXRjaCgmcmVjZW50X21hdGNoKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmIChlcnIpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KCJpcHRfcmVjZW50IiwgcHJvY19uZXQpOworCQlyZXR1cm4gZXJyOworCXByb2NfZGlyID0gcHJvY19ta2RpcigiaXB0X3JlY2VudCIsIHByb2NfbmV0KTsKKwlpZiAocHJvY19kaXIgPT0gTlVMTCkgeworCQlpcHRfdW5yZWdpc3Rlcl9tYXRjaCgmcmVjZW50X21hdGNoKTsKKwkJZXJyID0gLUVOT01FTTsKKwl9CisjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBLZXJuZWwgbW9kdWxlIGRlc3RydWN0aW9uLiAqLwotc3RhdGljIHZvaWQgX19leGl0IGlwdF9yZWNlbnRfZmluaSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlwdF9yZWNlbnRfZXhpdCh2b2lkKQogeworCUJVR19PTighbGlzdF9lbXB0eSgmdGFibGVzKSk7CiAJaXB0X3VucmVnaXN0ZXJfbWF0Y2goJnJlY2VudF9tYXRjaCk7Ci0KLQlyZW1vdmVfcHJvY19lbnRyeSgiaXB0X3JlY2VudCIscHJvY19uZXQpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmVtb3ZlX3Byb2NfZW50cnkoImlwdF9yZWNlbnQiLCBwcm9jX25ldCk7CisjZW5kaWYKIH0KIAotLyogUmVnaXN0ZXIgb3VyIG1vZHVsZSB3aXRoIHRoZSBrZXJuZWwuICovCiBtb2R1bGVfaW5pdChpcHRfcmVjZW50X2luaXQpOwotbW9kdWxlX2V4aXQoaXB0X3JlY2VudF9maW5pKTsKK21vZHVsZV9leGl0KGlwdF9yZWNlbnRfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwppbmRleCA1YmM5ZjY0Li44Y2M4ZTFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBuZl9jdF9nZXQoKnBza2IsICZjdGluZm8pOwotCWlmICghY3QpCisJaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CkBAIC0zNDgsNiArMzQ4LDcgQEAKIAkJCS50dXBsZS5kc3QudS50Y3AucG9ydDsKIAkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQogCQkJLnR1cGxlLmRzdC51My5pcDsKKwkJbWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpOwogCiAJCURFQlVHUCgiU09fT1JJR0lOQUxfRFNUOiAldS4ldS4ldS4ldSAldVxuIiwKIAkJICAgICAgIE5JUFFVQUQoc2luLnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi5zaW5fcG9ydCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCA0YjBkMzYxLi42NjNhNzNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJfQogCiAJLyogU2VlIGlwX2Nvbm50cmFja19wcm90b190Y3AuYyAqLwotCWlmIChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCisJaWYgKG5mX2Nvbm50cmFja19jaGVja3N1bSAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwX2NoZWNrc3VtKHNrYiwgaG9va251bSwgZGF0YW9mZiwgMCkpIHsKIAkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCiAJCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggZmMyNTYyNC4uYmQyMjFlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogfQogCiBzdHJ1Y3Qgc29jayAqX19yYXdfdjRfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgbnVtLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHJhZGRyLCB1bnNpZ25lZCBsb25nIGxhZGRyLAorCQkJICAgICBfX2JlMzIgcmFkZHIsIF9fYmUzMiBsYWRkciwKIAkJCSAgICAgaW50IGRpZikKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKaW5kZXggNmI2YzNhZC4uY2U0Y2Q1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKQEAgLTE4MiwxNCArMTgyLDYgQEAKIAkJLnN0cmF0ZWd5CT0gJmlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5LAogCX0sCiAgICAgICAgIHsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfQVVUT0NPTkZJRywKLQkJLnByb2NuYW1lCT0gImlwX2F1dG9jb25maWciLAotCQkuZGF0YQkJPSAmaXB2NF9jb25maWcuYXV0b2NvbmZpZywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCi0JfSwKLSAgICAgICAgewogCQkuY3RsX25hbWUJPSBORVRfSVBWNF9OT19QTVRVX0RJU0MsCiAJCS5wcm9jbmFtZQk9ICJpcF9ub19wbXR1X2Rpc2MiLAogCQkuZGF0YQkJPSAmaXB2NF9jb25maWcubm9fcG10dV9kaXNjLApAQCAtNjg4LDYgKzY4MCwyNCBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKIAl9LAorI2lmZGVmIENPTkZJR19ORVRfRE1BCisJeworCQkuY3RsX25hbWUJPSBORVRfVENQX0RNQV9DT1BZQlJFQUssCisJCS5wcm9jbmFtZQk9ICJ0Y3BfZG1hX2NvcHlicmVhayIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX2RtYV9jb3B5YnJlYWssCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYworCX0sCisjZW5kaWYKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9UQ1BfU0xPV19TVEFSVF9BRlRFUl9JRExFLAorCQkucHJvY25hbWUJPSAidGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCisJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCBlMmI3YjgwLi43NDk5OGYyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+Ci0KKyNpbmNsdWRlIDxuZXQvbmV0ZG1hLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KQEAgLTYyMiwxNCArNjIyLDEwIEBACiAJc3NpemVfdCByZXM7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKLSNkZWZpbmUgVENQX1pDX0NTVU1fRkxBR1MgKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfTk9fQ1NVTSB8IE5FVElGX0ZfSFdfQ1NVTSkKLQogCWlmICghKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykgfHwKLQkgICAgIShzay0+c2tfcm91dGVfY2FwcyAmIFRDUF9aQ19DU1VNX0ZMQUdTKSkKKwkgICAgIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfQUxMX0NTVU0pKQogCQlyZXR1cm4gc29ja19ub19zZW5kcGFnZShzb2NrLCBwYWdlLCBvZmZzZXQsIHNpemUsIGZsYWdzKTsKIAotI3VuZGVmIFRDUF9aQ19DU1VNX0ZMQUdTCi0KIAlsb2NrX3NvY2soc2spOwogCVRDUF9DSEVDS19USU1FUihzayk7CiAJcmVzID0gZG9fdGNwX3NlbmRwYWdlcyhzaywgJnBhZ2UsIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOwpAQCAtNzI2LDkgKzcyMiw3IEBACiAJCQkJLyoKIAkJCQkgKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB1c2UgSFcgY2hlY2tzdW0uCiAJCQkJICovCi0JCQkJaWYgKHNrLT5za19yb3V0ZV9jYXBzICYKLQkJCQkgICAgKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfTk9fQ1NVTSB8Ci0JCQkJICAgICBORVRJRl9GX0hXX0NTVU0pKQorCQkJCWlmIChzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfQUxMX0NTVU0pCiAJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7CiAKIAkJCQlza2JfZW50YWlsKHNrLCB0cCwgc2tiKTsKQEAgLTkzNyw3ICs5MzEsNyBAQAogICogY2FsY3VsYXRpb24gb2Ygd2hldGhlciBvciBub3Qgd2UgbXVzdCBBQ0sgZm9yIHRoZSBzYWtlIG9mCiAgKiBhIHdpbmRvdyB1cGRhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIGNsZWFudXBfcmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCBjb3BpZWQpCit2b2lkIHRjcF9jbGVhbnVwX3JidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgY29waWVkKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWludCB0aW1lX3RvX2FjayA9IDA7CkBAIC0xMDcyLDExICsxMDY2LDExIEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNrYi0+aC50aC0+ZmluKSB7Ci0JCQlza19lYXRfc2tiKHNrLCBza2IpOworCQkJc2tfZWF0X3NrYihzaywgc2tiLCAwKTsKIAkJCSsrc2VxOwogCQkJYnJlYWs7CiAJCX0KLQkJc2tfZWF0X3NrYihzaywgc2tiKTsKKwkJc2tfZWF0X3NrYihzaywgc2tiLCAwKTsKIAkJaWYgKCFkZXNjLT5jb3VudCkKIAkJCWJyZWFrOwogCX0KQEAgLTEwODYsNyArMTA4MCw3IEBACiAKIAkvKiBDbGVhbiB1cCBkYXRhIHdlIGhhdmUgcmVhZDogVGhpcyB3aWxsIGRvIEFDSyBmcmFtZXMuICovCiAJaWYgKGNvcGllZCkKLQkJY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOworCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOwogCXJldHVybiBjb3BpZWQ7CiB9CiAKQEAgLTExMTAsNiArMTEwNCw3IEBACiAJaW50IHRhcmdldDsJCS8qIFJlYWQgYXQgbGVhc3QgdGhpcyBtYW55IGJ5dGVzICovCiAJbG9uZyB0aW1lbzsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnVzZXJfcmVjdiA9IE5VTEw7CisJaW50IGNvcGllZF9lYXJseSA9IDA7CiAKIAlsb2NrX3NvY2soc2spOwogCkBAIC0xMTMzLDYgKzExMjgsMTcgQEAKIAogCXRhcmdldCA9IHNvY2tfcmN2bG93YXQoc2ssIGZsYWdzICYgTVNHX1dBSVRBTEwsIGxlbik7CiAKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCXRwLT51Y29weS5kbWFfY2hhbiA9IE5VTEw7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKChsZW4gPiBzeXNjdGxfdGNwX2RtYV9jb3B5YnJlYWspICYmICEoZmxhZ3MgJiBNU0dfUEVFSykgJiYKKwkgICAgIXN5c2N0bF90Y3BfbG93X2xhdGVuY3kgJiYgX19nZXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEubmV0X2RtYSkpIHsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQl0cC0+dWNvcHkucGlubmVkX2xpc3QgPSBkbWFfcGluX2lvdmVjX3BhZ2VzKG1zZy0+bXNnX2lvdiwgbGVuKTsKKwl9IGVsc2UKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworI2VuZGlmCisKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXUzMiBvZmZzZXQ7CkBAIC0xMjIwLDcgKzEyMjYsNyBAQAogCQkJfQogCQl9CiAKLQkJY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOworCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCBjb3BpZWQpOwogCiAJCWlmICghc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeSAmJiB0cC0+dWNvcHkudGFzayA9PSB1c2VyX3JlY3YpIHsKIAkJCS8qIEluc3RhbGwgbmV3IHJlYWRlciAqLwpAQCAtMTI3NCw2ICsxMjgwLDEwIEBACiAJCX0gZWxzZQogCQkJc2tfd2FpdF9kYXRhKHNrLCAmdGltZW8pOwogCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwkJdHAtPnVjb3B5Lndha2V1cCA9IDA7CisjZW5kaWYKKwogCQlpZiAodXNlcl9yZWN2KSB7CiAJCQlpbnQgY2h1bms7CiAKQEAgLTEzMjksMTMgKzEzMzksMzkgQEAKIAkJfQogCiAJCWlmICghKGZsYWdzICYgTVNHX1RSVU5DKSkgewotCQkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBvZmZzZXQsCi0JCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsIHVzZWQpOwotCQkJaWYgKGVycikgewotCQkJCS8qIEV4Y2VwdGlvbi4gQmFpbG91dCEgKi8KLQkJCQlpZiAoIWNvcGllZCkKLQkJCQkJY29waWVkID0gLUVGQVVMVDsKLQkJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCQkJaWYgKCF0cC0+dWNvcHkuZG1hX2NoYW4gJiYgdHAtPnVjb3B5LnBpbm5lZF9saXN0KQorCQkJCXRwLT51Y29weS5kbWFfY2hhbiA9IGdldF9zb2Z0bmV0X2RtYSgpOworCisJCQlpZiAodHAtPnVjb3B5LmRtYV9jaGFuKSB7CisJCQkJdHAtPnVjb3B5LmRtYV9jb29raWUgPSBkbWFfc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoCisJCQkJCXRwLT51Y29weS5kbWFfY2hhbiwgc2tiLCBvZmZzZXQsCisJCQkJCW1zZy0+bXNnX2lvdiwgdXNlZCwKKwkJCQkJdHAtPnVjb3B5LnBpbm5lZF9saXN0KTsKKworCQkJCWlmICh0cC0+dWNvcHkuZG1hX2Nvb2tpZSA8IDApIHsKKworCQkJCQlwcmludGsoS0VSTl9BTEVSVCAiZG1hX2Nvb2tpZSA8IDBcbiIpOworCisJCQkJCS8qIEV4Y2VwdGlvbi4gQmFpbG91dCEgKi8KKwkJCQkJaWYgKCFjb3BpZWQpCisJCQkJCQljb3BpZWQgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKChvZmZzZXQgKyB1c2VkKSA9PSBza2ItPmxlbikKKwkJCQkJY29waWVkX2Vhcmx5ID0gMTsKKworCQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKwkJCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIG9mZnNldCwKKwkJCQkJCW1zZy0+bXNnX2lvdiwgdXNlZCk7CisJCQkJaWYgKGVycikgeworCQkJCQkvKiBFeGNlcHRpb24uIEJhaWxvdXQhICovCisJCQkJCWlmICghY29waWVkKQorCQkJCQkJY29waWVkID0gLUVGQVVMVDsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTEzNTUsMTUgKzEzOTEsMTkgQEAKIAogCQlpZiAoc2tiLT5oLnRoLT5maW4pCiAJCQlnb3RvIGZvdW5kX2Zpbl9vazsKLQkJaWYgKCEoZmxhZ3MgJiBNU0dfUEVFSykpCi0JCQlza19lYXRfc2tiKHNrLCBza2IpOworCQlpZiAoIShmbGFncyAmIE1TR19QRUVLKSkgeworCQkJc2tfZWF0X3NrYihzaywgc2tiLCBjb3BpZWRfZWFybHkpOworCQkJY29waWVkX2Vhcmx5ID0gMDsKKwkJfQogCQljb250aW51ZTsKIAogCWZvdW5kX2Zpbl9vazoKIAkJLyogUHJvY2VzcyB0aGUgRklOLiAqLwogCQkrKypzZXE7Ci0JCWlmICghKGZsYWdzICYgTVNHX1BFRUspKQotCQkJc2tfZWF0X3NrYihzaywgc2tiKTsKKwkJaWYgKCEoZmxhZ3MgJiBNU0dfUEVFSykpIHsKKwkJCXNrX2VhdF9za2Ioc2ssIHNrYiwgY29waWVkX2Vhcmx5KTsKKwkJCWNvcGllZF9lYXJseSA9IDA7CisJCX0KIAkJYnJlYWs7CiAJfSB3aGlsZSAobGVuID4gMCk7CiAKQEAgLTEzODYsMTIgKzE0MjYsNDIgQEAKIAkJdHAtPnVjb3B5LmxlbiA9IDA7CiAJfQogCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwlpZiAodHAtPnVjb3B5LmRtYV9jaGFuKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWRtYV9jb29raWVfdCBkb25lLCB1c2VkOworCisJCWRtYV9hc3luY19tZW1jcHlfaXNzdWVfcGVuZGluZyh0cC0+dWNvcHkuZG1hX2NoYW4pOworCisJCXdoaWxlIChkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlKHRwLT51Y29weS5kbWFfY2hhbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnVjb3B5LmRtYV9jb29raWUsICZkb25lLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlZCkgPT0gRE1BX0lOX1BST0dSRVNTKSB7CisJCQkvKiBkbyBwYXJ0aWFsIGNsZWFudXAgb2Ygc2tfYXN5bmNfd2FpdF9xdWV1ZSAqLworCQkJd2hpbGUgKChza2IgPSBza2JfcGVlaygmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUpKSAmJgorCQkJICAgICAgIChkbWFfYXN5bmNfaXNfY29tcGxldGUoc2tiLT5kbWFfY29va2llLCBkb25lLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCkgPT0gRE1BX1NVQ0NFU1MpKSB7CisJCQkJX19za2JfZGVxdWV1ZSgmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUpOworCQkJCWtmcmVlX3NrYihza2IpOworCQkJfQorCQl9CisKKwkJLyogU2FmZSB0byBmcmVlIGVhcmx5LWNvcGllZCBza2JzIG5vdyAqLworCQlfX3NrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUpOworCQlkbWFfY2hhbl9wdXQodHAtPnVjb3B5LmRtYV9jaGFuKTsKKwkJdHAtPnVjb3B5LmRtYV9jaGFuID0gTlVMTDsKKwl9CisJaWYgKHRwLT51Y29weS5waW5uZWRfbGlzdCkgeworCQlkbWFfdW5waW5faW92ZWNfcGFnZXModHAtPnVjb3B5LnBpbm5lZF9saXN0KTsKKwkJdHAtPnVjb3B5LnBpbm5lZF9saXN0ID0gTlVMTDsKKwl9CisjZW5kaWYKKwogCS8qIEFjY29yZGluZyB0byBVTklYOTgsIG1zZ19uYW1lL21zZ19uYW1lbGVuIGFyZSBpZ25vcmVkCiAJICogb24gY29ubmVjdGVkIHNvY2tldC4gSSB3YXMganVzdCBoYXBweSB3aGVuIGZvdW5kIHRoaXMgOCkgLS1BTksKIAkgKi8KIAogCS8qIENsZWFuIHVwIGRhdGEgd2UgaGF2ZSByZWFkOiBUaGlzIHdpbGwgZG8gQUNLIGZyYW1lcy4gKi8KLQljbGVhbnVwX3JidWYoc2ssIGNvcGllZCk7CisJdGNwX2NsZWFudXBfcmJ1ZihzaywgY29waWVkKTsKIAogCVRDUF9DSEVDS19USU1FUihzayk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKQEAgLTE2NTgsNiArMTcyOCw5IEBACiAJX19za2JfcXVldWVfcHVyZ2UoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAlza19zdHJlYW1fd3JpdGVxdWV1ZV9wdXJnZShzayk7CiAJX19za2JfcXVldWVfcHVyZ2UoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpOworI2lmZGVmIENPTkZJR19ORVRfRE1BCisJX19za2JfcXVldWVfcHVyZ2UoJnNrLT5za19hc3luY193YWl0X3F1ZXVlKTsKKyNlbmRpZgogCiAJaW5ldC0+ZHBvcnQgPSAwOwogCkBAIC0xODU4LDcgKzE5MzEsNyBAQAogCQkJICAgIChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSAmJgogCQkJICAgIGluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7CiAJCQkJaWNzay0+aWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19QVVNIRUQ7Ci0JCQkJY2xlYW51cF9yYnVmKHNrLCAxKTsKKwkJCQl0Y3BfY2xlYW51cF9yYnVmKHNrLCAxKTsKIAkJCQlpZiAoISh2YWwgJiAxKSkKIAkJCQkJaWNzay0+aWNza19hY2sucGluZ3BvbmcgPSAxOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IDAzNWYyMDkuLmIyZDkwMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTE5OCwxMiArMTk4LDYgQEAKIAlyZXR1cm4gbWF4KHRwLT5zbmRfY3duZCwgY2EtPmxhc3RfbWF4X2N3bmQpOwogfQogCi1zdGF0aWMgdTMyIGJpY3RjcF9taW5fY3duZChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JcmV0dXJuIHRwLT5zbmRfc3N0aHJlc2g7Ci19Ci0KIHN0YXRpYyB2b2lkIGJpY3RjcF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IG5ld19zdGF0ZSkKIHsKIAlpZiAobmV3X3N0YXRlID09IFRDUF9DQV9Mb3NzKQpAQCAtMjMxLDcgKzIyNSw2IEBACiAJLmNvbmdfYXZvaWQJPSBiaWN0Y3BfY29uZ19hdm9pZCwKIAkuc2V0X3N0YXRlCT0gYmljdGNwX3N0YXRlLAogCS51bmRvX2N3bmQJPSBiaWN0Y3BfdW5kb19jd25kLAotCS5taW5fY3duZAk9IGJpY3RjcF9taW5fY3duZCwKIAkucGt0c19hY2tlZCAgICAgPSBiaWN0Y3BfYWNrZWQsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJiaWMiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbXBvdW5kLmMgYi9uZXQvaXB2NC90Y3BfY29tcG91bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzU0ZjdlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvdGNwX2NvbXBvdW5kLmMKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiBUQ1AgVmVnYXMgY29uZ2VzdGlvbiBjb250cm9sCisgKgorICogVGhpcyBpcyBiYXNlZCBvbiB0aGUgY29uZ2VzdGlvbiBkZXRlY3Rpb24vYXZvaWRhbmNlIHNjaGVtZSBkZXNjcmliZWQgaW4KKyAqICAgIExhd3JlbmNlIFMuIEJyYWttbyBhbmQgTGFycnkgTC4gUGV0ZXJzb24uCisgKiAgICAiVENQIFZlZ2FzOiBFbmQgdG8gZW5kIGNvbmdlc3Rpb24gYXZvaWRhbmNlIG9uIGEgZ2xvYmFsIGludGVybmV0LiIKKyAqICAgIElFRUUgSm91cm5hbCBvbiBTZWxlY3RlZCBBcmVhcyBpbiBDb21tdW5pY2F0aW9uLCAxMyg4KToxNDY1LS0xNDgwLAorICogICAgT2N0b2JlciAxOTk1LiBBdmFpbGFibGUgZnJvbToKKyAqCWZ0cDovL2Z0cC5jcy5hcml6b25hLmVkdS94a2VybmVsL1BhcGVycy9qc2FjLnBzCisgKgorICogU2VlIGh0dHA6Ly93d3cuY3MuYXJpem9uYS5lZHUveGtlcm5lbC8gZm9yIHRoZWlyIGltcGxlbWVudGF0aW9uLgorICogVGhlIG1haW4gYXNwZWN0cyB0aGF0IGRpc3Rpbmd1aXNoIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUKKyAqIEFyaXpvbmEgVmVnYXMgaW1wbGVtZW50YXRpb24gYXJlOgorICogICBvIFdlIGRvIG5vdCBjaGFuZ2UgdGhlIGxvc3MgZGV0ZWN0aW9uIG9yIHJlY292ZXJ5IG1lY2hhbmlzbXMgb2YKKyAqICAgICBMaW51eCBpbiBhbnkgd2F5LiBMaW51eCBhbHJlYWR5IHJlY292ZXJzIGZyb20gbG9zc2VzIHF1aXRlIHdlbGwsCisgKiAgICAgdXNpbmcgZmluZS1ncmFpbmVkIHRpbWVycywgTmV3UmVubywgYW5kIEZBQ0suCisgKiAgIG8gVG8gYXZvaWQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgaW1wb3NlZCBieSBpbmNyZWFzaW5nIGN3bmQKKyAqICAgICBvbmx5IGV2ZXJ5LW90aGVyIFJUVCBkdXJpbmcgc2xvdyBzdGFydCwgd2UgaW5jcmVhc2UgZHVyaW5nCisgKiAgICAgZXZlcnkgUlRUIGR1cmluZyBzbG93IHN0YXJ0LCBqdXN0IGxpa2UgUmVuby4KKyAqICAgbyBMYXJnZWx5IHRvIGFsbG93IGNvbnRpbnVvdXMgY3duZCBncm93dGggZHVyaW5nIHNsb3cgc3RhcnQsCisgKiAgICAgd2UgdXNlIHRoZSByYXRlIGF0IHdoaWNoIEFDS3MgY29tZSBiYWNrIGFzIHRoZSAiYWN0dWFsIgorICogICAgIHJhdGUsIHJhdGhlciB0aGFuIHRoZSByYXRlIGF0IHdoaWNoIGRhdGEgaXMgc2VudC4KKyAqICAgbyBUbyBzcGVlZCBjb252ZXJnZW5jZSB0byB0aGUgcmlnaHQgcmF0ZSwgd2Ugc2V0IHRoZSBjd25kCisgKiAgICAgdG8gYWNoaWV2ZSB0aGUgcmlnaHQgKCJhY3R1YWwiKSByYXRlIHdoZW4gd2UgZXhpdCBzbG93IHN0YXJ0LgorICogICBvIFRvIGZpbHRlciBvdXQgdGhlIG5vaXNlIGNhdXNlZCBieSBkZWxheWVkIEFDS3MsIHdlIHVzZSB0aGUKKyAqICAgICBtaW5pbXVtIFJUVCBzYW1wbGUgb2JzZXJ2ZWQgZHVyaW5nIHRoZSBsYXN0IFJUVCB0byBjYWxjdWxhdGUKKyAqICAgICB0aGUgYWN0dWFsIHJhdGUuCisgKiAgIG8gV2hlbiB0aGUgc2VuZGVyIHJlLXN0YXJ0cyBmcm9tIGlkbGUsIGl0IHdhaXRzIHVudGlsIGl0IGhhcworICogICAgIHJlY2VpdmVkIEFDS3MgZm9yIGFuIGVudGlyZSBmbGlnaHQgb2YgbmV3IGRhdGEgYmVmb3JlIG1ha2luZworICogICAgIGEgY3duZCBhZGp1c3RtZW50IGRlY2lzaW9uLiBUaGUgb3JpZ2luYWwgVmVnYXMgaW1wbGVtZW50YXRpb24KKyAqICAgICBhc3N1bWVkIHNlbmRlcnMgbmV2ZXIgd2VudCBpZGxlLgorICoKKyAqCisgKiAgIFRDUCBDb21wb3VuZCBiYXNlZCBvbiBUQ1AgVmVnYXMKKyAqCisgKiAgIGZ1cnRoZXIgZGV0YWlscyBjYW4gYmUgZm91bmQgaGVyZToKKyAqICAgICAgZnRwOi8vZnRwLnJlc2VhcmNoLm1pY3Jvc29mdC5jb20vcHViL3RyL1RSLTIwMDUtODYucGRmCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldF9kaWFnLmg+CisKKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKy8qIERlZmF1bHQgdmFsdWVzIG9mIHRoZSBWZWdhcyB2YXJpYWJsZXMsIGluIGZpeGVkLXBvaW50IHJlcHJlc2VudGF0aW9uCisgKiB3aXRoIFZfUEFSQU1fU0hJRlQgYml0cyB0byB0aGUgcmlnaHQgb2YgdGhlIGJpbmFyeSBwb2ludC4KKyAqLworI2RlZmluZSBWX1BBUkFNX1NISUZUIDEKKworI2RlZmluZSBUQ1BfQ09NUE9VTkRfQUxQSEEgICAgICAgICAgM1UKKyNkZWZpbmUgVENQX0NPTVBPVU5EX0JFVEEgICAgICAgICAgIDFVCisjZGVmaW5lIFRDUF9DT01QT1VORF9HQU1NQSAgICAgICAgIDMwCisjZGVmaW5lIFRDUF9DT01QT1VORF9aRVRBICAgICAgICAgICAxCisKKy8qIFRDUCBjb21wb3VuZCB2YXJpYWJsZXMgKi8KK3N0cnVjdCBjb21wb3VuZCB7CisJdTMyIGJlZ19zbmRfbnh0OwkvKiByaWdodCBlZGdlIGR1cmluZyBsYXN0IFJUVCAqLworCXUzMiBiZWdfc25kX3VuYTsJLyogbGVmdCBlZGdlICBkdXJpbmcgbGFzdCBSVFQgKi8KKwl1MzIgYmVnX3NuZF9jd25kOwkvKiBzYXZlcyB0aGUgc2l6ZSBvZiB0aGUgY3duZCAqLworCXU4IGRvaW5nX3ZlZ2FzX25vdzsJLyogaWYgdHJ1ZSwgZG8gdmVnYXMgZm9yIHRoaXMgUlRUICovCisJdTE2IGNudFJUVDsJCS8qICMgb2YgUlRUcyBtZWFzdXJlZCB3aXRoaW4gbGFzdCBSVFQgKi8KKwl1MzIgbWluUlRUOwkJLyogbWluIG9mIFJUVHMgbWVhc3VyZWQgd2l0aGluIGxhc3QgUlRUIChpbiB1c2VjKSAqLworCXUzMiBiYXNlUlRUOwkJLyogdGhlIG1pbiBvZiBhbGwgVmVnYXMgUlRUIG1lYXN1cmVtZW50cyBzZWVuIChpbiB1c2VjKSAqLworCisJdTMyIGN3bmQ7CisJdTMyIGR3bmQ7Cit9OworCisvKiBUaGVyZSBhcmUgc2V2ZXJhbCBzaXR1YXRpb25zIHdoZW4gd2UgbXVzdCAicmUtc3RhcnQiIFZlZ2FzOgorICoKKyAqICBvIHdoZW4gYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCisgKiAgbyBhZnRlciBhbiBSVE8KKyAqICBvIGFmdGVyIGZhc3QgcmVjb3ZlcnkKKyAqICBvIHdoZW4gd2Ugc2VuZCBhIHBhY2tldCBhbmQgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcKKyAqICAgIHVuYWNrbm93bGVkZ2VkIGRhdGEgKHJlc3RhcnRpbmcgYW4gaWRsZSBjb25uZWN0aW9uKQorICoKKyAqIEluIHRoZXNlIGNpcmN1bXN0YW5jZXMgd2UgY2Fubm90IGRvIGEgVmVnYXMgY2FsY3VsYXRpb24gYXQgdGhlCisgKiBlbmQgb2YgdGhlIGZpcnN0IFJUVCwgYmVjYXVzZSBhbnkgY2FsY3VsYXRpb24gd2UgZG8gaXMgdXNpbmcKKyAqIHN0YWxlIGluZm8gLS0gYm90aCB0aGUgc2F2ZWQgY3duZCBhbmQgY29uZ2VzdGlvbiBmZWVkYmFjayBhcmUKKyAqIHN0YWxlLgorICoKKyAqIEluc3RlYWQgd2UgbXVzdCB3YWl0IHVudGlsIHRoZSBjb21wbGV0aW9uIG9mIGFuIFJUVCBkdXJpbmcKKyAqIHdoaWNoIHdlIGFjdHVhbGx5IHJlY2VpdmUgQUNLcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZlZ2FzX2VuYWJsZShzdHJ1Y3Qgc29jayAqc2spCit7CisJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IGNvbXBvdW5kICp2ZWdhcyA9IGluZXRfY3NrX2NhKHNrKTsKKworCS8qIEJlZ2luIHRha2luZyBWZWdhcyBzYW1wbGVzIG5leHQgdGltZSB3ZSBzZW5kIHNvbWV0aGluZy4gKi8KKwl2ZWdhcy0+ZG9pbmdfdmVnYXNfbm93ID0gMTsKKworCS8qIFNldCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHNlbmQgd2luZG93LiAqLworCXZlZ2FzLT5iZWdfc25kX254dCA9IHRwLT5zbmRfbnh0OworCisJdmVnYXMtPmNudFJUVCA9IDA7CisJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7Cit9CisKKy8qIFN0b3AgdGFraW5nIFZlZ2FzIHNhbXBsZXMgZm9yIG5vdy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZWdhc19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgY29tcG91bmQgKnZlZ2FzID0gaW5ldF9jc2tfY2Eoc2spOworCisJdmVnYXMtPmRvaW5nX3ZlZ2FzX25vdyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRjcF9jb21wb3VuZF9pbml0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgY29tcG91bmQgKnZlZ2FzID0gaW5ldF9jc2tfY2Eoc2spOworCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCisJdmVnYXMtPmJhc2VSVFQgPSAweDdmZmZmZmZmOworCXZlZ2FzX2VuYWJsZShzayk7CisKKwl2ZWdhcy0+ZHduZCA9IDA7CisJdmVnYXMtPmN3bmQgPSB0cC0+c25kX2N3bmQ7Cit9CisKKy8qIERvIFJUVCBzYW1wbGluZyBuZWVkZWQgZm9yIFZlZ2FzLgorICogQmFzaWNhbGx5IHdlOgorICogICBvIG1pbi1maWx0ZXIgUlRUIHNhbXBsZXMgZnJvbSB3aXRoaW4gYW4gUlRUIHRvIGdldCB0aGUgY3VycmVudAorICogICAgIHByb3BhZ2F0aW9uIGRlbGF5ICsgcXVldWluZyBkZWxheSAod2UgYXJlIG1pbi1maWx0ZXJpbmcgdG8gdHJ5IHRvCisgKiAgICAgYXZvaWQgdGhlIGVmZmVjdHMgb2YgZGVsYXllZCBBQ0tzKQorICogICBvIG1pbi1maWx0ZXIgUlRUIHNhbXBsZXMgZnJvbSBhIG11Y2ggbG9uZ2VyIHdpbmRvdyAoZm9yZXZlciBmb3Igbm93KQorICogICAgIHRvIGZpbmQgdGhlIHByb3BhZ2F0aW9uIGRlbGF5IChiYXNlUlRUKQorICovCitzdGF0aWMgdm9pZCB0Y3BfY29tcG91bmRfcnR0X2NhbGMoc3RydWN0IHNvY2sgKnNrLCB1MzIgdXNydHQpCit7CisJc3RydWN0IGNvbXBvdW5kICp2ZWdhcyA9IGluZXRfY3NrX2NhKHNrKTsKKwl1MzIgdnJ0dCA9IHVzcnR0ICsgMTsJLyogTmV2ZXIgYWxsb3cgemVybyBydHQgb3IgYmFzZVJUVCAqLworCisJLyogRmlsdGVyIHRvIGZpbmQgcHJvcGFnYXRpb24gZGVsYXk6ICovCisJaWYgKHZydHQgPCB2ZWdhcy0+YmFzZVJUVCkKKwkJdmVnYXMtPmJhc2VSVFQgPSB2cnR0OworCisJLyogRmluZCB0aGUgbWluIFJUVCBkdXJpbmcgdGhlIGxhc3QgUlRUIHRvIGZpbmQKKwkgKiB0aGUgY3VycmVudCBwcm9wLiBkZWxheSArIHF1ZXVpbmcgZGVsYXk6CisJICovCisKKwl2ZWdhcy0+bWluUlRUID0gbWluKHZlZ2FzLT5taW5SVFQsIHZydHQpOworCXZlZ2FzLT5jbnRSVFQrKzsKK30KKworc3RhdGljIHZvaWQgdGNwX2NvbXBvdW5kX3N0YXRlKHN0cnVjdCBzb2NrICpzaywgdTggY2Ffc3RhdGUpCit7CisKKwlpZiAoY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pCisJCXZlZ2FzX2VuYWJsZShzayk7CisJZWxzZQorCQl2ZWdhc19kaXNhYmxlKHNrKTsKK30KKworCisvKiA2NGJpdCBkaXZpc29yLCBkaXZpZGVuZCBhbmQgcmVzdWx0LiBkeW5hbWljIHByZWNpc2lvbiAqLworc3RhdGljIGlubGluZSB1NjQgZGl2NjRfNjQodTY0IGRpdmlkZW5kLCB1NjQgZGl2aXNvcikKK3sKKwl1MzIgZCA9IGRpdmlzb3I7CisKKwlpZiAoZGl2aXNvciA+IDB4ZmZmZmZmZmZVTEwpIHsKKwkJdW5zaWduZWQgaW50IHNoaWZ0ID0gZmxzKGRpdmlzb3IgPj4gMzIpOworCisJCWQgPSBkaXZpc29yID4+IHNoaWZ0OworCQlkaXZpZGVuZCA+Pj0gc2hpZnQ7CisJfQorCisJLyogYXZvaWQgNjQgYml0IGRpdmlzaW9uIGlmIHBvc3NpYmxlICovCisJaWYgKGRpdmlkZW5kID4+IDMyKQorCQlkb19kaXYoZGl2aWRlbmQsIGQpOworCWVsc2UKKwkJZGl2aWRlbmQgPSAodTMyKSBkaXZpZGVuZCAvIGQ7CisKKwlyZXR1cm4gZGl2aWRlbmQ7Cit9CisKKy8qIGNhbGN1bGF0ZSB0aGUgcXVhcnRpYyByb290IG9mICJhIiB1c2luZyBOZXd0b24tUmFwaHNvbiAqLworc3RhdGljIHUzMiBxcm9vdCh1NjQgYSkKK3sKKwl1MzIgeCwgeDE7CisKKwkvKiBJbml0aWFsIGVzdGltYXRlIGlzIGJhc2VkIG9uOgorCSAqIHFydCh4KSA9IGV4cChsb2coeCkgLyA0KQorCSAqLworCXggPSAxdSA8PCAoZmxzNjQoYSkgPj4gMik7CisKKwkvKgorCSAqIEl0ZXJhdGlvbiBiYXNlZCBvbjoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAzCisJICogeCAgICA9ICggMyAqIHggICsgIGEgLyB4ICApIC8gNAorCSAqICBrKzEgICAgICAgICAgayAgICAgICAgIGsKKwkgKi8KKwlkbyB7CisJCXU2NCB4MyA9IHg7CisKKwkJeDEgPSB4OworCQl4MyAqPSB4OworCQl4MyAqPSB4OworCisJCXggPSAoMyAqIHggKyAodTMyKSBkaXY2NF82NChhLCB4MykpIC8gNDsKKwl9IHdoaWxlIChhYnMoeDEgLSB4KSA+IDEpOworCisJcmV0dXJuIHg7Cit9CisKKworLyoKKyAqIElmIHRoZSBjb25uZWN0aW9uIGlzIGlkbGUgYW5kIHdlIGFyZSByZXN0YXJ0aW5nLAorICogdGhlbiB3ZSBkb24ndCB3YW50IHRvIGRvIGFueSBWZWdhcyBjYWxjdWxhdGlvbnMKKyAqIHVudGlsIHdlIGdldCBmcmVzaCBSVFQgc2FtcGxlcy4gIFNvIHdoZW4gd2UKKyAqIHJlc3RhcnQsIHdlIHJlc2V0IG91ciBWZWdhcyBzdGF0ZSB0byBhIGNsZWFuCisgKiBzbGF0ZS4gQWZ0ZXIgd2UgZ2V0IGFja3MgZm9yIHRoaXMgZmxpZ2h0IG9mCisgKiBwYWNrZXRzLCBfdGhlbl8gd2UgY2FuIG1ha2UgVmVnYXMgY2FsY3VsYXRpb25zCisgKiBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQgdGNwX2NvbXBvdW5kX2N3bmRfZXZlbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldmVudCkKK3sKKwlpZiAoZXZlbnQgPT0gQ0FfRVZFTlRfQ1dORF9SRVNUQVJUIHx8IGV2ZW50ID09IENBX0VWRU5UX1RYX1NUQVJUKQorCQl0Y3BfY29tcG91bmRfaW5pdChzayk7Cit9CisKK3N0YXRpYyB2b2lkIHRjcF9jb21wb3VuZF9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywKKwkJCQkgICAgdTMyIHNlcV9ydHQsIHUzMiBpbl9mbGlnaHQsIGludCBmbGFnKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBjb21wb3VuZCAqdmVnYXMgPSBpbmV0X2Nza19jYShzayk7CisJdTggaW5jID0gMDsKKworCWlmICh2ZWdhcy0+Y3duZCArIHZlZ2FzLT5kd25kID4gdHAtPnNuZF9jd25kKSB7CisJCWlmICh2ZWdhcy0+Y3duZCA+IHRwLT5zbmRfY3duZCB8fCB2ZWdhcy0+ZHduZCA+IHRwLT5zbmRfY3duZCkgeworCQkJdmVnYXMtPmN3bmQgPSB0cC0+c25kX2N3bmQ7CisJCQl2ZWdhcy0+ZHduZCA9IDA7CisJCX0gZWxzZQorCQkJdmVnYXMtPmN3bmQgPSB0cC0+c25kX2N3bmQgLSB2ZWdhcy0+ZHduZDsKKworCX0KKworCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKKwkJcmV0dXJuOworCisJaWYgKHZlZ2FzLT5jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCWluYyA9IDE7CisJZWxzZSBpZiAodHAtPnNuZF9jd25kX2NudCA8IHRwLT5zbmRfY3duZCkKKwkJdHAtPnNuZF9jd25kX2NudCsrOworCisJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7CisJCWluYyA9IDE7CisJCXRwLT5zbmRfY3duZF9jbnQgPSAwOworCX0KKworCWlmIChpbmMgJiYgdHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQl2ZWdhcy0+Y3duZCsrOworCisJLyogVGhlIGtleSBwbGF5ZXJzIGFyZSB2X2JlZ19zbmRfdW5hIGFuZCB2X2JlZ19zbmRfbnh0LgorCSAqCisJICogVGhlc2UgYXJlIHNvIG5hbWVkIGJlY2F1c2UgdGhleSByZXByZXNlbnQgdGhlIGFwcHJveGltYXRlIHZhbHVlcworCSAqIG9mIHNuZF91bmEgYW5kIHNuZF9ueHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBSVFQuIE1vcmUKKwkgKiBwcmVjaXNlbHksIHRoZXkgcmVwcmVzZW50IHRoZSBhbW91bnQgb2YgZGF0YSBzZW50IGR1cmluZyB0aGUgUlRULgorCSAqIEF0IHRoZSBlbmQgb2YgdGhlIFJUVCwgd2hlbiB3ZSByZWNlaXZlIGFuIEFDSyBmb3Igdl9iZWdfc25kX254dCwKKwkgKiB3ZSB3aWxsIGNhbGN1bGF0ZSB0aGF0ICh2X2JlZ19zbmRfbnh0IC0gdl9iZWdfc25kX3VuYSkgb3V0c3RhbmRpbmcKKwkgKiBieXRlcyBvZiBkYXRhIGhhdmUgYmVlbiBBQ0tlZCBkdXJpbmcgdGhlIGNvdXJzZSBvZiB0aGUgUlRULCBnaXZpbmcKKwkgKiBhbiAiYWN0dWFsIiByYXRlIG9mOgorCSAqCisJICogICAgICh2X2JlZ19zbmRfbnh0IC0gdl9iZWdfc25kX3VuYSkgLyAocnR0IGR1cmF0aW9uKQorCSAqCisJICogVW5mb3J0dW5hdGVseSwgdl9iZWdfc25kX3VuYSBpcyBub3QgZXhhY3RseSBlcXVhbCB0byBzbmRfdW5hLAorCSAqIGJlY2F1c2UgZGVsYXllZCBBQ0tzIGNhbiBjb3ZlciBtb3JlIHRoYW4gb25lIHNlZ21lbnQsIHNvIHRoZXkKKwkgKiBkb24ndCBsaW5lIHVwIG5pY2VseSB3aXRoIHRoZSBib3VuZGFyaWVzIG9mIFJUVHMuCisJICoKKwkgKiBBbm90aGVyIHVuZm9ydHVuYXRlIGZhY3Qgb2YgbGlmZSBpcyB0aGF0IGRlbGF5ZWQgQUNLcyBkZWxheSB0aGUKKwkgKiBhZHZhbmNlIG9mIHRoZSBsZWZ0IGVkZ2Ugb2Ygb3VyIHNlbmQgd2luZG93LCBzbyB0aGF0IHRoZSBudW1iZXIKKwkgKiBvZiBieXRlcyB3ZSBzZW5kIGluIGFuIFJUVCBpcyBvZnRlbiBsZXNzIHRoYW4gb3VyIGN3bmQgd2lsbCBhbGxvdy4KKwkgKiBTbyB3ZSBrZWVwIHRyYWNrIG9mIG91ciBjd25kIHNlcGFyYXRlbHksIGluIHZfYmVnX3NuZF9jd25kLgorCSAqLworCisJaWYgKGFmdGVyKGFjaywgdmVnYXMtPmJlZ19zbmRfbnh0KSkgeworCQkvKiBEbyB0aGUgVmVnYXMgb25jZS1wZXItUlRUIGN3bmQgYWRqdXN0bWVudC4gKi8KKwkJdTMyIG9sZF93bmQsIG9sZF9zbmRfY3duZDsKKworCQkvKiBIZXJlIG9sZF93bmQgaXMgZXNzZW50aWFsbHkgdGhlIHdpbmRvdyBvZiBkYXRhIHRoYXQgd2FzCisJCSAqIHNlbnQgZHVyaW5nIHRoZSBwcmV2aW91cyBSVFQsIGFuZCBoYXMgYWxsCisJCSAqIGJlZW4gYWNrbm93bGVkZ2VkIGluIHRoZSBjb3Vyc2Ugb2YgdGhlIFJUVCB0aGF0IGVuZGVkCisJCSAqIHdpdGggdGhlIEFDSyB3ZSBqdXN0IHJlY2VpdmVkLiBMaWtld2lzZSwgb2xkX3NuZF9jd25kCisJCSAqIGlzIHRoZSBjd25kIGR1cmluZyB0aGUgcHJldmlvdXMgUlRULgorCQkgKi8KKwkJaWYgKCF0cC0+bXNzX2NhY2hlKQorCQkJcmV0dXJuOworCisJCW9sZF93bmQgPSAodmVnYXMtPmJlZ19zbmRfbnh0IC0gdmVnYXMtPmJlZ19zbmRfdW5hKSAvCisJCSAgICB0cC0+bXNzX2NhY2hlOworCQlvbGRfc25kX2N3bmQgPSB2ZWdhcy0+YmVnX3NuZF9jd25kOworCisJCS8qIFNhdmUgdGhlIGV4dGVudCBvZiB0aGUgY3VycmVudCB3aW5kb3cgc28gd2UgY2FuIHVzZSB0aGlzCisJCSAqIGF0IHRoZSBlbmQgb2YgdGhlIG5leHQgUlRULgorCQkgKi8KKwkJdmVnYXMtPmJlZ19zbmRfdW5hID0gdmVnYXMtPmJlZ19zbmRfbnh0OworCQl2ZWdhcy0+YmVnX3NuZF9ueHQgPSB0cC0+c25kX254dDsKKwkJdmVnYXMtPmJlZ19zbmRfY3duZCA9IHRwLT5zbmRfY3duZDsKKworCQkvKiBXZSBkbyB0aGUgVmVnYXMgY2FsY3VsYXRpb25zIG9ubHkgaWYgd2UgZ290IGVub3VnaCBSVFQKKwkJICogc2FtcGxlcyB0aGF0IHdlIGNhbiBiZSByZWFzb25hYmx5IHN1cmUgdGhhdCB3ZSBnb3QKKwkJICogYXQgbGVhc3Qgb25lIFJUVCBzYW1wbGUgdGhhdCB3YXNuJ3QgZnJvbSBhIGRlbGF5ZWQgQUNLLgorCQkgKiBJZiB3ZSBvbmx5IGhhZCAyIHNhbXBsZXMgdG90YWwsCisJCSAqIHRoZW4gdGhhdCBtZWFucyB3ZSdyZSBnZXR0aW5nIG9ubHkgMSBBQ0sgcGVyIFJUVCwgd2hpY2gKKwkJICogbWVhbnMgdGhleSdyZSBhbG1vc3QgY2VydGFpbmx5IGRlbGF5ZWQgQUNLcy4KKwkJICogSWYgIHdlIGhhdmUgMyBzYW1wbGVzLCB3ZSBzaG91bGQgYmUgT0suCisJCSAqLworCisJCWlmICh2ZWdhcy0+Y250UlRUID4gMikgeworCQkJdTMyIHJ0dCwgdGFyZ2V0X2N3bmQsIGRpZmY7CisJCQl1MzIgYnJ0dCwgZHduZDsKKworCQkJLyogV2UgaGF2ZSBlbm91Z2ggUlRUIHNhbXBsZXMsIHNvLCB1c2luZyB0aGUgVmVnYXMKKwkJCSAqIGFsZ29yaXRobSwgd2UgZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBpbmNyZWFzZSBvcgorCQkJICogZGVjcmVhc2UgY3duZCwgYW5kIGJ5IGhvdyBtdWNoLgorCQkJICovCisKKwkJCS8qIFBsdWNrIG91dCB0aGUgUlRUIHdlIGFyZSB1c2luZyBmb3IgdGhlIFZlZ2FzCisJCQkgKiBjYWxjdWxhdGlvbnMuIFRoaXMgaXMgdGhlIG1pbiBSVFQgc2VlbiBkdXJpbmcgdGhlCisJCQkgKiBsYXN0IFJUVC4gVGFraW5nIHRoZSBtaW4gZmlsdGVycyBvdXQgdGhlIGVmZmVjdHMKKwkJCSAqIG9mIGRlbGF5ZWQgQUNLcywgYXQgdGhlIGNvc3Qgb2Ygbm90aWNpbmcgY29uZ2VzdGlvbgorCQkJICogYSBiaXQgbGF0ZXIuCisJCQkgKi8KKwkJCXJ0dCA9IHZlZ2FzLT5taW5SVFQ7CisKKwkJCS8qIENhbGN1bGF0ZSB0aGUgY3duZCB3ZSBzaG91bGQgaGF2ZSwgaWYgd2Ugd2VyZW4ndAorCQkJICogZ29pbmcgdG9vIGZhc3QuCisJCQkgKgorCQkJICogVGhpcyBpczoKKwkJCSAqICAgICAoYWN0dWFsIHJhdGUgaW4gc2VnbWVudHMpICogYmFzZVJUVAorCQkJICogV2Uga2VlcCBpdCBhcyBhIGZpeGVkIHBvaW50IG51bWJlciB3aXRoCisJCQkgKiBWX1BBUkFNX1NISUZUIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBiaW5hcnkgcG9pbnQuCisJCQkgKi8KKwkJCWlmICghcnR0KQorCQkJCXJldHVybjsKKworCQkJYnJ0dCA9IHZlZ2FzLT5iYXNlUlRUOworCQkJdGFyZ2V0X2N3bmQgPSAoKG9sZF93bmQgKiBicnR0KQorCQkJCSAgICAgICA8PCBWX1BBUkFNX1NISUZUKSAvIHJ0dDsKKworCQkJLyogQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpbmRvdyB3ZSBoYWQsCisJCQkgKiBhbmQgdGhlIHdpbmRvdyB3ZSB3b3VsZCBsaWtlIHRvIGhhdmUuIFRoaXMgcXVhbnRpdHkKKwkJCSAqIGlzIHRoZSAiRGlmZiIgZnJvbSB0aGUgQXJpem9uYSBWZWdhcyBwYXBlcnMuCisJCQkgKgorCQkJICogQWdhaW4sIHRoaXMgaXMgYSBmaXhlZCBwb2ludCBudW1iZXIgd2l0aAorCQkJICogVl9QQVJBTV9TSElGVCBiaXRzIHRvIHRoZSByaWdodCBvZiB0aGUgYmluYXJ5CisJCQkgKiBwb2ludC4KKwkJCSAqLworCisJCQlkaWZmID0gKG9sZF93bmQgPDwgVl9QQVJBTV9TSElGVCkgLSB0YXJnZXRfY3duZDsKKworCQkJZHduZCA9IHZlZ2FzLT5kd25kOworCisJCQlpZiAoZGlmZiA8IChUQ1BfQ09NUE9VTkRfR0FNTUEgPDwgVl9QQVJBTV9TSElGVCkpIHsKKwkJCQl1NjQgdjsKKwkJCQl1MzIgeDsKKworCQkJCS8qCisJCQkJICogVGhlIFRDUCBDb21wb3VuZCBwYXBlciBkZXNjcmliZXMgdGhlIGNob2ljZQorCQkJCSAqIG9mICJrIiBkZXRlcm1pbmVzIHRoZSBhZ3Jlc3NpdmVuZXNzLAorCQkJCSAqIGllLiBzbG9wZSBvZiB0aGUgcmVzcG9uc2UgZnVuY3Rpb24uCisJCQkJICoKKwkJCQkgKiBGb3Igc2FtZSB2YWx1ZSBhcyBIU1RDUCB3b3VsZCBiZSAwLjgKKwkJCQkgKiBidXQgZm9yIGNvbXB1dGFpb25hbCByZWFzb25zLCBib3RoIHRoZQorCQkJCSAqIG9yaWdpbmFsIGF1dGhvcnMgYW5kIHRoaXMgaW1wbGVtZW50YXRpb24KKwkJCQkgKiB1c2UgMC43NS4KKwkJCQkgKi8KKwkJCQl2ID0gb2xkX3duZDsKKwkJCQl4ID0gcXJvb3QodiAqIHYgKiB2KSA+PiBUQ1BfQ09NUE9VTkRfQUxQSEE7CisJCQkJaWYgKHggPiAxKQorCQkJCQlkd25kID0geCAtIDE7CisJCQkJZWxzZQorCQkJCQlkd25kID0gMDsKKworCQkJCWR3bmQgKz0gdmVnYXMtPmR3bmQ7CisKKwkJCX0gZWxzZSBpZiAoKGR3bmQgPDwgVl9QQVJBTV9TSElGVCkgPAorCQkJCSAgIChkaWZmICogVENQX0NPTVBPVU5EX0JFVEEpKQorCQkJCWR3bmQgPSAwOworCQkJZWxzZQorCQkJCWR3bmQgPQorCQkJCSAgICAoKGR3bmQgPDwgVl9QQVJBTV9TSElGVCkgLQorCQkJCSAgICAgKGRpZmYgKgorCQkJCSAgICAgIFRDUF9DT01QT1VORF9CRVRBKSkgPj4gVl9QQVJBTV9TSElGVDsKKworCQkJdmVnYXMtPmR3bmQgPSBkd25kOworCisJCX0KKworCQkvKiBXaXBlIHRoZSBzbGF0ZSBjbGVhbiBmb3IgdGhlIG5leHQgUlRULiAqLworCQl2ZWdhcy0+Y250UlRUID0gMDsKKwkJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7CisJfQorCisJdHAtPnNuZF9jd25kID0gdmVnYXMtPmN3bmQgKyB2ZWdhcy0+ZHduZDsKK30KKworLyogRXh0cmFjdCBpbmZvIGZvciBUY3Agc29ja2V0IGluZm8gcHJvdmlkZWQgdmlhIG5ldGxpbmsuICovCitzdGF0aWMgdm9pZCB0Y3BfY29tcG91bmRfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCB1MzIgZXh0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBjb21wb3VuZCAqY2EgPSBpbmV0X2Nza19jYShzayk7CisJaWYgKGV4dCAmICgxIDw8IChJTkVUX0RJQUdfVkVHQVNJTkZPIC0gMSkpKSB7CisJCXN0cnVjdCB0Y3B2ZWdhc19pbmZvICppbmZvOworCisJCWluZm8gPSBSVEFfREFUQShfX1JUQV9QVVQoc2tiLCBJTkVUX0RJQUdfVkVHQVNJTkZPLAorCQkJCQkgIHNpemVvZigqaW5mbykpKTsKKworCQlpbmZvLT50Y3B2X2VuYWJsZWQgPSBjYS0+ZG9pbmdfdmVnYXNfbm93OworCQlpbmZvLT50Y3B2X3J0dGNudCA9IGNhLT5jbnRSVFQ7CisJCWluZm8tPnRjcHZfcnR0ID0gY2EtPmJhc2VSVFQ7CisJCWluZm8tPnRjcHZfbWlucnR0ID0gY2EtPm1pblJUVDsKKwlydGF0dHJfZmFpbHVyZTo7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfY29tcG91bmQgPSB7CisJLmluaXQJCT0gdGNwX2NvbXBvdW5kX2luaXQsCisJLnNzdGhyZXNoCT0gdGNwX3Jlbm9fc3N0aHJlc2gsCisJLmNvbmdfYXZvaWQJPSB0Y3BfY29tcG91bmRfY29uZ19hdm9pZCwKKwkucnR0X3NhbXBsZQk9IHRjcF9jb21wb3VuZF9ydHRfY2FsYywKKwkuc2V0X3N0YXRlCT0gdGNwX2NvbXBvdW5kX3N0YXRlLAorCS5jd25kX2V2ZW50CT0gdGNwX2NvbXBvdW5kX2N3bmRfZXZlbnQsCisJLmdldF9pbmZvCT0gdGNwX2NvbXBvdW5kX2dldF9pbmZvLAorCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJjb21wb3VuZCIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0Y3BfY29tcG91bmRfcmVnaXN0ZXIodm9pZCkKK3sKKwlCVUdfT04oc2l6ZW9mKHN0cnVjdCBjb21wb3VuZCkgPiBJQ1NLX0NBX1BSSVZfU0laRSk7CisJdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmdGNwX2NvbXBvdW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRjcF9jb21wb3VuZF91bnJlZ2lzdGVyKHZvaWQpCit7CisJdGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKCZ0Y3BfY29tcG91bmQpOworfQorCittb2R1bGVfaW5pdCh0Y3BfY29tcG91bmRfcmVnaXN0ZXIpOworbW9kdWxlX2V4aXQodGNwX2NvbXBvdW5kX3VucmVnaXN0ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBbmdlbG8gUC4gQ2FzdGVsbGFuaSwgU3RlcGhlbiBIZW1taW5nZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVENQIENvbXBvdW5kIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCA5MWMyZjQxLi44NTdlZWZjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCS8qIGFsbCBhbGdvcml0aG1zIG11c3QgaW1wbGVtZW50IHNzdGhyZXNoIGFuZCBjb25nX2F2b2lkIG9wcyAqLwotCWlmICghY2EtPnNzdGhyZXNoIHx8ICFjYS0+Y29uZ19hdm9pZCB8fCAhY2EtPm1pbl9jd25kKSB7CisJaWYgKCFjYS0+c3N0aHJlc2ggfHwgIWNhLT5jb25nX2F2b2lkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVENQICVzIGRvZXMgbm90IGltcGxlbWVudCByZXF1aXJlZCBvcHNcbiIsCiAJCSAgICAgICBjYS0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjUxLDggKzI1MSw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub19zc3RocmVzaCk7CiAKLS8qIExvd2VyIGJvdW5kIG9uIGNvbmdlc3Rpb24gd2luZG93LiAqLwotdTMyIHRjcF9yZW5vX21pbl9jd25kKHN0cnVjdCBzb2NrICpzaykKKy8qIExvd2VyIGJvdW5kIG9uIGNvbmdlc3Rpb24gd2luZG93IHdpdGggaGFsdmluZy4gKi8KK3UzMiB0Y3BfcmVub19taW5fY3duZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJcmV0dXJuIHRwLT5zbmRfc3N0aHJlc2gvMjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jdWJpYy5jIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKaW5kZXggMzFhNDk4Ni4uNzhiN2E2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2N1YmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTMyNSwxMSArMzI1LDYgQEAKIAlyZXR1cm4gbWF4KHRjcF9zayhzayktPnNuZF9jd25kLCBjYS0+bGFzdF9tYXhfY3duZCk7CiB9CiAKLXN0YXRpYyB1MzIgYmljdGNwX21pbl9jd25kKHN0cnVjdCBzb2NrICpzaykKLXsKLQlyZXR1cm4gdGNwX3NrKHNrKS0+c25kX3NzdGhyZXNoOwotfQotCiBzdGF0aWMgdm9pZCBiaWN0Y3Bfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpCiB7CiAJaWYgKG5ld19zdGF0ZSA9PSBUQ1BfQ0FfTG9zcykKQEAgLTM1Nyw3ICszNTIsNiBAQAogCS5jb25nX2F2b2lkCT0gYmljdGNwX2NvbmdfYXZvaWQsCiAJLnNldF9zdGF0ZQk9IGJpY3RjcF9zdGF0ZSwKIAkudW5kb19jd25kCT0gYmljdGNwX3VuZG9fY3duZCwKLQkubWluX2N3bmQJPSBiaWN0Y3BfbWluX2N3bmQsCiAJLnBrdHNfYWNrZWQgICAgID0gYmljdGNwX2Fja2VkLAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiY3ViaWMiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCmluZGV4IGI3MmZhNTUuLjExMjAyNDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYworKysgYi9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKQEAgLTk4LDYgKzk4LDEwIEBACiAJdTMyCWFpOwogfTsKIAorc3RhdGljIGludCBtYXhfc3N0aHJlc2ggPSAxMDA7Cittb2R1bGVfcGFyYW0obWF4X3NzdGhyZXNoLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfc3N0aHJlc2gsICJsaW1pdGVkIHNsb3cgc3RhcnQgdGhyZXNob2xkIChSRkMzNzQyKSIpOworCiBzdGF0aWMgdm9pZCBoc3RjcF9pbml0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTExOSw5ICsxMjMsMjMgQEAKIAlpZiAoIXRjcF9pc19jd25kX2xpbWl0ZWQoc2ssIGluX2ZsaWdodCkpCiAJCXJldHVybjsKIAotCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKLQkJdGNwX3Nsb3dfc3RhcnQodHApOwotCWVsc2UgeworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgeworCQkvKiBSRkMzNzQyOiBsaW1pdGVkIHNsb3cgc3RhcnQKKwkJICogdGhlIHdpbmRvdyBpcyBpbmNyZWFzZWQgYnkgMS9LIE1TUyBmb3IgZWFjaCBhcnJpdmluZyBBQ0ssCisJCSAqIGZvciBLID0gaW50KGN3bmQvKDAuNSBtYXhfc3N0aHJlc2gpKQorCQkgKi8KKwkJaWYgKG1heF9zc3RocmVzaCA+IDAgJiYgdHAtPnNuZF9jd25kID4gbWF4X3NzdGhyZXNoKSB7CisJCQl1MzIgayA9IG1heCh0cC0+c25kX2N3bmQgLyAobWF4X3NzdGhyZXNoID4+IDEpLCAxVSk7CisJCQlpZiAoKyt0cC0+c25kX2N3bmRfY250ID49IGspIHsKKwkJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQkJCQl0cC0+c25kX2N3bmQrKzsKKwkJCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJdHAtPnNuZF9jd25kKys7CisJCX0KKwl9IGVsc2UgewogCQkvKiBVcGRhdGUgQUlNRCBwYXJhbWV0ZXJzICovCiAJCWlmICh0cC0+c25kX2N3bmQgPiBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kKSB7CiAJCQl3aGlsZSAodHAtPnNuZF9jd25kID4gaHN0Y3BfYWltZF92YWxzW2NhLT5haV0uY3duZCAmJgpAQCAtMTM1LDcgKzE1Myw4IEBACiAKIAkJLyogRG8gYWRkaXRpdmUgaW5jcmVhc2UgKi8KIAkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkgewotCQkJdHAtPnNuZF9jd25kX2NudCArPSBjYS0+YWk7CisJCQkvKiBjd25kID0gY3duZCArIGEodykgLyBjd25kICovCisJCQl0cC0+c25kX2N3bmRfY250ICs9IGNhLT5haSArIDE7CiAJCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKIAkJCQl0cC0+c25kX2N3bmRfY250IC09IHRwLT5zbmRfY3duZDsKIAkJCQl0cC0+c25kX2N3bmQrKzsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9odGNwLmMgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCmluZGV4IDFiMmZmNTMuLjNkOTJjMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9odGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwpAQCAtMjQ2LDE0ICsyNDYsNiBAQAogCX0KIH0KIAotLyogTG93ZXIgYm91bmQgb24gY29uZ2VzdGlvbiB3aW5kb3cuICovCi1zdGF0aWMgdTMyIGh0Y3BfbWluX2N3bmQoc3RydWN0IHNvY2sgKnNrKQotewotCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCXJldHVybiB0cC0+c25kX3NzdGhyZXNoOwotfQotCi0KIHN0YXRpYyB2b2lkIGh0Y3BfaW5pdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGh0Y3AgKmNhID0gaW5ldF9jc2tfY2Eoc2spOwpAQCAtMjg1LDcgKzI3Nyw2IEBACiBzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyBodGNwID0gewogCS5pbml0CQk9IGh0Y3BfaW5pdCwKIAkuc3N0aHJlc2gJPSBodGNwX3JlY2FsY19zc3RocmVzaCwKLQkubWluX2N3bmQJPSBodGNwX21pbl9jd25kLAogCS5jb25nX2F2b2lkCT0gaHRjcF9jb25nX2F2b2lkLAogCS5zZXRfc3RhdGUJPSBodGNwX3N0YXRlLAogCS51bmRvX2N3bmQJPSBodGNwX2N3bmRfdW5kbywKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggNGE1MzhiYy4uZTA4MjQ1YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KICNpbmNsdWRlIDxsaW51eC9pcHNlYy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZG1hLmg+CiAKIGludCBzeXNjdGxfdGNwX3RpbWVzdGFtcHMgPSAxOwogaW50IHN5c2N0bF90Y3Bfd2luZG93X3NjYWxpbmcgPSAxOwpAQCAtMTY0OSw3ICsxNjUwLDcgQEAKIAkgKiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cyBkdXJpbmcgZmFzdAogCSAqIHJldHJhbnNtaXQgd2l0aG91dCBmYWxsaW5nIHRvIHNsb3cgc3RhcnQuCiAJICovCi0JaWYgKHRjcF9oZWFkX3RpbWVkb3V0KHNrLCB0cCkpIHsKKwlpZiAoIUlzUmVubyh0cCkgJiYgdGNwX2hlYWRfdGltZWRvdXQoc2ssIHRwKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCXNrYiA9IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID8gdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQKQEAgLTE2NjIsOCArMTY2Myw2IEBACiAJCQlpZiAoIShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCZUQ1BDQl9UQUdCSVRTKSkgewogCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkIHw9IFRDUENCX0xPU1Q7CiAJCQkJdHAtPmxvc3Rfb3V0ICs9IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCQkJaWYgKElzUmVubyh0cCkpCi0JCQkJCXRjcF9yZW1vdmVfcmVub19zYWNrcyhzaywgdHAsIHRjcF9za2JfcGNvdW50KHNrYikgKyAxKTsKIAogCQkJCS8qIGNsZWFyIHhtaXRfcmV0cmFucyBoaW50ICovCiAJCQkJaWYgKHRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ICYmCkBAIC0xNjkwLDE3ICsxNjg5LDI2IEBACiAJdHAtPnNuZF9jd25kX3N0YW1wID0gdGNwX3RpbWVfc3RhbXA7CiB9CiAKKy8qIExvd2VyIGJvdW5kIG9uIGNvbmdlc3Rpb24gd2luZG93IGlzIHNsb3cgc3RhcnQgdGhyZXNob2xkCisgKiB1bmxlc3MgY29uZ2VzdGlvbiBhdm9pZGFuY2UgY2hvaWNlIGRlY2lkZXMgdG8gb3ZlcmlkZSBpdC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgdGNwX2N3bmRfbWluKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYV9vcHMgPSBpbmV0X2NzayhzayktPmljc2tfY2Ffb3BzOworCisJcmV0dXJuIGNhX29wcy0+bWluX2N3bmQgPyBjYV9vcHMtPm1pbl9jd25kKHNrKSA6IHRjcF9zayhzayktPnNuZF9zc3RocmVzaDsKK30KKwogLyogRGVjcmVhc2UgY3duZCBlYWNoIHNlY29uZCBhY2suICovCiBzdGF0aWMgdm9pZCB0Y3BfY3duZF9kb3duKHN0cnVjdCBzb2NrICpzaykKIHsKLQljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJaW50IGRlY3IgPSB0cC0+c25kX2N3bmRfY250ICsgMTsKIAogCXRwLT5zbmRfY3duZF9jbnQgPSBkZWNyJjE7CiAJZGVjciA+Pj0gMTsKIAotCWlmIChkZWNyICYmIHRwLT5zbmRfY3duZCA+IGljc2stPmljc2tfY2Ffb3BzLT5taW5fY3duZChzaykpCisJaWYgKGRlY3IgJiYgdHAtPnNuZF9jd25kID4gdGNwX2N3bmRfbWluKHNrKSkKIAkJdHAtPnNuZF9jd25kIC09IGRlY3I7CiAKIAl0cC0+c25kX2N3bmQgPSBtaW4odHAtPnNuZF9jd25kLCB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApKzEpOwpAQCAtMzc4Nyw2ICszNzk1LDUwIEBACiAJCV9fdGNwX2NoZWNrc3VtX2NvbXBsZXRlX3VzZXIoc2ssIHNrYik7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorc3RhdGljIGludCB0Y3BfZG1hX3RyeV9lYXJseV9jb3B5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhsZW4pCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJaW50IGNodW5rID0gc2tiLT5sZW4gLSBobGVuOworCWludCBkbWFfY29va2llOworCWludCBjb3BpZWRfZWFybHkgPSAwOworCisJaWYgKHRwLT51Y29weS53YWtldXApCisgICAgICAgICAgCXJldHVybiAwOworCisJaWYgKCF0cC0+dWNvcHkuZG1hX2NoYW4gJiYgdHAtPnVjb3B5LnBpbm5lZF9saXN0KQorCQl0cC0+dWNvcHkuZG1hX2NoYW4gPSBnZXRfc29mdG5ldF9kbWEoKTsKKworCWlmICh0cC0+dWNvcHkuZG1hX2NoYW4gJiYgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKworCQlkbWFfY29va2llID0gZG1hX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHRwLT51Y29weS5kbWFfY2hhbiwKKwkJCXNrYiwgaGxlbiwgdHAtPnVjb3B5LmlvdiwgY2h1bmssIHRwLT51Y29weS5waW5uZWRfbGlzdCk7CisKKwkJaWYgKGRtYV9jb29raWUgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJdHAtPnVjb3B5LmRtYV9jb29raWUgPSBkbWFfY29va2llOworCQljb3BpZWRfZWFybHkgPSAxOworCisJCXRwLT51Y29weS5sZW4gLT0gY2h1bms7CisJCXRwLT5jb3BpZWRfc2VxICs9IGNodW5rOworCQl0Y3BfcmN2X3NwYWNlX2FkanVzdChzayk7CisKKwkJaWYgKCh0cC0+dWNvcHkubGVuID09IDApIHx8CisJCSAgICAodGNwX2ZsYWdfd29yZChza2ItPmgudGgpICYgVENQX0ZMQUdfUFNIKSB8fAorCQkgICAgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPiAoc2stPnNrX3JjdmJ1ZiA+PiAxKSkpIHsKKwkJCXRwLT51Y29weS53YWtldXAgPSAxOworCQkJc2stPnNrX2RhdGFfcmVhZHkoc2ssIDApOworCQl9CisJfSBlbHNlIGlmIChjaHVuayA+IDApIHsKKwkJdHAtPnVjb3B5Lndha2V1cCA9IDE7CisJCXNrLT5za19kYXRhX3JlYWR5KHNrLCAwKTsKKwl9CitvdXQ6CisJcmV0dXJuIGNvcGllZF9lYXJseTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTkVUX0RNQSAqLworCiAvKgogICoJVENQIHJlY2VpdmUgZnVuY3Rpb24gZm9yIHRoZSBFU1RBQkxJU0hFRCBzdGF0ZS4gCiAgKgpAQCAtMzg4OCw4ICszOTQwLDYgQEAKIAkJCQkgICAgdHAtPnJjdl9ueHQgPT0gdHAtPnJjdl93dXApCiAJCQkJCXRjcF9zdG9yZV90c19yZWNlbnQodHApOwogCi0JCQkJdGNwX3Jjdl9ydHRfbWVhc3VyZV90cyhzaywgc2tiKTsKLQogCQkJCS8qIFdlIGtub3cgdGhhdCBzdWNoIHBhY2tldHMgYXJlIGNoZWNrc3VtbWVkCiAJCQkJICogb24gZW50cnkuCiAJCQkJICovCkBAIC0zOTAzLDE0ICszOTUzLDIzIEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpbnQgZWF0ZW4gPSAwOworCQkJaW50IGNvcGllZF9lYXJseSA9IDA7CiAKLQkJCWlmICh0cC0+dWNvcHkudGFzayA9PSBjdXJyZW50ICYmCi0JCQkgICAgdHAtPmNvcGllZF9zZXEgPT0gdHAtPnJjdl9ueHQgJiYKLQkJCSAgICBsZW4gLSB0Y3BfaGVhZGVyX2xlbiA8PSB0cC0+dWNvcHkubGVuICYmCi0JCQkgICAgc29ja19vd25lZF9ieV91c2VyKHNrKSkgewotCQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCWlmICh0cC0+Y29waWVkX3NlcSA9PSB0cC0+cmN2X254dCAmJgorCQkJICAgIGxlbiAtIHRjcF9oZWFkZXJfbGVuIDw9IHRwLT51Y29weS5sZW4pIHsKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCQkJCWlmICh0Y3BfZG1hX3RyeV9lYXJseV9jb3B5KHNrLCBza2IsIHRjcF9oZWFkZXJfbGVuKSkgeworCQkJCQljb3BpZWRfZWFybHkgPSAxOworCQkJCQllYXRlbiA9IDE7CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKHRwLT51Y29weS50YXNrID09IGN1cnJlbnQgJiYgc29ja19vd25lZF9ieV91c2VyKHNrKSAmJiAhY29waWVkX2Vhcmx5KSB7CisJCQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAotCQkJCWlmICghdGNwX2NvcHlfdG9faW92ZWMoc2ssIHNrYiwgdGNwX2hlYWRlcl9sZW4pKSB7CisJCQkJCWlmICghdGNwX2NvcHlfdG9faW92ZWMoc2ssIHNrYiwgdGNwX2hlYWRlcl9sZW4pKQorCQkJCQkJZWF0ZW4gPSAxOworCQkJCX0KKwkJCQlpZiAoZWF0ZW4pIHsKIAkJCQkJLyogUHJlZGljdGVkIHBhY2tldCBpcyBpbiB3aW5kb3cgYnkgZGVmaW5pdGlvbi4KIAkJCQkJICogc2VxID09IHJjdl9ueHQgYW5kIHJjdl93dXAgPD0gcmN2X254dC4KIAkJCQkJICogSGVuY2UsIGNoZWNrIHNlcTw9cmN2X3d1cCByZWR1Y2VzIHRvOgpAQCAtMzkyNiw4ICszOTg1LDkgQEAKIAkJCQkJX19za2JfcHVsbChza2IsIHRjcF9oZWFkZXJfbGVuKTsKIAkJCQkJdHAtPnJjdl9ueHQgPSBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXE7CiAJCQkJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX1RDUEhQSElUU1RPVVNFUik7Ci0JCQkJCWVhdGVuID0gMTsKIAkJCQl9CisJCQkJaWYgKGNvcGllZF9lYXJseSkKKwkJCQkJdGNwX2NsZWFudXBfcmJ1Zihzaywgc2tiLT5sZW4pOwogCQkJfQogCQkJaWYgKCFlYXRlbikgewogCQkJCWlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGVfdXNlcihzaywgc2tiKSkKQEAgLTM5NjgsNiArNDAyOCwxMSBAQAogCiAJCQlfX3RjcF9hY2tfc25kX2NoZWNrKHNrLCAwKTsKIG5vX2FjazoKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCQkJaWYgKGNvcGllZF9lYXJseSkKKwkJCQlfX3NrYl9xdWV1ZV90YWlsKCZzay0+c2tfYXN5bmNfd2FpdF9xdWV1ZSwgc2tiKTsKKwkJCWVsc2UKKyNlbmRpZgogCQkJaWYgKGVhdGVuKQogCQkJCV9fa2ZyZWVfc2tiKHNrYik7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA2NzI5NTBlLi4yNWVjYzZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KICNpbmNsdWRlIDxuZXQvdGltZXdhaXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CisjaW5jbHVkZSA8bmV0L25ldGRtYS5oPgogCiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KQEAgLTEwOTEsOCArMTA5MiwxOCBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJcmV0ID0gMDsKIAlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKLQkJaWYgKCF0Y3BfcHJlcXVldWUoc2ssIHNrYikpCisjaWZkZWYgQ09ORklHX05FVF9ETUEKKwkJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJCWlmICghdHAtPnVjb3B5LmRtYV9jaGFuICYmIHRwLT51Y29weS5waW5uZWRfbGlzdCkKKwkJCXRwLT51Y29weS5kbWFfY2hhbiA9IGdldF9zb2Z0bmV0X2RtYSgpOworCQlpZiAodHAtPnVjb3B5LmRtYV9jaGFuKQogCQkJcmV0ID0gdGNwX3Y0X2RvX3Jjdihzaywgc2tiKTsKKwkJZWxzZQorI2VuZGlmCisJCXsKKwkJCWlmICghdGNwX3ByZXF1ZXVlKHNrLCBza2IpKQorCQkJcmV0ID0gdGNwX3Y0X2RvX3Jjdihzaywgc2tiKTsKKwkJfQogCX0gZWxzZQogCQlza19hZGRfYmFja2xvZyhzaywgc2tiKTsKIAliaF91bmxvY2tfc29jayhzayk7CkBAIC0xMjk2LDYgKzEzMDcsMTEgQEAKIAkvKiBDbGVhbnMgdXAgb3VyLCBob3BlZnVsbHkgZW1wdHksIG91dF9vZl9vcmRlcl9xdWV1ZS4gKi8KICAgCV9fc2tiX3F1ZXVlX3B1cmdlKCZ0cC0+b3V0X29mX29yZGVyX3F1ZXVlKTsKIAorI2lmZGVmIENPTkZJR19ORVRfRE1BCisJLyogQ2xlYW5zIHVwIG91ciBza19hc3luY193YWl0X3F1ZXVlICovCisgIAlfX3NrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX2FzeW5jX3dhaXRfcXVldWUpOworI2VuZGlmCisKIAkvKiBDbGVhbiBwcmVxdWV1ZSwgaXQgbXVzdCBiZSBlbXB0eSByZWFsbHkgKi8KIAlfX3NrYl9xdWV1ZV9wdXJnZSgmdHAtPnVjb3B5LnByZXF1ZXVlKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2xwLmMgYi9uZXQvaXB2NC90Y3BfbHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjk3N2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvdGNwX2xwLmMKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBUQ1AgTG93IFByaW9yaXR5IChUQ1AtTFApCisgKgorICogVENQIExvdyBQcmlvcml0eSBpcyBhIGRpc3RyaWJ1dGVkIGFsZ29yaXRobSB3aG9zZSBnb2FsIGlzIHRvIHV0aWxpemUgb25seQorICogICB0aGUgZXhjZXNzIG5ldHdvcmsgYmFuZHdpZHRoIGFzIGNvbXBhcmVkIHRvIHRoZSBgYGZhaXIgc2hhcmVgYCBvZgorICogICBiYW5kd2lkdGggYXMgdGFyZ2V0ZWQgYnkgVENQLiBBdmFpbGFibGUgZnJvbToKKyAqICAgICBodHRwOi8vd3d3LmVjZS5yaWNlLmVkdS9+YWt1em1hL0RvYy9ha3V6bWEvVENQLUxQLnBkZgorICoKKyAqIE9yaWdpbmFsIEF1dGhvcjoKKyAqICAgQWxla3NhbmRhciBLdXptYW5vdmljIDxha3V6bWFAbm9ydGh3ZXN0ZXJuLmVkdT4KKyAqCisgKiBTZWUgaHR0cDovL3d3dy1lY2UucmljZS5lZHUvbmV0d29ya3MvVENQLUxQLyBmb3IgdGhlaXIgaW1wbGVtZW50YXRpb24uCisgKiBBcyBvZiAyLjYuMTMsIExpbnV4IHN1cHBvcnRzIHBsdWdnYWJsZSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcy4KKyAqIER1ZSB0byB0aGUgbGltaXRhdGlvbiBvZiB0aGUgQVBJLCB3ZSB0YWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBmcm9tCisgKiB0aGUgb3JpZ2luYWwgVENQLUxQIGltcGxlbWVudGF0aW9uOgorICogICBvIFdlIHVzZSBuZXdSZW5vIGluIG1vc3QgY29yZSBDQSBoYW5kbGluZy4gT25seSBhZGQgc29tZSBjaGVja2luZworICogICAgIHdpdGhpbiBjb25nX2F2b2lkLgorICogICBvIEVycm9yIGNvcnJlY3RpbmcgaW4gcmVtb3RlIEhaLCB0aGVyZWZvcmUgcmVtb3RlIEhaIHdpbGwgYmUga2VlcGVkCisgKiAgICAgb24gY2hlY2tpbmcgYW5kIHVwZGF0aW5nLgorICogICBvIEhhbmRsaW5nIGNhbGN1bGF0aW9uIG9mIE9uZS1XYXktRGVsYXkgKE9XRCkgd2l0aGluIHJ0dF9zYW1wbGUsIHNpY25lCisgKiAgICAgT1dEIGhhdmUgYSBzaW1pbGFyIG1lYW5pbmcgYXMgUlRULiBBbHNvIGNvcnJlY3QgdGhlIGJ1Z2d5IGZvcm11bGFyLgorICogICBvIEhhbmRsZSByZWFjdGlvbiBmb3IgRWFybHkgQ29uZ2VzdGlvbiBJbmRpY2F0aW9uIChFQ0kpIHdpdGhpbgorICogICAgIHBrdHNfYWNrZWQsIGFzIG1lbnRpb25lZCB3aXRoaW4gcHNldWRvIGNvZGUuCisgKiAgIG8gT1dEIGlzIGhhbmRsZWQgaW4gcmVsYXRpdmUgZm9ybWF0LCB3aGVyZSBsb2NhbCB0aW1lIHN0YW1wIHdpbGwgaW4KKyAqICAgICB0Y3BfdGltZV9zdGFtcCBmb3JtYXQuCisgKgorICogUG9ydCBmcm9tIDIuNC4xOSB0byAyLjYuMTYgYXMgbW9kdWxlIGJ5OgorICogICBXb25nIEhvaSBTaW5nIEVkaXNvbiA8aHN3b25nM2lAZ21haWwuY29tPgorICogICBIdW5nIEhpbmcgTHVuIDxobGh1bmczaUBnbWFpbC5jb20+CisgKgorICogVmVyc2lvbjogJElkOiB0Y3BfbHAuYyx2IDEuMjIgMjAwNi0wNS0wMiAxODoxODoxOSBoc3dvbmczaSBFeHAgJAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKy8qIHJlc29sdXRpb24gb2Ygb3dkICovCisjZGVmaW5lIExQX1JFU09MICAgICAgIDEwMDAKKworLyoqCisgKiBlbnVtIHRjcF9scF9zdGF0ZQorICogQExQX1ZBTElEX1JIWjogaXMgcmVtb3RlIEhaIHZhbGlkPworICogQExQX1ZBTElEX09XRDogaXMgT1dEIHZhbGlkPworICogQExQX1dJVEhJTl9USFI6IGFyZSB3ZSB3aXRoaW4gdGhyZXNob2xkPworICogQExQX1dJVEhJTl9JTkY6IGFyZSB3ZSB3aXRoaW4gaW5mZXJlbmNlPworICoKKyAqIFRDUC1MUCdzIHN0YXRlIGZsYWdzLgorICogV2UgY3JlYXRlIHRoaXMgc2V0IG9mIHN0YXRlIGZsYWcgbWFpbmx5IGZvciBkZWJ1Z2dpbmcuCisgKi8KK2VudW0gdGNwX2xwX3N0YXRlIHsKKwlMUF9WQUxJRF9SSFogPSAoMSA8PCAwKSwKKwlMUF9WQUxJRF9PV0QgPSAoMSA8PCAxKSwKKwlMUF9XSVRISU5fVEhSID0gKDEgPDwgMyksCisJTFBfV0lUSElOX0lORiA9ICgxIDw8IDQpLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbHAKKyAqIEBmbGFnOiBUQ1AtTFAgc3RhdGUgZmxhZworICogQHNvd2Q6IHNtb290aGVkIE9XRCA8PCAzCisgKiBAb3dkX21pbjogbWluIE9XRAorICogQG93ZF9tYXg6IG1heCBPV0QKKyAqIEBvd2RfbWF4X3JzdjogcmVzcnZlZCBtYXggb3dkCisgKiBAcmVtb3RlX2h6OiBlc3RpbWF0ZWQgcmVtb3RlIEhaCisgKiBAcmVtb3RlX3JlZl90aW1lOiByZW1vdGUgcmVmZXJlbmNlIHRpbWUKKyAqIEBsb2NhbF9yZWZfdGltZTogbG9jYWwgcmVmZXJlbmNlIHRpbWUKKyAqIEBsYXN0X2Ryb3A6IHRpbWUgZm9yIGxhc3QgYWN0aXZlIGRyb3AKKyAqIEBpbmZlcmVuY2U6IGN1cnJlbnQgaW5mZXJlbmNlCisgKgorICogVENQLUxQJ3MgcHJpdmF0ZSBzdHJ1Y3QuCisgKiBXZSBnZXQgdGhlIGlkZWEgZnJvbSBvcmlnaW5hbCBUQ1AtTFAgaW1wbGVtZW50YXRpb24gd2hlcmUgb25seSBsZWZ0IHRob3NlIHdlCisgKiBmb3VuZCBhcmUgcmVhbGx5IHVzZWZ1bC4KKyAqLworc3RydWN0IGxwIHsKKwl1MzIgZmxhZzsKKwl1MzIgc293ZDsKKwl1MzIgb3dkX21pbjsKKwl1MzIgb3dkX21heDsKKwl1MzIgb3dkX21heF9yc3Y7CisJdTMyIHJlbW90ZV9oejsKKwl1MzIgcmVtb3RlX3JlZl90aW1lOworCXUzMiBsb2NhbF9yZWZfdGltZTsKKwl1MzIgbGFzdF9kcm9wOworCXUzMiBpbmZlcmVuY2U7Cit9OworCisvKioKKyAqIHRjcF9scF9pbml0CisgKgorICogSW5pdCBhbGwgcmVxdWlyZWQgdmFyaWFibGVzLgorICogQ2xvbmUgdGhlIGhhbmRsaW5nIGZyb20gVmVnYXMgbW9kdWxlIGltcGxlbWVudGF0aW9uLgorICovCitzdGF0aWMgdm9pZCB0Y3BfbHBfaW5pdChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGxwICpscCA9IGluZXRfY3NrX2NhKHNrKTsKKworCWxwLT5mbGFnID0gMDsKKwlscC0+c293ZCA9IDA7CisJbHAtPm93ZF9taW4gPSAweGZmZmZmZmZmOworCWxwLT5vd2RfbWF4ID0gMDsKKwlscC0+b3dkX21heF9yc3YgPSAwOworCWxwLT5yZW1vdGVfaHogPSAwOworCWxwLT5yZW1vdGVfcmVmX3RpbWUgPSAwOworCWxwLT5sb2NhbF9yZWZfdGltZSA9IDA7CisJbHAtPmxhc3RfZHJvcCA9IDA7CisJbHAtPmluZmVyZW5jZSA9IDA7Cit9CisKKy8qKgorICogdGNwX2xwX2NvbmdfYXZvaWQKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBjb25nX2F2b2lkLgorICogV2lsbCBvbmx5IGNhbGwgbmV3UmVubyBDQSB3aGVuIGF3YXkgZnJvbSBpbmZlcmVuY2UuCisgKiBGcm9tIFRDUC1MUCdzIHBhcGVyLCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBpbiBhZGRpdGl2ZSBpbmNyZWFzZW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkIHRjcF9scF9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFjaywgdTMyIHJ0dCwgdTMyIGluX2ZsaWdodCwKKwkJCSAgICAgIGludCBmbGFnKQoreworCXN0cnVjdCBscCAqbHAgPSBpbmV0X2Nza19jYShzayk7CisKKwlpZiAoIShscC0+ZmxhZyAmIExQX1dJVEhJTl9JTkYpKQorCQl0Y3BfcmVub19jb25nX2F2b2lkKHNrLCBhY2ssIHJ0dCwgaW5fZmxpZ2h0LCBmbGFnKTsKK30KKworLyoqCisgKiB0Y3BfbHBfcmVtb3RlX2h6X2VzdGltYXRvcgorICoKKyAqIEVzdGltYXRlIHJlbW90ZSBIWi4KKyAqIFdlIGtlZXAgb24gdXBkYXRpbmcgdGhlIGVzdGltYXRlZCB2YWx1ZSwgd2hlcmUgb3JpZ2luYWwgVENQLUxQCisgKiBpbXBsZW1lbnRhdGlvbiBvbmx5IGd1ZXN0IGl0IGZvciBvbmNlIGFuZCB1c2UgZm9yZXZlci4KKyAqLworc3RhdGljIHUzMiB0Y3BfbHBfcmVtb3RlX2h6X2VzdGltYXRvcihzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IGxwICpscCA9IGluZXRfY3NrX2NhKHNrKTsKKwlzNjQgcmh6ID0gbHAtPnJlbW90ZV9oeiA8PCA2OwkvKiByZW1vdGUgSFogPDwgNiAqLworCXM2NCBtID0gMDsKKworCS8qIG5vdCB5ZXQgcmVjb3JkIHJlZmVyZW5jZSB0aW1lCisJICogZ28gYXdheSEhIHJlY29yZCBpdCBiZWZvcmUgY29tZSBiYWNrISEgKi8KKwlpZiAobHAtPnJlbW90ZV9yZWZfdGltZSA9PSAwIHx8IGxwLT5sb2NhbF9yZWZfdGltZSA9PSAwKQorCQlnb3RvIG91dDsKKworCS8qIHdlIGNhbid0IGNhbGMgcmVtb3RlIEhaIHdpdGggbm8gZGlmZmVyZW50ISEgKi8KKwlpZiAodHAtPnJ4X29wdC5yY3ZfdHN2YWwgPT0gbHAtPnJlbW90ZV9yZWZfdGltZQorCSAgICB8fCB0cC0+cnhfb3B0LnJjdl90c2VjciA9PSBscC0+bG9jYWxfcmVmX3RpbWUpCisJCWdvdG8gb3V0OworCisJbSA9IEhaICogKHRwLT5yeF9vcHQucmN2X3RzdmFsIC0KKwkJICBscC0+cmVtb3RlX3JlZl90aW1lKSAvICh0cC0+cnhfb3B0LnJjdl90c2VjciAtCisJCQkJCSAgbHAtPmxvY2FsX3JlZl90aW1lKTsKKwlpZiAobSA8IDApCisJCW0gPSAtbTsKKworCWlmIChyaHogIT0gMCkgeworCQltIC09IHJoeiA+PiA2OwkvKiBtIGlzIG5vdyBlcnJvciBpbiByZW1vdGUgSFogZXN0ICovCisJCXJoeiArPSBtOwkvKiA2My82NCBvbGQgKyAxLzY0IG5ldyAqLworCX0gZWxzZQorCQlyaHogPSBtIDw8IDY7CisKKwkvKiByZWNvcmQgdGltZSBmb3Igc3VjY2Vzc2Z1bCByZW1vdGUgSFogY2FsYyAqLworCWxwLT5mbGFnIHw9IExQX1ZBTElEX1JIWjsKKworIG91dDoKKwkvKiByZWNvcmQgcmVmZXJlbmNlIHRpbWUgc3RhbXAgKi8KKwlscC0+cmVtb3RlX3JlZl90aW1lID0gdHAtPnJ4X29wdC5yY3ZfdHN2YWw7CisJbHAtPmxvY2FsX3JlZl90aW1lID0gdHAtPnJ4X29wdC5yY3ZfdHNlY3I7CisKKwlyZXR1cm4gcmh6ID4+IDY7Cit9CisKKy8qKgorICogdGNwX2xwX293ZF9jYWxjdWxhdG9yCisgKgorICogQ2FsY3VsYXRlIG9uZSB3YXkgZGVsYXkgKGluIHJlbGF0aXZlIGZvcm1hdCkuCisgKiBPcmlnaW5hbCBpbXBsZW1lbnQgT1dEIGFzIG1pbnVzIG9mIHJlbW90ZSB0aW1lIGRpZmZlcmVuY2UgdG8gbG9jYWwgdGltZQorICogZGlmZmVyZW5jZSBkaXJlY3RseS4gQXMgdGhpcyB0aW1lIGRpZmZlcmVuY2UganVzdCBzaW1wbHkgZXF1YWwgdG8gUlRULCB3aGVuCisgKiB0aGUgbmV0d29yayBzdGF0dXMgaXMgc3RhYmxlLCByZW1vdGUgUlRUIHdpbGwgZXF1YWwgdG8gbG9jYWwgUlRULCBhbmQgcmVzdWx0CisgKiBPV0QgaW50byB6ZXJvLgorICogSXQgc2VlbXMgdG8gYmUgYSBidWcgYW5kIHNvIHdlIGZpeGVkIGl0LgorICovCitzdGF0aWMgdTMyIHRjcF9scF9vd2RfY2FsY3VsYXRvcihzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJc3RydWN0IGxwICpscCA9IGluZXRfY3NrX2NhKHNrKTsKKwlzNjQgb3dkID0gMDsKKworCWxwLT5yZW1vdGVfaHogPSB0Y3BfbHBfcmVtb3RlX2h6X2VzdGltYXRvcihzayk7CisKKwlpZiAobHAtPmZsYWcgJiBMUF9WQUxJRF9SSFopIHsKKwkJb3dkID0KKwkJICAgIHRwLT5yeF9vcHQucmN2X3RzdmFsICogKExQX1JFU09MIC8gbHAtPnJlbW90ZV9oeikgLQorCQkgICAgdHAtPnJ4X29wdC5yY3ZfdHNlY3IgKiAoTFBfUkVTT0wgLyBIWik7CisJCWlmIChvd2QgPCAwKQorCQkJb3dkID0gLW93ZDsKKwl9CisKKwlpZiAob3dkID4gMCkKKwkJbHAtPmZsYWcgfD0gTFBfVkFMSURfT1dEOworCWVsc2UKKwkJbHAtPmZsYWcgJj0gfkxQX1ZBTElEX09XRDsKKworCXJldHVybiBvd2Q7Cit9CisKKy8qKgorICogdGNwX2xwX3J0dF9zYW1wbGUKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvciBydHRfc2FtcGxlLgorICogV2lsbCB0YWtlIHRoZSBmb2xsb3dpbmcgYWN0aW9uLAorICogICAxLiBjYWxjIE9XRCwKKyAqICAgMi4gcmVjb3JkIHRoZSBtaW4vbWF4IE9XRCwKKyAqICAgMy4gY2FsYyBzbW9vdGhlZCBPV0QgKFNPV0QpLgorICogTW9zdCBpZGVhcyBjb21lIGZyb20gdGhlIG9yaWdpbmFsIFRDUC1MUCBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgdGNwX2xwX3J0dF9zYW1wbGUoc3RydWN0IHNvY2sgKnNrLCB1MzIgdXNydHQpCit7CisJc3RydWN0IGxwICpscCA9IGluZXRfY3NrX2NhKHNrKTsKKwlzNjQgbW93ZCA9IHRjcF9scF9vd2RfY2FsY3VsYXRvcihzayk7CisKKwkvKiBzb3JyeSB0aGF0IHdlIGRvbid0IGhhdmUgdmFsaWQgZGF0YSAqLworCWlmICghKGxwLT5mbGFnICYgTFBfVkFMSURfUkhaKSB8fCAhKGxwLT5mbGFnICYgTFBfVkFMSURfT1dEKSkKKwkJcmV0dXJuOworCisJLyogcmVjb3JkIHRoZSBuZXh0IG1pbiBvd2QgKi8KKwlpZiAobW93ZCA8IGxwLT5vd2RfbWluKQorCQlscC0+b3dkX21pbiA9IG1vd2Q7CisKKwkvKiBhbHdheXMgZm9yZ2V0IHRoZSBtYXggb2YgdGhlIG1heAorCSAqIHdlIGp1c3Qgc2V0IG93ZF9tYXggYXMgb25lIGJlbG93IGl0ICovCisJaWYgKG1vd2QgPiBscC0+b3dkX21heCkgeworCQlpZiAobW93ZCA+IGxwLT5vd2RfbWF4X3JzdikgeworCQkJaWYgKGxwLT5vd2RfbWF4X3JzdiA9PSAwKQorCQkJCWxwLT5vd2RfbWF4ID0gbW93ZDsKKwkJCWVsc2UKKwkJCQlscC0+b3dkX21heCA9IGxwLT5vd2RfbWF4X3JzdjsKKwkJCWxwLT5vd2RfbWF4X3JzdiA9IG1vd2Q7CisJCX0gZWxzZQorCQkJbHAtPm93ZF9tYXggPSBtb3dkOworCX0KKworCS8qIGNhbGMgZm9yIHNtb290aGVkIG93ZCAqLworCWlmIChscC0+c293ZCAhPSAwKSB7CisJCW1vd2QgLT0gbHAtPnNvd2QgPj4gMzsJLyogbSBpcyBub3cgZXJyb3IgaW4gb3dkIGVzdCAqLworCQlscC0+c293ZCArPSBtb3dkOwkvKiBvd2QgPSA3Lzggb3dkICsgMS84IG5ldyAqLworCX0gZWxzZQorCQlscC0+c293ZCA9IG1vd2QgPDwgMzsJLyogdGFrZSB0aGUgbWVhc3VyZWQgdGltZSBiZSBvd2QgKi8KK30KKworLyoqCisgKiB0Y3BfbHBfcGt0c19hY2tlZAorICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHBrdHNfYWNrZWQuCisgKiBEZWFsIHdpdGggYWN0aXZlIGRyb3AgdW5kZXIgRWFybHkgQ29uZ2VzdGlvbiBJbmRpY2F0aW9uLgorICogT25seSBkcm9wIHRvIGhhbGYgYW5kIDEgd2lsbCBiZSBoYW5kbGUsIGJlY2F1c2Ugd2UgaG9wZSB0byB1c2UgYmFjaworICogbmV3UmVubyBpbiBpbmNyZWFzZSBjYXNlLgorICogV2Ugd29yayBpdCBvdXQgYnkgZm9sbG93aW5nIHRoZSBpZGVhIGZyb20gVENQLUxQJ3MgcGFwZXIgZGlyZWN0bHkKKyAqLworc3RhdGljIHZvaWQgdGNwX2xwX3BrdHNfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbnVtX2Fja2VkKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBscCAqbHAgPSBpbmV0X2Nza19jYShzayk7CisKKwkvKiBjYWxjIGluZmVyZW5jZSAqLworCWlmICh0Y3BfdGltZV9zdGFtcCA+IHRwLT5yeF9vcHQucmN2X3RzZWNyKQorCQlscC0+aW5mZXJlbmNlID0gMyAqICh0Y3BfdGltZV9zdGFtcCAtIHRwLT5yeF9vcHQucmN2X3RzZWNyKTsKKworCS8qIHRlc3QgaWYgd2l0aGluIGluZmVyZW5jZSAqLworCWlmIChscC0+bGFzdF9kcm9wICYmICh0Y3BfdGltZV9zdGFtcCAtIGxwLT5sYXN0X2Ryb3AgPCBscC0+aW5mZXJlbmNlKSkKKwkJbHAtPmZsYWcgfD0gTFBfV0lUSElOX0lORjsKKwllbHNlCisJCWxwLT5mbGFnICY9IH5MUF9XSVRISU5fSU5GOworCisJLyogdGVzdCBpZiB3aXRoaW4gdGhyZXNob2xkICovCisJaWYgKGxwLT5zb3dkID4+IDMgPAorCSAgICBscC0+b3dkX21pbiArIDE1ICogKGxwLT5vd2RfbWF4IC0gbHAtPm93ZF9taW4pIC8gMTAwKQorCQlscC0+ZmxhZyB8PSBMUF9XSVRISU5fVEhSOworCWVsc2UKKwkJbHAtPmZsYWcgJj0gfkxQX1dJVEhJTl9USFI7CisKKwlwcl9kZWJ1ZygiVENQLUxQOiAlMDVvfCU1dXwlNXV8JTE1dXwlMTV1fCUxNXVcbiIsIGxwLT5mbGFnLAorCQkgdHAtPnNuZF9jd25kLCBscC0+cmVtb3RlX2h6LCBscC0+b3dkX21pbiwgbHAtPm93ZF9tYXgsCisJCSBscC0+c293ZCA+PiAzKTsKKworCWlmIChscC0+ZmxhZyAmIExQX1dJVEhJTl9USFIpCisJCXJldHVybjsKKworCS8qIEZJWE1FOiB0cnkgdG8gcmVzZXQgb3dkX21pbiBhbmQgb3dkX21heCBoZXJlCisJICogc28gZGVjcmVhc2UgdGhlIGNoYW5jZSB0aGUgbWluL21heCBpcyBubyBsb25nZXIgc3VpdGFibGUKKwkgKiBhbmQgd2lsbCB1c3VhbGx5IHdpdGhpbiB0aHJlc2hvbGQgd2hlbiB3aGl0aGluIGluZmVyZW5jZSAqLworCWxwLT5vd2RfbWluID0gbHAtPnNvd2QgPj4gMzsKKwlscC0+b3dkX21heCA9IGxwLT5zb3dkID4+IDI7CisJbHAtPm93ZF9tYXhfcnN2ID0gbHAtPnNvd2QgPj4gMjsKKworCS8qIGhhcHBlbmVkIHdpdGhpbiBpbmZlcmVuY2UKKwkgKiBkcm9wIHNuZF9jd25kIGludG8gMSAqLworCWlmIChscC0+ZmxhZyAmIExQX1dJVEhJTl9JTkYpCisJCXRwLT5zbmRfY3duZCA9IDFVOworCisJLyogaGFwcGVuZWQgYWZ0ZXIgaW5mZXJlbmNlCisJICogY3V0IHNuZF9jd25kIGludG8gaGFsZiAqLworCWVsc2UKKwkJdHAtPnNuZF9jd25kID0gbWF4KHRwLT5zbmRfY3duZCA+PiAxVSwgMVUpOworCisJLyogcmVjb3JkIHRoaXMgZHJvcCB0aW1lICovCisJbHAtPmxhc3RfZHJvcCA9IHRjcF90aW1lX3N0YW1wOworfQorCitzdGF0aWMgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfbHAgPSB7CisJLmluaXQgPSB0Y3BfbHBfaW5pdCwKKwkuc3N0aHJlc2ggPSB0Y3BfcmVub19zc3RocmVzaCwKKwkuY29uZ19hdm9pZCA9IHRjcF9scF9jb25nX2F2b2lkLAorCS5taW5fY3duZCA9IHRjcF9yZW5vX21pbl9jd25kLAorCS5ydHRfc2FtcGxlID0gdGNwX2xwX3J0dF9zYW1wbGUsCisJLnBrdHNfYWNrZWQgPSB0Y3BfbHBfcGt0c19hY2tlZCwKKworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImxwIgorfTsKKworc3RhdGljIGludCBfX2luaXQgdGNwX2xwX3JlZ2lzdGVyKHZvaWQpCit7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgbHApID4gSUNTS19DQV9QUklWX1NJWkUpOworCXJldHVybiB0Y3BfcmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKCZ0Y3BfbHApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGNwX2xwX3VucmVnaXN0ZXIodm9pZCkKK3sKKwl0Y3BfdW5yZWdpc3Rlcl9jb25nZXN0aW9uX2NvbnRyb2woJnRjcF9scCk7Cit9CisKK21vZHVsZV9pbml0KHRjcF9scF9yZWdpc3Rlcik7Cittb2R1bGVfZXhpdCh0Y3BfbHBfdW5yZWdpc3Rlcik7CisKK01PRFVMRV9BVVRIT1IoIldvbmcgSG9pIFNpbmcgRWRpc29uLCBIdW5nIEhpbmcgTHVuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRDUCBMb3cgUHJpb3JpdHkiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA3NDMwMTZiLi4wN2JiNWEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC01OSw2ICs1OSw5IEBACiBpbnQgc3lzY3RsX3RjcF9tdHVfcHJvYmluZyA9IDA7CiBpbnQgc3lzY3RsX3RjcF9iYXNlX21zcyA9IDUxMjsKIAorLyogQnkgZGVmYXVsdCwgUkZDMjg2MSBiZWhhdmlvci4gICovCitpbnQgc3lzY3RsX3RjcF9zbG93X3N0YXJ0X2FmdGVyX2lkbGUgPSAxOworCiBzdGF0aWMgdm9pZCB1cGRhdGVfc2VuZF9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCwKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTEzOCw3ICsxNDEsOCBAQAogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAljb25zdCB1MzIgbm93ID0gdGNwX3RpbWVfc3RhbXA7CiAKLQlpZiAoIXRwLT5wYWNrZXRzX291dCAmJiAoczMyKShub3cgLSB0cC0+bHNuZHRpbWUpID4gaWNzay0+aWNza19ydG8pCisJaWYgKHN5c2N0bF90Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlICYmCisJICAgICghdHAtPnBhY2tldHNfb3V0ICYmIChzMzIpKG5vdyAtIHRwLT5sc25kdGltZSkgPiBpY3NrLT5pY3NrX3J0bykpCiAJCXRjcF9jd25kX3Jlc3RhcnQoc2ssIF9fc2tfZHN0X2dldChzaykpOwogCiAJdHAtPmxzbmR0aW1lID0gbm93OwpAQCAtNjQyLDcgKzY0Niw3IEBACiAgKiBldmVudHVhbGx5KS4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBwdWxsZWQgZGF0YSBub3QgY29waWVkLCBidXQKICAqIGltbWVkaWF0ZWx5IGRpc2NhcmRlZC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgKl9fcHNrYl90cmltX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIF9fcHNrYl90cmltX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKIHsKIAlpbnQgaSwgaywgZWF0OwogCkBAIC02NjcsNyArNjcxLDYgQEAKIAlza2ItPnRhaWwgPSBza2ItPmRhdGE7CiAJc2tiLT5kYXRhX2xlbiAtPSBsZW47CiAJc2tiLT5sZW4gPSBza2ItPmRhdGFfbGVuOwotCXJldHVybiBza2ItPnRhaWw7CiB9CiAKIGludCB0Y3BfdHJpbV9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbikKQEAgLTY3NiwxMiArNjc5LDExIEBACiAJICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpIHsKKwkvKiBJZiBsZW4gPT0gaGVhZGxlbiwgd2UgYXZvaWQgX19za2JfcHVsbCB0byBwcmVzZXJ2ZSBhbGlnbm1lbnQuICovCisJaWYgKHVubGlrZWx5KGxlbiA8IHNrYl9oZWFkbGVuKHNrYikpKQogCQlfX3NrYl9wdWxsKHNrYiwgbGVuKTsKLQl9IGVsc2UgewotCQlpZiAoX19wc2tiX3RyaW1faGVhZChza2IsIGxlbi1za2JfaGVhZGxlbihza2IpKSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWVsc2UKKwkJX19wc2tiX3RyaW1faGVhZChza2IsIGxlbiAtIHNrYl9oZWFkbGVuKHNrYikpOwogCiAJVENQX1NLQl9DQihza2IpLT5zZXEgKz0gbGVuOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfcHJvYmUuYyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDUxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIHRjcHByb2JlIC0gT2JzZXJ2ZSB0aGUgVENQIGZsb3cgd2l0aCBrcHJvYmVzLgorICoKKyAqIFRoZSBpZGVhIGZvciB0aGlzIGNhbWUgZnJvbSBXZXJuZXIgQWxtZXNiZXJnZXIncyB1bWxzaW0KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAb3NkbC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUQ1AgY3duZCBzbm9vcGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgcG9ydCA9IDA7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0IHRvIG1hdGNoICgwPWFsbCkiKTsKK21vZHVsZV9wYXJhbShwb3J0LCBpbnQsIDApOworCitzdGF0aWMgaW50IGJ1ZnNpemUgPSA2NCoxMDI0OworTU9EVUxFX1BBUk1fREVTQyhidWZzaXplLCAiTG9nIGJ1ZmZlciBzaXplIChkZWZhdWx0IDY0aykiKTsKK21vZHVsZV9wYXJhbShidWZzaXplLCBpbnQsIDApOworCitzdGF0aWMgY29uc3QgY2hhciBwcm9jbmFtZVtdID0gInRjcHByb2JlIjsKKworc3RydWN0IHsKKwlzdHJ1Y3Qga2ZpZm8gICpmaWZvOworCXNwaW5sb2NrX3QgICAgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCB0aW1ldmFsIHRzdGFydDsKK30gdGNwdzsKKworc3RhdGljIHZvaWQgcHJpbnRsKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgbGVuOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwljaGFyIHRidWZbMjU2XTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCisJbm93LnR2X3NlYyAtPSB0Y3B3LnRzdGFydC50dl9zZWM7CisJbm93LnR2X3VzZWMgLT0gdGNwdy50c3RhcnQudHZfdXNlYzsKKwlpZiAobm93LnR2X3VzZWMgPCAwKSB7CisJCS0tbm93LnR2X3NlYzsKKwkJbm93LnR2X3VzZWMgKz0gMTAwMDAwMDsKKwl9CisKKwlsZW4gPSBzcHJpbnRmKHRidWYsICIlbHUuJTA2bHUgIiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpIG5vdy50dl9zZWMsCisJCSAgICAgICh1bnNpZ25lZCBsb25nKSBub3cudHZfdXNlYyk7CisJbGVuICs9IHZzY25wcmludGYodGJ1ZitsZW4sIHNpemVvZih0YnVmKS1sZW4sIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJa2ZpZm9fcHV0KHRjcHcuZmlmbywgdGJ1ZiwgbGVuKTsKKwl3YWtlX3VwKCZ0Y3B3LndhaXQpOworfQorCitzdGF0aWMgaW50IGp0Y3Bfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKKwkJCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCit7CisJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCisJaWYgKHBvcnQgPT0gMCB8fCBudG9ocyhpbmV0LT5kcG9ydCkgPT0gcG9ydCB8fAorCSAgICBudG9ocyhpbmV0LT5zcG9ydCkgPT0gcG9ydCkgeworCQlwcmludGwoIiVkLiVkLiVkLiVkOiV1ICVkLiVkLiVkLiVkOiV1ICVkICUjeCAlI3ggJXUgJXUgJXVcbiIsCisJCSAgICAgICBOSVBRVUFEKGluZXQtPnNhZGRyKSwgbnRvaHMoaW5ldC0+c3BvcnQpLAorCQkgICAgICAgTklQUVVBRChpbmV0LT5kYWRkciksIG50b2hzKGluZXQtPmRwb3J0KSwKKwkJICAgICAgIHNpemUsIHRwLT5zbmRfbnh0LCB0cC0+c25kX3VuYSwKKwkJICAgICAgIHRwLT5zbmRfY3duZCwgdGNwX2N1cnJlbnRfc3N0aHJlc2goc2spLAorCQkgICAgICAgdHAtPnNuZF93bmQpOworCX0KKworCWpwcm9iZV9yZXR1cm4oKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBqcHJvYmUgdGNwX3NlbmRfcHJvYmUgPSB7CisJLmtwID0geyAuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgJnRjcF9zZW5kbXNnLCB9LAorCS5lbnRyeSA9IChrcHJvYmVfb3Bjb2RlX3QgKikgJmp0Y3Bfc2VuZG1zZywKK307CisKKworc3RhdGljIGludCB0Y3Bwcm9iZV9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCit7CisJa2ZpZm9fcmVzZXQodGNwdy5maWZvKTsKKwlkb19nZXR0aW1lb2ZkYXkoJnRjcHcudHN0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdGNwcHJvYmVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCWludCBlcnJvciA9IDAsIGNudDsKKwl1bnNpZ25lZCBjaGFyICp0YnVmOworCisJaWYgKCFidWYgfHwgbGVuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJdGJ1ZiA9IHZtYWxsb2MobGVuKTsKKwlpZiAoIXRidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodGNwdy53YWl0LAorCQkJCQkgX19rZmlmb19sZW4odGNwdy5maWZvKSAhPSAwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWNudCA9IGtmaWZvX2dldCh0Y3B3LmZpZm8sIHRidWYsIGxlbik7CisJZXJyb3IgPSBjb3B5X3RvX3VzZXIoYnVmLCB0YnVmLCBjbnQpOworCisJdmZyZWUodGJ1Zik7CisKKwlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IGNudDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGNwcHJvYmVfZm9wcyA9IHsKKwkub3duZXIJID0gVEhJU19NT0RVTEUsCisJLm9wZW4JID0gdGNwcHJvYmVfb3BlbiwKKwkucmVhZCAgICA9IHRjcHByb2JlX3JlYWQsCit9OworCitzdGF0aWMgX19pbml0IGludCB0Y3Bwcm9iZV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0Y3B3LndhaXQpOworCXNwaW5fbG9ja19pbml0KCZ0Y3B3LmxvY2spOworCXRjcHcuZmlmbyA9IGtmaWZvX2FsbG9jKGJ1ZnNpemUsIEdGUF9LRVJORUwsICZ0Y3B3LmxvY2spOworCisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShwcm9jbmFtZSwgU19JUlVTUiwgJnRjcHByb2JlX2ZvcHMpKQorCQlnb3RvIGVycjA7CisKKwlyZXQgPSByZWdpc3Rlcl9qcHJvYmUoJnRjcF9zZW5kX3Byb2JlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisKKwlwcl9pbmZvKCJUQ1Agd2F0Y2ggcmVnaXN0ZXJlZCAocG9ydD0lZClcbiIsIHBvcnQpOworCXJldHVybiAwOworIGVycjE6CisJcHJvY19uZXRfcmVtb3ZlKHByb2NuYW1lKTsKKyBlcnIwOgorCWtmaWZvX2ZyZWUodGNwdy5maWZvKTsKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQodGNwcHJvYmVfaW5pdCk7CisKK3N0YXRpYyBfX2V4aXQgdm9pZCB0Y3Bwcm9iZV9leGl0KHZvaWQpCit7CisJa2ZpZm9fZnJlZSh0Y3B3LmZpZm8pOworCXByb2NfbmV0X3JlbW92ZShwcm9jbmFtZSk7CisJdW5yZWdpc3Rlcl9qcHJvYmUoJnRjcF9zZW5kX3Byb2JlKTsKKworfQorbW9kdWxlX2V4aXQodGNwcHJvYmVfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVuby5jIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWI0MmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIFRDUCBWZW5vIGNvbmdlc3Rpb24gY29udHJvbAorICoKKyAqIFRoaXMgaXMgYmFzZWQgb24gdGhlIGNvbmdlc3Rpb24gZGV0ZWN0aW9uL2F2b2lkYW5jZSBzY2hlbWUgZGVzY3JpYmVkIGluCisgKiAgICBDLiBQLiBGdSwgUy4gQy4gTGlldy4KKyAqICAgICJUQ1AgVmVubzogVENQIEVuaGFuY2VtZW50IGZvciBUcmFuc21pc3Npb24gb3ZlciBXaXJlbGVzcyBBY2Nlc3MgTmV0d29ya3MuIgorICogICAgSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb24sCisgKiAgICBGZWIuIDIwMDMuCisgKiAJU2VlIGh0dHA6Ly93d3cubnR1LmVkdS5zZy9ob21lNS9aSE9VMDAyMi9wYXBlcnMvQ1BGdTAzYS5wZGYKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2RpYWcuaD4KKworI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworLyogRGVmYXVsdCB2YWx1ZXMgb2YgdGhlIFZlbm8gdmFyaWFibGVzLCBpbiBmaXhlZC1wb2ludCByZXByZXNlbnRhdGlvbgorICogd2l0aCBWX1BBUkFNX1NISUZUIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBiaW5hcnkgcG9pbnQuCisgKi8KKyNkZWZpbmUgVl9QQVJBTV9TSElGVCAxCitzdGF0aWMgY29uc3QgaW50IGJldGEgPSAzIDw8IFZfUEFSQU1fU0hJRlQ7CisKKy8qIFZlbm8gdmFyaWFibGVzICovCitzdHJ1Y3QgdmVubyB7CisJdTggZG9pbmdfdmVub19ub3c7CS8qIGlmIHRydWUsIGRvIHZlbm8gZm9yIHRoaXMgcnR0ICovCisJdTE2IGNudHJ0dDsJCS8qICMgb2YgcnR0cyBtZWFzdXJlZCB3aXRoaW4gbGFzdCBydHQgKi8KKwl1MzIgbWlucnR0OwkJLyogbWluIG9mIHJ0dHMgbWVhc3VyZWQgd2l0aGluIGxhc3QgcnR0IChpbiB1c2VjKSAqLworCXUzMiBiYXNlcnR0OwkJLyogdGhlIG1pbiBvZiBhbGwgVmVubyBydHQgbWVhc3VyZW1lbnRzIHNlZW4gKGluIHVzZWMpICovCisJdTMyIGluYzsJCS8qIGRlY2lkZSB3aGV0aGVyIHRvIGluY3JlYXNlIGN3bmQgKi8KKwl1MzIgZGlmZjsJCS8qIGNhbGN1bGF0ZSB0aGUgZGlmZiByYXRlICovCit9OworCisvKiBUaGVyZSBhcmUgc2V2ZXJhbCBzaXR1YXRpb25zIHdoZW4gd2UgbXVzdCAicmUtc3RhcnQiIFZlbm86CisgKgorICogIG8gd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKKyAqICBvIGFmdGVyIGFuIFJUTworICogIG8gYWZ0ZXIgZmFzdCByZWNvdmVyeQorICogIG8gd2hlbiB3ZSBzZW5kIGEgcGFja2V0IGFuZCB0aGVyZSBpcyBubyBvdXRzdGFuZGluZworICogICAgdW5hY2tub3dsZWRnZWQgZGF0YSAocmVzdGFydGluZyBhbiBpZGxlIGNvbm5lY3Rpb24pCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdmVub19lbmFibGUoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB2ZW5vICp2ZW5vID0gaW5ldF9jc2tfY2Eoc2spOworCisJLyogdHVybiBvbiBWZW5vICovCisJdmVuby0+ZG9pbmdfdmVub19ub3cgPSAxOworCisJdmVuby0+bWlucnR0ID0gMHg3ZmZmZmZmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZlbm9fZGlzYWJsZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHZlbm8gKnZlbm8gPSBpbmV0X2Nza19jYShzayk7CisKKwkvKiB0dXJuIG9mZiBWZW5vICovCisJdmVuby0+ZG9pbmdfdmVub19ub3cgPSAwOworfQorCitzdGF0aWMgdm9pZCB0Y3BfdmVub19pbml0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgdmVubyAqdmVubyA9IGluZXRfY3NrX2NhKHNrKTsKKworCXZlbm8tPmJhc2VydHQgPSAweDdmZmZmZmZmOworCXZlbm8tPmluYyA9IDE7CisJdmVub19lbmFibGUoc2spOworfQorCisvKiBEbyBydHQgc2FtcGxpbmcgbmVlZGVkIGZvciBWZW5vLiAqLworc3RhdGljIHZvaWQgdGNwX3Zlbm9fcnR0X2NhbGMoc3RydWN0IHNvY2sgKnNrLCB1MzIgdXNydHQpCit7CisJc3RydWN0IHZlbm8gKnZlbm8gPSBpbmV0X2Nza19jYShzayk7CisJdTMyIHZydHQgPSB1c3J0dCArIDE7CS8qIE5ldmVyIGFsbG93IHplcm8gcnR0IG9yIGJhc2VydHQgKi8KKworCS8qIEZpbHRlciB0byBmaW5kIHByb3BhZ2F0aW9uIGRlbGF5OiAqLworCWlmICh2cnR0IDwgdmVuby0+YmFzZXJ0dCkKKwkJdmVuby0+YmFzZXJ0dCA9IHZydHQ7CisKKwkvKiBGaW5kIHRoZSBtaW4gcnR0IGR1cmluZyB0aGUgbGFzdCBydHQgdG8gZmluZAorCSAqIHRoZSBjdXJyZW50IHByb3AuIGRlbGF5ICsgcXVldWluZyBkZWxheToKKwkgKi8KKwl2ZW5vLT5taW5ydHQgPSBtaW4odmVuby0+bWlucnR0LCB2cnR0KTsKKwl2ZW5vLT5jbnRydHQrKzsKK30KKworc3RhdGljIHZvaWQgdGNwX3Zlbm9fc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBjYV9zdGF0ZSkKK3sKKwlpZiAoY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pCisJCXZlbm9fZW5hYmxlKHNrKTsKKwllbHNlCisJCXZlbm9fZGlzYWJsZShzayk7Cit9CisKKy8qCisgKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBpZGxlIGFuZCB3ZSBhcmUgcmVzdGFydGluZywKKyAqIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBkbyBhbnkgVmVubyBjYWxjdWxhdGlvbnMKKyAqIHVudGlsIHdlIGdldCBmcmVzaCBydHQgc2FtcGxlcy4gIFNvIHdoZW4gd2UKKyAqIHJlc3RhcnQsIHdlIHJlc2V0IG91ciBWZW5vIHN0YXRlIHRvIGEgY2xlYW4KKyAqIHN0YXRlLiBBZnRlciB3ZSBnZXQgYWNrcyBmb3IgdGhpcyBmbGlnaHQgb2YKKyAqIHBhY2tldHMsIF90aGVuXyB3ZSBjYW4gbWFrZSBWZW5vIGNhbGN1bGF0aW9ucworICogYWdhaW4uCisgKi8KK3N0YXRpYyB2b2lkIHRjcF92ZW5vX2N3bmRfZXZlbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9jYV9ldmVudCBldmVudCkKK3sKKwlpZiAoZXZlbnQgPT0gQ0FfRVZFTlRfQ1dORF9SRVNUQVJUIHx8IGV2ZW50ID09IENBX0VWRU5UX1RYX1NUQVJUKQorCQl0Y3BfdmVub19pbml0KHNrKTsKK30KKworc3RhdGljIHZvaWQgdGNwX3Zlbm9fY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssCisJCQkJdTMyIHNlcV9ydHQsIHUzMiBpbl9mbGlnaHQsIGludCBmbGFnKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCB2ZW5vICp2ZW5vID0gaW5ldF9jc2tfY2Eoc2spOworCisJaWYgKCF2ZW5vLT5kb2luZ192ZW5vX25vdykKKwkJcmV0dXJuIHRjcF9yZW5vX2NvbmdfYXZvaWQoc2ssIGFjaywgc2VxX3J0dCwgaW5fZmxpZ2h0LCBmbGFnKTsKKworCS8qIGxpbWl0ZWQgYnkgYXBwbGljYXRpb25zICovCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQorCQlyZXR1cm47CisKKwkvKiBXZSBkbyB0aGUgVmVubyBjYWxjdWxhdGlvbnMgb25seSBpZiB3ZSBnb3QgZW5vdWdoIHJ0dCBzYW1wbGVzICovCisJaWYgKHZlbm8tPmNudHJ0dCA8PSAyKSB7CisJCS8qIFdlIGRvbid0IGhhdmUgZW5vdWdoIHJ0dCBzYW1wbGVzIHRvIGRvIHRoZSBWZW5vCisJCSAqIGNhbGN1bGF0aW9uLCBzbyB3ZSdsbCBiZWhhdmUgbGlrZSBSZW5vLgorCQkgKi8KKwkJdGNwX3Jlbm9fY29uZ19hdm9pZChzaywgYWNrLCBzZXFfcnR0LCBpbl9mbGlnaHQsIGZsYWcpOworCX0gZWxzZSB7CisJCXUzMiBydHQsIHRhcmdldF9jd25kOworCisJCS8qIFdlIGhhdmUgZW5vdWdoIHJ0dCBzYW1wbGVzLCBzbywgdXNpbmcgdGhlIFZlbm8KKwkJICogYWxnb3JpdGhtLCB3ZSBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoZSBuZXR3b3JrLgorCQkgKi8KKworCQlydHQgPSB2ZW5vLT5taW5ydHQ7CisKKwkJdGFyZ2V0X2N3bmQgPSAoKHRwLT5zbmRfY3duZCAqIHZlbm8tPmJhc2VydHQpCisJCQkgICAgICAgPDwgVl9QQVJBTV9TSElGVCkgLyBydHQ7CisKKwkJdmVuby0+ZGlmZiA9ICh0cC0+c25kX2N3bmQgPDwgVl9QQVJBTV9TSElGVCkgLSB0YXJnZXRfY3duZDsKKworCQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKKwkJCS8qIFNsb3cgc3RhcnQuICAqLworCQkJdGNwX3Nsb3dfc3RhcnQodHApOworCQl9IGVsc2UgeworCQkJLyogQ29uZ2VzdGlvbiBhdm9pZGFuY2UuICovCisJCQlpZiAodmVuby0+ZGlmZiA8IGJldGEpIHsKKwkJCQkvKiBJbiB0aGUgIm5vbi1jb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAorCQkJCSAqICBldmVyeSBydHQuCisJCQkJICovCisJCQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7CisJCQkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJCQl0cC0+c25kX2N3bmQrKzsKKwkJCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7CisJCQkJfSBlbHNlCisJCQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJCX0gZWxzZSB7CisJCQkJLyogSW4gdGhlICJjb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAorCQkJCSAqIGV2ZXJ5IG90aGVyIHJ0dC4KKwkJCQkgKi8KKwkJCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKKwkJCQkJaWYgKHZlbm8tPmluYworCQkJCQkgICAgJiYgdHAtPnNuZF9jd25kIDwKKwkJCQkJICAgIHRwLT5zbmRfY3duZF9jbGFtcCkgeworCQkJCQkJdHAtPnNuZF9jd25kKys7CisJCQkJCQl2ZW5vLT5pbmMgPSAwOworCQkJCQl9IGVsc2UKKwkJCQkJCXZlbm8tPmluYyA9IDE7CisJCQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOworCQkJCX0gZWxzZQorCQkJCQl0cC0+c25kX2N3bmRfY250Kys7CisJCQl9CisKKwkJfQorCQlpZiAodHAtPnNuZF9jd25kIDwgMikKKwkJCXRwLT5zbmRfY3duZCA9IDI7CisJCWVsc2UgaWYgKHRwLT5zbmRfY3duZCA+IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCXRwLT5zbmRfY3duZCA9IHRwLT5zbmRfY3duZF9jbGFtcDsKKwl9CisJLyogV2lwZSB0aGUgc2xhdGUgY2xlYW4gZm9yIHRoZSBuZXh0IHJ0dC4gKi8KKwkvKiB2ZW5vLT5jbnRydHQgPSAwOyAqLworCXZlbm8tPm1pbnJ0dCA9IDB4N2ZmZmZmZmY7Cit9CisKKy8qIFZlbm8gTUQgcGhhc2UgKi8KK3N0YXRpYyB1MzIgdGNwX3Zlbm9fc3N0aHJlc2goc3RydWN0IHNvY2sgKnNrKQoreworCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCB2ZW5vICp2ZW5vID0gaW5ldF9jc2tfY2Eoc2spOworCisJaWYgKHZlbm8tPmRpZmYgPCBiZXRhKQorCQkvKiBpbiAibm9uLWNvbmdlc3RpdmUgc3RhdGUiLCBjdXQgY3duZCBieSAxLzUgKi8KKwkJcmV0dXJuIG1heCh0cC0+c25kX2N3bmQgKiA0IC8gNSwgMlUpOworCWVsc2UKKwkJLyogaW4gImNvbmdlc3RpdmUgc3RhdGUiLCBjdXQgY3duZCBieSAxLzIgKi8KKwkJcmV0dXJuIG1heCh0cC0+c25kX2N3bmQgPj4gMVUsIDJVKTsKK30KKworc3RhdGljIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Zlbm8gPSB7CisJLmluaXQJCT0gdGNwX3Zlbm9faW5pdCwKKwkuc3N0aHJlc2gJPSB0Y3BfdmVub19zc3RocmVzaCwKKwkuY29uZ19hdm9pZAk9IHRjcF92ZW5vX2NvbmdfYXZvaWQsCisJLnJ0dF9zYW1wbGUJPSB0Y3BfdmVub19ydHRfY2FsYywKKwkuc2V0X3N0YXRlCT0gdGNwX3Zlbm9fc3RhdGUsCisJLmN3bmRfZXZlbnQJPSB0Y3BfdmVub19jd25kX2V2ZW50LAorCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJ2ZW5vIiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRjcF92ZW5vX3JlZ2lzdGVyKHZvaWQpCit7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgdmVubykgPiBJQ1NLX0NBX1BSSVZfU0laRSk7CisJdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmdGNwX3Zlbm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGNwX3Zlbm9fdW5yZWdpc3Rlcih2b2lkKQoreworCXRjcF91bnJlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmdGNwX3Zlbm8pOworfQorCittb2R1bGVfaW5pdCh0Y3BfdmVub19yZWdpc3Rlcik7Cittb2R1bGVfZXhpdCh0Y3BfdmVub191bnJlZ2lzdGVyKTsKKworTU9EVUxFX0FVVEhPUigiQmluIFpob3UsIENoZW5nIFBlbmcgRnUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVENQIFZlbm8iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF93ZXN0d29vZC5jIGIvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKaW5kZXggMGMzNDBjMy4uNDI0N2RhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKKysrIGIvbmV0L2lwdjQvdGNwX3dlc3R3b29kLmMKQEAgLTEsNyArMSwyNCBAQAogLyoKLSAqIFRDUCBXZXN0d29vZCsKKyAqIFRDUCBXZXN0d29vZCs6IGVuZC10by1lbmQgYmFuZHdpZHRoIGVzdGltYXRpb24gZm9yIFRDUAogICoKLSAqCUFuZ2VsbyBEZWxsJ0FlcmE6CVRDUCBXZXN0d29vZCsgc3VwcG9ydAorICogICAgICBBbmdlbG8gRGVsbCdBZXJhOiBhdXRob3Igb2YgdGhlIGZpcnN0IHZlcnNpb24gb2YgVENQIFdlc3R3b29kKyBpbiBMaW51eCAyLjQKKyAqCisgKiBTdXBwb3J0IGF0IGh0dHA6Ly9jM2xhYi5wb2xpYmEuaXQvaW5kZXgucGhwL1dlc3R3b29kCisgKiBNYWluIHJlZmVyZW5jZXMgaW4gbGl0ZXJhdHVyZToKKyAqCisgKiAtIE1hc2NvbG8gUywgQ2FzZXR0aSwgTS4gR2VybGEgZXQgYWwuCisgKiAgICJUQ1AgV2VzdHdvb2Q6IGJhbmR3aWR0aCBlc3RpbWF0aW9uIGZvciBUQ1AiIFByb2MuIEFDTSBNb2JpY29tIDIwMDEKKyAqCisgKiAtIEEuIEdyaWVjbywgcy4gTWFzY29sbworICogICAiUGVyZm9ybWFuY2UgZXZhbHVhdGlvbiBvZiBOZXcgUmVubywgVmVnYXMsIFdlc3R3b29kKyBUQ1AiIEFDTSBDb21wdXRlcgorICogICAgIENvbW0uIFJldmlldywgMjAwNAorICoKKyAqIC0gQS4gRGVsbCdBZXJhLCBMLiBHcmllY28sIFMuIE1hc2NvbG8uCisgKiAgICJMaW51eCAyLjQgSW1wbGVtZW50YXRpb24gb2YgV2VzdHdvb2QrIFRDUCB3aXRoIFJhdGUtSGFsdmluZyA6CisgKiAgICBBIFBlcmZvcm1hbmNlIEV2YWx1YXRpb24gT3ZlciB0aGUgSW50ZXJuZXQiIChJQ0MgMjAwNCksIFBhcmlzLCBKdW5lIDIwMDQKKyAqCisgKiBXZXN0d29vZCsgZW1wbG95cyBlbmQtdG8tZW5kIGJhbmR3aWR0aCBtZWFzdXJlbWVudCB0byBzZXQgY3duZCBhbmQKKyAqIHNzdGhyZXNoIGFmdGVyIHBhY2tldCBsb3NzLiBUaGUgcHJvYmluZyBwaGFzZSBpcyBhcyB0aGUgb3JpZ2luYWwgUmVuby4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0yMiw2ICszOSw4IEBACiAJdTMyICAgIGFjY291bnRlZDsKIAl1MzIgICAgcnR0OwogCXUzMiAgICBydHRfbWluOyAgICAgICAgICAvKiBtaW5pbXVtIG9ic2VydmVkIFJUVCAqLworCXU4ICAgICBmaXJzdF9hY2s7ICAgICAgICAvKiBmbGFnIHdoaWNoIGluZmVycyB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGFjayAqLworCXU4ICAgICByZXNldF9ydHRfbWluOyAgICAvKiBSZXNldCBSVFQgbWluIHRvIG5leHQgUlRUIHNhbXBsZSovCiB9OwogCiAKQEAgLTQ5LDkgKzY4LDExIEBACiAgICAgICAgIHctPmJ3X2VzdCA9IDA7CiAgICAgICAgIHctPmFjY291bnRlZCA9IDA7CiAgICAgICAgIHctPmN1bXVsX2FjayA9IDA7CisJdy0+cmVzZXRfcnR0X21pbiA9IDE7CiAJdy0+cnR0X21pbiA9IHctPnJ0dCA9IFRDUF9XRVNUV09PRF9JTklUX1JUVDsKIAl3LT5ydHRfd2luX3N4ID0gdGNwX3RpbWVfc3RhbXA7CiAJdy0+c25kX3VuYSA9IHRjcF9zayhzayktPnNuZF91bmE7CisJdy0+Zmlyc3RfYWNrID0gMTsKIH0KIAogLyoKQEAgLTYzLDEwICs4NCwxNiBAQAogCXJldHVybiAoKCg3ICogYSkgKyBiKSA+PiAzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdlc3R3b29kX2ZpbHRlcihzdHJ1Y3Qgd2VzdHdvb2QgKncsIHUzMiBkZWx0YSkKK3N0YXRpYyB2b2lkIHdlc3R3b29kX2ZpbHRlcihzdHJ1Y3Qgd2VzdHdvb2QgKncsIHUzMiBkZWx0YSkKIHsKLQl3LT5id19uc19lc3QgPSB3ZXN0d29vZF9kb19maWx0ZXIody0+YndfbnNfZXN0LCB3LT5iayAvIGRlbHRhKTsKLQl3LT5id19lc3QgPSB3ZXN0d29vZF9kb19maWx0ZXIody0+YndfZXN0LCB3LT5id19uc19lc3QpOworCS8qIElmIHRoZSBmaWx0ZXIgaXMgZW1wdHkgZmlsbCBpdCB3aXRoIHRoZSBmaXJzdCBzYW1wbGUgb2YgYmFuZHdpZHRoICAqLworCWlmICh3LT5id19uc19lc3QgPT0gMCAmJiB3LT5id19lc3QgPT0gMCkgeworCQl3LT5id19uc19lc3QgPSB3LT5iayAvIGRlbHRhOworCQl3LT5id19lc3QgPSB3LT5id19uc19lc3Q7CisJfSBlbHNlIHsKKwkJdy0+YndfbnNfZXN0ID0gd2VzdHdvb2RfZG9fZmlsdGVyKHctPmJ3X25zX2VzdCwgdy0+YmsgLyBkZWx0YSk7CisJCXctPmJ3X2VzdCA9IHdlc3R3b29kX2RvX2ZpbHRlcih3LT5id19lc3QsIHctPmJ3X25zX2VzdCk7CisJfQogfQogCiAvKgpAQCAtOTEsNiArMTE4LDE1IEBACiAJc3RydWN0IHdlc3R3b29kICp3ID0gaW5ldF9jc2tfY2Eoc2spOwogCXMzMiBkZWx0YSA9IHRjcF90aW1lX3N0YW1wIC0gdy0+cnR0X3dpbl9zeDsKIAorCS8qIEluaXRpYWxpemUgdy0+c25kX3VuYSB3aXRoIHRoZSBmaXJzdCBhY2tlZCBzZXF1ZW5jZSBudW1iZXIgaW4gb3JkZXIKKwkgKiB0byBmaXggbWlzbWF0Y2ggYmV0d2VlbiB0cC0+c25kX3VuYSBhbmQgdy0+c25kX3VuYSBmb3IgdGhlIGZpcnN0CisJICogYmFuZHdpZHRoIHNhbXBsZQorCSAqLworICAgICAgICBpZiAody0+Zmlyc3RfYWNrKSB7CisJCXctPnNuZF91bmEgPSB0Y3Bfc2soc2spLT5zbmRfdW5hOworCQl3LT5maXJzdF9hY2sgPSAwOworCX0KKwogCS8qCiAJICogU2VlIGlmIGEgUlRULXdpbmRvdyBoYXMgcGFzc2VkLgogCSAqIEJlIGNhcmVmdWwgc2luY2UgaWYgUlRUIGlzIGxlc3MgdGhhbgpAQCAtMTA4LDYgKzE0NCwxNiBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9ydHRfbWluKHN0cnVjdCB3ZXN0d29vZCAqdykKK3sKKwlpZiAody0+cmVzZXRfcnR0X21pbikgeworCQl3LT5ydHRfbWluID0gdy0+cnR0OworCQl3LT5yZXNldF9ydHRfbWluID0gMDsJCisJfSBlbHNlCisJCXctPnJ0dF9taW4gPSBtaW4ody0+cnR0LCB3LT5ydHRfbWluKTsKK30KKworCiAvKgogICogQHdlc3R3b29kX2Zhc3RfYncKICAqIEl0IGlzIGNhbGxlZCB3aGVuIHdlIGFyZSBpbiBmYXN0IHBhdGguIEluIHBhcnRpY3VsYXIgaXQgaXMgY2FsbGVkIHdoZW4KQEAgLTEyMyw3ICsxNjksNyBAQAogCiAJdy0+YmsgKz0gdHAtPnNuZF91bmEgLSB3LT5zbmRfdW5hOwogCXctPnNuZF91bmEgPSB0cC0+c25kX3VuYTsKLQl3LT5ydHRfbWluID0gbWluKHctPnJ0dCwgdy0+cnR0X21pbik7CisJdXBkYXRlX3J0dF9taW4odyk7CiB9CiAKIC8qCkBAIC0xNjIsMTIgKzIwOCw2IEBACiAJcmV0dXJuIHctPmN1bXVsX2FjazsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgd2VzdHdvb2RfYndfcnR0bWluKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQljb25zdCBzdHJ1Y3Qgd2VzdHdvb2QgKncgPSBpbmV0X2Nza19jYShzayk7Ci0JcmV0dXJuIG1heF90KHUzMiwgKHctPmJ3X2VzdCAqIHctPnJ0dF9taW4pIC8gdHAtPm1zc19jYWNoZSwgMik7Ci19CiAKIC8qCiAgKiBUQ1AgV2VzdHdvb2QKQEAgLTE3NSw5ICsyMTUsMTEgQEAKICAqIGluIHBhY2tldHMgd2UgdXNlIG1zc19jYWNoZSkuIFJ0dG1pbiBpcyBndWFyYW50ZWVkIHRvIGJlID49IDIKICAqIHNvIGF2b2lkcyBldmVyIHJldHVybmluZyAwLgogICovCi1zdGF0aWMgdTMyIHRjcF93ZXN0d29vZF9jd25kX21pbihzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdTMyIHRjcF93ZXN0d29vZF9id19ydHRtaW4oY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiB3ZXN0d29vZF9id19ydHRtaW4oc2spOworCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWNvbnN0IHN0cnVjdCB3ZXN0d29vZCAqdyA9IGluZXRfY3NrX2NhKHNrKTsKKwlyZXR1cm4gbWF4X3QodTMyLCAody0+YndfZXN0ICogdy0+cnR0X21pbikgLyB0cC0+bXNzX2NhY2hlLCAyKTsKIH0KIAogc3RhdGljIHZvaWQgdGNwX3dlc3R3b29kX2V2ZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfY2FfZXZlbnQgZXZlbnQpCkBAIC0xOTEsMTcgKzIzMywxOSBAQAogCQlicmVhazsKIAogCWNhc2UgQ0FfRVZFTlRfQ09NUExFVEVfQ1dSOgotCQl0cC0+c25kX2N3bmQgPSB0cC0+c25kX3NzdGhyZXNoID0gd2VzdHdvb2RfYndfcnR0bWluKHNrKTsKKwkJdHAtPnNuZF9jd25kID0gdHAtPnNuZF9zc3RocmVzaCA9IHRjcF93ZXN0d29vZF9id19ydHRtaW4oc2spOwogCQlicmVhazsKIAogCWNhc2UgQ0FfRVZFTlRfRlJUTzoKLQkJdHAtPnNuZF9zc3RocmVzaCA9IHdlc3R3b29kX2J3X3J0dG1pbihzayk7CisJCXRwLT5zbmRfc3N0aHJlc2ggPSB0Y3Bfd2VzdHdvb2RfYndfcnR0bWluKHNrKTsKKyAJCS8qIFVwZGF0ZSBSVFRfbWluIHdoZW4gbmV4dCBhY2sgYXJyaXZlcyAqLworCQl3LT5yZXNldF9ydHRfbWluID0gMTsKIAkJYnJlYWs7CiAKIAljYXNlIENBX0VWRU5UX1NMT1dfQUNLOgogCQl3ZXN0d29vZF91cGRhdGVfd2luZG93KHNrKTsKIAkJdy0+YmsgKz0gd2VzdHdvb2RfYWNrZWRfY291bnQoc2spOwotCQl3LT5ydHRfbWluID0gbWluKHctPnJ0dCwgdy0+cnR0X21pbik7CisJCXVwZGF0ZV9ydHRfbWluKHcpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMzUsNyArMjc5LDcgQEAKIAkuaW5pdAkJPSB0Y3Bfd2VzdHdvb2RfaW5pdCwKIAkuc3N0aHJlc2gJPSB0Y3BfcmVub19zc3RocmVzaCwKIAkuY29uZ19hdm9pZAk9IHRjcF9yZW5vX2NvbmdfYXZvaWQsCi0JLm1pbl9jd25kCT0gdGNwX3dlc3R3b29kX2N3bmRfbWluLAorCS5taW5fY3duZAk9IHRjcF93ZXN0d29vZF9id19ydHRtaW4sCiAJLmN3bmRfZXZlbnQJPSB0Y3Bfd2VzdHdvb2RfZXZlbnQsCiAJLmdldF9pbmZvCT0gdGNwX3dlc3R3b29kX2luZm8sCiAJLnBrdHNfYWNrZWQJPSB0Y3Bfd2VzdHdvb2RfcGt0c19hY2tlZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCmluZGV4IDNlMTc0YzguLjgxN2VkODQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+Ci0jaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIApAQCAtMjQsMTUgKzIzLDYgQEAKIAogRVhQT1JUX1NZTUJPTCh4ZnJtNF9yY3YpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBpcF9lY25fZGVjYXBzdWxhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaXBoZHIgKm91dGVyX2lwaCA9IHNrYi0+bmguaXBoOwotCXN0cnVjdCBpcGhkciAqaW5uZXJfaXBoID0gc2tiLT5oLmlwaXBoOwotCi0JaWYgKElORVRfRUNOX2lzX2NlKG91dGVyX2lwaC0+dG9zKSkKLQkJSVBfRUNOX3NldF9jZShpbm5lcl9pcGgpOwotfQotCiBzdGF0aWMgaW50IHhmcm00X3BhcnNlX3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBuZXh0aGRyLCB1MzIgKnNwaSwgdTMyICpzZXEpCiB7CiAJc3dpdGNoIChuZXh0aGRyKSB7CkBAIC0xMTMsMjQgKzEwMywxMCBAQAogCiAJCXhmcm1fdmVjW3hmcm1fbnIrK10gPSB4OwogCi0JCWlwaCA9IHNrYi0+bmguaXBoOworCQlpZiAoeC0+bW9kZS0+aW5wdXQoeCwgc2tiKSkKKwkJCWdvdG8gZHJvcDsKIAogCQlpZiAoeC0+cHJvcHMubW9kZSkgewotCQkJaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19JUElQKQotCQkJCWdvdG8gZHJvcDsKLQkJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKLQkJCQlnb3RvIGRyb3A7Ci0JCQlpZiAoc2tiX2Nsb25lZChza2IpICYmCi0JCQkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQotCQkJCWdvdG8gZHJvcDsKLQkJCWlmICh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfREVDQVBfRFNDUCkKLQkJCQlpcHY0X2NvcHlfZHNjcChpcGgsIHNrYi0+aC5pcGlwaCk7Ci0JCQlpZiAoISh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfTk9FQ04pKQotCQkJCWlwaXBfZWNuX2RlY2Fwc3VsYXRlKHNrYik7Ci0JCQlza2ItPm1hYy5yYXcgPSBtZW1tb3ZlKHNrYi0+ZGF0YSAtIHNrYi0+bWFjX2xlbiwKLQkJCQkJICAgICAgIHNrYi0+bWFjLnJhdywgc2tiLT5tYWNfbGVuKTsKLQkJCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOwotCQkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpKTsKIAkJCWRlY2FwcyA9IDE7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfbW9kZV90cmFuc3BvcnQuYyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllNmIzZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHJhbnNwb3J0LmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIHhmcm00X21vZGVfdHJhbnNwb3J0LmMgLSBUcmFuc3BvcnQgbW9kZSBlbmNhcHN1bGF0aW9uIGZvciBJUHY0LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPG5ldC9kc3QuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgorCisvKiBBZGQgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCisgKgorICogVGhlIElQIGhlYWRlciB3aWxsIGJlIG1vdmVkIGZvcndhcmQgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIGVuY2Fwc3VsYXRpb24KKyAqIGhlYWRlci4KKyAqCisgKiBPbiBleGl0LCBza2ItPmggd2lsbCBiZSBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZAorICogYnkgeC0+dHlwZS0+b3V0cHV0IGFuZCBza2ItPm5oIHdpbGwgYmUgc2V0IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgorICovCitzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlpbnQgaWhsOworCisJaXBoID0gc2tiLT5uaC5pcGg7CisJc2tiLT5oLmlwaXBoID0gaXBoOworCisJaWhsID0gaXBoLT5paGwgKiA0OworCXNrYi0+aC5yYXcgKz0gaWhsOworCisJeCA9IHNrYi0+ZHN0LT54ZnJtOworCXNrYi0+bmgucmF3ID0gbWVtbW92ZShza2JfcHVzaChza2IsIHgtPnByb3BzLmhlYWRlcl9sZW4pLCBpcGgsIGlobCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbW92ZSBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBUaGUgSVAgaGVhZGVyIHdpbGwgYmUgbW92ZWQgb3ZlciB0aGUgdG9wIG9mIHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBPbiBlbnRyeSwgc2tiLT5oIHNoYWxsIHBvaW50IHRvIHdoZXJlIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIGFuZCBza2ItPm5oCisgKiBzaGFsbCBiZSBzZXQgdG8gd2hlcmUgdGhlIElQIGhlYWRlciBjdXJyZW50bHkgaXMuICBza2ItPmRhdGEgc2hhbGwgcG9pbnQKKyAqIHRvIHRoZSBzdGFydCBvZiB0aGUgcGF5bG9hZC4KKyAqLworc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGlobCA9IHNrYi0+ZGF0YSAtIHNrYi0+aC5yYXc7CisKKwlpZiAoc2tiLT5oLnJhdyAhPSBza2ItPm5oLnJhdykKKwkJc2tiLT5uaC5yYXcgPSBtZW1tb3ZlKHNrYi0+aC5yYXcsIHNrYi0+bmgucmF3LCBpaGwpOworCXNrYi0+bmguaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4gKyBpaGwpOworCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGZybV9tb2RlIHhmcm00X3RyYW5zcG9ydF9tb2RlID0geworCS5pbnB1dCA9IHhmcm00X3RyYW5zcG9ydF9pbnB1dCwKKwkub3V0cHV0ID0geGZybTRfdHJhbnNwb3J0X291dHB1dCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZW5jYXAgPSBYRlJNX01PREVfVFJBTlNQT1JULAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGZybTRfdHJhbnNwb3J0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4geGZybV9yZWdpc3Rlcl9tb2RlKCZ4ZnJtNF90cmFuc3BvcnRfbW9kZSwgQUZfSU5FVCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtNF90cmFuc3BvcnRfZXhpdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSB4ZnJtX3VucmVnaXN0ZXJfbW9kZSgmeGZybTRfdHJhbnNwb3J0X21vZGUsIEFGX0lORVQpOworCUJVR19PTihlcnIpOworfQorCittb2R1bGVfaW5pdCh4ZnJtNF90cmFuc3BvcnRfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZnJtNF90cmFuc3BvcnRfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfWEZSTV9NT0RFKEFGX0lORVQsIFhGUk1fTU9ERV9UUkFOU1BPUlQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfbW9kZV90dW5uZWwuYyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkODgwYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiB4ZnJtNF9tb2RlX3R1bm5lbC5jIC0gVHVubmVsIG1vZGUgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKworc3RhdGljIGlubGluZSB2b2lkIGlwaXBfZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlwaGRyICpvdXRlcl9pcGggPSBza2ItPm5oLmlwaDsKKwlzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCA9IHNrYi0+aC5pcGlwaDsKKworCWlmIChJTkVUX0VDTl9pc19jZShvdXRlcl9pcGgtPnRvcykpCisJCUlQX0VDTl9zZXRfY2UoaW5uZXJfaXBoKTsKK30KKworLyogQWRkIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgorICoKKyAqIFRoZSB0b3AgSVAgaGVhZGVyIHdpbGwgYmUgY29uc3RydWN0ZWQgcGVyIFJGQyAyNDAxLiAgVGhlIGZvbGxvd2luZyBmaWVsZHMKKyAqIGluIGl0IHNoYWxsIGJlIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQ6CisgKiAgICAgIHRvdF9sZW4KKyAqICAgICAgY2hlY2sKKyAqCisgKiBPbiBleGl0LCBza2ItPmggd2lsbCBiZSBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZAorICogYnkgeC0+dHlwZS0+b3V0cHV0IGFuZCBza2ItPm5oIHdpbGwgYmUgc2V0IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgorICovCitzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2ItPmRzdDsKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdC0+eGZybTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCwgKnRvcF9pcGg7CisJaW50IGZsYWdzOworCisJaXBoID0gc2tiLT5uaC5pcGg7CisJc2tiLT5oLmlwaXBoID0gaXBoOworCisJc2tiLT5uaC5yYXcgPSBza2JfcHVzaChza2IsIHgtPnByb3BzLmhlYWRlcl9sZW4pOworCXRvcF9pcGggPSBza2ItPm5oLmlwaDsKKworCXRvcF9pcGgtPmlobCA9IDU7CisJdG9wX2lwaC0+dmVyc2lvbiA9IDQ7CisKKwkvKiBEUyBkaXNjbG9zZWQgKi8KKwl0b3BfaXBoLT50b3MgPSBJTkVUX0VDTl9lbmNhcHN1bGF0ZShpcGgtPnRvcywgaXBoLT50b3MpOworCisJZmxhZ3MgPSB4LT5wcm9wcy5mbGFnczsKKwlpZiAoZmxhZ3MgJiBYRlJNX1NUQVRFX05PRUNOKQorCQlJUF9FQ05fY2xlYXIodG9wX2lwaCk7CisKKwl0b3BfaXBoLT5mcmFnX29mZiA9IChmbGFncyAmIFhGUk1fU1RBVEVfTk9QTVRVRElTQykgPworCQkwIDogKGlwaC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpOworCWlmICghdG9wX2lwaC0+ZnJhZ19vZmYpCisJCV9faXBfc2VsZWN0X2lkZW50KHRvcF9pcGgsIGRzdC0+Y2hpbGQsIDApOworCisJdG9wX2lwaC0+dHRsID0gZHN0X21ldHJpYyhkc3QtPmNoaWxkLCBSVEFYX0hPUExJTUlUKTsKKworCXRvcF9pcGgtPnNhZGRyID0geC0+cHJvcHMuc2FkZHIuYTQ7CisJdG9wX2lwaC0+ZGFkZHIgPSB4LT5pZC5kYWRkci5hNDsKKwl0b3BfaXBoLT5wcm90b2NvbCA9IElQUFJPVE9fSVBJUDsKKworCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGZybTRfdHVubmVsX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpcGhkciAqaXBoID0gc2tiLT5uaC5pcGg7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX0lQSVApCisJCWdvdG8gb3V0OworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc2tiX2Nsb25lZChza2IpICYmCisJICAgIChlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpKQorCQlnb3RvIG91dDsKKworCWlmICh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfREVDQVBfRFNDUCkKKwkJaXB2NF9jb3B5X2RzY3AoaXBoLCBza2ItPmguaXBpcGgpOworCWlmICghKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9OT0VDTikpCisJCWlwaXBfZWNuX2RlY2Fwc3VsYXRlKHNrYik7CisJc2tiLT5tYWMucmF3ID0gbWVtbW92ZShza2ItPmRhdGEgLSBza2ItPm1hY19sZW4sCisJCQkgICAgICAgc2tiLT5tYWMucmF3LCBza2ItPm1hY19sZW4pOworCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSk7CisJZXJyID0gMDsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGZybV9tb2RlIHhmcm00X3R1bm5lbF9tb2RlID0geworCS5pbnB1dCA9IHhmcm00X3R1bm5lbF9pbnB1dCwKKwkub3V0cHV0ID0geGZybTRfdHVubmVsX291dHB1dCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZW5jYXAgPSBYRlJNX01PREVfVFVOTkVMLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGZybTRfdHVubmVsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geGZybV9yZWdpc3Rlcl9tb2RlKCZ4ZnJtNF90dW5uZWxfbW9kZSwgQUZfSU5FVCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtNF90dW5uZWxfZXhpdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSB4ZnJtX3VucmVnaXN0ZXJfbW9kZSgmeGZybTRfdHVubmVsX21vZGUsIEFGX0lORVQpOworCUJVR19PTihlcnIpOworfQorCittb2R1bGVfaW5pdCh4ZnJtNF90dW5uZWxfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZnJtNF90dW5uZWxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfWEZSTV9NT0RFKEFGX0lORVQsIFhGUk1fTU9ERV9UVU5ORUwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYwppbmRleCA0ZWY4ZWZhLi5hYzlkOTFkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYwpAQCAtMTIsNjcgKzEyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgotI2luY2x1ZGUgPG5ldC9pbmV0X2Vjbi5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KIAotLyogQWRkIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgotICoKLSAqIEluIHRyYW5zcG9ydCBtb2RlLCB0aGUgSVAgaGVhZGVyIHdpbGwgYmUgbW92ZWQgZm9yd2FyZCB0byBtYWtlIHNwYWNlCi0gKiBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyLgotICoKLSAqIEluIHR1bm5lbCBtb2RlLCB0aGUgdG9wIElQIGhlYWRlciB3aWxsIGJlIGNvbnN0cnVjdGVkIHBlciBSRkMgMjQwMS4KLSAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIGluIGl0IHNoYWxsIGJlIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQ6Ci0gKgl0b3RfbGVuCi0gKgljaGVjawotICoKLSAqIE9uIGV4aXQsIHNrYi0+aCB3aWxsIGJlIHNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHBheWxvYWQgdG8gYmUgcHJvY2Vzc2VkCi0gKiBieSB4LT50eXBlLT5vdXRwdXQgYW5kIHNrYi0+bmggd2lsbCBiZSBzZXQgdG8gdGhlIHRvcCBJUCBoZWFkZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHhmcm00X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiLT5kc3Q7Ci0Jc3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3QtPnhmcm07Ci0Jc3RydWN0IGlwaGRyICppcGgsICp0b3BfaXBoOwotCWludCBmbGFnczsKLQotCWlwaCA9IHNrYi0+bmguaXBoOwotCXNrYi0+aC5pcGlwaCA9IGlwaDsKLQotCXNrYi0+bmgucmF3ID0gc2tiX3B1c2goc2tiLCB4LT5wcm9wcy5oZWFkZXJfbGVuKTsKLQl0b3BfaXBoID0gc2tiLT5uaC5pcGg7Ci0KLQlpZiAoIXgtPnByb3BzLm1vZGUpIHsKLQkJc2tiLT5oLnJhdyArPSBpcGgtPmlobCo0OwotCQltZW1tb3ZlKHRvcF9pcGgsIGlwaCwgaXBoLT5paGwqNCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl0b3BfaXBoLT5paGwgPSA1OwotCXRvcF9pcGgtPnZlcnNpb24gPSA0OwotCi0JLyogRFMgZGlzY2xvc2VkICovCi0JdG9wX2lwaC0+dG9zID0gSU5FVF9FQ05fZW5jYXBzdWxhdGUoaXBoLT50b3MsIGlwaC0+dG9zKTsKLQotCWZsYWdzID0geC0+cHJvcHMuZmxhZ3M7Ci0JaWYgKGZsYWdzICYgWEZSTV9TVEFURV9OT0VDTikKLQkJSVBfRUNOX2NsZWFyKHRvcF9pcGgpOwotCi0JdG9wX2lwaC0+ZnJhZ19vZmYgPSAoZmxhZ3MgJiBYRlJNX1NUQVRFX05PUE1UVURJU0MpID8KLQkJMCA6IChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKTsKLQlpZiAoIXRvcF9pcGgtPmZyYWdfb2ZmKQotCQlfX2lwX3NlbGVjdF9pZGVudCh0b3BfaXBoLCBkc3QtPmNoaWxkLCAwKTsKLQotCXRvcF9pcGgtPnR0bCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7Ci0KLQl0b3BfaXBoLT5zYWRkciA9IHgtPnByb3BzLnNhZGRyLmE0OwotCXRvcF9pcGgtPmRhZGRyID0geC0+aWQuZGFkZHIuYTQ7Ci0JdG9wX2lwaC0+cHJvdG9jb2wgPSBJUFBST1RPX0lQSVA7Ci0KLQltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykpOwotfQotCiBzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9jaGVja19zaXplKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IG10dSwgcmV0ID0gMDsKQEAgLTEyMSw3ICs2NCw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCi0JCXhmcm00X2VuY2FwKHNrYik7CisJCWVyciA9IHgtPm1vZGUtPm91dHB1dChza2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKIAogCQllcnIgPSB4LT50eXBlLT5vdXRwdXQoeCwgc2tiKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggODYwNGM3NC4uYzA0NjUyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTE3LDggKzE3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyB4ZnJtNF9kc3Rfb3BzOwogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbzsKIAotc3RhdGljIHN0cnVjdCB4ZnJtX3R5cGVfbWFwIHhmcm00X3R5cGVfbWFwID0geyAubG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQgfTsKLQogc3RhdGljIGludCB4ZnJtNF9kc3RfbG9va3VwKHN0cnVjdCB4ZnJtX2RzdCAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKIHsKIAlyZXR1cm4gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KChzdHJ1Y3QgcnRhYmxlKiopZHN0LCBmbCk7CkBAIC0yMzcsOSArMjM1LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgeGZybTRfZ2FyYmFnZV9jb2xsZWN0KHZvaWQpCiB7Ci0JcmVhZF9sb2NrKCZ4ZnJtNF9wb2xpY3lfYWZpbmZvLmxvY2spOwogCXhmcm00X3BvbGljeV9hZmluZm8uZ2FyYmFnZV9jb2xsZWN0KCk7Ci0JcmVhZF91bmxvY2soJnhmcm00X3BvbGljeV9hZmluZm8ubG9jayk7CiAJcmV0dXJuIChhdG9taWNfcmVhZCgmeGZybTRfZHN0X29wcy5lbnRyaWVzKSA+IHhmcm00X2RzdF9vcHMuZ2NfdGhyZXNoKjIpOwogfQogCkBAIC0yOTksOCArMjk1LDYgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbyA9IHsKIAkuZmFtaWx5ID0gCQlBRl9JTkVULAotCS5sb2NrID0gCQlSV19MT0NLX1VOTE9DS0VELAotCS50eXBlX21hcCA9IAkJJnhmcm00X3R5cGVfbWFwLAogCS5kc3Rfb3BzID0JCSZ4ZnJtNF9kc3Rfb3BzLAogCS5kc3RfbG9va3VwID0JCXhmcm00X2RzdF9sb29rdXAsCiAJLmZpbmRfYnVuZGxlID0gCQlfX3hmcm00X2ZpbmRfYnVuZGxlLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYyBiL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKaW5kZXggZGJhYmY4MS4uODFlMTc1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYworKysgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCkBAIC0xMzEsNyArMTMxLDYgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyB4ZnJtNF9zdGF0ZV9hZmluZm8gPSB7CiAJLmZhbWlseQkJCT0gQUZfSU5FVCwKLQkubG9jawkJCT0gUldfTE9DS19VTkxPQ0tFRCwKIAkuaW5pdF9mbGFncwkJPSB4ZnJtNF9pbml0X2ZsYWdzLAogCS5pbml0X3RlbXBzZWwJCT0gX194ZnJtNF9pbml0X3RlbXBzZWwsCiAJLnN0YXRlX2xvb2t1cAkJPSBfX3hmcm00X3N0YXRlX2xvb2t1cCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L0tjb25maWcgYi9uZXQvaXB2Ni9LY29uZmlnCmluZGV4IGY4YTEwN2EuLmU5MjNkNGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L0tjb25maWcKKysrIGIvbmV0L2lwdjYvS2NvbmZpZwpAQCAtMTA2LDYgKzEwNiwyNiBAQAogCXRyaXN0YXRlCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBJTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUCisJdHJpc3RhdGUgIklQdjY6IElQc2VjIHRyYW5zcG9ydCBtb2RlIgorCWRlcGVuZHMgb24gSVBWNgorCWRlZmF1bHQgSVBWNgorCXNlbGVjdCBYRlJNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgSVBzZWMgdHJhbnNwb3J0IG1vZGUuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBJTkVUNl9YRlJNX01PREVfVFVOTkVMCisJdHJpc3RhdGUgIklQdjY6IElQc2VjIHR1bm5lbCBtb2RlIgorCWRlcGVuZHMgb24gSVBWNgorCWRlZmF1bHQgSVBWNgorCXNlbGVjdCBYRlJNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgSVBzZWMgdHVubmVsIG1vZGUuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBJUFY2X1RVTk5FTAogCXRyaXN0YXRlICJJUHY2OiBJUHY2LWluLUlQdjYgdHVubmVsIgogCXNlbGVjdCBJTkVUNl9UVU5ORUwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L01ha2VmaWxlIGIvbmV0L2lwdjYvTWFrZWZpbGUKaW5kZXggYTc2MGIwOS4uMzg2ZTBhNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjYvTWFrZWZpbGUKQEAgLTIwLDYgKzIwLDggQEAKIG9iai0kKENPTkZJR19JTkVUNl9JUENPTVApICs9IGlwY29tcDYubwogb2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMKSArPSB4ZnJtNl90dW5uZWwubwogb2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgKz0gdHVubmVsNi5vCitvYmotJChDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCkgKz0geGZybTZfbW9kZV90cmFuc3BvcnQubworb2JqLSQoQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwpICs9IHhmcm02X21vZGVfdHVubmVsLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVIpCSs9IG5ldGZpbHRlci8KIAogb2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDQ0NTAwNmUuLmMyYzI2ZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg2MCw2ICsyODYwLDExIEBACiAJcmV0dXJuIGluZXQ2X2FkZHJfYWRkKGlmbS0+aWZhX2luZGV4LCBwZngsIGlmbS0+aWZhX3ByZWZpeGxlbik7CiB9CiAKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGlmYV9jYWNoZWluZm8gYXR0cmlidXRlcyAqLworI2RlZmluZSBJTkVUNl9JRkFERFJfUlRBX1NQQUNFIFwKKwkJUlRBX1NQQUNFKDE2KSAvKiBJRkFfQUREUkVTUyAqLyArIFwKKwkJUlRBX1NQQUNFKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpIC8qIENBQ0hFSU5GTyAqLworCiBzdGF0aWMgaW50IGluZXQ2X2ZpbGxfaWZhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSwKIAkJCSAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC0zMDkyLDcgKzMwOTcsNyBAQAogc3RhdGljIHZvaWQgaW5ldDZfaWZhX25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKzEyOCk7CisJaW50IHNpemUgPSBOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykgKyBJTkVUNl9JRkFERFJfUlRBX1NQQUNFKTsKIAogCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewpAQCAtMzE0Miw2ICszMTQ3LDE3IEBACiAjZW5kaWYKIH0KIAorLyogTWF4aW11bSBsZW5ndGggb2YgaWZpbmZvbXNnIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgSU5FVDZfSUZJTkZPX1JUQV9TUEFDRSBcCisJCVJUQV9TUEFDRShJRk5BTVNJWikgLyogSUZOQU1FICovICsgXAorCQlSVEFfU1BBQ0UoTUFYX0FERFJfTEVOKSAvKiBBRERSRVNTICovICsJXAorCQlSVEFfU1BBQ0Uoc2l6ZW9mKHUzMikpIC8qIE1UVSAqLyArIFwKKwkJUlRBX1NQQUNFKHNpemVvZihpbnQpKSAvKiBMSU5LICovICsgXAorCQlSVEFfU1BBQ0UoMCkgLyogUFJPVElORk8gKi8gKyBcCisJCVJUQV9TUEFDRShzaXplb2YodTMyKSkgLyogRkxBR1MgKi8gKyBcCisJCVJUQV9TUEFDRShzaXplb2Yoc3RydWN0IGlmbGFfY2FjaGVpbmZvKSkgLyogQ0FDSEVJTkZPICovICsgXAorCQlSVEFfU1BBQ0Uoc2l6ZW9mKF9fczMyW0RFVkNPTkZfTUFYXSkpIC8qIENPTkYgKi8KKwogc3RhdGljIGludCBpbmV0Nl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCAKIAkJCSAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC0zMjM1LDggKzMyNTEsNyBAQAogdm9pZCBpbmV0Nl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCS8qIDEyOCBieXRlcyA/PyAqLwotCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKzEyOCk7CisJaW50IHNpemUgPSBOTE1TR19TUEFDRShzaXplb2Yoc3RydWN0IGlmaW5mb21zZykgKyBJTkVUNl9JRklORk9fUlRBX1NQQUNFKTsKIAkKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKQEAgLTMyNTIsNiArMzI2NywxMSBAQAogCW5ldGxpbmtfYnJvYWRjYXN0KHJ0bmwsIHNrYiwgMCwgUlROTEdSUF9JUFY2X0lGSU5GTywgR0ZQX0FUT01JQyk7CiB9CiAKKy8qIE1heGltdW0gbGVuZ3RoIG9mIHByZWZpeF9jYWNoZWluZm8gYXR0cmlidXRlcyAqLworI2RlZmluZSBJTkVUNl9QUkVGSVhfUlRBX1NQQUNFIFwKKwkJUlRBX1NQQUNFKHNpemVvZigoKHN0cnVjdCBwcmVmaXhfaW5mbyAqKU5VTEwpLT5wcmVmaXgpKSAvKiBBRERSRVNTICovICsgXAorCQlSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBwcmVmaXhfY2FjaGVpbmZvKSkgLyogQ0FDSEVJTkZPICovCisKIHN0YXRpYyBpbnQgaW5ldDZfZmlsbF9wcmVmaXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldiwKIAkJCXN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sIHUzMiBwaWQsIHUzMiBzZXEsIAogCQkJaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC0zMjk2LDcgKzMzMTYsNyBAQAogCQkJIHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgcHJlZml4bXNnKSsxMjgpOworCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBwcmVmaXhtc2cpICsgSU5FVDZfUFJFRklYX1JUQV9TUEFDRSk7CiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FoNi5jIGIvbmV0L2lwdjYvYWg2LmMKaW5kZXggNjc3ODE3My4uZDMxYzBkNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWg2LmMKKysrIGIvbmV0L2lwdjYvYWg2LmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogCiAJCW1lbWNweShhdXRoX2RhdGEsIGFoLT5hdXRoX2RhdGEsIGFocC0+aWN2X3RydW5jX2xlbik7CiAJCW1lbXNldChhaC0+YXV0aF9kYXRhLCAwLCBhaHAtPmljdl90cnVuY19sZW4pOwotCQlza2JfcHVzaChza2IsIHNrYi0+ZGF0YSAtIHNrYi0+bmgucmF3KTsKKwkJc2tiX3B1c2goc2tiLCBoZHJfbGVuKTsKIAkJYWhwLT5pY3YoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOwogCQlpZiAobWVtY21wKGFoLT5hdXRoX2RhdGEsIGF1dGhfZGF0YSwgYWhwLT5pY3ZfdHJ1bmNfbGVuKSkgewogCQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJpcHNlYyBhaCBhdXRoZW50aWNhdGlvbiBlcnJvclxuIik7CkBAIC0zMDEsMTIgKzMwMSw4IEBACiAJCX0KIAl9CiAKLQlza2ItPm5oLnJhdyA9IHNrYl9wdWxsKHNrYiwgYWhfaGxlbik7Ci0JbWVtY3B5KHNrYi0+bmgucmF3LCB0bXBfaGRyLCBoZHJfbGVuKTsKLQlza2ItPm5oLmlwdjZoLT5wYXlsb2FkX2xlbiA9IGh0b25zKHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7Ci0Jc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTsKLQlza2ItPmgucmF3ID0gc2tiLT5kYXRhOwotCisJc2tiLT5oLnJhdyA9IG1lbWNweShza2ItPm5oLnJhdyArPSBhaF9obGVuLCB0bXBfaGRyLCBoZHJfbGVuKTsKKwlfX3NrYl9wdWxsKHNrYiwgYWhfaGxlbiArIGhkcl9sZW4pOwogCiAJa2ZyZWUodG1wX2hkcik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCAyMmYwNDYwLi5hMTVhNmYzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0xNDIsMjYgKzE0MiwxOCBAQAogCiAJaW50IGhkcl9sZW4gPSBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXc7CiAJaW50IG5mcmFnczsKLQl1bnNpZ25lZCBjaGFyICp0bXBfaGRyID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2Nl9lc3BfaGRyKSkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXRfbm9mcmVlOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoZWxlbiA8PSAwIHx8IChlbGVuICYgKGJsa3NpemUtMSkpKSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X25vZnJlZTsKKwkJZ290byBvdXQ7CiAJfQogCi0JdG1wX2hkciA9IGttYWxsb2MoaGRyX2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF0bXBfaGRyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X25vZnJlZTsKLQl9Ci0JbWVtY3B5KHRtcF9oZHIsIHNrYi0+bmgucmF3LCBoZHJfbGVuKTsKLQogCS8qIElmIGludGVncml0eSBjaGVjayBpcyByZXF1aXJlZCwgZG8gdGhpcy4gKi8KICAgICAgICAgaWYgKGVzcC0+YXV0aC5pY3ZfZnVsbF9sZW4pIHsKIAkJdTggc3VtW2VzcC0+YXV0aC5pY3ZfZnVsbF9sZW5dOwpAQCAtMjIyLDE2ICsyMTQsMTIgQEAKIAkJLyogLi4uIGNoZWNrIHBhZGRpbmcgYml0cyBoZXJlLiBTaWxseS4gOi0pICovIAogCiAJCXBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gYWxlbiAtIHBhZGxlbiAtIDIpOwotCQlza2ItPmgucmF3ID0gc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW4pOwotCQlza2ItPm5oLnJhdyArPSBzaXplb2Yoc3RydWN0IGlwdjZfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW47Ci0JCW1lbWNweShza2ItPm5oLnJhdywgdG1wX2hkciwgaGRyX2xlbik7Ci0JCXNrYi0+bmguaXB2NmgtPnBheWxvYWRfbGVuID0gaHRvbnMoc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAkJcmV0ID0gbmV4dGhkclsxXTsKIAl9CiAKKwlza2ItPmgucmF3ID0gX19za2JfcHVsbChza2IsIHNpemVvZigqZXNwaCkgKyBlc3AtPmNvbmYuaXZsZW4pIC0gaGRyX2xlbjsKKwogb3V0OgotCWtmcmVlKHRtcF9oZHIpOwotb3V0X25vZnJlZToKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggZTQ2MDQ4OS4uZDI5NjIwZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JvdXRlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgpAQCAtNDU4LDYgKzQ1OSw3IEBACiAJbmZfYnJpZGdlX2dldCh0by0+bmZfYnJpZGdlKTsKICNlbmRpZgogI2VuZGlmCisJc2tiX2NvcHlfc2VjbWFyayh0bywgZnJvbSk7CiB9CiAKIGludCBpcDZfZmluZF8xc3RmcmFnb3B0KHN0cnVjdCBza19idWZmICpza2IsIHU4ICoqbmV4dGhkcikKQEAgLTQ4OCw2ICs0OTAsNyBAQAogCiAJcmV0dXJuIG9mZnNldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlwNl9maW5kXzFzdGZyYWdvcHQpOwogCiBzdGF0aWMgaW50IGlwNl9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICopKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXBjb21wNi5jIGIvbmV0L2lwdjYvaXBjb21wNi5jCmluZGV4IDQ4NjM2NDMuLmYyOGNkMzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwY29tcDYuYworKysgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKQEAgLTY1LDM4ICs2NSwyNSBAQAogCiBzdGF0aWMgaW50IGlwY29tcDZfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGVyciA9IDA7Ci0JdTggbmV4dGhkciA9IDA7Ci0JaW50IGhkcl9sZW4gPSBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXc7Ci0JdW5zaWduZWQgY2hhciAqdG1wX2hkciA9IE5VTEw7CisJaW50IGVyciA9IC1FTk9NRU07CiAJc3RydWN0IGlwdjZoZHIgKmlwaDsKKwlzdHJ1Y3QgaXB2Nl9jb21wX2hkciAqaXBjaDsKIAlpbnQgcGxlbiwgZGxlbjsKIAlzdHJ1Y3QgaXBjb21wX2RhdGEgKmlwY2QgPSB4LT5kYXRhOwogCXU4ICpzdGFydCwgKnNjcmF0Y2g7CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKIAlpbnQgY3B1OwogCi0JaWYgKChza2JfaXNfbm9ubGluZWFyKHNrYikgfHwgc2tiX2Nsb25lZChza2IpKSAmJgotCQlza2JfbGluZWFyaXplKHNrYiwgR0ZQX0FUT01JQykgIT0gMCkgewotCQllcnIgPSAtRU5PTUVNOworCWlmIChza2JfbGluZWFyaXplX2Nvdyhza2IpKQogCQlnb3RvIG91dDsKLQl9CiAKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKIAkvKiBSZW1vdmUgaXBjb21wIGhlYWRlciBhbmQgZGVjb21wcmVzcyBvcmlnaW5hbCBwYXlsb2FkICovCiAJaXBoID0gc2tiLT5uaC5pcHY2aDsKLQl0bXBfaGRyID0ga21hbGxvYyhoZHJfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXRtcF9oZHIpCi0JCWdvdG8gb3V0OwotCW1lbWNweSh0bXBfaGRyLCBpcGgsIGhkcl9sZW4pOwotCW5leHRoZHIgPSAqKHU4ICopc2tiLT5kYXRhOwotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2X2NvbXBfaGRyKSk7IAotCXNrYi0+bmgucmF3ICs9IHNpemVvZihzdHJ1Y3QgaXB2Nl9jb21wX2hkcik7Ci0JbWVtY3B5KHNrYi0+bmgucmF3LCB0bXBfaGRyLCBoZHJfbGVuKTsKLQlpcGggPSBza2ItPm5oLmlwdjZoOwotCWlwaC0+cGF5bG9hZF9sZW4gPSBodG9ucyhudG9ocyhpcGgtPnBheWxvYWRfbGVuKSAtIHNpemVvZihzdHJ1Y3QgaXB2Nl9jb21wX2hkcikpOwotCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CisJaXBjaCA9ICh2b2lkICopc2tiLT5kYXRhOworCXNrYi0+aC5yYXcgPSBza2ItPm5oLnJhdyArIHNpemVvZigqaXBjaCk7CisJX19za2JfcHVsbChza2IsIHNpemVvZigqaXBjaCkpOwogCiAJLyogZGVjb21wcmVzc2lvbiAqLwogCXBsZW4gPSBza2ItPmxlbjsKQEAgLTEyNSwxOCArMTEyLDExIEBACiAKIAlza2JfcHV0KHNrYiwgZGxlbiAtIHBsZW4pOwogCW1lbWNweShza2ItPmRhdGEsIHNjcmF0Y2gsIGRsZW4pOworCWVyciA9IGlwY2gtPm5leHRoZHI7CiAKLQlpcGggPSBza2ItPm5oLmlwdjZoOwotCWlwaC0+cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItPmxlbik7Ci0JCiBvdXRfcHV0X2NwdToKIAlwdXRfY3B1KCk7CiBvdXQ6Ci0Ja2ZyZWUodG1wX2hkcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcl9vdXQ7Ci0JcmV0dXJuIG5leHRoZHI7Ci1lcnJvcl9vdXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU5LDEwICsxMzksOCBAQAogCQlnb3RvIG91dF9vazsKIAl9CiAKLQlpZiAoKHNrYl9pc19ub25saW5lYXIoc2tiKSB8fCBza2JfY2xvbmVkKHNrYikpICYmCi0JCXNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSB7CisJaWYgKHNrYl9saW5lYXJpemVfY293KHNrYikpCiAJCWdvdG8gb3V0X29rOwotCX0KIAogCS8qIGNvbXByZXNzaW9uICovCiAJcGxlbiA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDkzYmFlMzYuLjJhNzFjM2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIAkvKiBUaGlzIGlzIHdoZXJlIHdlIGNhbGwgdGhlIGhlbHBlcjogYXMgdGhlIHBhY2tldCBnb2VzIG91dC4gKi8KIAljdCA9IG5mX2N0X2dldCgqcHNrYiwgJmN0aW5mbyk7Ci0JaWYgKCFjdCkKKwlpZiAoIWN0IHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpCiAJCWdvdG8gb3V0OwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCA4NmM2NzAzLi5lZjE4YTdiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLQlpZiAoaG9va251bSA9PSBORl9JUDZfUFJFX1JPVVRJTkcgJiYKKwlpZiAobmZfY29ubnRyYWNrX2NoZWNrc3VtICYmIGhvb2tudW0gPT0gTkZfSVA2X1BSRV9ST1VUSU5HICYmCiAJICAgIG5mX2lwNl9jaGVja3N1bShza2IsIGhvb2tudW0sIGRhdGFvZmYsIElQUFJPVE9fSUNNUFY2KSkgewogCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkgICAgICAibmZfY3RfaWNtcHY2OiBJQ01QdjYgY2hlY2tzdW0gZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwppbmRleCAzZTMxOTAzLi5jMzJhMDI5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCkBAIC00NTYsMTMgKzQ1Niw5IEBACiAJCURFQlVHUCgicXVldWU6IG1lc3NhZ2UgaXMgdG9vIHNob3J0LlxuIik7CiAJCWdvdG8gZXJyOwogCX0KLQlpZiAoZW5kLW9mZnNldCA8IHNrYi0+bGVuKSB7Ci0JCWlmIChwc2tiX3RyaW0oc2tiLCBlbmQgLSBvZmZzZXQpKSB7Ci0JCQlERUJVR1AoIkNhbid0IHRyaW1cbiIpOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCWlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCBlbmQgLSBvZmZzZXQpKSB7CisJCURFQlVHUCgiQ2FuJ3QgdHJpbVxuIik7CisJCWdvdG8gZXJyOwogCX0KIAogCS8qIEZpbmQgb3V0IHdoaWNoIGZyYWdtZW50cyBhcmUgaW4gZnJvbnQgYW5kIGF0IHRoZSBiYWNrIG9mIHVzCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCAwMTkwZTM5Li44YTc3NzkzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTI4MCwxMCArMjgwLDEzIEBACiB7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBydC0+cnQ2aV9uZXh0aG9wOwogCWludCBtID0gMDsKLQlpZiAobmVpZ2gpIHsKKwlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QIHx8CisJICAgICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfR0FURVdBWSkpCisJCW0gPSAxOworCWVsc2UgaWYgKG5laWdoKSB7CiAJCXJlYWRfbG9ja19iaCgmbmVpZ2gtPmxvY2spOwogCQlpZiAobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkKLQkJCW0gPSAxOworCQkJbSA9IDI7CiAJCXJlYWRfdW5sb2NrX2JoKCZuZWlnaC0+bG9jayk7CiAJfQogCXJldHVybiBtOwpAQCAtMjkyLDE1ICsyOTUsMTggQEAKIHN0YXRpYyBpbnQgcnQ2X3Njb3JlX3JvdXRlKHN0cnVjdCBydDZfaW5mbyAqcnQsIGludCBvaWYsCiAJCQkgICBpbnQgc3RyaWN0KQogewotCWludCBtID0gcnQ2X2NoZWNrX2RldihydCwgb2lmKTsKKwlpbnQgbSwgbjsKKwkJCisJbSA9IHJ0Nl9jaGVja19kZXYocnQsIG9pZik7CiAJaWYgKCFtICYmIChzdHJpY3QgJiBSVDZfU0VMRUNUX0ZfSUZBQ0UpKQogCQlyZXR1cm4gLTE7CiAjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYKIAltIHw9IElQVjZfREVDT0RFX1BSRUYoSVBWNl9FWFRSQUNUX1BSRUYocnQtPnJ0NmlfZmxhZ3MpKSA8PCAyOwogI2VuZGlmCi0JaWYgKHJ0Nl9jaGVja19uZWlnaChydCkpCisJbiA9IHJ0Nl9jaGVja19uZWlnaChydCk7CisJaWYgKG4gPiAxKQogCQltIHw9IDE2OwotCWVsc2UgaWYgKHN0cmljdCAmIFJUNl9TRUxFQ1RfRl9SRUFDSEFCTEUpCisJZWxzZSBpZiAoIW4gJiYgc3RyaWN0ICYgUlQ2X1NFTEVDVF9GX1JFQUNIQUJMRSkKIAkJcmV0dXJuIC0xOwogCXJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggMzAxZWVlNy4uYTUwZWIzMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0xMjE4LDggKzEyMTgsMTYgQEAKIAliaF9sb2NrX3NvY2soc2spOwogCXJldCA9IDA7CiAJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7Ci0JCWlmICghdGNwX3ByZXF1ZXVlKHNrLCBza2IpKQotCQkJcmV0ID0gdGNwX3Y2X2RvX3Jjdihzaywgc2tiKTsKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorICAgICAgICAgICAgICAgIHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworICAgICAgICAgICAgICAgIGlmICh0cC0+dWNvcHkuZG1hX2NoYW4pCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0Y3BfdjZfZG9fcmN2KHNrLCBza2IpOworICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorCQl7CisJCQlpZiAoIXRjcF9wcmVxdWV1ZShzaywgc2tiKSkKKwkJCQlyZXQgPSB0Y3BfdjZfZG9fcmN2KHNrLCBza2IpOworCQl9CiAJfSBlbHNlCiAJCXNrX2FkZF9iYWNrbG9nKHNrLCBza2IpOwogCWJoX3VubG9ja19zb2NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCmluZGV4IDAwY2ZkZWUuLjA0MDVkNzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwpAQCAtMTMsMjEgKzEzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgotI2luY2x1ZGUgPG5ldC9kc2ZpZWxkLmg+Ci0jaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+Ci0jaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBpcDZfZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGlwdjZoZHIgKm91dGVyX2lwaCA9IHNrYi0+bmguaXB2Nmg7Ci0Jc3RydWN0IGlwdjZoZHIgKmlubmVyX2lwaCA9IHNrYi0+aC5pcHY2aDsKLQotCWlmIChJTkVUX0VDTl9pc19jZShpcHY2X2dldF9kc2ZpZWxkKG91dGVyX2lwaCkpKQotCQlJUDZfRUNOX3NldF9jZShpbm5lcl9pcGgpOwotfQotCiBpbnQgeGZybTZfcmN2X3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgc3BpKQogewogCWludCBlcnI7CkBAIC04MSwyMSArNjksMTAgQEAKIAogCQl4ZnJtX3ZlY1t4ZnJtX25yKytdID0geDsKIAorCQlpZiAoeC0+bW9kZS0+aW5wdXQoeCwgc2tiKSkKKwkJCWdvdG8gZHJvcDsKKwogCQlpZiAoeC0+cHJvcHMubW9kZSkgeyAvKiBYWFggKi8KLQkJCWlmIChuZXh0aGRyICE9IElQUFJPVE9fSVBWNikKLQkJCQlnb3RvIGRyb3A7Ci0JCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKLQkJCQlnb3RvIGRyb3A7Ci0JCQlpZiAoc2tiX2Nsb25lZChza2IpICYmCi0JCQkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQotCQkJCWdvdG8gZHJvcDsKLQkJCWlmICh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfREVDQVBfRFNDUCkKLQkJCQlpcHY2X2NvcHlfZHNjcChza2ItPm5oLmlwdjZoLCBza2ItPmguaXB2NmgpOwotCQkJaWYgKCEoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX05PRUNOKSkKLQkJCQlpcGlwNl9lY25fZGVjYXBzdWxhdGUoc2tiKTsKLQkJCXNrYi0+bWFjLnJhdyA9IG1lbW1vdmUoc2tiLT5kYXRhIC0gc2tiLT5tYWNfbGVuLAotCQkJCQkgICAgICAgc2tiLT5tYWMucmF3LCBza2ItPm1hY19sZW4pOwotCQkJc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7CiAJCQlkZWNhcHMgPSAxOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X21vZGVfdHJhbnNwb3J0LmMgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3RyYW5zcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMWQ3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiB4ZnJtNl9tb2RlX3RyYW5zcG9ydC5jIC0gVHJhbnNwb3J0IG1vZGUgZW5jYXBzdWxhdGlvbiBmb3IgSVB2Ni4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVVNBR0kvV0lERSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgorCisvKiBBZGQgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCisgKgorICogVGhlIElQIGhlYWRlciBhbmQgbXV0YWJsZSBleHRlbnNpb24gaGVhZGVycyB3aWxsIGJlIG1vdmVkIGZvcndhcmQgdG8gbWFrZQorICogc3BhY2UgZm9yIHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBPbiBleGl0LCBza2ItPmggd2lsbCBiZSBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlciB0byBiZQorICogZmlsbGVkIGluIGJ5IHgtPnR5cGUtPm91dHB1dCBhbmQgc2tiLT5uaCB3aWxsIGJlIHNldCB0byB0aGUgbmV4dGhlYWRlciBmaWVsZAorICogb2YgdGhlIGV4dGVuc2lvbiBoZWFkZXIgZGlyZWN0bHkgcHJlY2VkaW5nIHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlciwgb3IgaW4KKyAqIGl0cyBhYnNlbmNlLCB0aGF0IG9mIHRoZSB0b3AgSVAgaGVhZGVyLiAgVGhlIHZhbHVlIG9mIHNrYi0+ZGF0YSB3aWxsIGFsd2F5cworICogcG9pbnQgdG8gdGhlIHRvcCBJUCBoZWFkZXIuCisgKi8KK3N0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc2tiLT5kc3QtPnhmcm07CisJc3RydWN0IGlwdjZoZHIgKmlwaDsKKwl1OCAqcHJldmhkcjsKKwlpbnQgaGRyX2xlbjsKKworCXNrYl9wdXNoKHNrYiwgeC0+cHJvcHMuaGVhZGVyX2xlbik7CisJaXBoID0gc2tiLT5uaC5pcHY2aDsKKworCWhkcl9sZW4gPSBpcDZfZmluZF8xc3RmcmFnb3B0KHNrYiwgJnByZXZoZHIpOworCXNrYi0+bmgucmF3ID0gcHJldmhkciAtIHgtPnByb3BzLmhlYWRlcl9sZW47CisJc2tiLT5oLnJhdyA9IHNrYi0+ZGF0YSArIGhkcl9sZW47CisJbWVtbW92ZShza2ItPmRhdGEsIGlwaCwgaGRyX2xlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbW92ZSBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBUaGUgSVAgaGVhZGVyIHdpbGwgYmUgbW92ZWQgb3ZlciB0aGUgdG9wIG9mIHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlci4KKyAqCisgKiBPbiBlbnRyeSwgc2tiLT5oIHNoYWxsIHBvaW50IHRvIHdoZXJlIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIGFuZCBza2ItPm5oCisgKiBzaGFsbCBiZSBzZXQgdG8gd2hlcmUgdGhlIElQIGhlYWRlciBjdXJyZW50bHkgaXMuICBza2ItPmRhdGEgc2hhbGwgcG9pbnQKKyAqIHRvIHRoZSBzdGFydCBvZiB0aGUgcGF5bG9hZC4KKyAqLworc3RhdGljIGludCB4ZnJtNl90cmFuc3BvcnRfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGlobCA9IHNrYi0+ZGF0YSAtIHNrYi0+aC5yYXc7CisKKwlpZiAoc2tiLT5oLnJhdyAhPSBza2ItPm5oLnJhdykKKwkJc2tiLT5uaC5yYXcgPSBtZW1tb3ZlKHNrYi0+aC5yYXcsIHNrYi0+bmgucmF3LCBpaGwpOworCXNrYi0+bmguaXB2NmgtPnBheWxvYWRfbGVuID0gaHRvbnMoc2tiLT5sZW4gKyBpaGwgLQorCQkJCQkgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKKwlza2ItPmgucmF3ID0gc2tiLT5kYXRhOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHhmcm1fbW9kZSB4ZnJtNl90cmFuc3BvcnRfbW9kZSA9IHsKKwkuaW5wdXQgPSB4ZnJtNl90cmFuc3BvcnRfaW5wdXQsCisJLm91dHB1dCA9IHhmcm02X3RyYW5zcG9ydF9vdXRwdXQsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmVuY2FwID0gWEZSTV9NT0RFX1RSQU5TUE9SVCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHhmcm02X3RyYW5zcG9ydF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHhmcm1fcmVnaXN0ZXJfbW9kZSgmeGZybTZfdHJhbnNwb3J0X21vZGUsIEFGX0lORVQ2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHhmcm02X3RyYW5zcG9ydF9leGl0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHhmcm1fdW5yZWdpc3Rlcl9tb2RlKCZ4ZnJtNl90cmFuc3BvcnRfbW9kZSwgQUZfSU5FVDYpOworCUJVR19PTihlcnIpOworfQorCittb2R1bGVfaW5pdCh4ZnJtNl90cmFuc3BvcnRfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZnJtNl90cmFuc3BvcnRfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfWEZSTV9NT0RFKEFGX0lORVQ2LCBYRlJNX01PREVfVFJBTlNQT1JUKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjc5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogeGZybTZfbW9kZV90dW5uZWwuYyAtIFR1bm5lbCBtb2RlIGVuY2Fwc3VsYXRpb24gZm9yIElQdjYuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFVTQUdJL1dJREUgUHJvamVjdAorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bmV0L2RzZmllbGQuaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBpcDZfZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlwdjZoZHIgKm91dGVyX2lwaCA9IHNrYi0+bmguaXB2Nmg7CisJc3RydWN0IGlwdjZoZHIgKmlubmVyX2lwaCA9IHNrYi0+aC5pcHY2aDsKKworCWlmIChJTkVUX0VDTl9pc19jZShpcHY2X2dldF9kc2ZpZWxkKG91dGVyX2lwaCkpKQorCQlJUDZfRUNOX3NldF9jZShpbm5lcl9pcGgpOworfQorCisvKiBBZGQgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCisgKgorICogVGhlIHRvcCBJUCBoZWFkZXIgd2lsbCBiZSBjb25zdHJ1Y3RlZCBwZXIgUkZDIDI0MDEuICBUaGUgZm9sbG93aW5nIGZpZWxkcworICogaW4gaXQgc2hhbGwgYmUgZmlsbGVkIGluIGJ5IHgtPnR5cGUtPm91dHB1dDoKKyAqCXBheWxvYWRfbGVuCisgKgorICogT24gZXhpdCwgc2tiLT5oIHdpbGwgYmUgc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgdG8gYmUKKyAqIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQgYW5kIHNrYi0+bmggd2lsbCBiZSBzZXQgdG8gdGhlIG5leHRoZWFkZXIgZmllbGQKKyAqIG9mIHRoZSBleHRlbnNpb24gaGVhZGVyIGRpcmVjdGx5IHByZWNlZGluZyB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIsIG9yIGluCisgKiBpdHMgYWJzZW5jZSwgdGhhdCBvZiB0aGUgdG9wIElQIGhlYWRlci4gIFRoZSB2YWx1ZSBvZiBza2ItPmRhdGEgd2lsbCBhbHdheXMKKyAqIHBvaW50IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgorICovCitzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2ItPmRzdDsKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdC0+eGZybTsKKwlzdHJ1Y3QgaXB2NmhkciAqaXBoLCAqdG9wX2lwaDsKKwlpbnQgZHNmaWVsZDsKKworCXNrYl9wdXNoKHNrYiwgeC0+cHJvcHMuaGVhZGVyX2xlbik7CisJaXBoID0gc2tiLT5uaC5pcHY2aDsKKworCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCXRvcF9pcGggPSBza2ItPm5oLmlwdjZoOworCXNrYi0+bmgucmF3ID0gJnRvcF9pcGgtPm5leHRoZHI7CisJc2tiLT5oLmlwdjZoID0gdG9wX2lwaCArIDE7CisKKwl0b3BfaXBoLT52ZXJzaW9uID0gNjsKKwl0b3BfaXBoLT5wcmlvcml0eSA9IGlwaC0+cHJpb3JpdHk7CisJdG9wX2lwaC0+Zmxvd19sYmxbMF0gPSBpcGgtPmZsb3dfbGJsWzBdOworCXRvcF9pcGgtPmZsb3dfbGJsWzFdID0gaXBoLT5mbG93X2xibFsxXTsKKwl0b3BfaXBoLT5mbG93X2xibFsyXSA9IGlwaC0+Zmxvd19sYmxbMl07CisJZHNmaWVsZCA9IGlwdjZfZ2V0X2RzZmllbGQodG9wX2lwaCk7CisJZHNmaWVsZCA9IElORVRfRUNOX2VuY2Fwc3VsYXRlKGRzZmllbGQsIGRzZmllbGQpOworCWlmICh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfTk9FQ04pCisJCWRzZmllbGQgJj0gfklORVRfRUNOX01BU0s7CisJaXB2Nl9jaGFuZ2VfZHNmaWVsZCh0b3BfaXBoLCAwLCBkc2ZpZWxkKTsKKwl0b3BfaXBoLT5uZXh0aGRyID0gSVBQUk9UT19JUFY2OyAKKwl0b3BfaXBoLT5ob3BfbGltaXQgPSBkc3RfbWV0cmljKGRzdC0+Y2hpbGQsIFJUQVhfSE9QTElNSVQpOworCWlwdjZfYWRkcl9jb3B5KCZ0b3BfaXBoLT5zYWRkciwgKHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5wcm9wcy5zYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPmRhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPmlkLmRhZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ZnJtNl90dW5uZWxfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoc2tiLT5uaC5yYXdbSVA2Q0Ioc2tiKS0+bmhvZmZdICE9IElQUFJPVE9fSVBWNikKKwkJZ290byBvdXQ7CisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCisJCWdvdG8gb3V0OworCisJaWYgKHNrYl9jbG9uZWQoc2tiKSAmJgorCSAgICAoZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX0RFQ0FQX0RTQ1ApCisJCWlwdjZfY29weV9kc2NwKHNrYi0+bmguaXB2NmgsIHNrYi0+aC5pcHY2aCk7CisJaWYgKCEoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX05PRUNOKSkKKwkJaXBpcDZfZWNuX2RlY2Fwc3VsYXRlKHNrYik7CisJc2tiLT5tYWMucmF3ID0gbWVtbW92ZShza2ItPmRhdGEgLSBza2ItPm1hY19sZW4sCisJCQkgICAgICAgc2tiLT5tYWMucmF3LCBza2ItPm1hY19sZW4pOworCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCWVyciA9IDA7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHhmcm1fbW9kZSB4ZnJtNl90dW5uZWxfbW9kZSA9IHsKKwkuaW5wdXQgPSB4ZnJtNl90dW5uZWxfaW5wdXQsCisJLm91dHB1dCA9IHhmcm02X3R1bm5lbF9vdXRwdXQsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmVuY2FwID0gWEZSTV9NT0RFX1RVTk5FTCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHhmcm02X3R1bm5lbF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHhmcm1fcmVnaXN0ZXJfbW9kZSgmeGZybTZfdHVubmVsX21vZGUsIEFGX0lORVQ2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHhmcm02X3R1bm5lbF9leGl0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHhmcm1fdW5yZWdpc3Rlcl9tb2RlKCZ4ZnJtNl90dW5uZWxfbW9kZSwgQUZfSU5FVDYpOworCUJVR19PTihlcnIpOworfQorCittb2R1bGVfaW5pdCh4ZnJtNl90dW5uZWxfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZnJtNl90dW5uZWxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfWEZSTV9NT0RFKEFGX0lORVQ2LCBYRlJNX01PREVfVFVOTkVMKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggODAyNDIxNy4uMTZlODQyNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTE0LDY4ICsxNCw5IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgotI2luY2x1ZGUgPG5ldC9kc2ZpZWxkLmg+Ci0jaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCi0vKiBBZGQgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCi0gKgotICogSW4gdHJhbnNwb3J0IG1vZGUsIHRoZSBJUCBoZWFkZXIgYW5kIG11dGFibGUgZXh0ZW5zaW9uIGhlYWRlcnMgd2lsbCBiZSBtb3ZlZAotICogZm9yd2FyZCB0byBtYWtlIHNwYWNlIGZvciB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIuCi0gKgotICogSW4gdHVubmVsIG1vZGUsIHRoZSB0b3AgSVAgaGVhZGVyIHdpbGwgYmUgY29uc3RydWN0ZWQgcGVyIFJGQyAyNDAxLgotICogVGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gaXQgc2hhbGwgYmUgZmlsbGVkIGluIGJ5IHgtPnR5cGUtPm91dHB1dDoKLSAqCXBheWxvYWRfbGVuCi0gKgotICogT24gZXhpdCwgc2tiLT5oIHdpbGwgYmUgc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgdG8gYmUKLSAqIGZpbGxlZCBpbiBieSB4LT50eXBlLT5vdXRwdXQgYW5kIHNrYi0+bmggd2lsbCBiZSBzZXQgdG8gdGhlIG5leHRoZWFkZXIgZmllbGQKLSAqIG9mIHRoZSBleHRlbnNpb24gaGVhZGVyIGRpcmVjdGx5IHByZWNlZGluZyB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIsIG9yIGluCi0gKiBpdHMgYWJzZW5jZSwgdGhhdCBvZiB0aGUgdG9wIElQIGhlYWRlci4gIFRoZSB2YWx1ZSBvZiBza2ItPmRhdGEgd2lsbCBhbHdheXMKLSAqIHBvaW50IHRvIHRoZSB0b3AgSVAgaGVhZGVyLgotICovCi1zdGF0aWMgdm9pZCB4ZnJtNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYi0+ZHN0OwotCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LT54ZnJtOwotCXN0cnVjdCBpcHY2aGRyICppcGgsICp0b3BfaXBoOwotCWludCBkc2ZpZWxkOwotCi0Jc2tiX3B1c2goc2tiLCB4LT5wcm9wcy5oZWFkZXJfbGVuKTsKLQlpcGggPSBza2ItPm5oLmlwdjZoOwotCi0JaWYgKCF4LT5wcm9wcy5tb2RlKSB7Ci0JCXU4ICpwcmV2aGRyOwotCQlpbnQgaGRyX2xlbjsKLQotCQloZHJfbGVuID0gaXA2X2ZpbmRfMXN0ZnJhZ29wdChza2IsICZwcmV2aGRyKTsKLQkJc2tiLT5uaC5yYXcgPSBwcmV2aGRyIC0geC0+cHJvcHMuaGVhZGVyX2xlbjsKLQkJc2tiLT5oLnJhdyA9IHNrYi0+ZGF0YSArIGhkcl9sZW47Ci0JCW1lbW1vdmUoc2tiLT5kYXRhLCBpcGgsIGhkcl9sZW4pOwotCQlyZXR1cm47Ci0JfQotCi0Jc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7Ci0JdG9wX2lwaCA9IHNrYi0+bmguaXB2Nmg7Ci0Jc2tiLT5uaC5yYXcgPSAmdG9wX2lwaC0+bmV4dGhkcjsKLQlza2ItPmguaXB2NmggPSB0b3BfaXBoICsgMTsKLQotCXRvcF9pcGgtPnZlcnNpb24gPSA2OwotCXRvcF9pcGgtPnByaW9yaXR5ID0gaXBoLT5wcmlvcml0eTsKLQl0b3BfaXBoLT5mbG93X2xibFswXSA9IGlwaC0+Zmxvd19sYmxbMF07Ci0JdG9wX2lwaC0+Zmxvd19sYmxbMV0gPSBpcGgtPmZsb3dfbGJsWzFdOwotCXRvcF9pcGgtPmZsb3dfbGJsWzJdID0gaXBoLT5mbG93X2xibFsyXTsKLQlkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZCh0b3BfaXBoKTsKLQlkc2ZpZWxkID0gSU5FVF9FQ05fZW5jYXBzdWxhdGUoZHNmaWVsZCwgZHNmaWVsZCk7Ci0JaWYgKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9OT0VDTikKLQkJZHNmaWVsZCAmPSB+SU5FVF9FQ05fTUFTSzsKLQlpcHY2X2NoYW5nZV9kc2ZpZWxkKHRvcF9pcGgsIDAsIGRzZmllbGQpOwotCXRvcF9pcGgtPm5leHRoZHIgPSBJUFBST1RPX0lQVjY7IAotCXRvcF9pcGgtPmhvcF9saW1pdCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7Ci0JaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPnNhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPnByb3BzLnNhZGRyKTsKLQlpcHY2X2FkZHJfY29weSgmdG9wX2lwaC0+ZGFkZHIsIChzdHJ1Y3QgaW42X2FkZHIgKikmeC0+aWQuZGFkZHIpOwotfQotCiBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9jaGVja19zaXplKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IG10dSwgcmV0ID0gMDsKQEAgLTExOCw3ICs1OSw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCi0JCXhmcm02X2VuY2FwKHNrYik7CisJCWVyciA9IHgtPm1vZGUtPm91dHB1dChza2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKIAogCQllcnIgPSB4LT50eXBlLT5vdXRwdXQoeCwgc2tiKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggODhjODQwZi4uZWU3MTVmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTIzLDggKzIzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyB4ZnJtNl9kc3Rfb3BzOwogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTZfcG9saWN5X2FmaW5mbzsKIAotc3RhdGljIHN0cnVjdCB4ZnJtX3R5cGVfbWFwIHhmcm02X3R5cGVfbWFwID0geyAubG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQgfTsKLQogc3RhdGljIGludCB4ZnJtNl9kc3RfbG9va3VwKHN0cnVjdCB4ZnJtX2RzdCAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTI0OSw5ICsyNDcsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCB4ZnJtNl9nYXJiYWdlX2NvbGxlY3Qodm9pZCkKIHsKLQlyZWFkX2xvY2soJnhmcm02X3BvbGljeV9hZmluZm8ubG9jayk7CiAJeGZybTZfcG9saWN5X2FmaW5mby5nYXJiYWdlX2NvbGxlY3QoKTsKLQlyZWFkX3VubG9jaygmeGZybTZfcG9saWN5X2FmaW5mby5sb2NrKTsKIAlyZXR1cm4gKGF0b21pY19yZWFkKCZ4ZnJtNl9kc3Rfb3BzLmVudHJpZXMpID4geGZybTZfZHN0X29wcy5nY190aHJlc2gqMik7CiB9CiAKQEAgLTMxMSw4ICszMDcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyB4ZnJtNl9wb2xpY3lfYWZpbmZvID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVDYsCi0JLmxvY2sgPSAJCVJXX0xPQ0tfVU5MT0NLRUQsCi0JLnR5cGVfbWFwID0gCQkmeGZybTZfdHlwZV9tYXAsCiAJLmRzdF9vcHMgPQkJJnhmcm02X2RzdF9vcHMsCiAJLmRzdF9sb29rdXAgPQkJeGZybTZfZHN0X2xvb2t1cCwKIAkuZmluZF9idW5kbGUgPQkJX194ZnJtNl9maW5kX2J1bmRsZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3N0YXRlLmMgYi9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCmluZGV4IGE1NzIzMDIuLmIzMzI5NmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKKysrIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwpAQCAtMTM1LDcgKzEzNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8geGZybTZfc3RhdGVfYWZpbmZvID0gewogCS5mYW1pbHkJCQk9IEFGX0lORVQ2LAotCS5sb2NrCQkJPSBSV19MT0NLX1VOTE9DS0VELAogCS5pbml0X3RlbXBzZWwJCT0gX194ZnJtNl9pbml0X3RlbXBzZWwsCiAJLnN0YXRlX2xvb2t1cAkJPSBfX3hmcm02X3N0YXRlX2xvb2t1cCwKIAkuZmluZF9hY3EJCT0gX194ZnJtNl9maW5kX2FjcSwKZGlmZiAtLWdpdCBhL25ldC9pcHgvaXB4X3JvdXRlLmMgYi9uZXQvaXB4L2lweF9yb3V0ZS5jCmluZGV4IGEzOTRjNmYuLmJiYTM0MzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHgvaXB4X3JvdXRlLmMKKysrIGIvbmV0L2lweC9pcHhfcm91dGUuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJfQkKIAogCS8qIEFwcGx5IGNoZWNrc3VtLiBOb3QgYWxsb3dlZCBvbiA4MDIuMyBsaW5rcy4gKi8KLQlpZiAoc2stPnNrX25vX2NoZWNrIHx8IGludHJmYy0+aWZfZGxpbmtfdHlwZSA9PSBJUFhfRlJBTUVfODAyMykKKwlpZiAoc2stPnNrX25vX2NoZWNrIHx8IGludHJmYy0+aWZfZGxpbmtfdHlwZSA9PSBodG9ucyhJUFhfRlJBTUVfODAyMykpCiAJCWlweC0+aXB4X2NoZWNrc3VtID0gMHhGRkZGOwogCWVsc2UKIAkJaXB4LT5pcHhfY2hlY2tzdW0gPSBpcHhfY2tzdW0oaXB4LCBsZW4gKyBzaXplb2Yoc3RydWN0IGlweGhkcikpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXAuYyBiL25ldC9pcmRhL2lybGFwLmMKaW5kZXggNzAyOTYxOC4uYTE2NTI4NiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXAuYworKysgYi9uZXQvaXJkYS9pcmxhcC5jCkBAIC04ODQsNyArODg0LDggQEAKIAlpZiAobm93KSB7CiAJCS8qIFNlbmQgZG93biBlbXB0eSBmcmFtZSB0byB0cmlnZ2VyIHNwZWVkIGNoYW5nZSAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwotCQlpcmxhcF9xdWV1ZV94bWl0KHNlbGYsIHNrYik7CisJCWlmIChza2IpCisJCQlpcmxhcF9xdWV1ZV94bWl0KHNlbGYsIHNrYik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxtcC5jIGIvbmV0L2lyZGEvaXJsbXAuYwppbmRleCBjMTllOWNlLi41N2VhMTYwIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxtcC5jCisrKyBiL25ldC9pcmRhL2lybG1wLmMKQEAgLTQ0LDYgKzQ0LDggQEAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcC5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wX2ZyYW1lLmg+CiAKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKIHN0YXRpYyBfX3U4IGlybG1wX2ZpbmRfZnJlZV9zbHNhcCh2b2lkKTsKIHN0YXRpYyBpbnQgaXJsbXBfc2xzYXBfaW51c2UoX191OCBzbHNhcF9zZWwpOwogCkBAIC04NDAsNiArODQyLDcgQEAKIHZvaWQgaXJsbXBfZG9fZGlzY292ZXJ5KGludCBuc2xvdHMpCiB7CiAJc3RydWN0IGxhcF9jYiAqbGFwOworCV9fdTE2ICpkYXRhX2hpbnRzcDsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgdmFsdWUgaXMgc2FuZSAqLwogCWlmICgobnNsb3RzICE9IDEpICYmIChuc2xvdHMgIT0gNikgJiYgKG5zbG90cyAhPSA4KSAmJiAobnNsb3RzICE9IDE2KSl7CkBAIC04NDksNyArODUyLDggQEAKIAl9CiAKIAkvKiBDb25zdHJ1Y3QgbmV3IGRpc2NvdmVyeSBpbmZvIHRvIGJlIHVzZWQgYnkgSXJMQVAsICovCi0JdTE2aG8oaXJsbXAtPmRpc2NvdmVyeV9jbWQuZGF0YS5oaW50cykgPSBpcmxtcC0+aGludHMud29yZDsKKwlkYXRhX2hpbnRzcCA9IChfX3UxNiAqKSBpcmxtcC0+ZGlzY292ZXJ5X2NtZC5kYXRhLmhpbnRzOworCXB1dF91bmFsaWduZWQoaXJsbXAtPmhpbnRzLndvcmQsIGRhdGFfaGludHNwKTsKIAogCS8qCiAJICogIFNldCBjaGFyYWN0ZXIgc2V0IGZvciBkZXZpY2UgbmFtZSAod2UgdXNlIEFTQ0lJKSwgYW5kCmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCA4NTk1ODIyLi5kNWUyMTIxIDEwMDY0NAotLS0gYS9uZXQva2V5L2FmX2tleS5jCisrKyBiL25ldC9rZXkvYWZfa2V5LmMKQEAgLTE0NTQsMjEgKzE0NTQsMjMgQEAKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCisJaWYgKChlcnIgPSBzZWN1cml0eV94ZnJtX3N0YXRlX2RlbGV0ZSh4KSkpCisJCWdvdG8gb3V0OworCiAJaWYgKHhmcm1fc3RhdGVfa2Vybih4KSkgewotCQl4ZnJtX3N0YXRlX3B1dCh4KTsKLQkJcmV0dXJuIC1FUEVSTTsKKwkJZXJyID0gLUVQRVJNOworCQlnb3RvIG91dDsKIAl9CiAJCiAJZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJeGZybV9zdGF0ZV9wdXQoeCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKIAogCWMuc2VxID0gaGRyLT5zYWRiX21zZ19zZXE7CiAJYy5waWQgPSBoZHItPnNhZGJfbXNnX3BpZDsKIAljLmV2ZW50ID0gWEZSTV9NU0dfREVMU0E7CiAJa21fc3RhdGVfbm90aWZ5KHgsICZjKTsKK291dDoKIAl4ZnJtX3N0YXRlX3B1dCh4KTsKIAogCXJldHVybiBlcnI7CkBAIC0yMjc0LDExICsyMjc2LDE0IEBACiAKIAllcnIgPSAwOwogCisJaWYgKChlcnIgPSBzZWN1cml0eV94ZnJtX3BvbGljeV9kZWxldGUoeHApKSkKKwkJZ290byBvdXQ7CiAJYy5zZXEgPSBoZHItPnNhZGJfbXNnX3NlcTsKIAljLnBpZCA9IGhkci0+c2FkYl9tc2dfcGlkOwogCWMuZXZlbnQgPSBYRlJNX01TR19ERUxQT0xJQ1k7CiAJa21fcG9saWN5X25vdGlmeSh4cCwgcG9sLT5zYWRiX3hfcG9saWN5X2Rpci0xLCAmYyk7CiAKK291dDoKIAl4ZnJtX3BvbF9wdXQoeHApOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvbGxjL2FmX2xsYy5jIGIvbmV0L2xsYy9hZl9sbGMuYwppbmRleCA1YTA0ZGI3Li43NWM5YjE0IDEwMDY0NAotLS0gYS9uZXQvbGxjL2FmX2xsYy5jCisrKyBiL25ldC9sbGMvYWZfbGxjLmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogCiAJbG9ja19zb2NrKHNrKTsKIAljb3BpZWQgPSAtRU5PVENPTk47Ci0JaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKQorCWlmICh1bmxpa2VseShzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSAmJiBzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikpCiAJCWdvdG8gb3V0OwogCiAJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBub25ibG9jayk7CkBAIC03MzMsNyArNzMzLDcgQEAKIAkJCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pCiAJCQkJYnJlYWs7CiAKLQkJCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7CisJCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0gJiYgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkgewogCQkJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFRoaXMgb2NjdXJzIHdoZW4gdXNlciB0cmllcyB0byByZWFkCkBAIC03ODksNyArNzg5LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghKGZsYWdzICYgTVNHX1BFRUspKSB7Ci0JCQlza19lYXRfc2tiKHNrLCBza2IpOworCQkJc2tfZWF0X3NrYihzaywgc2tiLCAwKTsKIAkJCSpzZXEgPSAwOwogCQl9CiAJfSB3aGlsZSAobGVuID4gMCk7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19pZi5jIGIvbmV0L2xsYy9sbGNfaWYuYwppbmRleCBiYTkwZjdmLi41YWU0N2JlIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19pZi5jCisrKyBiL25ldC9sbGMvbGxjX2lmLmMKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlIDxuZXQvbGxjX2Nfc3QuaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgogCi11OCBsbGNfbWFjX251bGxfdmFyW0lGSFdBRERSTEVOXTsKLQogLyoqCiAgKglsbGNfYnVpbGRfYW5kX3NlbmRfcGt0IC0gQ29ubmVjdGlvbiBkYXRhIHNlbmRpbmcgZm9yIHVwcGVyIGxheWVycy4KICAqCUBzazogY29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfaW5wdXQuYyBiL25ldC9sbGMvbGxjX2lucHV0LmMKaW5kZXggZDYyZTBmOS4uOTRkMjM2OCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfaW5wdXQuYworKysgYi9uZXQvbGxjL2xsY19pbnB1dC5jCkBAIC0xNDIsNiArMTQyLDggQEAKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwOwogCXN0cnVjdCBsbGNfcGR1X3NuICpwZHU7CiAJaW50IGRlc3Q7CisJaW50ICgqcmN2KShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLAorCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKIAkvKgogCSAqIFdoZW4gdGhlIGludGVyZmFjZSBpcyBpbiBwcm9taXNjLiBtb2RlLCBkcm9wIGFsbCB0aGUgY3JhcCB0aGF0IGl0CkBAIC0xNjksOSArMTcxLDExIEBACiAJICogRmlyc3QgdGhlIHVwcGVyIGxheWVyIHByb3RvY29scyB0aGF0IGRvbid0IG5lZWQgdGhlIGZ1bGwKIAkgKiBMTEMgZnVuY3Rpb25hbGl0eQogCSAqLwotCWlmIChzYXAtPnJjdl9mdW5jKSB7Ci0JCXNhcC0+cmN2X2Z1bmMoc2tiLCBkZXYsIHB0LCBvcmlnX2Rldik7Ci0JCWdvdG8gb3V0X3B1dDsKKwlyY3YgPSByY3VfZGVyZWZlcmVuY2Uoc2FwLT5yY3ZfZnVuYyk7CisJaWYgKHJjdikgeworIAkJc3RydWN0IHNrX2J1ZmYgKmNza2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKyAJCWlmIChjc2tiKQorIAkJCXJjdihjc2tiLCBkZXYsIHB0LCBvcmlnX2Rldik7CiAJfQogCWRlc3QgPSBsbGNfcGR1X3R5cGUoc2tiKTsKIAlpZiAodW5saWtlbHkoIWRlc3QgfHwgIWxsY190eXBlX2hhbmRsZXJzW2Rlc3QgLSAxXSkpCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19zYXAuYyBiL25ldC9sbGMvbGxjX3NhcC5jCmluZGV4IDQwMjljZWUuLjIwYzRlYjUgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX3NhcC5jCisrKyBiL25ldC9sbGMvbGxjX3NhcC5jCkBAIC0yODIsNyArMjgyLDcgQEAKICAqCW1hYywgYW5kIGxvY2FsIHNhcC4gUmV0dXJucyBwb2ludGVyIGZvciBzb2NrZXQgZm91bmQsICVOVUxMIG90aGVyd2lzZS4KICAqLwogc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfbG9va3VwX2RncmFtKHN0cnVjdCBsbGNfc2FwICpzYXAsCi0JCQkJICAgICBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQorCQkJCSAgICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpsYWRkcikKIHsKIAlzdHJ1Y3Qgc29jayAqcmM7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CkBAIC0zMDQsMTkgKzMwNCw2MiBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiAJbGxjX3NhcF9tY2FzdCAtIERlbGl2ZXIgbXVsdGljYXN0IFBEVSdzIHRvIGFsbCBtYXRjaGluZyBkYXRhZ3JhbSBzb2NrZXRzLgorICoJQHNhcDogU0FQCisgKglAbGFkZHI6IGFkZHJlc3Mgb2YgbG9jYWwgTExDIChNQUMgKyBTQVApCisgKgorICoJU2VhcmNoIHNvY2tldCBsaXN0IG9mIHRoZSBTQVAgYW5kIGZpbmRzIGNvbm5lY3Rpb25zIHdpdGggc2FtZSBzYXAuCisgKglEZWxpdmVyIGNsb25lIHRvIGVhY2guCisgKi8KK3N0YXRpYyB2b2lkIGxsY19zYXBfbWNhc3Qoc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCSAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpsYWRkciwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlyZWFkX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKKwlza19mb3JfZWFjaChzaywgbm9kZSwgJnNhcC0+c2tfbGlzdC5saXN0KSB7CisJCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CisKKwkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfREdSQU0pCisJCQljb250aW51ZTsKKworCQlpZiAobGxjLT5sYWRkci5sc2FwICE9IGxhZGRyLT5sc2FwKQorCQkJY29udGludWU7CisKKwkJc2tiMSA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYjEpCisJCQlicmVhazsKKworCQlzb2NrX2hvbGQoc2spOworCQlza2Jfc2V0X293bmVyX3Ioc2tiMSwgc2spOworCQlsbGNfc2FwX3JjdihzYXAsIHNrYjEpOworCQlzb2NrX3B1dChzayk7CisJfQorCXJlYWRfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7Cit9CisKKwogdm9pZCBsbGNfc2FwX2hhbmRsZXIoc3RydWN0IGxsY19zYXAgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbGxjX2FkZHIgbGFkZHI7Ci0Jc3RydWN0IHNvY2sgKnNrOwogCiAJbGxjX3BkdV9kZWNvZGVfZGEoc2tiLCBsYWRkci5tYWMpOwogCWxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCAmbGFkZHIubHNhcCk7CiAKLQlzayA9IGxsY19sb29rdXBfZGdyYW0oc2FwLCAmbGFkZHIpOwotCWlmIChzaykgewotCQlza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7Ci0JCWxsY19zYXBfcmN2KHNhcCwgc2tiKTsKLQkJc29ja19wdXQoc2spOwotCX0gZWxzZQorCWlmIChsbGNfbWFjX211bHRpY2FzdChsYWRkci5tYWMpKSB7CisJCWxsY19zYXBfbWNhc3Qoc2FwLCAmbGFkZHIsIHNrYik7CiAJCWtmcmVlX3NrYihza2IpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzb2NrICpzayA9IGxsY19sb29rdXBfZGdyYW0oc2FwLCAmbGFkZHIpOworCQlpZiAoc2spIHsKKwkJCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKKwkJCWxsY19zYXBfcmN2KHNhcCwgc2tiKTsKKwkJCXNvY2tfcHV0KHNrKTsKKwkJfSBlbHNlCisJCQlrZnJlZV9za2Ioc2tiKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggZTI4OTNlZi4uYjE2MjJiNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtNjAsNiArNjAsMTggQEAKIAkgIG9mIHBhY2tldHMsIGJ1dCB0aGlzIG1hcmsgdmFsdWUgaXMga2VwdCBpbiB0aGUgY29ubnRyYWNrIHNlc3Npb24KIAkgIGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwgcGFja2V0cy4KIAorY29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLCisJYm9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JworCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLICYmIE5FVFdPUktfU0VDTUFSSworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc2VjdXJpdHkgbWFya2luZ3MgdG8gYmUgYXBwbGllZCB0bworCSAgY29ubmVjdGlvbnMuICBUeXBpY2FsbHkgdGhleSBhcmUgY29waWVkIHRvIGNvbm5lY3Rpb25zIGZyb20KKwkgIHBhY2tldHMgdXNpbmcgdGhlIENPTk5TRUNNQVJLIHRhcmdldCBhbmQgY29waWVkIGJhY2sgZnJvbQorCSAgY29ubmVjdGlvbnMgdG8gcGFja2V0cyB3aXRoIHRoZSBzYW1lIHRhcmdldCwgd2l0aCB0aGUgcGFja2V0cworCSAgYmVpbmcgb3JpZ2luYWxseSBsYWJlbGVkIHZpYSBTRUNNQVJLLgorCisJICBJZiB1bnN1cmUsIHNheSAnTicuCisKIGNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTCiAJYm9vbCAiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCkBAIC0xNzQsNiArMTg2LDI2IEBACiAJICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0Pi4gIElmIHVuc3VyZSwgc2F5IGBOJy4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSworCXRyaXN0YXRlICciU0VDTUFSSyIgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUyAmJiBORVRXT1JLX1NFQ01BUksKKwloZWxwCisJICBUaGUgU0VDTUFSSyB0YXJnZXQgYWxsb3dzIHNlY3VyaXR5IG1hcmtpbmcgb2YgbmV0d29yaworCSAgcGFja2V0cywgZm9yIHVzZSB3aXRoIHNlY3VyaXR5IHN1YnN5c3RlbXMuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSworCXRyaXN0YXRlICciQ09OTlNFQ01BUksiIHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMgJiYgKE5GX0NPTk5UUkFDS19TRUNNQVJLIHx8IElQX05GX0NPTk5UUkFDS19TRUNNQVJLKQorCWhlbHAKKwkgIFRoZSBDT05OU0VDTUFSSyB0YXJnZXQgY29waWVzIHNlY3VyaXR5IG1hcmtpbmdzIGZyb20gcGFja2V0cworCSAgdG8gY29ubmVjdGlvbnMsIGFuZCByZXN0b3JlcyBzZWN1cml0eSBtYXJraW5ncyBmcm9tIGNvbm5lY3Rpb25zCisJICB0byBwYWNrZXRzIChpZiB0aGUgcGFja2V0cyBhcmUgbm90IGFscmVhZHkgbWFya2VkKS4gIFRoaXMgd291bGQKKwkgIG5vcm1hbGx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgU0VDTUFSSyB0YXJnZXQuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQKIAl0cmlzdGF0ZSAgJyJjb21tZW50IiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMKQEAgLTMyOSw2ICszNjEsMTYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEKKwl0cmlzdGF0ZSAnInF1b3RhIiBtYXRjaCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEgYHF1b3RhJyBtYXRjaCwgd2hpY2ggYWxsb3dzIHRvIG1hdGNoIG9uIGEKKwkgIGJ5dGUgY291bnRlci4KKworCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4uICBJZiB1bnN1cmUsIHNheSBgTicuCisKIGNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0KIAl0cmlzdGF0ZSAgJyJyZWFsbSIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCkBAIC0zNjUsNiArNDA3LDEyIEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQworCXRyaXN0YXRlICcic3RhdGlzdGljIiBtYXRjaCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMKKwloZWxwCisJICBzdGF0aXN0aWMgbW9kdWxlCisKIGNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HCiAJdHJpc3RhdGUgICcic3RyaW5nIiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDk1YjdlNDEuLjZmYTRiNzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMjgsNiArMjgsOCBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSykgKz0geHRfTUFSSy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFKSArPSB4dF9ORlFVRVVFLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0spICs9IHh0X05PVFJBQ0subworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSykgKz0geHRfU0VDTUFSSy5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSykgKz0geHRfQ09OTlNFQ01BUksubwogCiAjIG1hdGNoZXMKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCkgKz0geHRfY29tbWVudC5vCkBAIC00NCw5ICs0NiwxMSBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQpICs9IHh0X211bHRpcG9ydC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSkgKz0geHRfcG9saWN5Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSkgKz0geHRfcGt0dHlwZS5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBKSArPSB4dF9xdW90YS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNKSArPSB4dF9yZWFsbS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFApICs9IHh0X3NjdHAubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSkgKz0geHRfc3RhdGUubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMpICs9IHh0X3N0YXRpc3RpYy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORykgKz0geHRfc3RyaW5nLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTKSArPSB4dF90Y3Btc3Mubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWKSArPSB4dF9waHlzZGV2Lm8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBmOWI4M2Y5Li5jZDI5OWY0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC05OTAsNiArOTkwLDkgQEAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKIAkJY29ubnRyYWNrLT5tYXJrID0gZXhwLT5tYXN0ZXItPm1hcms7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUksKKwkJY29ubnRyYWNrLT5zZWNtYXJrID0gZXhwLT5tYXN0ZXItPnNlY21hcms7CisjZW5kaWYKIAkJbmZfY29ubnRyYWNrX2dldCgmY29ubnRyYWNrLT5tYXN0ZXItPmN0X2dlbmVyYWwpOwogCQlORl9DVF9TVEFUX0lOQyhleHBlY3RfbmV3KTsKIAl9IGVsc2UKQEAgLTEzOTYsNiArMTM5OSwxMiBAQAogCiAJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCisJLyogT25seSB1cGRhdGUgaWYgdGhpcyBpcyBub3QgYSBmaXhlZCB0aW1lb3V0ICovCisJaWYgKHRlc3RfYml0KElQU19GSVhFRF9USU1FT1VUX0JJVCwgJmN0LT5zdGF0dXMpKSB7CisJCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQlyZXR1cm47CisJfQorCiAJLyogSWYgbm90IGluIGhhc2ggdGFibGUsIHRpbWVyIHdpbGwgbm90IGJlIGFjdGl2ZSB5ZXQgKi8KIAlpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHsKIAkJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGV4dHJhX2ppZmZpZXM7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCmluZGV4IGUzOGE0YjUuLjExZDNiZTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCkBAIC02NywzNyArNjcsNDggQEAKIAkJCSAgICAgY2hhcik7CiAKIHN0YXRpYyBzdHJ1Y3QgZnRwX3NlYXJjaCB7Ci0JZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKIAljb25zdCBjaGFyICpwYXR0ZXJuOwogCXNpemVfdCBwbGVuOwogCWNoYXIgc2tpcDsKIAljaGFyIHRlcm07CiAJZW51bSBpcF9jdF9mdHBfdHlwZSBmdHB0eXBlOwogCWludCAoKmdldG51bSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBuZl9jb25udHJhY2tfbWFuICosIGNoYXIpOwotfSBzZWFyY2hbXSA9IHsKLQl7Ci0JCUlQX0NUX0RJUl9PUklHSU5BTCwKLQkJIlBPUlQiLCBzaXplb2YoIlBPUlQiKSAtIDEsICcgJywgJ1xyJywKLQkJSVBfQ1RfRlRQX1BPUlQsCi0JCXRyeV9yZmM5NTksCit9IHNlYXJjaFtJUF9DVF9ESVJfTUFYXVsyXSA9IHsKKwlbSVBfQ1RfRElSX09SSUdJTkFMXSA9IHsKKwkJeworCQkJLnBhdHRlcm4JPSAiUE9SVCIsCisJCQkucGxlbgkJPSBzaXplb2YoIlBPUlQiKSAtIDEsCisJCQkuc2tpcAkJPSAnICcsCisJCQkudGVybQkJPSAnXHInLAorCQkJLmZ0cHR5cGUJPSBJUF9DVF9GVFBfUE9SVCwKKwkJCS5nZXRudW0JCT0gdHJ5X3JmYzk1OSwKKwkJfSwKKwkJeworCQkJLnBhdHRlcm4JPSAiRVBSVCIsCisJCQkucGxlbgkJPSBzaXplb2YoIkVQUlQiKSAtIDEsCisJCQkuc2tpcAkJPSAnICcsCisJCQkudGVybQkJPSAnXHInLAorCQkJLmZ0cHR5cGUJPSBJUF9DVF9GVFBfRVBSVCwKKwkJCS5nZXRudW0JCT0gdHJ5X2VwcnQsCisJCX0sCiAJfSwKLQl7Ci0JCUlQX0NUX0RJUl9SRVBMWSwKLQkJIjIyNyAiLCBzaXplb2YoIjIyNyAiKSAtIDEsICcoJywgJyknLAotCQlJUF9DVF9GVFBfUEFTViwKLQkJdHJ5X3JmYzk1OSwKLQl9LAotCXsKLQkJSVBfQ1RfRElSX09SSUdJTkFMLAotCQkiRVBSVCIsIHNpemVvZigiRVBSVCIpIC0gMSwgJyAnLCAnXHInLAotCQlJUF9DVF9GVFBfRVBSVCwKLQkJdHJ5X2VwcnQsCi0JfSwKLQl7Ci0JCUlQX0NUX0RJUl9SRVBMWSwKLQkJIjIyOSAiLCBzaXplb2YoIjIyOSAiKSAtIDEsICcoJywgJyknLAotCQlJUF9DVF9GVFBfRVBTViwKLQkJdHJ5X2Vwc3ZfcmVzcG9uc2UsCisJW0lQX0NUX0RJUl9SRVBMWV0gPSB7CisJCXsKKwkJCS5wYXR0ZXJuCT0gIjIyNyAiLAorCQkJLnBsZW4JCT0gc2l6ZW9mKCIyMjcgIikgLSAxLAorCQkJLnNraXAJCT0gJygnLAorCQkJLnRlcm0JCT0gJyknLAorCQkJLmZ0cHR5cGUJPSBJUF9DVF9GVFBfUEFTViwKKwkJCS5nZXRudW0JCT0gdHJ5X3JmYzk1OSwKKwkJfSwKKwkJeworCQkJLnBhdHRlcm4JPSAiMjI5ICIsCisJCQkucGxlbgkJPSBzaXplb2YoIjIyOSAiKSAtIDEsCisJCQkuc2tpcAkJPSAnKCcsCisJCQkudGVybQkJPSAnKScsCisJCQkuZnRwdHlwZQk9IElQX0NUX0ZUUF9FUFNWLAorCQkJLmdldG51bQkJPSB0cnlfZXBzdl9yZXNwb25zZSwKKwkJfSwKIAl9LAogfTsKIApAQCAtNDkyLDE3ICs1MDMsMTUgQEAKIAltZW1jcHkoY21kLnUzLmFsbCwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMuYWxsLAogCSAgICAgICBzaXplb2YoY21kLnUzLmFsbCkpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VhcmNoKTsgaSsrKSB7Ci0JCWlmIChzZWFyY2hbaV0uZGlyICE9IGRpcikgY29udGludWU7Ci0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZWFyY2hbZGlyXSk7IGkrKykgewogCQlmb3VuZCA9IGZpbmRfcGF0dGVybihmYl9wdHIsIGRhdGFsZW4sCi0JCQkJICAgICBzZWFyY2hbaV0ucGF0dGVybiwKLQkJCQkgICAgIHNlYXJjaFtpXS5wbGVuLAotCQkJCSAgICAgc2VhcmNoW2ldLnNraXAsCi0JCQkJICAgICBzZWFyY2hbaV0udGVybSwKKwkJCQkgICAgIHNlYXJjaFtkaXJdW2ldLnBhdHRlcm4sCisJCQkJICAgICBzZWFyY2hbZGlyXVtpXS5wbGVuLAorCQkJCSAgICAgc2VhcmNoW2Rpcl1baV0uc2tpcCwKKwkJCQkgICAgIHNlYXJjaFtkaXJdW2ldLnRlcm0sCiAJCQkJICAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKIAkJCQkgICAgICZjbWQsCi0JCQkJICAgICBzZWFyY2hbaV0uZ2V0bnVtKTsKKwkJCQkgICAgIHNlYXJjaFtkaXJdW2ldLmdldG51bSk7CiAJCWlmIChmb3VuZCkgYnJlYWs7CiAJfQogCWlmIChmb3VuZCA9PSAtMSkgewpAQCAtNTEyLDcgKzUyMSw3IEBACiAJCSAgIHRoaXMgY2FzZS4gKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50aygiY29ubnRyYWNrX2Z0cDogcGFydGlhbCAlcyAldSsldVxuIiwKLQkJCSAgICAgICBzZWFyY2hbaV0ucGF0dGVybiwKKwkJCSAgICAgICBzZWFyY2hbZGlyXVtpXS5wYXR0ZXJuLAogCQkJICAgICAgIG50b2hsKHRoLT5zZXEpLCBkYXRhbGVuKTsKIAkJcmV0ID0gTkZfRFJPUDsKIAkJZ290byBvdXQ7CkBAIC01OTcsNyArNjA2LDcgQEAKIAkvKiBOb3csIE5BVCBtaWdodCB3YW50IHRvIG1hbmdsZSB0aGUgcGFja2V0LCBhbmQgcmVnaXN0ZXIgdGhlCiAJICogKHBvc3NpYmx5IGNoYW5nZWQpIGV4cGVjdGF0aW9uIGl0c2VsZi4gKi8KIAlpZiAobmZfbmF0X2Z0cF9ob29rKQotCQlyZXQgPSBuZl9uYXRfZnRwX2hvb2socHNrYiwgY3RpbmZvLCBzZWFyY2hbaV0uZnRwdHlwZSwKKwkJcmV0ID0gbmZfbmF0X2Z0cF9ob29rKHBza2IsIGN0aW5mbywgc2VhcmNoW2Rpcl1baV0uZnRwdHlwZSwKIAkJCQkgICAgICBtYXRjaG9mZiwgbWF0Y2hsZW4sIGV4cCwgJnNlcSk7CiAJZWxzZSB7CiAJCS8qIENhbid0IGV4cGVjdCB0aGlzPyAgQmVzdCB0byBkcm9wIHBhY2tldCBub3cuICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggYmQxMGViOS4uYjhjN2M1NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtNDA3LDYgKzQwNyw4IEBACiAKIHN0YXRpYyBpbnQgY3RuZXRsaW5rX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogeworCWlmIChjYi0+YXJnc1sxXSkKKwkJbmZfY3RfcHV0KChzdHJ1Y3QgbmZfY29ubiAqKWNiLT5hcmdzWzFdKTsKIAlERUJVR1AoImVudGVyZWQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIDA7CiB9CkBAIC00MTYsMTAgKzQxOCw5IEBACiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5mX2Nvbm4gKmN0ID0gTlVMTDsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QsICpsYXN0OwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppOwotCXVfaW50MzJfdCAqaWQgPSAodV9pbnQzMl90ICopICZjYi0+YXJnc1sxXTsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gTkxNU0dfREFUQShjYi0+bmxoKTsKIAl1X2ludDhfdCBsM3Byb3RvID0gbmZtc2ctPm5mZ2VuX2ZhbWlseTsKIApAQCAtNDI3LDcgKzQyOCw5IEBACiAJCQljYi0+YXJnc1swXSwgKmlkKTsKIAogCXJlYWRfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCWZvciAoOyBjYi0+YXJnc1swXSA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgY2ItPmFyZ3NbMF0rKywgKmlkID0gMCkgeworCWZvciAoOyBjYi0+YXJnc1swXSA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgY2ItPmFyZ3NbMF0rKykgeworcmVzdGFydDoKKwkJbGFzdCA9IChzdHJ1Y3QgbmZfY29ubiAqKWNiLT5hcmdzWzFdOwogCQlsaXN0X2Zvcl9lYWNoX3ByZXYoaSwgJm5mX2Nvbm50cmFja19oYXNoW2NiLT5hcmdzWzBdXSkgewogCQkJaCA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKikgaTsKIAkJCWlmIChESVJFQ1RJT04oaCkgIT0gSVBfQ1RfRElSX09SSUdJTkFMKQpAQCAtNDM4LDE3ICs0NDEsMzAgQEAKIAkJCSAqIHRoZW4gZHVtcCBldmVyeXRoaW5nLiAqLwogCQkJaWYgKGwzcHJvdG8gJiYgTDNQUk9UTyhjdCkgIT0gbDNwcm90bykKIAkJCQljb250aW51ZTsKLQkJCWlmIChjdC0+aWQgPD0gKmlkKQotCQkJCWNvbnRpbnVlOworCQkJaWYgKGxhc3QgIT0gTlVMTCkgeworCQkJCWlmIChjdCA9PSBsYXN0KSB7CisJCQkJCW5mX2N0X3B1dChsYXN0KTsKKwkJCQkJY2ItPmFyZ3NbMV0gPSAwOworCQkJCQlsYXN0ID0gTlVMTDsKKwkJCQl9IGVsc2UKKwkJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoY3RuZXRsaW5rX2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAJY2ItPm5saC0+bmxtc2dfc2VxLAogCQkJCQkJSVBDVE5MX01TR19DVF9ORVcsCi0JCQkJCQkxLCBjdCkgPCAwKQorCQkJCQkJMSwgY3QpIDwgMCkgeworCQkJCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKKwkJCQljYi0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWN0OwogCQkJCWdvdG8gb3V0OwotCQkJKmlkID0gY3QtPmlkOworCQkJfQorCQl9CisJCWlmIChsYXN0ICE9IE5VTEwpIHsKKwkJCW5mX2N0X3B1dChsYXN0KTsKKwkJCWNiLT5hcmdzWzFdID0gMDsKKwkJCWdvdG8gcmVzdGFydDsKIAkJfQogCX0KLW91dDoJCitvdXQ6CiAJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAogCURFQlVHUCgibGVhdmluZywgbGFzdCBidWNrZXQ9JWx1IGlkPSV1XG4iLCBjYi0+YXJnc1swXSwgKmlkKTsKQEAgLTY0MSw3ICs2NTcsNyBAQAogfTsKIAogc3RhdGljIGlubGluZSBpbnQKLWN0bmV0bGlua19wYXJzZV9uYXQoc3RydWN0IG5mYXR0ciAqY2RhW10sCitjdG5ldGxpbmtfcGFyc2VfbmF0KHN0cnVjdCBuZmF0dHIgKm5hdCwKIAkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IGlwX25hdF9yYW5nZSAqcmFuZ2UpCiB7CiAJc3RydWN0IG5mYXR0ciAqdGJbQ1RBX05BVF9NQVhdOwpAQCAtNjUxLDcgKzY2Nyw3IEBACiAKIAltZW1zZXQocmFuZ2UsIDAsIHNpemVvZigqcmFuZ2UpKTsKIAkKLQluZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfTkFUX01BWCwgY2RhW0NUQV9OQVQtMV0pOworCW5mYXR0cl9wYXJzZV9uZXN0ZWQodGIsIENUQV9OQVRfTUFYLCBuYXQpOwogCiAJaWYgKG5mYXR0cl9iYWRfc2l6ZSh0YiwgQ1RBX05BVF9NQVgsIGN0YV9taW5fbmF0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04NjYsMzkgKzg4MiwzMCBAQAogCQkvKiBBU1NVUkVEIGJpdCBjYW4gb25seSBiZSBzZXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY2RhW0NUQV9OQVQtMV0pIHsKKwlpZiAoY2RhW0NUQV9OQVRfU1JDLTFdIHx8IGNkYVtDVEFfTkFUX0RTVC0xXSkgewogI2lmbmRlZiBDT05GSUdfSVBfTkZfTkFUX05FRURFRAogCQlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCi0JCXVuc2lnbmVkIGludCBob29rbnVtOwogCQlzdHJ1Y3QgaXBfbmF0X3JhbmdlIHJhbmdlOwogCi0JCWlmIChjdG5ldGxpbmtfcGFyc2VfbmF0KGNkYSwgY3QsICZyYW5nZSkgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJREVCVUdQKCJOQVQ6ICV1LiV1LiV1LiV1LSV1LiV1LiV1LiV1OiV1LSV1XG4iLCAKLQkJICAgICAgIE5JUFFVQUQocmFuZ2UubWluX2lwKSwgTklQUVVBRChyYW5nZS5tYXhfaXApLAotCQkgICAgICAgaHRvbnMocmFuZ2UubWluLmFsbCksIGh0b25zKHJhbmdlLm1heC5hbGwpKTsKLQkJCi0JCS8qIFRoaXMgaXMgdHJpY2t5IGJ1dCBpdCB3b3Jrcy4gaXBfbmF0X3NldHVwX2luZm8gbmVlZHMgdGhlCi0JCSAqIGhvb2sgbnVtYmVyIGFzIHBhcmFtZXRlciwgc28gbGV0J3MgZG8gdGhlIGNvcnJlY3QgCi0JCSAqIGNvbnZlcnNpb24gYW5kIHJ1biBhd2F5ICovCi0JCWlmIChzdGF0dXMgJiBJUFNfU1JDX05BVF9ET05FKQotCQkJaG9va251bSA9IE5GX0lQX1BPU1RfUk9VVElORzsgLyogSVBfTkFUX01BTklQX1NSQyAqLwotCQllbHNlIGlmIChzdGF0dXMgJiBJUFNfRFNUX05BVF9ET05FKQotCQkJaG9va251bSA9IE5GX0lQX1BSRV9ST1VUSU5HOyAgLyogSVBfTkFUX01BTklQX0RTVCAqLwotCQllbHNlIAotCQkJcmV0dXJuIC1FSU5WQUw7IC8qIE1pc3NpbmcgTkFUIGZsYWdzICovCi0KLQkJREVCVUdQKCJOQVQgc3RhdHVzOiAlbHVcbiIsIAotCQkgICAgICAgc3RhdHVzICYgKElQU19OQVRfTUFTSyB8IElQU19OQVRfRE9ORV9NQVNLKSk7Ci0JCQotCQlpZiAoaXBfbmF0X2luaXRpYWxpemVkKGN0LCBIT09LMk1BTklQKGhvb2tudW0pKSkKLQkJCXJldHVybiAtRUVYSVNUOwotCQlpcF9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBob29rbnVtKTsKLQotICAgICAgICAgICAgICAgIERFQlVHUCgiTkFUIHN0YXR1cyBhZnRlciBzZXR1cF9pbmZvOiAlbHVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGN0LT5zdGF0dXMgJiAoSVBTX05BVF9NQVNLIHwgSVBTX05BVF9ET05FX01BU0spKTsKKwkJaWYgKGNkYVtDVEFfTkFUX0RTVC0xXSkgeworCQkJaWYgKGN0bmV0bGlua19wYXJzZV9uYXQoY2RhW0NUQV9OQVRfRFNULTFdLCBjdCwKKwkJCQkJCSZyYW5nZSkgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGlwX25hdF9pbml0aWFsaXplZChjdCwKKwkJCQkJICAgICAgIEhPT0syTUFOSVAoTkZfSVBfUFJFX1JPVVRJTkcpKSkKKwkJCQlyZXR1cm4gLUVFWElTVDsKKwkJCWlwX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIGhvb2tudW0pOworCQl9CisJCWlmIChjZGFbQ1RBX05BVF9TUkMtMV0pIHsKKwkJCWlmIChjdG5ldGxpbmtfcGFyc2VfbmF0KGNkYVtDVEFfTkFUX1NSQy0xXSwgY3QsCisJCQkJCQkmcmFuZ2UpIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChpcF9uYXRfaW5pdGlhbGl6ZWQoY3QsCisJCQkJCSAgICAgICBIT09LMk1BTklQKE5GX0lQX1BPU1RfUk9VVElORykpKQorCQkJCXJldHVybiAtRUVYSVNUOworCQkJaXBfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgaG9va251bSk7CisJCX0KICNlbmRpZgogCX0KIApAQCAtMTEyMiw3ICsxMTI5LDcgQEAKIAkvKiBpbXBsaWNpdCAnZWxzZScgKi8KIAogCS8qIHdlIG9ubHkgYWxsb3cgbmF0IGNvbmZpZyBmb3IgbmV3IGNvbm50cmFja3MgKi8KLQlpZiAoY2RhW0NUQV9OQVQtMV0pIHsKKwlpZiAoY2RhW0NUQV9OQVRfU1JDLTFdIHx8IGNkYVtDVEFfTkFUX0RTVC0xXSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCA2OTg5OWYyLi4xMmZiN2MwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtODI4LDggKzgyOCw5IEBACiAJICogYW5kIG1vcmVvdmVyIHJvb3QgbWlnaHQgc2VuZCByYXcgcGFja2V0cy4KIAkgKi8KIAkvKiBGSVhNRTogU291cmNlIHJvdXRlIElQIG9wdGlvbiBwYWNrZXRzIC0tUlIgKi8KLQlpZiAoKChwZiA9PSBQRl9JTkVUICYmIGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcpIHx8Ci0JICAgICAocGYgPT0gUEZfSU5FVDYgJiYgaG9va251bSAgPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkgJiYKKwlpZiAobmZfY29ubnRyYWNrX2NoZWNrc3VtICYmCisJICAgICgocGYgPT0gUEZfSU5FVCAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HKSB8fAorCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkgJiYKIAkgICAgbmZfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCBJUFBST1RPX1RDUCwgcGYpKSB7CiAJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1RDUCkpCiAJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IGQ5M2VkYmYuLmFlMDdlYmUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC0xMzQsNyArMTM0LDggQEAKIAkgKiBiZWNhdXNlIHRoZSBzZW1hbnRpYyBvZiBDSEVDS1NVTV9IVyBpcyBkaWZmZXJlbnQgdGhlcmUKIAkgKiBhbmQgbW9yZW92ZXIgcm9vdCBtaWdodCBzZW5kIHJhdyBwYWNrZXRzLgogCSAqIEZJWE1FOiBTb3VyY2Ugcm91dGUgSVAgb3B0aW9uIHBhY2tldHMgLS1SUiAqLwotCWlmICgoKHBmID09IFBGX0lORVQgJiYgaG9va251bSA9PSBORl9JUF9QUkVfUk9VVElORykgfHwKKwlpZiAobmZfY29ubnRyYWNrX2NoZWNrc3VtICYmCisJICAgICgocGYgPT0gUEZfSU5FVCAmJiBob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HKSB8fAogCSAgICAgKHBmID09IFBGX0lORVQ2ICYmIGhvb2tudW0gPT0gTkZfSVA2X1BSRV9ST1VUSU5HKSkgJiYKIAkgICAgbmZfY2hlY2tzdW0oc2tiLCBob29rbnVtLCBkYXRhb2ZmLCBJUFBST1RPX1VEUCwgcGYpKSB7CiAJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX1VEUCkpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggNDA4OTYwYy4uZTM0YzU3NCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtMjEzLDYgKzIxMywxMSBAQAogCQlyZXR1cm4gLUVOT1NQQzsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCisJaWYgKHNlcV9wcmludGYocywgInNlY21hcms9JXUgIiwgY29ubnRyYWNrLT5zZWNtYXJrKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisjZW5kaWYKKwogCWlmIChzZXFfcHJpbnRmKHMsICJ1c2U9JXVcbiIsIGF0b21pY19yZWFkKCZjb25udHJhY2stPmN0X2dlbmVyYWwudXNlKSkpCiAJCXJldHVybiAtRU5PU1BDOwogCQpAQCAtNDU1LDYgKzQ2MCw4IEBACiBzdGF0aWMgaW50IGxvZ19pbnZhbGlkX3Byb3RvX21pbiA9IDA7CiBzdGF0aWMgaW50IGxvZ19pbnZhbGlkX3Byb3RvX21heCA9IDI1NTsKIAoraW50IG5mX2Nvbm50cmFja19jaGVja3N1bSA9IDE7CisKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfY3Rfc3lzY3RsX2hlYWRlcjsKIAogc3RhdGljIGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHsKQEAgLTQ4Myw2ICs0OTAsMTQgQEAKIAkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKIAl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU0sCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfY2hlY2tzdW0iLAorCQkuZGF0YQkJPSAmbmZfY29ubnRyYWNrX2NoZWNrc3VtLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CiAJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1NFTlQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfc3luX3NlbnQiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfc3luX3NlbnQsCkBAIC04NTEsNiArODY2LDcgQEAKIEVYUE9SVF9TWU1CT0wobmZfY3RfbDNwcm90b19maW5kX2dldCk7CiBFWFBPUlRfU1lNQk9MKG5mX2N0X2wzcHJvdG9fcHV0KTsKIEVYUE9SVF9TWU1CT0wobmZfY3RfbDNwcm90b3MpOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NoZWNrc3VtKTsKIEVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyk7CiBFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19leHBlY3RfcHV0KTsKIEVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzAxMWUwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogVGhpcyBtb2R1bGUgaXMgdXNlZCB0byBjb3B5IHNlY3VyaXR5IG1hcmtpbmdzIGZyb20gcGFja2V0cworICogdG8gY29ubmVjdGlvbnMsIGFuZCByZXN0b3JlIHNlY3VyaXR5IG1hcmtpbmdzIGZyb20gY29ubmVjdGlvbnMKKyAqIGJhY2sgdG8gcGFja2V0cy4gIFRoaXMgd291bGQgbm9ybWFsbHkgYmUgcGVyZm9ybWVkIGluIGNvbmp1bmN0aW9uCisgKiB3aXRoIHRoZSBTRUNNQVJLIHRhcmdldCBhbmQgc3RhdGUgbWF0Y2guCisgKgorICogQmFzZWQgc29tZXdoYXQgb24gQ09OTk1BUks6CisgKiAgIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CisgKiAgICBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgorICoKKyAqIChDKSAyMDA2IFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0Lmg+CisKKyNkZWZpbmUgUEZYICJDT05OU0VDTUFSSzogIgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiaXBbNl10YWJsZXMgQ09OTlNFQ01BUksgbW9kdWxlIik7CitNT0RVTEVfQUxJQVMoImlwdF9DT05OU0VDTUFSSyIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X0NPTk5TRUNNQVJLIik7CisKKy8qCisgKiBJZiB0aGUgcGFja2V0IGhhcyBhIHNlY3VyaXR5IG1hcmsgYW5kIHRoZSBjb25uZWN0aW9uIGRvZXMgbm90LCBjb3B5CisgKiB0aGUgc2VjdXJpdHkgbWFyayBmcm9tIHRoZSBwYWNrZXQgdG8gdGhlIGNvbm5lY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIHNlY21hcmtfc2F2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChza2ItPnNlY21hcmspIHsKKwkJdTMyICpjb25uc2VjbWFyazsKKwkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisKKwkJY29ubnNlY21hcmsgPSBuZl9jdF9nZXRfc2VjbWFyayhza2IsICZjdGluZm8pOworCQlpZiAoY29ubnNlY21hcmsgJiYgISpjb25uc2VjbWFyaykKKwkJCWlmICgqY29ubnNlY21hcmsgIT0gc2tiLT5zZWNtYXJrKQorCQkJCSpjb25uc2VjbWFyayA9IHNrYi0+c2VjbWFyazsKKwl9Cit9CisKKy8qCisgKiBJZiBwYWNrZXQgaGFzIG5vIHNlY3VyaXR5IG1hcmssIGFuZCB0aGUgY29ubmVjdGlvbiBkb2VzLCByZXN0b3JlIHRoZQorICogc2VjdXJpdHkgbWFyayBmcm9tIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwYWNrZXQuCisgKi8KK3N0YXRpYyB2b2lkIHNlY21hcmtfcmVzdG9yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICghc2tiLT5zZWNtYXJrKSB7CisJCXUzMiAqY29ubnNlY21hcms7CisJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCisJCWNvbm5zZWNtYXJrID0gbmZfY3RfZ2V0X3NlY21hcmsoc2tiLCAmY3RpbmZvKTsKKwkJaWYgKGNvbm5zZWNtYXJrICYmICpjb25uc2VjbWFyaykKKwkJCWlmIChza2ItPnNlY21hcmsgIT0gKmNvbm5zZWNtYXJrKQorCQkJCXNrYi0+c2VjbWFyayA9ICpjb25uc2VjbWFyazsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGFyZ2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkgICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCisJCQkgICBjb25zdCB2b2lkICp0YXJnaW5mbywgdm9pZCAqdXNlcmluZm8pCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOworCWNvbnN0IHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyAqaW5mbyA9IHRhcmdpbmZvOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJY2FzZSBDT05OU0VDTUFSS19TQVZFOgorCQlzZWNtYXJrX3NhdmUoc2tiKTsKKwkJYnJlYWs7CisKKwljYXNlIENPTk5TRUNNQVJLX1JFU1RPUkU6CisJCXNlY21hcmtfcmVzdG9yZShza2IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgY29uc3Qgdm9pZCAqZW50cnksCisJCSAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdm9pZCAqdGFyZ2luZm8sCisJCSAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJc3RydWN0IHh0X2Nvbm5zZWNtYXJrX3RhcmdldF9pbmZvICppbmZvID0gdGFyZ2luZm87CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwljYXNlIENPTk5TRUNNQVJLX1NBVkU6CisJY2FzZSBDT05OU0VDTUFSS19SRVNUT1JFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJpbnZhbGlkIG1vZGU6ICVodVxuIiwgaW5mby0+bW9kZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpcHRfY29ubnNlY21hcmtfcmVnID0geworCS5uYW1lCQk9ICJDT05OU0VDTUFSSyIsCisJLnRhcmdldAkJPSB0YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5zZWNtYXJrX3RhcmdldF9pbmZvKSwKKwkudGFibGUJCT0gIm1hbmdsZSIsCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5tZQkJPSBUSElTX01PRFVMRSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLnJldmlzaW9uCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGlwNnRfY29ubnNlY21hcmtfcmVnID0geworCS5uYW1lCQk9ICJDT05OU0VDTUFSSyIsCisJLnRhcmdldAkJPSB0YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5zZWNtYXJrX3RhcmdldF9pbmZvKSwKKwkudGFibGUJCT0gIm1hbmdsZSIsCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5tZQkJPSBUSElTX01PRFVMRSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5yZXZpc2lvbgk9IDAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4dF9jb25uc2VjbWFya19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCW5lZWRfY29ubnRyYWNrKCk7CisKKwllcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmlwdF9jb25uc2VjbWFya19yZWcpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmlwNnRfY29ubnNlY21hcmtfcmVnKTsKKwlpZiAoZXJyKQorCQl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X2Nvbm5zZWNtYXJrX3JlZyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfY29ubnNlY21hcmtfZmluaSh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcDZ0X2Nvbm5zZWNtYXJrX3JlZyk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9jb25uc2VjbWFya19yZWcpOworfQorCittb2R1bGVfaW5pdCh4dF9jb25uc2VjbWFya19pbml0KTsKK21vZHVsZV9leGl0KHh0X2Nvbm5zZWNtYXJrX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmNlOWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBNb2R1bGUgZm9yIG1vZGlmeWluZyB0aGUgc2VjbWFyayBmaWVsZCBvZiB0aGUgc2tiLCBmb3IgdXNlIGJ5CisgKiBzZWN1cml0eSBzdWJzeXN0ZW1zLgorICoKKyAqIEJhc2VkIG9uIHRoZSBuZm1hcmsgbWF0Y2ggYnk6CisgKiAoQykgMTk5OS0yMDAxIE1hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPgorICoKKyAqIChDKSAyMDA2IFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJpcFs2XXRhYmxlcyBTRUNNQVJLIG1vZGlmaWNhdGlvbiBtb2R1bGUiKTsKK01PRFVMRV9BTElBUygiaXB0X1NFQ01BUksiKTsKK01PRFVMRV9BTElBUygiaXA2dF9TRUNNQVJLIik7CisKKyNkZWZpbmUgUEZYICJTRUNNQVJLOiAiCisKK3N0YXRpYyB1OCBtb2RlOworCitzdGF0aWMgdW5zaWduZWQgaW50IHRhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAorCQkJICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sIHZvaWQgKnVzZXJpbmZvKQoreworCXUzMiBzZWNtYXJrID0gMDsKKwljb25zdCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyAqaW5mbyA9IHRhcmdpbmZvOworCisJQlVHX09OKGluZm8tPm1vZGUgIT0gbW9kZSk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFNFQ01BUktfTU9ERV9TRUw6CisJCXNlY21hcmsgPSBpbmZvLT51LnNlbC5zZWxzaWQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJaWYgKCgqcHNrYiktPnNlY21hcmsgIT0gc2VjbWFyaykKKwkJKCpwc2tiKS0+c2VjbWFyayA9IHNlY21hcms7CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tlbnRyeV9zZWxpbnV4KHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvICppbmZvKQoreworCWludCBlcnI7CisJc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyAqc2VsID0gJmluZm8tPnUuc2VsOworCisJZXJyID0gc2VsaW51eF9zdHJpbmdfdG9fc2lkKHNlbC0+c2VsY3R4LCAmc2VsLT5zZWxzaWQpOworCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRUlOVkFMKQorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImludmFsaWQgU0VMaW51eCBjb250ZXh0IFwnJXNcJ1xuIiwKKwkJCSAgICAgICBzZWwtPnNlbGN0eCk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc2VsLT5zZWxzaWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInVuYWJsZSB0byBtYXAgU0VMaW51eCBjb250ZXh0IFwnJXNcJ1xuIiwKKwkJICAgICAgIHNlbC0+c2VsY3R4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gc2VsaW51eF9yZWxhYmVsX3BhY2tldF9wZXJtaXNzaW9uKHNlbC0+c2Vsc2lkKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJ1bmFibGUgdG8gb2J0YWluIHJlbGFiZWxpbmcgcGVybWlzc2lvblxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLCBjb25zdCB2b2lkICplbnRyeSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LCB2b2lkICp0YXJnaW5mbywKKwkJICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3sKKwlzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyAqaW5mbyA9IHRhcmdpbmZvOworCisJaWYgKG1vZGUgJiYgbW9kZSAhPSBpbmZvLT5tb2RlKSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJtb2RlIGFscmVhZHkgc2V0IHRvICVodSBjYW5ub3QgbWl4IHdpdGggIgorCQkgICAgICAgInJ1bGVzIGZvciBtb2RlICVodVxuIiwgbW9kZSwgaW5mby0+bW9kZSk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCWNhc2UgU0VDTUFSS19NT0RFX1NFTDoKKwkJaWYgKCFjaGVja2VudHJ5X3NlbGludXgoaW5mbykpCisJCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaW52YWxpZCBtb2RlOiAlaHVcbiIsIGluZm8tPm1vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIW1vZGUpCisJCW1vZGUgPSBpbmZvLT5tb2RlOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpcHRfc2VjbWFya19yZWcgPSB7CisJLm5hbWUJCT0gIlNFQ01BUksiLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvKSwKKwkudGFibGUJCT0gIm1hbmdsZSIsCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5tZQkJPSBUSElTX01PRFVMRSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLnJldmlzaW9uCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGlwNnRfc2VjbWFya19yZWcgPSB7CisJLm5hbWUJCT0gIlNFQ01BUksiLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvKSwKKwkudGFibGUJCT0gIm1hbmdsZSIsCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5tZQkJPSBUSElTX01PRFVMRSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5yZXZpc2lvbgk9IDAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4dF9zZWNtYXJrX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZpcHRfc2VjbWFya19yZWcpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmlwNnRfc2VjbWFya19yZWcpOworCWlmIChlcnIpCisJCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcHRfc2VjbWFya19yZWcpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X3NlY21hcmtfZmluaSh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcDZ0X3NlY21hcmtfcmVnKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X3NlY21hcmtfcmVnKTsKK30KKworbW9kdWxlX2luaXQoeHRfc2VjbWFya19pbml0KTsKK21vZHVsZV9leGl0KHh0X3NlY21hcmtfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKaW5kZXggZGMyNmEyNy4uNTYzMjRjOGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7Ci0Jc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8gKmNtID0gKHN0cnVjdCB4dF9jb25ubWFya19pbmZvICopbWF0Y2hpbmZvOworCXN0cnVjdCB4dF9jb25ubWFya19pbmZvICpjbSA9IG1hdGNoaW5mbzsKIAogCWlmIChjbS0+bWFyayA+IDB4ZmZmZmZmZmYgfHwgY20tPm1hc2sgPiAweGZmZmZmZmZmKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbm5tYXJrOiBvbmx5IHN1cHBvcnQgMzJiaXQgbWFya1xuIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2RjY3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZGNjcC5jCmluZGV4IGRmYjEwYjYuLjJlMmY4MjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfZGNjcC5jCkBAIC0xMDEsOCArMTAxLDcgQEAKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAogICAgICAgaW50ICpob3Rkcm9wKQogewotCWNvbnN0IHN0cnVjdCB4dF9kY2NwX2luZm8gKmluZm8gPSAKLQkJCQkoY29uc3Qgc3RydWN0IHh0X2RjY3BfaW5mbyAqKW1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfZGNjcF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwogCXN0cnVjdCBkY2NwX2hkciBfZGgsICpkaDsKIAogCWlmIChvZmZzZXQpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X21hcmsuYyBiL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCmluZGV4IDhiMzg1YTMuLjg3NmJjNTcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7Ci0Jc3RydWN0IHh0X21hcmtfaW5mbyAqbWluZm8gPSAoc3RydWN0IHh0X21hcmtfaW5mbyAqKSBtYXRjaGluZm87CisJY29uc3Qgc3RydWN0IHh0X21hcmtfaW5mbyAqbWluZm8gPSBtYXRjaGluZm87CiAKIAlpZiAobWluZm8tPm1hcmsgPiAweGZmZmZmZmZmIHx8IG1pbmZvLT5tYXNrID4gMHhmZmZmZmZmZikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYXJrOiBvbmx5IHN1cHBvcnRzIDMyYml0IG1hcmtcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKaW5kZXggYjU2Y2QyYi4uMWZmMGEyNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCkBAIC0xLDQgKzEsNCBAQAotLyogS2VybmVsIG1vZHVsZSB0byBtYXRjaCBvbmUgb2YgYSBsaXN0IG9mIFRDUC9VRFAgcG9ydHM6IHBvcnRzIGFyZSBpbgorLyogS2VybmVsIG1vZHVsZSB0byBtYXRjaCBvbmUgb2YgYSBsaXN0IG9mIFRDUC9VRFAvU0NUUC9EQ0NQIHBvcnRzOiBwb3J0cyBhcmUgaW4KICAgIHRoZSBzYW1lIHBsYWNlIHNvIHdlIGNhbiB0cmVhdCB0aGVtIGFzIGVxdWFsLiAqLwogCiAvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCkBAIC0xNjAsOCArMTYwLDkgQEAKICAgICAgIHVfaW50OF90IG1hdGNoX2ZsYWdzLAogICAgICAgdV9pbnQ4X3QgY291bnQpCiB7Ci0JLyogTXVzdCBzcGVjaWZ5IHByb3RvID09IFRDUC9VRFAsIG5vIHVua25vd24gZmxhZ3Mgb3IgYmFkIGNvdW50ICovCi0JcmV0dXJuIChwcm90byA9PSBJUFBST1RPX1RDUCB8fCBwcm90byA9PSBJUFBST1RPX1VEUCkKKwkvKiBNdXN0IHNwZWNpZnkgc3VwcG9ydGVkIHByb3RvY29sLCBubyB1bmtub3duIGZsYWdzIG9yIGJhZCBjb3VudCAqLworCXJldHVybiAocHJvdG8gPT0gSVBQUk9UT19UQ1AgfHwgcHJvdG8gPT0gSVBQUk9UT19VRFAKKwkJfHwgcHJvdG8gPT0gSVBQUk9UT19TQ1RQIHx8IHByb3RvID09IElQUFJPVE9fRENDUCkKIAkJJiYgIShpcF9pbnZmbGFncyAmIFhUX0lOVl9QUk9UTykKIAkJJiYgKG1hdGNoX2ZsYWdzID09IFhUX01VTFRJUE9SVF9TT1VSQ0UKIAkJICAgIHx8IG1hdGNoX2ZsYWdzID09IFhUX01VTFRJUE9SVF9ERVNUSU5BVElPTgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZGJhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIG5ldGZpbHRlciBtb2R1bGUgdG8gZW5mb3JjZSBuZXR3b3JrIHF1b3RhcworICoKKyAqIFNhbSBKb2huc3RvbiA8c2FtakBzYW1qLm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU2FtIEpvaG5zdG9uIDxzYW1qQHNhbWoubmV0PiIpOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHF1b3RhX2xvY2spOworCitzdGF0aWMgaW50CittYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorICAgICAgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHByb3RvZmYsIGludCAqaG90ZHJvcCkKK3sKKwlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9ICgoc3RydWN0IHh0X3F1b3RhX2luZm8gKiltYXRjaGluZm8pLT5tYXN0ZXI7CisJaW50IHJldCA9IHEtPmZsYWdzICYgWFRfUVVPVEFfSU5WRVJUID8gMSA6IDA7CisKKwlzcGluX2xvY2tfYmgoJnF1b3RhX2xvY2spOworCWlmIChxLT5xdW90YSA+PSBza2ItPmxlbikgeworCQlxLT5xdW90YSAtPSBza2ItPmxlbjsKKwkJcmV0IF49IDE7CisJfSBlbHNlIHsKKwkgICAgICAgIC8qIHdlIGRvIG5vdCBhbGxvdyBldmVuIHNtYWxsIHBhY2tldHMgZnJvbSBub3cgb24gKi8KKwkgICAgICAgIHEtPnF1b3RhID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnF1b3RhX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgKmVudHJ5LAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbywKKwkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLCB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQoreworCXN0cnVjdCB4dF9xdW90YV9pbmZvICpxID0gKHN0cnVjdCB4dF9xdW90YV9pbmZvICopbWF0Y2hpbmZvOworCisJaWYgKHEtPmZsYWdzICYgflhUX1FVT1RBX01BU0spCisJCXJldHVybiAwOworCS8qIEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCBvZiBjb3VudGVycy4gKi8KKwlxLT5tYXN0ZXIgPSBxOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIHF1b3RhX21hdGNoID0geworCS5uYW1lCQk9ICJxdW90YSIsCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9xdW90YV9pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLm1lCQk9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIHF1b3RhX21hdGNoNiA9IHsKKwkubmFtZQkJPSAicXVvdGEiLAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3F1b3RhX2luZm8pLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkubWUJCT0gVEhJU19NT0RVTEUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHh0X3F1b3RhX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnF1b3RhX21hdGNoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnF1b3RhX21hdGNoNik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldHVybiByZXQ7CisKK2VycjI6CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmcXVvdGFfbWF0Y2gpOworZXJyMToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfcXVvdGFfZmluaSh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnF1b3RhX21hdGNoNik7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmcXVvdGFfbWF0Y2gpOworfQorCittb2R1bGVfaW5pdCh4dF9xdW90YV9pbml0KTsKK21vZHVsZV9leGl0KHh0X3F1b3RhX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwppbmRleCAzNGJkODcyLi5iNTExMGU1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwpAQCAtMTI5LDExICsxMjksOSBAQAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCiAgICAgICBpbnQgKmhvdGRyb3ApCiB7Ci0JY29uc3Qgc3RydWN0IHh0X3NjdHBfaW5mbyAqaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfc2N0cF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwogCXNjdHBfc2N0cGhkcl90IF9zaCwgKnNoOwogCi0JaW5mbyA9IChjb25zdCBzdHJ1Y3QgeHRfc2N0cF9pbmZvICopbWF0Y2hpbmZvOwotCiAJaWYgKG9mZnNldCkgewogCQlkdXByaW50ZigiRHJvcHBpbmcgbm9uLWZpcnN0IGZyYWdtZW50Li4gRklYTUVcbiIpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTAzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQmFzZWQgb24gaXB0X3JhbmRvbSBhbmQgaXB0X250aCBieSBGYWJyaWNlIE1BUklFIDxmYWJyaWNlQG5ldGZpbHRlci5vcmc+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInh0YWJsZXMgc3RhdGlzdGljYWwgbWF0Y2ggbW9kdWxlIik7CitNT0RVTEVfQUxJQVMoImlwdF9zdGF0aXN0aWMiKTsKK01PRFVMRV9BTElBUygiaXA2dF9zdGF0aXN0aWMiKTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhudGhfbG9jayk7CisKK3N0YXRpYyBpbnQKK21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCBjb25zdCB2b2lkICptYXRjaGluZm8sCisgICAgICBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgaW50ICpob3Rkcm9wKQoreworCXN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKiltYXRjaGluZm87CisJaW50IHJldCA9IGluZm8tPmZsYWdzICYgWFRfU1RBVElTVElDX0lOVkVSVCA/IDEgOiAwOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJY2FzZSBYVF9TVEFUSVNUSUNfTU9ERV9SQU5ET006CisJCWlmICgobmV0X3JhbmRvbSgpICYgMHg3RkZGRkZGRikgPCBpbmZvLT51LnJhbmRvbS5wcm9iYWJpbGl0eSkKKwkJCXJldCBePSAxOworCQlicmVhazsKKwljYXNlIFhUX1NUQVRJU1RJQ19NT0RFX05USDoKKwkJaW5mbyA9IGluZm8tPm1hc3RlcjsKKwkJc3Bpbl9sb2NrX2JoKCZudGhfbG9jayk7CisJCWlmIChpbmZvLT51Lm50aC5jb3VudCsrID09IGluZm8tPnUubnRoLmV2ZXJ5KSB7CisJCQlpbmZvLT51Lm50aC5jb3VudCA9IDA7CisJCQlyZXQgXj0gMTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmbnRoX2xvY2spOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgY29uc3Qgdm9pZCAqZW50cnksCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAorCSAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gKHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqKW1hdGNoaW5mbzsKKworCWlmIChpbmZvLT5tb2RlID4gWFRfU1RBVElTVElDX01PREVfTUFYIHx8CisJICAgIGluZm8tPmZsYWdzICYgflhUX1NUQVRJU1RJQ19NQVNLKQorCQlyZXR1cm4gMDsKKwlpbmZvLT5tYXN0ZXIgPSBpbmZvOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIHN0YXRpc3RpY19tYXRjaCA9IHsKKwkubmFtZQkJPSAic3RhdGlzdGljIiwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8pLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzdGF0aXN0aWNfbWF0Y2g2ID0geworCS5uYW1lCQk9ICJzdGF0aXN0aWMiLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfc3RhdGlzdGljX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnN0YXRpc3RpY19tYXRjaCk7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnN0YXRpc3RpY19tYXRjaDYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXR1cm4gcmV0OworZXJyMjoKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZzdGF0aXN0aWNfbWF0Y2gpOworZXJyMToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfc3RhdGlzdGljX2Zpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZzdGF0aXN0aWNfbWF0Y2g2KTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZzdGF0aXN0aWNfbWF0Y2gpOworfQorCittb2R1bGVfaW5pdCh4dF9zdGF0aXN0aWNfaW5pdCk7Cittb2R1bGVfZXhpdCh4dF9zdGF0aXN0aWNfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYwppbmRleCA3OWQ5ZWE2Li4wZWJiNmFjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMKQEAgLTMwLDggKzMwLDggQEAKIAkJIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkgaW50ICpob3Rkcm9wKQogeworCWNvbnN0IHN0cnVjdCB4dF9zdHJpbmdfaW5mbyAqY29uZiA9IG1hdGNoaW5mbzsKIAlzdHJ1Y3QgdHNfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IHh0X3N0cmluZ19pbmZvICpjb25mID0gKHN0cnVjdCB4dF9zdHJpbmdfaW5mbyAqKSBtYXRjaGluZm87CiAKIAltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IHRzX3N0YXRlKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggMTM4ZWE5Mi4uYjFlNGM1ZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTcyLDkgKzcyLDkgQEAKICAgIGRldi0+cXVldWVfbG9jayBzZXJpYWxpemVzIHF1ZXVlIGFjY2Vzc2VzIGZvciB0aGlzIGRldmljZQogICAgQU5EIGRldi0+cWRpc2MgcG9pbnRlciBpdHNlbGYuCiAKLSAgIGRldi0+eG1pdF9sb2NrIHNlcmlhbGl6ZXMgYWNjZXNzZXMgdG8gZGV2aWNlIGRyaXZlci4KKyAgIG5ldGlmX3R4X2xvY2sgc2VyaWFsaXplcyBhY2Nlc3NlcyB0byBkZXZpY2UgZHJpdmVyLgogCi0gICBkZXYtPnF1ZXVlX2xvY2sgYW5kIGRldi0+eG1pdF9sb2NrIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsCisgICBkZXYtPnF1ZXVlX2xvY2sgYW5kIG5ldGlmX3R4X2xvY2sgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwKICAgIGlmIG9uZSBpcyBncmFiYmVkLCBhbm90aGVyIG11c3QgYmUgZnJlZS4KICAqLwogCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJICogd2lsbCBiZSByZXF1ZXVlZC4KIAkJICovCiAJCWlmICghbm9sb2NrKSB7Ci0JCQlpZiAoIXNwaW5fdHJ5bG9jaygmZGV2LT54bWl0X2xvY2spKSB7CisJCQlpZiAoIW5ldGlmX3R4X3RyeWxvY2soZGV2KSkgewogCQkJY29sbGlzaW9uOgogCQkJCS8qIFNvLCBzb21lb25lIGdyYWJiZWQgdGhlIGRyaXZlci4gKi8KIAkJCQkKQEAgLTEyNiw4ICsxMjYsNiBAQAogCQkJCV9fZ2V0X2NwdV92YXIobmV0ZGV2X3J4X3N0YXQpLmNwdV9jb2xsaXNpb24rKzsKIAkJCQlnb3RvIHJlcXVldWU7CiAJCQl9Ci0JCQkvKiBSZW1lbWJlciB0aGF0IHRoZSBkcml2ZXIgaXMgZ3JhYmJlZCBieSB1cy4gKi8KLQkJCWRldi0+eG1pdF9sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQl9CiAJCQogCQl7CkBAIC0xNDIsOCArMTQwLDcgQEAKIAkJCQlyZXQgPSBkZXYtPmhhcmRfc3RhcnRfeG1pdChza2IsIGRldik7CiAJCQkJaWYgKHJldCA9PSBORVRERVZfVFhfT0spIHsgCiAJCQkJCWlmICghbm9sb2NrKSB7Ci0JCQkJCQlkZXYtPnhtaXRfbG9ja19vd25lciA9IC0xOwotCQkJCQkJc3Bpbl91bmxvY2soJmRldi0+eG1pdF9sb2NrKTsKKwkJCQkJCW5ldGlmX3R4X3VubG9jayhkZXYpOwogCQkJCQl9CiAJCQkJCXNwaW5fbG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsKIAkJCQkJcmV0dXJuIC0xOwpAQCAtMTU3LDggKzE1NCw3IEBACiAJCQkvKiBORVRERVZfVFhfQlVTWSAtIHdlIG5lZWQgdG8gcmVxdWV1ZSAqLwogCQkJLyogUmVsZWFzZSB0aGUgZHJpdmVyICovCiAJCQlpZiAoIW5vbG9jaykgeyAKLQkJCQlkZXYtPnhtaXRfbG9ja19vd25lciA9IC0xOwotCQkJCXNwaW5fdW5sb2NrKCZkZXYtPnhtaXRfbG9jayk7CisJCQkJbmV0aWZfdHhfdW5sb2NrKGRldik7CiAJCQl9IAogCQkJc3Bpbl9sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOwogCQkJcSA9IGRldi0+cWRpc2M7CkBAIC0xODcsNyArMTgzLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopYXJnOwogCi0Jc3Bpbl9sb2NrKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9jayhkZXYpOwogCWlmIChkZXYtPnFkaXNjICE9ICZub29wX3FkaXNjKSB7CiAJCWlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpICYmCiAJCSAgICBuZXRpZl9ydW5uaW5nKGRldikgJiYKQEAgLTIwMyw3ICsxOTksNyBAQAogCQkJCWRldl9ob2xkKGRldik7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2soZGV2KTsKIAogCWRldl9wdXQoZGV2KTsKIH0KQEAgLTIyNywxNyArMjIzLDE3IEBACiAKIHN0YXRpYyB2b2lkIGRldl93YXRjaGRvZ191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNwaW5fbG9ja19iaCgmZGV2LT54bWl0X2xvY2spOworCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAlfX25ldGRldl93YXRjaGRvZ191cChkZXYpOwotCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGRldl93YXRjaGRvZ19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CisJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCWlmIChkZWxfdGltZXIoJmRldi0+d2F0Y2hkb2dfdGltZXIpKQogCQlkZXZfcHV0KGRldik7Ci0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIH0KIAogdm9pZCBuZXRpZl9jYXJyaWVyX29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01ODIsNyArNTc4LDcgQEAKIAl3aGlsZSAodGVzdF9iaXQoX19MSU5LX1NUQVRFX1NDSEVELCAmZGV2LT5zdGF0ZSkpCiAJCXlpZWxkKCk7CiAKLQlzcGluX3VubG9ja193YWl0KCZkZXYtPnhtaXRfbG9jayk7CisJc3Bpbl91bmxvY2tfd2FpdCgmZGV2LT5feG1pdF9sb2NrKTsKIH0KIAogdm9pZCBkZXZfaW5pdF9zY2hlZHVsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGVxbC5jIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKaW5kZXggNzliOGVmMy4uNGMxNmFkNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKQEAgLTMwMiwyMCArMzAyLDE3IEBACiAKIAkJc3dpdGNoICh0ZXFsX3Jlc29sdmUoc2tiLCBza2JfcmVzLCBzbGF2ZSkpIHsKIAkJY2FzZSAwOgotCQkJaWYgKHNwaW5fdHJ5bG9jaygmc2xhdmUtPnhtaXRfbG9jaykpIHsKLQkJCQlzbGF2ZS0+eG1pdF9sb2NrX293bmVyID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCQkJaWYgKG5ldGlmX3R4X3RyeWxvY2soc2xhdmUpKSB7CiAJCQkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKHNsYXZlKSAmJgogCQkJCSAgICBzbGF2ZS0+aGFyZF9zdGFydF94bWl0KHNrYiwgc2xhdmUpID09IDApIHsKLQkJCQkJc2xhdmUtPnhtaXRfbG9ja19vd25lciA9IC0xOwotCQkJCQlzcGluX3VubG9jaygmc2xhdmUtPnhtaXRfbG9jayk7CisJCQkJCW5ldGlmX3R4X3VubG9jayhzbGF2ZSk7CiAJCQkJCW1hc3Rlci0+c2xhdmVzID0gTkVYVF9TTEFWRShxKTsKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQkJCQltYXN0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQkJbWFzdGVyLT5zdGF0cy50eF9ieXRlcyArPSBsZW47CiAJCQkJCXJldHVybiAwOwogCQkJCX0KLQkJCQlzbGF2ZS0+eG1pdF9sb2NrX293bmVyID0gLTE7Ci0JCQkJc3Bpbl91bmxvY2soJnNsYXZlLT54bWl0X2xvY2spOworCQkJCW5ldGlmX3R4X3VubG9jayhzbGF2ZSk7CiAJCQl9CiAJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQogCQkJCWJ1c3kgPSAxOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5wdXQuYyBiL25ldC9zY3RwL2lucHV0LmMKaW5kZXggMTY2MmY5Yy4uNDJiNjZlNyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5wdXQuYworKysgYi9uZXQvc2N0cC9pbnB1dC5jCkBAIC0xNDEsNyArMTQxLDggQEAKIAlfX3NrYl9wdWxsKHNrYiwgc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSk7CiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkKIAkJZ290byBkaXNjYXJkX2l0OwotCWlmIChzY3RwX3Jjdl9jaGVja3N1bShza2IpIDwgMCkKKwlpZiAoKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSAmJgorCSAgICAoc2N0cF9yY3ZfY2hlY2tzdW0oc2tiKSA8IDApKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwpAQCAtMTcwLDcgKzE3MSw4IEBACiAJICogSVAgYnJvYWRjYXN0IGFkZHJlc3NlcyBjYW5ub3QgYmUgdXNlZCBpbiBhbiBTQ1RQIHRyYW5zcG9ydAogCSAqIGFkZHJlc3MuIgogCSAqLwotCWlmICghYWYtPmFkZHJfdmFsaWQoJnNyYywgTlVMTCkgfHwgIWFmLT5hZGRyX3ZhbGlkKCZkZXN0LCBOVUxMKSkKKwlpZiAoIWFmLT5hZGRyX3ZhbGlkKCZzcmMsIE5VTEwsIHNrYikgfHwKKwkgICAgIWFmLT5hZGRyX3ZhbGlkKCZkZXN0LCBOVUxMLCBza2IpKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKIAlhc29jID0gX19zY3RwX3Jjdl9sb29rdXAoc2tiLCAmc3JjLCAmZGVzdCwgJnRyYW5zcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggYzIwZDI4Mi4uOGVmMDgwNyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtNTIzLDcgKzUyMyw5IEBACiAgKiBSZXR1cm4gMCAtIElmIHRoZSBhZGRyZXNzIGlzIGEgbm9uLXVuaWNhc3Qgb3IgYW4gaWxsZWdhbCBhZGRyZXNzLgogICogUmV0dXJuIDEgLSBJZiB0aGUgYWRkcmVzcyBpcyBhIHVuaWNhc3QuCiAgKi8KLXN0YXRpYyBpbnQgc2N0cF92Nl9hZGRyX3ZhbGlkKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNjdHBfc29jayAqc3ApCitzdGF0aWMgaW50IHNjdHBfdjZfYWRkcl92YWxpZCh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsCisJCQkgICAgICBzdHJ1Y3Qgc2N0cF9zb2NrICpzcCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJldCA9IGlwdjZfYWRkcl90eXBlKCZhZGRyLT52Ni5zaW42X2FkZHIpOwogCkBAIC01MzcsNyArNTM5LDcgQEAKIAkJaWYgKHNwICYmIGlwdjZfb25seV9zb2NrKHNjdHBfb3B0MnNrKHNwKSkpCiAJCQlyZXR1cm4gMDsKIAkJc2N0cF92Nl9tYXBfdjQoYWRkcik7Ci0JCXJldHVybiBzY3RwX2dldF9hZl9zcGVjaWZpYyhBRl9JTkVUKS0+YWRkcl92YWxpZChhZGRyLCBzcCk7CisJCXJldHVybiBzY3RwX2dldF9hZl9zcGVjaWZpYyhBRl9JTkVUKS0+YWRkcl92YWxpZChhZGRyLCBzcCwgc2tiKTsKIAl9CiAKIAkvKiBJcyB0aGlzIGEgbm9uLXVuaWNhc3QgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cHV0LmMgYi9uZXQvc2N0cC9vdXRwdXQuYwppbmRleCA0MzdjYmE3Li5jZGM1YTM5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRwdXQuYworKysgYi9uZXQvc2N0cC9vdXRwdXQuYwpAQCAtMjk1LDE0ICsyOTUsMTQgQEAKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRwID0gcGFja2V0LT50cmFuc3BvcnQ7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSB0cC0+YXNvYzsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7Ci0JX191MzIgY3JjMzI7CisJX191MzIgY3JjMzIgPSAwOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywgKnRtcDsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGVyciA9IDA7CiAJaW50IHBhZGRpbmc7CQkvKiBIb3cgbXVjaCBwYWRkaW5nIGRvIHdlIG5lZWQ/ICAqLwogCV9fdTggaGFzX2RhdGEgPSAwOwotCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSB0cC0+ZHN0OwogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXBcbiIsIF9fRlVOQ1RJT05fXywgcGFja2V0KTsKIApAQCAtMzI3LDYgKzMyNywxOSBAQAogCSAqLwogCXNrYl9zZXRfb3duZXJfdyhuc2tiLCBzayk7CiAKKwkvKiBUaGUgJ29ic29sZXRlJyBmaWVsZCBvZiBkc3QgaXMgc2V0IHRvIDIgd2hlbiBhIGRzdCBpcyBmcmVlZC4gKi8KKwlpZiAoIWRzdCB8fCAoZHN0LT5vYnNvbGV0ZSA+IDEpKSB7CisJCWRzdF9yZWxlYXNlKGRzdCk7CisJCXNjdHBfdHJhbnNwb3J0X3JvdXRlKHRwLCBOVUxMLCBzY3RwX3NrKHNrKSk7CisJCWlmIChhc29jICYmIChhc29jLT5wYXJhbV9mbGFncyAmIFNQUF9QTVRVRF9FTkFCTEUpKSB7CisJCQlzY3RwX2Fzc29jX3N5bmNfcG10dShhc29jKTsKKwkJfQorCX0KKwluc2tiLT5kc3QgPSBkc3RfY2xvbmUodHAtPmRzdCk7CisJaWYgKCFuc2tiLT5kc3QpCisJCWdvdG8gbm9fcm91dGU7CisJZHN0ID0gbnNrYi0+ZHN0OworCiAJLyogQnVpbGQgdGhlIFNDVFAgaGVhZGVyLiAgKi8KIAlzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKXNrYl9wdXNoKG5za2IsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwogCXNoLT5zb3VyY2UgPSBodG9ucyhwYWNrZXQtPnNvdXJjZV9wb3J0KTsKQEAgLTM1MCw3ICszNjMsOCBAQAogCSAqIE5vdGU6IEFkbGVyLTMyIGlzIG5vIGxvbmdlciBhcHBsaWNhYmxlLCBhcyBoYXMgYmVlbiByZXBsYWNlZAogCSAqIGJ5IENSQzMyLUMgYXMgZGVzY3JpYmVkIGluIDxkcmFmdC1pZXRmLXRzdndnLXNjdHBjc3VtLTAyLnR4dD4uCiAJICovCi0JY3JjMzIgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCWlmICghKGRzdC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkpCisJCWNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKIAogCS8qKgogCSAqIDYuMTAgQnVuZGxpbmcKQEAgLTQwMiw5ICs0MTYsMTQgQEAKIAkJaWYgKHBhZGRpbmcpCiAJCQltZW1zZXQoc2tiX3B1dChjaHVuay0+c2tiLCBwYWRkaW5nKSwgMCwgcGFkZGluZyk7CiAKLQkJY3JjMzIgPSBzY3RwX3VwZGF0ZV9jb3B5X2Nrc3VtKHNrYl9wdXQobnNrYiwgY2h1bmstPnNrYi0+bGVuKSwKLQkJCQkJICAgICAgIGNodW5rLT5za2ItPmRhdGEsCi0JCQkJCSAgICAgICBjaHVuay0+c2tiLT5sZW4sIGNyYzMyKTsKKwkJaWYgKGRzdC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkKKwkJCW1lbWNweShza2JfcHV0KG5za2IsIGNodW5rLT5za2ItPmxlbiksCisJCQkgICAgICAgY2h1bmstPnNrYi0+ZGF0YSwgY2h1bmstPnNrYi0+bGVuKTsKKwkJZWxzZQorCQkJY3JjMzIgPSBzY3RwX3VwZGF0ZV9jb3B5X2Nrc3VtKHNrYl9wdXQobnNrYiwKKwkJCQkJCQljaHVuay0+c2tiLT5sZW4pLAorCQkJCQkJY2h1bmstPnNrYi0+ZGF0YSwKKwkJCQkJCWNodW5rLT5za2ItPmxlbiwgY3JjMzIpOwogCiAJCVNDVFBfREVCVUdfUFJJTlRLKCIlcyAlcFslc10gJXMgMHgleCwgJXMgJWQsICVzICVkLCAlcyAlZFxuIiwKIAkJCQkgICIqKiogQ2h1bmsiLCBjaHVuaywKQEAgLTQyNyw3ICs0NDYsOCBAQAogCX0KIAogCS8qIFBlcmZvcm0gZmluYWwgdHJhbnNmb3JtYXRpb24gb24gY2hlY2tzdW0uICovCi0JY3JjMzIgPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CisJaWYgKCEoZHN0LT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSkKKwkJY3JjMzIgPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CiAKIAkvKiAzKSBQdXQgdGhlIHJlc3VsdGFudCB2YWx1ZSBpbnRvIHRoZSBjaGVja3N1bSBmaWVsZCBpbiB0aGUKIAkgKiAgICBjb21tb24gaGVhZGVyLCBhbmQgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgdW5jaGFuZ2VkLgpAQCAtNDc3LDIwICs0OTcsNiBAQAogCQl9CiAJfQogCi0JZHN0ID0gdHAtPmRzdDsKLQkvKiBUaGUgJ29ic29sZXRlJyBmaWVsZCBvZiBkc3QgaXMgc2V0IHRvIDIgd2hlbiBhIGRzdCBpcyBmcmVlZC4gKi8KLQlpZiAoIWRzdCB8fCAoZHN0LT5vYnNvbGV0ZSA+IDEpKSB7Ci0JCWRzdF9yZWxlYXNlKGRzdCk7Ci0JCXNjdHBfdHJhbnNwb3J0X3JvdXRlKHRwLCBOVUxMLCBzY3RwX3NrKHNrKSk7Ci0JCWlmIChhc29jLT5wYXJhbV9mbGFncyAmIFNQUF9QTVRVRF9FTkFCTEUpIHsKLQkJCXNjdHBfYXNzb2Nfc3luY19wbXR1KGFzb2MpOwotCQl9Ci0JfQotCi0JbnNrYi0+ZHN0ID0gZHN0X2Nsb25lKHRwLT5kc3QpOwotCWlmICghbnNrYi0+ZHN0KQotCQlnb3RvIG5vX3JvdXRlOwotCiAJU0NUUF9ERUJVR19QUklOVEsoIioqKnNjdHBfdHJhbnNtaXRfcGFja2V0KioqIHNrYiBsZW4gJWRcbiIsCiAJCQkgIG5za2ItPmxlbik7CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IGYxNDhmOTUuLmU1ZmFhMzUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvb3V0cXVldWUuYwpAQCAtMTI2Miw2ICsxMjYyLDcgQEAKIAkJCSAgIAlpZiAoIXRjaHVuay0+dHNuX2dhcF9hY2tlZCAmJgogCQkJCSAgICAhdGNodW5rLT5yZXNlbnQgJiYKIAkJCQkgICAgdGNodW5rLT5ydHRfaW5fcHJvZ3Jlc3MpIHsKKwkJCQkJdGNodW5rLT5ydHRfaW5fcHJvZ3Jlc3MgPSAwOwogCQkJCQlydHQgPSBqaWZmaWVzIC0gdGNodW5rLT5zZW50X2F0OwogCQkJCQlzY3RwX3RyYW5zcG9ydF91cGRhdGVfcnRvKHRyYW5zcG9ydCwKIAkJCQkJCQkJICBydHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggMjA4OGFhOS4uODE2YzAzMyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC0zNjUsMTIgKzM2NSwxOCBAQAogICogUmV0dXJuIDAgLSBJZiB0aGUgYWRkcmVzcyBpcyBhIG5vbi11bmljYXN0IG9yIGFuIGlsbGVnYWwgYWRkcmVzcy4KICAqIFJldHVybiAxIC0gSWYgdGhlIGFkZHJlc3MgaXMgYSB1bmljYXN0LgogICovCi1zdGF0aWMgaW50IHNjdHBfdjRfYWRkcl92YWxpZCh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBzY3RwX3NvY2sgKnNwKQorc3RhdGljIGludCBzY3RwX3Y0X2FkZHJfdmFsaWQodW5pb24gc2N0cF9hZGRyICphZGRyLAorCQkJICAgICAgc3RydWN0IHNjdHBfc29jayAqc3AsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIElzIHRoaXMgYSBub24tdW5pY2FzdCBhZGRyZXNzIG9yIGEgdW51c2FibGUgU0NUUCBhZGRyZXNzPyAqLwogCWlmIChJU19JUFY0X1VOVVNBQkxFX0FERFJFU1MoJmFkZHItPnY0LnNpbl9hZGRyLnNfYWRkcikpCiAJCXJldHVybiAwOwogCisgCS8qIElzIHRoaXMgYSBicm9hZGNhc3QgYWRkcmVzcz8gKi8KKyAJaWYgKHNrYiAmJiAoKHN0cnVjdCBydGFibGUgKilza2ItPmRzdCktPnJ0X2ZsYWdzICYgUlRDRl9CUk9BRENBU1QpCisgCQlyZXR1cm4gMDsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDhiYzI3OTIuLjllNTgxNDQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC01MjkzLDEwICs1MjkzLDE4IEBACiAJICogc2VlbXMgYSBiaXQgdHJvdWJsZXNvbWUgaW4gdGhhdCBmcmFnX3BvaW50IHZhcmllcyBiYXNlZCBvbgogCSAqIFBNVFUuICBJbiBjYXNlcywgc3VjaCBhcyBsb29wYmFjaywgdGhpcyBtaWdodCBiZSBhIHJhdGhlcgogCSAqIGxhcmdlIHNwaWxsIG92ZXIuCisJICogTk9URTogSWYgd2UgaGF2ZSBhIGZ1bGwgcmVjZWl2ZSBidWZmZXIgaGVyZSwgd2Ugb25seSByZW5lZ2UgaWYKKwkgKiBvdXIgcmVjZWl2ZXIgY2FuIHN0aWxsIG1ha2UgcHJvZ3Jlc3Mgd2l0aG91dCB0aGUgdHNuIGJlaW5nCisJICogcmVjZWl2ZWQuIFdlIGRvIHRoaXMgYmVjYXVzZSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgYXNzb2NpYXRpb25zCisJICogcmVjZWl2ZSBxdWV1ZSBpcyBlbXB0eSB3ZSBhcmUgZmlsbGluZyBhIGxlYWRpbmcgZ2FwLCBhbmQgc2luY2UKKwkgKiByZW5lZ2luZyBtb3ZlcyB0aGUgZ2FwIHRvIHRoZSBlbmQgb2YgdGhlIHRzbiBzdHJlYW0sIHdlIGFyZSBsaWtlbHkKKwkgKiB0byBzdGFsbCBhZ2FpbiB2ZXJ5IHNob3J0bHkuIEF2b2lkaW5nIHRoZSByZW5lZ2Ugd2hlbiB3ZSBmaWxsIGEKKwkgKiBsZWFkaW5nIGdhcCBpcyBhIGdvb2QgaGV1cmlzdGljIGZvciBhdm9pZGluZyBzdWNoIHN0ZWFkeSBzdGF0ZQorCSAqIHN0YWxscy4KIAkgKi8KIAlpZiAoIWFzb2MtPnJ3bmQgfHwgYXNvYy0+cnduZF9vdmVyIHx8CiAJICAgIChkYXRhbGVuID4gYXNvYy0+cnduZCArIGFzb2MtPmZyYWdfcG9pbnQpIHx8Ci0JICAgIHJjdmJ1Zl9vdmVyKSB7CisJICAgIChyY3ZidWZfb3ZlciAmJiAoIXNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkpKSB7CiAKIAkJLyogSWYgdGhpcyBpcyB0aGUgbmV4dCBUU04sIGNvbnNpZGVyIHJlbmVnaW5nIHRvIG1ha2UKIAkJICogcm9vbS4gICBOb3RlOiBQbGF5aW5nIG5pY2Ugd2l0aCBhIGNvbmZ1c2VkIHNlbmRlci4gIEEKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggMTc0ZDRkMy4uYjgxMTY5MWMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBJcyB0aGlzIGEgdmFsaWQgU0NUUCBhZGRyZXNzPyAgKi8KLQlpZiAoIWFmLT5hZGRyX3ZhbGlkKGFkZHIsIHNjdHBfc2soc2spKSkKKwlpZiAoIWFmLT5hZGRyX3ZhbGlkKGFkZHIsIHNjdHBfc2soc2spLCBOVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXNjdHBfc2soc2spLT5wZi0+c2VuZF92ZXJpZnkoc2N0cF9zayhzayksIChhZGRyKSkpCkBAIC0yNTMwLDggKzI1MzAsMzIgQEAKIAogCS8qIFNldCB0aGUgdmFsdWVzIHRvIHRoZSBzcGVjaWZpYyBhc3NvY2lhdGlvbiAqLwogCWlmIChhc29jKSB7Ci0JCWlmIChhc3NvY3BhcmFtcy5zYXNvY19hc29jbWF4cnh0ICE9IDApCisJCWlmIChhc3NvY3BhcmFtcy5zYXNvY19hc29jbWF4cnh0ICE9IDApIHsKKwkJCV9fdTMyIHBhdGhfc3VtID0gMDsKKwkJCWludCAgIHBhdGhzID0gMDsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwkJCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqcGVlcl9hZGRyOworCisJCQlsaXN0X2Zvcl9lYWNoKHBvcywgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCkgeworCQkJCXBlZXJfYWRkciA9IGxpc3RfZW50cnkocG9zLAorCQkJCQkJc3RydWN0IHNjdHBfdHJhbnNwb3J0LAorCQkJCQkJdHJhbnNwb3J0cyk7CisJCQkJcGF0aF9zdW0gKz0gcGVlcl9hZGRyLT5wYXRobWF4cnh0OworCQkJCXBhdGhzKys7CisJCQl9CisKKwkJCS8qIE9ubHkgdmFsaWRhdGUgYXNvY21heHJ4dCBpZiB3ZSBoYXZlIG1vcmUgdGhlbgorCQkJICogb25lIHBhdGgvdHJhbnNwb3J0LiAgV2UgZG8gdGhpcyBiZWNhdXNlIHBhdGgKKwkJCSAqIHJldHJhbnNtaXNzaW9ucyBhcmUgb25seSBjb3VudGVkIHdoZW4gd2UgaGF2ZSBtb3JlCisJCQkgKiB0aGVuIG9uZSBwYXRoLgorCQkJICovCisJCQlpZiAocGF0aHMgPiAxICYmCisJCQkgICAgYXNzb2NwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCA+IHBhdGhfc3VtKQorCQkJCXJldHVybiAtRUlOVkFMOworCiAJCQlhc29jLT5tYXhfcmV0cmFucyA9IGFzc29jcGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQ7CisJCX0KKwogCQlpZiAoYXNzb2NwYXJhbXMuc2Fzb2NfY29va2llX2xpZmUgIT0gMCkgewogCQkJYXNvYy0+Y29va2llX2xpZmUudHZfc2VjID0KIAkJCQkJYXNzb2NwYXJhbXMuc2Fzb2NfY29va2llX2xpZmUgLyAxMDAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwZXZlbnQuYyBiL25ldC9zY3RwL3VscGV2ZW50LmMKaW5kZXggYmE5N2Y5Ny4uZWUyMzY3ODQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmMKKysrIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwpAQCAtNTEsNiArNTEsOCBAQAogc3RhdGljIHZvaWQgc2N0cF91bHBldmVudF9yZWNlaXZlX2RhdGEoc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50LAogCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CiBzdGF0aWMgdm9pZCBzY3RwX3VscGV2ZW50X3JlbGVhc2VfZGF0YShzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgc2N0cF91bHBldmVudF9yZWxlYXNlX2ZyYWdfZGF0YShzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQpOworCiAKIC8qIEluaXRpYWxpemUgYW4gVUxQIGV2ZW50IGZyb20gYW4gZ2l2ZW4gc2tiLiAgKi8KIFNDVFBfU1RBVElDIHZvaWQgc2N0cF91bHBldmVudF9pbml0KHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCwgaW50IG1zZ19mbGFncykKQEAgLTg4Myw2ICs4ODUsNyBAQAogc3RhdGljIHZvaWQgc2N0cF91bHBldmVudF9yZWxlYXNlX2RhdGEoc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBza19idWZmICpza2IsICpmcmFnOworCXVuc2lnbmVkIGludAlsZW47CiAKIAkvKiBDdXJyZW50IHN0YWNrIHN0cnVjdHVyZXMgYXNzdW1lIHRoYXQgdGhlIHJjdiBidWZmZXIgaXMKIAkgKiBwZXIgc29ja2V0LiAgIEZvciBVRFAgc3R5bGUgc29ja2V0cyB0aGlzIGlzIG5vdCB0cnVlIGFzCkBAIC04OTIsNyArODk1LDcgQEAKIAkgKi8KIAogCXNrYiA9IHNjdHBfZXZlbnQyc2tiKGV2ZW50KTsKLQlzY3RwX2Fzc29jX3J3bmRfaW5jcmVhc2UoZXZlbnQtPmFzb2MsIHNrYl9oZWFkbGVuKHNrYikpOworCWxlbiA9IHNrYi0+bGVuOwogCiAJaWYgKCFza2ItPmRhdGFfbGVuKQogCQlnb3RvIGRvbmU7CkBAIC05MDMsNyArOTA2LDMwIEBACiAJCSAqIHNrYidzIHdpdGggb25seSAxIGxldmVsIG9mIGZyYWdtZW50cywgU0NUUCByZWFzc2VtYmx5IGNhbgogCQkgKiBpbmNyZWFzZSB0aGUgbGV2ZWxzLgogCQkgKi8KLQkJc2N0cF91bHBldmVudF9yZWxlYXNlX2RhdGEoc2N0cF9za2IyZXZlbnQoZnJhZykpOworCQlzY3RwX3VscGV2ZW50X3JlbGVhc2VfZnJhZ19kYXRhKHNjdHBfc2tiMmV2ZW50KGZyYWcpKTsKKwl9CisKK2RvbmU6CisJc2N0cF9hc3NvY19yd25kX2luY3JlYXNlKGV2ZW50LT5hc29jLCBsZW4pOworCXNjdHBfdWxwZXZlbnRfcmVsZWFzZV9vd25lcihldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjdHBfdWxwZXZlbnRfcmVsZWFzZV9mcmFnX2RhdGEoc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBza19idWZmICpza2IsICpmcmFnOworCisJc2tiID0gc2N0cF9ldmVudDJza2IoZXZlbnQpOworCisJaWYgKCFza2ItPmRhdGFfbGVuKQorCQlnb3RvIGRvbmU7CisKKwkvKiBEb24ndCBmb3JnZXQgdGhlIGZyYWdtZW50cy4gKi8KKwlmb3IgKGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsgZnJhZzsgZnJhZyA9IGZyYWctPm5leHQpIHsKKwkJLyogTk9URTogIHNrYl9zaGluZm9zIGFyZSByZWN1cnNpdmUuIEFsdGhvdWdoIElQIHJldHVybnMKKwkJICogc2tiJ3Mgd2l0aCBvbmx5IDEgbGV2ZWwgb2YgZnJhZ21lbnRzLCBTQ1RQIHJlYXNzZW1ibHkgY2FuCisJCSAqIGluY3JlYXNlIHRoZSBsZXZlbHMuCisJCSAqLworCQlzY3RwX3VscGV2ZW50X3JlbGVhc2VfZnJhZ19kYXRhKHNjdHBfc2tiMmV2ZW50KGZyYWcpKTsKIAl9CiAKIGRvbmU6CmRpZmYgLS1naXQgYS9uZXQvc3lzY3RsX25ldC5jIGIvbmV0L3N5c2N0bF9uZXQuYwppbmRleCA1NTUzOGY2Li41OGExYjZiIDEwMDY0NAotLS0gYS9uZXQvc3lzY3RsX25ldC5jCisrKyBiL25ldC9zeXNjdGxfbmV0LmMKQEAgLTM3LDE0ICszNyw2IEBACiAJCS5tb2RlCQk9IDA1NTUsCiAJCS5jaGlsZAkJPSBjb3JlX3RhYmxlLAogCX0sCi0jaWZkZWYgQ09ORklHX05FVAotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0VUSEVSLAotCQkucHJvY25hbWUJPSAiZXRoZXJuZXQiLAotCQkubW9kZQkJPSAwNTU1LAotCQkuY2hpbGQJCT0gZXRoZXJfdGFibGUsCi0JfSwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19JTkVUCiAJewogCQkuY3RsX25hbWUJPSBORVRfSVBWNCwKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGI0NjljOGIuLmI4OTM2OTIgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtNDYsNDUgKzQ2LDQzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICp4ZnJtX3BvbGljeV9nZXRfYWZpbmZvKHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBzdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbyk7CitzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqeGZybV9wb2xpY3lfbG9ja19hZmluZm8odW5zaWduZWQgaW50IGZhbWlseSk7CitzdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbyk7CiAKIGludCB4ZnJtX3JlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQogewotCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbyA9IHhmcm1fcG9saWN5X2dldF9hZmluZm8oZmFtaWx5KTsKLQlzdHJ1Y3QgeGZybV90eXBlX21hcCAqdHlwZW1hcDsKKwlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8gPSB4ZnJtX3BvbGljeV9sb2NrX2FmaW5mbyhmYW1pbHkpOworCXN0cnVjdCB4ZnJtX3R5cGUgKip0eXBlbWFwOwogCWludCBlcnIgPSAwOwogCiAJaWYgKHVubGlrZWx5KGFmaW5mbyA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAJdHlwZW1hcCA9IGFmaW5mby0+dHlwZV9tYXA7CiAKLQl3cml0ZV9sb2NrX2JoKCZ0eXBlbWFwLT5sb2NrKTsKLQlpZiAobGlrZWx5KHR5cGVtYXAtPm1hcFt0eXBlLT5wcm90b10gPT0gTlVMTCkpCi0JCXR5cGVtYXAtPm1hcFt0eXBlLT5wcm90b10gPSB0eXBlOworCWlmIChsaWtlbHkodHlwZW1hcFt0eXBlLT5wcm90b10gPT0gTlVMTCkpCisJCXR5cGVtYXBbdHlwZS0+cHJvdG9dID0gdHlwZTsKIAllbHNlCiAJCWVyciA9IC1FRVhJU1Q7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0eXBlbWFwLT5sb2NrKTsKLQl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7CisJeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhhZmluZm8pOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fcmVnaXN0ZXJfdHlwZSk7CiAKIGludCB4ZnJtX3VucmVnaXN0ZXJfdHlwZShzdHJ1Y3QgeGZybV90eXBlICp0eXBlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7Ci0Jc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvID0geGZybV9wb2xpY3lfZ2V0X2FmaW5mbyhmYW1pbHkpOwotCXN0cnVjdCB4ZnJtX3R5cGVfbWFwICp0eXBlbWFwOworCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbyA9IHhmcm1fcG9saWN5X2xvY2tfYWZpbmZvKGZhbWlseSk7CisJc3RydWN0IHhmcm1fdHlwZSAqKnR5cGVtYXA7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAl0eXBlbWFwID0gYWZpbmZvLT50eXBlX21hcDsKIAotCXdyaXRlX2xvY2tfYmgoJnR5cGVtYXAtPmxvY2spOwotCWlmICh1bmxpa2VseSh0eXBlbWFwLT5tYXBbdHlwZS0+cHJvdG9dICE9IHR5cGUpKQorCWlmICh1bmxpa2VseSh0eXBlbWFwW3R5cGUtPnByb3RvXSAhPSB0eXBlKSkKIAkJZXJyID0gLUVOT0VOVDsKIAllbHNlCi0JCXR5cGVtYXAtPm1hcFt0eXBlLT5wcm90b10gPSBOVUxMOwotCXdyaXRlX3VubG9ja19iaCgmdHlwZW1hcC0+bG9jayk7Ci0JeGZybV9wb2xpY3lfcHV0X2FmaW5mbyhhZmluZm8pOworCQl0eXBlbWFwW3R5cGUtPnByb3RvXSA9IE5VTEw7CisJeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhhZmluZm8pOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fdW5yZWdpc3Rlcl90eXBlKTsKQEAgLTkyLDcgKzkwLDcgQEAKIHN0cnVjdCB4ZnJtX3R5cGUgKnhmcm1fZ2V0X3R5cGUodTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87Ci0Jc3RydWN0IHhmcm1fdHlwZV9tYXAgKnR5cGVtYXA7CisJc3RydWN0IHhmcm1fdHlwZSAqKnR5cGVtYXA7CiAJc3RydWN0IHhmcm1fdHlwZSAqdHlwZTsKIAlpbnQgbW9kbG9hZF9hdHRlbXB0ZWQgPSAwOwogCkBAIC0xMDIsMTEgKzEwMCw5IEBACiAJCXJldHVybiBOVUxMOwogCXR5cGVtYXAgPSBhZmluZm8tPnR5cGVfbWFwOwogCi0JcmVhZF9sb2NrKCZ0eXBlbWFwLT5sb2NrKTsKLQl0eXBlID0gdHlwZW1hcC0+bWFwW3Byb3RvXTsKKwl0eXBlID0gdHlwZW1hcFtwcm90b107CiAJaWYgKHVubGlrZWx5KHR5cGUgJiYgIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm93bmVyKSkpCiAJCXR5cGUgPSBOVUxMOwotCXJlYWRfdW5sb2NrKCZ0eXBlbWFwLT5sb2NrKTsKIAlpZiAoIXR5cGUgJiYgIW1vZGxvYWRfYXR0ZW1wdGVkKSB7CiAJCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKIAkJcmVxdWVzdF9tb2R1bGUoInhmcm0tdHlwZS0lZC0lZCIsCkBAIC0xNDIsNiArMTM4LDg5IEBACiAJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7CiB9CiAKK2ludCB4ZnJtX3JlZ2lzdGVyX21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSwgaW50IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87CisJc3RydWN0IHhmcm1fbW9kZSAqKm1vZGVtYXA7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseShtb2RlLT5lbmNhcCA+PSBYRlJNX01PREVfTUFYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZmluZm8gPSB4ZnJtX3BvbGljeV9sb2NrX2FmaW5mbyhmYW1pbHkpOworCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCisJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCisJZXJyID0gLUVFWElTVDsKKwltb2RlbWFwID0gYWZpbmZvLT5tb2RlX21hcDsKKwlpZiAobGlrZWx5KG1vZGVtYXBbbW9kZS0+ZW5jYXBdID09IE5VTEwpKSB7CisJCW1vZGVtYXBbbW9kZS0+ZW5jYXBdID0gbW9kZTsKKwkJZXJyID0gMDsKKwl9CisKKwl4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woeGZybV9yZWdpc3Rlcl9tb2RlKTsKKworaW50IHhmcm1fdW5yZWdpc3Rlcl9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUsIGludCBmYW1pbHkpCit7CisJc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvOworCXN0cnVjdCB4ZnJtX21vZGUgKiptb2RlbWFwOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkobW9kZS0+ZW5jYXAgPj0gWEZSTV9NT0RFX01BWCkpCisJCXJldHVybiAtRUlOVkFMOworCisJYWZpbmZvID0geGZybV9wb2xpY3lfbG9ja19hZmluZm8oZmFtaWx5KTsKKwlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKworCWVyciA9IC1FTk9FTlQ7CisJbW9kZW1hcCA9IGFmaW5mby0+bW9kZV9tYXA7CisJaWYgKGxpa2VseShtb2RlbWFwW21vZGUtPmVuY2FwXSA9PSBtb2RlKSkgeworCQltb2RlbWFwW21vZGUtPmVuY2FwXSA9IE5VTEw7CisJCWVyciA9IDA7CisJfQorCisJeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhhZmluZm8pOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHhmcm1fdW5yZWdpc3Rlcl9tb2RlKTsKKworc3RydWN0IHhmcm1fbW9kZSAqeGZybV9nZXRfbW9kZSh1bnNpZ25lZCBpbnQgZW5jYXAsIGludCBmYW1pbHkpCit7CisJc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvOworCXN0cnVjdCB4ZnJtX21vZGUgKm1vZGU7CisJaW50IG1vZGxvYWRfYXR0ZW1wdGVkID0gMDsKKworCWlmICh1bmxpa2VseShlbmNhcCA+PSBYRlJNX01PREVfTUFYKSkKKwkJcmV0dXJuIE5VTEw7CisKK3JldHJ5OgorCWFmaW5mbyA9IHhmcm1fcG9saWN5X2dldF9hZmluZm8oZmFtaWx5KTsKKwlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKworCW1vZGUgPSBhZmluZm8tPm1vZGVfbWFwW2VuY2FwXTsKKwlpZiAodW5saWtlbHkobW9kZSAmJiAhdHJ5X21vZHVsZV9nZXQobW9kZS0+b3duZXIpKSkKKwkJbW9kZSA9IE5VTEw7CisJaWYgKCFtb2RlICYmICFtb2Rsb2FkX2F0dGVtcHRlZCkgeworCQl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7CisJCXJlcXVlc3RfbW9kdWxlKCJ4ZnJtLW1vZGUtJWQtJWQiLCBmYW1pbHksIGVuY2FwKTsKKwkJbW9kbG9hZF9hdHRlbXB0ZWQgPSAxOworCQlnb3RvIHJldHJ5OworCX0KKworCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKKwlyZXR1cm4gbW9kZTsKK30KKwordm9pZCB4ZnJtX3B1dF9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUpCit7CisJbW9kdWxlX3B1dChtb2RlLT5vd25lcik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2ppZmZpZXMobG9uZyBzZWNzKQogewogCWlmIChzZWNzID49IChNQVhfU0NIRURVTEVfVElNRU9VVC0xKS9IWikKQEAgLTEzMDYsMTcgKzEzODUsMzEgQEAKIAkJcmV0dXJuIE5VTEw7CiAJcmVhZF9sb2NrKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CiAJYWZpbmZvID0geGZybV9wb2xpY3lfYWZpbmZvW2ZhbWlseV07Ci0JaWYgKGxpa2VseShhZmluZm8gIT0gTlVMTCkpCi0JCXJlYWRfbG9jaygmYWZpbmZvLT5sb2NrKTsKLQlyZWFkX3VubG9jaygmeGZybV9wb2xpY3lfYWZpbmZvX2xvY2spOworCWlmICh1bmxpa2VseSghYWZpbmZvKSkKKwkJcmVhZF91bmxvY2soJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKIAlyZXR1cm4gYWZpbmZvOwogfQogCiBzdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbykKIHsKLQlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQotCQlyZXR1cm47Ci0JcmVhZF91bmxvY2soJmFmaW5mby0+bG9jayk7CisJcmVhZF91bmxvY2soJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKnhmcm1fcG9saWN5X2xvY2tfYWZpbmZvKHVuc2lnbmVkIGludCBmYW1pbHkpCit7CisJc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvOworCWlmICh1bmxpa2VseShmYW1pbHkgPj0gTlBST1RPKSkKKwkJcmV0dXJuIE5VTEw7CisJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfYWZpbmZvX2xvY2spOworCWFmaW5mbyA9IHhmcm1fcG9saWN5X2FmaW5mb1tmYW1pbHldOworCWlmICh1bmxpa2VseSghYWZpbmZvKSkKKwkJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CisJcmV0dXJuIGFmaW5mbzsKK30KKworc3RhdGljIHZvaWQgeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pCit7CisJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgeGZybV9kZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggOTNhMmYzNi4uMTdiMjllYyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtNzcsNiArNzcsOCBAQAogCWtmcmVlKHgtPmVhbGcpOwogCWtmcmVlKHgtPmNhbGcpOwogCWtmcmVlKHgtPmVuY2FwKTsKKwlpZiAoeC0+bW9kZSkKKwkJeGZybV9wdXRfbW9kZSh4LT5tb2RlKTsKIAlpZiAoeC0+dHlwZSkgewogCQl4LT50eXBlLT5kZXN0cnVjdG9yKHgpOwogCQl4ZnJtX3B1dF90eXBlKHgtPnR5cGUpOwpAQCAtMTEwMywxNyArMTEwNSwxNCBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZWFkX2xvY2soJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOwogCWFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvW2ZhbWlseV07Ci0JaWYgKGxpa2VseShhZmluZm8gIT0gTlVMTCkpCi0JCXJlYWRfbG9jaygmYWZpbmZvLT5sb2NrKTsKLQlyZWFkX3VubG9jaygmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CisJaWYgKHVubGlrZWx5KCFhZmluZm8pKQorCQlyZWFkX3VubG9jaygmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CiAJcmV0dXJuIGFmaW5mbzsKIH0KIAogc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9wdXRfYWZpbmZvKHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvKQogewotCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCi0JCXJldHVybjsKLQlyZWFkX3VubG9jaygmYWZpbmZvLT5sb2NrKTsKKwlyZWFkX3VubG9jaygmeGZybV9zdGF0ZV9hZmluZm9fbG9jayk7CiB9CiAKIC8qIFRlbXBvcmFyaWx5IGxvY2F0ZWQgaGVyZSB1bnRpbCBuZXQveGZybS94ZnJtX3R1bm5lbC5jIGlzIGNyZWF0ZWQgKi8KQEAgLTExOTYsNiArMTE5NSwxMCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKKwl4LT5tb2RlID0geGZybV9nZXRfbW9kZSh4LT5wcm9wcy5tb2RlLCBmYW1pbHkpOworCWlmICh4LT5tb2RlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKIAl4LT5rbS5zdGF0ZSA9IFhGUk1fU1RBVEVfVkFMSUQ7CiAKIGVycm9yOgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCA4MWQxMDA1Li5jMjFkYzI2IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtNDI3LDIzICs0MjcsMjUgQEAKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCisJaWYgKChlcnIgPSBzZWN1cml0eV94ZnJtX3N0YXRlX2RlbGV0ZSh4KSkgIT0gMCkKKwkJZ290byBvdXQ7CisKIAlpZiAoeGZybV9zdGF0ZV9rZXJuKHgpKSB7Ci0JCXhmcm1fc3RhdGVfcHV0KHgpOwotCQlyZXR1cm4gLUVQRVJNOworCQllcnIgPSAtRVBFUk07CisJCWdvdG8gb3V0OwogCX0KIAogCWVyciA9IHhmcm1fc3RhdGVfZGVsZXRlKHgpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXhmcm1fc3RhdGVfcHV0KHgpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CiAKIAljLnNlcSA9IG5saC0+bmxtc2dfc2VxOwogCWMucGlkID0gbmxoLT5ubG1zZ19waWQ7CiAJYy5ldmVudCA9IG5saC0+bmxtc2dfdHlwZTsKIAlrbV9zdGF0ZV9ub3RpZnkoeCwgJmMpOwotCXhmcm1fc3RhdGVfcHV0KHgpOwogCitvdXQ6CisJeGZybV9zdGF0ZV9wdXQoeCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA1NSw2ICsxMDU3LDggQEAKIAkJCQkJICAgICAgTVNHX0RPTlRXQUlUKTsKIAkJfQogCX0gZWxzZSB7CisJCWlmICgoZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKHhwKSkgIT0gMCkKKwkJCWdvdG8gb3V0OwogCQljLmRhdGEuYnlpZCA9IHAtPmluZGV4OwogCQljLmV2ZW50ID0gbmxoLT5ubG1zZ190eXBlOwogCQljLnNlcSA9IG5saC0+bmxtc2dfc2VxOwpAQCAtMTA2NCw2ICsxMDY4LDcgQEAKIAogCXhmcm1fcG9sX3B1dCh4cCk7CiAKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9kdW1teS5jIGIvc2VjdXJpdHkvZHVtbXkuYwppbmRleCA4Y2NjY2NjLi42NGY2ZGEwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9kdW1teS5jCisrKyBiL3NlY3VyaXR5L2R1bW15LmMKQEAgLTgxMCw2ICs4MTAsMTEgQEAKIHsKIH0KIAorc3RhdGljIGludCBkdW1teV94ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkdW1teV94ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCiB7CiAJcmV0dXJuIDA7CkBAIC04MTksNiArODI0LDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbnQgZHVtbXlfeGZybV9zdGF0ZV9kZWxldGVfc2VjdXJpdHkoc3RydWN0IHhmcm1fc3RhdGUgKngpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHVtbXlfeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHUzMiBza19zaWQsIHU4IGRpcikKIHsKIAlyZXR1cm4gMDsKQEAgLTEwMjQsOCArMTAzNCwxMCBAQAogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfYWxsb2Nfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfY2xvbmVfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfZnJlZV9zZWN1cml0eSk7CisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3BvbGljeV9kZWxldGVfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9zdGF0ZV9hbGxvY19zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB4ZnJtX3N0YXRlX2ZyZWVfc2VjdXJpdHkpOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9zdGF0ZV9kZWxldGVfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfbG9va3VwKTsKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNICovCiAjaWZkZWYgQ09ORklHX0tFWVMKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IGI2MDYxZmEuLjNmZGM0OWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtMjExLDEyICsyMTEsMTIgQEAKIAkJCWtleS0+c2VyaWFsID0gMjsKIAkJa2V5X3NlcmlhbF9uZXh0ID0ga2V5LT5zZXJpYWwgKyAxOwogCi0JCWlmICghcGFyZW50LT5yYl9wYXJlbnQpCisJCWlmICghcmJfcGFyZW50KHBhcmVudCkpCiAJCQlwID0gJmtleV9zZXJpYWxfdHJlZS5yYl9ub2RlOwotCQllbHNlIGlmIChwYXJlbnQtPnJiX3BhcmVudC0+cmJfbGVmdCA9PSBwYXJlbnQpCi0JCQlwID0gJnBhcmVudC0+cmJfcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChyYl9wYXJlbnQocGFyZW50KS0+cmJfbGVmdCA9PSBwYXJlbnQpCisJCQlwID0gJihyYl9wYXJlbnQocGFyZW50KS0+cmJfbGVmdCk7CiAJCWVsc2UKLQkJCXAgPSAmcGFyZW50LT5yYl9wYXJlbnQtPnJiX3JpZ2h0OworCQkJcCA9ICYocmJfcGFyZW50KHBhcmVudCktPnJiX3JpZ2h0KTsKIAogCQlwYXJlbnQgPSByYl9uZXh0KHBhcmVudCk7CiAJCWlmICghcGFyZW50KQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnIGIvc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCmluZGV4IGY2MzZmNTMuLjgxNGRkYzQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvS2NvbmZpZworKysgYi9zZWN1cml0eS9zZWxpbnV4L0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgU0VDVVJJVFlfU0VMSU5VWAogCWJvb2wgIk5TQSBTRUxpbnV4IFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTRUNVUklUWV9ORVRXT1JLICYmIEFVRElUICYmIE5FVCAmJiBJTkVUCisJc2VsZWN0IE5FVFdPUktfU0VDTUFSSwogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyBOU0EgU2VjdXJpdHktRW5oYW5jZWQgTGludXggKFNFTGludXgpLgpAQCAtOTUsMyArOTYsMzEgQEAKIAkgIHZpYSAvc2VsaW51eC9jaGVja3JlcXByb3QgaWYgYXV0aG9yaXplZCBieSBwb2xpY3kuCiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIDEuCisKK2NvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0VOQUJMRV9TRUNNQVJLX0RFRkFVTFQKKwlib29sICJOU0EgU0VMaW51eCBlbmFibGUgbmV3IHNlY21hcmsgbmV0d29yayBjb250cm9scyBieSBkZWZhdWx0IgorCWRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGRldGVybWluZXMgd2hldGhlciB0aGUgbmV3IHNlY21hcmstYmFzZWQgbmV0d29yaworCSAgY29udHJvbHMgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBJZiBub3QsIHRoZSBvbGQgaW50ZXJuYWwKKwkgIHBlci1wYWNrZXQgY29udHJvbHMgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQsIHByZXNlcnZpbmcKKwkgIG9sZCBiZWhhdmlvci4KKworCSAgSWYgeW91IGVuYWJsZSB0aGUgbmV3IGNvbnRyb2xzLCB5b3Ugd2lsbCBuZWVkIHVwZGF0ZWQKKwkgIFNFTGludXggdXNlcnNwYWNlIGxpYnJhcmllcywgdG9vbHMgYW5kIHBvbGljeS4gIFR5cGljYWxseSwKKwkgIHlvdXIgZGlzdHJpYnV0aW9uIHdpbGwgcHJvdmlkZSB0aGVzZSBhbmQgZW5hYmxlIHRoZSBuZXcgY29udHJvbHMKKwkgIGluIHRoZSBrZXJuZWwgdGhleSBhbHNvIGRpc3RyaWJ1dGUuCisKKwkgIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBjYW4gYmUgb3ZlcnJpZGVuIGF0IGJvb3Qgd2l0aCB0aGUKKwkgIHNlbGludXhfY29tcGF0X25ldCBwYXJhbWV0ZXIsIGFuZCBhZnRlciBib290IHZpYQorCSAgL3NlbGludXgvY29tcGF0X25ldC4gIFNlZSBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorCSAgZm9yIGRldGFpbHMgb24gdGhpcyBwYXJhbWV0ZXIuCisKKwkgIElmIHlvdSBlbmFibGUgdGhlIG5ldyBuZXR3b3JrIGNvbnRyb2xzLCB5b3Ugd2lsbCBsaWtlbHkKKwkgIGFsc28gcmVxdWlyZSB0aGUgU0VDTUFSSyBhbmQgQ09OTlNFQ01BUksgdGFyZ2V0cywgYXMKKwkgIHdlbGwgYXMgYW55IGNvbm50cmFjayBoZWxwZXJzIGZvciBwcm90b2NvbHMgd2hpY2ggeW91CisJICB3aXNoIHRvIGNvbnRyb2wuCisKKwkgIElmIHlvdSBhcmUgdW5zdXJlIHdoYXQgZG8gZG8gaGVyZSwgc2VsZWN0IE4uCisKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvZXhwb3J0cy5jIGIvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKaW5kZXggYWU0YzczZS4uOWQ3NzM3ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9leHBvcnRzLmMKQEAgLTcyLDMgKzcyLDI1IEBACiAJKnNpZCA9IDA7CiB9CiAKK2ludCBzZWxpbnV4X3N0cmluZ190b19zaWQoY2hhciAqc3RyLCB1MzIgKnNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKQorCQlyZXR1cm4gc2VjdXJpdHlfY29udGV4dF90b19zaWQoc3RyLCBzdHJsZW4oc3RyKSwgc2lkKTsKKwllbHNlIHsKKwkJKnNpZCA9IDA7CisJCXJldHVybiAwOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNlbGludXhfc3RyaW5nX3RvX3NpZCk7CisKK2ludCBzZWxpbnV4X3JlbGFiZWxfcGFja2V0X3Blcm1pc3Npb24odTMyIHNpZCkKK3sKKwlpZiAoc2VsaW51eF9lbmFibGVkKSB7CisJCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnQtPnNlY3VyaXR5OworCisJCXJldHVybiBhdmNfaGFzX3Blcm0odHNlYy0+c2lkLCBzaWQsIFNFQ0NMQVNTX1BBQ0tFVCwKKwkJCQkgICAgUEFDS0VUX19SRUxBQkVMVE8sIE5VTEwpOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNlbGludXhfcmVsYWJlbF9wYWNrZXRfcGVybWlzc2lvbik7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMjFkYWQ0MS4uNTRhZGM5ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtODAsNiArODAsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IHBvbGljeWRiX2xvYWRlZF92ZXJzaW9uOwogZXh0ZXJuIGludCBzZWxpbnV4X25sbXNnX2xvb2t1cCh1MTYgc2NsYXNzLCB1MTYgbmxtc2dfdHlwZSwgdTMyICpwZXJtKTsKK2V4dGVybiBpbnQgc2VsaW51eF9jb21wYXRfbmV0OwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUAogaW50IHNlbGludXhfZW5mb3JjaW5nID0gMDsKQEAgLTY5Niw2ICs2OTcsOCBAQAogCQlyZXR1cm4gU0VDQ0xBU1NfUEFDS0VUX1NPQ0tFVDsKIAljYXNlIFBGX0tFWToKIAkJcmV0dXJuIFNFQ0NMQVNTX0tFWV9TT0NLRVQ7CisJY2FzZSBQRl9BUFBMRVRBTEs6CisJCXJldHVybiBTRUNDTEFTU19BUFBMRVRBTEtfU09DS0VUOwogCX0KIAogCXJldHVybiBTRUNDTEFTU19TT0NLRVQ7CkBAIC0zMjE0LDQ3ICszMjE3LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfc29ja19yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwgdTMyIHNvY2tfc2lkLCB1MTYgc29ja19jbGFzcywKKwkJdTE2IGZhbWlseSwgY2hhciAqYWRkcnAsIGludCBsZW4pCiB7Ci0JdTE2IGZhbWlseTsKLQljaGFyICphZGRycDsKLQlpbnQgbGVuLCBlcnIgPSAwOworCWludCBlcnIgPSAwOwogCXUzMiBuZXRpZl9wZXJtLCBub2RlX3Blcm0sIG5vZGVfc2lkLCBpZl9zaWQsIHJlY3ZfcGVybSA9IDA7Ci0JdTMyIHNvY2tfc2lkID0gMDsKLQl1MTYgc29ja19jbGFzcyA9IDA7Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAotCWZhbWlseSA9IHNrLT5za19mYW1pbHk7Ci0JaWYgKGZhbWlseSAhPSBQRl9JTkVUICYmIGZhbWlseSAhPSBQRl9JTkVUNikKKwlpZiAoIXNrYi0+ZGV2KQogCQlnb3RvIG91dDsKIAotCS8qIEhhbmRsZSBtYXBwZWQgSVB2NCBwYWNrZXRzIGFycml2aW5nIHZpYSBJUHY2IHNvY2tldHMgKi8KLQlpZiAoZmFtaWx5ID09IFBGX0lORVQ2ICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQotCQlmYW1pbHkgPSBQRl9JTkVUOwotCi0gCXJlYWRfbG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOwotIAlzb2NrID0gc2stPnNrX3NvY2tldDsKLSAJaWYgKHNvY2spIHsKLSAJCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0gCQlpbm9kZSA9IFNPQ0tfSU5PREUoc29jayk7Ci0gCQlpZiAoaW5vZGUpIHsKLSAJCQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotIAkJCWlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKLSAJCQlzb2NrX3NpZCA9IGlzZWMtPnNpZDsKLSAJCQlzb2NrX2NsYXNzID0gaXNlYy0+c2NsYXNzOwotIAkJfQotIAl9Ci0gCXJlYWRfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7Ci0gCWlmICghc29ja19zaWQpCi0gIAkJZ290byBvdXQ7Ci0KLQlkZXYgPSBza2ItPmRldjsKLQlpZiAoIWRldikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBzZWxfbmV0aWZfc2lkcyhkZXYsICZpZl9zaWQsIE5VTEwpOworCWVyciA9IHNlbF9uZXRpZl9zaWRzKHNrYi0+ZGV2LCAmaWZfc2lkLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMzI3Nyw0NCArMzI1MCw4OCBAQAogCQlicmVhazsKIAl9CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKLQlhZC51Lm5ldC5uZXRpZiA9IGRldi0+bmFtZTsKLQlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7Ci0KLQllcnIgPSBzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAmbGVuLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGF2Y19oYXNfcGVybShzb2NrX3NpZCwgaWZfc2lkLCBTRUNDTEFTU19ORVRJRiwgbmV0aWZfcGVybSwgJmFkKTsKKwllcnIgPSBhdmNfaGFzX3Blcm0oc29ja19zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsIG5ldGlmX3Blcm0sIGFkKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAkKLQkvKiBGaXhtZTogdGhpcyBsb29rdXAgaXMgaW5lZmZpY2llbnQgKi8KIAllcnIgPSBzZWN1cml0eV9ub2RlX3NpZChmYW1pbHksIGFkZHJwLCBsZW4sICZub2RlX3NpZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAJCi0JZXJyID0gYXZjX2hhc19wZXJtKHNvY2tfc2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwgbm9kZV9wZXJtLCAmYWQpOworCWVyciA9IGF2Y19oYXNfcGVybShzb2NrX3NpZCwgbm9kZV9zaWQsIFNFQ0NMQVNTX05PREUsIG5vZGVfcGVybSwgYWQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHJlY3ZfcGVybSkgewogCQl1MzIgcG9ydF9zaWQ7CiAKLQkJLyogRml4bWU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCAqLwogCQllcnIgPSBzZWN1cml0eV9wb3J0X3NpZChzay0+c2tfZmFtaWx5LCBzay0+c2tfdHlwZSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgc2stPnNrX3Byb3RvY29sLCBudG9ocyhhZC51Lm5ldC5zcG9ydCksCisJCSAgICAgICAgICAgICAgICAgICAgICAgIHNrLT5za19wcm90b2NvbCwgbnRvaHMoYWQtPnUubmV0LnNwb3J0KSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgJnBvcnRfc2lkKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCiAJCWVyciA9IGF2Y19oYXNfcGVybShzb2NrX3NpZCwgcG9ydF9zaWQsCi0JCQkJICAgc29ja19jbGFzcywgcmVjdl9wZXJtLCAmYWQpOworCQkJCSAgIHNvY2tfY2xhc3MsIHJlY3ZfcGVybSwgYWQpOwogCX0KIAotCWlmICghZXJyKQotCQllcnIgPSBzZWxpbnV4X3hmcm1fc29ja19yY3Zfc2tiKHNvY2tfc2lkLCBza2IpOworb3V0OgorCXJldHVybiBlcnI7Cit9CiAKK3N0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfc29ja19yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1MTYgZmFtaWx5OworCXUxNiBzb2NrX2NsYXNzID0gMDsKKwljaGFyICphZGRycDsKKwlpbnQgbGVuLCBlcnIgPSAwOworCXUzMiBzb2NrX3NpZCA9IDA7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisKKwlmYW1pbHkgPSBzay0+c2tfZmFtaWx5OworCWlmIChmYW1pbHkgIT0gUEZfSU5FVCAmJiBmYW1pbHkgIT0gUEZfSU5FVDYpCisJCWdvdG8gb3V0OworCisJLyogSGFuZGxlIG1hcHBlZCBJUHY0IHBhY2tldHMgYXJyaXZpbmcgdmlhIElQdjYgc29ja2V0cyAqLworCWlmIChmYW1pbHkgPT0gUEZfSU5FVDYgJiYgc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF9JUCkpCisJCWZhbWlseSA9IFBGX0lORVQ7CisKKyAJcmVhZF9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisgCXNvY2sgPSBzay0+c2tfc29ja2V0OworIAlpZiAoc29jaykgeworIAkJc3RydWN0IGlub2RlICppbm9kZTsKKyAJCWlub2RlID0gU09DS19JTk9ERShzb2NrKTsKKyAJCWlmIChpbm9kZSkgeworIAkJCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CisgCQkJaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OworIAkJCXNvY2tfc2lkID0gaXNlYy0+c2lkOworIAkJCXNvY2tfY2xhc3MgPSBpc2VjLT5zY2xhc3M7CisgCQl9CisgCX0KKyAJcmVhZF91bmxvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKKyAJaWYgKCFzb2NrX3NpZCkKKyAgCQlnb3RvIG91dDsKKworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOworCWFkLnUubmV0Lm5ldGlmID0gc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICJbdW5rbm93bl0iOworCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKKworCWVyciA9IHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsICZsZW4sIDEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJaWYgKHNlbGludXhfY29tcGF0X25ldCkKKwkJZXJyID0gc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHNrLCBza2IsICZhZCwgc29ja19zaWQsCisJCQkJCQkgIHNvY2tfY2xhc3MsIGZhbWlseSwKKwkJCQkJCSAgYWRkcnAsIGxlbik7CisJZWxzZQorCQllcnIgPSBhdmNfaGFzX3Blcm0oc29ja19zaWQsIHNrYi0+c2VjbWFyaywgU0VDQ0xBU1NfUEFDS0VULAorCQkJCSAgIFBBQ0tFVF9fUkVDViwgJmFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IHNlbGludXhfeGZybV9zb2NrX3Jjdl9za2Ioc29ja19zaWQsIHNrYik7CiBvdXQ6CQogCXJldHVybiBlcnI7CiB9CkBAIC0zNDU0LDQyICszNDcxLDE4IEBACiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2VsaW51eF9pcF9wb3N0cm91dGVfbGFzdCh1bnNpZ25lZCBpbnQgaG9va251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGZhbWlseSkKK3N0YXRpYyBpbnQgc2VsaW51eF9pcF9wb3N0cm91dGVfbGFzdF9jb21wYXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYywKKwkJCQkJICAgIHN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsCisJCQkJCSAgICB1MTYgZmFtaWx5LCBjaGFyICphZGRycCwgaW50IGxlbikKIHsKLQljaGFyICphZGRycDsKLQlpbnQgbGVuLCBlcnIgPSBORl9BQ0NFUFQ7CisJaW50IGVycjsKIAl1MzIgbmV0aWZfcGVybSwgbm9kZV9wZXJtLCBub2RlX3NpZCwgaWZfc2lkLCBzZW5kX3Blcm0gPSAwOwotCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwotCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilvdXQ7CiAJCi0Jc2sgPSBza2ItPnNrOwotCWlmICghc2spCi0JCWdvdG8gb3V0OwotCQkKLQlzb2NrID0gc2stPnNrX3NvY2tldDsKLQlpZiAoIXNvY2spCi0JCWdvdG8gb3V0OwotCQkKLQlpbm9kZSA9IFNPQ0tfSU5PREUoc29jayk7Ci0JaWYgKCFpbm9kZSkKLQkJZ290byBvdXQ7Ci0KIAllcnIgPSBzZWxfbmV0aWZfc2lkcyhkZXYsICZpZl9zaWQsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwotCQogCXN3aXRjaCAoaXNlYy0+c2NsYXNzKSB7CiAJY2FzZSBTRUNDTEFTU19VRFBfU09DS0VUOgogCQluZXRpZl9wZXJtID0gTkVUSUZfX1VEUF9TRU5EOwpAQCAtMzUwOSw1NSArMzUwMiw4OCBAQAogCQlicmVhazsKIAl9CiAKLQotCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwotCWFkLnUubmV0Lm5ldGlmID0gZGV2LT5uYW1lOwotCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKLQotCWVyciA9IHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsCi0JCQkJJmxlbiwgMCkgPyBORl9EUk9QIDogTkZfQUNDRVBUOwotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsCi0JICAgICAgICAgICAgICAgICAgIG5ldGlmX3Blcm0sICZhZCkgPyBORl9EUk9QIDogTkZfQUNDRVBUOwotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQorCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsIG5ldGlmX3Blcm0sIGFkKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAkJCi0JLyogRml4bWU6IHRoaXMgbG9va3VwIGlzIGluZWZmaWNpZW50ICovCi0JZXJyID0gc2VjdXJpdHlfbm9kZV9zaWQoZmFtaWx5LCBhZGRycCwgbGVuLAotCQkJCSZub2RlX3NpZCkgPyBORl9EUk9QIDogTkZfQUNDRVBUOwotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQorCWVyciA9IHNlY3VyaXR5X25vZGVfc2lkKGZhbWlseSwgYWRkcnAsIGxlbiwgJm5vZGVfc2lkKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAkKLQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwKLQkgICAgICAgICAgICAgICAgICAgbm9kZV9wZXJtLCAmYWQpID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKLQlpZiAoZXJyICE9IE5GX0FDQ0VQVCkKKwllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwgbm9kZV9wZXJtLCBhZCk7CisJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAlpZiAoc2VuZF9wZXJtKSB7CiAJCXUzMiBwb3J0X3NpZDsKIAkJCi0JCS8qIEZpeG1lOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQgKi8KIAkJZXJyID0gc2VjdXJpdHlfcG9ydF9zaWQoc2stPnNrX2ZhbWlseSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgc2stPnNrX3R5cGUsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgIHNrLT5za19wcm90b2NvbCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgbnRvaHMoYWQudS5uZXQuZHBvcnQpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAmcG9ydF9zaWQpID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKLQkJaWYgKGVyciAhPSBORl9BQ0NFUFQpCisJCSAgICAgICAgICAgICAgICAgICAgICAgIG50b2hzKGFkLT51Lm5ldC5kcG9ydCksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICZwb3J0X3NpZCk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAogCQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBwb3J0X3NpZCwgaXNlYy0+c2NsYXNzLAotCQkgICAgICAgICAgICAgICAgICAgc2VuZF9wZXJtLCAmYWQpID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKKwkJCQkgICBzZW5kX3Blcm0sIGFkKTsKIAl9CitvdXQ6CisJcmV0dXJuIGVycjsKK30KIAotCWlmIChlcnIgIT0gTkZfQUNDRVBUKQorc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9sYXN0KHVuc2lnbmVkIGludCBob29rbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICoqcHNrYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZmFtaWx5KQoreworCWNoYXIgKmFkZHJwOworCWludCBsZW4sIGVyciA9IDA7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CisJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKKwlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKW91dDsKKworCXNrID0gc2tiLT5zazsKKwlpZiAoIXNrKQorCQlnb3RvIG91dDsKKworCXNvY2sgPSBzay0+c2tfc29ja2V0OworCWlmICghc29jaykKKwkJZ290byBvdXQ7CisKKwlpbm9kZSA9IFNPQ0tfSU5PREUoc29jayk7CisJaWYgKCFpbm9kZSkKKwkJZ290byBvdXQ7CisKKwlpc2VjID0gaW5vZGUtPmlfc2VjdXJpdHk7CisKKwlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKKwlhZC51Lm5ldC5uZXRpZiA9IGRldi0+bmFtZTsKKwlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CisKKwllcnIgPSBzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAmbGVuLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQpCisJCWVyciA9IHNlbGludXhfaXBfcG9zdHJvdXRlX2xhc3RfY29tcGF0KHNrLCBkZXYsIGlzZWMsICZhZCwKKwkJCQkJCSAgICAgICBmYW1pbHksIGFkZHJwLCBsZW4pOworCWVsc2UKKwkJZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgc2tiLT5zZWNtYXJrLCBTRUNDTEFTU19QQUNLRVQsCisJCQkJICAgUEFDS0VUX19TRU5ELCAmYWQpOworCisJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAllcnIgPSBzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3QoaXNlYy0+c2lkLCBza2IpOwotCiBvdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gZXJyID8gTkZfRFJPUCA6IE5GX0FDQ0VQVDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwdjRfcG9zdHJvdXRlX2xhc3QodW5zaWduZWQgaW50IGhvb2tudW0sCkBAIC00Mzc0LDggKzQ0MDAsMTAgQEAKIAkueGZybV9wb2xpY3lfYWxsb2Nfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jLAogCS54ZnJtX3BvbGljeV9jbG9uZV9zZWN1cml0eSA9CXNlbGludXhfeGZybV9wb2xpY3lfY2xvbmUsCiAJLnhmcm1fcG9saWN5X2ZyZWVfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fcG9saWN5X2ZyZWUsCisJLnhmcm1fcG9saWN5X2RlbGV0ZV9zZWN1cml0eSA9CXNlbGludXhfeGZybV9wb2xpY3lfZGVsZXRlLAogCS54ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5ID0Jc2VsaW51eF94ZnJtX3N0YXRlX2FsbG9jLAogCS54ZnJtX3N0YXRlX2ZyZWVfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fc3RhdGVfZnJlZSwKKwkueGZybV9zdGF0ZV9kZWxldGVfc2VjdXJpdHkgPQlzZWxpbnV4X3hmcm1fc3RhdGVfZGVsZXRlLAogCS54ZnJtX3BvbGljeV9sb29rdXAgPSAJCXNlbGludXhfeGZybV9wb2xpY3lfbG9va3VwLAogI2VuZGlmCiB9OwpAQCAtNDQyMiw2ICs0NDUwLDcgQEAKIAogCS8qIFNldCB1cCBhbnkgc3VwZXJibG9ja3MgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdGhlIHBvbGljeSBsb2FkLiAqLwogCXByaW50ayhLRVJOX0lORk8gIlNFTGludXg6ICBTZXR0aW5nIHVwIGV4aXN0aW5nIHN1cGVyYmxvY2tzLlxuIik7CisJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIAlzcGluX2xvY2soJnNiX3NlY3VyaXR5X2xvY2spOwogbmV4dF9zYjoKIAlpZiAoIWxpc3RfZW1wdHkoJnN1cGVyYmxvY2tfc2VjdXJpdHlfaGVhZCkpIHsKQEAgLTQ0MzAsMTkgKzQ0NTksMjAgQEAKIAkJCQkgICAgICAgICAgIHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCwKIAkJCQkgICAgICAgICAgIGxpc3QpOwogCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2JzZWMtPnNiOwotCQlzcGluX2xvY2soJnNiX2xvY2spOwogCQlzYi0+c19jb3VudCsrOwotCQlzcGluX3VubG9jaygmc2JfbG9jayk7CiAJCXNwaW5fdW5sb2NrKCZzYl9zZWN1cml0eV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogCQlkb3duX3JlYWQoJnNiLT5zX3Vtb3VudCk7CiAJCWlmIChzYi0+c19yb290KQogCQkJc3VwZXJibG9ja19kb2luaXQoc2IsIE5VTEwpOwogCQlkcm9wX3N1cGVyKHNiKTsKKwkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZzYl9zZWN1cml0eV9sb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmc2JzZWMtPmxpc3QpOwogCQlnb3RvIG5leHRfc2I7CiAJfQogCXNwaW5fdW5sb2NrKCZzYl9zZWN1cml0eV9sb2NrKTsKKwlzcGluX3VubG9jaygmc2JfbG9jayk7CiB9CiAKIC8qIFNFTGludXggcmVxdWlyZXMgZWFybHkgaW5pdGlhbGl6YXRpb24gaW4gb3JkZXIgdG8gbGFiZWwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfaW5oZXJpdC5oCmluZGV4IGIwZTZiMTIuLmE2OGZkZDUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X2luaGVyaXQuaApAQCAtMjksMyArMjksNCBAQAogICAgU18oU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19ETlJUX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCisgICBTXyhTRUNDTEFTU19BUFBMRVRBTEtfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKaW5kZXggNTkxZTk4ZC4uNzBlZTY1YSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKQEAgLTIzOSwzICsyMzksNiBAQAogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRU5EVE8sICJzZW5kdG8iKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19SRUNWRlJPTSwgInJlY3Zmcm9tIikKICAgIFNfKFNFQ0NMQVNTX0FTU09DSUFUSU9OLCBBU1NPQ0lBVElPTl9fU0VUQ09OVEVYVCwgInNldGNvbnRleHQiKQorICAgU18oU0VDQ0xBU1NfUEFDS0VULCBQQUNLRVRfX1NFTkQsICJzZW5kIikKKyAgIFNfKFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19SRUNWLCAicmVjdiIpCisgICBTXyhTRUNDTEFTU19QQUNLRVQsIFBBQ0tFVF9fUkVMQUJFTFRPLCAicmVsYWJlbHRvIikKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKaW5kZXggZDdmMDJlZC4uMWQ5Y2YzZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKQEAgLTkzMywzICs5MzMsMjkgQEAKICNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVF9TT0NLRVRfX1NFTkRfTVNHICAgMHgwMDEwMDAwMFVMCiAjZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUX19OQU1FX0JJTkQgIDB4MDAyMDAwMDBVTAogCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAweDAwMDAwMDgwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgICAgMHgwMDAwMDEwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgICAweDAwMDEwMDAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgICAgMHgwMDAyMDAwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVTAorI2RlZmluZSBBUFBMRVRBTEtfU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgICAweDAwMDgwMDAwVUwKKyNkZWZpbmUgQVBQTEVUQUxLX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgICAgMHgwMDEwMDAwMFVMCisjZGVmaW5lIEFQUExFVEFMS19TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVTAorCisjZGVmaW5lIFBBQ0tFVF9fU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAorI2RlZmluZSBQQUNLRVRfX1JFQ1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKKyNkZWZpbmUgUEFDS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvY2xhc3NfdG9fc3RyaW5nLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvY2xhc3NfdG9fc3RyaW5nLmgKaW5kZXggNzdiMmM1OS4uM2FlYzc1ZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzX3RvX3N0cmluZy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaApAQCAtNTgsMyArNTgsNSBAQAogICAgIFNfKCJuc2NkIikKICAgICBTXygiYXNzb2NpYXRpb24iKQogICAgIFNfKCJuZXRsaW5rX2tvYmplY3RfdWV2ZW50X3NvY2tldCIpCisgICAgU18oImFwcGxldGFsa19zb2NrZXQiKQorICAgIFNfKCJwYWNrZXQiKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2ZsYXNrLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaAppbmRleCBlYjlmNTA4Li5hMGViOWUyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaApAQCAtNjAsNiArNjAsOCBAQAogI2RlZmluZSBTRUNDTEFTU19OU0NEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTMKICNkZWZpbmUgU0VDQ0xBU1NfQVNTT0NJQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0CiAjZGVmaW5lIFNFQ0NMQVNTX05FVExJTktfS09CSkVDVF9VRVZFTlRfU09DS0VUICAgICAgICAgICA1NQorI2RlZmluZSBTRUNDTEFTU19BUFBMRVRBTEtfU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgNTYKKyNkZWZpbmUgU0VDQ0xBU1NfUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3CiAKIC8qCiAgKiBTZWN1cml0eSBpZGVudGlmaWVyIGluZGljZXMgZm9yIGluaXRpYWwgZW50aXRpZXMKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oCmluZGV4IGMxMGYxZmMuLmM5NjQ5OGEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaApAQCAtOSw4ICs5LDEwIEBACiBpbnQgc2VsaW51eF94ZnJtX3BvbGljeV9hbGxvYyhzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpOwogaW50IHNlbGludXhfeGZybV9wb2xpY3lfY2xvbmUoc3RydWN0IHhmcm1fcG9saWN5ICpvbGQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqbmV3KTsKIHZvaWQgc2VsaW51eF94ZnJtX3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApOworaW50IHNlbGludXhfeGZybV9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApOwogaW50IHNlbGludXhfeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KTsKIHZvaWQgc2VsaW51eF94ZnJtX3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpOworaW50IHNlbGludXhfeGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogaW50IHNlbGludXhfeGZybV9wb2xpY3lfbG9va3VwKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsIHUzMiBza19zaWQsIHU4IGRpcik7CiAKIC8qCkBAIC00OSw3ICs1MSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdCh1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcmV0dXJuIE5GX0FDQ0VQVDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggYTRlZmM5Ni4uMmU3M2QzMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC0zOCw2ICszOCwxNCBAQAogCiB1bnNpZ25lZCBpbnQgc2VsaW51eF9jaGVja3JlcXByb3QgPSBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9DSEVDS1JFUVBST1RfVkFMVUU7CiAKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9FTkFCTEVfU0VDTUFSS19ERUZBVUxUCisjZGVmaW5lIFNFTElOVVhfQ09NUEFUX05FVF9WQUxVRSAwCisjZWxzZQorI2RlZmluZSBTRUxJTlVYX0NPTVBBVF9ORVRfVkFMVUUgMQorI2VuZGlmCisKK2ludCBzZWxpbnV4X2NvbXBhdF9uZXQgPSBTRUxJTlVYX0NPTVBBVF9ORVRfVkFMVUU7CisKIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrcmVxcHJvdF9zZXR1cChjaGFyICpzdHIpCiB7CiAJc2VsaW51eF9jaGVja3JlcXByb3QgPSBzaW1wbGVfc3RydG91bChzdHIsTlVMTCwwKSA/IDEgOiAwOwpAQCAtNDUsNiArNTMsMTMgQEAKIH0KIF9fc2V0dXAoImNoZWNrcmVxcHJvdD0iLCBjaGVja3JlcXByb3Rfc2V0dXApOwogCitzdGF0aWMgaW50IF9faW5pdCBzZWxpbnV4X2NvbXBhdF9uZXRfc2V0dXAoY2hhciAqc3RyKQoreworCXNlbGludXhfY29tcGF0X25ldCA9IHNpbXBsZV9zdHJ0b3VsKHN0cixOVUxMLDApID8gMSA6IDA7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJzZWxpbnV4X2NvbXBhdF9uZXQ9Iiwgc2VsaW51eF9jb21wYXRfbmV0X3NldHVwKTsKKwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHNlbF9tdXRleCk7CiAKQEAgLTg1LDYgKzEwMCw3IEBACiAJU0VMX0FWQywJLyogQVZDIG1hbmFnZW1lbnQgZGlyZWN0b3J5ICovCiAJU0VMX01FTUJFUiwJLyogY29tcHV0ZSBwb2x5aW5zdGFudGlhdGlvbiBtZW1iZXJzaGlwIGRlY2lzaW9uICovCiAJU0VMX0NIRUNLUkVRUFJPVCwgLyogY2hlY2sgcmVxdWVzdGVkIHByb3RlY3Rpb24sIG5vdCBrZXJuZWwtYXBwbGllZCBvbmUgKi8KKwlTRUxfQ09NUEFUX05FVCwJLyogd2hldGhlciB0byB1c2Ugb2xkIGNvbXBhdCBuZXR3b3JrIHBhY2tldCBjb250cm9scyAqLwogfTsKIAogI2RlZmluZSBUTVBCVUZMRU4JMTIKQEAgLTM2NCw2ICszODAsNTUgQEAKIAkud3JpdGUJCT0gc2VsX3dyaXRlX2NoZWNrcmVxcHJvdCwKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX2NvbXBhdF9uZXQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciB0bXBidWZbVE1QQlVGTEVOXTsKKwlzc2l6ZV90IGxlbmd0aDsKKworCWxlbmd0aCA9IHNjbnByaW50Zih0bXBidWYsIFRNUEJVRkxFTiwgIiVkIiwgc2VsaW51eF9jb21wYXRfbmV0KTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW5ndGgpOworfQorCitzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY29tcGF0X25ldChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAorCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICpwYWdlOworCXNzaXplX3QgbGVuZ3RoOworCWludCBuZXdfdmFsdWU7CisKKwlsZW5ndGggPSB0YXNrX2hhc19zZWN1cml0eShjdXJyZW50LCBTRUNVUklUWV9fTE9BRF9QT0xJQ1kpOworCWlmIChsZW5ndGgpCisJCXJldHVybiBsZW5ndGg7CisKKwlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoKnBwb3MgIT0gMCkgeworCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBhZ2UgPSAoY2hhciopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbGVuZ3RoID0gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIocGFnZSwgYnVmLCBjb3VudCkpCisJCWdvdG8gb3V0OworCisJbGVuZ3RoID0gLUVJTlZBTDsKKwlpZiAoc3NjYW5mKHBhZ2UsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpCisJCWdvdG8gb3V0OworCisJc2VsaW51eF9jb21wYXRfbmV0ID0gbmV3X3ZhbHVlID8gMSA6IDA7CisJbGVuZ3RoID0gY291bnQ7CitvdXQ6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKKwlyZXR1cm4gbGVuZ3RoOworfQorc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2NvbXBhdF9uZXRfb3BzID0geworCS5yZWFkCQk9IHNlbF9yZWFkX2NvbXBhdF9uZXQsCisJLndyaXRlCQk9IHNlbF93cml0ZV9jb21wYXRfbmV0LAorfTsKKwogLyoKICAqIFJlbWFpbmluZyBub2RlcyB1c2UgdHJhbnNhY3Rpb24gYmFzZWQgSU8gbWV0aG9kcyBsaWtlIG5mc2QvbmZzY3RsLmMKICAqLwpAQCAtMTIxOSw2ICsxMjg0LDcgQEAKIAkJW1NFTF9ESVNBQkxFXSA9IHsiZGlzYWJsZSIsICZzZWxfZGlzYWJsZV9vcHMsIFNfSVdVU1J9LAogCQlbU0VMX01FTUJFUl0gPSB7Im1lbWJlciIsICZ0cmFuc2FjdGlvbl9vcHMsIFNfSVJVR098U19JV1VHT30sCiAJCVtTRUxfQ0hFQ0tSRVFQUk9UXSA9IHsiY2hlY2tyZXFwcm90IiwgJnNlbF9jaGVja3JlcXByb3Rfb3BzLCBTX0lSVUdPfFNfSVdVU1J9LAorCQlbU0VMX0NPTVBBVF9ORVRdID0geyJjb21wYXRfbmV0IiwgJnNlbF9jb21wYXRfbmV0X29wcywgU19JUlVHT3xTX0lXVVNSfSwKIAkJLyogbGFzdCBvbmUgKi8geyIifQogCX07CiAJcmV0ID0gc2ltcGxlX2ZpbGxfc3VwZXIoc2IsIFNFTElOVVhfTUFHSUMsIHNlbGludXhfZmlsZXMpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGMyODRkYmIuLmU5NTQ4YmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTE5ODAsNyArMTk4MCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVVESVRfU0VfU0VOOgogCWNhc2UgQVVESVRfU0VfQ0xSOgotCQlsZXZlbCA9IChvcCA9PSBBVURJVF9TRV9TRU4gPworCQlsZXZlbCA9IChmaWVsZCA9PSBBVURJVF9TRV9TRU4gPwogCQkgICAgICAgICAmY3R4dC0+cmFuZ2UubGV2ZWxbMF0gOiAmY3R4dC0+cmFuZ2UubGV2ZWxbMV0pOwogCQlzd2l0Y2ggKG9wKSB7CiAJCWNhc2UgQVVESVRfRVFVQUw6CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCmluZGV4IGFiZTk5ZDguLjY2MzNmYjAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCkBAIC0xMzIsMTAgKzEzMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyoKLQkgKiBEb2VzIHRoZSBzdWJqZWN0IGhhdmUgcGVybWlzc2lvbiB0byBzZXQgc2VjdXJpdHkgb3IgcGVybWlzc2lvbiB0bwotCSAqIGRvIHRoZSByZWxhYmVsPwotCSAqIE11c3QgYmUgcGVybWl0dGVkIHRvIHJlbGFiZWwgZnJvbSBkZWZhdWx0IHNvY2tldCB0eXBlIChwcm9jZXNzIHR5cGUpCi0JICogdG8gc3BlY2lmaWVkIGNvbnRleHQKKwkgKiBEb2VzIHRoZSBzdWJqZWN0IGhhdmUgcGVybWlzc2lvbiB0byBzZXQgc2VjdXJpdHkgY29udGV4dD8KIAkgKi8KIAlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGN0eC0+Y3R4X3NpZCwKIAkJCSAgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCkBAIC0yMDEsNiArMTk4LDIzIEBACiB9CiAKIC8qCisgKiBMU00gaG9vayBpbXBsZW1lbnRhdGlvbiB0aGF0IGF1dGhvcml6ZXMgZGVsZXRpb24gb2YgbGFiZWxlZCBwb2xpY2llcy4KKyAqLworaW50IHNlbGludXhfeGZybV9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCit7CisJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3VycmVudC0+c2VjdXJpdHk7CisJc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geHAtPnNlY3VyaXR5OworCWludCByYyA9IDA7CisKKwlpZiAoY3R4KQorCQlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGN0eC0+Y3R4X3NpZCwKKwkJCQkgIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAorCQkJCSAgQVNTT0NJQVRJT05fX1NFVENPTlRFWFQsIE5VTEwpOworCisJcmV0dXJuIHJjOworfQorCisvKgogICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBhbGxvY3MgYW5kIHRyYW5zZmVycyBzZWNfY3R4IHNwZWMgdG8KICAqIHhmcm1fc3RhdGUuCiAgKi8KQEAgLTI5Miw2ICszMDYsMjMgQEAKIAlyZXR1cm4gU0VDU0lEX05VTEw7CiB9CiAKKyAvKgorICAqIExTTSBob29rIGltcGxlbWVudGF0aW9uIHRoYXQgYXV0aG9yaXplcyBkZWxldGlvbiBvZiBsYWJlbGVkIFNBcy4KKyAgKi8KK2ludCBzZWxpbnV4X3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQoreworCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnQtPnNlY3VyaXR5OworCXN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCA9IHgtPnNlY3VyaXR5OworCWludCByYyA9IDA7CisKKwlpZiAoY3R4KQorCQlyYyA9IGF2Y19oYXNfcGVybSh0c2VjLT5zaWQsIGN0eC0+Y3R4X3NpZCwKKwkJCQkgIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAorCQkJCSAgQVNTT0NJQVRJT05fX1NFVENPTlRFWFQsIE5VTEwpOworCisJcmV0dXJuIHJjOworfQorCiAvKgogICogTFNNIGhvb2sgdGhhdCBjb250cm9scyBhY2Nlc3MgdG8gdW5sYWJlbGxlZCBwYWNrZXRzLiAgSWYKICAqIGEgeGZybV9zdGF0ZSBpcyBhdXRob3JpemFibGUgKGRlZmluZWQgYnkgbWFjcm8pIHRoZW4gaXQgd2FzCkBAIC0zNTYsMTggKzM4NywxMiBAQAogCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3RfdGVzdC0+eGZybTsKIAogCQkJaWYgKHggJiYgc2VsaW51eF9hdXRob3JpemFibGVfeGZybSh4KSkKLQkJCQlnb3RvIGFjY2VwdDsKKwkJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCXJjID0gYXZjX2hhc19wZXJtKGlzZWNfc2lkLCBTRUNJTklUU0lEX1VOTEFCRUxFRCwgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCiAJCQkgIEFTU09DSUFUSU9OX19TRU5EVE8sIE5VTEwpOwotCWlmIChyYykKLQkJZ290byBkcm9wOwotCi1hY2NlcHQ6Ci0JcmV0dXJuIE5GX0FDQ0VQVDsKLQotZHJvcDoKLQlyZXR1cm4gTkZfRFJPUDsKK291dDoKKwlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvS2NvbmZpZyBiL3NvdW5kL29zcy9LY29uZmlnCmluZGV4IDU1OGM2ZWQuLjA4MGFiMDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9LY29uZmlnCisrKyBiL3NvdW5kL29zcy9LY29uZmlnCkBAIC05OCw4ICs5OCw4IEBACiAJdHJpc3RhdGUgIlNHSSBIQUwyIHNvdW5kIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgU0dJX0lQMjIgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAotCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhbiBTR0kgSW5keSBzeXN0ZW0gYW5kIHdhbnQgdG8gYmUgYWJsZSB0bwotCSAgdXNlIGl0J3Mgb24tYm9hcmQgQTIgYXVkaW8gc3lzdGVtLgorCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhbiBTR0kgSW5keSBvciBJbmRpZ28yIHN5c3RlbSBhbmQgd2FudCB0byBiZSBhYmxlIHRvCisJICB1c2UgaXRzIG9uLWJvYXJkIEEyIGF1ZGlvIHN5c3RlbS4KIAogY29uZmlnIFNPVU5EX0lUODE3MgogCXRyaXN0YXRlICJJVDgxNzJHIFNvdW5kIgo=